code_analyze_mcp/languages/
mod.rs1pub mod fortran;
7pub mod go;
8pub mod java;
9pub mod python;
10pub mod rust;
11pub mod typescript;
12
13use tree_sitter::{Language, Node};
14
15pub type ExtractFunctionNameHandler = fn(&Node, &str, &str) -> Option<String>;
17
18pub type FindMethodForReceiverHandler = fn(&Node, &str, Option<usize>) -> Option<String>;
20
21pub type FindReceiverTypeHandler = fn(&Node, &str) -> Option<String>;
23
24pub type ExtractInheritanceHandler = fn(&Node, &str) -> Vec<String>;
26
27pub struct LanguageInfo {
29 pub name: &'static str,
30 pub language: Language,
31 pub element_query: &'static str,
32 pub call_query: &'static str,
33 pub reference_query: Option<&'static str>,
34 pub import_query: Option<&'static str>,
35 pub impl_query: Option<&'static str>,
36 pub impl_trait_query: Option<&'static str>,
37 pub extract_function_name: Option<ExtractFunctionNameHandler>,
38 pub find_method_for_receiver: Option<FindMethodForReceiverHandler>,
39 pub find_receiver_type: Option<FindReceiverTypeHandler>,
40 pub extract_inheritance: Option<ExtractInheritanceHandler>,
41}
42
43#[allow(clippy::too_many_lines)] pub fn get_language_info(lang_name: &str) -> Option<LanguageInfo> {
46 match lang_name {
47 "rust" => Some(LanguageInfo {
48 name: "rust",
49 language: tree_sitter_rust::LANGUAGE.into(),
50 element_query: rust::ELEMENT_QUERY,
51 call_query: rust::CALL_QUERY,
52 reference_query: Some(rust::REFERENCE_QUERY),
53 import_query: Some(rust::IMPORT_QUERY),
54 impl_query: Some(rust::IMPL_QUERY),
55 impl_trait_query: Some(rust::IMPL_TRAIT_QUERY),
56 extract_function_name: Some(rust::extract_function_name),
57 find_method_for_receiver: Some(rust::find_method_for_receiver),
58 find_receiver_type: Some(rust::find_receiver_type),
59 extract_inheritance: Some(rust::extract_inheritance),
60 }),
61 "python" => Some(LanguageInfo {
62 name: "python",
63 language: tree_sitter_python::LANGUAGE.into(),
64 element_query: python::ELEMENT_QUERY,
65 call_query: python::CALL_QUERY,
66 reference_query: Some(python::REFERENCE_QUERY),
67 import_query: Some(python::IMPORT_QUERY),
68 impl_query: None,
69 impl_trait_query: None,
70 extract_function_name: None,
71 find_method_for_receiver: None,
72 find_receiver_type: None,
73 extract_inheritance: Some(python::extract_inheritance),
74 }),
75 "typescript" => Some(LanguageInfo {
76 name: "typescript",
77 language: tree_sitter_typescript::LANGUAGE_TYPESCRIPT.into(),
78 element_query: typescript::ELEMENT_QUERY,
79 call_query: typescript::CALL_QUERY,
80 reference_query: Some(typescript::REFERENCE_QUERY),
81 import_query: Some(typescript::IMPORT_QUERY),
82 impl_query: None,
83 impl_trait_query: None,
84 extract_function_name: None,
85 find_method_for_receiver: None,
86 find_receiver_type: None,
87 extract_inheritance: Some(typescript::extract_inheritance),
88 }),
89 "tsx" => Some(LanguageInfo {
90 name: "tsx",
91 language: tree_sitter_typescript::LANGUAGE_TSX.into(),
92 element_query: typescript::ELEMENT_QUERY,
93 call_query: typescript::CALL_QUERY,
94 reference_query: Some(typescript::REFERENCE_QUERY),
95 import_query: Some(typescript::IMPORT_QUERY),
96 impl_query: None,
97 impl_trait_query: None,
98 extract_function_name: None,
99 find_method_for_receiver: None,
100 find_receiver_type: None,
101 extract_inheritance: Some(typescript::extract_inheritance),
102 }),
103 "go" => Some(LanguageInfo {
104 name: "go",
105 language: tree_sitter_go::LANGUAGE.into(),
106 element_query: go::ELEMENT_QUERY,
107 call_query: go::CALL_QUERY,
108 reference_query: Some(go::REFERENCE_QUERY),
109 import_query: Some(go::IMPORT_QUERY),
110 impl_query: None,
111 impl_trait_query: None,
112 extract_function_name: None,
113 find_method_for_receiver: Some(go::find_method_for_receiver),
114 find_receiver_type: None,
115 extract_inheritance: Some(go::extract_inheritance),
116 }),
117 "java" => Some(LanguageInfo {
118 name: "java",
119 language: tree_sitter_java::LANGUAGE.into(),
120 element_query: java::ELEMENT_QUERY,
121 call_query: java::CALL_QUERY,
122 reference_query: Some(java::REFERENCE_QUERY),
123 import_query: Some(java::IMPORT_QUERY),
124 impl_query: None,
125 impl_trait_query: None,
126 extract_function_name: None,
127 find_method_for_receiver: None,
128 find_receiver_type: None,
129 extract_inheritance: Some(java::extract_inheritance),
130 }),
131 "fortran" => Some(LanguageInfo {
132 name: "fortran",
133 language: tree_sitter_fortran::LANGUAGE.into(),
134 element_query: fortran::ELEMENT_QUERY,
135 call_query: fortran::CALL_QUERY,
136 reference_query: Some(fortran::REFERENCE_QUERY),
137 import_query: Some(fortran::IMPORT_QUERY),
138 impl_query: None,
139 impl_trait_query: None,
140 extract_function_name: None,
141 find_method_for_receiver: None,
142 find_receiver_type: None,
143 extract_inheritance: Some(fortran::extract_inheritance),
144 }),
145 _ => None,
146 }
147}