tree_sitter_language_pack 1.8.1 → 1.9.0.pre.rc.2
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/ext/ts_pack_core_rb/native/Cargo.lock +302 -13
- data/ext/ts_pack_core_rb/native/Cargo.toml +2 -8
- data/ext/ts_pack_core_rb/src/lib.rs +75 -395
- data/lib/tree_sitter_language_pack/native.rb +2 -38
- data/lib/tree_sitter_language_pack/version.rb +2 -2
- data/lib/tree_sitter_language_pack.rb +1 -1
- data/sig/types.rbs +19 -209
- metadata +15 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// This file is auto-generated by alef. DO NOT EDIT.
|
|
2
|
-
// alef:hash:
|
|
2
|
+
// alef:hash:a73f3f13c65d02941aef62a37b9b2051ea03b9a31b9017f47182d51888d6138e
|
|
3
3
|
// Re-generate with: alef generate
|
|
4
4
|
#![allow(dead_code, unused_imports, unused_variables)]
|
|
5
5
|
#![allow(
|
|
@@ -20,7 +20,6 @@
|
|
|
20
20
|
)]
|
|
21
21
|
|
|
22
22
|
use magnus::{Error, IntoValueFromNative, Ruby, function, method, prelude::*, try_convert::TryConvertOwned};
|
|
23
|
-
use std::collections::HashMap;
|
|
24
23
|
use std::sync::Arc;
|
|
25
24
|
use std::sync::Mutex;
|
|
26
25
|
|
|
@@ -2081,10 +2080,6 @@ impl magnus::TryConvert for LanguageRegistry {
|
|
|
2081
2080
|
unsafe impl TryConvertOwned for LanguageRegistry {}
|
|
2082
2081
|
|
|
2083
2082
|
impl LanguageRegistry {
|
|
2084
|
-
fn add_extra_libs_dir(&self, dir: String) -> () {
|
|
2085
|
-
self.inner.add_extra_libs_dir(std::path::PathBuf::from(dir))
|
|
2086
|
-
}
|
|
2087
|
-
|
|
2088
2083
|
fn get_language(&self, name: String) -> Result<Language, Error> {
|
|
2089
2084
|
let result = self.inner.get_language(&name).map_err(|e| {
|
|
2090
2085
|
magnus::Error::new(
|
|
@@ -2121,219 +2116,6 @@ impl LanguageRegistry {
|
|
|
2121
2116
|
}
|
|
2122
2117
|
}
|
|
2123
2118
|
|
|
2124
|
-
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
|
|
2125
|
-
#[magnus::wrap(class = "TreeSitterLanguagePack::ParserManifest")]
|
|
2126
|
-
pub struct ParserManifest {
|
|
2127
|
-
version: String,
|
|
2128
|
-
platforms: HashMap<String, PlatformBundle>,
|
|
2129
|
-
languages: HashMap<String, LanguageInfo>,
|
|
2130
|
-
groups: HashMap<String, Vec<String>>,
|
|
2131
|
-
}
|
|
2132
|
-
|
|
2133
|
-
unsafe impl IntoValueFromNative for ParserManifest {}
|
|
2134
|
-
|
|
2135
|
-
impl magnus::TryConvert for ParserManifest {
|
|
2136
|
-
fn try_convert(val: magnus::Value) -> Result<Self, magnus::Error> {
|
|
2137
|
-
if let Ok(r) = <&ParserManifest as magnus::TryConvert>::try_convert(val) {
|
|
2138
|
-
return Ok(r.clone());
|
|
2139
|
-
}
|
|
2140
|
-
let json_str: String = if let Ok(s) = <String as magnus::TryConvert>::try_convert(val) {
|
|
2141
|
-
s
|
|
2142
|
-
} else {
|
|
2143
|
-
val.funcall::<_, _, String>("to_json", ()).map_err(|e| {
|
|
2144
|
-
magnus::Error::new(
|
|
2145
|
-
unsafe { magnus::Ruby::get_unchecked() }.exception_type_error(),
|
|
2146
|
-
format!("no implicit conversion into ParserManifest: {}", e),
|
|
2147
|
-
)
|
|
2148
|
-
})?
|
|
2149
|
-
};
|
|
2150
|
-
serde_json::from_str::<ParserManifest>(&json_str).map_err(|e| {
|
|
2151
|
-
magnus::Error::new(
|
|
2152
|
-
unsafe { magnus::Ruby::get_unchecked() }.exception_type_error(),
|
|
2153
|
-
format!("failed to deserialize ParserManifest: {}", e),
|
|
2154
|
-
)
|
|
2155
|
-
})
|
|
2156
|
-
}
|
|
2157
|
-
}
|
|
2158
|
-
|
|
2159
|
-
unsafe impl TryConvertOwned for ParserManifest {}
|
|
2160
|
-
|
|
2161
|
-
impl ParserManifest {
|
|
2162
|
-
fn new(args: &[magnus::Value]) -> Result<Self, magnus::Error> {
|
|
2163
|
-
let ruby = unsafe { magnus::Ruby::get_unchecked() };
|
|
2164
|
-
let args = magnus::scan_args::scan_args::<(), (Option<magnus::RHash>,), (), (), (), ()>(args)?;
|
|
2165
|
-
let (kwargs_opt,) = args.optional;
|
|
2166
|
-
let kwargs = kwargs_opt.unwrap_or_else(|| ruby.hash_new());
|
|
2167
|
-
Ok(Self {
|
|
2168
|
-
version: kwargs
|
|
2169
|
-
.get(ruby.to_symbol("version"))
|
|
2170
|
-
.and_then(|v| String::try_convert(v).ok())
|
|
2171
|
-
.unwrap_or_default(),
|
|
2172
|
-
platforms: kwargs
|
|
2173
|
-
.get(ruby.to_symbol("platforms"))
|
|
2174
|
-
.and_then(|v| <HashMap<String, PlatformBundle>>::try_convert(v).ok())
|
|
2175
|
-
.unwrap_or_default(),
|
|
2176
|
-
languages: kwargs
|
|
2177
|
-
.get(ruby.to_symbol("languages"))
|
|
2178
|
-
.and_then(|v| <HashMap<String, LanguageInfo>>::try_convert(v).ok())
|
|
2179
|
-
.unwrap_or_default(),
|
|
2180
|
-
groups: kwargs
|
|
2181
|
-
.get(ruby.to_symbol("groups"))
|
|
2182
|
-
.and_then(|v| <HashMap<String, Vec<String>>>::try_convert(v).ok())
|
|
2183
|
-
.unwrap_or_default(),
|
|
2184
|
-
})
|
|
2185
|
-
}
|
|
2186
|
-
|
|
2187
|
-
fn version(&self) -> String {
|
|
2188
|
-
self.version.clone()
|
|
2189
|
-
}
|
|
2190
|
-
|
|
2191
|
-
fn platforms(&self) -> HashMap<String, PlatformBundle> {
|
|
2192
|
-
self.platforms.clone()
|
|
2193
|
-
}
|
|
2194
|
-
|
|
2195
|
-
fn languages(&self) -> HashMap<String, LanguageInfo> {
|
|
2196
|
-
self.languages.clone()
|
|
2197
|
-
}
|
|
2198
|
-
|
|
2199
|
-
fn groups(&self) -> HashMap<String, Vec<String>> {
|
|
2200
|
-
self.groups.clone()
|
|
2201
|
-
}
|
|
2202
|
-
}
|
|
2203
|
-
|
|
2204
|
-
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
|
|
2205
|
-
#[magnus::wrap(class = "TreeSitterLanguagePack::PlatformBundle")]
|
|
2206
|
-
pub struct PlatformBundle {
|
|
2207
|
-
url: String,
|
|
2208
|
-
sha256: String,
|
|
2209
|
-
size: u64,
|
|
2210
|
-
}
|
|
2211
|
-
|
|
2212
|
-
unsafe impl IntoValueFromNative for PlatformBundle {}
|
|
2213
|
-
|
|
2214
|
-
impl magnus::TryConvert for PlatformBundle {
|
|
2215
|
-
fn try_convert(val: magnus::Value) -> Result<Self, magnus::Error> {
|
|
2216
|
-
if let Ok(r) = <&PlatformBundle as magnus::TryConvert>::try_convert(val) {
|
|
2217
|
-
return Ok(r.clone());
|
|
2218
|
-
}
|
|
2219
|
-
let json_str: String = if let Ok(s) = <String as magnus::TryConvert>::try_convert(val) {
|
|
2220
|
-
s
|
|
2221
|
-
} else {
|
|
2222
|
-
val.funcall::<_, _, String>("to_json", ()).map_err(|e| {
|
|
2223
|
-
magnus::Error::new(
|
|
2224
|
-
unsafe { magnus::Ruby::get_unchecked() }.exception_type_error(),
|
|
2225
|
-
format!("no implicit conversion into PlatformBundle: {}", e),
|
|
2226
|
-
)
|
|
2227
|
-
})?
|
|
2228
|
-
};
|
|
2229
|
-
serde_json::from_str::<PlatformBundle>(&json_str).map_err(|e| {
|
|
2230
|
-
magnus::Error::new(
|
|
2231
|
-
unsafe { magnus::Ruby::get_unchecked() }.exception_type_error(),
|
|
2232
|
-
format!("failed to deserialize PlatformBundle: {}", e),
|
|
2233
|
-
)
|
|
2234
|
-
})
|
|
2235
|
-
}
|
|
2236
|
-
}
|
|
2237
|
-
|
|
2238
|
-
unsafe impl TryConvertOwned for PlatformBundle {}
|
|
2239
|
-
|
|
2240
|
-
impl PlatformBundle {
|
|
2241
|
-
fn new(args: &[magnus::Value]) -> Result<Self, magnus::Error> {
|
|
2242
|
-
let ruby = unsafe { magnus::Ruby::get_unchecked() };
|
|
2243
|
-
let args = magnus::scan_args::scan_args::<(), (Option<magnus::RHash>,), (), (), (), ()>(args)?;
|
|
2244
|
-
let (kwargs_opt,) = args.optional;
|
|
2245
|
-
let kwargs = kwargs_opt.unwrap_or_else(|| ruby.hash_new());
|
|
2246
|
-
Ok(Self {
|
|
2247
|
-
url: kwargs
|
|
2248
|
-
.get(ruby.to_symbol("url"))
|
|
2249
|
-
.and_then(|v| String::try_convert(v).ok())
|
|
2250
|
-
.unwrap_or_default(),
|
|
2251
|
-
sha256: kwargs
|
|
2252
|
-
.get(ruby.to_symbol("sha256"))
|
|
2253
|
-
.and_then(|v| String::try_convert(v).ok())
|
|
2254
|
-
.unwrap_or_default(),
|
|
2255
|
-
size: kwargs
|
|
2256
|
-
.get(ruby.to_symbol("size"))
|
|
2257
|
-
.and_then(|v| u64::try_convert(v).ok())
|
|
2258
|
-
.unwrap_or_default(),
|
|
2259
|
-
})
|
|
2260
|
-
}
|
|
2261
|
-
|
|
2262
|
-
fn url(&self) -> String {
|
|
2263
|
-
self.url.clone()
|
|
2264
|
-
}
|
|
2265
|
-
|
|
2266
|
-
fn sha256(&self) -> String {
|
|
2267
|
-
self.sha256.clone()
|
|
2268
|
-
}
|
|
2269
|
-
|
|
2270
|
-
fn size(&self) -> u64 {
|
|
2271
|
-
self.size
|
|
2272
|
-
}
|
|
2273
|
-
}
|
|
2274
|
-
|
|
2275
|
-
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
|
|
2276
|
-
#[magnus::wrap(class = "TreeSitterLanguagePack::LanguageInfo")]
|
|
2277
|
-
pub struct LanguageInfo {
|
|
2278
|
-
group: String,
|
|
2279
|
-
size: u64,
|
|
2280
|
-
}
|
|
2281
|
-
|
|
2282
|
-
unsafe impl IntoValueFromNative for LanguageInfo {}
|
|
2283
|
-
|
|
2284
|
-
impl magnus::TryConvert for LanguageInfo {
|
|
2285
|
-
fn try_convert(val: magnus::Value) -> Result<Self, magnus::Error> {
|
|
2286
|
-
if let Ok(r) = <&LanguageInfo as magnus::TryConvert>::try_convert(val) {
|
|
2287
|
-
return Ok(r.clone());
|
|
2288
|
-
}
|
|
2289
|
-
let json_str: String = if let Ok(s) = <String as magnus::TryConvert>::try_convert(val) {
|
|
2290
|
-
s
|
|
2291
|
-
} else {
|
|
2292
|
-
val.funcall::<_, _, String>("to_json", ()).map_err(|e| {
|
|
2293
|
-
magnus::Error::new(
|
|
2294
|
-
unsafe { magnus::Ruby::get_unchecked() }.exception_type_error(),
|
|
2295
|
-
format!("no implicit conversion into LanguageInfo: {}", e),
|
|
2296
|
-
)
|
|
2297
|
-
})?
|
|
2298
|
-
};
|
|
2299
|
-
serde_json::from_str::<LanguageInfo>(&json_str).map_err(|e| {
|
|
2300
|
-
magnus::Error::new(
|
|
2301
|
-
unsafe { magnus::Ruby::get_unchecked() }.exception_type_error(),
|
|
2302
|
-
format!("failed to deserialize LanguageInfo: {}", e),
|
|
2303
|
-
)
|
|
2304
|
-
})
|
|
2305
|
-
}
|
|
2306
|
-
}
|
|
2307
|
-
|
|
2308
|
-
unsafe impl TryConvertOwned for LanguageInfo {}
|
|
2309
|
-
|
|
2310
|
-
impl LanguageInfo {
|
|
2311
|
-
fn new(args: &[magnus::Value]) -> Result<Self, magnus::Error> {
|
|
2312
|
-
let ruby = unsafe { magnus::Ruby::get_unchecked() };
|
|
2313
|
-
let args = magnus::scan_args::scan_args::<(), (Option<magnus::RHash>,), (), (), (), ()>(args)?;
|
|
2314
|
-
let (kwargs_opt,) = args.optional;
|
|
2315
|
-
let kwargs = kwargs_opt.unwrap_or_else(|| ruby.hash_new());
|
|
2316
|
-
Ok(Self {
|
|
2317
|
-
group: kwargs
|
|
2318
|
-
.get(ruby.to_symbol("group"))
|
|
2319
|
-
.and_then(|v| String::try_convert(v).ok())
|
|
2320
|
-
.unwrap_or_default(),
|
|
2321
|
-
size: kwargs
|
|
2322
|
-
.get(ruby.to_symbol("size"))
|
|
2323
|
-
.and_then(|v| u64::try_convert(v).ok())
|
|
2324
|
-
.unwrap_or_default(),
|
|
2325
|
-
})
|
|
2326
|
-
}
|
|
2327
|
-
|
|
2328
|
-
fn group(&self) -> String {
|
|
2329
|
-
self.group.clone()
|
|
2330
|
-
}
|
|
2331
|
-
|
|
2332
|
-
fn size(&self) -> u64 {
|
|
2333
|
-
self.size
|
|
2334
|
-
}
|
|
2335
|
-
}
|
|
2336
|
-
|
|
2337
2119
|
#[derive(Clone)]
|
|
2338
2120
|
#[magnus::wrap(class = "TreeSitterLanguagePack::DownloadManager")]
|
|
2339
2121
|
pub struct DownloadManager {
|
|
@@ -2352,49 +2134,10 @@ impl magnus::TryConvert for DownloadManager {
|
|
|
2352
2134
|
unsafe impl TryConvertOwned for DownloadManager {}
|
|
2353
2135
|
|
|
2354
2136
|
impl DownloadManager {
|
|
2355
|
-
fn cache_dir(&self) -> String {
|
|
2356
|
-
self.inner.cache_dir().to_string_lossy().to_string()
|
|
2357
|
-
}
|
|
2358
|
-
|
|
2359
2137
|
fn installed_languages(&self) -> Vec<String> {
|
|
2360
2138
|
self.inner.installed_languages()
|
|
2361
2139
|
}
|
|
2362
2140
|
|
|
2363
|
-
fn ensure_languages(&self, names: Vec<String>) -> Result<(), Error> {
|
|
2364
|
-
let names_refs: Vec<&str> = names.iter().map(|s| s.as_str()).collect();
|
|
2365
|
-
self.inner.ensure_languages(&names_refs).map_err(|e| {
|
|
2366
|
-
magnus::Error::new(
|
|
2367
|
-
unsafe { Ruby::get_unchecked() }.exception_runtime_error(),
|
|
2368
|
-
e.to_string(),
|
|
2369
|
-
)
|
|
2370
|
-
})?;
|
|
2371
|
-
Ok(())
|
|
2372
|
-
}
|
|
2373
|
-
|
|
2374
|
-
fn ensure_group(&self, group: String) -> Result<(), Error> {
|
|
2375
|
-
self.inner.ensure_group(&group).map_err(|e| {
|
|
2376
|
-
magnus::Error::new(
|
|
2377
|
-
unsafe { Ruby::get_unchecked() }.exception_runtime_error(),
|
|
2378
|
-
e.to_string(),
|
|
2379
|
-
)
|
|
2380
|
-
})?;
|
|
2381
|
-
Ok(())
|
|
2382
|
-
}
|
|
2383
|
-
|
|
2384
|
-
fn lib_path(&self, name: String) -> String {
|
|
2385
|
-
self.inner.lib_path(&name).to_string_lossy().to_string()
|
|
2386
|
-
}
|
|
2387
|
-
|
|
2388
|
-
fn fetch_manifest(&self) -> Result<ParserManifest, Error> {
|
|
2389
|
-
let result = self.inner.fetch_manifest().map_err(|e| {
|
|
2390
|
-
magnus::Error::new(
|
|
2391
|
-
unsafe { Ruby::get_unchecked() }.exception_runtime_error(),
|
|
2392
|
-
e.to_string(),
|
|
2393
|
-
)
|
|
2394
|
-
})?;
|
|
2395
|
-
Ok(result.into())
|
|
2396
|
-
}
|
|
2397
|
-
|
|
2398
2141
|
fn download_all_best_effort(&self) -> Result<usize, Error> {
|
|
2399
2142
|
let result = self.inner.download_all_best_effort().map_err(|e| {
|
|
2400
2143
|
magnus::Error::new(
|
|
@@ -2467,15 +2210,26 @@ impl magnus::IntoValue for StructureKind {
|
|
|
2467
2210
|
|
|
2468
2211
|
impl magnus::TryConvert for StructureKind {
|
|
2469
2212
|
fn try_convert(val: magnus::Value) -> Result<Self, magnus::Error> {
|
|
2470
|
-
|
|
2471
|
-
//
|
|
2213
|
+
// For data enums with fields (e.g., PageAction), try to deserialize from JSON first.
|
|
2214
|
+
// For unit enums or when passed as a string, fall back to string-based conversion.
|
|
2215
|
+
let json_str: String = if let Ok(s) = <String as magnus::TryConvert>::try_convert(val) {
|
|
2216
|
+
s
|
|
2217
|
+
} else {
|
|
2218
|
+
val.funcall::<_, _, String>("to_json", ()).map_err(|e| {
|
|
2219
|
+
magnus::Error::new(
|
|
2220
|
+
unsafe { Ruby::get_unchecked() }.exception_type_error(),
|
|
2221
|
+
format!("no implicit conversion into StructureKind: {}", e),
|
|
2222
|
+
)
|
|
2223
|
+
})?
|
|
2224
|
+
};
|
|
2225
|
+
// Try deserializing as JSON first (handles JSON strings like "\"markdown\"" or "{\"click\":{\"selector\":\"...\"}}\"")
|
|
2472
2226
|
// If that fails, try treating it as a plain string value and wrap in quotes
|
|
2473
2227
|
// If both fail, try as Custom variant (for untagged enum support)
|
|
2474
|
-
serde_json::from_str(&
|
|
2475
|
-
.or_else(|_| serde_json::from_str(&format!("\"{
|
|
2228
|
+
serde_json::from_str(&json_str)
|
|
2229
|
+
.or_else(|_| serde_json::from_str(&format!("\"{json_str}\"")))
|
|
2476
2230
|
.or_else(|_| {
|
|
2477
2231
|
// Try as a JSON string for Custom variant (untagged enums accept any remaining value)
|
|
2478
|
-
match serde_json::to_value(&
|
|
2232
|
+
match serde_json::to_value(&json_str) {
|
|
2479
2233
|
Ok(val) => serde_json::from_value(val),
|
|
2480
2234
|
Err(e) => Err(e),
|
|
2481
2235
|
}
|
|
@@ -2558,15 +2312,26 @@ impl magnus::IntoValue for DocstringFormat {
|
|
|
2558
2312
|
|
|
2559
2313
|
impl magnus::TryConvert for DocstringFormat {
|
|
2560
2314
|
fn try_convert(val: magnus::Value) -> Result<Self, magnus::Error> {
|
|
2561
|
-
|
|
2562
|
-
//
|
|
2315
|
+
// For data enums with fields (e.g., PageAction), try to deserialize from JSON first.
|
|
2316
|
+
// For unit enums or when passed as a string, fall back to string-based conversion.
|
|
2317
|
+
let json_str: String = if let Ok(s) = <String as magnus::TryConvert>::try_convert(val) {
|
|
2318
|
+
s
|
|
2319
|
+
} else {
|
|
2320
|
+
val.funcall::<_, _, String>("to_json", ()).map_err(|e| {
|
|
2321
|
+
magnus::Error::new(
|
|
2322
|
+
unsafe { Ruby::get_unchecked() }.exception_type_error(),
|
|
2323
|
+
format!("no implicit conversion into DocstringFormat: {}", e),
|
|
2324
|
+
)
|
|
2325
|
+
})?
|
|
2326
|
+
};
|
|
2327
|
+
// Try deserializing as JSON first (handles JSON strings like "\"markdown\"" or "{\"click\":{\"selector\":\"...\"}}\"")
|
|
2563
2328
|
// If that fails, try treating it as a plain string value and wrap in quotes
|
|
2564
2329
|
// If both fail, try as Custom variant (for untagged enum support)
|
|
2565
|
-
serde_json::from_str(&
|
|
2566
|
-
.or_else(|_| serde_json::from_str(&format!("\"{
|
|
2330
|
+
serde_json::from_str(&json_str)
|
|
2331
|
+
.or_else(|_| serde_json::from_str(&format!("\"{json_str}\"")))
|
|
2567
2332
|
.or_else(|_| {
|
|
2568
2333
|
// Try as a JSON string for Custom variant (untagged enums accept any remaining value)
|
|
2569
|
-
match serde_json::to_value(&
|
|
2334
|
+
match serde_json::to_value(&json_str) {
|
|
2570
2335
|
Ok(val) => serde_json::from_value(val),
|
|
2571
2336
|
Err(e) => Err(e),
|
|
2572
2337
|
}
|
|
@@ -2652,15 +2417,26 @@ impl magnus::IntoValue for SymbolKind {
|
|
|
2652
2417
|
|
|
2653
2418
|
impl magnus::TryConvert for SymbolKind {
|
|
2654
2419
|
fn try_convert(val: magnus::Value) -> Result<Self, magnus::Error> {
|
|
2655
|
-
|
|
2656
|
-
//
|
|
2420
|
+
// For data enums with fields (e.g., PageAction), try to deserialize from JSON first.
|
|
2421
|
+
// For unit enums or when passed as a string, fall back to string-based conversion.
|
|
2422
|
+
let json_str: String = if let Ok(s) = <String as magnus::TryConvert>::try_convert(val) {
|
|
2423
|
+
s
|
|
2424
|
+
} else {
|
|
2425
|
+
val.funcall::<_, _, String>("to_json", ()).map_err(|e| {
|
|
2426
|
+
magnus::Error::new(
|
|
2427
|
+
unsafe { Ruby::get_unchecked() }.exception_type_error(),
|
|
2428
|
+
format!("no implicit conversion into SymbolKind: {}", e),
|
|
2429
|
+
)
|
|
2430
|
+
})?
|
|
2431
|
+
};
|
|
2432
|
+
// Try deserializing as JSON first (handles JSON strings like "\"markdown\"" or "{\"click\":{\"selector\":\"...\"}}\"")
|
|
2657
2433
|
// If that fails, try treating it as a plain string value and wrap in quotes
|
|
2658
2434
|
// If both fail, try as Custom variant (for untagged enum support)
|
|
2659
|
-
serde_json::from_str(&
|
|
2660
|
-
.or_else(|_| serde_json::from_str(&format!("\"{
|
|
2435
|
+
serde_json::from_str(&json_str)
|
|
2436
|
+
.or_else(|_| serde_json::from_str(&format!("\"{json_str}\"")))
|
|
2661
2437
|
.or_else(|_| {
|
|
2662
2438
|
// Try as a JSON string for Custom variant (untagged enums accept any remaining value)
|
|
2663
|
-
match serde_json::to_value(&
|
|
2439
|
+
match serde_json::to_value(&json_str) {
|
|
2664
2440
|
Ok(val) => serde_json::from_value(val),
|
|
2665
2441
|
Err(e) => Err(e),
|
|
2666
2442
|
}
|
|
@@ -2878,6 +2654,16 @@ fn download_all() -> Result<usize, Error> {
|
|
|
2878
2654
|
Ok(result)
|
|
2879
2655
|
}
|
|
2880
2656
|
|
|
2657
|
+
fn download_group(name: String) -> Result<usize, Error> {
|
|
2658
|
+
let result = tree_sitter_language_pack::download_group(&name).map_err(|e| {
|
|
2659
|
+
magnus::Error::new(
|
|
2660
|
+
unsafe { Ruby::get_unchecked() }.exception_runtime_error(),
|
|
2661
|
+
e.to_string(),
|
|
2662
|
+
)
|
|
2663
|
+
})?;
|
|
2664
|
+
Ok(result)
|
|
2665
|
+
}
|
|
2666
|
+
|
|
2881
2667
|
fn manifest_languages() -> Result<Vec<String>, Error> {
|
|
2882
2668
|
let result = tree_sitter_language_pack::manifest_languages().map_err(|e| {
|
|
2883
2669
|
magnus::Error::new(
|
|
@@ -3017,7 +2803,7 @@ impl From<StructureItem> for tree_sitter_language_pack::StructureItem {
|
|
|
3017
2803
|
visibility: val.visibility,
|
|
3018
2804
|
span: val.span.into(),
|
|
3019
2805
|
children: val.children.into_iter().map(Into::into).collect(),
|
|
3020
|
-
decorators: val.decorators,
|
|
2806
|
+
decorators: val.decorators.into_iter().collect(),
|
|
3021
2807
|
doc_comment: val.doc_comment,
|
|
3022
2808
|
signature: val.signature,
|
|
3023
2809
|
body_span: val.body_span.map(Into::into),
|
|
@@ -3034,7 +2820,7 @@ impl From<tree_sitter_language_pack::StructureItem> for StructureItem {
|
|
|
3034
2820
|
visibility: val.visibility,
|
|
3035
2821
|
span: val.span.into(),
|
|
3036
2822
|
children: val.children.into_iter().map(Into::into).collect(),
|
|
3037
|
-
decorators: val.decorators,
|
|
2823
|
+
decorators: val.decorators.into_iter().collect(),
|
|
3038
2824
|
doc_comment: val.doc_comment,
|
|
3039
2825
|
signature: val.signature,
|
|
3040
2826
|
body_span: val.body_span.map(Into::into),
|
|
@@ -3119,7 +2905,7 @@ impl From<ImportInfo> for tree_sitter_language_pack::ImportInfo {
|
|
|
3119
2905
|
fn from(val: ImportInfo) -> Self {
|
|
3120
2906
|
Self {
|
|
3121
2907
|
source: val.source,
|
|
3122
|
-
items: val.items,
|
|
2908
|
+
items: val.items.into_iter().collect(),
|
|
3123
2909
|
alias: val.alias,
|
|
3124
2910
|
is_wildcard: val.is_wildcard,
|
|
3125
2911
|
span: val.span.into(),
|
|
@@ -3132,7 +2918,7 @@ impl From<tree_sitter_language_pack::ImportInfo> for ImportInfo {
|
|
|
3132
2918
|
fn from(val: tree_sitter_language_pack::ImportInfo) -> Self {
|
|
3133
2919
|
Self {
|
|
3134
2920
|
source: val.source,
|
|
3135
|
-
items: val.items,
|
|
2921
|
+
items: val.items.into_iter().collect(),
|
|
3136
2922
|
alias: val.alias,
|
|
3137
2923
|
is_wildcard: val.is_wildcard,
|
|
3138
2924
|
span: val.span.into(),
|
|
@@ -3245,9 +3031,9 @@ impl From<ChunkContext> for tree_sitter_language_pack::ChunkContext {
|
|
|
3245
3031
|
language: val.language,
|
|
3246
3032
|
chunk_index: val.chunk_index,
|
|
3247
3033
|
total_chunks: val.total_chunks,
|
|
3248
|
-
node_types: val.node_types,
|
|
3249
|
-
context_path: val.context_path,
|
|
3250
|
-
symbols_defined: val.symbols_defined,
|
|
3034
|
+
node_types: val.node_types.into_iter().collect(),
|
|
3035
|
+
context_path: val.context_path.into_iter().collect(),
|
|
3036
|
+
symbols_defined: val.symbols_defined.into_iter().collect(),
|
|
3251
3037
|
comments: val.comments.into_iter().map(Into::into).collect(),
|
|
3252
3038
|
docstrings: val.docstrings.into_iter().map(Into::into).collect(),
|
|
3253
3039
|
has_error_nodes: val.has_error_nodes,
|
|
@@ -3262,9 +3048,9 @@ impl From<tree_sitter_language_pack::ChunkContext> for ChunkContext {
|
|
|
3262
3048
|
language: val.language,
|
|
3263
3049
|
chunk_index: val.chunk_index,
|
|
3264
3050
|
total_chunks: val.total_chunks,
|
|
3265
|
-
node_types: val.node_types,
|
|
3266
|
-
context_path: val.context_path,
|
|
3267
|
-
symbols_defined: val.symbols_defined,
|
|
3051
|
+
node_types: val.node_types.into_iter().collect(),
|
|
3052
|
+
context_path: val.context_path.into_iter().collect(),
|
|
3053
|
+
symbols_defined: val.symbols_defined.into_iter().collect(),
|
|
3268
3054
|
comments: val.comments.into_iter().map(Into::into).collect(),
|
|
3269
3055
|
docstrings: val.docstrings.into_iter().map(Into::into).collect(),
|
|
3270
3056
|
has_error_nodes: val.has_error_nodes,
|
|
@@ -3277,8 +3063,8 @@ impl From<PackConfig> for tree_sitter_language_pack::PackConfig {
|
|
|
3277
3063
|
fn from(val: PackConfig) -> Self {
|
|
3278
3064
|
Self {
|
|
3279
3065
|
cache_dir: val.cache_dir.map(Into::into),
|
|
3280
|
-
languages: val.languages,
|
|
3281
|
-
groups: val.groups,
|
|
3066
|
+
languages: val.languages.map(|v| v.into_iter().collect()),
|
|
3067
|
+
groups: val.groups.map(|v| v.into_iter().collect()),
|
|
3282
3068
|
}
|
|
3283
3069
|
}
|
|
3284
3070
|
}
|
|
@@ -3288,8 +3074,8 @@ impl From<tree_sitter_language_pack::PackConfig> for PackConfig {
|
|
|
3288
3074
|
fn from(val: tree_sitter_language_pack::PackConfig) -> Self {
|
|
3289
3075
|
Self {
|
|
3290
3076
|
cache_dir: val.cache_dir.map(|p| p.to_string_lossy().to_string()),
|
|
3291
|
-
languages: val.languages,
|
|
3292
|
-
groups: val.groups,
|
|
3077
|
+
languages: val.languages.map(|v| v.into_iter().collect()),
|
|
3078
|
+
groups: val.groups.map(|v| v.into_iter().collect()),
|
|
3293
3079
|
}
|
|
3294
3080
|
}
|
|
3295
3081
|
}
|
|
@@ -3368,72 +3154,6 @@ impl From<tree_sitter_language_pack::ProcessConfig> for ProcessConfig {
|
|
|
3368
3154
|
}
|
|
3369
3155
|
}
|
|
3370
3156
|
|
|
3371
|
-
#[allow(clippy::redundant_closure, clippy::useless_conversion)]
|
|
3372
|
-
impl From<ParserManifest> for tree_sitter_language_pack::download::ParserManifest {
|
|
3373
|
-
fn from(val: ParserManifest) -> Self {
|
|
3374
|
-
Self {
|
|
3375
|
-
version: val.version,
|
|
3376
|
-
platforms: val.platforms.into_iter().map(|(k, v)| (k.into(), v.into())).collect(),
|
|
3377
|
-
languages: val.languages.into_iter().map(|(k, v)| (k.into(), v.into())).collect(),
|
|
3378
|
-
groups: val.groups.into_iter().collect(),
|
|
3379
|
-
}
|
|
3380
|
-
}
|
|
3381
|
-
}
|
|
3382
|
-
|
|
3383
|
-
#[allow(clippy::redundant_closure, clippy::useless_conversion)]
|
|
3384
|
-
impl From<tree_sitter_language_pack::download::ParserManifest> for ParserManifest {
|
|
3385
|
-
fn from(val: tree_sitter_language_pack::download::ParserManifest) -> Self {
|
|
3386
|
-
Self {
|
|
3387
|
-
version: val.version,
|
|
3388
|
-
platforms: val.platforms.into_iter().map(|(k, v)| (k, v.into())).collect(),
|
|
3389
|
-
languages: val.languages.into_iter().map(|(k, v)| (k, v.into())).collect(),
|
|
3390
|
-
groups: val.groups.into_iter().collect(),
|
|
3391
|
-
}
|
|
3392
|
-
}
|
|
3393
|
-
}
|
|
3394
|
-
|
|
3395
|
-
#[allow(clippy::redundant_closure, clippy::useless_conversion)]
|
|
3396
|
-
impl From<PlatformBundle> for tree_sitter_language_pack::download::PlatformBundle {
|
|
3397
|
-
fn from(val: PlatformBundle) -> Self {
|
|
3398
|
-
Self {
|
|
3399
|
-
url: val.url,
|
|
3400
|
-
sha256: val.sha256,
|
|
3401
|
-
size: val.size,
|
|
3402
|
-
}
|
|
3403
|
-
}
|
|
3404
|
-
}
|
|
3405
|
-
|
|
3406
|
-
#[allow(clippy::redundant_closure, clippy::useless_conversion)]
|
|
3407
|
-
impl From<tree_sitter_language_pack::download::PlatformBundle> for PlatformBundle {
|
|
3408
|
-
fn from(val: tree_sitter_language_pack::download::PlatformBundle) -> Self {
|
|
3409
|
-
Self {
|
|
3410
|
-
url: val.url,
|
|
3411
|
-
sha256: val.sha256,
|
|
3412
|
-
size: val.size,
|
|
3413
|
-
}
|
|
3414
|
-
}
|
|
3415
|
-
}
|
|
3416
|
-
|
|
3417
|
-
#[allow(clippy::redundant_closure, clippy::useless_conversion)]
|
|
3418
|
-
impl From<LanguageInfo> for tree_sitter_language_pack::download::LanguageInfo {
|
|
3419
|
-
fn from(val: LanguageInfo) -> Self {
|
|
3420
|
-
Self {
|
|
3421
|
-
group: val.group,
|
|
3422
|
-
size: val.size,
|
|
3423
|
-
}
|
|
3424
|
-
}
|
|
3425
|
-
}
|
|
3426
|
-
|
|
3427
|
-
#[allow(clippy::redundant_closure, clippy::useless_conversion)]
|
|
3428
|
-
impl From<tree_sitter_language_pack::download::LanguageInfo> for LanguageInfo {
|
|
3429
|
-
fn from(val: tree_sitter_language_pack::download::LanguageInfo) -> Self {
|
|
3430
|
-
Self {
|
|
3431
|
-
group: val.group,
|
|
3432
|
-
size: val.size,
|
|
3433
|
-
}
|
|
3434
|
-
}
|
|
3435
|
-
}
|
|
3436
|
-
|
|
3437
3157
|
impl From<StructureKind> for tree_sitter_language_pack::StructureKind {
|
|
3438
3158
|
fn from(val: StructureKind) -> Self {
|
|
3439
3159
|
match val {
|
|
@@ -3922,8 +3642,6 @@ fn ruby_init(ruby: &Ruby) -> Result<(), Error> {
|
|
|
3922
3642
|
|
|
3923
3643
|
let class = module.define_class("LanguageRegistry", ruby.class_object())?;
|
|
3924
3644
|
|
|
3925
|
-
class.define_method("add_extra_libs_dir", method!(LanguageRegistry::add_extra_libs_dir, 1))?;
|
|
3926
|
-
|
|
3927
3645
|
class.define_method("get_language", method!(LanguageRegistry::get_language, 1))?;
|
|
3928
3646
|
|
|
3929
3647
|
class.define_method("available_languages", method!(LanguageRegistry::available_languages, 0))?;
|
|
@@ -3934,50 +3652,10 @@ fn ruby_init(ruby: &Ruby) -> Result<(), Error> {
|
|
|
3934
3652
|
|
|
3935
3653
|
class.define_method("process", method!(LanguageRegistry::process, 2))?;
|
|
3936
3654
|
|
|
3937
|
-
let class = module.define_class("ParserManifest", ruby.class_object())?;
|
|
3938
|
-
|
|
3939
|
-
class.define_singleton_method("new", function!(ParserManifest::new, -1))?;
|
|
3940
|
-
|
|
3941
|
-
class.define_method("version", method!(ParserManifest::version, 0))?;
|
|
3942
|
-
|
|
3943
|
-
class.define_method("platforms", method!(ParserManifest::platforms, 0))?;
|
|
3944
|
-
|
|
3945
|
-
class.define_method("languages", method!(ParserManifest::languages, 0))?;
|
|
3946
|
-
|
|
3947
|
-
class.define_method("groups", method!(ParserManifest::groups, 0))?;
|
|
3948
|
-
|
|
3949
|
-
let class = module.define_class("PlatformBundle", ruby.class_object())?;
|
|
3950
|
-
|
|
3951
|
-
class.define_singleton_method("new", function!(PlatformBundle::new, -1))?;
|
|
3952
|
-
|
|
3953
|
-
class.define_method("url", method!(PlatformBundle::url, 0))?;
|
|
3954
|
-
|
|
3955
|
-
class.define_method("sha256", method!(PlatformBundle::sha256, 0))?;
|
|
3956
|
-
|
|
3957
|
-
class.define_method("size", method!(PlatformBundle::size, 0))?;
|
|
3958
|
-
|
|
3959
|
-
let class = module.define_class("LanguageInfo", ruby.class_object())?;
|
|
3960
|
-
|
|
3961
|
-
class.define_singleton_method("new", function!(LanguageInfo::new, -1))?;
|
|
3962
|
-
|
|
3963
|
-
class.define_method("group", method!(LanguageInfo::group, 0))?;
|
|
3964
|
-
|
|
3965
|
-
class.define_method("size", method!(LanguageInfo::size, 0))?;
|
|
3966
|
-
|
|
3967
3655
|
let class = module.define_class("DownloadManager", ruby.class_object())?;
|
|
3968
3656
|
|
|
3969
|
-
class.define_method("cache_dir", method!(DownloadManager::cache_dir, 0))?;
|
|
3970
|
-
|
|
3971
3657
|
class.define_method("installed_languages", method!(DownloadManager::installed_languages, 0))?;
|
|
3972
3658
|
|
|
3973
|
-
class.define_method("ensure_languages", method!(DownloadManager::ensure_languages, 1))?;
|
|
3974
|
-
|
|
3975
|
-
class.define_method("ensure_group", method!(DownloadManager::ensure_group, 1))?;
|
|
3976
|
-
|
|
3977
|
-
class.define_method("lib_path", method!(DownloadManager::lib_path, 1))?;
|
|
3978
|
-
|
|
3979
|
-
class.define_method("fetch_manifest", method!(DownloadManager::fetch_manifest, 0))?;
|
|
3980
|
-
|
|
3981
3659
|
class.define_method(
|
|
3982
3660
|
"download_all_best_effort",
|
|
3983
3661
|
method!(DownloadManager::download_all_best_effort, 0),
|
|
@@ -4027,6 +3705,8 @@ fn ruby_init(ruby: &Ruby) -> Result<(), Error> {
|
|
|
4027
3705
|
|
|
4028
3706
|
module.define_module_function("download_all", function!(download_all, 0))?;
|
|
4029
3707
|
|
|
3708
|
+
module.define_module_function("download_group", function!(download_group, 1))?;
|
|
3709
|
+
|
|
4030
3710
|
module.define_module_function("manifest_languages", function!(manifest_languages, 0))?;
|
|
4031
3711
|
|
|
4032
3712
|
module.define_module_function("downloaded_languages", function!(downloaded_languages, 0))?;
|
|
@@ -1,46 +1,10 @@
|
|
|
1
1
|
# This file is auto-generated by alef — DO NOT EDIT.
|
|
2
|
-
# alef:hash:
|
|
2
|
+
# alef:hash:7c2ad6574f6e1041a85475b2fb60302a621b00af3af9ae49ceacb610d7676405
|
|
3
3
|
# To regenerate: alef generate
|
|
4
4
|
# To verify freshness: alef verify --exit-code
|
|
5
5
|
# Issues & docs: https://github.com/kreuzberg-dev/alef
|
|
6
6
|
# frozen_string_literal: true
|
|
7
7
|
|
|
8
8
|
require 'json'
|
|
9
|
+
require 'sorbet-runtime'
|
|
9
10
|
require 'ts_pack_core_rb'
|
|
10
|
-
|
|
11
|
-
# Add accessor methods to Hash-based internally-tagged enum instances
|
|
12
|
-
class Hash
|
|
13
|
-
# Support internally-tagged enum accessors like format.excel, format.email, etc.
|
|
14
|
-
# Also support direct field access like format.sheet_count
|
|
15
|
-
# rubocop:disable Metrics/CyclomaticComplexity
|
|
16
|
-
def method_missing(method_name, *args, &)
|
|
17
|
-
# Try symbol key first (how Magnus converts JSON keys)
|
|
18
|
-
return self[method_name] if key?(method_name)
|
|
19
|
-
|
|
20
|
-
# Try string key
|
|
21
|
-
return self[method_name.to_s] if key?(method_name.to_s)
|
|
22
|
-
|
|
23
|
-
# Check if this hash has a 'format_type' field (indicating an internally-tagged enum)
|
|
24
|
-
format_type = self[:format_type] || self['format_type']
|
|
25
|
-
return super unless format_type
|
|
26
|
-
|
|
27
|
-
# If the method name matches the format_type (snake_case), extract and return the variant's wrapped data
|
|
28
|
-
# Internally-tagged enums store variant data in the '_0' field (from alef's struct variant conversion)
|
|
29
|
-
# This allows format.excel to return the ExcelMetadata hash with sheet_count, sheet_names, etc.
|
|
30
|
-
snake_case_method = method_name.to_s.downcase
|
|
31
|
-
return self[:_0] || self['_0'] || self if snake_case_method == format_type.to_s.downcase
|
|
32
|
-
|
|
33
|
-
super
|
|
34
|
-
end
|
|
35
|
-
# rubocop:enable Metrics/CyclomaticComplexity
|
|
36
|
-
|
|
37
|
-
def respond_to_missing?(method_name, include_private = false)
|
|
38
|
-
return true if key?(method_name) || key?(method_name.to_s)
|
|
39
|
-
|
|
40
|
-
format_type = self[:format_type] || self['format_type']
|
|
41
|
-
return false unless format_type
|
|
42
|
-
|
|
43
|
-
snake_case_method = method_name.to_s.downcase
|
|
44
|
-
snake_case_method == format_type.to_s.downcase || super
|
|
45
|
-
end
|
|
46
|
-
end
|