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.
@@ -1,5 +1,5 @@
1
1
  // This file is auto-generated by alef. DO NOT EDIT.
2
- // alef:hash:2b779fd4a6411cbf6f73ed90dc178998e48f73f245c189530e77b9cad8d334d5
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
- let s: String = magnus::TryConvert::try_convert(val)?;
2471
- // Try deserializing as JSON first (handles JSON strings like "\"markdown\"")
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(&s)
2475
- .or_else(|_| serde_json::from_str(&format!("\"{s}\"")))
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(&s) {
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
- let s: String = magnus::TryConvert::try_convert(val)?;
2562
- // Try deserializing as JSON first (handles JSON strings like "\"markdown\"")
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(&s)
2566
- .or_else(|_| serde_json::from_str(&format!("\"{s}\"")))
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(&s) {
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
- let s: String = magnus::TryConvert::try_convert(val)?;
2656
- // Try deserializing as JSON first (handles JSON strings like "\"markdown\"")
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(&s)
2660
- .or_else(|_| serde_json::from_str(&format!("\"{s}\"")))
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(&s) {
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:8b6fde19410058828311dde84042fe181eb3e1d609f3f53d64b4f7127db9e6af
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