Files
XCCAT/detect_filetype.rs
T
2026-09-15 14:59:17 +00:00

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
}