diff --git a/Cargo.lock b/Cargo.lock index d855dae90c..6254d4e29d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -580,12 +580,6 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - [[package]] name = "libc" version = "0.2.112" @@ -1083,9 +1077,9 @@ dependencies = [ [[package]] name = "syntect" -version = "4.6.0" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b20815bbe80ee0be06e6957450a841185fcf690fe0178f14d77a05ce2caa031" +checksum = "c6c454c27d9d7d9a84c7803aaa3c50cd088d2906fe3c6e42da3209aa623576a8" dependencies = [ "bincode", "bitflags", @@ -1093,13 +1087,14 @@ dependencies = [ "flate2", "fnv", "lazy_static", - "lazycell", + "once_cell", "onig", "plist", "regex-syntax", "serde", "serde_derive", "serde_json", + "thiserror", "walkdir", "yaml-rust", ] diff --git a/Cargo.toml b/Cargo.toml index 33834e92cc..6725fe32f7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,8 +33,7 @@ minimal-application = [ ] git = ["git2"] # Support indicating git modifications paging = ["shell-words", "grep-cli"] # Support applying a pager on the output -# Add "syntect/plist-load" when https://github.com/trishume/syntect/pull/345 reaches us -build-assets = ["syntect/yaml-load", "syntect/dump-create", "regex", "walkdir"] +build-assets = ["syntect/yaml-load", "syntect/plist-load", "regex", "walkdir"] # You need to use one of these if you depend on bat as a library: regex-onig = ["syntect/regex-onig"] # Use the "oniguruma" regex engine @@ -73,7 +72,7 @@ optional = true default-features = false [dependencies.syntect] -version = "4.6.0" +version = "5.0.0" default-features = false features = ["parsing"] diff --git a/assets/acknowledgements.bin b/assets/acknowledgements.bin index b3d31ea714..748d1e32be 100644 Binary files a/assets/acknowledgements.bin and b/assets/acknowledgements.bin differ diff --git a/assets/syntaxes.bin b/assets/syntaxes.bin index c5cb3bbb4e..a1f65bc759 100644 Binary files a/assets/syntaxes.bin and b/assets/syntaxes.bin differ diff --git a/assets/themes.bin b/assets/themes.bin index 5d30912786..1163d1d243 100644 Binary files a/assets/themes.bin and b/assets/themes.bin differ diff --git a/src/assets.rs b/src/assets.rs index e25c233ffe..8126843373 100644 --- a/src/assets.rs +++ b/src/assets.rs @@ -43,8 +43,9 @@ pub struct SyntaxReferenceInSet<'a> { pub syntax_set: &'a SyntaxSet, } -/// Compress for size of ~700 kB instead of ~4600 kB at the cost of ~30% longer deserialization time -pub(crate) const COMPRESS_SYNTAXES: bool = true; +/// Lazy-loaded syntaxes are already compressed, and we don't want to compress +/// already compressed data. +pub(crate) const COMPRESS_SYNTAXES: bool = false; /// We don't want to compress our [LazyThemeSet] since the lazy-loaded themes /// within it are already compressed, and compressing another time just makes @@ -581,13 +582,22 @@ mod tests { } #[test] - fn syntax_detection_is_case_sensitive() { + fn syntax_detection_is_case_insensitive() { let mut test = SyntaxDetectionTest::new(); - assert_ne!(test.syntax_for_file("README.MD"), "Markdown"); + assert_eq!(test.syntax_for_file("README.md"), "Markdown"); + assert_eq!(test.syntax_for_file("README.mD"), "Markdown"); + assert_eq!(test.syntax_for_file("README.Md"), "Markdown"); + assert_eq!(test.syntax_for_file("README.MD"), "Markdown"); + + // Adding a mapping for "MD" in addition to "md" should not break the mapping test.syntax_mapping .insert("*.MD", MappingTarget::MapTo("Markdown")) .ok(); + + assert_eq!(test.syntax_for_file("README.md"), "Markdown"); + assert_eq!(test.syntax_for_file("README.mD"), "Markdown"); + assert_eq!(test.syntax_for_file("README.Md"), "Markdown"); assert_eq!(test.syntax_for_file("README.MD"), "Markdown"); } diff --git a/src/error.rs b/src/error.rs index 54f460e73e..f9845138f1 100644 --- a/src/error.rs +++ b/src/error.rs @@ -2,11 +2,14 @@ use std::io::Write; use thiserror::Error; #[derive(Error, Debug)] +#[non_exhaustive] pub enum Error { #[error(transparent)] Io(#[from] ::std::io::Error), #[error(transparent)] - SyntectError(#[from] ::syntect::LoadingError), + SyntectError(#[from] ::syntect::Error), + #[error(transparent)] + SyntectLoadingError(#[from] ::syntect::LoadingError), #[error(transparent)] ParseIntError(#[from] ::std::num::ParseIntError), #[error(transparent)] diff --git a/src/printer.rs b/src/printer.rs index ad041e03d7..c470706940 100644 --- a/src/printer.rs +++ b/src/printer.rs @@ -447,7 +447,7 @@ impl<'a> Printer for InteractivePrinter<'a> { }; highlighter_from_set .highlighter - .highlight(&line, highlighter_from_set.syntax_set) + .highlight_line(&line, highlighter_from_set.syntax_set)? }; if out_of_range { diff --git a/tests/syntax-tests/highlighted/Svelte/App.svelte b/tests/syntax-tests/highlighted/Svelte/App.svelte index 7a09649a1c..d1ec994835 100644 --- a/tests/syntax-tests/highlighted/Svelte/App.svelte +++ b/tests/syntax-tests/highlighted/Svelte/App.svelte @@ -27,9 +27,13 @@  <script type="text/livescript"> - // This block is a regression test for a bat panic when a LiveScript syntax definition is missing + // This block is a regression test for a bat panic when a LiveScript syntax definition is missing  +<style lang="text/postcss"> + /* This block is a regression test for a bat panic when a PostCSS syntax definition is missing */ + + <style>  main {  position: relative; diff --git a/tests/syntax-tests/highlighted/Vue/example.vue b/tests/syntax-tests/highlighted/Vue/example.vue index d8da085220..60ee9951f2 100644 --- a/tests/syntax-tests/highlighted/Vue/example.vue +++ b/tests/syntax-tests/highlighted/Vue/example.vue @@ -8,6 +8,11 @@    +<template lang='pug'> + #container.col + p This shall be formated as Plain Text as long as a Pug syntax definition is missing + + <script> import AppHeader from "@/components/AppHeader"; import AppLoadingIndicator from "@/components/AppLoadingIndicator"; diff --git a/tests/syntax-tests/source/Svelte/App.svelte b/tests/syntax-tests/source/Svelte/App.svelte index 089172c41c..e1ae02c3eb 100644 --- a/tests/syntax-tests/source/Svelte/App.svelte +++ b/tests/syntax-tests/source/Svelte/App.svelte @@ -27,9 +27,13 @@ + +