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 +4 -4
- data/lib/tree_sitter_language_pack.rb +1 -5
- data/lib/ts_pack_core_rb.so +0 -0
- metadata +8 -12
- data/Cargo.toml +0 -22
- data/lib/tree_sitter_language_pack/ts_pack_ruby.so +0 -0
- data/src/lib.rs +0 -296
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: cc2e08fb077f2e255b69708d53500d29aa878b68c0b39061973ab233dfe9d1d0
|
|
4
|
+
data.tar.gz: 01f4ca1038c5ead93f3de07405b2f097245f6de830025904525567d6c427e116
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9aa571dcbc1b557d650228858fac3455cfdf1d82511ef03d24c9440061d809b8992b48a7fbeea1395b9499693616f8aa7577cbf4a364c14d431d78c03d7ddfcd
|
|
7
|
+
data.tar.gz: 795619888e02a263574d5ec2a012ae57802195c2028937b3cd168fb532df8cbfd91c6499b2d16e76ede3bbf7f20bac54e6363c86fff5cede87ec44118d0df3d0
|
|
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.
|
|
4
|
+
version: 1.8.0.pre.rc.19
|
|
5
5
|
platform: aarch64-linux
|
|
6
6
|
authors:
|
|
7
|
-
-
|
|
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:
|
|
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/
|
|
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
|
-
|
|
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.
|
|
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:
|
|
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"] }
|
|
Binary file
|
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
|
-
}
|