bash-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/bash/merge/node_wrapper.rb +27 -0
- data/lib/bash/merge/provider.rb +1040 -0
- data/lib/bash/merge/test_harness_identity.rb +63 -0
- data/lib/bash/merge/version.rb +1 -1
- data/lib/bash/merge.rb +4 -0
- data/sig/bash/merge.rbs +22 -0
- data.tar.gz.sig +0 -0
- metadata +22 -20
- metadata.gz.sig +0 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bash
|
|
4
|
+
module Merge
|
|
5
|
+
# Extracts bounded AST identities for Git-style shell test harness calls.
|
|
6
|
+
class TestHarnessIdentity
|
|
7
|
+
class << self
|
|
8
|
+
def for(wrapper)
|
|
9
|
+
return unless wrapper.command? && wrapper.command_name == 'test_expect_success'
|
|
10
|
+
|
|
11
|
+
identity = literal_identity(wrapper)
|
|
12
|
+
[:test_expect_success, *identity] if identity
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
|
|
17
|
+
def literal_identity(wrapper)
|
|
18
|
+
arguments = command_argument_nodes(wrapper.node)
|
|
19
|
+
return [source_for(wrapper, arguments.first)] if simple_literal_title?(arguments)
|
|
20
|
+
return unless qualified_literal_title?(arguments)
|
|
21
|
+
|
|
22
|
+
arguments.first(2).map { |argument| source_for(wrapper, argument) }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def command_argument_nodes(node)
|
|
26
|
+
children = node.children.select(&:named?)
|
|
27
|
+
command_index = children.index { |child| %w[word command_name].include?(child.type.to_s) }
|
|
28
|
+
return [] unless command_index
|
|
29
|
+
|
|
30
|
+
arguments = children.drop(command_index + 1)
|
|
31
|
+
arguments.any? { |child| child.type.to_s.include?('redirect') } ? [] : arguments
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def simple_literal_title?(arguments)
|
|
35
|
+
arguments.length == 2 && literal_title?(arguments.first)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def qualified_literal_title?(arguments)
|
|
39
|
+
arguments.length == 3 &&
|
|
40
|
+
literal_prerequisite?(arguments[0]) &&
|
|
41
|
+
literal_title?(arguments[1])
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def literal_prerequisite?(argument)
|
|
45
|
+
argument.type.to_s == 'word' && argument.children.none?(&:named?)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def literal_title?(argument)
|
|
49
|
+
return true if argument.type.to_s == 'raw_string'
|
|
50
|
+
return false unless argument.type.to_s == 'string'
|
|
51
|
+
|
|
52
|
+
argument.children.select(&:named?).all? { |child| child.type.to_s == 'string_content' }
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def source_for(wrapper, node)
|
|
56
|
+
start_offset = node.start_byte - wrapper.start_byte
|
|
57
|
+
end_offset = node.end_byte - wrapper.start_byte
|
|
58
|
+
wrapper.source_text.byteslice(start_offset...end_offset).to_s
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
data/lib/bash/merge/version.rb
CHANGED
|
@@ -5,7 +5,7 @@ module Bash
|
|
|
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/bash/merge.rb
CHANGED
|
@@ -119,6 +119,7 @@ module Bash
|
|
|
119
119
|
autoload :FileAnalysis, 'bash/merge/file_analysis'
|
|
120
120
|
autoload :MergeResult, 'bash/merge/merge_result'
|
|
121
121
|
autoload :NodeWrapper, 'bash/merge/node_wrapper'
|
|
122
|
+
autoload :Provider, 'bash/merge/provider'
|
|
122
123
|
autoload :SmartMerger, 'bash/merge/smart_merger'
|
|
123
124
|
|
|
124
125
|
class << self
|
|
@@ -208,6 +209,9 @@ TreeHaver::BackendRegistry.register_tag(:bash_grammar, category: :grammar, backe
|
|
|
208
209
|
Bash::Merge.available?
|
|
209
210
|
end
|
|
210
211
|
|
|
212
|
+
require_relative 'merge/provider'
|
|
213
|
+
Bash::Merge.register_provider!
|
|
214
|
+
|
|
211
215
|
# Register with ast-merge's MergeGemRegistry for RSpec dependency tags
|
|
212
216
|
# Only register if MergeGemRegistry is loaded (i.e., in test environment)
|
|
213
217
|
if defined?(Ast::Merge::RSpec::MergeGemRegistry)
|
data/sig/bash/merge.rbs
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
module Bash
|
|
2
2
|
module Merge
|
|
3
|
+
class NodeWrapper
|
|
4
|
+
attr_reader node: untyped
|
|
5
|
+
def start_byte: () -> Integer
|
|
6
|
+
def end_byte: () -> Integer
|
|
7
|
+
def source_text: () -> String
|
|
8
|
+
def semantic_tree: () -> Array[untyped]
|
|
9
|
+
def heredoc?: () -> bool
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class Provider
|
|
13
|
+
def provider_id: () -> String
|
|
14
|
+
def family: () -> String
|
|
15
|
+
def capabilities: () -> Hash[Symbol, untyped]
|
|
16
|
+
def analyze: (Hash[Symbol, untyped] request) -> Hash[Symbol, untyped]
|
|
17
|
+
def diff2: (Hash[Symbol, untyped] request) -> Hash[Symbol, untyped]
|
|
18
|
+
def merge2: (Hash[Symbol, untyped] request) -> Hash[Symbol, untyped]
|
|
19
|
+
def merge3: (Hash[Symbol, untyped] request) -> Hash[Symbol, untyped]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.merge_provider: () -> Provider
|
|
23
|
+
def self.register_provider!: (?replace: bool) -> untyped
|
|
24
|
+
|
|
3
25
|
module Version
|
|
4
26
|
VERSION: String
|
|
5
27
|
end
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: bash-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: "☯️ Bash statement, comment, freeze-block, and template merge behavior
|
|
291
291
|
for Structured Merge."
|
|
292
292
|
email:
|
|
@@ -306,7 +306,9 @@ files:
|
|
|
306
306
|
- lib/bash/merge/freeze_node.rb
|
|
307
307
|
- lib/bash/merge/merge_result.rb
|
|
308
308
|
- lib/bash/merge/node_wrapper.rb
|
|
309
|
+
- lib/bash/merge/provider.rb
|
|
309
310
|
- lib/bash/merge/smart_merger.rb
|
|
311
|
+
- lib/bash/merge/test_harness_identity.rb
|
|
310
312
|
- lib/bash/merge/version.rb
|
|
311
313
|
- sig/bash/merge.rbs
|
|
312
314
|
homepage: https://github.com/structuredmerge/structuredmerge-ruby
|
|
@@ -315,10 +317,10 @@ licenses:
|
|
|
315
317
|
- PolyForm-Small-Business-1.0.0
|
|
316
318
|
metadata:
|
|
317
319
|
homepage_uri: https://structuredmerge.org
|
|
318
|
-
source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.
|
|
319
|
-
changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.
|
|
320
|
+
source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.4
|
|
321
|
+
changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.4/CHANGELOG.md
|
|
320
322
|
bug_tracker_uri: https://github.com/structuredmerge/structuredmerge-ruby/issues
|
|
321
|
-
documentation_uri: https://www.rubydoc.info/gems/bash-merge/7.1.
|
|
323
|
+
documentation_uri: https://www.rubydoc.info/gems/bash-merge/7.1.4
|
|
322
324
|
funding_uri: https://github.com/sponsors/pboling
|
|
323
325
|
wiki_uri: https://github.com/structuredmerge/structuredmerge-ruby/wiki
|
|
324
326
|
news_uri: https://www.railsbling.com/tags/bash-merge
|
metadata.gz.sig
CHANGED
|
Binary file
|