1
0
mirror of https://github.com/sharkdp/bat.git synced 2025-02-07 13:41:14 +00:00

HighlightingAssets: Encapsulate syntax_set behind a getter

Since we only modify `pub(crate)` items, the stable bat-as-a-library API is not
affected.

This takes us one step closer to making SyntaxSet lazy-loaded, which in turn
takes us one step closer to solving #951.
This commit is contained in:
Martin Nordholts 2021-07-16 11:49:47 +02:00
parent 6ef2bb3283
commit 375d55aa5d
2 changed files with 19 additions and 15 deletions

View File

@ -18,7 +18,7 @@ use crate::syntax_mapping::{MappingTarget, SyntaxMapping};
#[derive(Debug)] #[derive(Debug)]
pub struct HighlightingAssets { pub struct HighlightingAssets {
pub(crate) syntax_set: SyntaxSet, syntax_set: SyntaxSet,
pub(crate) theme_set: ThemeSet, pub(crate) theme_set: ThemeSet,
fallback_theme: Option<&'static str>, fallback_theme: Option<&'static str>,
} }
@ -127,7 +127,7 @@ impl HighlightingAssets {
let _ = fs::create_dir_all(target_dir); let _ = fs::create_dir_all(target_dir);
asset_to_cache(&self.theme_set, &target_dir.join("themes.bin"), "theme set")?; asset_to_cache(&self.theme_set, &target_dir.join("themes.bin"), "theme set")?;
asset_to_cache( asset_to_cache(
&self.syntax_set, self.get_syntax_set(),
&target_dir.join("syntaxes.bin"), &target_dir.join("syntaxes.bin"),
"syntax set", "syntax set",
)?; )?;
@ -146,8 +146,12 @@ impl HighlightingAssets {
self.fallback_theme = Some(theme); self.fallback_theme = Some(theme);
} }
pub(crate) fn get_syntax_set(&self) -> &SyntaxSet {
&self.syntax_set
}
pub fn syntaxes(&self) -> &[SyntaxReference] { pub fn syntaxes(&self) -> &[SyntaxReference] {
self.syntax_set.syntaxes() self.get_syntax_set().syntaxes()
} }
pub fn themes(&self) -> impl Iterator<Item = &str> { pub fn themes(&self) -> impl Iterator<Item = &str> {
@ -163,7 +167,7 @@ impl HighlightingAssets {
match mapping.get_syntax_for(file_name) { match mapping.get_syntax_for(file_name) {
Some(MappingTarget::MapToUnknown) => None, Some(MappingTarget::MapToUnknown) => None,
Some(MappingTarget::MapTo(syntax_name)) => { Some(MappingTarget::MapTo(syntax_name)) => {
self.syntax_set.find_syntax_by_name(syntax_name) self.get_syntax_set().find_syntax_by_name(syntax_name)
} }
None => self.get_extension_syntax(file_name.as_os_str()), None => self.get_extension_syntax(file_name.as_os_str()),
} }
@ -192,7 +196,7 @@ impl HighlightingAssets {
mapping: &SyntaxMapping, mapping: &SyntaxMapping,
) -> Result<&SyntaxReference> { ) -> Result<&SyntaxReference> {
if let Some(language) = language { if let Some(language) = language {
self.syntax_set self.get_syntax_set()
.find_syntax_by_token(language) .find_syntax_by_token(language)
.ok_or_else(|| ErrorKind::UnknownSyntax(language.to_owned()).into()) .ok_or_else(|| ErrorKind::UnknownSyntax(language.to_owned()).into())
} else { } else {
@ -225,7 +229,7 @@ impl HighlightingAssets {
}), }),
Some(MappingTarget::MapTo(syntax_name)) => self Some(MappingTarget::MapTo(syntax_name)) => self
.syntax_set .get_syntax_set()
.find_syntax_by_name(syntax_name) .find_syntax_by_name(syntax_name)
.ok_or_else(|| ErrorKind::UnknownSyntax(syntax_name.to_owned()).into()), .ok_or_else(|| ErrorKind::UnknownSyntax(syntax_name.to_owned()).into()),
@ -246,11 +250,11 @@ impl HighlightingAssets {
} }
fn get_extension_syntax(&self, file_name: &OsStr) -> Option<&SyntaxReference> { fn get_extension_syntax(&self, file_name: &OsStr) -> Option<&SyntaxReference> {
self.syntax_set self.get_syntax_set()
.find_syntax_by_extension(file_name.to_str().unwrap_or_default()) .find_syntax_by_extension(file_name.to_str().unwrap_or_default())
.or_else(|| { .or_else(|| {
let file_path = Path::new(file_name); let file_path = Path::new(file_name);
self.syntax_set self.get_syntax_set()
.find_syntax_by_extension( .find_syntax_by_extension(
file_path file_path
.extension() .extension()
@ -274,7 +278,7 @@ impl HighlightingAssets {
fn get_first_line_syntax(&self, reader: &mut InputReader) -> Option<&SyntaxReference> { fn get_first_line_syntax(&self, reader: &mut InputReader) -> Option<&SyntaxReference> {
String::from_utf8(reader.first_line.clone()) String::from_utf8(reader.first_line.clone())
.ok() .ok()
.and_then(|l| self.syntax_set.find_syntax_by_first_line(&l)) .and_then(|l| self.get_syntax_set().find_syntax_by_first_line(&l))
} }
} }
@ -347,7 +351,7 @@ mod tests {
self.assets self.assets
.get_syntax(None, &mut opened_input, &self.syntax_mapping) .get_syntax(None, &mut opened_input, &self.syntax_mapping)
.unwrap_or_else(|_| self.assets.syntax_set.find_syntax_plain_text()) .unwrap_or_else(|_| self.assets.get_syntax_set().find_syntax_plain_text())
.name .name
.clone() .clone()
} }
@ -361,7 +365,7 @@ mod tests {
self.assets self.assets
.get_syntax(None, &mut opened_input, &self.syntax_mapping) .get_syntax(None, &mut opened_input, &self.syntax_mapping)
.unwrap_or_else(|_| self.assets.syntax_set.find_syntax_plain_text()) .unwrap_or_else(|_| self.assets.get_syntax_set().find_syntax_plain_text())
.name .name
.clone() .clone()
} }
@ -385,7 +389,7 @@ mod tests {
self.assets self.assets
.get_syntax(None, &mut opened_input, &self.syntax_mapping) .get_syntax(None, &mut opened_input, &self.syntax_mapping)
.unwrap_or_else(|_| self.assets.syntax_set.find_syntax_plain_text()) .unwrap_or_else(|_| self.assets.get_syntax_set().find_syntax_plain_text())
.name .name
.clone() .clone()
} }
@ -543,7 +547,7 @@ mod tests {
assert_eq!( assert_eq!(
test.assets test.assets
.get_syntax(None, &mut opened_input, &test.syntax_mapping) .get_syntax(None, &mut opened_input, &test.syntax_mapping)
.unwrap_or_else(|_| test.assets.syntax_set.find_syntax_plain_text()) .unwrap_or_else(|_| test.assets.get_syntax_set().find_syntax_plain_text())
.name, .name,
"SSH Config" "SSH Config"
); );

View File

@ -174,7 +174,7 @@ impl<'a> InteractivePrinter<'a> {
let syntax = match assets.get_syntax(config.language, input, &config.syntax_mapping) { let syntax = match assets.get_syntax(config.language, input, &config.syntax_mapping) {
Ok(syntax) => syntax, Ok(syntax) => syntax,
Err(Error(ErrorKind::UndetectedSyntax(_), _)) => { Err(Error(ErrorKind::UndetectedSyntax(_), _)) => {
assets.syntax_set.find_syntax_plain_text() assets.get_syntax_set().find_syntax_plain_text()
} }
Err(e) => return Err(e), Err(e) => return Err(e),
}; };
@ -192,7 +192,7 @@ impl<'a> InteractivePrinter<'a> {
#[cfg(feature = "git")] #[cfg(feature = "git")]
line_changes, line_changes,
highlighter, highlighter,
syntax_set: &assets.syntax_set, syntax_set: assets.get_syntax_set(),
background_color_highlight, background_color_highlight,
}) })
} }