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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/LICENSE.md +13 -0
- data/README.md +299 -660
- data/lib/tree_haver/backend_api.rb +78 -35
- data/lib/tree_haver/backend_context.rb +28 -0
- data/lib/tree_haver/backend_registry.rb +119 -382
- data/lib/tree_haver/backends/citrus.rb +55 -53
- data/lib/tree_haver/backends/ffi.rb +105 -101
- data/lib/tree_haver/backends/java.rb +92 -76
- data/lib/tree_haver/backends/mri.rb +44 -39
- data/lib/tree_haver/backends/parslet.rb +53 -48
- data/lib/tree_haver/backends/prism.rb +140 -43
- data/lib/tree_haver/backends/psych.rb +30 -26
- data/lib/tree_haver/backends/rust.rb +21 -17
- data/lib/tree_haver/backends/tslp.rb +274 -0
- data/lib/tree_haver/base/comment.rb +320 -0
- data/lib/tree_haver/base/language.rb +2 -2
- data/lib/tree_haver/base/node.rb +39 -31
- data/lib/tree_haver/base/parser.rb +4 -0
- data/lib/tree_haver/base/point.rb +3 -3
- data/lib/tree_haver/base/tree.rb +1 -1
- data/lib/tree_haver/citrus_grammar_finder.rb +21 -26
- data/lib/tree_haver/contracts.rb +1025 -0
- data/lib/tree_haver/grammar_finder.rb +125 -70
- data/lib/tree_haver/kaitai_backend.rb +30 -0
- data/lib/tree_haver/language.rb +36 -37
- data/lib/tree_haver/language_pack.rb +41 -0
- data/lib/tree_haver/language_registry.rb +34 -3
- data/lib/tree_haver/library_path_utils.rb +7 -7
- data/lib/tree_haver/node.rb +40 -31
- data/lib/tree_haver/parser.rb +44 -37
- data/lib/tree_haver/parslet_grammar_finder.rb +19 -26
- data/lib/tree_haver/path_validator.rb +39 -36
- data/lib/tree_haver/peg_backends.rb +76 -0
- data/lib/tree_haver/rspec/dependency_tags.rb +23 -1363
- data/lib/tree_haver/rspec.rb +1 -31
- data/lib/tree_haver/tree.rb +16 -7
- data/lib/tree_haver/version.rb +5 -14
- data/lib/tree_haver.rb +536 -1240
- data/sig/tree_haver.rbs +1 -229
- data.tar.gz.sig +0 -0
- metadata +154 -70
- metadata.gz.sig +0 -0
- data/CHANGELOG.md +0 -1393
- data/CITATION.cff +0 -20
- data/CODE_OF_CONDUCT.md +0 -134
- data/CONTRIBUTING.md +0 -359
- data/FUNDING.md +0 -74
- data/LICENSE.txt +0 -21
- data/REEK +0 -0
- data/RUBOCOP.md +0 -71
- data/SECURITY.md +0 -21
- data/lib/tree_haver/base.rb +0 -12
- data/lib/tree_haver/compat.rb +0 -43
- data/lib/tree_haver/rspec/testable_node.rb +0 -217
- data/sig/tree_haver/backends.rbs +0 -352
- data/sig/tree_haver/grammar_finder.rbs +0 -29
- data/sig/tree_haver/path_validator.rbs +0 -32
data/lib/tree_haver/rspec.rb
CHANGED
|
@@ -1,33 +1,3 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
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'
|
data/lib/tree_haver/tree.rb
CHANGED
|
@@ -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?(
|
|
156
|
+
raise unless e.name == :edit || e.message.include?('edit')
|
|
157
|
+
|
|
156
158
|
raise TreeHaver::NotAvailable,
|
|
157
|
-
|
|
158
|
-
|
|
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 :
|
|
207
|
-
"#<#{self.class} source_length=#{@source&.bytesize ||
|
|
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)
|
data/lib/tree_haver/version.rb
CHANGED
|
@@ -1,20 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module TreeHaver
|
|
4
|
-
# Version
|
|
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
|
|
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
|
|
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
|