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/comment_tracker.rb,
lib/rbs/merge/conflict_resolver.rb,
lib/rbs/merge/backends/rbs_backend.rb,
lib/rbs/merge/node_type_normalizer.rb,
sig/rbs/merge.rbs

Defined Under Namespace

Modules: Backends, DebugLogger, NodeTypeNormalizer, Version Classes: CommentTracker, ConflictResolver, CorruptionDetectedError, 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)
RBS_BACKEND_REFERENCE =
TreeHaver::BackendReference.new(id: 'rbs', family: 'rbs').freeze
TREE_SITTER_BACKEND_REFERENCE =
TreeHaver::KREUZBERG_LANGUAGE_PACK_BACKEND
VERSION =

Current gem version exposed at the traditional constant location.

Returns:

  • (String)
Version::VERSION
NodeTypingNormalizer =

Alias for the shared normalizer module from ast-merge

Ast::Merge::NodeTyping::Normalizer

Class Method Summary collapse

Class Method Details

.available_rbs_backendsObject



134
135
136
137
138
139
# File 'lib/rbs/merge.rb', line 134

def available_rbs_backends
  backends = [RBS_BACKEND_REFERENCE]
  registrations = TreeHaver.registered_languages(:rbs)
  backends << TREE_SITTER_BACKEND_REFERENCE if registrations.key?(:tree_sitter) || registrations.key?(:tslp)
  backends
end

.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 current RBS parsing entrypoints with TreeHaver.

This registers:

  1. the RBS gem backend
  2. the tree-sitter-rbs grammar when the sibling TreeHaver runtime can load it


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
129
130
131
132
# 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::BackendRegistry.register(RBS_BACKEND_REFERENCE)
    TreeHaver.register_language(
      :rbs,
      backend_module: Backends::RbsBackend,
      backend_type: :rbs,
      gem_name: 'rbs'
    )

    # Also register the tree-sitter-rbs grammar when present.
    grammar_finder = TreeHaver::GrammarFinder.new(:rbs)
    grammar_finder.register! if grammar_finder.available?

    TreeHaver::BackendRegistry.register_tag(:rbs_backend, category: :backend, backend_name: :rbs) do
      Backends::RbsBackend.available?
    end
    TreeHaver::BackendRegistry.register_tag(:rbs_gem, category: :gem, backend_name: :rbs_gem) do
      Backends::RbsBackend.available?
    end
    TreeHaver::BackendRegistry.register_tag(:rbs_grammar, category: :grammar, backend_name: :rbs_grammar) do
      TreeHaver::GrammarFinder.new(:rbs).available?
    end

    BACKEND_REGISTRY.registered = true
  end
end