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.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +46 -0
- data/CITATION.cff +20 -0
- data/CODE_OF_CONDUCT.md +134 -0
- data/CONTRIBUTING.md +227 -0
- data/FUNDING.md +74 -0
- data/LICENSE.txt +21 -0
- data/README.md +987 -0
- data/REEK +0 -0
- data/RUBOCOP.md +71 -0
- data/SECURITY.md +21 -0
- data/lib/prism/merge/conflict_resolver.rb +463 -0
- data/lib/prism/merge/file_aligner.rb +381 -0
- data/lib/prism/merge/file_analysis.rb +298 -0
- data/lib/prism/merge/merge_result.rb +176 -0
- data/lib/prism/merge/smart_merger.rb +347 -0
- data/lib/prism/merge/version.rb +12 -0
- data/lib/prism/merge.rb +93 -0
- data/lib/prism-merge.rb +4 -0
- data/sig/prism/merge.rbs +265 -0
- data.tar.gz.sig +6 -0
- metadata +303 -0
- metadata.gz.sig +0 -0
data/sig/prism/merge.rbs
ADDED
|
@@ -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
|