rust_code_analysis/
langs.rs

1use std::path::Path;
2use std::sync::Arc;
3use tree_sitter::Language;
4
5use crate::preproc::PreprocResults;
6use crate::*;
7
8mk_langs!(
9    // 1) Name for enum
10    // 2) Language description
11    // 3) Display name
12    // 4) Empty struct name to implement
13    // 5) Parser name
14    // 6) tree-sitter function to call to get a Language
15    // 7) file extensions
16    // 8) emacs modes
17    (
18        Mozjs,
19        "The `Mozjs` language is variant of the `JavaScript` language",
20        "javascript",
21        MozjsCode,
22        MozjsParser,
23        tree_sitter_mozjs,
24        [js, jsm, mjs, jsx],
25        ["js", "js2"]
26    ),
27    (
28        Javascript,
29        "The `JavaScript` language",
30        "javascript",
31        JavascriptCode,
32        JavascriptParser,
33        tree_sitter_javascript,
34        [],
35        []
36    ),
37    (
38        Java,
39        "The `Java` language",
40        "java",
41        JavaCode,
42        JavaParser,
43        tree_sitter_java,
44        [java],
45        ["java"]
46    ),
47    (
48        Rust,
49        "The `Rust` language",
50        "rust",
51        RustCode,
52        RustParser,
53        tree_sitter_rust,
54        [rs],
55        ["rust"]
56    ),
57    (
58        Cpp,
59        "The `C/C++` language",
60        "c/c++",
61        CppCode,
62        CppParser,
63        tree_sitter_cpp,
64        [cpp, cxx, cc, hxx, hpp, c, h, hh, inc, mm, m],
65        ["c++", "c", "objc", "objc++", "objective-c++", "objective-c"]
66    ),
67    (
68        Python,
69        "The `Python` language",
70        "python",
71        PythonCode,
72        PythonParser,
73        tree_sitter_python,
74        [py],
75        ["python"]
76    ),
77    (
78        Tsx,
79        "The `Tsx` language incorporates the `JSX` syntax inside `TypeScript`",
80        "typescript",
81        TsxCode,
82        TsxParser,
83        tree_sitter_tsx,
84        [tsx],
85        []
86    ),
87    (
88        Typescript,
89        "The `TypeScript` language",
90        "typescript",
91        TypescriptCode,
92        TypescriptParser,
93        tree_sitter_typescript,
94        [ts, jsw, jsmw],
95        ["typescript"]
96    ),
97    (
98        Ccomment,
99        "The `Ccomment` language is a variant of the `C` language focused on comments",
100        "ccomment",
101        CcommentCode,
102        CcommentParser,
103        tree_sitter_ccomment,
104        [],
105        []
106    ),
107    (
108        Preproc,
109        "The `PreProc` language is a variant of the `C/C++` language focused on macros",
110        "preproc",
111        PreprocCode,
112        PreprocParser,
113        tree_sitter_preproc,
114        [],
115        []
116    )
117);
118
119pub(crate) mod fake {
120    pub fn get_true(ext: &str, mode: &str) -> Option<String> {
121        if ext == "m"
122            || ext == "mm"
123            || mode == "objc"
124            || mode == "objc++"
125            || mode == "objective-c++"
126            || mode == "objective-c"
127        {
128            Some("obj-c/c++".to_string())
129        } else {
130            None
131        }
132    }
133}