probe_code/language/
factory.rs

1use probe_code::language::c::CLanguage;
2use probe_code::language::cpp::CppLanguage;
3use probe_code::language::csharp::CSharpLanguage;
4use probe_code::language::go::GoLanguage;
5use probe_code::language::java::JavaLanguage;
6use probe_code::language::javascript::JavaScriptLanguage;
7use probe_code::language::language_trait::LanguageImpl;
8use probe_code::language::php::PhpLanguage;
9use probe_code::language::python::PythonLanguage;
10use probe_code::language::ruby::RubyLanguage;
11use probe_code::language::rust::RustLanguage;
12use probe_code::language::swift::SwiftLanguage;
13use probe_code::language::typescript::TypeScriptLanguage;
14
15/// Factory function to get the appropriate language implementation based on file extension
16pub fn get_language_impl(extension: &str) -> Option<Box<dyn LanguageImpl>> {
17    match extension {
18        "rs" => Some(Box::new(RustLanguage::new())),
19        "js" | "jsx" => Some(Box::new(JavaScriptLanguage::new())),
20        "ts" => Some(Box::new(TypeScriptLanguage::new_typescript())),
21        "tsx" => Some(Box::new(TypeScriptLanguage::new_tsx())),
22        "py" => Some(Box::new(PythonLanguage::new())),
23        "go" => Some(Box::new(GoLanguage::new())),
24        "c" | "h" => Some(Box::new(CLanguage::new())),
25        "cpp" | "cc" | "cxx" | "hpp" | "hxx" => Some(Box::new(CppLanguage::new())),
26        "java" => Some(Box::new(JavaLanguage::new())),
27        "rb" => Some(Box::new(RubyLanguage::new())),
28        "php" => Some(Box::new(PhpLanguage::new())),
29        "swift" => Some(Box::new(SwiftLanguage::new())),
30        "cs" => Some(Box::new(CSharpLanguage::new())),
31        _ => None,
32    }
33}