typescript-merge 7.1.1 → 7.1.4
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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +3 -11
- data/lib/typescript/merge/file_analysis.rb +78 -0
- data/lib/typescript/merge/node_wrapper.rb +224 -0
- data/lib/typescript/merge/provider.rb +953 -0
- data/lib/typescript/merge/version.rb +1 -1
- data/lib/typescript/merge.rb +49 -64
- data/sig/typescript/merge.rbs +46 -0
- data.tar.gz.sig +0 -0
- metadata +23 -20
- metadata.gz.sig +0 -0
|
@@ -5,7 +5,7 @@ module TypeScript
|
|
|
5
5
|
# Version namespace for this gem.
|
|
6
6
|
module Version
|
|
7
7
|
# Current gem version.
|
|
8
|
-
VERSION = '7.1.
|
|
8
|
+
VERSION = '7.1.4'
|
|
9
9
|
end
|
|
10
10
|
# Current gem version exposed at the traditional constant location.
|
|
11
11
|
VERSION = Version::VERSION # Traditional Constant Location
|
data/lib/typescript/merge.rb
CHANGED
|
@@ -13,6 +13,10 @@ module TypeScript
|
|
|
13
13
|
DESTINATION_WINS_ARRAY_POLICY = { surface: 'array', name: 'destination_wins_array' }.freeze
|
|
14
14
|
BACKEND_REGISTRY = Struct.new(:registered, :mutex).new(false, Mutex.new)
|
|
15
15
|
|
|
16
|
+
autoload :NodeWrapper, 'typescript/merge/node_wrapper'
|
|
17
|
+
autoload :FileAnalysis, 'typescript/merge/file_analysis'
|
|
18
|
+
autoload :Provider, 'typescript/merge/provider'
|
|
19
|
+
|
|
16
20
|
def register_backend!
|
|
17
21
|
BACKEND_REGISTRY.mutex.synchronize do
|
|
18
22
|
return if BACKEND_REGISTRY.registered
|
|
@@ -21,13 +25,23 @@ module TypeScript
|
|
|
21
25
|
|
|
22
26
|
grammar_finder = TreeHaver::GrammarFinder.new(:typescript)
|
|
23
27
|
grammar_finder.register! if grammar_finder.available?
|
|
28
|
+
TreeHaver.register_language(
|
|
29
|
+
:tsx,
|
|
30
|
+
backend_module: TreeHaver::Backends::Tslp,
|
|
31
|
+
backend_type: :tslp,
|
|
32
|
+
gem_name: 'tree_sitter_language_pack'
|
|
33
|
+
)
|
|
24
34
|
|
|
25
35
|
BACKEND_REGISTRY.registered = true
|
|
26
36
|
end
|
|
27
37
|
end
|
|
28
38
|
|
|
29
39
|
def type_script_feature_profile
|
|
30
|
-
{
|
|
40
|
+
{
|
|
41
|
+
family: 'typescript',
|
|
42
|
+
supported_dialects: %w[typescript tsx],
|
|
43
|
+
supported_policies: [DESTINATION_WINS_ARRAY_POLICY]
|
|
44
|
+
}
|
|
31
45
|
end
|
|
32
46
|
|
|
33
47
|
def available_type_script_backends
|
|
@@ -66,7 +80,7 @@ module TypeScript
|
|
|
66
80
|
diagnostic_backend = TreeHaver.current_backend_id || 'tree-sitter'
|
|
67
81
|
return unsupported_feature_result("Unsupported TypeScript backend #{diagnostic_backend}.")
|
|
68
82
|
end
|
|
69
|
-
return analyze_type_script_module(source
|
|
83
|
+
return analyze_type_script_module(source, dialect: dialect) if %w[typescript tsx].include?(dialect)
|
|
70
84
|
|
|
71
85
|
{ ok: false,
|
|
72
86
|
diagnostics: [{ severity: 'error', category: 'unsupported_feature', message: "Unsupported TypeScript dialect #{dialect}." }], policies: [] }
|
|
@@ -97,6 +111,16 @@ module TypeScript
|
|
|
97
111
|
Ast::Merge::OwnerSelection.match_by_path(template, destination)
|
|
98
112
|
end
|
|
99
113
|
|
|
114
|
+
def merge_provider
|
|
115
|
+
@merge_provider ||= Provider.new
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def register_provider!(replace: false)
|
|
119
|
+
return unless Ast::Merge.respond_to?(:register_provider)
|
|
120
|
+
|
|
121
|
+
Ast::Merge.register_provider(merge_provider, replace: replace)
|
|
122
|
+
end
|
|
123
|
+
|
|
100
124
|
def merge_type_script(template_source, destination_source, dialect)
|
|
101
125
|
template = parse_type_script(template_source, dialect)
|
|
102
126
|
return { ok: false, diagnostics: template[:diagnostics], policies: [] } unless template[:ok]
|
|
@@ -125,33 +149,28 @@ module TypeScript
|
|
|
125
149
|
policies: [DESTINATION_WINS_ARRAY_POLICY] }
|
|
126
150
|
end
|
|
127
151
|
|
|
128
|
-
def analyze_type_script_module(source)
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
collect_parse_errors(tree.root_node)
|
|
152
|
+
def analyze_type_script_module(source, dialect: 'typescript')
|
|
153
|
+
analysis = FileAnalysis.new(source, dialect: dialect)
|
|
154
|
+
raise analysis.errors.first unless analysis.errors.empty?
|
|
132
155
|
|
|
133
156
|
imports = []
|
|
134
157
|
declarations = []
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
import_source = line_anchored_slice(source, node)
|
|
158
|
+
analysis.declarations.each do |wrapper|
|
|
159
|
+
signature = wrapper.signature
|
|
160
|
+
if signature.first == :import
|
|
139
161
|
imports << {
|
|
140
162
|
path: "/imports/#{imports.length}",
|
|
141
163
|
owner_kind: 'import',
|
|
142
|
-
match_key:
|
|
143
|
-
text:
|
|
164
|
+
match_key: legacy_import_key(signature),
|
|
165
|
+
text: "#{wrapper.source_text}\n"
|
|
144
166
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
name = first_named_descendant_text(source, node, %w[identifier type_identifier])
|
|
148
|
-
next unless name
|
|
149
|
-
|
|
167
|
+
else
|
|
168
|
+
name = legacy_declaration_key(signature)
|
|
150
169
|
declarations << {
|
|
151
170
|
path: "/declarations/#{name}",
|
|
152
171
|
owner_kind: 'declaration',
|
|
153
172
|
match_key: name,
|
|
154
|
-
text:
|
|
173
|
+
text: "#{wrapper.source_text}\n"
|
|
155
174
|
}
|
|
156
175
|
end
|
|
157
176
|
end
|
|
@@ -161,7 +180,7 @@ module TypeScript
|
|
|
161
180
|
diagnostics: [],
|
|
162
181
|
analysis: {
|
|
163
182
|
kind: 'typescript',
|
|
164
|
-
dialect:
|
|
183
|
+
dialect: dialect,
|
|
165
184
|
imports: imports,
|
|
166
185
|
declarations: declarations,
|
|
167
186
|
owners: owner_views(imports + declarations)
|
|
@@ -173,14 +192,18 @@ module TypeScript
|
|
|
173
192
|
end
|
|
174
193
|
private_class_method :analyze_type_script_module
|
|
175
194
|
|
|
176
|
-
def
|
|
177
|
-
|
|
178
|
-
|
|
195
|
+
def legacy_declaration_key(signature)
|
|
196
|
+
nested = signature.first == :export_declaration ? signature.fetch(1) : signature
|
|
197
|
+
value = nested.last
|
|
198
|
+
value.is_a?(Array) ? value.join(',') : value
|
|
199
|
+
end
|
|
200
|
+
private_class_method :legacy_declaration_key
|
|
179
201
|
|
|
180
|
-
|
|
181
|
-
|
|
202
|
+
def legacy_import_key(signature)
|
|
203
|
+
literal = signature.fetch(1)
|
|
204
|
+
literal.byteslice(1...-1).to_s
|
|
182
205
|
end
|
|
183
|
-
private_class_method :
|
|
206
|
+
private_class_method :legacy_import_key
|
|
184
207
|
|
|
185
208
|
def parse_failure_result(error)
|
|
186
209
|
{ ok: false,
|
|
@@ -189,23 +212,6 @@ module TypeScript
|
|
|
189
212
|
end
|
|
190
213
|
private_class_method :parse_failure_result
|
|
191
214
|
|
|
192
|
-
def normalize_type_script_import_path(import_source)
|
|
193
|
-
match = import_source.match(/from\s+['"]([^'"]+)['"]/) || import_source.match(/import\s+['"]([^'"]+)['"]/)
|
|
194
|
-
match ? match[1] : import_source.sub(/\Aimport\s+/, '').strip
|
|
195
|
-
end
|
|
196
|
-
private_class_method :normalize_type_script_import_path
|
|
197
|
-
|
|
198
|
-
def first_named_descendant_text(source, node, types)
|
|
199
|
-
return slice_span(source, node) if types.include?(node.type)
|
|
200
|
-
|
|
201
|
-
node.children.each do |child|
|
|
202
|
-
value = first_named_descendant_text(source, child, types)
|
|
203
|
-
return value if value && !value.empty?
|
|
204
|
-
end
|
|
205
|
-
nil
|
|
206
|
-
end
|
|
207
|
-
private_class_method :first_named_descendant_text
|
|
208
|
-
|
|
209
215
|
def owner_view(item)
|
|
210
216
|
item.slice(:path, :owner_kind, :match_key)
|
|
211
217
|
end
|
|
@@ -217,28 +223,6 @@ module TypeScript
|
|
|
217
223
|
end
|
|
218
224
|
private_class_method :owner_views
|
|
219
225
|
|
|
220
|
-
def import_text(source, span)
|
|
221
|
-
"#{slice_span(source, span)}\n"
|
|
222
|
-
end
|
|
223
|
-
private_class_method :import_text
|
|
224
|
-
|
|
225
|
-
def declaration_text(source, span)
|
|
226
|
-
"#{line_anchored_slice(source, span)}\n"
|
|
227
|
-
end
|
|
228
|
-
private_class_method :declaration_text
|
|
229
|
-
|
|
230
|
-
def slice_span(source, span)
|
|
231
|
-
source[span.start_byte...span.end_byte].strip
|
|
232
|
-
end
|
|
233
|
-
private_class_method :slice_span
|
|
234
|
-
|
|
235
|
-
def line_anchored_slice(source, span)
|
|
236
|
-
line_start = source.rindex("\n", [span.start_byte - 1, 0].max)
|
|
237
|
-
line_start = line_start ? line_start + 1 : 0
|
|
238
|
-
source[line_start...span.end_byte].strip
|
|
239
|
-
end
|
|
240
|
-
private_class_method :line_anchored_slice
|
|
241
|
-
|
|
242
226
|
def unsupported_feature_result(message)
|
|
243
227
|
{
|
|
244
228
|
ok: false,
|
|
@@ -251,3 +235,4 @@ module TypeScript
|
|
|
251
235
|
end
|
|
252
236
|
|
|
253
237
|
TypeScript::Merge.register_backend!
|
|
238
|
+
TypeScript::Merge.register_provider!
|
data/sig/typescript/merge.rbs
CHANGED
|
@@ -1,5 +1,51 @@
|
|
|
1
1
|
module TypeScript
|
|
2
2
|
module Merge
|
|
3
|
+
class NodeWrapper
|
|
4
|
+
DECLARATION_TYPES: Array[String]
|
|
5
|
+
NAMED_DECLARATIONS: Hash[String, [Symbol, Array[String]]]
|
|
6
|
+
|
|
7
|
+
attr_reader node: untyped
|
|
8
|
+
attr_reader source: String
|
|
9
|
+
attr_reader leading_comments: Array[untyped]
|
|
10
|
+
attr_reader trailing_comments: Array[untyped]
|
|
11
|
+
|
|
12
|
+
def initialize: (untyped node, source: String, ?leading_comments: Array[untyped]) -> void
|
|
13
|
+
def signature: () -> Array[untyped]
|
|
14
|
+
def membership_signature: () -> Array[untyped]
|
|
15
|
+
def grouped?: () -> bool
|
|
16
|
+
def start_byte: () -> Integer
|
|
17
|
+
def end_byte: () -> Integer
|
|
18
|
+
def start_line: () -> Integer
|
|
19
|
+
def end_line: () -> Integer
|
|
20
|
+
def source_text: () -> String
|
|
21
|
+
def semantic_tree: () -> Array[untyped]
|
|
22
|
+
def attach_trailing_comment!: (untyped comment) -> untyped
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
class FileAnalysis
|
|
26
|
+
attr_reader source: String
|
|
27
|
+
attr_reader root_node: untyped
|
|
28
|
+
attr_reader declarations: Array[NodeWrapper]
|
|
29
|
+
attr_reader errors: Array[StandardError]
|
|
30
|
+
attr_reader backend: Symbol
|
|
31
|
+
attr_reader dialect: Symbol
|
|
32
|
+
|
|
33
|
+
def initialize: (String source, ?dialect: Symbol) -> void
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class Provider
|
|
37
|
+
def provider_id: () -> String
|
|
38
|
+
def family: () -> String
|
|
39
|
+
def capabilities: () -> Hash[Symbol, untyped]
|
|
40
|
+
def analyze: (Hash[Symbol, untyped] request) -> Hash[Symbol, untyped]
|
|
41
|
+
def diff2: (Hash[Symbol, untyped] request) -> Hash[Symbol, untyped]
|
|
42
|
+
def merge2: (Hash[Symbol, untyped] request) -> Hash[Symbol, untyped]
|
|
43
|
+
def merge3: (Hash[Symbol, untyped] request) -> Hash[Symbol, untyped]
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def self.merge_provider: () -> Provider
|
|
47
|
+
def self.register_provider!: (?replace: bool) -> untyped
|
|
48
|
+
|
|
3
49
|
module Version
|
|
4
50
|
VERSION: String
|
|
5
51
|
end
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: typescript-merge
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 7.1.
|
|
4
|
+
version: 7.1.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -43,28 +43,28 @@ dependencies:
|
|
|
43
43
|
requirements:
|
|
44
44
|
- - '='
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: 7.1.
|
|
46
|
+
version: 7.1.4
|
|
47
47
|
type: :runtime
|
|
48
48
|
prerelease: false
|
|
49
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
50
50
|
requirements:
|
|
51
51
|
- - '='
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: 7.1.
|
|
53
|
+
version: 7.1.4
|
|
54
54
|
- !ruby/object:Gem::Dependency
|
|
55
55
|
name: tree_haver
|
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
|
57
57
|
requirements:
|
|
58
58
|
- - '='
|
|
59
59
|
- !ruby/object:Gem::Version
|
|
60
|
-
version: 7.1.
|
|
60
|
+
version: 7.1.4
|
|
61
61
|
type: :runtime
|
|
62
62
|
prerelease: false
|
|
63
63
|
version_requirements: !ruby/object:Gem::Requirement
|
|
64
64
|
requirements:
|
|
65
65
|
- - '='
|
|
66
66
|
- !ruby/object:Gem::Version
|
|
67
|
-
version: 7.1.
|
|
67
|
+
version: 7.1.4
|
|
68
68
|
- !ruby/object:Gem::Dependency
|
|
69
69
|
name: version_gem
|
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -91,20 +91,20 @@ dependencies:
|
|
|
91
91
|
requirements:
|
|
92
92
|
- - "~>"
|
|
93
93
|
- !ruby/object:Gem::Version
|
|
94
|
-
version: '
|
|
94
|
+
version: '3.0'
|
|
95
95
|
- - ">="
|
|
96
96
|
- !ruby/object:Gem::Version
|
|
97
|
-
version:
|
|
97
|
+
version: 3.0.7
|
|
98
98
|
type: :development
|
|
99
99
|
prerelease: false
|
|
100
100
|
version_requirements: !ruby/object:Gem::Requirement
|
|
101
101
|
requirements:
|
|
102
102
|
- - "~>"
|
|
103
103
|
- !ruby/object:Gem::Version
|
|
104
|
-
version: '
|
|
104
|
+
version: '3.0'
|
|
105
105
|
- - ">="
|
|
106
106
|
- !ruby/object:Gem::Version
|
|
107
|
-
version:
|
|
107
|
+
version: 3.0.7
|
|
108
108
|
- !ruby/object:Gem::Dependency
|
|
109
109
|
name: bundler-audit
|
|
110
110
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -182,7 +182,7 @@ dependencies:
|
|
|
182
182
|
version: '3.2'
|
|
183
183
|
- - ">="
|
|
184
184
|
- !ruby/object:Gem::Version
|
|
185
|
-
version: 3.2.
|
|
185
|
+
version: 3.2.2
|
|
186
186
|
type: :development
|
|
187
187
|
prerelease: false
|
|
188
188
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -192,7 +192,7 @@ dependencies:
|
|
|
192
192
|
version: '3.2'
|
|
193
193
|
- - ">="
|
|
194
194
|
- !ruby/object:Gem::Version
|
|
195
|
-
version: 3.2.
|
|
195
|
+
version: 3.2.2
|
|
196
196
|
- !ruby/object:Gem::Dependency
|
|
197
197
|
name: kettle-test
|
|
198
198
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -202,7 +202,7 @@ dependencies:
|
|
|
202
202
|
version: '2.0'
|
|
203
203
|
- - ">="
|
|
204
204
|
- !ruby/object:Gem::Version
|
|
205
|
-
version: 2.0.
|
|
205
|
+
version: 2.0.20
|
|
206
206
|
type: :development
|
|
207
207
|
prerelease: false
|
|
208
208
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -212,7 +212,7 @@ dependencies:
|
|
|
212
212
|
version: '2.0'
|
|
213
213
|
- - ">="
|
|
214
214
|
- !ruby/object:Gem::Version
|
|
215
|
-
version: 2.0.
|
|
215
|
+
version: 2.0.20
|
|
216
216
|
- !ruby/object:Gem::Dependency
|
|
217
217
|
name: turbo_tests2
|
|
218
218
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -222,7 +222,7 @@ dependencies:
|
|
|
222
222
|
version: '3.2'
|
|
223
223
|
- - ">="
|
|
224
224
|
- !ruby/object:Gem::Version
|
|
225
|
-
version: 3.2.
|
|
225
|
+
version: 3.2.6
|
|
226
226
|
type: :development
|
|
227
227
|
prerelease: false
|
|
228
228
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -232,7 +232,7 @@ dependencies:
|
|
|
232
232
|
version: '3.2'
|
|
233
233
|
- - ">="
|
|
234
234
|
- !ruby/object:Gem::Version
|
|
235
|
-
version: 3.2.
|
|
235
|
+
version: 3.2.6
|
|
236
236
|
- !ruby/object:Gem::Dependency
|
|
237
237
|
name: ruby-progressbar
|
|
238
238
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -276,7 +276,7 @@ dependencies:
|
|
|
276
276
|
version: '2.0'
|
|
277
277
|
- - ">="
|
|
278
278
|
- !ruby/object:Gem::Version
|
|
279
|
-
version: 2.0.
|
|
279
|
+
version: 2.0.12
|
|
280
280
|
type: :development
|
|
281
281
|
prerelease: false
|
|
282
282
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -286,7 +286,7 @@ dependencies:
|
|
|
286
286
|
version: '2.0'
|
|
287
287
|
- - ">="
|
|
288
288
|
- !ruby/object:Gem::Version
|
|
289
|
-
version: 2.0.
|
|
289
|
+
version: 2.0.12
|
|
290
290
|
description: "☯️ Portable TypeScript module owner analysis and merge behavior for
|
|
291
291
|
Structured Merge."
|
|
292
292
|
email:
|
|
@@ -299,6 +299,9 @@ files:
|
|
|
299
299
|
- README.md
|
|
300
300
|
- lib/typescript-merge.rb
|
|
301
301
|
- lib/typescript/merge.rb
|
|
302
|
+
- lib/typescript/merge/file_analysis.rb
|
|
303
|
+
- lib/typescript/merge/node_wrapper.rb
|
|
304
|
+
- lib/typescript/merge/provider.rb
|
|
302
305
|
- lib/typescript/merge/version.rb
|
|
303
306
|
- sig/typescript/merge.rbs
|
|
304
307
|
homepage: https://github.com/structuredmerge/structuredmerge-ruby
|
|
@@ -307,10 +310,10 @@ licenses:
|
|
|
307
310
|
- PolyForm-Small-Business-1.0.0
|
|
308
311
|
metadata:
|
|
309
312
|
homepage_uri: https://structuredmerge.org
|
|
310
|
-
source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.
|
|
311
|
-
changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.
|
|
313
|
+
source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.4
|
|
314
|
+
changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.4/CHANGELOG.md
|
|
312
315
|
bug_tracker_uri: https://github.com/structuredmerge/structuredmerge-ruby/issues
|
|
313
|
-
documentation_uri: https://www.rubydoc.info/gems/typescript-merge/7.1.
|
|
316
|
+
documentation_uri: https://www.rubydoc.info/gems/typescript-merge/7.1.4
|
|
314
317
|
funding_uri: https://github.com/sponsors/pboling
|
|
315
318
|
wiki_uri: https://github.com/structuredmerge/structuredmerge-ruby/wiki
|
|
316
319
|
news_uri: https://www.railsbling.com/tags/typescript-merge
|
metadata.gz.sig
CHANGED
|
Binary file
|