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:
parent
6ef2bb3283
commit
375d55aa5d
@ -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"
|
||||||
);
|
);
|
||||||
|
@ -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,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user