on master help sign in
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.

commit375d55aa5d7f3390e33febcc40a8d629b22926ae authorMartin Nordholts <enselic@gmail.com> dateFri 16 Jul 2021, 11:49 (5 years ago) parent6ef2bb3
2 files changed+19−15
src/assets.rs+17−13 src/printer.rs+2−2
src/assets.rs+17−13
@@ -18,7 +18,7 @@ use crate::syntax_mapping::{MappingTarget, SyntaxMapping};
1818
1919#[derive(Debug)]
2020pub struct HighlightingAssets {
21− pub(crate) syntax_set: SyntaxSet,
21+ syntax_set: SyntaxSet,
2222 pub(crate) theme_set: ThemeSet,
2323 fallback_theme: Option<&'static str>,
2424}
@@ -127,7 +127,7 @@ impl HighlightingAssets {
127127 let _ = fs::create_dir_all(target_dir);
128128 asset_to_cache(&self.theme_set, &target_dir.join("themes.bin"), "theme set")?;
129129 asset_to_cache(
130− &self.syntax_set,
130+ self.get_syntax_set(),
131131 &target_dir.join("syntaxes.bin"),
132132 "syntax set",
133133 )?;
@@ -146,8 +146,12 @@ impl HighlightingAssets {
146146 self.fallback_theme = Some(theme);
147147 }
148148
149+ pub(crate) fn get_syntax_set(&self) -> &SyntaxSet {
150+ &self.syntax_set
151+ }
152+
149153 pub fn syntaxes(&self) -> &[SyntaxReference] {
150− self.syntax_set.syntaxes()
154+ self.get_syntax_set().syntaxes()
151155 }
152156
153157 pub fn themes(&self) -> impl Iterator<Item = &str> {
@@ -163,7 +167,7 @@ impl HighlightingAssets {
163167 match mapping.get_syntax_for(file_name) {
164168 Some(MappingTarget::MapToUnknown) => None,
165169 Some(MappingTarget::MapTo(syntax_name)) => {
166− self.syntax_set.find_syntax_by_name(syntax_name)
170+ self.get_syntax_set().find_syntax_by_name(syntax_name)
167171 }
168172 None => self.get_extension_syntax(file_name.as_os_str()),
169173 }
@@ -192,7 +196,7 @@ impl HighlightingAssets {
192196 mapping: &SyntaxMapping,
193197 ) -> Result<&SyntaxReference> {
194198 if let Some(language) = language {
195− self.syntax_set
199+ self.get_syntax_set()
196200 .find_syntax_by_token(language)
197201 .ok_or_else(|| ErrorKind::UnknownSyntax(language.to_owned()).into())
198202 } else {
@@ -225,7 +229,7 @@ impl HighlightingAssets {
225229 }),
226230
227231 Some(MappingTarget::MapTo(syntax_name)) => self
228− .syntax_set
232+ .get_syntax_set()
229233 .find_syntax_by_name(syntax_name)
230234 .ok_or_else(|| ErrorKind::UnknownSyntax(syntax_name.to_owned()).into()),
231235
@@ -246,11 +250,11 @@ impl HighlightingAssets {
246250 }
247251
248252 fn get_extension_syntax(&self, file_name: &OsStr) -> Option<&SyntaxReference> {
249− self.syntax_set
253+ self.get_syntax_set()
250254 .find_syntax_by_extension(file_name.to_str().unwrap_or_default())
251255 .or_else(|| {
252256 let file_path = Path::new(file_name);
253− self.syntax_set
257+ self.get_syntax_set()
254258 .find_syntax_by_extension(
255259 file_path
256260 .extension()
@@ -274,7 +278,7 @@ impl HighlightingAssets {
274278 fn get_first_line_syntax(&self, reader: &mut InputReader) -> Option<&SyntaxReference> {
275279 String::from_utf8(reader.first_line.clone())
276280 .ok()
277− .and_then(|l| self.syntax_set.find_syntax_by_first_line(&l))
281+ .and_then(|l| self.get_syntax_set().find_syntax_by_first_line(&l))
278282 }
279283}
280284
@@ -347,7 +351,7 @@ mod tests {
347351
348352 self.assets
349353 .get_syntax(None, &mut opened_input, &self.syntax_mapping)
350− .unwrap_or_else(|_| self.assets.syntax_set.find_syntax_plain_text())
354+ .unwrap_or_else(|_| self.assets.get_syntax_set().find_syntax_plain_text())
351355 .name
352356 .clone()
353357 }
@@ -361,7 +365,7 @@ mod tests {
361365
362366 self.assets
363367 .get_syntax(None, &mut opened_input, &self.syntax_mapping)
364− .unwrap_or_else(|_| self.assets.syntax_set.find_syntax_plain_text())
368+ .unwrap_or_else(|_| self.assets.get_syntax_set().find_syntax_plain_text())
365369 .name
366370 .clone()
367371 }
@@ -385,7 +389,7 @@ mod tests {
385389
386390 self.assets
387391 .get_syntax(None, &mut opened_input, &self.syntax_mapping)
388− .unwrap_or_else(|_| self.assets.syntax_set.find_syntax_plain_text())
392+ .unwrap_or_else(|_| self.assets.get_syntax_set().find_syntax_plain_text())
389393 .name
390394 .clone()
391395 }
@@ -543,7 +547,7 @@ mod tests {
543547 assert_eq!(
544548 test.assets
545549 .get_syntax(None, &mut opened_input, &test.syntax_mapping)
546− .unwrap_or_else(|_| test.assets.syntax_set.find_syntax_plain_text())
550+ .unwrap_or_else(|_| test.assets.get_syntax_set().find_syntax_plain_text())
547551 .name,
548552 "SSH Config"
549553 );
src/printer.rs+2−2
@@ -174,7 +174,7 @@ impl<'a> InteractivePrinter<'a> {
174174 let syntax = match assets.get_syntax(config.language, input, &config.syntax_mapping) {
175175 Ok(syntax) => syntax,
176176 Err(Error(ErrorKind::UndetectedSyntax(_), _)) => {
177− assets.syntax_set.find_syntax_plain_text()
177+ assets.get_syntax_set().find_syntax_plain_text()
178178 }
179179 Err(e) => return Err(e),
180180 };
@@ -192,7 +192,7 @@ impl<'a> InteractivePrinter<'a> {
192192 #[cfg(feature = "git")]
193193 line_changes,
194194 highlighter,
195− syntax_set: &assets.syntax_set,
195+ syntax_set: assets.get_syntax_set(),
196196 background_color_highlight,
197197 })
198198 }