tree_sitter_language_pack 1.6.2-aarch64-linux → 1.8.0.pre.rc.19-aarch64-linux

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 95f119e809729eb6b4ac0ea5d504587098a8e2704ad98bafa25e5132f48b2186
4
- data.tar.gz: 2663d7c69607f686fc12bd5e29cd81b8de649e9c54bfb644d8a3113c966a238d
3
+ metadata.gz: cc2e08fb077f2e255b69708d53500d29aa878b68c0b39061973ab233dfe9d1d0
4
+ data.tar.gz: 01f4ca1038c5ead93f3de07405b2f097245f6de830025904525567d6c427e116
5
5
  SHA512:
6
- metadata.gz: 2255dfcd30617901786e57a4ab5e095708878896d76e6bcdcd6126bb664b0240f8960b272da60061e3a3628cdfb116d89a885d91897355f60d5fccedf662fbfe
7
- data.tar.gz: d531ea83ca585d66b9a6abd95c3032f0601927afa4a649351755550ea0489069d5cb2f075bc48ea877116f8ae0905ea3d5a75dc455346c81c4a0212edeac8069
6
+ metadata.gz: 9aa571dcbc1b557d650228858fac3455cfdf1d82511ef03d24c9440061d809b8992b48a7fbeea1395b9499693616f8aa7577cbf4a364c14d431d78c03d7ddfcd
7
+ data.tar.gz: 795619888e02a263574d5ec2a012ae57802195c2028937b3cd168fb532df8cbfd91c6499b2d16e76ede3bbf7f20bac54e6363c86fff5cede87ec44118d0df3d0
@@ -1,7 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'tree_sitter_language_pack/ts_pack_ruby'
4
-
5
- # Ruby bindings for the tree-sitter language pack.
6
- module TreeSitterLanguagePack
7
- end
3
+ require 'ts_pack_core_rb'
Binary file
metadata CHANGED
@@ -1,31 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tree_sitter_language_pack
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.2
4
+ version: 1.8.0.pre.rc.19
5
5
  platform: aarch64-linux
6
6
  authors:
7
- - kreuzberg.dev
7
+ - Kreuzberg Team
8
8
  bindir: bin
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies: []
12
- description: 305 pre-compiled tree-sitter language parsers with Ruby bindings via
13
- Magnus native extensions.
14
- email:
15
- - dev@kreuzberg.dev
12
+ description: Pre-compiled tree-sitter grammars for 305 programming languages
16
13
  executables: []
17
14
  extensions: []
18
15
  extra_rdoc_files: []
19
16
  files:
20
- - Cargo.toml
21
17
  - lib/tree_sitter_language_pack.rb
22
- - lib/tree_sitter_language_pack/ts_pack_ruby.so
23
- - src/lib.rs
18
+ - lib/ts_pack_core_rb.so
24
19
  homepage: https://github.com/kreuzberg-dev/tree-sitter-language-pack
25
20
  licenses:
26
21
  - MIT
27
22
  metadata:
28
- cargo_crate_name: ts-pack-ruby
23
+ keywords: tree-sitter,parser,syntax,language-pack
24
+ rubygems_mfa_required: 'true'
29
25
  rdoc_options: []
30
26
  require_paths:
31
27
  - lib
@@ -33,7 +29,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
33
29
  requirements:
34
30
  - - ">="
35
31
  - !ruby/object:Gem::Version
36
- version: 3.4.0
32
+ version: 3.2.0
37
33
  required_rubygems_version: !ruby/object:Gem::Requirement
38
34
  requirements:
39
35
  - - ">="
@@ -42,5 +38,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
42
38
  requirements: []
43
39
  rubygems_version: 3.6.9
44
40
  specification_version: 4
45
- summary: Ruby bindings for tree-sitter-language-pack
41
+ summary: Pre-compiled tree-sitter grammars for 305 programming languages
46
42
  test_files: []
