Module: Rbs::Merge

Defined in:
lib/rbs/merge.rb,
lib/rbs/merge/version.rb,
lib/rbs/merge/freeze_node.rb,
lib/rbs/merge/debug_logger.rb,
lib/rbs/merge/file_aligner.rb,
lib/rbs/merge/merge_result.rb,
lib/rbs/merge/node_wrapper.rb,
lib/rbs/merge/smart_merger.rb,
lib/rbs/merge/file_analysis.rb,
lib/rbs/merge/conflict_resolver.rb,
lib/rbs/merge/backends/rbs_backend.rb,
lib/rbs/merge/node_type_normalizer.rb

Defined Under Namespace

Modules: Backends, DebugLogger, NodeTypeNormalizer, Version Classes: ConflictResolver, DestinationParseError, Error, FileAligner, FileAnalysis, FreezeNode, MergeResult, NodeWrapper, ParseError, SmartMerger, TemplateParseError

Constant Summary collapse

BACKEND_REGISTRY =

Tracks whether backends were registered, without class instance variables.

Struct.new(:registered, :mutex).new(false, Mutex.new)
VERSION =

traditional location

Version::VERSION
NodeTypingNormalizer =

Alias for the shared normalizer module from ast-merge

Ast::Merge::NodeTyping::Normalizer

Class Method Summary collapse

Class Method Details

.register_backend!Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Register the RBS backends with TreeHaver

This registers both:

  1. The RBS gem backend (Ruby-based, MRI only)
  2. The tree-sitter-rbs grammar (if available, works on all platforms)

This allows TreeHaver.parser_for(:rbs) to use whichever backend is
available, with the RBS gem preferred when available.



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/rbs/merge.rb', line 103

def register_backend!
  BACKEND_REGISTRY.mutex.synchronize do
    return if BACKEND_REGISTRY.registered

    # Register the RBS gem backend (for MRI Ruby)
    TreeHaver.register_language(
      :rbs,
      backend_module: Backends::RbsBackend,
      backend_type: :rbs,
      gem_name: "rbs",
    )

    # Also register tree-sitter-rbs grammar if available
    # This enables tree-sitter backends (mri, ffi, rust, java) to parse RBS
    grammar_finder = TreeHaver::GrammarFinder.new(:rbs)
    if grammar_finder.available?
      TreeHaver.register_language(
        :rbs,
        path: grammar_finder.find_library_path,
        symbol: grammar_finder.symbol_name,
      )
    end

    BACKEND_REGISTRY.registered = true
  end
end