prism-merge 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,265 @@
1
+ module Prism
2
+ module Merge
3
+ VERSION: String
4
+
5
+ module Version
6
+ VERSION: String
7
+ end
8
+
9
+ class Error < StandardError
10
+ end
11
+
12
+ class ParseError < Error
13
+ attr_reader content: String
14
+ attr_reader parse_result: untyped
15
+
16
+ def initialize: (String message, content: String, parse_result: untyped) -> void
17
+ end
18
+
19
+ class TemplateParseError < ParseError
20
+ end
21
+
22
+ class DestinationParseError < ParseError
23
+ end
24
+
25
+ class FileAnalysis
26
+ FREEZE_START: Regexp
27
+ FREEZE_END: Regexp
28
+ FREEZE_BLOCK: Regexp
29
+
30
+ type freeze_block = {
31
+ range: Range[Integer],
32
+ line_range: Range[Integer],
33
+ text: String,
34
+ start_marker: String?
35
+ }
36
+
37
+ type node_info = {
38
+ node: untyped,
39
+ index: Integer,
40
+ leading_comments: Array[untyped],
41
+ inline_comments: Array[untyped],
42
+ signature: Array[untyped]?,
43
+ line_range: Range[Integer]
44
+ }
45
+
46
+ attr_reader content: String
47
+ attr_reader parse_result: untyped
48
+ attr_reader lines: Array[String]
49
+ attr_reader statements: Array[untyped]
50
+ attr_reader freeze_blocks: Array[freeze_block]
51
+
52
+ def initialize: (String content, ?signature_generator: (^(untyped) -> Array[untyped])?) -> void
53
+
54
+ def valid?: () -> bool
55
+
56
+ def extract_statements: () -> Array[untyped]
57
+
58
+ def extract_freeze_blocks: () -> Array[freeze_block]
59
+
60
+ def line_to_node_map: () -> Hash[Integer, Array[untyped]]
61
+
62
+ def node_to_line_map: () -> Hash[untyped, Range[Integer]]
63
+
64
+ def nodes_with_comments: () -> Array[node_info]
65
+
66
+ def comment_map: () -> Hash[Integer, Array[untyped]]
67
+
68
+ def signature_at: (Integer index) -> Array[untyped]?
69
+
70
+ def generate_signature: (untyped node) -> Array[untyped]?
71
+
72
+ def in_freeze_block?: (Integer line_num) -> bool
73
+
74
+ def freeze_block_at: (Integer line_num) -> freeze_block?
75
+
76
+ def normalized_line: (Integer line_num) -> String?
77
+
78
+ def line_at: (Integer line_num) -> String?
79
+
80
+ private
81
+
82
+ def build_line_to_node_map: () -> Hash[Integer, Array[untyped]]
83
+
84
+ def build_node_to_line_map: () -> Hash[untyped, Range[Integer]]
85
+
86
+ def extract_nodes_with_comments: () -> Array[node_info]
87
+
88
+ def find_leading_comments: (untyped current_stmt, untyped? prev_stmt, untyped body_node) -> Array[untyped]
89
+
90
+ def inline_comments_for_node: (untyped stmt) -> Array[untyped]
91
+
92
+ def build_comment_map: () -> Hash[Integer, Array[untyped]]
93
+
94
+ def default_signature: (untyped node) -> Array[untyped]
95
+ end
96
+
97
+ class FileAligner
98
+ class Anchor < Struct[untyped]
99
+ attr_accessor template_start: Integer
100
+ attr_accessor template_end: Integer
101
+ attr_accessor dest_start: Integer
102
+ attr_accessor dest_end: Integer
103
+ attr_accessor match_type: Symbol
104
+ attr_accessor score: Integer
105
+
106
+ def template_range: () -> Range[Integer]
107
+
108
+ def dest_range: () -> Range[Integer]
109
+
110
+ def length: () -> Integer
111
+ end
112
+
113
+ class Boundary < Struct[untyped]
114
+ attr_accessor template_range: Range[Integer]?
115
+ attr_accessor dest_range: Range[Integer]?
116
+ attr_accessor prev_anchor: Anchor?
117
+ attr_accessor next_anchor: Anchor?
118
+
119
+ def template_lines: () -> Array[Integer]
120
+
121
+ def dest_lines: () -> Array[Integer]
122
+ end
123
+
124
+ attr_reader template_analysis: FileAnalysis
125
+ attr_reader dest_analysis: FileAnalysis
126
+ attr_reader anchors: Array[Anchor]
127
+ attr_reader boundaries: Array[Boundary]
128
+
129
+ def initialize: (FileAnalysis template_analysis, FileAnalysis dest_analysis) -> void
130
+
131
+ def align: () -> Array[Boundary]
132
+
133
+ private
134
+
135
+ def find_anchors: () -> void
136
+
137
+ def build_line_map: (FileAnalysis analysis) -> Hash[Integer, String]
138
+
139
+ def find_exact_line_matches: (Hash[Integer, String] template_map, Hash[Integer, String] dest_map) -> Array[Hash[Symbol, untyped]]
140
+
141
+ def merge_consecutive_matches: (Array[Hash[Symbol, untyped]] matches) -> Array[Anchor]
142
+
143
+ def add_node_signature_anchors: () -> void
144
+
145
+ def add_freeze_block_anchors: () -> void
146
+
147
+ def compute_boundaries: () -> void
148
+
149
+ def ranges_overlap?: (Range[Integer]? range1, Range[Integer]? range2) -> bool
150
+ end
151
+
152
+ class MergeResult
153
+ DECISION_KEPT_TEMPLATE: Symbol
154
+ DECISION_KEPT_DEST: Symbol
155
+ DECISION_APPENDED: Symbol
156
+ DECISION_REPLACED: Symbol
157
+ DECISION_FREEZE_BLOCK: Symbol
158
+
159
+ type line_metadata = {
160
+ decision: Symbol,
161
+ template_line: Integer?,
162
+ dest_line: Integer?,
163
+ comment: String?,
164
+ result_line: Integer
165
+ }
166
+
167
+ attr_reader lines: Array[String]
168
+ attr_reader line_metadata: Array[line_metadata]
169
+
170
+ def initialize: () -> void
171
+
172
+ def add_line: (String content, decision: Symbol, ?template_line: Integer?, ?dest_line: Integer?, ?comment: String?) -> void
173
+
174
+ def add_lines_from: (Array[String] source_lines, decision: Symbol, source: Symbol, start_line: Integer, ?comment: String?) -> void
175
+
176
+ def add_node: (FileAnalysis::node_info node_info, decision: Symbol, source: Symbol, ?source_analysis: FileAnalysis?) -> void
177
+
178
+ def to_s: () -> String
179
+
180
+ def statistics: () -> Hash[Symbol, Integer]
181
+
182
+ def lines_by_decision: (Symbol decision) -> Array[line_metadata]
183
+
184
+ def debug_output: () -> String
185
+ end
186
+
187
+ class ConflictResolver
188
+ type boundary_content = {
189
+ lines: Array[String],
190
+ nodes: Array[FileAnalysis::node_info],
191
+ has_freeze_block: bool,
192
+ line_range: Range[Integer]?
193
+ }
194
+
195
+ attr_reader template_analysis: FileAnalysis
196
+ attr_reader dest_analysis: FileAnalysis
197
+ attr_reader signature_match_preference: Symbol
198
+ attr_reader add_template_only_nodes: bool
199
+
200
+ def initialize: (FileAnalysis template_analysis, FileAnalysis dest_analysis, ?signature_match_preference: Symbol, ?add_template_only_nodes: bool) -> void
201
+
202
+ def resolve: (FileAligner::Boundary boundary, MergeResult result) -> void
203
+
204
+ private
205
+
206
+ def extract_boundary_content: (FileAnalysis analysis, Range[Integer]? line_range) -> boundary_content
207
+
208
+ def ranges_overlap?: (Range[Integer] range1, Range[Integer] range2) -> bool
209
+
210
+ def add_content_to_result: (boundary_content content, MergeResult result, Symbol source, Symbol decision) -> void
211
+
212
+ def merge_boundary_content: (boundary_content template_content, boundary_content dest_content, FileAligner::Boundary boundary, MergeResult result) -> void
213
+
214
+ def build_signature_map: (Array[FileAnalysis::node_info] nodes) -> Hash[Array[untyped], Array[FileAnalysis::node_info]]
215
+
216
+ def add_line_safe: (MergeResult result, String content, **untyped kwargs) -> void
217
+
218
+ def handle_orphan_lines: (boundary_content template_content, boundary_content dest_content, MergeResult result) -> void
219
+
220
+ def find_orphan_lines: (FileAnalysis analysis, Range[Integer]? line_range, Array[FileAnalysis::node_info] nodes) -> Array[Integer]
221
+ end
222
+
223
+ class SmartMerger
224
+ attr_reader template_analysis: FileAnalysis
225
+ attr_reader dest_analysis: FileAnalysis
226
+ attr_reader aligner: FileAligner
227
+ attr_reader resolver: ConflictResolver
228
+ attr_reader result: MergeResult
229
+
230
+ type merge_debug_result = {
231
+ content: String,
232
+ debug: String,
233
+ statistics: Hash[Symbol, Integer]
234
+ }
235
+
236
+ def initialize: (
237
+ String template_content,
238
+ String dest_content,
239
+ ?signature_generator: (^(untyped) -> Array[untyped])?,
240
+ ?signature_match_preference: Symbol,
241
+ ?add_template_only_nodes: bool
242
+ ) -> void
243
+
244
+ def merge: () -> String
245
+
246
+ def merge_with_debug: () -> merge_debug_result
247
+
248
+ private
249
+
250
+ def process_merge: (Array[FileAligner::Boundary] boundaries) -> void
251
+
252
+ def build_timeline: (Array[FileAligner::Boundary] boundaries) -> Array[Hash[Symbol, untyped]]
253
+
254
+ def process_anchor: (FileAligner::Anchor anchor) -> void
255
+
256
+ def add_freeze_block_from_dest: (FileAligner::Anchor anchor) -> void
257
+
258
+ def add_signature_match_from_dest: (FileAligner::Anchor anchor) -> void
259
+
260
+ def add_exact_match_from_template: (FileAligner::Anchor anchor) -> void
261
+
262
+ def process_boundary: (FileAligner::Boundary boundary) -> void
263
+ end
264
+ end
265
+ end
data.tar.gz.sig ADDED
@@ -0,0 +1,6 @@
1
+ ���0&H7E�q6פ�GWx�q���Le�VA\�����
2
+ �����|]�{r�]T�Ol5h@���lt`���)��б H2Hx�q�5K՟�B���
3
+ W�N '���/�=�Q:���L�Ai{� 1=^�gD:�����u;���;B�e�(�nIc��I�搢������iu�N�ȤL����=�U� X/pH�x[��iH*>Y�n%
4
+ �5�D'�]���B*mn!�2��I]j���"�Pb4\�y�3�9�<3dBH��pK�~ ��=W�>���7�����qg�m�&D��>�jn�'��8��4s|���_"
5
+ +����m��o���3�x��6a�RW��zXI�2�۲��
6
+ G����*�[r}K
metadata ADDED
@@ -0,0 +1,303 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: prism-merge
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Peter H. Boling
8
+ bindir: exe
9
+ cert_chain:
10
+ - |
11
+ -----BEGIN CERTIFICATE-----
12
+ MIIEgDCCAuigAwIBAgIBATANBgkqhkiG9w0BAQsFADBDMRUwEwYDVQQDDAxwZXRl
13
+ ci5ib2xpbmcxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkW
14
+ A2NvbTAeFw0yNTA1MDQxNTMzMDlaFw00NTA0MjkxNTMzMDlaMEMxFTATBgNVBAMM
15
+ DHBldGVyLmJvbGluZzEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPy
16
+ LGQBGRYDY29tMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAruUoo0WA
17
+ uoNuq6puKWYeRYiZekz/nsDeK5x/0IEirzcCEvaHr3Bmz7rjo1I6On3gGKmiZs61
18
+ LRmQ3oxy77ydmkGTXBjruJB+pQEn7UfLSgQ0xa1/X3kdBZt6RmabFlBxnHkoaGY5
19
+ mZuZ5+Z7walmv6sFD9ajhzj+oIgwWfnEHkXYTR8I6VLN7MRRKGMPoZ/yvOmxb2DN
20
+ coEEHWKO9CvgYpW7asIihl/9GMpKiRkcYPm9dGQzZc6uTwom1COfW0+ZOFrDVBuV
21
+ FMQRPswZcY4Wlq0uEBLPU7hxnCL9nKK6Y9IhdDcz1mY6HZ91WImNslOSI0S8hRpj
22
+ yGOWxQIhBT3fqCBlRIqFQBudrnD9jSNpSGsFvbEijd5ns7Z9ZMehXkXDycpGAUj1
23
+ to/5cuTWWw1JqUWrKJYoifnVhtE1o1DZ+LkPtWxHtz5kjDG/zR3MG0Ula0UOavlD
24
+ qbnbcXPBnwXtTFeZ3C+yrWpE4pGnl3yGkZj9SMTlo9qnTMiPmuWKQDatAgMBAAGj
25
+ fzB9MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQE8uWvNbPVNRXZ
26
+ HlgPbc2PCzC4bjAhBgNVHREEGjAYgRZwZXRlci5ib2xpbmdAZ21haWwuY29tMCEG
27
+ A1UdEgQaMBiBFnBldGVyLmJvbGluZ0BnbWFpbC5jb20wDQYJKoZIhvcNAQELBQAD
28
+ ggGBAJbnUwfJQFPkBgH9cL7hoBfRtmWiCvdqdjeTmi04u8zVNCUox0A4gT982DE9
29
+ wmuN12LpdajxZONqbXuzZvc+nb0StFwmFYZG6iDwaf4BPywm2e/Vmq0YG45vZXGR
30
+ L8yMDSK1cQXjmA+ZBKOHKWavxP6Vp7lWvjAhz8RFwqF9GuNIdhv9NpnCAWcMZtpm
31
+ GUPyIWw/Cw/2wZp74QzZj6Npx+LdXoLTF1HMSJXZ7/pkxLCsB8m4EFVdb/IrW/0k
32
+ kNSfjtAfBHO8nLGuqQZVH9IBD1i9K6aSs7pT6TW8itXUIlkIUI2tg5YzW6OFfPzq
33
+ QekSkX3lZfY+HTSp/o+YvKkqWLUV7PQ7xh1ZYDtocpaHwgxe/j3bBqHE+CUPH2vA
34
+ 0V/FwdTRWcwsjVoOJTrYcff8pBZ8r2MvtAc54xfnnhGFzeRHfcltobgFxkAXdE6p
35
+ DVjBtqT23eugOqQ73umLcYDZkc36vnqGxUBSsXrzY9pzV5gGr2I8YUxMqf6ATrZt
36
+ L9nRqA==
37
+ -----END CERTIFICATE-----
38
+ date: 1980-01-02 00:00:00.000000000 Z
39
+ dependencies:
40
+ - !ruby/object:Gem::Dependency
41
+ name: prism
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.6'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.6'
54
+ - !ruby/object:Gem::Dependency
55
+ name: version_gem
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.1'
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: 1.1.9
64
+ type: :runtime
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: '1.1'
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: 1.1.9
74
+ - !ruby/object:Gem::Dependency
75
+ name: kettle-dev
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: 1.1.60
81
+ type: :development
82
+ prerelease: false
83
+ version_requirements: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: 1.1.60
88
+ - !ruby/object:Gem::Dependency
89
+ name: bundler-audit
90
+ requirement: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: 0.9.2
95
+ type: :development
96
+ prerelease: false
97
+ version_requirements: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: 0.9.2
102
+ - !ruby/object:Gem::Dependency
103
+ name: rake
104
+ requirement: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: '13.0'
109
+ type: :development
110
+ prerelease: false
111
+ version_requirements: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - "~>"
114
+ - !ruby/object:Gem::Version
115
+ version: '13.0'
116
+ - !ruby/object:Gem::Dependency
117
+ name: require_bench
118
+ requirement: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - "~>"
121
+ - !ruby/object:Gem::Version
122
+ version: '1.0'
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: 1.0.4
126
+ type: :development
127
+ prerelease: false
128
+ version_requirements: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: '1.0'
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ version: 1.0.4
136
+ - !ruby/object:Gem::Dependency
137
+ name: appraisal2
138
+ requirement: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - "~>"
141
+ - !ruby/object:Gem::Version
142
+ version: '3.0'
143
+ type: :development
144
+ prerelease: false
145
+ version_requirements: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - "~>"
148
+ - !ruby/object:Gem::Version
149
+ version: '3.0'
150
+ - !ruby/object:Gem::Dependency
151
+ name: kettle-test
152
+ requirement: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - "~>"
155
+ - !ruby/object:Gem::Version
156
+ version: '1.0'
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: 1.0.6
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '1.0'
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ version: 1.0.6
170
+ - !ruby/object:Gem::Dependency
171
+ name: ruby-progressbar
172
+ requirement: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - "~>"
175
+ - !ruby/object:Gem::Version
176
+ version: '1.13'
177
+ type: :development
178
+ prerelease: false
179
+ version_requirements: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - "~>"
182
+ - !ruby/object:Gem::Version
183
+ version: '1.13'
184
+ - !ruby/object:Gem::Dependency
185
+ name: stone_checksums
186
+ requirement: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - "~>"
189
+ - !ruby/object:Gem::Version
190
+ version: '1.0'
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: 1.0.2
194
+ type: :development
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - "~>"
199
+ - !ruby/object:Gem::Version
200
+ version: '1.0'
201
+ - - ">="
202
+ - !ruby/object:Gem::Version
203
+ version: 1.0.2
204
+ - !ruby/object:Gem::Dependency
205
+ name: gitmoji-regex
206
+ requirement: !ruby/object:Gem::Requirement
207
+ requirements:
208
+ - - "~>"
209
+ - !ruby/object:Gem::Version
210
+ version: '1.0'
211
+ - - ">="
212
+ - !ruby/object:Gem::Version
213
+ version: 1.0.3
214
+ type: :development
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ requirements:
218
+ - - "~>"
219
+ - !ruby/object:Gem::Version
220
+ version: '1.0'
221
+ - - ">="
222
+ - !ruby/object:Gem::Version
223
+ version: 1.0.3
224
+ description: "☯️ Intelligently merge two versions of a Ruby file using Prism AST analysis,
225
+ similar to a smart 'git merge' specifically designed for Ruby code."
226
+ email:
227
+ - peter.boling@gmail.com
228
+ executables: []
229
+ extensions: []
230
+ extra_rdoc_files:
231
+ - CHANGELOG.md
232
+ - CITATION.cff
233
+ - CODE_OF_CONDUCT.md
234
+ - CONTRIBUTING.md
235
+ - FUNDING.md
236
+ - LICENSE.txt
237
+ - README.md
238
+ - REEK
239
+ - RUBOCOP.md
240
+ - SECURITY.md
241
+ files:
242
+ - CHANGELOG.md
243
+ - CITATION.cff
244
+ - CODE_OF_CONDUCT.md
245
+ - CONTRIBUTING.md
246
+ - FUNDING.md
247
+ - LICENSE.txt
248
+ - README.md
249
+ - REEK
250
+ - RUBOCOP.md
251
+ - SECURITY.md
252
+ - lib/prism-merge.rb
253
+ - lib/prism/merge.rb
254
+ - lib/prism/merge/conflict_resolver.rb
255
+ - lib/prism/merge/file_aligner.rb
256
+ - lib/prism/merge/file_analysis.rb
257
+ - lib/prism/merge/merge_result.rb
258
+ - lib/prism/merge/smart_merger.rb
259
+ - lib/prism/merge/version.rb
260
+ - sig/prism/merge.rbs
261
+ homepage: https://github.com/kettle-rb/prism-merge
262
+ licenses:
263
+ - MIT
264
+ metadata:
265
+ homepage_uri: https://prism-merge.galtzo.com/
266
+ source_code_uri: https://github.com/kettle-rb/prism-merge/tree/v1.0.0
267
+ changelog_uri: https://github.com/kettle-rb/prism-merge/blob/v1.0.0/CHANGELOG.md
268
+ bug_tracker_uri: https://github.com/kettle-rb/prism-merge/issues
269
+ documentation_uri: https://www.rubydoc.info/gems/prism-merge/1.0.0
270
+ funding_uri: https://github.com/sponsors/pboling
271
+ wiki_uri: https://github.com/kettle-rb/prism-merge/wiki
272
+ news_uri: https://www.railsbling.com/tags/prism-merge
273
+ discord_uri: https://discord.gg/3qme4XHNKN
274
+ rubygems_mfa_required: 'true'
275
+ rdoc_options:
276
+ - "--title"
277
+ - prism-merge - ☯️ Intelligently merge two versions of a Ruby file using Prism AST
278
+ analysis, useful in templating
279
+ - "--main"
280
+ - README.md
281
+ - "--exclude"
282
+ - "^sig/"
283
+ - "--line-numbers"
284
+ - "--inline-source"
285
+ - "--quiet"
286
+ require_paths:
287
+ - lib
288
+ required_ruby_version: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - ">="
291
+ - !ruby/object:Gem::Version
292
+ version: 2.7.0
293
+ required_rubygems_version: !ruby/object:Gem::Requirement
294
+ requirements:
295
+ - - ">="
296
+ - !ruby/object:Gem::Version
297
+ version: '0'
298
+ requirements: []
299
+ rubygems_version: 3.7.2
300
+ specification_version: 4
301
+ summary: "☯️ Intelligently merge two versions of a Ruby file using Prism AST analysis,
302
+ useful in templating"
303
+ test_files: []
metadata.gz.sig ADDED
Binary file