tree_haver 3.2.6 → 4.0.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/CHANGELOG.md +41 -3
- data/README.md +94 -12
- data/lib/tree_haver/backend_registry.rb +234 -0
- data/lib/tree_haver/backends/citrus.rb +7 -1
- data/lib/tree_haver/backends/ffi.rb +36 -9
- data/lib/tree_haver/backends/java.rb +59 -61
- data/lib/tree_haver/backends/mri.rb +38 -11
- data/lib/tree_haver/backends/prism.rb +67 -234
- data/lib/tree_haver/backends/psych.rb +75 -346
- data/lib/tree_haver/backends/rust.rb +32 -11
- data/lib/tree_haver/base/language.rb +98 -0
- data/lib/tree_haver/base/node.rb +315 -0
- data/lib/tree_haver/base/parser.rb +24 -0
- data/lib/tree_haver/base/point.rb +48 -0
- data/lib/tree_haver/base/tree.rb +128 -0
- data/lib/tree_haver/base.rb +12 -0
- data/lib/tree_haver/node.rb +14 -10
- data/lib/tree_haver/rspec/dependency_tags.rb +9 -5
- data/lib/tree_haver/tree.rb +4 -5
- data/lib/tree_haver/version.rb +2 -2
- data/lib/tree_haver.rb +30 -18
- data.tar.gz.sig +0 -0
- metadata +11 -6
- metadata.gz.sig +0 -0
- data/lib/tree_haver/backends/commonmarker.rb +0 -516
- data/lib/tree_haver/backends/markly.rb +0 -590
|
@@ -531,18 +531,22 @@ module TreeHaver
|
|
|
531
531
|
|
|
532
532
|
# Check if commonmarker gem is available
|
|
533
533
|
#
|
|
534
|
+
# Uses BackendRegistry which allows commonmarker-merge to register its checker.
|
|
535
|
+
#
|
|
534
536
|
# @return [Boolean] true if commonmarker gem is available
|
|
535
537
|
def commonmarker_available?
|
|
536
538
|
return @commonmarker_available if defined?(@commonmarker_available)
|
|
537
|
-
@commonmarker_available = TreeHaver::
|
|
539
|
+
@commonmarker_available = TreeHaver::BackendRegistry.available?(:commonmarker)
|
|
538
540
|
end
|
|
539
541
|
|
|
540
542
|
# Check if markly gem is available
|
|
541
543
|
#
|
|
544
|
+
# Uses BackendRegistry which allows markly-merge to register its checker.
|
|
545
|
+
#
|
|
542
546
|
# @return [Boolean] true if markly gem is available
|
|
543
547
|
def markly_available?
|
|
544
548
|
return @markly_available if defined?(@markly_available)
|
|
545
|
-
@markly_available = TreeHaver::
|
|
549
|
+
@markly_available = TreeHaver::BackendRegistry.available?(:markly)
|
|
546
550
|
end
|
|
547
551
|
|
|
548
552
|
# Check if prism gem is available
|
|
@@ -550,7 +554,7 @@ module TreeHaver
|
|
|
550
554
|
# @return [Boolean] true if Prism is available
|
|
551
555
|
def prism_available?
|
|
552
556
|
return @prism_available if defined?(@prism_available)
|
|
553
|
-
@prism_available = TreeHaver::
|
|
557
|
+
@prism_available = TreeHaver::BackendRegistry.available?(:prism)
|
|
554
558
|
end
|
|
555
559
|
|
|
556
560
|
# Check if psych is available (stdlib, should always be true)
|
|
@@ -558,7 +562,7 @@ module TreeHaver
|
|
|
558
562
|
# @return [Boolean] true if Psych is available
|
|
559
563
|
def psych_available?
|
|
560
564
|
return @psych_available if defined?(@psych_available)
|
|
561
|
-
@psych_available = TreeHaver::
|
|
565
|
+
@psych_available = TreeHaver::BackendRegistry.available?(:psych)
|
|
562
566
|
end
|
|
563
567
|
|
|
564
568
|
# Check if Citrus backend is available
|
|
@@ -568,7 +572,7 @@ module TreeHaver
|
|
|
568
572
|
# @return [Boolean] true if Citrus backend is available
|
|
569
573
|
def citrus_available?
|
|
570
574
|
return @citrus_available if defined?(@citrus_available)
|
|
571
|
-
@citrus_available = TreeHaver::
|
|
575
|
+
@citrus_available = TreeHaver::BackendRegistry.available?(:citrus)
|
|
572
576
|
end
|
|
573
577
|
|
|
574
578
|
# ============================================================
|
data/lib/tree_haver/tree.rb
CHANGED
|
@@ -52,7 +52,7 @@ module TreeHaver
|
|
|
52
52
|
#
|
|
53
53
|
# # Or explicitly via inner_tree
|
|
54
54
|
# tree.inner_tree.some_backend_specific_method
|
|
55
|
-
class Tree
|
|
55
|
+
class Tree < Base::Tree
|
|
56
56
|
# The wrapped backend-specific tree object
|
|
57
57
|
#
|
|
58
58
|
# This provides direct access to the underlying backend tree for advanced usage
|
|
@@ -66,20 +66,19 @@ module TreeHaver
|
|
|
66
66
|
# tree.inner_tree.print_dot_graph(f)
|
|
67
67
|
# end
|
|
68
68
|
# end
|
|
69
|
-
|
|
69
|
+
# NOTE: inner_tree is inherited from Base::Tree
|
|
70
70
|
|
|
71
71
|
# The source text
|
|
72
72
|
#
|
|
73
73
|
# Stored to enable text extraction from nodes via byte offsets.
|
|
74
74
|
#
|
|
75
75
|
# @return [String] The original source code
|
|
76
|
-
|
|
76
|
+
# NOTE: source is inherited from Base::Tree
|
|
77
77
|
|
|
78
78
|
# @param tree [Object] Backend-specific tree object
|
|
79
79
|
# @param source [String] Source text for node text extraction
|
|
80
80
|
def initialize(tree, source: nil)
|
|
81
|
-
|
|
82
|
-
@source = source
|
|
81
|
+
super(tree, source: source)
|
|
83
82
|
end
|
|
84
83
|
|
|
85
84
|
# Get the root node of the tree
|
data/lib/tree_haver/version.rb
CHANGED
|
@@ -9,8 +9,8 @@ module TreeHaver
|
|
|
9
9
|
module Version
|
|
10
10
|
# Current version of the tree_haver gem
|
|
11
11
|
#
|
|
12
|
-
# @return [String] the version string
|
|
13
|
-
VERSION = "
|
|
12
|
+
# @return [String] the version string
|
|
13
|
+
VERSION = "4.0.0"
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
# Traditional location for VERSION constant
|
data/lib/tree_haver.rb
CHANGED
|
@@ -109,6 +109,10 @@ module TreeHaver
|
|
|
109
109
|
autoload :LibraryPathUtils, File.join(__dir__, "tree_haver", "library_path_utils")
|
|
110
110
|
autoload :LanguageRegistry, File.join(__dir__, "tree_haver", "language_registry")
|
|
111
111
|
autoload :BackendAPI, File.join(__dir__, "tree_haver", "backend_api")
|
|
112
|
+
autoload :BackendRegistry, File.join(__dir__, "tree_haver", "backend_registry")
|
|
113
|
+
|
|
114
|
+
# Base classes for backend implementations
|
|
115
|
+
autoload :Base, File.join(__dir__, "tree_haver", "base")
|
|
112
116
|
|
|
113
117
|
# Base error class for TreeHaver exceptions
|
|
114
118
|
# @see https://github.com/Faveod/ruby-tree-sitter/pull/83 for inherit from Exception reasoning
|
|
@@ -181,8 +185,6 @@ module TreeHaver
|
|
|
181
185
|
# - {Backends::Citrus} - Uses Citrus PEG parser (pure Ruby, portable)
|
|
182
186
|
# - {Backends::Prism} - Uses Ruby's built-in Prism parser (Ruby-only, stdlib in 3.4+)
|
|
183
187
|
# - {Backends::Psych} - Uses Ruby's built-in Psych parser (YAML-only, stdlib)
|
|
184
|
-
# - {Backends::Commonmarker} - Uses commonmarker gem (Markdown)
|
|
185
|
-
# - {Backends::Markly} - Uses markly gem (Markdown/GFM)
|
|
186
188
|
module Backends
|
|
187
189
|
autoload :MRI, File.join(__dir__, "tree_haver", "backends", "mri")
|
|
188
190
|
autoload :Rust, File.join(__dir__, "tree_haver", "backends", "rust")
|
|
@@ -191,11 +193,7 @@ module TreeHaver
|
|
|
191
193
|
autoload :Citrus, File.join(__dir__, "tree_haver", "backends", "citrus")
|
|
192
194
|
autoload :Prism, File.join(__dir__, "tree_haver", "backends", "prism")
|
|
193
195
|
autoload :Psych, File.join(__dir__, "tree_haver", "backends", "psych")
|
|
194
|
-
autoload :Commonmarker, File.join(__dir__, "tree_haver", "backends", "commonmarker")
|
|
195
|
-
autoload :Markly, File.join(__dir__, "tree_haver", "backends", "markly")
|
|
196
196
|
|
|
197
|
-
# Known backend conflicts
|
|
198
|
-
#
|
|
199
197
|
# Maps each backend to an array of backends that block it from working.
|
|
200
198
|
# For example, :ffi is blocked by :mri because once ruby_tree_sitter loads,
|
|
201
199
|
# FFI calls to ts_parser_set_language will segfault.
|
|
@@ -209,8 +207,6 @@ module TreeHaver
|
|
|
209
207
|
citrus: [],
|
|
210
208
|
prism: [], # Prism has no conflicts with other backends
|
|
211
209
|
psych: [], # Psych has no conflicts with other backends
|
|
212
|
-
commonmarker: [], # Commonmarker has no conflicts with other backends
|
|
213
|
-
markly: [], # Markly has no conflicts with other backends
|
|
214
210
|
}.freeze
|
|
215
211
|
|
|
216
212
|
# Pure Ruby backends that parse specific languages
|
|
@@ -220,8 +216,6 @@ module TreeHaver
|
|
|
220
216
|
PURE_RUBY_BACKENDS = {
|
|
221
217
|
prism: {language: :ruby, module_name: "Prism"},
|
|
222
218
|
psych: {language: :yaml, module_name: "Psych"},
|
|
223
|
-
commonmarker: {language: :markdown, module_name: "Commonmarker"},
|
|
224
|
-
markly: {language: :markdown, module_name: "Markly"},
|
|
225
219
|
}.freeze
|
|
226
220
|
end
|
|
227
221
|
|
|
@@ -744,13 +738,13 @@ module TreeHaver
|
|
|
744
738
|
Backends::Prism
|
|
745
739
|
when :psych
|
|
746
740
|
Backends::Psych
|
|
747
|
-
when :commonmarker
|
|
748
|
-
Backends::Commonmarker
|
|
749
|
-
when :markly
|
|
750
|
-
Backends::Markly
|
|
751
741
|
when :auto
|
|
752
742
|
backend_module # Fall back to normal resolution for :auto
|
|
753
743
|
else
|
|
744
|
+
# Check if this is a registered plugin backend
|
|
745
|
+
registered = registered_backend(requested)
|
|
746
|
+
return registered if registered
|
|
747
|
+
|
|
754
748
|
# Unknown backend name - return nil to trigger error in caller
|
|
755
749
|
nil
|
|
756
750
|
end
|
|
@@ -885,10 +879,6 @@ module TreeHaver
|
|
|
885
879
|
Backends::Prism
|
|
886
880
|
when :psych
|
|
887
881
|
Backends::Psych
|
|
888
|
-
when :commonmarker
|
|
889
|
-
Backends::Commonmarker
|
|
890
|
-
when :markly
|
|
891
|
-
Backends::Markly
|
|
892
882
|
else
|
|
893
883
|
# auto-select: prefer native/fast backends, fall back to pure Ruby (Citrus)
|
|
894
884
|
# Each backend must be both allowed (by ENV) and available (gem installed)
|
|
@@ -1049,6 +1039,28 @@ module TreeHaver
|
|
|
1049
1039
|
nil
|
|
1050
1040
|
end
|
|
1051
1041
|
|
|
1042
|
+
# Register a backend module
|
|
1043
|
+
#
|
|
1044
|
+
# Allows external gems to register their backend implementation so it can be
|
|
1045
|
+
# found by TreeHaver.backend = :name and other lookup methods.
|
|
1046
|
+
#
|
|
1047
|
+
# @param name [Symbol] backend name (e.g. :rbs, :commonmarker)
|
|
1048
|
+
# @param mod [Module] the backend module
|
|
1049
|
+
# @return [void]
|
|
1050
|
+
def register_backend(name, mod)
|
|
1051
|
+
@backend_registry ||= {}
|
|
1052
|
+
@backend_registry[name.to_sym] = mod
|
|
1053
|
+
end
|
|
1054
|
+
|
|
1055
|
+
# Get a registered backend module
|
|
1056
|
+
#
|
|
1057
|
+
# @param name [Symbol] backend name
|
|
1058
|
+
# @return [Module, nil] registered backend module
|
|
1059
|
+
def registered_backend(name)
|
|
1060
|
+
@backend_registry ||= {}
|
|
1061
|
+
@backend_registry[name.to_sym]
|
|
1062
|
+
end
|
|
1063
|
+
|
|
1052
1064
|
# Fetch a registered language entry
|
|
1053
1065
|
#
|
|
1054
1066
|
# @api private
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: tree_haver
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 4.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -261,15 +261,20 @@ files:
|
|
|
261
261
|
- SECURITY.md
|
|
262
262
|
- lib/tree_haver.rb
|
|
263
263
|
- lib/tree_haver/backend_api.rb
|
|
264
|
+
- lib/tree_haver/backend_registry.rb
|
|
264
265
|
- lib/tree_haver/backends/citrus.rb
|
|
265
|
-
- lib/tree_haver/backends/commonmarker.rb
|
|
266
266
|
- lib/tree_haver/backends/ffi.rb
|
|
267
267
|
- lib/tree_haver/backends/java.rb
|
|
268
|
-
- lib/tree_haver/backends/markly.rb
|
|
269
268
|
- lib/tree_haver/backends/mri.rb
|
|
270
269
|
- lib/tree_haver/backends/prism.rb
|
|
271
270
|
- lib/tree_haver/backends/psych.rb
|
|
272
271
|
- lib/tree_haver/backends/rust.rb
|
|
272
|
+
- lib/tree_haver/base.rb
|
|
273
|
+
- lib/tree_haver/base/language.rb
|
|
274
|
+
- lib/tree_haver/base/node.rb
|
|
275
|
+
- lib/tree_haver/base/parser.rb
|
|
276
|
+
- lib/tree_haver/base/point.rb
|
|
277
|
+
- lib/tree_haver/base/tree.rb
|
|
273
278
|
- lib/tree_haver/citrus_grammar_finder.rb
|
|
274
279
|
- lib/tree_haver/compat.rb
|
|
275
280
|
- lib/tree_haver/grammar_finder.rb
|
|
@@ -293,10 +298,10 @@ licenses:
|
|
|
293
298
|
- MIT
|
|
294
299
|
metadata:
|
|
295
300
|
homepage_uri: https://tree-haver.galtzo.com/
|
|
296
|
-
source_code_uri: https://github.com/kettle-rb/tree_haver/tree/
|
|
297
|
-
changelog_uri: https://github.com/kettle-rb/tree_haver/blob/
|
|
301
|
+
source_code_uri: https://github.com/kettle-rb/tree_haver/tree/v4.0.0
|
|
302
|
+
changelog_uri: https://github.com/kettle-rb/tree_haver/blob/v4.0.0/CHANGELOG.md
|
|
298
303
|
bug_tracker_uri: https://github.com/kettle-rb/tree_haver/issues
|
|
299
|
-
documentation_uri: https://www.rubydoc.info/gems/tree_haver/
|
|
304
|
+
documentation_uri: https://www.rubydoc.info/gems/tree_haver/4.0.0
|
|
300
305
|
funding_uri: https://github.com/sponsors/pboling
|
|
301
306
|
wiki_uri: https://github.com/kettle-rb/tree_haver/wiki
|
|
302
307
|
news_uri: https://www.railsbling.com/tags/tree_haver
|
metadata.gz.sig
CHANGED
|
Binary file
|