tree_haver 5.0.5 → 7.1.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.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/LICENSE.md +13 -0
  4. data/README.md +299 -660
  5. data/lib/tree_haver/backend_api.rb +78 -35
  6. data/lib/tree_haver/backend_context.rb +28 -0
  7. data/lib/tree_haver/backend_registry.rb +119 -382
  8. data/lib/tree_haver/backends/citrus.rb +55 -53
  9. data/lib/tree_haver/backends/ffi.rb +105 -101
  10. data/lib/tree_haver/backends/java.rb +92 -76
  11. data/lib/tree_haver/backends/mri.rb +44 -39
  12. data/lib/tree_haver/backends/parslet.rb +53 -48
  13. data/lib/tree_haver/backends/prism.rb +140 -43
  14. data/lib/tree_haver/backends/psych.rb +30 -26
  15. data/lib/tree_haver/backends/rust.rb +21 -17
  16. data/lib/tree_haver/backends/tslp.rb +274 -0
  17. data/lib/tree_haver/base/comment.rb +320 -0
  18. data/lib/tree_haver/base/language.rb +2 -2
  19. data/lib/tree_haver/base/node.rb +39 -31
  20. data/lib/tree_haver/base/parser.rb +4 -0
  21. data/lib/tree_haver/base/point.rb +3 -3
  22. data/lib/tree_haver/base/tree.rb +1 -1
  23. data/lib/tree_haver/citrus_grammar_finder.rb +21 -26
  24. data/lib/tree_haver/contracts.rb +1025 -0
  25. data/lib/tree_haver/grammar_finder.rb +125 -70
  26. data/lib/tree_haver/kaitai_backend.rb +30 -0
  27. data/lib/tree_haver/language.rb +36 -37
  28. data/lib/tree_haver/language_pack.rb +41 -0
  29. data/lib/tree_haver/language_registry.rb +34 -3
  30. data/lib/tree_haver/library_path_utils.rb +7 -7
  31. data/lib/tree_haver/node.rb +40 -31
  32. data/lib/tree_haver/parser.rb +44 -37
  33. data/lib/tree_haver/parslet_grammar_finder.rb +19 -26
  34. data/lib/tree_haver/path_validator.rb +39 -36
  35. data/lib/tree_haver/peg_backends.rb +76 -0
  36. data/lib/tree_haver/rspec/dependency_tags.rb +23 -1363
  37. data/lib/tree_haver/rspec.rb +1 -31
  38. data/lib/tree_haver/tree.rb +16 -7
  39. data/lib/tree_haver/version.rb +5 -14
  40. data/lib/tree_haver.rb +536 -1240
  41. data/sig/tree_haver.rbs +1 -229
  42. data.tar.gz.sig +0 -0
  43. metadata +154 -70
  44. metadata.gz.sig +0 -0
  45. data/CHANGELOG.md +0 -1393
  46. data/CITATION.cff +0 -20
  47. data/CODE_OF_CONDUCT.md +0 -134
  48. data/CONTRIBUTING.md +0 -359
  49. data/FUNDING.md +0 -74
  50. data/LICENSE.txt +0 -21
  51. data/REEK +0 -0
  52. data/RUBOCOP.md +0 -71
  53. data/SECURITY.md +0 -21
  54. data/lib/tree_haver/base.rb +0 -12
  55. data/lib/tree_haver/compat.rb +0 -43
  56. data/lib/tree_haver/rspec/testable_node.rb +0 -217
  57. data/sig/tree_haver/backends.rbs +0 -352
  58. data/sig/tree_haver/grammar_finder.rbs +0 -29
  59. data/sig/tree_haver/path_validator.rbs +0 -32
