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 }