38 lines
1.3 KiB
Rust
38 lines
1.3 KiB
Rust
use crate::language::Language;
|
|
use std::path::Path;
|
|
|
|
const DOCKERFILE_KEY_WORD: &str = "Dockerfile";
|
|
const DOCKER_COMPOSE_KEYWORD: &str = "docker-compose.yml";
|
|
|
|
pub fn detect_language(filename: &str) -> Language {
|
|
if filename.is_empty() {
|
|
return Language::Plain;
|
|
}
|
|
let path = Path::new(filename);
|
|
if let Some(ext) = path.extension().and_then(|s| s.to_str()) {
|
|
match ext {
|
|
"py" => return Language::Python,
|
|
"js" => return Language::JavaScript,
|
|
"c" | "h" | "cpp" | "ino" => return Language::Clang,
|
|
"md" => return Language::Markdown,
|
|
"html" | "htm" | "xml" => return Language::Html,
|
|
"sh" => return Language::Shell,
|
|
"asm" => return Language::AsmX86,
|
|
"a51" => return Language::Asm8051,
|
|
"sql" => return Language::Sql,
|
|
"rs" => return Language::Rust,
|
|
"log" => return Language::LogFile,
|
|
"java" => return Language::LangJava,
|
|
_ => {}
|
|
}
|
|
}
|
|
let base = path.file_name().and_then(|s| s.to_str()).unwrap_or(filename);
|
|
if base.eq_ignore_ascii_case(DOCKERFILE_KEY_WORD) {
|
|
return Language::Docker;
|
|
}
|
|
if base.eq_ignore_ascii_case(DOCKER_COMPOSE_KEYWORD) {
|
|
return Language::LangDockerCompose;
|
|
}
|
|
Language::Plain
|
|
}
|