diff options
author | Wilfred Hughes <me@wilfred.me.uk> | 2024-01-30 21:22:12 -0800 |
---|---|---|
committer | Wilfred Hughes <me@wilfred.me.uk> | 2024-01-30 21:22:51 -0800 |
commit | 052b3a62a354ba1e9e2141bb73f5c6878043d65f (patch) | |
tree | fcbf49e3e47ddab964c78f06aa58b4445289ccf3 | |
parent | 5219977d88a1d57635044188e1748c880d3785e7 (diff) |
Use XML file headers as language detection hints
Fixes #630
-rw-r--r-- | CHANGELOG.md | 2 | ||||
-rw-r--r-- | src/parse/guess_language.rs | 14 |
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); |