data/Cargo.toml DELETED
@@ -1,22 +0,0 @@
1
- [package]
2
- name = "ts-pack-ruby"
3
- version.workspace = true
4
- edition.workspace = true
5
- license.workspace = true
6
- repository.workspace = true
7
- description = "Ruby Magnus bindings for tree-sitter language pack"
8
- publish = false
9
-
10
- [package.metadata.cargo-machete]
11
- ignored = ["rb-sys"]
12
-
13
- [lib]
14
- name = "ts_pack_ruby"
15
- crate-type = ["cdylib"]
16
-
17
- [dependencies]
18
- magnus = "0.8"
19
- rb-sys = "0.9"
20
- serde_json = { workspace = true }
21
- tree-sitter = { workspace = true }
22
- tree-sitter-language-pack = { workspace = true, features = ["serde", "download"] }
data/src/lib.rs DELETED
@@ -1,296 +0,0 @@
1
- use magnus::{Error, IntoValue, Ruby, Value as RbValue, function, method, prelude::*};
2
- use std::sync::Mutex;
3
-
4
- /// Wraps a tree-sitter Tree for safe sharing across the Ruby boundary.
5
- #[magnus::wrap(class = "TreeSitterLanguagePack::Tree")]
6
- struct TreeWrapper(Mutex<tree_sitter::Tree>);
7
-
8
- /// Helper to create a runtime error from instance methods where `&Ruby` is not available.
9
- fn lock_error() -> Error {
10
- // SAFETY: This is called from Ruby-invoked methods, so the Ruby VM is active.
11
- let ruby = unsafe { Ruby::get_unchecked() };
12
- Error::new(ruby.exception_runtime_error(), "lock poisoned")
13
- }
14
-
15
- impl TreeWrapper {
16
- fn root_node_type(&self) -> Result<String, Error> {
17
- let guard = self.0.lock().map_err(|_| lock_error())?;
18
- Ok(guard.root_node().kind().to_string())
19
- }
20
-
21
- fn root_child_count(&self) -> Result<usize, Error> {
22
- let guard = self.0.lock().map_err(|_| lock_error())?;
23
- Ok(guard.root_node().named_child_count())
24
- }
25
-
26
- fn contains_node_type(&self, node_type: String) -> Result<bool, Error> {
27
- let guard = self.0.lock().map_err(|_| lock_error())?;
28
- Ok(tree_sitter_language_pack::tree_contains_node_type(&guard, &node_type))
29
- }
30
-
31
- fn has_error_nodes(&self) -> Result<bool, Error> {
32
- let guard = self.0.lock().map_err(|_| lock_error())?;
33
- Ok(tree_sitter_language_pack::tree_has_error_nodes(&guard))
34
- }
35
- }
36
-
37
- fn available_languages() -> Vec<String> {
38
- tree_sitter_language_pack::available_languages()
39
- }
40
-
41
- fn has_language(name: String) -> bool {
42
- tree_sitter_language_pack::has_language(&name)
43
- }
44
-
45
- fn detect_language(path: String) -> Option<String> {
46
- tree_sitter_language_pack::detect_language_from_path(&path).map(String::from)
47
- }
48
-
49
- fn detect_language_from_content(content: String) -> Option<String> {
50
- tree_sitter_language_pack::detect_language_from_content(&content).map(String::from)
51
- }
52
-
53
- fn detect_language_from_extension(ext: String) -> Option<String> {
54
- tree_sitter_language_pack::detect_language_from_extension(&ext).map(String::from)
55
- }
56
-
57
- fn detect_language_from_path(path: String) -> Option<String> {
58
- tree_sitter_language_pack::detect_language_from_path(&path).map(String::from)
59
- }
60
-
61
- /// Returns extension ambiguity information as a JSON string, or nil.
62
- fn extension_ambiguity(ext: String) -> Option<String> {
63
- tree_sitter_language_pack::extension_ambiguity_json(&ext)
64
- }
65
-
66
- fn get_highlights_query(language: String) -> Option<String> {
67
- tree_sitter_language_pack::get_highlights_query(&language).map(String::from)
68
- }
69
-
70
- fn get_injections_query(language: String) -> Option<String> {
71
- tree_sitter_language_pack::get_injections_query(&language).map(String::from)
72
- }
73
-
74
- fn get_locals_query(language: String) -> Option<String> {
75
- tree_sitter_language_pack::get_locals_query(&language).map(String::from)
76
- }
77
-
78
- fn language_count() -> usize {
79
- tree_sitter_language_pack::language_count()
80
- }
81
-
82
- fn get_language_ptr(ruby: &Ruby, name: String) -> Result<u64, Error> {
83
- let language = tree_sitter_language_pack::get_language(&name)
84
- .map_err(|_| Error::new(ruby.exception_runtime_error(), format!("language not found: {name}")))?;
85
- let raw_ptr = language.into_raw();
86
- Ok(raw_ptr as u64)
87
- }
88
-
89
- fn parse_string(ruby: &Ruby, language: String, source: String) -> Result<TreeWrapper, Error> {
90
- let tree = tree_sitter_language_pack::parse_string(&language, source.as_bytes())
91
- .map_err(|e| Error::new(ruby.exception_runtime_error(), format!("{e}")))?;
92
- Ok(TreeWrapper(Mutex::new(tree)))
93
- }
94
-
95
- /// Convert a serde_json::Value to a native Ruby object (Hash, Array, String, Integer, Float, true/false, nil).
96
- fn json_value_to_ruby(ruby: &Ruby, value: &serde_json::Value) -> Result<RbValue, Error> {
97
- Ok(match value {
98
- serde_json::Value::Null => ruby.qnil().as_value(),
99
- serde_json::Value::Bool(b) => (*b).into_value_with(ruby),
100
- serde_json::Value::Number(n) => {
101
- if let Some(i) = n.as_i64() {
102
- i.into_value_with(ruby)
103
- } else if let Some(u) = n.as_u64() {
104
- u.into_value_with(ruby)
105
- } else if let Some(f) = n.as_f64() {
106
- f.into_value_with(ruby)
107
- } else {
108
- ruby.qnil().as_value()
109
- }
110
- }
111
- serde_json::Value::String(s) => s.as_str().into_value_with(ruby),
112
- serde_json::Value::Array(arr) => {
113
- let ary = ruby.ary_new_capa(arr.len());
114
- for item in arr {
115
- ary.push(json_value_to_ruby(ruby, item)?)?;
116
- }
117
- ary.as_value()
118
- }
119
- serde_json::Value::Object(map) => {
120
- let hash = ruby.hash_new();
121
- for (k, v) in map {
122
- hash.aset(k.as_str(), json_value_to_ruby(ruby, v)?)?;
123
- }
124
- hash.as_value()
125
- }
126
- })
127
- }
128
-
129
- /// Unified process method that accepts a JSON config string and returns a native Ruby Hash.
130
- ///
131
- /// The config JSON must contain at least `"language"`. Optional fields:
132
- /// - `structure`, `imports`, `exports`, `comments`, `docstrings`, `symbols`, `diagnostics` (booleans, default true)
133
- /// - `chunk_max_size` (integer or null, default null meaning no chunking)
134
- fn process(ruby: &Ruby, source: String, config_json: String) -> Result<RbValue, Error> {
135
- let core_config: tree_sitter_language_pack::ProcessConfig = serde_json::from_str(&config_json)
136
- .map_err(|e| Error::new(ruby.exception_runtime_error(), format!("invalid config JSON: {e}")))?;
137
-
138
- let result = tree_sitter_language_pack::process(&source, &core_config)
139
- .map_err(|e| Error::new(ruby.exception_runtime_error(), format!("{e}")))?;
140
-
141
- let json_value = serde_json::to_value(&result)
142
- .map_err(|e| Error::new(ruby.exception_runtime_error(), format!("serialization failed: {e}")))?;
143
- json_value_to_ruby(ruby, &json_value)
144
- }
145
-
146
- /// Extract patterns from source code using a JSON configuration.
147
- ///
148
- /// The config JSON must contain:
149
- /// - `language` (string): the language name
150
- /// - `patterns` (object): named patterns to run, each with a `query` field
151
- ///
152
- /// Returns a native Ruby Hash with extraction results.
153
- fn extract(ruby: &Ruby, source: String, config_json: String) -> Result<RbValue, Error> {
154
- let config: tree_sitter_language_pack::ExtractionConfig = serde_json::from_str(&config_json)
155
- .map_err(|e| Error::new(ruby.exception_runtime_error(), format!("invalid config JSON: {e}")))?;
156
-
157
- let result = tree_sitter_language_pack::extract_patterns(&source, &config)
158
- .map_err(|e| Error::new(ruby.exception_runtime_error(), format!("{e}")))?;
159
-
160
- let json_value = serde_json::to_value(&result)
161
- .map_err(|e| Error::new(ruby.exception_runtime_error(), format!("serialization failed: {e}")))?;
162
- json_value_to_ruby(ruby, &json_value)
163
- }
164
-
165
- /// Validate extraction patterns without running them.
166
- ///
167
- /// The config JSON must contain:
168
- /// - `language` (string): the language name
169
- /// - `patterns` (object): named patterns to validate
170
- ///
171
- /// Returns a native Ruby Hash with validation results.
172
- fn validate_extraction(ruby: &Ruby, config_json: String) -> Result<RbValue, Error> {
173
- let config: tree_sitter_language_pack::ExtractionConfig = serde_json::from_str(&config_json)
174
- .map_err(|e| Error::new(ruby.exception_runtime_error(), format!("invalid config JSON: {e}")))?;
175
-
176
- let result = tree_sitter_language_pack::validate_extraction(&config)
177
- .map_err(|e| Error::new(ruby.exception_runtime_error(), format!("{e}")))?;
178
-
179
- let json_value = serde_json::to_value(&result)
180
- .map_err(|e| Error::new(ruby.exception_runtime_error(), format!("serialization failed: {e}")))?;
181
- json_value_to_ruby(ruby, &json_value)
182
- }
183
-
184
- /// Initialize the language pack with configuration.
185
- ///
186
- /// Accepts a JSON string with optional fields:
187
- /// - `cache_dir` (string): override default cache directory
188
- /// - `languages` (array): language names to pre-download
189
- /// - `groups` (array): language groups to pre-download
190
- fn rb_init(ruby: &Ruby, config_json: String) -> Result<(), Error> {
191
- let config: tree_sitter_language_pack::PackConfig = serde_json::from_str(&config_json)
192
- .map_err(|e| Error::new(ruby.exception_runtime_error(), format!("invalid config JSON: {e}")))?;
193
-
194
- tree_sitter_language_pack::init(&config).map_err(|e| Error::new(ruby.exception_runtime_error(), format!("{e}")))
195
- }
196
-
197
- /// Configure the language pack without downloading.
198
- ///
199
- /// Accepts a JSON string with optional fields:
200
- /// - `cache_dir` (string): override default cache directory
201
- fn rb_configure(ruby: &Ruby, config_json: String) -> Result<(), Error> {
202
- let config: tree_sitter_language_pack::PackConfig = serde_json::from_str(&config_json)
203
- .map_err(|e| Error::new(ruby.exception_runtime_error(), format!("invalid config JSON: {e}")))?;
204
-
205
- tree_sitter_language_pack::configure(&config)
206
- .map_err(|e| Error::new(ruby.exception_runtime_error(), format!("{e}")))
207
- }
208
-
209
- /// Download specific languages to the cache.
210
- ///
211
- /// Returns the number of newly downloaded languages.
212
- fn rb_download(ruby: &Ruby, names: Vec<String>) -> Result<usize, Error> {
213
- let refs: Vec<&str> = names.iter().map(String::as_str).collect();
214
- tree_sitter_language_pack::download(&refs).map_err(|e| Error::new(ruby.exception_runtime_error(), format!("{e}")))
215
- }
216
-
217
- /// Download all available languages from the remote manifest.
218
- ///
219
- /// Returns the number of newly downloaded languages.
220
- fn rb_download_all(ruby: &Ruby) -> Result<usize, Error> {
221
- tree_sitter_language_pack::download_all().map_err(|e| Error::new(ruby.exception_runtime_error(), format!("{e}")))
222
- }
223
-
224
- /// Get all language names available in the remote manifest.
225
- fn rb_manifest_languages(ruby: &Ruby) -> Result<Vec<String>, Error> {
226
- tree_sitter_language_pack::manifest_languages()
227
- .map_err(|e| Error::new(ruby.exception_runtime_error(), format!("{e}")))
228
- }
229
-
230
- /// Get all languages that are already downloaded and cached locally.
231
- fn rb_downloaded_languages() -> Vec<String> {
232
- tree_sitter_language_pack::downloaded_languages()
233
- }
234
-
235
- /// Delete all cached parser shared libraries.
236
- fn rb_clean_cache(ruby: &Ruby) -> Result<(), Error> {
237
- tree_sitter_language_pack::clean_cache().map_err(|e| Error::new(ruby.exception_runtime_error(), format!("{e}")))
238
- }
239
-
240
- /// Get the effective cache directory path as a string.
241
- fn rb_cache_dir(ruby: &Ruby) -> Result<String, Error> {
242
- tree_sitter_language_pack::cache_dir()
243
- .map_err(|e| Error::new(ruby.exception_runtime_error(), format!("{e}")))
244
- .and_then(|path| {
245
- path.to_str()
246
- .ok_or_else(|| Error::new(ruby.exception_runtime_error(), "cache path is not valid UTF-8"))
247
- .map(|s| s.to_string())
248
- })
249
- }
250
-
251
- #[magnus::init]
252
- fn init(ruby: &Ruby) -> Result<(), Error> {
253
- let module = ruby.define_module("TreeSitterLanguagePack")?;
254
-
255
- // Registry and parsing functions
256
- module.define_module_function("available_languages", function!(available_languages, 0))?;
257
- module.define_module_function("has_language", function!(has_language, 1))?;
258
- module.define_module_function("detect_language", function!(detect_language, 1))?;
259
- module.define_module_function(
260
- "detect_language_from_content",
261
- function!(detect_language_from_content, 1),
262
- )?;
263
- module.define_module_function(
264
- "detect_language_from_extension",
265
- function!(detect_language_from_extension, 1),
266
- )?;
267
- module.define_module_function("detect_language_from_path", function!(detect_language_from_path, 1))?;
268
- module.define_module_function("extension_ambiguity", function!(extension_ambiguity, 1))?;
269
- module.define_module_function("get_highlights_query", function!(get_highlights_query, 1))?;
270
- module.define_module_function("get_injections_query", function!(get_injections_query, 1))?;
271
- module.define_module_function("get_locals_query", function!(get_locals_query, 1))?;
272
- module.define_module_function("language_count", function!(language_count, 0))?;
273
- module.define_module_function("get_language_ptr", function!(get_language_ptr, 1))?;
274
- module.define_module_function("parse_string", function!(parse_string, 2))?;
275
- module.define_module_function("process", function!(process, 2))?;
276
- module.define_module_function("extract", function!(extract, 2))?;
277
- module.define_module_function("validate_extraction", function!(validate_extraction, 1))?;
278
-
279
- // Download API functions
280
- module.define_module_function("init", function!(rb_init, 1))?;
281
- module.define_module_function("configure", function!(rb_configure, 1))?;
282
- module.define_module_function("download", function!(rb_download, 1))?;
283
- module.define_module_function("download_all", function!(rb_download_all, 0))?;
284
- module.define_module_function("manifest_languages", function!(rb_manifest_languages, 0))?;
285
- module.define_module_function("downloaded_languages", function!(rb_downloaded_languages, 0))?;
286
- module.define_module_function("clean_cache", function!(rb_clean_cache, 0))?;
287
- module.define_module_function("cache_dir", function!(rb_cache_dir, 0))?;
288
-
289
- let tree_class = module.define_class("Tree", ruby.class_object())?;
290
- tree_class.define_method("root_node_type", method!(TreeWrapper::root_node_type, 0))?;
291
- tree_class.define_method("root_child_count", method!(TreeWrapper::root_child_count, 0))?;
292
- tree_class.define_method("contains_node_type", method!(TreeWrapper::contains_node_type, 1))?;
293
- tree_class.define_method("has_error_nodes", method!(TreeWrapper::has_error_nodes, 0))?;
294
-
295
- Ok(())
296
- }