Module: Rbs::Merge

Defined in:
lib/rbs/merge.rb,
lib/rbs/merge/version.rb,
lib/rbs/merge/provider.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/native_projection.rb,
lib/rbs/merge/backends/rbs_backend.rb,
lib/rbs/merge/node_type_normalizer.rb,
lib/rbs/merge/rspec/provider_snapshot_extension.rb,
sig/rbs/merge.rbs

Defined Under Namespace

Modules: Backends, DebugLogger, NativeProjection, NodeTypeNormalizer, RSpec, Version Classes: CommentTracker, ConflictResolver, CorruptionDetectedError, DestinationParseError, Error, FileAligner, FileAnalysis, FreezeNode, MergeResult, NodeWrapper, ParseError, Provider, 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.

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



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

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

.merge_providerProvider



142
143
144
# File 'lib/rbs/merge.rb', line 142

def merge_provider
  @merge_provider ||= Provider.new
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


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
133
# File 'lib/rbs/merge.rb', line 104

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

.register_provider!(replace: false) ⇒ Object



146
147
148
# File 'lib/rbs/merge.rb', line 146

def register_provider!(replace: false)
  Ast::Merge.register_provider(merge_provider, replace: replace)
end