Class: Prism::Merge::Provider
- Inherits:
-
Object
- Object
- Prism::Merge::Provider
- Defined in:
- lib/prism/merge/provider.rb,
sig/prism/merge.rbs
Overview
Base-aware, source-preserving Ruby provider backed by Prism top-level owners. 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, Owner
Constant Summary collapse
- DEFAULT_PROFILE =
:source_preserving
Instance Method Summary collapse
- #analyze(request) ⇒ Ast::Merge::provider_result
- #capabilities ⇒ Ast::Merge::provider_capabilities
- #diff2(request) ⇒ Ast::Merge::provider_result
- #family ⇒ String
- #merge2(request) ⇒ Ast::Merge::provider_result
- #merge3(request) ⇒ Ast::Merge::provider_result
- #provider_id ⇒ String
Instance Method Details
#analyze(request) ⇒ Ast::Merge::provider_result
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/prism/merge/provider.rb', line 29 def analyze(request) document = parse_document(:analyze, request, :source) return document if provider_failure?(document) result( :analyze, request, analysis: { backend: 'prism', valid: true, owners: document.owners.map { |owner| owner_description(owner) } }, verification: { source_parsed: true } ) end |
#capabilities ⇒ Ast::Merge::provider_capabilities
18 19 20 21 22 23 24 25 26 27 |
# File 'lib/prism/merge/provider.rb', line 18 def capabilities { operations: Ast::Merge::ProviderContract::OPERATIONS, dialects: %i[ruby], backends: %i[prism], profiles: [DEFAULT_PROFILE], role: :backend, source_preservation: %i[exact_source owner_fragments line_provenance reparse semantic_verification] }.freeze end |
#diff2(request) ⇒ Ast::Merge::provider_result
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/prism/merge/provider.rb', line 45 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
16 |
# File 'lib/prism/merge/provider.rb', line 16 def family = 'ruby' |
#merge2(request) ⇒ Ast::Merge::provider_result
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/prism/merge/provider.rb', line 62 def merge2(request) merged = Prism::Merge.merge_ruby( request.fetch(:incoming_source), request.fetch(:current_source), 'ruby', backend: request[:backend], add_template_only_nodes: true ) return merge2_failure(request, merged) unless merged[:ok] output = merged.fetch(:output) parsed = parse_source(output, :output) return render_failure(:merge2, request, parsed) if provider_failure?(parsed) result( :merge2, request, output: output, render_report: { strategy: :prism_smart_merger, synthesis: :family_emission }, verification: { output_reparsed: true } ) end |
#merge3(request) ⇒ Ast::Merge::provider_result
85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/prism/merge/provider.rb', line 85 def merge3(request) documents = parse_merge3_documents(request) return documents if provider_failure?(documents) exact_role = exact_revision_role(request) decision = decide(documents, include_unmanaged_conflict: exact_role.nil?) return render_conflicts(request, documents, decision) unless decision.conflicts.empty? return render_exact(request, documents, decision, exact_role) if exact_role render_composite(request, documents, decision) end |
#provider_id ⇒ String
15 |
# File 'lib/prism/merge/provider.rb', line 15 def provider_id = 'ruby.ruby.prism' |