diff --git a/crates/languages/src/lib.rs b/crates/languages/src/lib.rs index ab75dbbf..bc2c60b7 100644 --- a/crates/languages/src/lib.rs +++ b/crates/languages/src/lib.rs @@ -155,7 +155,7 @@ pub fn language_by_filename(path: &Path) -> Option> { "cpp" | "cxx" | "cc" | "h" | "hh" => language_by_name("cpp"), "sh" | "zsh" | "bash" => language_by_name("shell"), "cs" => language_by_name("csharp"), - "html" => language_by_name("html"), + "html" | "htm" => language_by_name("html"), "css" => language_by_name("css"), "c" => language_by_name("c"), "json" => language_by_name("json"), diff --git a/crates/languages/src/lib_tests.rs b/crates/languages/src/lib_tests.rs index fead6246..65c5b8ce 100644 --- a/crates/languages/src/lib_tests.rs +++ b/crates/languages/src/lib_tests.rs @@ -1,4 +1,6 @@ -use crate::{load_language, SUPPORTED_LANGUAGES}; +use std::path::Path; + +use crate::{language_by_filename, load_language, SUPPORTED_LANGUAGES}; /// Validate that every supported language can be loaded successfully. /// This catches invalid node types, syntax errors, and other issues in .scm query files @@ -20,3 +22,21 @@ fn all_supported_languages_load_successfully() { .join("\n") ); } + +/// Both `.html` and the legacy three-character `.htm` extension should resolve to +/// the same HTML language entry. `.htm` is widely produced by static-site generators +/// and historical web tooling (DOS 8.3 filename limits) and is already treated as +/// an HTML/text file elsewhere in the codebase +/// (see `is_development_text_extension` in `crates/warp_util/src/file_type.rs`). +#[test] +fn html_extensions_resolve_to_html() { + for filename in ["index.html", "index.htm"] { + let language = language_by_filename(Path::new(filename)) + .unwrap_or_else(|| panic!("expected {filename} to resolve to a language")); + assert_eq!( + language.display_name(), + "HTML", + "{filename} should resolve to HTML", + ); + } +}