code_analyze_mcp/languages/
mod.rs1pub mod go;
7pub mod java;
8pub mod python;
9pub mod rust;
10pub mod typescript;
11
12use tree_sitter::{Language, Node};
13
14pub type ExtractFunctionNameHandler = fn(&Node, &str, &str) -> Option<String>;
16
17pub type FindMethodForReceiverHandler = fn(&Node, &str, Option<usize>) -> Option<String>;
19
20pub type FindReceiverTypeHandler = fn(&Node, &str) -> Option<String>;
22
23pub type ExtractInheritanceHandler = fn(&Node, &str) -> Vec<String>;
25
26pub struct LanguageInfo {
28 pub name: &'static str,
29 pub language: Language,
30 pub element_query: &'static str,
31 pub call_query: &'static str,
32 pub reference_query: Option<&'static str>,
33 pub import_query: Option<&'static str>,
34 pub impl_query: Option<&'static str>,
35 pub assignment_query: Option<&'static str>,
36 pub field_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
43pub fn get_language_info(lang_name: &str) -> Option<LanguageInfo> {
45 match lang_name {
46 "rust" => Some(LanguageInfo {
47 name: "rust",
48 language: tree_sitter_rust::LANGUAGE.into(),
49 element_query: rust::ELEMENT_QUERY,
50 call_query: rust::CALL_QUERY,
51 reference_query: Some(rust::REFERENCE_QUERY),
52 import_query: Some(rust::IMPORT_QUERY),
53 impl_query: Some(rust::IMPL_QUERY),
54 assignment_query: Some(rust::ASSIGNMENT_QUERY),
55 field_query: Some(rust::FIELD_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 assignment_query: None,
70 field_query: None,
71 extract_function_name: None,
72 find_method_for_receiver: None,
73 find_receiver_type: None,
74 extract_inheritance: Some(python::extract_inheritance),
75 }),
76 "typescript" => Some(LanguageInfo {
77 name: "typescript",
78 language: tree_sitter_typescript::LANGUAGE_TYPESCRIPT.into(),
79 element_query: typescript::ELEMENT_QUERY,
80 call_query: typescript::CALL_QUERY,
81 reference_query: Some(typescript::REFERENCE_QUERY),
82 import_query: Some(typescript::IMPORT_QUERY),
83 impl_query: None,
84 assignment_query: None,
85 field_query: None,
86 extract_function_name: None,
87 find_method_for_receiver: None,
88 find_receiver_type: None,
89 extract_inheritance: Some(typescript::extract_inheritance),
90 }),
91 "tsx" => Some(LanguageInfo {
92 name: "tsx",
93 language: tree_sitter_typescript::LANGUAGE_TSX.into(),
94 element_query: typescript::ELEMENT_QUERY,
95 call_query: typescript::CALL_QUERY,
96 reference_query: Some(typescript::REFERENCE_QUERY),
97 import_query: Some(typescript::IMPORT_QUERY),
98 impl_query: None,
99 assignment_query: None,
100 field_query: None,
101 extract_function_name: None,
102 find_method_for_receiver: None,
103 find_receiver_type: None,
104 extract_inheritance: Some(typescript::extract_inheritance),
105 }),
106 "go" => Some(LanguageInfo {
107 name: "go",
108 language: tree_sitter_go::LANGUAGE.into(),
109 element_query: go::ELEMENT_QUERY,
110 call_query: go::CALL_QUERY,
111 reference_query: Some(go::REFERENCE_QUERY),
112 import_query: Some(go::IMPORT_QUERY),
113 impl_query: None,
114 assignment_query: None,
115 field_query: None,
116 extract_function_name: None,
117 find_method_for_receiver: Some(go::find_method_for_receiver),
118 find_receiver_type: None,
119 extract_inheritance: Some(go::extract_inheritance),
120 }),
121 "java" => Some(LanguageInfo {
122 name: "java",
123 language: tree_sitter_java::LANGUAGE.into(),
124 element_query: java::ELEMENT_QUERY,
125 call_query: java::CALL_QUERY,
126 reference_query: Some(java::REFERENCE_QUERY),
127 import_query: Some(java::IMPORT_QUERY),
128 impl_query: None,
129 assignment_query: None,
130 field_query: None,
131 extract_function_name: None,
132 find_method_for_receiver: None,
133 find_receiver_type: None,
134 extract_inheritance: Some(java::extract_inheritance),
135 }),
136 _ => None,
137 }
138}