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