@@ -1,33 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # TreeHaver RSpec Integration
4
- #
5
- # This file provides RSpec helpers and configuration for testing
6
- # code that uses TreeHaver. Require this in your spec_helper.rb:
7
- #
8
- # require "tree_haver/rspec"
9
- #
10
- # This will load:
11
- # - Dependency tags for conditional test execution
12
- # - TestableNode for creating mock nodes in tests
13
- #
14
- # @example spec_helper.rb
15
- # require "tree_haver/rspec"
16
- #
17
- # RSpec.configure do |config|
18
- # # Your additional configuration...
19
- # end
20
- #
21
- # @example Using TestableNode
22
- # node = TestableNode.create(
23
- # type: :heading,
24
- # text: "## My Heading",
25
- # start_line: 1
26
- # )
27
- # expect(node.type).to eq("heading")
28
- #
29
- # @see TreeHaver::RSpec::DependencyTags
30
- # @see TreeHaver::RSpec::TestableNode
31
-
32
- require_relative "rspec/dependency_tags"
33
- require_relative "rspec/testable_node"
3
+ require_relative 'rspec/dependency_tags'
@@ -87,6 +87,7 @@ module TreeHaver
87
87
  def root_node
88
88
  root = @inner_tree.root_node
89
89
  return if root.nil?
90
+
90
91
  Node.new(root, source: @source)
91
92
  end
92
93
 
@@ -147,15 +148,16 @@ module TreeHaver
147
148
  new_end_byte: new_end_byte,
148
149
  start_point: start_point,
149
150
  old_end_point: old_end_point,
150
- new_end_point: new_end_point,
151
+ new_end_point: new_end_point
151
152
  )
152
153
  end
153
154
  rescue NoMethodError => e
154
155
  # Re-raise as NotAvailable if it's about the edit method
155
- raise unless e.name == :edit || e.message.include?("edit")
156
+ raise unless e.name == :edit || e.message.include?('edit')
157
+
156
158
  raise TreeHaver::NotAvailable,
157
- "Incremental parsing not supported by current backend. " \
158
- "Use MRI (ruby_tree_sitter), Rust (tree_stump), or Java (java-tree-sitter / jtreesitter) backend."
159
+ 'Incremental parsing not supported by current backend. ' \
160
+ 'Use MRI (ruby_tree_sitter), Rust (tree_stump), or Java (java-tree-sitter / jtreesitter) backend.'
159
161
  end
160
162
 
161
163
  private
@@ -184,7 +186,14 @@ module TreeHaver
184
186
  # @return [Boolean] true if {#edit} can be called on this tree
185
187
  # @example
186
188
  # if tree.supports_editing?
187
- # tree.edit(...)
189
+ # tree.edit(
190
+ # start_byte: 4,
191
+ # old_end_byte: 5,
192
+ # new_end_byte: 6,
193
+ # start_point: {row: 0, column: 4},
194
+ # old_end_point: {row: 0, column: 5},
195
+ # new_end_point: {row: 0, column: 6}
196
+ # )
188
197
  # new_tree = parser.parse_string(tree, edited_source)
189
198
  # else
190
199
  # # Fall back to full re-parse
@@ -203,8 +212,8 @@ module TreeHaver
203
212
  # String representation
204
213
  # @return [String]
205
214
  def inspect
206
- inner_class = @inner_tree ? @inner_tree.class.name : "nil"
207
- "#<#{self.class} source_length=#{@source&.bytesize || "unknown"} inner_tree=#{inner_class}>"
215
+ inner_class = @inner_tree ? @inner_tree.class.name : 'nil'
216
+ "#<#{self.class} source_length=#{@source&.bytesize || 'unknown'} inner_tree=#{inner_class}>"
208
217
  end
209
218
 
210
219
  # Check if tree responds to a method (includes delegation to inner_tree)
@@ -1,20 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TreeHaver
4
- # Version information for TreeHaver
5
- #
6
- # This module contains version constants following Semantic Versioning 2.0.0.
7
- #
8
- # @see https://semver.org/ Semantic Versioning
4
+ # Version namespace for this gem.
9
5
  module Version
10
- # Current version of the tree_haver gem
11
- #
12
- # @return [String] the version string
13
- VERSION = "5.0.5"
6
+ # Current gem version.
7
+ VERSION = '7.1.0'
14
8
  end
15
-
16
- # Traditional location for VERSION constant
17
- #
18
- # @return [String] the version string
19
- VERSION = Version::VERSION
9
+ # Current gem version exposed at the traditional constant location.
10
+ VERSION = Version::VERSION # Traditional Constant Location
20
11
  end