summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilfred Hughes <me@wilfred.me.uk>2024-01-30 21:22:12 -0800
committerWilfred Hughes <me@wilfred.me.uk>2024-01-30 21:22:51 -0800
commit052b3a62a354ba1e9e2141bb73f5c6878043d65f (patch)
treefcbf49e3e47ddab964c78f06aa58b4445289ccf3
parent5219977d88a1d57635044188e1748c880d3785e7 (diff)
Use XML file headers as language detection hints
Fixes #630
-rw-r--r--CHANGELOG.md2
-rw-r--r--src/parse/guess_language.rs14
2 files changed, 16 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b34b838b8..9dac3f9b4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,8 @@
Added support for Objective-C and VHDL.
+Files starting with `<?xml` are now parsed as XML.
+
### Display
The default display width for tabs has changed to 4.
diff --git a/src/parse/guess_language.rs b/src/parse/guess_language.rs
index 98db844e8..89f7bf88d 100644
--- a/src/parse/guess_language.rs
+++ b/src/parse/guess_language.rs
@@ -416,6 +416,10 @@ fn looks_like_objc(path: &Path, src: &str) -> bool {
false
}
+fn looks_like_xml(src: &str) -> bool {
+ src.starts_with("<?xml")
+}
+
pub(crate) fn guess(
path: &Path,
src: &str,
@@ -458,6 +462,10 @@ pub(crate) fn guess(
return Some(lang);
}
+ if looks_like_xml(src) {
+ return Some(Language::Xml);
+ }
+
None
}
@@ -652,6 +660,12 @@ mod tests {
}
#[test]
+ fn test_guess_by_xml_header() {
+ let path = Path::new("foo");
+ assert_eq!(guess(path, "<?xml version=\"1.0\" encoding=\"utf-8\"?>", &[]), Some(Xml));
+ }
+
+ #[test]
fn test_guess_unknown() {
let path = Path::new("jfkdlsjfkdsljfkdsljf");
assert_eq!(guess(path, "", &[]), None);