Class: Bash::Merge::Provider
- Inherits:
-
Object
- Object
- Bash::Merge::Provider
show all
- Defined in:
- lib/bash/merge/provider.rb,
sig/bash/merge.rbs
Overview
Base-aware, source-preserving provider for native top-level Bash owners.
Functions and assignments have stable AST identities. Every other
top-level form must remain identical across all revisions in a composite.
rubocop:disable Metrics/AbcSize, Metrics/ClassLength, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/ParameterLists, Metrics/PerceivedComplexity -- provider decisions, source plans, and verification form one boundary
Defined Under Namespace
Classes: Decision, Document, ExactDocument, Owner
Constant Summary
collapse
- DEFAULT_PROFILE =
:source_preserving
Instance Method Summary
collapse
Instance Method Details
#analyze(request) ⇒ Hash[Symbol, untyped]
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# File 'lib/bash/merge/provider.rb', line 50
def analyze(request)
document = parse_document(:analyze, request, :source)
return document if provider_failure?(document)
result(
:analyze,
request,
analysis: {
backend: TREE_SITTER_BACKEND.id,
valid: true,
declarations: document.owners.map { |owner| owner_description(owner) }
},
verification: { source_parsed: true }
)
end
|
#capabilities ⇒ Hash[Symbol, untyped]
38
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/bash/merge/provider.rb', line 38
def capabilities
{
operations: Ast::Merge::ProviderContract::OPERATIONS,
dialects: %i[bash],
backends: [TREE_SITTER_BACKEND.id.to_sym],
profiles: [DEFAULT_PROFILE],
role: :workflow,
ast_ownership: :stable_functions_and_assignments,
source_preservation: %i[exact_source declaration_fragments line_provenance reparse semantic_verification]
}.freeze
end
|
#diff2(request) ⇒ Hash[Symbol, untyped]
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
# File 'lib/bash/merge/provider.rb', line 66
def diff2(request)
before = parse_document(:diff2, request, :before)
return before if provider_failure?(before)
after = parse_document(:diff2, request, :after)
return after if provider_failure?(after)
changes = diff_documents(before, after)
result(
:diff2,
request,
diff: { changes: changes },
changes: changes,
verification: { before_parsed: true, after_parsed: true }
)
end
|
#family ⇒ String
36
|
# File 'lib/bash/merge/provider.rb', line 36
def family = 'bash'
|
#merge2(request) ⇒ Hash[Symbol, untyped]
83
84
85
86
87
88
89
90
91
92
93
94
|
# File 'lib/bash/merge/provider.rb', line 83
def merge2(request)
merge3_request = request.merge(
base_source: request.fetch(:current_source),
ours_source: request.fetch(:current_source),
theirs_source: request.fetch(:incoming_source)
)
merged = merge3(merge3_request)
merged.merge(
operation: :merge2,
verification: merged.fetch(:verification).except(:base_participated)
)
end
|
#merge3(request) ⇒ Hash[Symbol, untyped]
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
# File 'lib/bash/merge/provider.rb', line 96
def merge3(request)
exact_role = exact_revision_role(request)
return merge3_exact(request, exact_role) if exact_role
documents = parse_merge3_documents(request)
return documents if provider_failure?(documents)
ownership_failure = unstable_ownership_failure(request, documents)
return ownership_failure if ownership_failure
decision = decide(documents, include_unmanaged_conflict: true)
return render_conflicts(request, documents, decision) unless decision.conflicts.empty?
render_composite(request, documents, decision)
end
|
#provider_id ⇒ String
35
|
# File 'lib/bash/merge/provider.rb', line 35
def provider_id = 'ruby.bash'
|