Class: Markdown::Merge::SourcePreservingProvider
- Inherits:
-
Object
- Object
- Markdown::Merge::SourcePreservingProvider
show all
- Defined in:
- lib/markdown/merge/source_preserving_provider.rb,
sig/markdown/merge.rbs
Overview
Base-aware source-preserving provider for a deliberately small Markdown
subset: complete documents partitioned by unique, same-level ATX headings.
rubocop:disable Metrics/AbcSize, Metrics/ClassLength, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/ParameterLists, Metrics/PerceivedComplexity -- parsing, ownership, rendering, and verification are one safety boundary
Defined Under Namespace
Classes: Decision, Document, ExactDocument, Owner
Constant Summary
collapse
- DEFAULT_PROFILE =
:source_preserving
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of SourcePreservingProvider.
146
147
148
149
150
|
# File 'lib/markdown/merge/source_preserving_provider.rb', line 146
def initialize(provider_id:, role:, backend:)
@provider_id = provider_id
@role = role.to_sym
@backend = backend
end
|
Instance Attribute Details
Returns the value of attribute backend.
144
145
146
|
# File 'lib/markdown/merge/source_preserving_provider.rb', line 144
def backend
@backend
end
|
#provider_id ⇒ String
Returns the value of attribute provider_id.
144
145
146
|
# File 'lib/markdown/merge/source_preserving_provider.rb', line 144
def provider_id
@provider_id
end
|
Instance Method Details
#analyze(request) ⇒ Hash[Symbol, untyped]
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
|
# File 'lib/markdown/merge/source_preserving_provider.rb', line 166
def analyze(request)
document = parse_document(:analyze, request, :source)
return document if provider_failure?(document)
result(
:analyze,
request,
analysis: {
backend: backend.id,
delegated_backend: backend.id,
valid: true,
owners: document.owners.map { |owner| owner_description(owner) }
},
verification: { source_parsed: true, ast_headings_verified: true }
)
end
|
#capabilities ⇒ Hash[Symbol, untyped]
154
155
156
157
158
159
160
161
162
163
164
|
# File 'lib/markdown/merge/source_preserving_provider.rb', line 154
def capabilities
{
operations: Ast::Merge::ProviderContract::OPERATIONS,
dialects: backend.dialects,
backends: [backend.id],
profiles: [DEFAULT_PROFILE],
role: @role,
ast_ownership: :unique_same_level_atx_heading_sections,
source_preservation: %i[exact_source exact_fragments byte_provenance reparse semantic_verification]
}.freeze
end
|
#diff2(request) ⇒ Hash[Symbol, untyped]
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
|
# File 'lib/markdown/merge/source_preserving_provider.rb', line 183
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, ast_headings_verified: true }
)
end
|
#family ⇒ String
152
|
# File 'lib/markdown/merge/source_preserving_provider.rb', line 152
def family = 'markdown'
|
#merge2(request) ⇒ Hash[Symbol, untyped]
200
201
202
203
204
205
206
207
208
209
|
# File 'lib/markdown/merge/source_preserving_provider.rb', line 200
def merge2(request)
merged = merge3(
request.merge(
base_source: request.fetch(:current_source),
ours_source: request.fetch(:current_source),
theirs_source: request.fetch(:incoming_source)
)
)
merged.merge(operation: :merge2, verification: merged.fetch(:verification).except(:base_participated))
end
|
#merge3(request) ⇒ Hash[Symbol, untyped]
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
|
# File 'lib/markdown/merge/source_preserving_provider.rb', line 211
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)
identity_failure = changed_identity_failure(request, documents)
return identity_failure if identity_failure
decision = decide(documents)
return render_conflicts(request, documents, decision) unless decision.conflicts.empty?
render_composite(request, documents, decision)
end
|