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.
@@ -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
@@ -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.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.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.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.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.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.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: '2.5'
94
+ version: '3.0'
95
95
  - - ">="
96
96
  - !ruby/object:Gem::Version
97
- version: 2.5.17
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: '2.5'
104
+ version: '3.0'
105
105
  - - ">="
106
106
  - !ruby/object:Gem::Version
107
- version: 2.5.17
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.0
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.0
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.19
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.19
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.4
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.4
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.11
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.11
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.1
319
- changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.1/CHANGELOG.md
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.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