Module: Bash::Merge

Defined in:
lib/bash/merge.rb,
lib/bash/merge/emitter.rb,
lib/bash/merge/version.rb,
lib/bash/merge/provider.rb,
lib/bash/merge/freeze_node.rb,
lib/bash/merge/debug_logger.rb,
lib/bash/merge/merge_result.rb,
lib/bash/merge/node_wrapper.rb,
lib/bash/merge/smart_merger.rb,
lib/bash/merge/file_analysis.rb,
lib/bash/merge/comment_tracker.rb,
sig/bash/merge.rbs

Overview

Registration and source-preserving workflow implementation for Bash.

Defined Under Namespace

Modules: DebugLogger, Version Classes: Availability, CommentTracker, CorruptionDetectedError, DestinationParseError, Emitter, Error, FileAnalysis, FreezeNode, MergeResult, NodeWrapper, ParseError, Provider, SmartMerger, TemplateParseError

Constant Summary collapse

TREE_SITTER_BACKEND =
TreeHaver::KREUZBERG_LANGUAGE_PACK_BACKEND
BACKEND_REGISTRY =
Struct.new(:registered, :mutex).new(false, Mutex.new)
VERSION =

Current gem version exposed at the traditional constant location.

Returns:

  • (String)
Version::VERSION

Class Method Summary collapse

Class Method Details

.availability(source: "#!/usr/bin/env bash\necho hello\n") ⇒ Object



147
148
149
150
151
152
153
154
155
# File 'lib/bash/merge.rb', line 147

def availability(source: "#!/usr/bin/env bash\necho hello\n")
  diagnostics = []
  grammar_path = bash_grammar_path(diagnostics)
  Availability.new(
    grammar_path: grammar_path,
    node_parser: node_parser_available_for?(source, grammar_path, diagnostics),
    diagnostics: diagnostics
  )
end

.available?(source: "#!/usr/bin/env bash\necho hello\n") ⇒ Boolean

Returns:

  • (Boolean)


143
144
145
# File 'lib/bash/merge.rb', line 143

def available?(source: "#!/usr/bin/env bash\necho hello\n")
  availability(source: source).available?
end

.available_bash_backendsObject



139
140
141
# File 'lib/bash/merge.rb', line 139

def available_bash_backends
  bash_backend_available_for_analysis?(TREE_SITTER_BACKEND.id) ? [TREE_SITTER_BACKEND] : []
end

.merge_providerProvider

Returns:



13
14
15
# File 'lib/bash/merge/provider.rb', line 13

def merge_provider
  @merge_provider ||= Provider.new
end

.register_backend!Object



126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/bash/merge.rb', line 126

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

    TreeHaver::BackendRegistry.register(TREE_SITTER_BACKEND)

    grammar_finder = TreeHaver::GrammarFinder.new(:bash)
    grammar_finder.register! if grammar_finder.available?

    BACKEND_REGISTRY.registered = true
  end
end

.register_provider!(replace: false) ⇒ Object

Parameters:

  • replace: (Boolean) (defaults to: false)

Returns:

  • (Object)


17
18
19
20
21
# File 'lib/bash/merge/provider.rb', line 17

def register_provider!(replace: false)
  return unless Ast::Merge.respond_to?(:register_provider)

  Ast::Merge.register_provider(merge_provider, replace: replace)
end