From 8155450229d84ea2d330654bfd2c0c59775e6b8f Mon Sep 17 00:00:00 2001 From: anshul-garg27 Date: Wed, 29 Apr 2026 05:52:26 +0530 Subject: [PATCH] Recognize .hpp/.hxx/.h++ as C++ headers --- crates/languages/src/lib.rs | 2 +- crates/languages/src/lib_tests.rs | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/crates/languages/src/lib.rs b/crates/languages/src/lib.rs index ab75dbbf..1bece567 100644 --- a/crates/languages/src/lib.rs +++ b/crates/languages/src/lib.rs @@ -152,7 +152,7 @@ pub fn language_by_filename(path: &Path) -> Option> { "tsx" => language_by_name("tsx"), "ts" | "cts" | "mts" => language_by_name("typescript"), "java" | "groovy" | "gvy" | "gy" | "gsh" => language_by_name("java"), - "cpp" | "cxx" | "cc" | "h" | "hh" => language_by_name("cpp"), + "cpp" | "cxx" | "cc" | "h" | "hh" | "hpp" | "hxx" | "h++" => language_by_name("cpp"), "sh" | "zsh" | "bash" => language_by_name("shell"), "cs" => language_by_name("csharp"), "html" => language_by_name("html"), diff --git a/crates/languages/src/lib_tests.rs b/crates/languages/src/lib_tests.rs index fead6246..2745df72 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,15 @@ fn all_supported_languages_load_successfully() { .join("\n") ); } + +/// Modern C++ codebases (Boost, Qt, etc.) use `.hpp` (and less often +/// `.hxx` / `.h++`) for headers to distinguish them from plain C. +/// Make sure each variant resolves to the C++ language. +#[test] +fn cpp_header_extensions_resolve_to_cpp() { + for name in ["foo.hpp", "foo.hxx", "foo.h++"] { + let language = language_by_filename(Path::new(name)) + .unwrap_or_else(|| panic!("`{name}` should resolve to a language")); + assert_eq!(language.display_name, "C++", "{name} should map to C++"); + } +}