ruby_tree_sitter 1.5.0 → 1.6.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
- data/README.md +26 -20
- data/ext/tree_sitter/extconf.rb +8 -8
- data/ext/tree_sitter/language.c +3 -3
- data/ext/tree_sitter/repo.rb +17 -10
- data/lib/tree_sitter/mixins/language.rb +11 -5
- data/lib/tree_sitter/version.rb +1 -1
- data/lib/tree_sitter.rb +7 -1
- data/tree_sitter.gemspec +0 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0488c0541ab1295e21de7a53a3af6bbfb0d2e5a2340874803037b00956e16e3
|
4
|
+
data.tar.gz: 9e5b5d202e3857ee5840322c1899684e12aa8469faa3c199f0cb8b1d1d183913
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b0d6108292ce09bed1aca0d83899df812019c5689901c762b0b8f54b951f68dc4256495b1e10ad2faf64523f0cfad7262fd07aad7dab1666d599a0453dd40b20
|
7
|
+
data.tar.gz: 6d84ad3d549c81a18a64509d826ae86d12bf90da60cdb0bcff40d5a85008c80ec309afe2d3190707601586d814f8a07ee919887f67c3103ebf352585b69b1e44
|
data/README.md
CHANGED
@@ -25,6 +25,10 @@ require 'tree_sitter'
|
|
25
25
|
|
26
26
|
parser = TreeSitter::Parser.new
|
27
27
|
language = TreeSitter::Language.load('javascript', 'path/to/libtree-sitter-javascript.{so,dylib}')
|
28
|
+
# Or simply
|
29
|
+
language = TreeSitter.lang('javascript')
|
30
|
+
# Which will try to look in your local directory and the system for installed parsers.
|
31
|
+
# See TreeSitter::Mixin::Language#lib_dirs
|
28
32
|
|
29
33
|
src = "[1, null]"
|
30
34
|
|
@@ -64,12 +68,23 @@ TreeStand provides an idiomatic Ruby interface to work with tree-sitter parsers.
|
|
64
68
|
|
65
69
|
## Dependencies
|
66
70
|
|
67
|
-
This gem is a binding for `tree-sitter
|
68
|
-
`tree-sitter`
|
71
|
+
This gem is a binding for `tree-sitter`, and comes with a pre-built version
|
72
|
+
of `tree-sitter` bundled with it, so you can start using it without any
|
73
|
+
special configuration.
|
69
74
|
|
70
|
-
|
71
|
-
|
72
|
-
|
75
|
+
We support the following platforms:
|
76
|
+
|
77
|
+
- `aarch64-linux-gnu`
|
78
|
+
- `aarch64-linux-musl`
|
79
|
+
- `arm-linux-gnu`
|
80
|
+
- `arm-linux-musl`
|
81
|
+
- `x86_64-linux-gnu`
|
82
|
+
- `x86_64-linux-musl`
|
83
|
+
- `x86-linux-musl`
|
84
|
+
- `arm64-darwin`
|
85
|
+
- `x86_64-darwin`
|
86
|
+
|
87
|
+
(see [Build from source](docs/Contributing.md#build-from-source)).
|
73
88
|
|
74
89
|
You can either install `tree-sitter` from source or through your go-to package manager.
|
75
90
|
|
@@ -104,7 +119,7 @@ brew install tree-sitter
|
|
104
119
|
From [rubygems](https://rubygems.org/gems/ruby_tree_sitter), in your `Gemfile`:
|
105
120
|
|
106
121
|
```ruby
|
107
|
-
gem 'ruby_tree_sitter', '~> 1.
|
122
|
+
gem 'ruby_tree_sitter', '~> 1.6'
|
108
123
|
```
|
109
124
|
|
110
125
|
Or manually:
|
@@ -119,18 +134,19 @@ Or from `git` sources, which will compile on installation:
|
|
119
134
|
gem 'ruby_tree_sitter', git: 'https://github.com/Faveod/ruby-tree-sitter'
|
120
135
|
```
|
121
136
|
|
122
|
-
###
|
137
|
+
### Enable system libraries
|
123
138
|
|
124
|
-
To install with `--
|
139
|
+
To install with `--enable-sys-libs`, you can either:
|
125
140
|
|
126
141
|
```sh
|
127
|
-
gem install ruby_tree_sitter -- --
|
142
|
+
gem install ruby_tree_sitter --platform=ruby -- --enable-sys-libs
|
128
143
|
```
|
129
144
|
|
130
145
|
Or via bundle:
|
131
146
|
|
132
147
|
```sh
|
133
|
-
bundle config
|
148
|
+
bundle config force_ruby_platform true
|
149
|
+
bundle config set build.ruby_tree_sitter --enable-sys-libs
|
134
150
|
```
|
135
151
|
|
136
152
|
### No compilation
|
@@ -159,16 +175,6 @@ You will have to install parsers yourself, either by:
|
|
159
175
|
[Faveod/tree-sitter-parsers](https://github.com/Faveod/tree-sitter-parsers)
|
160
176
|
which supports numerous architectures.
|
161
177
|
|
162
|
-
### A note on static vs dynamic linking
|
163
|
-
|
164
|
-
This extension will statically link against a downloaded version of
|
165
|
-
`tree-sitter` when you use the `--disable-sys-lib`. So any installed version of
|
166
|
-
`tree-sitter` will not be loaded.
|
167
|
-
|
168
|
-
The native gems are also statically linked.
|
169
|
-
|
170
|
-
All other methods will dynamically link against the installed `tree-sitter`.
|
171
|
-
|
172
178
|
## Examples
|
173
179
|
|
174
180
|
See `examples` directory.
|
data/ext/tree_sitter/extconf.rb
CHANGED
@@ -15,7 +15,7 @@ cflags = []
|
|
15
15
|
ldflags = []
|
16
16
|
|
17
17
|
def system_tree_sitter?
|
18
|
-
enable_config('sys-libs',
|
18
|
+
enable_config('sys-libs', false)
|
19
19
|
end
|
20
20
|
|
21
21
|
def env_var_on?(var)
|
@@ -26,6 +26,8 @@ end
|
|
26
26
|
# System lib vs Downloaded lib #
|
27
27
|
# ################################## #
|
28
28
|
|
29
|
+
repo = TreeSitter::Repo.new
|
30
|
+
|
29
31
|
dir_include, dir_lib =
|
30
32
|
if system_tree_sitter?
|
31
33
|
[
|
@@ -33,7 +35,6 @@ dir_include, dir_lib =
|
|
33
35
|
%w[/opt/lib /opt/local/lib /usr/lib /usr/local/lib],
|
34
36
|
]
|
35
37
|
else
|
36
|
-
repo = TreeSitter::Repo.new
|
37
38
|
if !repo.download
|
38
39
|
msg = <<~MSG
|
39
40
|
|
@@ -48,19 +49,19 @@ dir_include, dir_lib =
|
|
48
49
|
# We need to make sure we're selecting the proper toolchain.
|
49
50
|
# Especially needed for corss-compilation.
|
50
51
|
ENV.store('CC', RbConfig::CONFIG['CC'])
|
52
|
+
repo.patch
|
51
53
|
repo.compile
|
52
|
-
repo.keep_static_lib
|
53
54
|
repo.include_and_lib_dirs
|
54
55
|
end
|
55
56
|
|
57
|
+
dir_config('tree-sitter', dir_include&.first, dir_lib&.first)
|
58
|
+
|
56
59
|
# ################################## #
|
57
60
|
# Generate Makefile #
|
58
61
|
# ################################## #
|
59
62
|
|
60
|
-
header = find_header('tree_sitter/api.h'
|
61
|
-
library = find_library('tree-sitter',
|
62
|
-
'ts_parser_new', # a symbol
|
63
|
-
*dir_lib)
|
63
|
+
header = find_header('tree_sitter/api.h')
|
64
|
+
library = find_library('tree-sitter', 'ts_parser_new')
|
64
65
|
|
65
66
|
if !header || !library
|
66
67
|
abort <<~MSG
|
@@ -144,6 +145,5 @@ cflags.concat %w[-std=c99 -fPIC -Wall]
|
|
144
145
|
append_cflags(cflags)
|
145
146
|
append_ldflags(ldflags)
|
146
147
|
|
147
|
-
dir_config('tree-sitter')
|
148
148
|
create_header
|
149
149
|
create_makefile('tree_sitter/tree_sitter')
|
data/ext/tree_sitter/language.c
CHANGED
@@ -54,7 +54,7 @@ static VALUE language_load(VALUE self, VALUE name, VALUE path) {
|
|
54
54
|
dlclose(lib);
|
55
55
|
rb_raise(rb_eRuntimeError,
|
56
56
|
"Could not load symbol `%s' from library `%s'.\nReason:%s",
|
57
|
-
StringValueCStr(name),
|
57
|
+
StringValueCStr(name), path_cstr, err);
|
58
58
|
}
|
59
59
|
|
60
60
|
TSLanguage *lang = make_ts_language();
|
@@ -63,7 +63,7 @@ static VALUE language_load(VALUE self, VALUE name, VALUE path) {
|
|
63
63
|
rb_raise(rb_eRuntimeError,
|
64
64
|
"TSLanguage = NULL for language `%s' in library `%s'.\nCall your "
|
65
65
|
"local TSLanguage supplier.",
|
66
|
-
StringValueCStr(name),
|
66
|
+
StringValueCStr(name), path_cstr);
|
67
67
|
}
|
68
68
|
|
69
69
|
uint32_t version = ts_language_version(lang);
|
@@ -71,7 +71,7 @@ static VALUE language_load(VALUE self, VALUE name, VALUE path) {
|
|
71
71
|
rb_raise(rb_eRuntimeError,
|
72
72
|
"Language %s (v%d) from `%s' is old.\nMinimum supported ABI: "
|
73
73
|
"v%d.\nCurrent ABI: v%d.",
|
74
|
-
StringValueCStr(name), version,
|
74
|
+
StringValueCStr(name), version, path_cstr,
|
75
75
|
TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION,
|
76
76
|
TREE_SITTER_LANGUAGE_VERSION);
|
77
77
|
}
|
data/ext/tree_sitter/repo.rb
CHANGED
@@ -29,7 +29,9 @@ module TreeSitter
|
|
29
29
|
def compile
|
30
30
|
# We need to clean because the same folder is used over and over
|
31
31
|
# by rake-compiler-dock
|
32
|
-
|
32
|
+
ar = RbConfig::MAKEFILE_CONFIG['AR']
|
33
|
+
ar = " AR=#{ar}" if ar
|
34
|
+
sh "cd #{src} && make clean &&#{ar} make libtree-sitter.a"
|
33
35
|
end
|
34
36
|
|
35
37
|
def exe?(name)
|
@@ -59,14 +61,14 @@ module TreeSitter
|
|
59
61
|
end
|
60
62
|
|
61
63
|
def include_and_lib_dirs
|
62
|
-
[[src / 'lib' / 'include'], [src.to_s]]
|
64
|
+
[[(src / 'lib' / 'include').to_s], [src.to_s]]
|
63
65
|
end
|
64
66
|
|
65
|
-
def
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
67
|
+
def patch
|
68
|
+
root = Pathname.new(File.expand_path(__dir__)).realpath.parent.parent
|
69
|
+
patch = root / 'patches' / 'cross-compile.patch'
|
70
|
+
|
71
|
+
sh "patch --forward #{src / 'Makefile'} #{patch}"
|
70
72
|
end
|
71
73
|
|
72
74
|
def sh(cmd)
|
@@ -98,9 +100,14 @@ module TreeSitter
|
|
98
100
|
def sources_from_git
|
99
101
|
return false if !exe?(:git)
|
100
102
|
|
101
|
-
sh
|
102
|
-
|
103
|
-
|
103
|
+
sh <<~SHELL.chomp
|
104
|
+
mkdir #{src} \\
|
105
|
+
&& cd #{src} \\
|
106
|
+
&& git init \\
|
107
|
+
&& git remote add origin "#{url[:git]}" \\
|
108
|
+
&& git fetch origin --depth 1 tags/v#{version} \\
|
109
|
+
&& git reset --hard FETCH_HEAD
|
110
|
+
SHELL
|
104
111
|
true
|
105
112
|
end
|
106
113
|
|
@@ -19,6 +19,7 @@ module TreeSitter
|
|
19
19
|
'vendor/tree-sitter-parsers',
|
20
20
|
'parsers',
|
21
21
|
'tree-sitter-parsers',
|
22
|
+
'.',
|
22
23
|
'/opt/local/lib',
|
23
24
|
'/opt/lib',
|
24
25
|
'/usr/local/lib',
|
@@ -67,6 +68,9 @@ module TreeSitter
|
|
67
68
|
# TreeStand.config.parser_path = '/my/path'
|
68
69
|
# java = TreeStand::Parser.language('java')
|
69
70
|
#
|
71
|
+
# @note the name is case sensitive, but library lookup is not: if your parser is defined as `COBOL`,
|
72
|
+
# then you have to call `language('COBOL')`, but the parser can be `cobol.so/COBOL.so/…`.
|
73
|
+
#
|
70
74
|
# @param name [String] the name of the parser.
|
71
75
|
# This name is used to load the symbol from the compiled parser, replacing `-` with `_`.
|
72
76
|
#
|
@@ -120,11 +124,13 @@ module TreeSitter
|
|
120
124
|
# If a {TreeStand::Config#parser_path} is `nil`, {LIBDIRS} is used.
|
121
125
|
# If a {TreeStand::Config#parser_path} is a {::Pathname}, {LIBDIRS} is ignored.
|
122
126
|
def search_for_lib(name)
|
123
|
-
files =
|
124
|
-
name,
|
125
|
-
|
126
|
-
|
127
|
-
|
127
|
+
files =
|
128
|
+
[name, name.upcase, name.downcase]
|
129
|
+
.uniq
|
130
|
+
.flat_map do |n|
|
131
|
+
base = "#{n}.#{ext}"
|
132
|
+
[base, "tree-sitter-#{base}", "libtree-sitter-#{base}"]
|
133
|
+
end
|
128
134
|
|
129
135
|
lib_dirs
|
130
136
|
.product(files)
|
data/lib/tree_sitter/version.rb
CHANGED
data/lib/tree_sitter.rb
CHANGED
@@ -2,7 +2,13 @@
|
|
2
2
|
|
3
3
|
require 'set'
|
4
4
|
|
5
|
-
|
5
|
+
begin
|
6
|
+
RUBY_VERSION =~ /(\d+\.\d+)/
|
7
|
+
require "tree_sitter/#{Regexp.last_match(1)}/tree_sitter"
|
8
|
+
rescue LoadError
|
9
|
+
require 'tree_sitter/tree_sitter'
|
10
|
+
end
|
11
|
+
|
6
12
|
require 'tree_sitter/version'
|
7
13
|
|
8
14
|
require 'tree_sitter/mixins/language'
|
data/tree_sitter.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_tree_sitter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Firas al-Khalil
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2024-07
|
12
|
+
date: 2024-08-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sorbet-runtime
|
@@ -103,7 +103,6 @@ homepage: https://www.github.com/Faveod/ruby-tree-sitter
|
|
103
103
|
licenses:
|
104
104
|
- MIT
|
105
105
|
metadata:
|
106
|
-
allowed_push_host: https://rubygems.org
|
107
106
|
homepage_uri: https://www.github.com/Faveod/ruby-tree-sitter
|
108
107
|
source_code_uri: https://www.github.com/Faveod/ruby-tree-sitter
|
109
108
|
changelog_uri: https://www.github.com/Faveod/ruby-tree-sitter
|
@@ -123,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
123
122
|
- !ruby/object:Gem::Version
|
124
123
|
version: '0'
|
125
124
|
requirements: []
|
126
|
-
rubygems_version: 3.
|
125
|
+
rubygems_version: 3.3.26
|
127
126
|
signing_key:
|
128
127
|
specification_version: 4
|
129
128
|
summary: Ruby bindings for Tree-Sitter
|