on master help sign in
Handle file extension conflicts in --list-languages (#1076)
commitf97634011e9f2a4947c297b017acb0fb0c55cb71 authorKienyew <aobi100bt@hotmail.com> dateSat 8 Aug 2020, 12:01 (6 years ago) parenta4ffc9d
2 files changed+27−6
src/bin/bat/main.rs+13 src/syntax_mapping.rs+14−6
src/bin/bat/main.rs+13
@@ -86,6 +86,19 @@ pub fn list_languages(config: &Config) -> Result<()> {
8686 .filter(|syntax| !syntax.hidden && !syntax.file_extensions.is_empty())
8787 .cloned()
8888 .collect::<Vec<_>>();
89+
90+ for lang in languages.iter_mut() {
91+ let lang_name = lang.name.clone();
92+ lang.file_extensions.retain(|extension| {
93+ let test_file = Path::new("test").with_extension(extension);
94+ match config.syntax_mapping.get_syntax_for(test_file) {
95+ Some(MappingTarget::MapTo(primary_lang)) => lang_name == primary_lang,
96+ Some(MappingTarget::MapToUnknown) => true,
97+ None => true,
98+ }
99+ });
100+ }
101+
89102 languages.sort_by_key(|lang| lang.name.to_uppercase());
90103
91104 let configured_languages = get_syntax_mapping_to_paths(config.syntax_mapping.mappings());
src/syntax_mapping.rs+14−6
@@ -24,6 +24,12 @@ impl<'a> SyntaxMapping<'a> {
2424 let mut mapping = Self::empty();
2525 mapping.insert("*.h", MappingTarget::MapTo("C++")).unwrap();
2626 mapping.insert("*.fs", MappingTarget::MapTo("F#")).unwrap();
27+ mapping
28+ .insert("*.js", MappingTarget::MapTo("JavaScript (Babel)"))
29+ .unwrap();
30+ mapping
31+ .insert("*.sass", MappingTarget::MapTo("Sass"))
32+ .unwrap();
2733 mapping
2834 .insert("build", MappingTarget::MapToUnknown)
2935 .unwrap();
@@ -92,14 +98,16 @@ impl<'a> SyntaxMapping<'a> {
9298 "*.swap",
9399 "*.target",
94100 "*.timer",
95− ].iter() {
96− mapping
97− .insert(glob, MappingTarget::MapTo("INI"))
98− .unwrap();
101+ ]
102+ .iter()
103+ {
104+ mapping.insert(glob, MappingTarget::MapTo("INI")).unwrap();
99105 }
100106
101107 // pacman hooks
102− mapping.insert("*.hook", MappingTarget::MapTo("INI")).unwrap();
108+ mapping
109+ .insert("*.hook", MappingTarget::MapTo("INI"))
110+ .unwrap();
103111
104112 mapping
105113 }
@@ -117,7 +125,7 @@ impl<'a> SyntaxMapping<'a> {
117125 &self.mappings
118126 }
119127
120− pub(crate) fn get_syntax_for(&self, path: impl AsRef<Path>) -> Option<MappingTarget<'a>> {
128+ pub fn get_syntax_for(&self, path: impl AsRef<Path>) -> Option<MappingTarget<'a>> {
121129 let candidate = Candidate::new(path.as_ref());
122130 let candidate_filename = path.as_ref().file_name().map(Candidate::new);
123131 for (ref glob, ref syntax) in self.mappings.iter().rev() {