plotnik_langs/
builtin.rs

1use std::sync::{Arc, LazyLock};
2
3use crate::{Lang, LangInner};
4
5macro_rules! define_langs {
6    (
7        $(
8            $fn_name:ident => {
9                feature: $feature:literal,
10                name: $name:literal,
11                ts_lang: $ts_lang:expr,
12                node_types_key: $node_types_key:literal,
13                names: [$($alias:literal),* $(,)?],
14                extensions: [$($ext:literal),* $(,)?] $(,)?
15            }
16        ),* $(,)?
17    ) => {
18        // Generate NodeTypes statics via proc macro
19        $(
20            #[cfg(feature = $feature)]
21            plotnik_macros::generate_node_types!($node_types_key);
22        )*
23
24        // Generate static Lang definitions with LazyLock
25        $(
26            #[cfg(feature = $feature)]
27            pub fn $fn_name() -> Lang {
28                paste::paste! {
29                    static LANG: LazyLock<Lang> = LazyLock::new(|| {
30                        Arc::new(LangInner::new_static(
31                            $name,
32                            $ts_lang.into(),
33                            &[<$node_types_key:upper _NODE_TYPES>],
34                        ))
35                    });
36                }
37                Arc::clone(&LANG)
38            }
39        )*
40
41        pub fn from_name(s: &str) -> Option<Lang> {
42            match s.to_ascii_lowercase().as_str() {
43                $(
44                    #[cfg(feature = $feature)]
45                    $($alias)|* => Some($fn_name()),
46                )*
47                _ => None,
48            }
49        }
50
51        #[allow(unreachable_patterns)]
52        pub fn from_ext(ext: &str) -> Option<Lang> {
53            match ext.to_ascii_lowercase().as_str() {
54                $(
55                    #[cfg(feature = $feature)]
56                    $($ext)|* => Some($fn_name()),
57                )*
58                _ => None,
59            }
60        }
61
62        pub fn all() -> Vec<Lang> {
63            vec![
64                $(
65                    #[cfg(feature = $feature)]
66                    $fn_name(),
67                )*
68            ]
69        }
70    };
71}
72
73define_langs! {
74    ada => {
75        feature: "lang-ada",
76        name: "ada",
77        ts_lang: arborium_ada::language(),
78        node_types_key: "ada",
79        names: ["ada"],
80        extensions: ["ada", "adb", "ads"],
81    },
82    agda => {
83        feature: "lang-agda",
84        name: "agda",
85        ts_lang: arborium_agda::language(),
86        node_types_key: "agda",
87        names: ["agda"],
88        extensions: ["agda"],
89    },
90    asciidoc => {
91        feature: "lang-asciidoc",
92        name: "asciidoc",
93        ts_lang: arborium_asciidoc::language(),
94        node_types_key: "asciidoc",
95        names: ["asciidoc", "adoc"],
96        extensions: ["adoc", "asciidoc", "asc"],
97    },
98    asm => {
99        feature: "lang-asm",
100        name: "asm",
101        ts_lang: arborium_asm::language(),
102        node_types_key: "asm",
103        names: ["asm", "assembly"],
104        extensions: ["asm", "s"],
105    },
106    awk => {
107        feature: "lang-awk",
108        name: "awk",
109        ts_lang: arborium_awk::language(),
110        node_types_key: "awk",
111        names: ["awk", "gawk", "mawk", "nawk"],
112        extensions: ["awk"],
113    },
114    bash => {
115        feature: "lang-bash",
116        name: "bash",
117        ts_lang: arborium_bash::language(),
118        node_types_key: "bash",
119        names: ["bash", "sh", "shell"],
120        extensions: ["sh", "bash"],
121    },
122    batch => {
123        feature: "lang-batch",
124        name: "batch",
125        ts_lang: arborium_batch::language(),
126        node_types_key: "batch",
127        names: ["batch", "bat", "cmd"],
128        extensions: ["bat", "cmd"],
129    },
130    c => {
131        feature: "lang-c",
132        name: "c",
133        ts_lang: arborium_c::language(),
134        node_types_key: "c",
135        names: ["c"],
136        extensions: ["c", "h"],
137    },
138    caddy => {
139        feature: "lang-caddy",
140        name: "caddy",
141        ts_lang: arborium_caddy::language(),
142        node_types_key: "caddy",
143        names: ["caddy", "caddyfile"],
144        extensions: ["caddyfile"],
145    },
146    capnp => {
147        feature: "lang-capnp",
148        name: "capnp",
149        ts_lang: arborium_capnp::language(),
150        node_types_key: "capnp",
151        names: ["capnp", "capnproto"],
152        extensions: ["capnp"],
153    },
154    clojure => {
155        feature: "lang-clojure",
156        name: "clojure",
157        ts_lang: arborium_clojure::language(),
158        node_types_key: "clojure",
159        names: ["clojure", "clj"],
160        extensions: ["clj", "cljs", "cljc", "edn"],
161    },
162    cmake => {
163        feature: "lang-cmake",
164        name: "cmake",
165        ts_lang: arborium_cmake::language(),
166        node_types_key: "cmake",
167        names: ["cmake"],
168        extensions: ["cmake"],
169    },
170    commonlisp => {
171        feature: "lang-commonlisp",
172        name: "commonlisp",
173        ts_lang: arborium_commonlisp::language(),
174        node_types_key: "commonlisp",
175        names: ["commonlisp", "common-lisp", "lisp", "cl"],
176        extensions: ["lisp", "lsp", "cl"],
177    },
178    cpp => {
179        feature: "lang-cpp",
180        name: "cpp",
181        ts_lang: arborium_cpp::language(),
182        node_types_key: "cpp",
183        names: ["cpp", "c++", "cxx", "cc"],
184        extensions: ["cpp", "cc", "cxx", "hpp", "hh", "hxx", "h++", "c++"],
185    },
186    csharp => {
187        feature: "lang-c-sharp",
188        name: "c_sharp",
189        ts_lang: arborium_c_sharp::language(),
190        node_types_key: "c_sharp",
191        names: ["csharp", "c#", "cs", "c_sharp"],
192        extensions: ["cs"],
193    },
194    css => {
195        feature: "lang-css",
196        name: "css",
197        ts_lang: arborium_css::language(),
198        node_types_key: "css",
199        names: ["css"],
200        extensions: ["css"],
201    },
202    d => {
203        feature: "lang-d",
204        name: "d",
205        ts_lang: arborium_d::language(),
206        node_types_key: "d",
207        names: ["d", "dlang"],
208        extensions: ["d"],
209    },
210    dart => {
211        feature: "lang-dart",
212        name: "dart",
213        ts_lang: arborium_dart::language(),
214        node_types_key: "dart",
215        names: ["dart"],
216        extensions: ["dart"],
217    },
218    devicetree => {
219        feature: "lang-devicetree",
220        name: "devicetree",
221        ts_lang: arborium_devicetree::language(),
222        node_types_key: "devicetree",
223        names: ["devicetree", "dts"],
224        extensions: ["dts", "dtsi"],
225    },
226    diff => {
227        feature: "lang-diff",
228        name: "diff",
229        ts_lang: arborium_diff::language(),
230        node_types_key: "diff",
231        names: ["diff", "patch"],
232        extensions: ["diff", "patch"],
233    },
234    dockerfile => {
235        feature: "lang-dockerfile",
236        name: "dockerfile",
237        ts_lang: arborium_dockerfile::language(),
238        node_types_key: "dockerfile",
239        names: ["dockerfile", "docker"],
240        extensions: ["dockerfile"],
241    },
242    dot => {
243        feature: "lang-dot",
244        name: "dot",
245        ts_lang: arborium_dot::language(),
246        node_types_key: "dot",
247        names: ["dot", "graphviz"],
248        extensions: ["dot", "gv"],
249    },
250    elisp => {
251        feature: "lang-elisp",
252        name: "elisp",
253        ts_lang: arborium_elisp::language(),
254        node_types_key: "elisp",
255        names: ["elisp", "emacs-lisp"],
256        extensions: ["el"],
257    },
258    elixir => {
259        feature: "lang-elixir",
260        name: "elixir",
261        ts_lang: arborium_elixir::language(),
262        node_types_key: "elixir",
263        names: ["elixir", "ex"],
264        extensions: ["ex", "exs"],
265    },
266    elm => {
267        feature: "lang-elm",
268        name: "elm",
269        ts_lang: arborium_elm::language(),
270        node_types_key: "elm",
271        names: ["elm"],
272        extensions: ["elm"],
273    },
274    erlang => {
275        feature: "lang-erlang",
276        name: "erlang",
277        ts_lang: arborium_erlang::language(),
278        node_types_key: "erlang",
279        names: ["erlang", "erl"],
280        extensions: ["erl", "hrl"],
281    },
282    fish => {
283        feature: "lang-fish",
284        name: "fish",
285        ts_lang: arborium_fish::language(),
286        node_types_key: "fish",
287        names: ["fish"],
288        extensions: ["fish"],
289    },
290    fsharp => {
291        feature: "lang-fsharp",
292        name: "fsharp",
293        ts_lang: arborium_fsharp::language(),
294        node_types_key: "fsharp",
295        names: ["fsharp", "f#", "fs"],
296        extensions: ["fs", "fsi", "fsx"],
297    },
298    gleam => {
299        feature: "lang-gleam",
300        name: "gleam",
301        ts_lang: arborium_gleam::language(),
302        node_types_key: "gleam",
303        names: ["gleam"],
304        extensions: ["gleam"],
305    },
306    glsl => {
307        feature: "lang-glsl",
308        name: "glsl",
309        ts_lang: arborium_glsl::language(),
310        node_types_key: "glsl",
311        names: ["glsl"],
312        extensions: ["glsl", "vert", "frag", "geom", "tesc", "tese", "comp"],
313    },
314    go => {
315        feature: "lang-go",
316        name: "go",
317        ts_lang: arborium_go::language(),
318        node_types_key: "go",
319        names: ["go", "golang"],
320        extensions: ["go"],
321    },
322    graphql => {
323        feature: "lang-graphql",
324        name: "graphql",
325        ts_lang: arborium_graphql::language(),
326        node_types_key: "graphql",
327        names: ["graphql", "gql"],
328        extensions: ["graphql", "gql"],
329    },
330    groovy => {
331        feature: "lang-groovy",
332        name: "groovy",
333        ts_lang: arborium_groovy::language(),
334        node_types_key: "groovy",
335        names: ["groovy", "gradle"],
336        extensions: ["groovy", "gradle", "gvy", "gy", "gsh"],
337    },
338    haskell => {
339        feature: "lang-haskell",
340        name: "haskell",
341        ts_lang: arborium_haskell::language(),
342        node_types_key: "haskell",
343        names: ["haskell", "hs"],
344        extensions: ["hs", "lhs"],
345    },
346    hcl => {
347        feature: "lang-hcl",
348        name: "hcl",
349        ts_lang: arborium_hcl::language(),
350        node_types_key: "hcl",
351        names: ["hcl", "terraform", "tf"],
352        extensions: ["hcl", "tf", "tfvars"],
353    },
354    hlsl => {
355        feature: "lang-hlsl",
356        name: "hlsl",
357        ts_lang: arborium_hlsl::language(),
358        node_types_key: "hlsl",
359        names: ["hlsl"],
360        extensions: ["hlsl", "hlsli", "fx"],
361    },
362    html => {
363        feature: "lang-html",
364        name: "html",
365        ts_lang: arborium_html::language(),
366        node_types_key: "html",
367        names: ["html", "htm"],
368        extensions: ["html", "htm"],
369    },
370    idris => {
371        feature: "lang-idris",
372        name: "idris",
373        ts_lang: arborium_idris::language(),
374        node_types_key: "idris",
375        names: ["idris"],
376        extensions: ["idr"],
377    },
378    ini => {
379        feature: "lang-ini",
380        name: "ini",
381        ts_lang: arborium_ini::language(),
382        node_types_key: "ini",
383        names: ["ini"],
384        extensions: ["ini", "cfg", "conf"],
385    },
386    java => {
387        feature: "lang-java",
388        name: "java",
389        ts_lang: arborium_java::language(),
390        node_types_key: "java",
391        names: ["java"],
392        extensions: ["java"],
393    },
394    javascript => {
395        feature: "lang-javascript",
396        name: "javascript",
397        ts_lang: arborium_javascript::language(),
398        node_types_key: "javascript",
399        names: ["javascript", "js", "jsx", "ecmascript", "es"],
400        extensions: ["js", "mjs", "cjs", "jsx"],
401    },
402    jinja2 => {
403        feature: "lang-jinja2",
404        name: "jinja2",
405        ts_lang: arborium_jinja2::language(),
406        node_types_key: "jinja2",
407        names: ["jinja2", "jinja"],
408        extensions: ["j2", "jinja", "jinja2"],
409    },
410    jq => {
411        feature: "lang-jq",
412        name: "jq",
413        ts_lang: arborium_jq::language(),
414        node_types_key: "jq",
415        names: ["jq"],
416        extensions: ["jq"],
417    },
418    json => {
419        feature: "lang-json",
420        name: "json",
421        ts_lang: arborium_json::language(),
422        node_types_key: "json",
423        names: ["json"],
424        extensions: ["json"],
425    },
426    julia => {
427        feature: "lang-julia",
428        name: "julia",
429        ts_lang: arborium_julia::language(),
430        node_types_key: "julia",
431        names: ["julia", "jl"],
432        extensions: ["jl"],
433    },
434    kdl => {
435        feature: "lang-kdl",
436        name: "kdl",
437        ts_lang: arborium_kdl::language(),
438        node_types_key: "kdl",
439        names: ["kdl"],
440        extensions: ["kdl"],
441    },
442    kotlin => {
443        feature: "lang-kotlin",
444        name: "kotlin",
445        ts_lang: arborium_kotlin::language(),
446        node_types_key: "kotlin",
447        names: ["kotlin", "kt"],
448        extensions: ["kt", "kts"],
449    },
450    lean => {
451        feature: "lang-lean",
452        name: "lean",
453        ts_lang: arborium_lean::language(),
454        node_types_key: "lean",
455        names: ["lean", "lean4"],
456        extensions: ["lean"],
457    },
458    lua => {
459        feature: "lang-lua",
460        name: "lua",
461        ts_lang: arborium_lua::language(),
462        node_types_key: "lua",
463        names: ["lua"],
464        extensions: ["lua"],
465    },
466    markdown => {
467        feature: "lang-markdown",
468        name: "markdown",
469        ts_lang: arborium_markdown::language(),
470        node_types_key: "markdown",
471        names: ["markdown", "md"],
472        extensions: ["md", "markdown"],
473    },
474    matlab => {
475        feature: "lang-matlab",
476        name: "matlab",
477        ts_lang: arborium_matlab::language(),
478        node_types_key: "matlab",
479        names: ["matlab", "octave"],
480        extensions: ["m"],
481    },
482    meson => {
483        feature: "lang-meson",
484        name: "meson",
485        ts_lang: arborium_meson::language(),
486        node_types_key: "meson",
487        names: ["meson"],
488        extensions: ["meson"],
489    },
490    nginx => {
491        feature: "lang-nginx",
492        name: "nginx",
493        ts_lang: arborium_nginx::language(),
494        node_types_key: "nginx",
495        names: ["nginx"],
496        extensions: ["nginx"],
497    },
498    ninja => {
499        feature: "lang-ninja",
500        name: "ninja",
501        ts_lang: arborium_ninja::language(),
502        node_types_key: "ninja",
503        names: ["ninja"],
504        extensions: ["ninja"],
505    },
506    nix => {
507        feature: "lang-nix",
508        name: "nix",
509        ts_lang: arborium_nix::language(),
510        node_types_key: "nix",
511        names: ["nix"],
512        extensions: ["nix"],
513    },
514    objc => {
515        feature: "lang-objc",
516        name: "objc",
517        ts_lang: arborium_objc::language(),
518        node_types_key: "objc",
519        names: ["objc", "objective-c", "objectivec"],
520        extensions: ["m", "mm"],
521    },
522    ocaml => {
523        feature: "lang-ocaml",
524        name: "ocaml",
525        ts_lang: arborium_ocaml::language(),
526        node_types_key: "ocaml",
527        names: ["ocaml", "ml"],
528        extensions: ["ml", "mli"],
529    },
530    perl => {
531        feature: "lang-perl",
532        name: "perl",
533        ts_lang: arborium_perl::language(),
534        node_types_key: "perl",
535        names: ["perl", "pl"],
536        extensions: ["pl", "pm"],
537    },
538    php => {
539        feature: "lang-php",
540        name: "php",
541        ts_lang: arborium_php::language(),
542        node_types_key: "php",
543        names: ["php"],
544        extensions: ["php"],
545    },
546    postscript => {
547        feature: "lang-postscript",
548        name: "postscript",
549        ts_lang: arborium_postscript::language(),
550        node_types_key: "postscript",
551        names: ["postscript", "ps"],
552        extensions: ["ps", "eps"],
553    },
554    powershell => {
555        feature: "lang-powershell",
556        name: "powershell",
557        ts_lang: arborium_powershell::language(),
558        node_types_key: "powershell",
559        names: ["powershell", "pwsh", "ps1"],
560        extensions: ["ps1", "psm1", "psd1"],
561    },
562    prolog => {
563        feature: "lang-prolog",
564        name: "prolog",
565        ts_lang: arborium_prolog::language(),
566        node_types_key: "prolog",
567        names: ["prolog"],
568        extensions: ["pl", "pro"],
569    },
570    python => {
571        feature: "lang-python",
572        name: "python",
573        ts_lang: arborium_python::language(),
574        node_types_key: "python",
575        names: ["python", "py"],
576        extensions: ["py", "pyi", "pyw"],
577    },
578    query => {
579        feature: "lang-query",
580        name: "query",
581        ts_lang: arborium_query::language(),
582        node_types_key: "query",
583        names: ["query", "scm"],
584        extensions: ["scm"],
585    },
586    r => {
587        feature: "lang-r",
588        name: "r",
589        ts_lang: arborium_r::language(),
590        node_types_key: "r",
591        names: ["r", "rlang"],
592        extensions: ["r", "R"],
593    },
594    rescript => {
595        feature: "lang-rescript",
596        name: "rescript",
597        ts_lang: arborium_rescript::language(),
598        node_types_key: "rescript",
599        names: ["rescript", "res"],
600        extensions: ["res", "resi"],
601    },
602    ron => {
603        feature: "lang-ron",
604        name: "ron",
605        ts_lang: arborium_ron::language(),
606        node_types_key: "ron",
607        names: ["ron"],
608        extensions: ["ron"],
609    },
610    ruby => {
611        feature: "lang-ruby",
612        name: "ruby",
613        ts_lang: arborium_ruby::language(),
614        node_types_key: "ruby",
615        names: ["ruby", "rb"],
616        extensions: ["rb", "rake", "gemspec"],
617    },
618    rust => {
619        feature: "lang-rust",
620        name: "rust",
621        ts_lang: arborium_rust::language(),
622        node_types_key: "rust",
623        names: ["rust", "rs"],
624        extensions: ["rs"],
625    },
626    scala => {
627        feature: "lang-scala",
628        name: "scala",
629        ts_lang: arborium_scala::language(),
630        node_types_key: "scala",
631        names: ["scala"],
632        extensions: ["scala", "sc"],
633    },
634    scheme => {
635        feature: "lang-scheme",
636        name: "scheme",
637        ts_lang: arborium_scheme::language(),
638        node_types_key: "scheme",
639        names: ["scheme", "racket"],
640        extensions: ["scm", "ss", "rkt"],
641    },
642    scss => {
643        feature: "lang-scss",
644        name: "scss",
645        ts_lang: arborium_scss::language(),
646        node_types_key: "scss",
647        names: ["scss", "sass"],
648        extensions: ["scss", "sass"],
649    },
650    sparql => {
651        feature: "lang-sparql",
652        name: "sparql",
653        ts_lang: arborium_sparql::language(),
654        node_types_key: "sparql",
655        names: ["sparql"],
656        extensions: ["sparql", "rq"],
657    },
658    sql => {
659        feature: "lang-sql",
660        name: "sql",
661        ts_lang: arborium_sql::language(),
662        node_types_key: "sql",
663        names: ["sql"],
664        extensions: ["sql"],
665    },
666    ssh_config => {
667        feature: "lang-ssh-config",
668        name: "ssh_config",
669        ts_lang: arborium_ssh_config::language(),
670        node_types_key: "ssh_config",
671        names: ["ssh-config", "ssh_config", "sshconfig"],
672        extensions: ["ssh_config"],
673    },
674    starlark => {
675        feature: "lang-starlark",
676        name: "starlark",
677        ts_lang: arborium_starlark::language(),
678        node_types_key: "starlark",
679        names: ["starlark", "bazel", "bzl"],
680        extensions: ["bzl", "bazel"],
681    },
682    svelte => {
683        feature: "lang-svelte",
684        name: "svelte",
685        ts_lang: arborium_svelte::language(),
686        node_types_key: "svelte",
687        names: ["svelte"],
688        extensions: ["svelte"],
689    },
690    swift => {
691        feature: "lang-swift",
692        name: "swift",
693        ts_lang: arborium_swift::language(),
694        node_types_key: "swift",
695        names: ["swift"],
696        extensions: ["swift"],
697    },
698    textproto => {
699        feature: "lang-textproto",
700        name: "textproto",
701        ts_lang: arborium_textproto::language(),
702        node_types_key: "textproto",
703        names: ["textproto", "pbtxt"],
704        extensions: ["textproto", "pbtxt"],
705    },
706    thrift => {
707        feature: "lang-thrift",
708        name: "thrift",
709        ts_lang: arborium_thrift::language(),
710        node_types_key: "thrift",
711        names: ["thrift"],
712        extensions: ["thrift"],
713    },
714    tlaplus => {
715        feature: "lang-tlaplus",
716        name: "tlaplus",
717        ts_lang: arborium_tlaplus::language(),
718        node_types_key: "tlaplus",
719        names: ["tlaplus", "tla+", "tla"],
720        extensions: ["tla"],
721    },
722    toml => {
723        feature: "lang-toml",
724        name: "toml",
725        ts_lang: arborium_toml::language(),
726        node_types_key: "toml",
727        names: ["toml"],
728        extensions: ["toml"],
729    },
730    tsx => {
731        feature: "lang-tsx",
732        name: "tsx",
733        ts_lang: arborium_tsx::language(),
734        node_types_key: "tsx",
735        names: ["tsx"],
736        extensions: ["tsx"],
737    },
738    typescript => {
739        feature: "lang-typescript",
740        name: "typescript",
741        ts_lang: arborium_typescript::language(),
742        node_types_key: "typescript",
743        names: ["typescript", "ts"],
744        extensions: ["ts", "mts", "cts"],
745    },
746    typst => {
747        feature: "lang-typst",
748        name: "typst",
749        ts_lang: arborium_typst::language(),
750        node_types_key: "typst",
751        names: ["typst"],
752        extensions: ["typ"],
753    },
754    uiua => {
755        feature: "lang-uiua",
756        name: "uiua",
757        ts_lang: arborium_uiua::language(),
758        node_types_key: "uiua",
759        names: ["uiua"],
760        extensions: ["ua"],
761    },
762    vb => {
763        feature: "lang-vb",
764        name: "vb",
765        ts_lang: arborium_vb::language(),
766        node_types_key: "vb",
767        names: ["vb", "vbnet", "visualbasic"],
768        extensions: ["vb"],
769    },
770    verilog => {
771        feature: "lang-verilog",
772        name: "verilog",
773        ts_lang: arborium_verilog::language(),
774        node_types_key: "verilog",
775        names: ["verilog", "v"],
776        extensions: ["v", "sv"],
777    },
778    vhdl => {
779        feature: "lang-vhdl",
780        name: "vhdl",
781        ts_lang: arborium_vhdl::language(),
782        node_types_key: "vhdl",
783        names: ["vhdl"],
784        extensions: ["vhd", "vhdl"],
785    },
786    vim => {
787        feature: "lang-vim",
788        name: "vim",
789        ts_lang: arborium_vim::language(),
790        node_types_key: "vim",
791        names: ["vim", "vimscript"],
792        extensions: ["vim"],
793    },
794    vue => {
795        feature: "lang-vue",
796        name: "vue",
797        ts_lang: arborium_vue::language(),
798        node_types_key: "vue",
799        names: ["vue"],
800        extensions: ["vue"],
801    },
802    wit => {
803        feature: "lang-wit",
804        name: "wit",
805        ts_lang: arborium_wit::language(),
806        node_types_key: "wit",
807        names: ["wit"],
808        extensions: ["wit"],
809    },
810    x86asm => {
811        feature: "lang-x86asm",
812        name: "x86asm",
813        ts_lang: arborium_x86asm::language(),
814        node_types_key: "x86asm",
815        names: ["x86asm", "x86"],
816        extensions: ["asm"],
817    },
818    xml => {
819        feature: "lang-xml",
820        name: "xml",
821        ts_lang: arborium_xml::language(),
822        node_types_key: "xml",
823        names: ["xml"],
824        extensions: ["xml", "xsl", "xslt", "xsd", "svg"],
825    },
826    yaml => {
827        feature: "lang-yaml",
828        name: "yaml",
829        ts_lang: arborium_yaml::language(),
830        node_types_key: "yaml",
831        names: ["yaml", "yml"],
832        extensions: ["yaml", "yml"],
833    },
834    yuri => {
835        feature: "lang-yuri",
836        name: "yuri",
837        ts_lang: arborium_yuri::language(),
838        node_types_key: "yuri",
839        names: ["yuri"],
840        extensions: ["yuri"],
841    },
842    zig => {
843        feature: "lang-zig",
844        name: "zig",
845        ts_lang: arborium_zig::language(),
846        node_types_key: "zig",
847        names: ["zig"],
848        extensions: ["zig"],
849    },
850    zsh => {
851        feature: "lang-zsh",
852        name: "zsh",
853        ts_lang: arborium_zsh::language(),
854        node_types_key: "zsh",
855        names: ["zsh"],
856        extensions: ["zsh"],
857    },
858}