on 0c19d3e help sign in
173 files changed+442−1621
since splitsnapshots
unifiedsplit
.github/ISSUE_TEMPLATE/bug_report.md+2−19 .github/ISSUE_TEMPLATE/question.md−2 .github/workflows/CICD.yml+1−13 .gitmodules−8 CHANGELOG.md+15−96 CONTRIBUTING.md−22 Cargo.lock+222−212 Cargo.toml+15−15 README.md+3−35 assets/acknowledgements.bin assets/completions/_bat.ps1.in+1−1 assets/completions/bat.bash.in+2−15 assets/completions/bat.fish.in+1−1 assets/completions/bat.zsh.in+1−1 assets/manual/bat.1.in+1−4 assets/syntaxes.bin assets/syntaxes/02_Extra/Fish+1−1 assets/syntaxes/02_Extra/GLSL+1−1 assets/syntaxes/02_Extra/GraphQL+1−1 assets/syntaxes/02_Extra/INI.sublime-syntax+2−2 assets/syntaxes/02_Extra/Nginx+1−1 assets/syntaxes/02_Extra/Stylus.sublime-syntax+2−2 assets/syntaxes/02_Extra/SublimeJQ−1 assets/syntaxes/02_Extra/TOML+1−1 assets/syntaxes/02_Extra/VimL+1−1 assets/syntaxes/02_Extra/Zig+1−1 assets/syntaxes/02_Extra/cmd-help−1 assets/syntaxes/02_Extra/log.sublime-syntax+6−30 assets/themes.bin doc/README-ja.md+2−2 doc/README-ko.md+1−1 doc/README-ru.md+1−1 doc/release-checklist.md+19−33 doc/sponsors.md−14 doc/sponsors/workos-logo-white-bg.svg−11 rustfmt.toml−1 src/assets.rs+6−75 src/assets/build_assets/acknowledgements.rs−3 src/bin/bat/app.rs+1−1 src/bin/bat/clap_app.rs+20−32 src/bin/bat/config.rs+1−1 src/bin/bat/main.rs−11 src/error.rs+1−4 src/input.rs+2−9 src/less.rs+8−59 src/output.rs+5−7 src/preprocessor.rs+3−10 src/pretty_printer.rs−6 src/printer.rs+33−96 src/style.rs+4−30 src/syntax_mapping.rs+2−24 tests/benchmarks/many-small-files/small-file-0.txt−1 tests/benchmarks/many-small-files/small-file-1.txt−1 tests/benchmarks/many-small-files/small-file-10.txt−1 tests/benchmarks/many-small-files/small-file-100.txt−1 tests/benchmarks/many-small-files/small-file-11.txt−1 tests/benchmarks/many-small-files/small-file-12.txt−1 tests/benchmarks/many-small-files/small-file-13.txt−1 tests/benchmarks/many-small-files/small-file-14.txt−1 tests/benchmarks/many-small-files/small-file-15.txt−1 tests/benchmarks/many-small-files/small-file-16.txt−1 tests/benchmarks/many-small-files/small-file-17.txt−1 tests/benchmarks/many-small-files/small-file-18.txt−1 tests/benchmarks/many-small-files/small-file-19.txt−1 tests/benchmarks/many-small-files/small-file-2.txt−1 tests/benchmarks/many-small-files/small-file-20.txt−1 tests/benchmarks/many-small-files/small-file-21.txt−1 tests/benchmarks/many-small-files/small-file-22.txt−1 tests/benchmarks/many-small-files/small-file-23.txt−1 tests/benchmarks/many-small-files/small-file-24.txt−1 tests/benchmarks/many-small-files/small-file-25.txt−1 tests/benchmarks/many-small-files/small-file-26.txt−1 tests/benchmarks/many-small-files/small-file-27.txt−1 tests/benchmarks/many-small-files/small-file-28.txt−1 tests/benchmarks/many-small-files/small-file-29.txt−1 tests/benchmarks/many-small-files/small-file-3.txt−1 tests/benchmarks/many-small-files/small-file-30.txt−1 tests/benchmarks/many-small-files/small-file-31.txt−1 tests/benchmarks/many-small-files/small-file-32.txt−1 tests/benchmarks/many-small-files/small-file-33.txt−1 tests/benchmarks/many-small-files/small-file-34.txt−1 tests/benchmarks/many-small-files/small-file-35.txt−1 tests/benchmarks/many-small-files/small-file-36.txt−1 tests/benchmarks/many-small-files/small-file-37.txt−1 tests/benchmarks/many-small-files/small-file-38.txt−1 tests/benchmarks/many-small-files/small-file-39.txt−1 tests/benchmarks/many-small-files/small-file-4.txt−1 tests/benchmarks/many-small-files/small-file-40.txt−1 tests/benchmarks/many-small-files/small-file-41.txt−1 tests/benchmarks/many-small-files/small-file-42.txt−1 tests/benchmarks/many-small-files/small-file-43.txt−1 tests/benchmarks/many-small-files/small-file-44.txt−1 tests/benchmarks/many-small-files/small-file-45.txt−1 tests/benchmarks/many-small-files/small-file-46.txt−1 tests/benchmarks/many-small-files/small-file-47.txt−1 tests/benchmarks/many-small-files/small-file-48.txt−1 tests/benchmarks/many-small-files/small-file-49.txt−1 tests/benchmarks/many-small-files/small-file-5.txt−1 tests/benchmarks/many-small-files/small-file-50.txt−1 tests/benchmarks/many-small-files/small-file-51.txt−1 tests/benchmarks/many-small-files/small-file-52.txt−1 tests/benchmarks/many-small-files/small-file-53.txt−1 tests/benchmarks/many-small-files/small-file-54.txt−1 tests/benchmarks/many-small-files/small-file-55.txt−1 tests/benchmarks/many-small-files/small-file-56.txt−1 tests/benchmarks/many-small-files/small-file-57.txt−1 tests/benchmarks/many-small-files/small-file-58.txt−1 tests/benchmarks/many-small-files/small-file-59.txt−1 tests/benchmarks/many-small-files/small-file-6.txt−1 tests/benchmarks/many-small-files/small-file-60.txt−1 tests/benchmarks/many-small-files/small-file-61.txt−1 tests/benchmarks/many-small-files/small-file-62.txt−1 tests/benchmarks/many-small-files/small-file-63.txt−1 tests/benchmarks/many-small-files/small-file-64.txt−1 tests/benchmarks/many-small-files/small-file-65.txt−1 tests/benchmarks/many-small-files/small-file-66.txt−1 tests/benchmarks/many-small-files/small-file-67.txt−1 tests/benchmarks/many-small-files/small-file-68.txt−1 tests/benchmarks/many-small-files/small-file-69.txt−1 tests/benchmarks/many-small-files/small-file-7.txt−1 tests/benchmarks/many-small-files/small-file-70.txt−1 tests/benchmarks/many-small-files/small-file-71.txt−1 tests/benchmarks/many-small-files/small-file-72.txt−1 tests/benchmarks/many-small-files/small-file-73.txt−1 tests/benchmarks/many-small-files/small-file-74.txt−1 tests/benchmarks/many-small-files/small-file-75.txt−1 tests/benchmarks/many-small-files/small-file-76.txt−1 tests/benchmarks/many-small-files/small-file-77.txt−1 tests/benchmarks/many-small-files/small-file-78.txt−1 tests/benchmarks/many-small-files/small-file-79.txt−1 tests/benchmarks/many-small-files/small-file-8.txt−1 tests/benchmarks/many-small-files/small-file-80.txt−1 tests/benchmarks/many-small-files/small-file-81.txt−1 tests/benchmarks/many-small-files/small-file-82.txt−1 tests/benchmarks/many-small-files/small-file-83.txt−1 tests/benchmarks/many-small-files/small-file-84.txt−1 tests/benchmarks/many-small-files/small-file-85.txt−1 tests/benchmarks/many-small-files/small-file-86.txt−1 tests/benchmarks/many-small-files/small-file-87.txt−1 tests/benchmarks/many-small-files/small-file-88.txt−1 tests/benchmarks/many-small-files/small-file-89.txt−1 tests/benchmarks/many-small-files/small-file-9.txt−1 tests/benchmarks/many-small-files/small-file-90.txt−1 tests/benchmarks/many-small-files/small-file-91.txt−1 tests/benchmarks/many-small-files/small-file-92.txt−1 tests/benchmarks/many-small-files/small-file-93.txt−1 tests/benchmarks/many-small-files/small-file-94.txt−1 tests/benchmarks/many-small-files/small-file-95.txt−1 tests/benchmarks/many-small-files/small-file-96.txt−1 tests/benchmarks/many-small-files/small-file-97.txt−1 tests/benchmarks/many-small-files/small-file-98.txt−1 tests/benchmarks/many-small-files/small-file-99.txt−1 tests/benchmarks/run-benchmarks.sh+5−15 tests/examples/git/.config/git/config−3 tests/examples/git/.gitconfig−3 tests/examples/longline.json−3 tests/integration_tests.rs+3−250 tests/snapshots/output/full.snapshot.txt−1 tests/syntax-tests/highlighted/INI/test.inf−5 tests/syntax-tests/highlighted/JQ/sample.jq−60 tests/syntax-tests/highlighted/Log/example.log−1 tests/syntax-tests/highlighted/Svelte/App.svelte+1−5 tests/syntax-tests/highlighted/Syslog/example.syslog+3−3 tests/syntax-tests/highlighted/Vue/example.vue−5 tests/syntax-tests/highlighted/Zig/example.zig+39−39 tests/syntax-tests/highlighted/cmd-help/test.cmd-help−54 tests/syntax-tests/source/INI/test.inf−5 tests/syntax-tests/source/JQ/LICENSE.md−25 tests/syntax-tests/source/JQ/sample.jq−60 tests/syntax-tests/source/Log/example.log−1 tests/syntax-tests/source/Svelte/App.svelte+1−5 tests/syntax-tests/source/Vue/example.vue−5 tests/syntax-tests/source/cmd-help/test.cmd-help−54
.github/ISSUE_TEMPLATE/bug_report.md+2−19
@@ -7,26 +7,9 @@ assignees: ''
77
88---
99
10−<!--
11−
12−Hey there, thank you for reporting a bug!
13−
14−Please note that the following bugs have already been reported:
15−
16−* dpkg: error processing archive /some/path/some-program.deb (--unpack):
17− trying to overwrite '/usr/.crates2.json'
18−
19− See https://github.com/sharkdp/bat/issues/938
20−
21−-->
22−
23−**What steps will reproduce the bug?**
24−
25−1. step 1
26−2. step 2
27−3. ...
10+<!-- Hey there, thank you for creating an issue! -->
2811
29−**What happens?**
12+**Describe the bug you encountered:**
3013
3114...
3215
.github/ISSUE_TEMPLATE/question.md−2
@@ -7,5 +7,3 @@ assignees: ''
77
88---
99
10−<!-- Using a normal ticket is still fine, but feel free to ask your
11−questions about bat on https://github.com/sharkdp/bat/discussions instead. -->
.github/workflows/CICD.yml+1−13
@@ -118,18 +118,6 @@ jobs:
118118 toolchain: stable
119119 default: true
120120 profile: minimal
121− - name: Print -h
122− uses: actions-rs/cargo@v1
123− with:
124− command: run
125− args: --locked -- -h
126− - name: Print --help
127− uses: actions-rs/cargo@v1
128− with:
129− command: run
130− args: --locked -- --help
131− - name: Show man page
132− run: man $(find . -name bat.1)
133121 - name: Check documentation
134122 env:
135123 RUSTDOCFLAGS: -D warnings
@@ -154,7 +142,7 @@ jobs:
154142 - { target: x86_64-apple-darwin , os: macos-10.15 }
155143 - { target: x86_64-pc-windows-gnu , os: windows-2019 }
156144 - { target: x86_64-pc-windows-msvc , os: windows-2019 }
157− - { target: x86_64-unknown-linux-gnu , os: ubuntu-20.04, use-cross: true }
145+ - { target: x86_64-unknown-linux-gnu , os: ubuntu-20.04 }
158146 - { target: x86_64-unknown-linux-musl , os: ubuntu-20.04, use-cross: true }
159147 steps:
160148 - name: Checkout source code
.gitmodules−8
@@ -236,11 +236,3 @@
236236[submodule "assets/syntaxes/02_Extra/Dart"]
237237 path = assets/syntaxes/02_Extra/Dart
238238 url = https://github.com/elMuso/Dartlight.git
239−[submodule "assets/syntaxes/02_Extra/SublimeJQ"]
240− path = assets/syntaxes/02_Extra/SublimeJQ
241− url = https://github.com/zogwarg/SublimeJQ.git
242−[submodule "assets/syntaxes/02_Extra/cmd-help"]
243− path = assets/syntaxes/02_Extra/cmd-help
244− url = https://github.com/victor-gp/cmd-help-sublime-syntax.git
245− branch = main
246− shallow = true
CHANGELOG.md+15−96
@@ -2,117 +2,31 @@
22
33## Features
44
5−- Make the default macOS theme depend on Dark Mode. See #2197, #1746 (@Enselic)
6−
7−## Bugfixes
8−
9−## Other
10−
11−- Relaxed glibc requirements on amd64, see #2106 and #2194 (@sharkdp)
12−
13−## Syntaxes
14−
15−## Themes
16−
17−## `bat` as a library
18−
19−
20−# v0.21.0
21−
22−## Features
23−
24−- Correctly render tab stops in `--show-all`, see #2038 (@Synthetica9)
25−- Add a `--style=default` option and make it the default. It is less verbose than `full`, see #2061 (@IsaacHorvath)
26−- Enable BusyBox `less` as pager, see #2162 (@nfisher1226)
27−- File extensions are now matched case-insensitively. See #1854, #2181 (@Enselic)
28−
29−## Bugfixes
30−
31−- Bump `regex` dependency from 1.5.4 to 1.5.5 to fix [CVE-2022-24713](https://blog.rust-lang.org/2022/03/08/cve-2022-24713.html), see #2145, #2139 (@Enselic)
32−- `bat` no longer crashes when encountering files that references missing syntaxes. See #915, #2181 (@Enselic)
33−
34−## Performance
35−
36−- Skip syntax highlighting on long lines (> 16384 chars) to help improve performance. See #2165 (@keith-hall)
37−- Vastly improve startup time by lazy-loading syntaxes via syntect 5.0.0. This makes bat display small files ~75% faster than before. See #951, #2181 (@Enselic)
38−
39−## Other
40−
41−- Include info about custom assets in `--diagnostics` if used. See #2107, #2144 (@Enselic)
42−
43−## Syntaxes
44−
45−- Mapped clang-format config file (.clang-format) to YAML syntax (@TruncatedDinosour)
46−- log syntax: improved handling of escape characters in double quoted strings. See #2123 (@keith-hall)
47−- Associate `/var/spool/mail/*` and `/var/mail/*` with the `Email` syntax. See #2156 (@cyqsimon)
48−- Added cmd-help syntax to scope --help messages. See #2148 (@victor-gp)
49−- Slightly adjust Zig syntax. See #2136 (@Enselic)
50−- Associate `.inf` files with the `INI` syntax. See #2190 (@Enselic)
51−
52−## `bat` as a library
53−
54−- Allow configuration of `show_nonprintable` with `PrettyPrinter`, see #2142
55−- The binary format of syntaxes.bin has been changed due to syntaxes now being lazy-loaded via syntect 5.0.0. See #2181 (@Enselic)
56−- Mark `bat::error::Error` enum as `#[non_exhaustive]` to allow adding new variants without future semver breakage. See #2181 (@Enselic)
57−- Change `Error::SyntectError(syntect::LoadingError)` to `Error::SyntectError(syntect::Error)`. See #2181 (@Enselic)
58−- Add `Error::SyntectLoadingError(syntect::LoadingError)` enum variant. See #2181 (@Enselic)
59−
60−
61−# v0.20.0
62−
63−## Features
64−
65−- New style component `header-filesize` to show size of the displayed file in the header. See #1988 (@mdibaiee)
66−- Use underline for line highlighting on ANSI, see #1730 (@mdibaiee)
67−
68−## Bugfixes
69−
70−- Fix bash completion on bash 3.x and bash-completion 1.x. See #2066 (@joshpencheon)
71−
72−## Syntaxes
73−
74−- `GraphQL`: Add support for interfaces implementing interfaces and consider ampersand an operator. See #2000
75−- Associate `_vimrc` and `_gvimrc` files with the `VimL` syntax. See #2002
76−- Associate `poetry.lock` files with the `TOML` syntax. See #2049
77−- Associate `.mesh`, `.task`, `.rgen`, `.rint`, `.rahit`, `.rchit`, `.rmiss`, and `.rcall` with the `GLSL` syntax. See #2050
78−- Added support for `JQ` syntax, see #2072
79−- Properly associate global git config files rooted in `$XDG_CONFIG_HOME/git/` or `$HOME/.config/git/`. See #2067 (@cyqsimon)
80−
81−## `bat` as a library
82−
83−- Exposed `get_syntax_set` and `get_theme` methods on `HighlightingAssets`. See #2030 (@dandavison)
84−- Added `HeaderFilename` and `HeaderFilesize` to `StyleComponent` enum, and mark it `#[non_exhaustive]`. See #1988 (@mdibaiee)
85−
86−
87−# v0.19.0
88−
89−## Performance
90−
91−- Reduce startup time in loop-through mode (e.g. when redirecting output) by 90%. See #1747 (@Enselic)
92−- Load themes lazily to make bat start 25% faster when disregarding syntax load time. See #1969 (@Enselic)
93−- Python syntax highlighting no longer suffers from abysmal performance in specific scenarios. See #1688 (@keith-hall)
94−- Fix for poor performance when ANSI escape sequences are piped to `bat`, see #1596 (@eth-p)
95−- Fix for incorrect handling of ANSI escape sequences when using `--wrap=never`, see #1596 (@eth-p)
96−- Load custom assets as fast as integrated assets, see #1753 (@Enselic)
97−
98−## Features
99−
1005- Support for `x:-delta` (minus) syntax in line ranges (e.g. `20:-10`). See #1901 (@bojan88)
1016- Support for `--ignored-suffix` argument. See #1892 (@bojan88)
1027- `$BAT_CONFIG_DIR` is now a recognized environment variable. It has precedence over `$XDG_CONFIG_HOME`, see #1727 (@billrisher)
1038- Support for `x:+delta` syntax in line ranges (e.g. `20:+10`). See #1810 (@bojan88)
1049- Add new `--acknowledgements` option that gives credit to theme and syntax definition authors. See #1971 (@Enselic)
105−- Include git hash in `bat -V` and `bat --version` output if present. See #1921 (@Enselic)
10610
10711## Bugfixes
10812
13+- Fix for poor performance when ANSI escape sequences are piped to `bat`, see #1596 (@eth-p)
14+- Fix for incorrect handling of ANSI escape sequences when using `--wrap=never`, see #1596 (@eth-p)
15+- Python syntax highlighting no longer suffers from abysmal performance in specific scenarios. See #1688 (@keith-hall)
10916- First line not shown in diff context. See #1891 (@divagant-martian)
11017- Do not ignore syntaxes that handle file names with a `*.conf` extension. See #1703 (@cbolgiano)
11118
19+## Performance
20+
21+- Load cached assets as fast as integrated assets, see #1753 (@Enselic)
22+- Greatly reduce startup time in loop-through mode, e.g. when redirecting output. Instead of *50 ms* - *100 ms*, startup takes *5 ms* - *10 ms*. See #1747 (@Enselic)
23+- Load themes lazily to make bat start 25% faster when disregarding syntax load time. See #1969 (@Enselic)
24+
11225## Other
11326
11427- Add PowerShell completion, see #1826 (@rashil2000)
11528- Minimum supported Rust version (MSRV) bumped to 1.51, see #1994 (@mdibaiee)
29+- Include git hash in `bat -V` and `bat --version` output if present. See #1921 (@Enselic)
11630
11731## Syntaxes
11832
@@ -131,6 +45,9 @@
13145- PowerShell syntax updated, see #1935 (@Enselic)
13246- TypeScript syntax updated, see #1834 (@Enselic)
13347
48+## New themes
49+
50+
13451## `bat` as a library
13552
13653- Deprecate `HighlightingAssets::syntaxes()` and `HighlightingAssets::syntax_for_file_name()`. Use `HighlightingAssets::get_syntaxes()` and `HighlightingAssets::get_syntax_for_path()` instead. They return a `Result` which is needed for upcoming lazy-loading work to improve startup performance. They also return which `SyntaxSet` the returned `SyntaxReference` belongs to. See #1747, #1755, #1776, #1862 (@Enselic)
@@ -139,6 +56,8 @@
13956- Add new `MappingTarget` enum variant `MapExtensionToUnknown`. Refer to its documentation for more information. Also mark `MappingTarget` as `#[non_exhaustive]` since more enum variants might be added in the future. See #1703 (@cbolgiano), #2012 (@Enselic)
14057
14158
59+
60+
14261# v0.18.3
14362
14463## Bugfixes
CONTRIBUTING.md−22
@@ -46,25 +46,3 @@ If you really think that a particular syntax or theme should be added for all
4646users, please read the corresponding
4747[documentation](https://github.com/sharkdp/bat/blob/master/doc/assets.md)
4848first.
49−
50−
51−## Regression tests
52−
53−You are strongly encouraged to add regression tests. Regression tests are great,
54−not least because they:
55−
56−* ensure that your contribution will never completely stop working,
57−
58−* makes code review easier, because it becomes very clear what the code is
59− supposed to do.
60−
61−For functional changes, you most likely want to add a test to
62−[`tests/integration_tests.rs`](https://github.com/sharkdp/bat/blob/master/tests/integration_tests.rs).
63−Look at existing tests to know how to write a new test. In short, you will
64−invoke the `bat` binary with a certain set of arguments, and then assert on
65−stdout/stderr.
66−
67−To learn how to write regression tests for theme and syntax changes, read the
68−[Syntax
69−tests](https://github.com/sharkdp/bat/blob/master/doc/assets.md#syntax-tests)
70−section in `assets.md`.
Cargo.lock+222−212
@@ -19,11 +19,11 @@ dependencies = [
1919
2020[[package]]
2121name = "ansi_colours"
22−version = "1.1.1"
22+version = "1.0.4"
2323source = "registry+https://github.com/rust-lang/crates.io-index"
24−checksum = "32678233b67f9056b0c144b39d46dc3218637e8d84ad6038ded339e08b19620d"
24+checksum = "60e2fb6138a49ad9f1cb3c6d8f8ccbdd5e62b4dab317c1b435a47ecd7da1d28f"
2525dependencies = [
26− "rgb",
26+ "cc",
2727]
2828
2929[[package]]
@@ -37,9 +37,9 @@ dependencies = [
3737
3838[[package]]
3939name = "assert_cmd"
40−version = "2.0.4"
40+version = "2.0.2"
4141source = "registry+https://github.com/rust-lang/crates.io-index"
42−checksum = "93ae1ddd39efd67689deb1979d80bad3bf7f2b09c6e6117c8d1f2443b5e2f83e"
42+checksum = "e996dc7940838b7ef1096b882e29ec30a3149a3a443cdc8dba19ed382eca1fe2"
4343dependencies = [
4444 "bstr",
4545 "doc-comment",
@@ -74,7 +74,7 @@ checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
7474
7575[[package]]
7676name = "bat"
77−version = "0.21.0"
77+version = "0.18.3"
7878dependencies = [
7979 "ansi_colours",
8080 "ansi_term",
@@ -82,7 +82,6 @@ dependencies = [
8282 "atty",
8383 "bincode",
8484 "bugreport",
85− "bytesize",
8685 "clap",
8786 "clircle",
8887 "console",
@@ -144,9 +143,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
144143
145144[[package]]
146145name = "bstr"
147−version = "0.2.17"
146+version = "0.2.16"
148147source = "registry+https://github.com/rust-lang/crates.io-index"
149−checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
148+checksum = "90682c8d613ad3373e66de8c6411e0ae2ab2571e879d2efbf73558cc66f21279"
150149dependencies = [
151150 "lazy_static",
152151 "memchr",
@@ -155,9 +154,9 @@ dependencies = [
155154
156155[[package]]
157156name = "bugreport"
158−version = "0.5.0"
157+version = "0.4.1"
159158source = "registry+https://github.com/rust-lang/crates.io-index"
160−checksum = "535120b8182547808081a66f1f77a64533c780b23da26763e0ee34dfb94f98c9"
159+checksum = "0014b4b2b4f63bfe69c3838470121290cc437fdc79785d408a761a21e8b2404c"
161160dependencies = [
162161 "git-version",
163162 "shell-escape",
@@ -165,22 +164,16 @@ dependencies = [
165164]
166165
167166[[package]]
168−name = "bytemuck"
169−version = "1.7.3"
170−source = "registry+https://github.com/rust-lang/crates.io-index"
171−checksum = "439989e6b8c38d1b6570a384ef1e49c8848128f5a97f3914baef02920842712f"
172−
173−[[package]]
174−name = "bytesize"
175−version = "1.1.0"
167+name = "byteorder"
168+version = "1.4.3"
176169source = "registry+https://github.com/rust-lang/crates.io-index"
177−checksum = "6c58ec36aac5066d5ca17df51b3e70279f5670a72102f5752cb7e7c856adfc70"
170+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
178171
179172[[package]]
180173name = "cc"
181−version = "1.0.72"
174+version = "1.0.67"
182175source = "registry+https://github.com/rust-lang/crates.io-index"
183−checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee"
176+checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd"
184177dependencies = [
185178 "jobserver",
186179]
@@ -191,6 +184,16 @@ version = "1.0.0"
191184source = "registry+https://github.com/rust-lang/crates.io-index"
192185checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
193186
187+[[package]]
188+name = "chrono"
189+version = "0.4.19"
190+source = "registry+https://github.com/rust-lang/crates.io-index"
191+checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
192+dependencies = [
193+ "num-integer",
194+ "num-traits",
195+]
196+
194197[[package]]
195198name = "clap"
196199version = "2.34.0"
@@ -245,9 +248,9 @@ dependencies = [
245248
246249[[package]]
247250name = "crc32fast"
248−version = "1.3.0"
251+version = "1.2.1"
249252source = "registry+https://github.com/rust-lang/crates.io-index"
250−checksum = "738c290dfaea84fc1ca15ad9c168d083b05a714e1efddd8edaab678dc28d2836"
253+checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a"
251254dependencies = [
252255 "cfg-if",
253256]
@@ -371,20 +374,11 @@ dependencies = [
371374 "regex",
372375]
373376
374−[[package]]
375−name = "fastrand"
376−version = "1.7.0"
377−source = "registry+https://github.com/rust-lang/crates.io-index"
378−checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf"
379−dependencies = [
380− "instant",
381−]
382−
383377[[package]]
384378name = "flate2"
385−version = "1.0.23"
379+version = "1.0.22"
386380source = "registry+https://github.com/rust-lang/crates.io-index"
387−checksum = "b39522e96686d38f4bc984b9198e3a0613264abaebaff2c5c918bfa6b6da09af"
381+checksum = "1e6988e897c1c9c485f43b47a529cef42fde0547f9d8d41a7062518f1d8fc53f"
388382dependencies = [
389383 "cfg-if",
390384 "crc32fast",
@@ -419,9 +413,9 @@ dependencies = [
419413
420414[[package]]
421415name = "getrandom"
422−version = "0.2.3"
416+version = "0.2.2"
423417source = "registry+https://github.com/rust-lang/crates.io-index"
424−checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753"
418+checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
425419dependencies = [
426420 "cfg-if",
427421 "libc",
@@ -430,9 +424,9 @@ dependencies = [
430424
431425[[package]]
432426name = "git-version"
433−version = "0.3.5"
427+version = "0.3.4"
434428source = "registry+https://github.com/rust-lang/crates.io-index"
435−checksum = "f6b0decc02f4636b9ccad390dcbe77b722a77efedfa393caf8379a51d5c61899"
429+checksum = "94918e83f1e01dedc2e361d00ce9487b14c58c7f40bab148026fa39d42cb41e2"
436430dependencies = [
437431 "git-version-macro",
438432 "proc-macro-hack",
@@ -440,9 +434,9 @@ dependencies = [
440434
441435[[package]]
442436name = "git-version-macro"
443−version = "0.3.5"
437+version = "0.3.4"
444438source = "registry+https://github.com/rust-lang/crates.io-index"
445−checksum = "fe69f1cbdb6e28af2bac214e943b99ce8a0a06b447d15d3e61161b0423139f3f"
439+checksum = "34a97a52fdee1870a34fa6e4b77570cba531b27d1838874fef4429a791a3d657"
446440dependencies = [
447441 "proc-macro-hack",
448442 "proc-macro2",
@@ -452,9 +446,9 @@ dependencies = [
452446
453447[[package]]
454448name = "git2"
455−version = "0.14.2"
449+version = "0.13.20"
456450source = "registry+https://github.com/rust-lang/crates.io-index"
457−checksum = "3826a6e0e2215d7a41c2bfc7c9244123969273f3476b939a226aac0ab56e9e3c"
451+checksum = "d9831e983241f8c5591ed53f17d874833e2fa82cac2625f3888c50cbfe136cba"
458452dependencies = [
459453 "bitflags",
460454 "libc",
@@ -501,15 +495,15 @@ dependencies = [
501495
502496[[package]]
503497name = "hashbrown"
504−version = "0.11.2"
498+version = "0.9.1"
505499source = "registry+https://github.com/rust-lang/crates.io-index"
506−checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
500+checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04"
507501
508502[[package]]
509503name = "hermit-abi"
510−version = "0.1.19"
504+version = "0.1.18"
511505source = "registry+https://github.com/rust-lang/crates.io-index"
512−checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
506+checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c"
513507dependencies = [
514508 "libc",
515509]
@@ -527,9 +521,9 @@ dependencies = [
527521
528522[[package]]
529523name = "indexmap"
530−version = "1.7.0"
524+version = "1.6.2"
531525source = "registry+https://github.com/rust-lang/crates.io-index"
532−checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5"
526+checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3"
533527dependencies = [
534528 "autocfg",
535529 "hashbrown",
@@ -537,39 +531,33 @@ dependencies = [
537531
538532[[package]]
539533name = "instant"
540−version = "0.1.12"
534+version = "0.1.9"
541535source = "registry+https://github.com/rust-lang/crates.io-index"
542−checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
536+checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec"
543537dependencies = [
544538 "cfg-if",
545539]
546540
547541[[package]]
548542name = "itertools"
549−version = "0.10.3"
543+version = "0.10.1"
550544source = "registry+https://github.com/rust-lang/crates.io-index"
551−checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
545+checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf"
552546dependencies = [
553547 "either",
554548]
555549
556550[[package]]
557551name = "itoa"
558−version = "0.4.8"
559−source = "registry+https://github.com/rust-lang/crates.io-index"
560−checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
561−
562−[[package]]
563−name = "itoa"
564−version = "1.0.1"
552+version = "0.4.7"
565553source = "registry+https://github.com/rust-lang/crates.io-index"
566−checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
554+checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736"
567555
568556[[package]]
569557name = "jobserver"
570−version = "0.1.24"
558+version = "0.1.22"
571559source = "registry+https://github.com/rust-lang/crates.io-index"
572−checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa"
560+checksum = "972f5ae5d1cb9c6ae417789196c803205313edde988685da5e3aae0827b9e7fd"
573561dependencies = [
574562 "libc",
575563]
@@ -580,17 +568,23 @@ version = "1.4.0"
580568source = "registry+https://github.com/rust-lang/crates.io-index"
581569checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
582570
571+[[package]]
572+name = "lazycell"
573+version = "1.3.0"
574+source = "registry+https://github.com/rust-lang/crates.io-index"
575+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
576+
583577[[package]]
584578name = "libc"
585−version = "0.2.125"
579+version = "0.2.103"
586580source = "registry+https://github.com/rust-lang/crates.io-index"
587−checksum = "5916d2ae698f6de9bfb891ad7a8d65c09d232dc58cc4ac433c7da3b2fd84bc2b"
581+checksum = "dd8f7255a17a627354f321ef0055d63b898c6fb27eff628af4d1b66b7331edf6"
588582
589583[[package]]
590584name = "libgit2-sys"
591−version = "0.13.2+1.4.2"
585+version = "0.12.21+1.1.0"
592586source = "registry+https://github.com/rust-lang/crates.io-index"
593−checksum = "3a42de9a51a5c12e00fc0e4ca6bc2ea43582fc6418488e8f615e905d886f258b"
587+checksum = "86271bacd72b2b9e854c3dcfb82efd538f15f870e4c11af66900effb462f6825"
594588dependencies = [
595589 "cc",
596590 "libc",
@@ -627,9 +621,9 @@ checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"
627621
628622[[package]]
629623name = "lock_api"
630−version = "0.4.5"
624+version = "0.4.4"
631625source = "registry+https://github.com/rust-lang/crates.io-index"
632−checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109"
626+checksum = "0382880606dff6d15c9476c416d18690b72742aa7b605bb6dd6ec9030fbf07eb"
633627dependencies = [
634628 "scopeguard",
635629]
@@ -645,34 +639,46 @@ dependencies = [
645639
646640[[package]]
647641name = "matches"
648−version = "0.1.9"
642+version = "0.1.8"
649643source = "registry+https://github.com/rust-lang/crates.io-index"
650−checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
644+checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
651645
652646[[package]]
653647name = "memchr"
654−version = "2.4.1"
648+version = "2.4.0"
649+source = "registry+https://github.com/rust-lang/crates.io-index"
650+checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc"
651+
652+[[package]]
653+name = "memoffset"
654+version = "0.6.4"
655655source = "registry+https://github.com/rust-lang/crates.io-index"
656−checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
656+checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9"
657+dependencies = [
658+ "autocfg",
659+]
657660
658661[[package]]
659662name = "miniz_oxide"
660−version = "0.5.1"
663+version = "0.4.4"
661664source = "registry+https://github.com/rust-lang/crates.io-index"
662−checksum = "d2b29bd4bc3f33391105ebee3589c19197c4271e3e5a9ec9bfe8127eeff8f082"
665+checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b"
663666dependencies = [
664667 "adler",
668+ "autocfg",
665669]
666670
667671[[package]]
668672name = "nix"
669−version = "0.24.1"
673+version = "0.23.1"
670674source = "registry+https://github.com/rust-lang/crates.io-index"
671−checksum = "8f17df307904acd05aa8e32e97bb20f2a0df1728bbc2d771ae8f9a90463441e9"
675+checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6"
672676dependencies = [
673677 "bitflags",
678+ "cc",
674679 "cfg-if",
675680 "libc",
681+ "memoffset",
676682]
677683
678684[[package]]
@@ -681,6 +687,16 @@ version = "0.3.0"
681687source = "registry+https://github.com/rust-lang/crates.io-index"
682688checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
683689
690+[[package]]
691+name = "num-integer"
692+version = "0.1.44"
693+source = "registry+https://github.com/rust-lang/crates.io-index"
694+checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
695+dependencies = [
696+ "autocfg",
697+ "num-traits",
698+]
699+
684700[[package]]
685701name = "num-traits"
686702version = "0.2.14"
@@ -692,15 +708,15 @@ dependencies = [
692708
693709[[package]]
694710name = "once_cell"
695−version = "1.10.0"
711+version = "1.9.0"
696712source = "registry+https://github.com/rust-lang/crates.io-index"
697−checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9"
713+checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5"
698714
699715[[package]]
700716name = "onig"
701−version = "6.3.1"
717+version = "6.1.1"
702718source = "registry+https://github.com/rust-lang/crates.io-index"
703−checksum = "67ddfe2c93bb389eea6e6d713306880c7f6dcc99a75b659ce145d962c861b225"
719+checksum = "30b46fd9edbc018f0be4e366c24c46db44fac49cd01c039ae85308088b089dd5"
704720dependencies = [
705721 "bitflags",
706722 "lazy_static",
@@ -710,9 +726,9 @@ dependencies = [
710726
711727[[package]]
712728name = "onig_sys"
713−version = "69.7.1"
729+version = "69.6.0"
714730source = "registry+https://github.com/rust-lang/crates.io-index"
715−checksum = "5dd3eee045c84695b53b20255bb7317063df090b68e18bfac0abb6c39cf7f33e"
731+checksum = "ed063c96cf4c0f2e5d09324409d158b38a0a85a7b90fbd68c8cad75c495d5775"
716732dependencies = [
717733 "cc",
718734 "pkg-config",
@@ -720,9 +736,9 @@ dependencies = [
720736
721737[[package]]
722738name = "parking_lot"
723−version = "0.11.2"
739+version = "0.11.1"
724740source = "registry+https://github.com/rust-lang/crates.io-index"
725−checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
741+checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb"
726742dependencies = [
727743 "instant",
728744 "lock_api",
@@ -731,9 +747,9 @@ dependencies = [
731747
732748[[package]]
733749name = "parking_lot_core"
734−version = "0.8.5"
750+version = "0.8.3"
735751source = "registry+https://github.com/rust-lang/crates.io-index"
736−checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
752+checksum = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018"
737753dependencies = [
738754 "cfg-if",
739755 "instant",
@@ -760,29 +776,35 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
760776
761777[[package]]
762778name = "pkg-config"
763−version = "0.3.24"
779+version = "0.3.19"
764780source = "registry+https://github.com/rust-lang/crates.io-index"
765−checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe"
781+checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
766782
767783[[package]]
768784name = "plist"
769−version = "1.3.1"
785+version = "1.1.0"
770786source = "registry+https://github.com/rust-lang/crates.io-index"
771−checksum = "bd39bc6cdc9355ad1dc5eeedefee696bb35c34caf21768741e81826c0bbd7225"
787+checksum = "679104537029ed2287c216bfb942bbf723f48ee98f0aef15611634173a74ef21"
772788dependencies = [
773789 "base64",
790+ "chrono",
774791 "indexmap",
775792 "line-wrap",
776793 "serde",
777− "time",
778794 "xml-rs",
779795]
780796
797+[[package]]
798+name = "ppv-lite86"
799+version = "0.2.10"
800+source = "registry+https://github.com/rust-lang/crates.io-index"
801+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
802+
781803[[package]]
782804name = "predicates"
783−version = "2.1.1"
805+version = "2.1.0"
784806source = "registry+https://github.com/rust-lang/crates.io-index"
785−checksum = "a5aab5be6e4732b473071984b3164dbbfb7a3674d30ea5ff44410b6bcd960c3c"
807+checksum = "95e5a7689e456ab905c22c2b48225bb921aba7c8dfa58440d68ba13f6222a715"
786808dependencies = [
787809 "difflib",
788810 "float-cmp",
@@ -800,67 +822,83 @@ checksum = "57e35a3326b75e49aa85f5dc6ec15b41108cf5aee58eabb1f274dd18b73c2451"
800822
801823[[package]]
802824name = "predicates-tree"
803−version = "1.0.4"
825+version = "1.0.2"
804826source = "registry+https://github.com/rust-lang/crates.io-index"
805−checksum = "338c7be2905b732ae3984a2f40032b5e94fd8f52505b186c7d4d68d193445df7"
827+checksum = "15f553275e5721409451eb85e15fd9a860a6e5ab4496eb215987502b5f5391f2"
806828dependencies = [
807829 "predicates-core",
808− "termtree",
830+ "treeline",
809831]
810832
811833[[package]]
812−name = "proc-macro-error"
813−version = "1.0.4"
834+name = "proc-macro-hack"
835+version = "0.5.19"
814836source = "registry+https://github.com/rust-lang/crates.io-index"
815−checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
837+checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
838+
839+[[package]]
840+name = "proc-macro2"
841+version = "1.0.26"
842+source = "registry+https://github.com/rust-lang/crates.io-index"
843+checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec"
816844dependencies = [
817− "proc-macro-error-attr",
818− "proc-macro2",
819− "quote",
820− "syn",
821− "version_check",
845+ "unicode-xid",
822846]
823847
824848[[package]]
825−name = "proc-macro-error-attr"
826−version = "1.0.4"
849+name = "quote"
850+version = "1.0.9"
827851source = "registry+https://github.com/rust-lang/crates.io-index"
828−checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
852+checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
829853dependencies = [
830854 "proc-macro2",
831− "quote",
832− "version_check",
833855]
834856
835857[[package]]
836−name = "proc-macro-hack"
837−version = "0.5.19"
858+name = "rand"
859+version = "0.8.3"
838860source = "registry+https://github.com/rust-lang/crates.io-index"
839−checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
861+checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e"
862+dependencies = [
863+ "libc",
864+ "rand_chacha",
865+ "rand_core",
866+ "rand_hc",
867+]
840868
841869[[package]]
842−name = "proc-macro2"
843−version = "1.0.36"
870+name = "rand_chacha"
871+version = "0.3.0"
844872source = "registry+https://github.com/rust-lang/crates.io-index"
845−checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
873+checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d"
846874dependencies = [
847− "unicode-xid",
875+ "ppv-lite86",
876+ "rand_core",
848877]
849878
850879[[package]]
851−name = "quote"
852−version = "1.0.14"
880+name = "rand_core"
881+version = "0.6.2"
853882source = "registry+https://github.com/rust-lang/crates.io-index"
854−checksum = "47aa80447ce4daf1717500037052af176af5d38cc3e571d9ec1c7353fc10c87d"
883+checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7"
855884dependencies = [
856− "proc-macro2",
885+ "getrandom",
886+]
887+
888+[[package]]
889+name = "rand_hc"
890+version = "0.3.0"
891+source = "registry+https://github.com/rust-lang/crates.io-index"
892+checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73"
893+dependencies = [
894+ "rand_core",
857895]
858896
859897[[package]]
860898name = "redox_syscall"
861−version = "0.2.10"
899+version = "0.2.8"
862900source = "registry+https://github.com/rust-lang/crates.io-index"
863−checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff"
901+checksum = "742739e41cd49414de871ea5e549afb7e2a3ac77b589bcbebe8c82fab37147fc"
864902dependencies = [
865903 "bitflags",
866904]
@@ -877,9 +915,9 @@ dependencies = [
877915
878916[[package]]
879917name = "regex"
880−version = "1.5.5"
918+version = "1.5.4"
881919source = "registry+https://github.com/rust-lang/crates.io-index"
882−checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286"
920+checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
883921dependencies = [
884922 "aho-corasick",
885923 "memchr",
@@ -888,9 +926,12 @@ dependencies = [
888926
889927[[package]]
890928name = "regex-automata"
891−version = "0.1.10"
929+version = "0.1.9"
892930source = "registry+https://github.com/rust-lang/crates.io-index"
893−checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
931+checksum = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4"
932+dependencies = [
933+ "byteorder",
934+]
894935
895936[[package]]
896937name = "regex-syntax"
@@ -907,26 +948,11 @@ dependencies = [
907948 "winapi",
908949]
909950
910−[[package]]
911−name = "rgb"
912−version = "0.8.31"
913−source = "registry+https://github.com/rust-lang/crates.io-index"
914−checksum = "9a374af9a0e5fdcdd98c1c7b64f05004f9ea2555b6c75f211daa81268a3c50f1"
915−dependencies = [
916− "bytemuck",
917−]
918−
919−[[package]]
920−name = "rustversion"
921−version = "1.0.6"
922−source = "registry+https://github.com/rust-lang/crates.io-index"
923−checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f"
924−
925951[[package]]
926952name = "ryu"
927−version = "1.0.9"
953+version = "1.0.5"
928954source = "registry+https://github.com/rust-lang/crates.io-index"
929−checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
955+checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
930956
931957[[package]]
932958name = "safemem"
@@ -951,24 +977,24 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
951977
952978[[package]]
953979name = "semver"
954−version = "1.0.7"
980+version = "1.0.4"
955981source = "registry+https://github.com/rust-lang/crates.io-index"
956−checksum = "d65bd28f48be7196d222d95b9243287f48d27aca604e08497513019ff0502cc4"
982+checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012"
957983
958984[[package]]
959985name = "serde"
960−version = "1.0.136"
986+version = "1.0.132"
961987source = "registry+https://github.com/rust-lang/crates.io-index"
962−checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789"
988+checksum = "8b9875c23cf305cd1fd7eb77234cbb705f21ea6a72c637a5c6db5fe4b8e7f008"
963989dependencies = [
964990 "serde_derive",
965991]
966992
967993[[package]]
968994name = "serde_derive"
969−version = "1.0.136"
995+version = "1.0.132"
970996source = "registry+https://github.com/rust-lang/crates.io-index"
971−checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9"
997+checksum = "ecc0db5cb2556c0e558887d9bbdcf6ac4471e83ff66cf696e5419024d1606276"
972998dependencies = [
973999 "proc-macro2",
9741000 "quote",
@@ -977,11 +1003,11 @@ dependencies = [
9771003
9781004[[package]]
9791005name = "serde_json"
980−version = "1.0.74"
1006+version = "1.0.64"
9811007source = "registry+https://github.com/rust-lang/crates.io-index"
982−checksum = "ee2bb9cd061c5865d345bb02ca49fcef1391741b672b54a0bf7b679badec3142"
1008+checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79"
9831009dependencies = [
984− "itoa 1.0.1",
1010+ "itoa",
9851011 "ryu",
9861012 "serde",
9871013]
@@ -1000,9 +1026,9 @@ dependencies = [
10001026
10011027[[package]]
10021028name = "serial_test"
1003−version = "0.6.0"
1029+version = "0.5.1"
10041030source = "registry+https://github.com/rust-lang/crates.io-index"
1005−checksum = "e5bcc41d18f7a1d50525d080fd3e953be87c4f9f1a974f3c21798ca00d54ec15"
1031+checksum = "e0bccbcf40c8938196944a3da0e133e031a33f4d6b72db3bda3cc556e361905d"
10061032dependencies = [
10071033 "lazy_static",
10081034 "parking_lot",
@@ -1011,14 +1037,12 @@ dependencies = [
10111037
10121038[[package]]
10131039name = "serial_test_derive"
1014−version = "0.6.0"
1040+version = "0.5.1"
10151041source = "registry+https://github.com/rust-lang/crates.io-index"
1016−checksum = "2881bccd7d60fb32dfa3d7b3136385312f8ad75e2674aab2852867a09790cae8"
1042+checksum = "b2acd6defeddb41eb60bb468f8825d0cfd0c2a76bc03bfd235b6a1dc4f6a1ad5"
10171043dependencies = [
1018− "proc-macro-error",
10191044 "proc-macro2",
10201045 "quote",
1021− "rustversion",
10221046 "syn",
10231047]
10241048
@@ -1030,15 +1054,15 @@ checksum = "45bb67a18fa91266cc7807181f62f9178a6873bfad7dc788c42e6430db40184f"
10301054
10311055[[package]]
10321056name = "shell-words"
1033−version = "1.1.0"
1057+version = "1.0.0"
10341058source = "registry+https://github.com/rust-lang/crates.io-index"
1035−checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
1059+checksum = "b6fa3938c99da4914afedd13bf3d79bcb6c277d1b2c398d23257a304d9e1b074"
10361060
10371061[[package]]
10381062name = "smallvec"
1039−version = "1.7.0"
1063+version = "1.6.1"
10401064source = "registry+https://github.com/rust-lang/crates.io-index"
1041−checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309"
1065+checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e"
10421066
10431067[[package]]
10441068name = "std_prelude"
@@ -1054,9 +1078,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
10541078
10551079[[package]]
10561080name = "syn"
1057−version = "1.0.85"
1081+version = "1.0.72"
10581082source = "registry+https://github.com/rust-lang/crates.io-index"
1059−checksum = "a684ac3dcd8913827e18cd09a68384ee66c1de24157e3c556c9ab16d85695fb7"
1083+checksum = "a1e8cdbefb79a9a5a65e0db8b47b723ee907b7c7f8496c76a1770b5c310bab82"
10601084dependencies = [
10611085 "proc-macro2",
10621086 "quote",
@@ -1065,9 +1089,9 @@ dependencies = [
10651089
10661090[[package]]
10671091name = "syntect"
1068−version = "5.0.0"
1092+version = "4.6.0"
10691093source = "registry+https://github.com/rust-lang/crates.io-index"
1070−checksum = "c6c454c27d9d7d9a84c7803aaa3c50cd088d2906fe3c6e42da3209aa623576a8"
1094+checksum = "8b20815bbe80ee0be06e6957450a841185fcf690fe0178f14d77a05ce2caa031"
10711095dependencies = [
10721096 "bincode",
10731097 "bitflags",
@@ -1075,23 +1099,22 @@ dependencies = [
10751099 "flate2",
10761100 "fnv",
10771101 "lazy_static",
1078− "once_cell",
1102+ "lazycell",
10791103 "onig",
10801104 "plist",
10811105 "regex-syntax",
10821106 "serde",
10831107 "serde_derive",
10841108 "serde_json",
1085− "thiserror",
10861109 "walkdir",
10871110 "yaml-rust",
10881111]
10891112
10901113[[package]]
10911114name = "sys-info"
1092−version = "0.9.1"
1115+version = "0.9.0"
10931116source = "registry+https://github.com/rust-lang/crates.io-index"
1094−checksum = "0b3a0d0aba8bf96a0e1ddfdc352fc53b3df7f39318c71854910c3c4b024ae52c"
1117+checksum = "33fcecee49339531cf6bd84ecf3ed94f9c8ef4a7e700f2a1cac9cc1ca485383a"
10951118dependencies = [
10961119 "cc",
10971120 "libc",
@@ -1099,13 +1122,13 @@ dependencies = [
10991122
11001123[[package]]
11011124name = "tempfile"
1102−version = "3.3.0"
1125+version = "3.2.0"
11031126source = "registry+https://github.com/rust-lang/crates.io-index"
1104−checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
1127+checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22"
11051128dependencies = [
11061129 "cfg-if",
1107− "fastrand",
11081130 "libc",
1131+ "rand",
11091132 "redox_syscall",
11101133 "remove_dir_all",
11111134 "winapi",
@@ -1132,20 +1155,14 @@ dependencies = [
11321155
11331156[[package]]
11341157name = "terminal_size"
1135−version = "0.1.17"
1158+version = "0.1.16"
11361159source = "registry+https://github.com/rust-lang/crates.io-index"
1137−checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
1160+checksum = "86ca8ced750734db02076f44132d802af0b33b09942331f4459dde8636fd2406"
11381161dependencies = [
11391162 "libc",
11401163 "winapi",
11411164]
11421165
1143−[[package]]
1144−name = "termtree"
1145−version = "0.2.3"
1146−source = "registry+https://github.com/rust-lang/crates.io-index"
1147−checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16"
1148−
11491166[[package]]
11501167name = "textwrap"
11511168version = "0.11.0"
@@ -1158,39 +1175,29 @@ dependencies = [
11581175
11591176[[package]]
11601177name = "thiserror"
1161−version = "1.0.31"
1178+version = "1.0.30"
11621179source = "registry+https://github.com/rust-lang/crates.io-index"
1163−checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a"
1180+checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417"
11641181dependencies = [
11651182 "thiserror-impl",
11661183]
11671184
11681185[[package]]
11691186name = "thiserror-impl"
1170−version = "1.0.31"
1187+version = "1.0.30"
11711188source = "registry+https://github.com/rust-lang/crates.io-index"
1172−checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a"
1189+checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b"
11731190dependencies = [
11741191 "proc-macro2",
11751192 "quote",
11761193 "syn",
11771194]
11781195
1179−[[package]]
1180−name = "time"
1181−version = "0.3.5"
1182−source = "registry+https://github.com/rust-lang/crates.io-index"
1183−checksum = "41effe7cfa8af36f439fac33861b66b049edc6f9a32331e2312660529c1c24ad"
1184−dependencies = [
1185− "itoa 0.4.8",
1186− "libc",
1187−]
1188−
11891196[[package]]
11901197name = "tinyvec"
1191−version = "1.5.1"
1198+version = "1.2.0"
11921199source = "registry+https://github.com/rust-lang/crates.io-index"
1193−checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2"
1200+checksum = "5b5220f05bb7de7f3f53c7c065e1199b3172696fe2db9f9c4d8ad9b4ee74c342"
11941201dependencies = [
11951202 "tinyvec_macros",
11961203]
@@ -1201,17 +1208,26 @@ version = "0.1.0"
12011208source = "registry+https://github.com/rust-lang/crates.io-index"
12021209checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
12031210
1211+[[package]]
1212+name = "treeline"
1213+version = "0.1.0"
1214+source = "registry+https://github.com/rust-lang/crates.io-index"
1215+checksum = "a7f741b240f1a48843f9b8e0444fb55fb2a4ff67293b50a9179dfd5ea67f8d41"
1216+
12041217[[package]]
12051218name = "unicode-bidi"
1206−version = "0.3.7"
1219+version = "0.3.5"
12071220source = "registry+https://github.com/rust-lang/crates.io-index"
1208−checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f"
1221+checksum = "eeb8be209bb1c96b7c177c7420d26e04eccacb0eeae6b980e35fcb74678107e0"
1222+dependencies = [
1223+ "matches",
1224+]
12091225
12101226[[package]]
12111227name = "unicode-normalization"
1212−version = "0.1.19"
1228+version = "0.1.17"
12131229source = "registry+https://github.com/rust-lang/crates.io-index"
1214−checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
1230+checksum = "07fbfce1c8a97d547e8b5334978438d9d6ec8c20e38f56d4a4374d181493eaef"
12151231dependencies = [
12161232 "tinyvec",
12171233]
@@ -1242,9 +1258,9 @@ dependencies = [
12421258
12431259[[package]]
12441260name = "vcpkg"
1245−version = "0.2.15"
1261+version = "0.2.12"
12461262source = "registry+https://github.com/rust-lang/crates.io-index"
1247−checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
1263+checksum = "cbdbff6266a24120518560b5dc983096efb98462e51d0d68169895b237be3e5d"
12481264
12491265[[package]]
12501266name = "vec_map"
@@ -1252,12 +1268,6 @@ version = "0.8.2"
12521268source = "registry+https://github.com/rust-lang/crates.io-index"
12531269checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
12541270
1255−[[package]]
1256−name = "version_check"
1257−version = "0.9.4"
1258−source = "registry+https://github.com/rust-lang/crates.io-index"
1259−checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
1260−
12611271[[package]]
12621272name = "wait-timeout"
12631273version = "0.2.0"
@@ -1326,9 +1336,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
13261336
13271337[[package]]
13281338name = "xml-rs"
1329−version = "0.8.4"
1339+version = "0.8.3"
13301340source = "registry+https://github.com/rust-lang/crates.io-index"
1331−checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3"
1341+checksum = "b07db065a5cf61a7e4ba64f29e67db906fb1787316516c4e6e5ff0fea1efcd8a"
13321342
13331343[[package]]
13341344name = "yaml-rust"
Cargo.toml+15−15
@@ -6,7 +6,7 @@ homepage = "https://github.com/sharkdp/bat"
66license = "MIT/Apache-2.0"
77name = "bat"
88repository = "https://github.com/sharkdp/bat"
9−version = "0.21.0"
9+version = "0.18.3"
1010exclude = ["assets/syntaxes/*", "assets/themes/*"]
1111build = "build.rs"
1212edition = '2018'
@@ -33,7 +33,8 @@ minimal-application = [
3333]
3434git = ["git2"] # Support indicating git modifications
3535paging = ["shell-words", "grep-cli"] # Support applying a pager on the output
36−build-assets = ["syntect/yaml-load", "syntect/plist-load", "regex", "walkdir"]
36+# Add "syntect/plist-load" when https://github.com/trishume/syntect/pull/345 reaches us
37+build-assets = ["syntect/yaml-load", "syntect/dump-create", "regex", "walkdir"]
3738
3839# You need to use one of these if you depend on bat as a library:
3940regex-onig = ["syntect/regex-onig"] # Use the "oniguruma" regex engine
@@ -42,16 +43,16 @@ regex-fancy = ["syntect/regex-fancy"] # Use the rust-only "fancy-regex" engine
4243[dependencies]
4344atty = { version = "0.2.14", optional = true }
4445ansi_term = "^0.12.1"
45−ansi_colours = "^1.1"
46+ansi_colours = "^1.0"
4647bincode = "1.0"
4748console = "0.15.0"
4849flate2 = "1.0"
49−once_cell = "1.10"
50+once_cell = "1.9"
5051thiserror = "1.0"
5152wild = { version = "2.0", optional = true }
5253content_inspector = "0.2.4"
5354encoding = "0.2"
54−shell-words = { version = "1.1.0", optional = true }
55+shell-words = { version = "1.0.0", optional = true }
5556unicode-width = "0.1.9"
5657globset = "0.4"
5758serde = { version = "1.0", features = ["derive"] }
@@ -59,20 +60,19 @@ serde_yaml = "0.8"
5960semver = "1.0"
6061path_abs = { version = "0.5", default-features = false }
6162clircle = "0.3"
62−bugreport = { version = "0.5.0", optional = true }
63+bugreport = { version = "0.4", optional = true }
6364dirs-next = { version = "2.0.0", optional = true }
6465grep-cli = { version = "0.1.6", optional = true }
65−regex = { version = "1.5.5", optional = true }
66+regex = { version = "1.0", optional = true }
6667walkdir = { version = "2.0", optional = true }
67−bytesize = { version = "1.1.0" }
6868
6969[dependencies.git2]
70−version = "0.14"
70+version = "0.13"
7171optional = true
7272default-features = false
7373
7474[dependencies.syntect]
75−version = "5.0.0"
75+version = "4.6.0"
7676default-features = false
7777features = ["parsing"]
7878
@@ -83,14 +83,14 @@ default-features = false
8383features = ["suggestions", "color", "wrap_help"]
8484
8585[dev-dependencies]
86−assert_cmd = "2.0.4"
87−serial_test = "0.6.0"
88−predicates = "2.1.1"
86+assert_cmd = "2.0.2"
87+serial_test = "0.5.1"
88+predicates = "2.1.0"
8989wait-timeout = "0.2.0"
90−tempfile = "3.3.0"
90+tempfile = "3.2.0"
9191
9292[target.'cfg(unix)'.dev-dependencies]
93−nix = { version = "0.24.1", default-features = false, features = ["term"] }
93+nix = "0.23.1"
9494
9595[build-dependencies]
9696clap = { version = "2.34", optional = true }
README.md+3−35
@@ -19,19 +19,6 @@
1919 [<a href="doc/README-ru.md">Русский</a>]
2020</p>
2121
22−### Sponsors
23−
24−A special *thank you* goes to our biggest <a href="doc/sponsors.md">sponsors</a>:<br>
25−<a href="https://workos.com/?utm_campaign=github_repo&utm_medium=referral&utm_content=bat&utm_source=github">
26− <img src="doc/sponsors/workos-logo-white-bg.svg" width="200" alt="WorkOS">
27− <br>
28− <strong>Your app, enterprise-ready.</strong>
29− <br>
30− <sub>Start selling to enterprise customers with just a few lines of code.</sub>
31− <br>
32− <sup>Add Single Sign-On (and more) in minutes instead of months.</sup>
33−</a>
34−
3522### Syntax highlighting
3623
3724`bat` supports syntax highlighting for a large number of programming and markup
@@ -171,7 +158,7 @@ You can combine `bat` with `git diff` to view lines around code changes with pro
171158highlighting:
172159```bash
173160batdiff() {
174− git diff --name-only --relative --diff-filter=d | xargs bat --diff
161+ git diff --name-only --diff-filter=d | xargs bat --diff
175162}
176163```
177164If you prefer to use this as a separate tool, check out `batdiff` in [`bat-extras`](https://github.com/eth-p/bat-extras).
@@ -212,24 +199,6 @@ Also, note that this will [not work](https://github.com/sharkdp/bat/issues/1145)
212199
213200The [`prettybat`](https://github.com/eth-p/bat-extras/blob/master/doc/prettybat.md) script is a wrapper that will format code and print it with `bat`.
214201
215−#### Highlighting `--help` messages
216−
217−You can use `bat` to colorize help text: `$ cp --help | bat -plhelp`
218−
219−You can also use a wrapper around this:
220−
221−```bash
222−# in your .bashrc/.zshrc/*rc
223−alias bathelp='bat --plain --language=help'
224−help() {
225− "$@" --help 2>&1 | bathelp
226−}
227−```
228−
229−Then you can do `$ help cp` or `$ help git commit`.
230−
231−Please report any issues with the help syntax in [this repository](https://github.com/victor-gp/cmd-help-sublime-syntax).
232−
233202
234203## Installation
235204
@@ -546,9 +515,8 @@ command line option. The option takes an argument of the form `pattern:syntax` w
546515the absolute file path. The `syntax` part is the full name of a supported language
547516(use `bat --list-languages` for an overview).
548517
549−**Note:** You probably want to use this option as [an entry in `bat`'s configuration file](#configuration-file)
550−for persistence instead of passing it on the command line as a one-off. Generally
551−you'd just use `-l` if you want to manually specify a language for a file.
518+Note: You probably want to use this option as an entry in `bat`s configuration file instead
519+of passing it on the command line (see below).
552520
553521Example: To use "INI" syntax highlighting for all files with a `.conf` file extension, use
554522```bash
assets/acknowledgements.bin

Binary file not shown.

assets/completions/_bat.ps1.in+1−1
@@ -37,7 +37,7 @@ Register-ArgumentCompleter -Native -CommandName '{{PROJECT_EXECUTABLE}}' -Script
3737 [CompletionResult]::new('-m', 'm', [CompletionResultType]::ParameterName, 'Use the specified syntax for files matching the glob pattern (''*.cpp:C++'').')
3838 [CompletionResult]::new('--map-syntax', 'map-syntax', [CompletionResultType]::ParameterName, 'Use the specified syntax for files matching the glob pattern (''*.cpp:C++'').')
3939 [CompletionResult]::new('--theme', 'theme', [CompletionResultType]::ParameterName, 'Set the color theme for syntax highlighting.')
40− [CompletionResult]::new('--style', 'style', [CompletionResultType]::ParameterName, 'Comma-separated list of style elements to display (*default*, auto, full, plain, changes, header, header-filename, header-filesize, grid, rule, numbers, snip).')
40+ [CompletionResult]::new('--style', 'style', [CompletionResultType]::ParameterName, 'Comma-separated list of style elements to display (*auto*, full, plain, changes, header, grid, rule, numbers, snip).')
4141 [CompletionResult]::new('-r', 'r', [CompletionResultType]::ParameterName, 'Only print the lines from N to M.')
4242 [CompletionResult]::new('--line-range', 'line-range', [CompletionResultType]::ParameterName, 'Only print the lines from N to M.')
4343 [CompletionResult]::new('-A', 'A', [CompletionResultType]::ParameterName, 'Show non-printable characters (space, tab, newline, ..).')
assets/completions/bat.bash.in+2−15
@@ -2,22 +2,9 @@
22
33# Requires https://github.com/scop/bash-completion
44
5−# Macs have bash3 for which the bash-completion package doesn't include
6−# _init_completion. This is a minimal version of that function.
7−__bat_init_completion()
8−{
9− COMPREPLY=()
10− _get_comp_words_by_ref "$@" cur prev words cword
11−}
12−
135_bat() {
14− local cur prev words cword split=false
15− if declare -F _init_completion >/dev/null 2>&1; then
16− _init_completion -s || return 0
17− else
18− __bat_init_completion -n "=" || return 0
19− _split_longopt && split=true
20− fi
6+ local cur prev words cword split
7+ _init_completion -s || return 0
218
229 if [[ ${words[1]-} == cache ]]; then
2310 case $prev in
assets/completions/bat.fish.in+1−1
@@ -56,7 +56,7 @@ complete -c {{PROJECT_EXECUTABLE}} -s P -d "Disable paging. Alias for '--paging=
5656
5757complete -c {{PROJECT_EXECUTABLE}} -s A -l show-all -d "Show non-printable characters like space/tab/newline" -n "not __fish_seen_subcommand_from cache"
5858
59−complete -c {{PROJECT_EXECUTABLE}} -l style -xka "default auto full plain changes header header-filename header-filesize grid rule numbers snip" -d "Comma-separated list of style elements or presets to display with file contents" -n "not __fish_seen_subcommand_from cache"
59+complete -c {{PROJECT_EXECUTABLE}} -l style -xka "auto full plain changes header grid rule numbers snip" -d "Comma-separated list of style elements or presets to display with file contents" -n "not __fish_seen_subcommand_from cache"
6060
6161complete -c {{PROJECT_EXECUTABLE}} -l tabs -x -d "<T> Set the tab width to T spaces (width of 0 passes tabs through directly)" -n "not __fish_seen_subcommand_from cache"
6262
assets/completions/bat.zsh.in+1−1
@@ -75,7 +75,7 @@ _{{PROJECT_EXECUTABLE}}_main() {
7575 ;;
7676
7777 style)
78− _values -s , 'style' default auto full plain changes header header-filename header-filesize grid rule numbers snip
78+ _values -s , 'style' auto full plain changes header grid rule numbers snip
7979 ;;
8080 esac
8181}
assets/manual/bat.1.in+1−4
@@ -118,8 +118,6 @@ which pager is used, see the '\-\-pager' option. Possible values: *auto*, never,
118118Determine which pager is used. This option will override the PAGER and BAT_PAGER
119119environment variables. The default pager is 'less'. To control when the pager is used, see
120120the '\-\-paging' option. Example: '\-\-pager "less \fB\-RF\fR"'.
121−
122−Note: By default, if the pager is set to 'less' (and no command-line options are specified), 'bat' will pass the following command line options to the pager: '-R'/'--RAW-CONTROL-CHARS', '-F'/'--quit-if-one-screen' and '-X'/'--no-init'. The last option ('-X') is only used for 'less' versions older than 530. The '-R' option is needed to interpret ANSI colors correctly. The second option ('-F') instructs less to exit immediately if the output size is smaller than the vertical size of the terminal. This is convenient for small files because you do not have to press 'q' to quit the pager. The third option ('-X') is needed to fix a bug with the '--quit-if-one-screen' feature in old versions of 'less'. Unfortunately, it also breaks mouse-wheel support in 'less'. If you want to enable mouse-wheel scrolling on older versions of 'less', you can pass just '-R' (as in the example above, this will disable the quit-if-one-screen feature). For less 530 or newer, it should work out of the box.
123121.HP
124122\fB\-m\fR, \fB\-\-map\-syntax\fR <glob-pattern:syntax-name>...
125123.IP
@@ -146,8 +144,7 @@ Configure which elements (line numbers, file headers, grid borders, Git modifica
146144of components to display (e.g. 'numbers,changes,grid') or a pre\-defined style ('full').
147145To set a default style, add the '\-\-style=".."' option to the configuration file or
148146export the BAT_STYLE environment variable (e.g.: export BAT_STYLE=".."). Possible
149−values: *default*, full, auto, plain, changes, header, header-filename, header-filesize, grid,
150−rule, numbers, snip.
147+values: *full*, auto, plain, changes, header, grid, rule, numbers, snip.
151148.HP
152149\fB\-r\fR, \fB\-\-line\-range\fR <N:M>...
153150.IP
assets/syntaxes.bin

Binary file not shown.

assets/syntaxes/02_Extra/Fish+1−1

Submodule changed.

assets/syntaxes/02_Extra/GLSL+1−1

Submodule changed.

assets/syntaxes/02_Extra/GraphQL+1−1

Submodule changed.

assets/syntaxes/02_Extra/INI.sublime-syntax+2−2
@@ -5,8 +5,8 @@ name: INI
55file_extensions:
66 - ini
77 - INI
8− - "inf"
9− - "INF"
8+ - inf
9+ - INF
1010 - reg
1111 - REG
1212 - lng
assets/syntaxes/02_Extra/Nginx+1−1

Submodule changed.

assets/syntaxes/02_Extra/Stylus.sublime-syntax+2−2
@@ -197,7 +197,7 @@ contexts:
197197 scope: entity.other.attribute-name.stylus
198198 - match: |-
199199 (?x) # multi-line regex definition mode
200− (?<=^|;|{)\s* # starts after beginning of line, '{' or ';''
200+ (?<=^|;|{)\s* # starts after begining of line, '{' or ';''
201201 (?= # lookahead for
202202 (
203203 [a-zA-Z0-9_-] # then a letter
@@ -207,7 +207,7 @@ contexts:
207207 (/\*.*?\*/) # comment
208208 )+
209209
210− \s*[:\s]\s* # value is separated by colon or space
210+ \s*[:\s]\s* # value is separted by colon or space
211211
212212 (?!(\s*\{)) # if there are only spaces afterwards
213213
assets/syntaxes/02_Extra/SublimeJQdeleted−1

Submodule changed.

assets/syntaxes/02_Extra/TOML+1−1

Submodule changed.

assets/syntaxes/02_Extra/VimL+1−1

Submodule changed.

assets/syntaxes/02_Extra/Zig+1−1

Submodule changed.

assets/syntaxes/02_Extra/cmd-helpdeleted−1

Submodule changed.

assets/syntaxes/02_Extra/log.sublime-syntax+6−30
@@ -6,7 +6,6 @@ file_extensions:
66scope: text.log
77variables:
88 ipv4_part: (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
9− hours_minutes_seconds: (?:[01]\d|2[0-3]):(?:[0-5]\d):(?:[0-5]\d)
109contexts:
1110 main:
1211 - match: (\w+)(=)
@@ -18,10 +17,11 @@ contexts:
1817 captures:
1918 1: punctuation.definition.string.begin.log
2019 3: punctuation.definition.string.end.log
21− - match: \"
20+ - match: (")([^"]*)(")
21+ scope: string.quoted.double.log
2222 captures:
2323 1: punctuation.definition.string.begin.log
24− push: double_quoted_string
24+ 3: punctuation.definition.string.end.log
2525 - include: dates
2626 - include: ip_addresses
2727 - include: numbers
@@ -29,34 +29,19 @@ contexts:
2929 scope: markup.error.log
3030 - match: \b(?i:warn(?:ing)?)\b
3131 scope: markup.warning.log
32− - match: \b(?i:debug)\b
33− scope: markup.info.log
3432 #- include: scope:text.html.markdown#autolink-inet
3533 - match: \b\w+:/{2,3}
3634 scope: markup.underline.link.scheme.log
3735 push: url-host
3836 dates:
39− - match: \b\d{4}-\d{2}-\d{2}(?=\b|T)
37+ - match: \b\d{4}-\d{2}-\d{2}\b
4038 scope: meta.date.log meta.number.integer.decimal.log constant.numeric.value.log
41− push: maybe_date_time_separator
42− - match: \b\d{4}/\d{2}/\d{2}(?=\b|T)
39+ - match: \b\d{4}/\d{2}/\d{2}\b
4340 scope: meta.date.log meta.number.integer.decimal.log constant.numeric.value.log
44− push: maybe_date_time_separator
45− - match: \b(?={{hours_minutes_seconds}})
46− push: time
47− time:
48− - match: (?:{{hours_minutes_seconds}})(?:(\.)\d{3})?\b
41+ - match: \b(?:[01]\d|2[0-3]):(?:[0-5]\d):(?:[0-5]\d)(?:(\.)\d{3})?\b
4942 scope: meta.time.log meta.number.integer.decimal.log constant.numeric.value.log
5043 captures:
5144 1: punctuation.separator.decimal.log
52− - match: ''
53− pop: true
54− maybe_date_time_separator:
55− - match: T(?={{hours_minutes_seconds}})
56− scope: meta.date.log meta.time.log keyword.other.log
57− set: time
58− - match: ''
59− pop: true
6045 ip_addresses:
6146 - match: \b(?=(?:{{ipv4_part}}\.){3}{{ipv4_part}}\b)
6247 push:
@@ -129,12 +114,3 @@ contexts:
129114 scope: markup.underline.link.path.log
130115 - match: ''
131116 pop: true
132− double_quoted_string:
133− - meta_scope: string.quoted.double.log
134− - match: \\"
135− scope: constant.character.escape.log
136− - match: \\n
137− scope: constant.character.escape.log
138− - match: \"
139− scope: punctuation.definition.string.end.log
140− pop: true
assets/themes.bin

Binary file not shown.

doc/README-ja.md+2−2
@@ -181,7 +181,7 @@ man 2 select
181181
182182## インストール
183183
184−[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg)](https://repology.org/project/bat-cat/versions)
184+[![Packaging status](https://repology.org/badge/vertical-allrepos/bat.svg)](https://repology.org/project/bat/versions)
185185
186186### On Ubuntu (`apt` を使用)
187187*... や他のDebianベースのLinuxディストリビューション*
@@ -366,7 +366,7 @@ ansible-galaxy install aeimer.install_bat
366366### From source
367367
368368
369−`bat` をソースからビルドしたいならば、Rust 1.51 以上の環境が必要です。
369+`bat` をソースからビルドしたいならば、Rust 1.36 以上の環境が必要です。
370370`cargo` を使用してビルドすることができます:
371371
372372```bash
doc/README-ko.md+1−1
@@ -222,7 +222,7 @@ man 2 select
222222`bat`은 [Ubuntu](https://packages.ubuntu.com/eoan/bat)와
223223[Debian](https://packages.debian.org/sid/bat) 패키지 배포 과정에 도입되는 중이며,
224224Eoan 19.10 버전의 Ubuntu에서부터 제공됩니다.
225−현재 Debian에서는 불안정한 "Sid" 브랜치에서만 `bat`이 제공됩니다.
225+현재 Debain에서는 불안정한 "Sid" 브랜치에서만 `bat`이 제공됩니다.
226226
227227만약 충분히 최신 버전의 Ubuntu/Debian이 설치되어 있다면 간단히 다음을 실행하세요:
228228
doc/README-ru.md+1−1
@@ -160,7 +160,7 @@ man 2 select
160160
161161## Установка
162162
163−[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg)](https://repology.org/project/bat-cat/versions)
163+[![Packaging status](https://repology.org/badge/vertical-allrepos/bat.svg)](https://repology.org/project/bat/versions)
164164
165165### Ubuntu (с помощью `apt`)
166166*... и другие дистрибутивы основанные на Debian.*
doc/release-checklist.md+19−33
@@ -1,5 +1,16 @@
11# Release checklist
22
3+## Dependencies
4+
5+See this page for a good overview: https://deps.rs/repo/github/sharkdp/bat
6+
7+- [ ] Optional: update dependencies with `cargo update`. This is also done by
8+ dependabot, so it is not strictly necessary.
9+- [ ] Install [cargo-outdated](https://crates.io/crates/cargo-outdated). Check
10+ for outdated dependencies with `cargo outdated --root-deps-only` and
11+ decide for each of them whether we want to (manually) upgrade. This will
12+ require changes to `Cargo.toml`.
13+
314## Version bump
415
516- [ ] Update version in `Cargo.toml`. Run `cargo build` to update `Cargo.lock`.
@@ -7,38 +18,36 @@
718- [ ] Find the current min. supported Rust version by running
819 `grep '^\s*MIN_SUPPORTED_RUST_VERSION' .github/workflows/CICD.yml`.
920- [ ] Update the version and the min. supported Rust version in `README.md` and
10− `doc/README-*.md`. Check with
11− `git grep -i -e 'rust.*1\.' -e '1\..*rust' | grep README | grep -v tests/`.
12−- [ ] Update `CHANGELOG.md`. Introduce a section for the new release.
21+ `doc/README-*.md`.
22+- [ ] Update `CHANGELOG.md`. Introduce a section for the new release and
23+ prepare a new (empty) "unreleased" section at the top.
1324
1425## Update syntaxes and themes (build assets)
1526
16−- [ ] Install the latest master version (`cargo clean && cargo install --locked -f --path .`) and make
27+- [ ] Install the latest master version (`cargo install -f --path .`) and make
1728 sure that it is available on the `PATH` (`bat --version` should show the
1829 new version).
1930- [ ] Run `assets/create.sh` and check in the binary asset files.
2031
2132## Documentation
2233
23−- [ ] Review `-h`, `--help`, and the `man` page. All of these are shown in
24− the output of the CI job called *Documentation*, so look there.
25− The CI workflow corresponding to the tip of the master branch is a good place to look.
34+- [ ] Review the `-h` and `--help` texts
35+- [ ] Review the `man` page
2636
2737## Pre-release checks
2838
2939- [ ] Push all changes and wait for CI to succeed (before continuing with the
3040 next section).
3141- [ ] Optional: manually test the new features and command-line options. To do
32− this, install the latest `bat` version again (to include the new syntaxes
42+ this, install the latest `bat` version again (to include the new synaxes
3343 and themes).
34−- [ ] Run `cargo publish --dry-run` to make sure that it will
44+- [ ] Run `cargo publish --dry-run --allow-dirty` to make sure that it will
3545 succeed later (after creating the GitHub release).
3646
3747## Release
3848
3949- [ ] Create a tag and push it: `git tag vX.Y.Z; git push origin tag vX.Y.Z`.
4050 This will trigger the deployment via GitHub Actions.
41− REMINDER: If your `origin` is a fork, don't forget to push to e.g. `upstream` instead!
4251- [ ] Go to https://github.com/sharkdp/bat/releases/new to create the new
4352 release. Select the new tag and also use it as the release title. For the
4453 release notes, copy the corresponding section from `CHANGELOG.md` and
@@ -48,26 +57,3 @@
4857 appear when the CI run for the Git tag has finished).
4958- [ ] Publish to crates.io by running `cargo publish` in a *clean* repository.
5059 The safest way to do this is to clone a fresh copy.
51−
52−## Post-release
53−
54−- [ ] Prepare a new "unreleased" section at the top of `CHANGELOG.md`.
55− Put this at the top:
56−
57−```
58−# unreleased
59−
60−## Features
61−
62−## Bugfixes
63−
64−## Other
65−
66−## Syntaxes
67−
68−## Themes
69−
70−## `bat` as a library
71−
72−
73−```
doc/sponsors.mddeleted−14
@@ -1,14 +0,0 @@
1−## Sponsors
2−
3−`bat` development is sponsored by many individuals and companies. Thank you very much!
4−
5−Please note, that being sponsored does not affect the individuality of the `bat`
6−project or affect the maintainers' actions in any way.
7−We remain impartial and continue to assess pull requests solely on merit - the
8−features added, bugs solved, and effect on the overall complexity of the code.
9−No issue will have a different priority based on sponsorship status of the
10−reporter.
11−
12−Contributions from anybody are most welcomed, please see our [`CONTRIBUTING.md`](../CONTRIBUTING.md) guide.
13−
14−If you want to see our biggest sponsors, check the top of [`README.md`](../README.md#sponsors).
doc/sponsors/workos-logo-white-bg.svgdeleted−11
@@ -1,11 +0,0 @@
1−<svg width="1354" height="420" viewBox="0 0 1354 420" fill="none" xmlns="http://www.w3.org/2000/svg">
2−<rect width="1354" height="420" rx="20" fill="white"/>
3−<path d="M434.751 133.122H466.637L489.595 227.729C493.852 245.585 494.697 256.219 494.697 256.219H495.128C495.128 256.219 496.61 245.808 500.867 227.729L522.757 133.122H558.9L582.066 227.729C586.53 246.223 587.598 256.219 587.598 256.219H588.236C588.236 256.219 588.666 246.223 592.907 227.729L615.02 133.122H646.907L606.523 288.313H571.017L546.576 194.344C541.474 173.936 541.044 164.801 541.044 164.801H540.614C540.614 164.801 540.183 173.936 535.512 194.344L512.553 288.313H475.996L434.751 133.122Z" fill="black"/>
4−<path d="M641.583 231.934C641.583 196.428 664.541 173.47 699.202 173.47C733.639 173.47 756.597 196.428 756.597 231.934C756.597 267.647 733.639 290.828 699.202 290.828C664.557 290.812 641.583 267.647 641.583 231.934ZM726.832 231.934C726.832 208.976 715.783 195.998 699.202 195.998C681.346 195.998 671.349 210.458 671.349 231.934C671.349 255.323 682.398 268.284 699.202 268.284C717.058 268.284 726.832 253.824 726.832 231.934Z" fill="black"/>
5−<path d="M770.836 175.21H799.103V196.048H799.741C804.635 185.207 816.322 174.365 836.299 174.365C839.695 174.365 841.831 174.796 843.314 175.21V203.478H842.469C842.469 203.478 839.918 202.633 832.903 202.633C811.013 202.633 799.103 215.594 799.103 239.828V288.295H770.836V175.21Z" fill="black"/>
6−<path d="M856.5 133.122H884.767V182.865C884.767 212.2 884.336 217.509 884.336 217.509H884.767L926.857 175.212H962.139L912.843 224.11L970.031 288.313H936.646L895.401 241.536L884.767 251.946V288.297H856.5V133.122Z" fill="black"/>
7−<path d="M970.444 211.285C970.444 163.455 1000.21 131.569 1044.85 131.569C1089.49 131.569 1119.26 163.455 1119.26 211.285C1119.26 259.114 1089.49 291.001 1044.85 291.001C1000.21 291.001 970.444 259.114 970.444 211.285ZM1088.42 211.285C1088.42 178.761 1071 156.855 1044.84 156.855C1018.67 156.855 1001.26 178.761 1001.26 211.285C1001.26 243.809 1018.69 265.715 1044.84 265.715C1070.98 265.715 1088.42 243.809 1088.42 211.285Z" fill="black"/>
8−<path d="M1130.08 236.656H1162.4C1162.4 254.943 1174.95 265.146 1194.08 265.146C1210.23 265.146 1221.29 257.063 1221.29 245.584C1221.29 232.622 1212.79 229.21 1185.79 223.901C1161.12 219.007 1134.98 210.716 1134.98 178.399C1134.98 151.408 1157.93 131 1193.01 131C1229.57 131 1252.11 150.132 1252.11 179.037H1219.79C1219.79 165.007 1208.95 156.286 1193.01 156.286C1176.86 156.286 1166.86 164.146 1166.86 175.625C1166.86 187.742 1173.88 192.413 1195.56 196.878C1227.65 203.685 1254.02 207.288 1254.02 243.001C1254.02 271.3 1229.36 290.432 1193.01 290.432C1156.02 290.432 1130.08 268.957 1130.08 236.656Z" fill="black"/>
9−<path d="M100 210C100 214.824 101.269 219.647 103.723 223.793L148.231 300.878C152.8 308.747 159.739 315.178 168.369 318.055C185.377 323.724 202.977 316.447 211.354 301.893L222.1 283.278L179.708 210L224.47 132.408L235.216 113.792C238.431 108.208 242.747 103.638 247.824 100H243.17H178.777C166.677 100 155.508 106.431 149.5 116.923L103.723 196.208C101.269 200.354 100 205.177 100 210Z" fill="#6363F1"/>
10−<path d="M353.847 210C353.847 205.177 352.578 200.353 350.124 196.207L305.024 118.107C296.647 103.638 279.047 96.3608 262.039 101.945C253.409 104.822 246.47 111.253 241.901 119.122L231.747 136.638L274.139 210L229.378 287.592L218.632 306.208C215.416 311.708 211.101 316.362 206.024 320H210.678H275.07C287.17 320 298.34 313.569 304.347 303.077L350.124 223.792C352.578 219.646 353.847 214.823 353.847 210Z" fill="#6363F1"/>
11−</svg>
rustfmt.tomldeleted−1
@@ -1 +0,0 @@
1−# Defaults are used
src/assets.rs+6−75
@@ -43,9 +43,8 @@ pub struct SyntaxReferenceInSet<'a> {
4343 pub syntax_set: &'a SyntaxSet,
4444}
4545
46−/// Lazy-loaded syntaxes are already compressed, and we don't want to compress
47−/// already compressed data.
48−pub(crate) const COMPRESS_SYNTAXES: bool = false;
46+/// Compress for size of ~700 kB instead of ~4600 kB at the cost of ~30% longer deserialization time
47+pub(crate) const COMPRESS_SYNTAXES: bool = true;
4948
5049/// We don't want to compress our [LazyThemeSet] since the lazy-loaded themes
5150/// within it are already compressed, and compressing another time just makes
@@ -69,57 +68,10 @@ impl HighlightingAssets {
6968 }
7069 }
7170
72− /// The default theme.
73− ///
74− /// ### Windows and Linux
75− ///
76− /// Windows and most Linux distributions has a dark terminal theme by
77− /// default. On these platforms, this function always returns a theme that
78− /// looks good on a dark background.
79− ///
80− /// ### macOS
81− ///
82− /// On macOS the default terminal background is light, but it is common that
83− /// Dark Mode is active, which makes the terminal background dark. On this
84− /// platform, the default theme depends on
85− /// ```bash
86− /// defaults read -globalDomain AppleInterfaceStyle
87− /// ````
88− /// To avoid the overhead of the check on macOS, simply specify a theme
89− /// explicitly via `--theme`, `BAT_THEME`, or `~/.config/bat`.
90− ///
91− /// See <https://github.com/sharkdp/bat/issues/1746> and
92− /// <https://github.com/sharkdp/bat/issues/1928> for more context.
9371 pub fn default_theme() -> &'static str {
94− #[cfg(not(target_os = "macos"))]
95− {
96− Self::default_dark_theme()
97− }
98− #[cfg(target_os = "macos")]
99− {
100− if macos_dark_mode_active() {
101− Self::default_dark_theme()
102− } else {
103− Self::default_light_theme()
104− }
105− }
106− }
107−
108− /**
109− * The default theme that looks good on a dark background.
110− */
111− fn default_dark_theme() -> &'static str {
11272 "Monokai Extended"
11373 }
11474
115− /**
116− * The default theme that looks good on a light background.
117− */
118− #[cfg(target_os = "macos")]
119− fn default_light_theme() -> &'static str {
120− "Monokai Extended Light"
121− }
122−
12375 pub fn from_cache(cache_path: &Path) -> Result<Self> {
12476 Ok(HighlightingAssets::new(
12577 SerializedSyntaxSet::FromFile(cache_path.join("syntaxes.bin")),
@@ -138,8 +90,7 @@ impl HighlightingAssets {
13890 self.fallback_theme = Some(theme);
13991 }
14092
141− /// Return the collection of syntect syntax definitions.
142− pub fn get_syntax_set(&self) -> Result<&SyntaxSet> {
93+ fn get_syntax_set(&self) -> Result<&SyntaxSet> {
14394 self.syntax_set_cell
14495 .get_or_try_init(|| self.serialized_syntax_set.deserialize())
14596 }
@@ -235,8 +186,7 @@ impl HighlightingAssets {
235186 }
236187 }
237188
238− /// Look up a syntect theme by name.
239− pub fn get_theme(&self, theme: &str) -> &Theme {
189+ pub(crate) fn get_theme(&self, theme: &str) -> &Theme {
240190 match self.get_theme_set().get(theme) {
241191 Some(theme) => theme,
242192 None => {
@@ -399,16 +349,6 @@ fn asset_from_cache<T: serde::de::DeserializeOwned>(
399349 .map_err(|_| format!("Could not parse cached {}", description).into())
400350}
401351
402−#[cfg(target_os = "macos")]
403−fn macos_dark_mode_active() -> bool {
404− let mut defaults_cmd = std::process::Command::new("defaults");
405− defaults_cmd.args(&["read", "-globalDomain", "AppleInterfaceStyle"]);
406− match defaults_cmd.output() {
407− Ok(output) => output.stdout == b"Dark\n",
408− Err(_) => true,
409− }
410−}
411−
412352#[cfg(test)]
413353mod tests {
414354 use super::*;
@@ -639,22 +579,13 @@ mod tests {
639579 }
640580
641581 #[test]
642− fn syntax_detection_is_case_insensitive() {
582+ fn syntax_detection_is_case_sensitive() {
643583 let mut test = SyntaxDetectionTest::new();
644584
645− assert_eq!(test.syntax_for_file("README.md"), "Markdown");
646− assert_eq!(test.syntax_for_file("README.mD"), "Markdown");
647− assert_eq!(test.syntax_for_file("README.Md"), "Markdown");
648− assert_eq!(test.syntax_for_file("README.MD"), "Markdown");
649−
650− // Adding a mapping for "MD" in addition to "md" should not break the mapping
585+ assert_ne!(test.syntax_for_file("README.MD"), "Markdown");
651586 test.syntax_mapping
652587 .insert("*.MD", MappingTarget::MapTo("Markdown"))
653588 .ok();
654−
655− assert_eq!(test.syntax_for_file("README.md"), "Markdown");
656− assert_eq!(test.syntax_for_file("README.mD"), "Markdown");
657− assert_eq!(test.syntax_for_file("README.Md"), "Markdown");
658589 assert_eq!(test.syntax_for_file("README.MD"), "Markdown");
659590 }
660591
src/assets/build_assets/acknowledgements.rs−3
@@ -104,9 +104,6 @@ fn license_not_needed_in_acknowledgements(license_text: &str) -> bool {
104104 // Public domain
105105 "This is free and unencumbered software released into the public domain.",
106106
107− // Public domain with stronger wording than above
108− "DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE",
109−
110107 // Special license of assets/syntaxes/01_Packages/LICENSE
111108 "Permission to copy, use, modify, sell and distribute this software is granted. This software is provided \"as is\" without express or implied warranty, and with no claim as to its suitability for any purpose."
112109 ];
src/bin/bat/app.rs+1−1
@@ -322,7 +322,7 @@ impl App {
322322 .collect::<Vec<_>>()
323323 })
324324 .or(env_style_components)
325− .unwrap_or_else(|| vec![StyleComponent::Default])
325+ .unwrap_or_else(|| vec![StyleComponent::Full])
326326 .into_iter()
327327 .map(|style| style.components(self.interactive_output))
328328 .fold(HashSet::new(), |mut acc, components| {
src/bin/bat/clap_app.rs+20−32
@@ -349,18 +349,6 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
349349 )
350350 .takes_value(true),
351351 )
352− .arg(
353− Arg::with_name("ignored-suffix")
354− .number_of_values(1)
355− .multiple(true)
356− .takes_value(true)
357− .long("ignored-suffix")
358− .hidden_short_help(true)
359− .help(
360− "Ignore extension. For example:\n \
361− 'bat --ignored-suffix \".dev\" my_file.json.dev' will use JSON syntax, and ignore '.dev'"
362− )
363− )
364352 .arg(
365353 Arg::with_name("theme")
366354 .long("theme")
@@ -396,20 +384,11 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
396384 .validator(|val| {
397385 let mut invalid_vals = val.split(',').filter(|style| {
398386 !&[
399− "auto",
400− "full",
401− "default",
402− "plain",
403− "header",
404− "header-filename",
405− "header-filesize",
406− "grid",
407− "rule",
408− "numbers",
409− "snip",
387+ "auto", "full", "plain", "header", "grid", "rule", "numbers", "snip",
410388 #[cfg(feature = "git")]
411− "changes",
412− ].contains(style)
389+ "changes",
390+ ]
391+ .contains(style)
413392 });
414393
415394 if let Some(invalid) = invalid_vals.next() {
@@ -420,7 +399,7 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
420399 })
421400 .help(
422401 "Comma-separated list of style elements to display \
423− (*default*, auto, full, plain, changes, header, header-filename, header-filesize, grid, rule, numbers, snip).",
402+ (*auto*, full, plain, changes, header, grid, rule, numbers, snip).",
424403 )
425404 .long_help(
426405 "Configure which elements (line numbers, file headers, grid \
@@ -431,14 +410,11 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
431410 '--style=\"..\"' option to the configuration file or export the \
432411 BAT_STYLE environment variable (e.g.: export BAT_STYLE=\"..\").\n\n\
433412 Possible values:\n\n \
434− * default: enables recommended style components (default).\n \
435− * full: enables all available components.\n \
436− * auto: same as 'default', unless the output is piped.\n \
413+ * full: enables all available components (default).\n \
414+ * auto: same as 'full', unless the output is piped.\n \
437415 * plain: disables all available components.\n \
438416 * changes: show Git modification markers.\n \
439− * header: alias for 'header-filename'.\n \
440− * header-filename: show filenames before the content.\n \
441− * header-filesize: show file sizes before the content.\n \
417+ * header: show filenames before the content.\n \
442418 * grid: vertical/horizontal lines to separate side bar\n \
443419 and the header from the content.\n \
444420 * rule: horizontal lines to delimit files.\n \
@@ -538,6 +514,18 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
538514 .hidden_short_help(true)
539515 .help("Show acknowledgements."),
540516 )
517+ .arg(
518+ Arg::with_name("ignored-suffix")
519+ .number_of_values(1)
520+ .multiple(true)
521+ .takes_value(true)
522+ .long("ignored-suffix")
523+ .hidden_short_help(true)
524+ .help(
525+ "Ignore extension. For example:\n \
526+ 'bat --ignored-suffix \".dev\" my_file.json.dev' will use JSON syntax, and ignore '.dev'"
527+ )
528+ )
541529 .help_message("Print this help message.")
542530 .version_message("Show version information.");
543531
src/bin/bat/config.rs+1−1
@@ -91,7 +91,7 @@ pub fn get_args_from_config_file() -> Result<Vec<OsString>, shell_words::ParseEr
9191 .ok()
9292 .map(|content| get_args_from_str(&content))
9393 .transpose()?
94− .unwrap_or_default())
94+ .unwrap_or_else(Vec::new))
9595}
9696
9797pub fn get_args_from_env_var() -> Option<Result<Vec<OsString>, shell_words::ParseError>> {
src/bin/bat/main.rs−11
@@ -230,9 +230,6 @@ fn invoke_bugreport(app: &App) {
230230 let pager = bat::config::get_pager_executable(app.matches.value_of("pager"))
231231 .unwrap_or_else(|| "less".to_owned()); // FIXME: Avoid non-canonical path to "less".
232232
233− let mut custom_assets_metadata = PROJECT_DIRS.cache_dir().to_path_buf();
234− custom_assets_metadata.push("metadata.yaml");
235−
236233 let mut report = bugreport!()
237234 .info(SoftwareVersion::default())
238235 .info(OperatingSystem::default())
@@ -257,14 +254,6 @@ fn invoke_bugreport(app: &App) {
257254 "MANPAGER",
258255 ]))
259256 .info(FileContent::new("Config file", config_file()))
260− .info(FileContent::new(
261− "Custom assets metadata",
262− custom_assets_metadata,
263− ))
264− .info(DirectoryEntries::new(
265− "Custom assets",
266− PROJECT_DIRS.cache_dir(),
267− ))
268257 .info(CompileTimeInformation::default());
269258
270259 #[cfg(feature = "paging")]
src/error.rs+1−4
@@ -2,14 +2,11 @@ use std::io::Write;
22use thiserror::Error;
33
44#[derive(Error, Debug)]
5−#[non_exhaustive]
65pub enum Error {
76 #[error(transparent)]
87 Io(#[from] ::std::io::Error),
98 #[error(transparent)]
10− SyntectError(#[from] ::syntect::Error),
11− #[error(transparent)]
12− SyntectLoadingError(#[from] ::syntect::LoadingError),
9+ SyntectError(#[from] ::syntect::LoadingError),
1310 #[error(transparent)]
1411 ParseIntError(#[from] ::std::num::ParseIntError),
1512 #[error(transparent)]
src/input.rs+2−9
@@ -1,5 +1,4 @@
11use std::convert::TryFrom;
2−use std::fs;
32use std::fs::File;
43use std::io::{self, BufRead, BufReader, Read};
54use std::path::{Path, PathBuf};
@@ -88,7 +87,6 @@ impl<'a> InputKind<'a> {
8887#[derive(Clone, Default)]
8988pub(crate) struct InputMetadata {
9089 pub(crate) user_provided_name: Option<PathBuf>,
91− pub(crate) size: Option<u64>,
9290}
9391
9492pub struct Input<'a> {
@@ -118,7 +116,7 @@ impl OpenedInput<'_> {
118116 self.metadata
119117 .user_provided_name
120118 .as_ref()
121− .or(match self.kind {
119+ .or_else(|| match self.kind {
122120 OpenedInputKind::OrdinaryFile(ref path) => Some(path),
123121 _ => None,
124122 })
@@ -132,14 +130,9 @@ impl<'a> Input<'a> {
132130
133131 fn _ordinary_file(path: &Path) -> Self {
134132 let kind = InputKind::OrdinaryFile(path.to_path_buf());
135− let metadata = InputMetadata {
136− size: fs::metadata(path).map(|m| m.len()).ok(),
137− ..InputMetadata::default()
138− };
139−
140133 Input {
141134 description: kind.description(),
142− metadata,
135+ metadata: InputMetadata::default(),
143136 kind,
144137 }
145138 }
src/less.rs+8−59
@@ -3,38 +3,21 @@
33use std::ffi::OsStr;
44use std::process::Command;
55
6−#[derive(Debug, PartialEq)]
7−pub enum LessVersion {
8− Less(usize),
9− BusyBox,
10−}
11−
12−pub fn retrieve_less_version(less_path: &dyn AsRef<OsStr>) -> Option<LessVersion> {
6+pub fn retrieve_less_version(less_path: &dyn AsRef<OsStr>) -> Option<usize> {
137 let resolved_path = grep_cli::resolve_binary(less_path.as_ref()).ok()?;
148
159 let cmd = Command::new(resolved_path).arg("--version").output().ok()?;
16− if cmd.status.success() {
17− parse_less_version(&cmd.stdout)
18− } else {
19− parse_less_version_busybox(&cmd.stderr)
20− }
10+ parse_less_version(&cmd.stdout)
2111}
2212
23−fn parse_less_version(output: &[u8]) -> Option<LessVersion> {
13+fn parse_less_version(output: &[u8]) -> Option<usize> {
2414 if !output.starts_with(b"less ") {
2515 return None;
2616 }
2717
2818 let version = std::str::from_utf8(&output[5..]).ok()?;
2919 let end = version.find(|c: char| !c.is_ascii_digit())?;
30− Some(LessVersion::Less(version[..end].parse::<usize>().ok()?))
31−}
32−
33−fn parse_less_version_busybox(output: &[u8]) -> Option<LessVersion> {
34− match std::str::from_utf8(output) {
35− Ok(version) if version.contains("BusyBox ") => Some(LessVersion::BusyBox),
36− _ => None,
37− }
20+ version[..end].parse::<usize>().ok()
3821}
3922
4023#[test]
@@ -47,7 +30,7 @@ For information about the terms of redistribution,
4730see the file named README in the less distribution.
4831Homepage: http://www.greenwoodsoftware.com/less";
4932
50− assert_eq!(Some(LessVersion::Less(487)), parse_less_version(output));
33+ assert_eq!(Some(487), parse_less_version(output));
5134}
5235
5336#[test]
@@ -60,7 +43,7 @@ For information about the terms of redistribution,
6043see the file named README in the less distribution.
6144Homepage: http://www.greenwoodsoftware.com/less";
6245
63− assert_eq!(Some(LessVersion::Less(529)), parse_less_version(output));
46+ assert_eq!(Some(529), parse_less_version(output));
6447}
6548
6649#[test]
@@ -73,7 +56,7 @@ For information about the terms of redistribution,
7356see the file named README in the less distribution.
7457Home page: http://www.greenwoodsoftware.com/less";
7558
76− assert_eq!(Some(LessVersion::Less(551)), parse_less_version(output));
59+ assert_eq!(Some(551), parse_less_version(output));
7760}
7861
7962#[test]
@@ -86,7 +69,7 @@ For information about the terms of redistribution,
8669see the file named README in the less distribution.
8770Home page: https://greenwoodsoftware.com/less";
8871
89− assert_eq!(Some(LessVersion::Less(581)), parse_less_version(output));
72+ assert_eq!(Some(581), parse_less_version(output));
9073}
9174
9275#[test]
@@ -94,38 +77,4 @@ fn test_parse_less_version_wrong_program() {
9477 let output = b"more from util-linux 2.34";
9578
9679 assert_eq!(None, parse_less_version(output));
97− assert_eq!(None, parse_less_version_busybox(output));
98−}
99−
100−#[test]
101−fn test_parse_less_version_busybox() {
102− let output = b"pkg/less: unrecognized option '--version'
103−BusyBox v1.35.0 (2022-04-21 10:38:11 EDT) multi-call binary.
104−
105−Usage: less [-EFIMmNSRh~] [FILE]...
106−
107−View FILE (or stdin) one screenful at a time
108−
109− -E Quit once the end of a file is reached
110− -F Quit if entire file fits on first screen
111− -I Ignore case in all searches
112− -M,-m Display status line with line numbers
113− and percentage through the file
114− -N Prefix line number to each line
115− -S Truncate long lines
116− -R Remove color escape codes in input
117− -~ Suppress ~s displayed past EOF";
118−
119− assert_eq!(
120− Some(LessVersion::BusyBox),
121− parse_less_version_busybox(output)
122− );
123−}
124−
125−#[test]
126−fn test_parse_less_version_invalid_utf_8() {
127− let output = b"\xff";
128−
129− assert_eq!(None, parse_less_version(output));
130− assert_eq!(None, parse_less_version_busybox(output));
13180}
src/output.rs+5−7
@@ -4,7 +4,7 @@ use std::process::Child;
44
55use crate::error::*;
66#[cfg(feature = "paging")]
7−use crate::less::{retrieve_less_version, LessVersion};
7+use crate::less::retrieve_less_version;
88#[cfg(feature = "paging")]
99use crate::paging::PagingMode;
1010#[cfg(feature = "paging")]
@@ -83,13 +83,13 @@ impl OutputType {
8383 let replace_arguments_to_less = pager.source == PagerSource::EnvVarPager;
8484
8585 if args.is_empty() || replace_arguments_to_less {
86− p.arg("-R"); // Short version of --RAW-CONTROL-CHARS for maximum compatibility
86+ p.arg("--RAW-CONTROL-CHARS");
8787 if single_screen_action == SingleScreenAction::Quit {
88− p.arg("-F"); // Short version of --quit-if-one-screen for compatibility
88+ p.arg("--quit-if-one-screen");
8989 }
9090
9191 if wrapping_mode == WrappingMode::NoWrapping(true) {
92− p.arg("-S"); // Short version of --chop-long-lines for compatibility
92+ p.arg("--chop-long-lines");
9393 }
9494
9595 // Passing '--no-init' fixes a bug with '--quit-if-one-screen' in older
@@ -103,9 +103,7 @@ impl OutputType {
103103 None => {
104104 p.arg("--no-init");
105105 }
106− Some(LessVersion::Less(version))
107− if (version < 530 || (cfg!(windows) && version < 558)) =>
108− {
106+ Some(version) if (version < 530 || (cfg!(windows) && version < 558)) => {
109107 p.arg("--no-init");
110108 }
111109 _ => {}
src/preprocessor.rs+3−10
@@ -53,33 +53,26 @@ pub fn replace_nonprintable(input: &[u8], tab_width: usize) -> String {
5353 let tab_width = if tab_width == 0 { 4 } else { tab_width };
5454
5555 let mut idx = 0;
56− let mut line_idx = 0;
5756 let len = input.len();
5857 while idx < len {
5958 if let Some((chr, skip_ahead)) = try_parse_utf8_char(&input[idx..]) {
6059 idx += skip_ahead;
61− line_idx += 1;
6260
6361 match chr {
6462 // space
6563 ' ' => output.push('·'),
6664 // tab
6765 '\t' => {
68− let tab_stop = tab_width - ((line_idx - 1) % tab_width);
69− line_idx = 0;
70− if tab_stop == 1 {
66+ if tab_width == 1 {
7167 output.push('↹');
7268 } else {
7369 output.push('├');
74− output.push_str(&"─".repeat(tab_stop - 2));
70+ output.push_str(&"─".repeat(tab_width - 2));
7571 output.push('┤');
7672 }
7773 }
7874 // line feed
79− '\x0A' => {
80− output.push_str("␊\x0A");
81− line_idx = 0;
82− }
75+ '\x0A' => output.push_str("␊\x0A"),
8376 // carriage return
8477 '\x0D' => output.push('␍'),
8578 // null
src/pretty_printer.rs−6
@@ -164,12 +164,6 @@ impl<'a> PrettyPrinter<'a> {
164164 self
165165 }
166166
167− /// Whether to print binary content or nonprintable characters (default: no)
168− pub fn show_nonprintable(&mut self, yes: bool) -> &mut Self {
169− self.config.show_nonprintable = yes;
170− self
171− }
172−
173167 /// Whether to show "snip" markers between visible line ranges (default: no)
174168 pub fn snip(&mut self, yes: bool) -> &mut Self {
175169 self.active_style_components.snip = yes;
src/printer.rs+33−96
@@ -4,8 +4,6 @@ use std::vec::Vec;
44use ansi_term::Colour::{Fixed, Green, Red, Yellow};
55use ansi_term::Style;
66
7−use bytesize::ByteSize;
8−
97use console::AnsiCodeIterator;
108
119use syntect::easy::HighlightLines;
@@ -31,7 +29,6 @@ use crate::error::*;
3129use crate::input::OpenedInput;
3230use crate::line_range::RangeCheckResult;
3331use crate::preprocessor::{expand_tabs, replace_nonprintable};
34−use crate::style::StyleComponent;
3532use crate::terminal::{as_terminal_escaped, to_ansi_color};
3633use crate::vscreen::AnsiStyle;
3734use crate::wrapping::WrappingMode;
@@ -253,21 +250,6 @@ impl<'a> InteractivePrinter<'a> {
253250 }
254251 }
255252
256− fn print_header_component_indent(&mut self, handle: &mut dyn Write) -> std::io::Result<()> {
257− if self.config.style_components.grid() {
258− write!(
259− handle,
260− "{}{}",
261− " ".repeat(self.panel_width),
262− self.colors
263− .grid
264− .paint(if self.panel_width > 0 { "│ " } else { "" }),
265− )
266− } else {
267− write!(handle, "{}", " ".repeat(self.panel_width))
268− }
269− }
270−
271253 fn preprocess(&self, text: &str, cursor: &mut usize) -> String {
272254 if self.config.tab_width > 0 {
273255 return expand_tabs(text, self.config.tab_width, cursor);
@@ -305,69 +287,45 @@ impl<'a> Printer for InteractivePrinter<'a> {
305287 return Ok(());
306288 }
307289
308− let mode = match self.content_type {
309− Some(ContentType::BINARY) => " <BINARY>",
310− Some(ContentType::UTF_16LE) => " <UTF-16LE>",
311− Some(ContentType::UTF_16BE) => " <UTF-16BE>",
312− None => " <EMPTY>",
313− _ => "",
314− };
315−
316− let description = &input.description;
317− let metadata = &input.metadata;
318−
319− // We use this iterator to have a deterministic order for
320− // header components. HashSet has arbitrary order, but Vec is ordered.
321− let header_components: Vec<StyleComponent> = [
322− (
323− StyleComponent::HeaderFilename,
324− self.config.style_components.header_filename(),
325− ),
326− (
327− StyleComponent::HeaderFilesize,
328− self.config.style_components.header_filesize(),
329− ),
330− ]
331− .iter()
332− .filter(|(_, is_enabled)| *is_enabled)
333− .map(|(component, _)| *component)
334− .collect();
335−
336− // Print the cornering grid before the first header component
337290 if self.config.style_components.grid() {
338291 self.print_horizontal_line(handle, '┬')?;
292+
293+ write!(
294+ handle,
295+ "{}{}",
296+ " ".repeat(self.panel_width),
297+ self.colors
298+ .grid
299+ .paint(if self.panel_width > 0 { "│ " } else { "" }),
300+ )?;
339301 } else {
340302 // Only pad space between files, if we haven't already drawn a horizontal rule
341303 if add_header_padding && !self.config.style_components.rule() {
342304 writeln!(handle)?;
343305 }
306+ write!(handle, "{}", " ".repeat(self.panel_width))?;
344307 }
345308
346− header_components.iter().try_for_each(|component| {
347− self.print_header_component_indent(handle)?;
309+ let mode = match self.content_type {
310+ Some(ContentType::BINARY) => " <BINARY>",
311+ Some(ContentType::UTF_16LE) => " <UTF-16LE>",
312+ Some(ContentType::UTF_16BE) => " <UTF-16BE>",
313+ None => " <EMPTY>",
314+ _ => "",
315+ };
348316
349− match component {
350− StyleComponent::HeaderFilename => writeln!(
351− handle,
352− "{}{}{}",
353− description
354− .kind()
355− .map(|kind| format!("{}: ", kind))
356− .unwrap_or_else(|| "".into()),
357− self.colors.header_value.paint(description.title()),
358− mode
359− ),
360−
361− StyleComponent::HeaderFilesize => {
362− let bsize = metadata
363− .size
364− .map(|s| format!("{}", ByteSize(s)))
365− .unwrap_or_else(|| "-".into());
366− writeln!(handle, "Size: {}", self.colors.header_value.paint(bsize))
367− }
368− _ => Ok(()),
369− }
370− })?;
317+ let description = &input.description;
318+
319+ writeln!(
320+ handle,
321+ "{}{}{}",
322+ description
323+ .kind()
324+ .map(|kind| format!("{}: ", kind))
325+ .unwrap_or_else(|| "".into()),
326+ self.colors.filename.paint(description.title()),
327+ mode
328+ )?;
371329
372330 if self.config.style_components.grid() {
373331 if self.content_type.map_or(false, |c| c.is_text()) || self.config.show_nonprintable {
@@ -445,21 +403,9 @@ impl<'a> Printer for InteractivePrinter<'a> {
445403 return Ok(());
446404 }
447405 };
448−
449− // skip syntax highlighting on long lines
450− let too_long = line.len() > 1024 * 16;
451−
452− let for_highlighting: &str = if too_long { "\n" } else { &line };
453−
454− let mut highlighted_line = highlighter_from_set
406+ highlighter_from_set
455407 .highlighter
456− .highlight_line(for_highlighting, highlighter_from_set.syntax_set)?;
457−
458− if too_long {
459− highlighted_line[0].1 = &line;
460− }
461−
462− highlighted_line
408+ .highlight(&line, highlighter_from_set.syntax_set)
463409 };
464410
465411 if out_of_range {
@@ -475,10 +421,6 @@ impl<'a> Printer for InteractivePrinter<'a> {
475421 let highlight_this_line =
476422 self.config.highlighted_lines.0.check(line_number) == RangeCheckResult::InRange;
477423
478− if highlight_this_line && self.config.theme == "ansi" {
479− self.ansi_style.update("^[4m");
480− }
481−
482424 let background_color = self
483425 .background_color_highlight
484426 .filter(|_| highlight_this_line);
@@ -665,11 +607,6 @@ impl<'a> Printer for InteractivePrinter<'a> {
665607 writeln!(handle)?;
666608 }
667609
668− if highlight_this_line && self.config.theme == "ansi" {
669− self.ansi_style.update("^[24m");
670− write!(handle, "\x1B[24m")?;
671− }
672−
673610 Ok(())
674611 }
675612}
@@ -680,7 +617,7 @@ const DEFAULT_GUTTER_COLOR: u8 = 238;
680617pub struct Colors {
681618 pub grid: Style,
682619 pub rule: Style,
683− pub header_value: Style,
620+ pub filename: Style,
684621 pub git_added: Style,
685622 pub git_removed: Style,
686623 pub git_modified: Style,
@@ -709,7 +646,7 @@ impl Colors {
709646 Colors {
710647 grid: gutter_style,
711648 rule: gutter_style,
712− header_value: Style::new().bold(),
649+ filename: Style::new().bold(),
713650 git_added: Green.normal(),
714651 git_removed: Red.normal(),
715652 git_modified: Yellow.normal(),
src/style.rs+4−30
@@ -3,7 +3,6 @@ use std::str::FromStr;
33
44use crate::error::*;
55
6−#[non_exhaustive]
76#[derive(Debug, Eq, PartialEq, Copy, Clone, Hash)]
87pub enum StyleComponent {
98 Auto,
@@ -12,12 +11,9 @@ pub enum StyleComponent {
1211 Grid,
1312 Rule,
1413 Header,
15− HeaderFilename,
16− HeaderFilesize,
1714 LineNumbers,
1815 Snip,
1916 Full,
20− Default,
2117 Plain,
2218}
2319
@@ -26,7 +22,7 @@ impl StyleComponent {
2622 match self {
2723 StyleComponent::Auto => {
2824 if interactive_terminal {
29− StyleComponent::Default.components(interactive_terminal)
25+ StyleComponent::Full.components(interactive_terminal)
3026 } else {
3127 StyleComponent::Plain.components(interactive_terminal)
3228 }
@@ -35,25 +31,14 @@ impl StyleComponent {
3531 StyleComponent::Changes => &[StyleComponent::Changes],
3632 StyleComponent::Grid => &[StyleComponent::Grid],
3733 StyleComponent::Rule => &[StyleComponent::Rule],
38− StyleComponent::Header => &[StyleComponent::HeaderFilename],
39− StyleComponent::HeaderFilename => &[StyleComponent::HeaderFilename],
40− StyleComponent::HeaderFilesize => &[StyleComponent::HeaderFilesize],
34+ StyleComponent::Header => &[StyleComponent::Header],
4135 StyleComponent::LineNumbers => &[StyleComponent::LineNumbers],
4236 StyleComponent::Snip => &[StyleComponent::Snip],
4337 StyleComponent::Full => &[
4438 #[cfg(feature = "git")]
4539 StyleComponent::Changes,
4640 StyleComponent::Grid,
47− StyleComponent::HeaderFilename,
48− StyleComponent::HeaderFilesize,
49− StyleComponent::LineNumbers,
50− StyleComponent::Snip,
51− ],
52− StyleComponent::Default => &[
53− #[cfg(feature = "git")]
54− StyleComponent::Changes,
55− StyleComponent::Grid,
56− StyleComponent::HeaderFilename,
41+ StyleComponent::Header,
5742 StyleComponent::LineNumbers,
5843 StyleComponent::Snip,
5944 ],
@@ -73,12 +58,9 @@ impl FromStr for StyleComponent {
7358 "grid" => Ok(StyleComponent::Grid),
7459 "rule" => Ok(StyleComponent::Rule),
7560 "header" => Ok(StyleComponent::Header),
76− "header-filename" => Ok(StyleComponent::HeaderFilename),
77− "header-filesize" => Ok(StyleComponent::HeaderFilesize),
7861 "numbers" => Ok(StyleComponent::LineNumbers),
7962 "snip" => Ok(StyleComponent::Snip),
8063 "full" => Ok(StyleComponent::Full),
81− "default" => Ok(StyleComponent::Default),
8264 "plain" => Ok(StyleComponent::Plain),
8365 _ => Err(format!("Unknown style '{}'", s).into()),
8466 }
@@ -107,15 +89,7 @@ impl StyleComponents {
10789 }
10890
10991 pub fn header(&self) -> bool {
110− self.header_filename() || self.header_filesize()
111− }
112−
113− pub fn header_filename(&self) -> bool {
114− self.0.contains(&StyleComponent::HeaderFilename)
115− }
116−
117− pub fn header_filesize(&self) -> bool {
118− self.0.contains(&StyleComponent::HeaderFilesize)
92+ self.0.contains(&StyleComponent::Header)
11993 }
12094
12195 pub fn numbers(&self) -> bool {
src/syntax_mapping.rs+2−24
@@ -41,9 +41,6 @@ impl<'a> SyntaxMapping<'a> {
4141 pub fn builtin() -> SyntaxMapping<'a> {
4242 let mut mapping = Self::empty();
4343 mapping.insert("*.h", MappingTarget::MapTo("C++")).unwrap();
44− mapping
45− .insert(".clang-format", MappingTarget::MapTo("YAML"))
46− .unwrap();
4744 mapping.insert("*.fs", MappingTarget::MapTo("F#")).unwrap();
4845 mapping
4946 .insert("build", MappingTarget::MapToUnknown)
@@ -120,32 +117,13 @@ impl<'a> SyntaxMapping<'a> {
120117 mapping.insert(glob, MappingTarget::MapTo("INI")).unwrap();
121118 }
122119
123− // unix mail spool
124− for glob in &["/var/spool/mail/*", "/var/mail/*"] {
125− mapping.insert(glob, MappingTarget::MapTo("Email")).unwrap()
126− }
127−
128120 // pacman hooks
129121 mapping
130122 .insert("*.hook", MappingTarget::MapTo("INI"))
131123 .unwrap();
132124
133− // Global git config files rooted in `$XDG_CONFIG_HOME/git/` or `$HOME/.config/git/`
134− // See e.g. https://git-scm.com/docs/git-config#FILES
135− if let Some(xdg_config_home) =
136− std::env::var_os("XDG_CONFIG_HOME").filter(|val| !val.is_empty())
137− {
138− insert_git_config_global(&mut mapping, &xdg_config_home);
139− }
140− if let Some(default_config_home) = std::env::var_os("HOME")
141− .filter(|val| !val.is_empty())
142− .map(|home| Path::new(&home).join(".config"))
143− {
144− insert_git_config_global(&mut mapping, &default_config_home);
145− }
146−
147− fn insert_git_config_global(mapping: &mut SyntaxMapping, config_home: impl AsRef<Path>) {
148− let git_config_path = config_home.as_ref().join("git");
125+ if let Some(xdg_config_home) = std::env::var_os("XDG_CONFIG_HOME") {
126+ let git_config_path = Path::new(&xdg_config_home).join("git");
149127
150128 mapping
151129 .insert(
tests/benchmarks/many-small-files/small-file-0.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 0
tests/benchmarks/many-small-files/small-file-1.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 1
tests/benchmarks/many-small-files/small-file-10.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 10
tests/benchmarks/many-small-files/small-file-100.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 100
tests/benchmarks/many-small-files/small-file-11.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 11
tests/benchmarks/many-small-files/small-file-12.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 12
tests/benchmarks/many-small-files/small-file-13.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 13
tests/benchmarks/many-small-files/small-file-14.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 14
tests/benchmarks/many-small-files/small-file-15.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 15
tests/benchmarks/many-small-files/small-file-16.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 16
tests/benchmarks/many-small-files/small-file-17.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 17
tests/benchmarks/many-small-files/small-file-18.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 18
tests/benchmarks/many-small-files/small-file-19.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 19
tests/benchmarks/many-small-files/small-file-2.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 2
tests/benchmarks/many-small-files/small-file-20.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 20
tests/benchmarks/many-small-files/small-file-21.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 21
tests/benchmarks/many-small-files/small-file-22.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 22
tests/benchmarks/many-small-files/small-file-23.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 23
tests/benchmarks/many-small-files/small-file-24.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 24
tests/benchmarks/many-small-files/small-file-25.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 25
tests/benchmarks/many-small-files/small-file-26.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 26
tests/benchmarks/many-small-files/small-file-27.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 27
tests/benchmarks/many-small-files/small-file-28.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 28
tests/benchmarks/many-small-files/small-file-29.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 29
tests/benchmarks/many-small-files/small-file-3.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 3
tests/benchmarks/many-small-files/small-file-30.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 30
tests/benchmarks/many-small-files/small-file-31.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 31
tests/benchmarks/many-small-files/small-file-32.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 32
tests/benchmarks/many-small-files/small-file-33.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 33
tests/benchmarks/many-small-files/small-file-34.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 34
tests/benchmarks/many-small-files/small-file-35.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 35
tests/benchmarks/many-small-files/small-file-36.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 36
tests/benchmarks/many-small-files/small-file-37.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 37
tests/benchmarks/many-small-files/small-file-38.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 38
tests/benchmarks/many-small-files/small-file-39.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 39
tests/benchmarks/many-small-files/small-file-4.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 4
tests/benchmarks/many-small-files/small-file-40.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 40
tests/benchmarks/many-small-files/small-file-41.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 41
tests/benchmarks/many-small-files/small-file-42.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 42
tests/benchmarks/many-small-files/small-file-43.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 43
tests/benchmarks/many-small-files/small-file-44.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 44
tests/benchmarks/many-small-files/small-file-45.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 45
tests/benchmarks/many-small-files/small-file-46.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 46
tests/benchmarks/many-small-files/small-file-47.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 47
tests/benchmarks/many-small-files/small-file-48.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 48
tests/benchmarks/many-small-files/small-file-49.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 49
tests/benchmarks/many-small-files/small-file-5.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 5
tests/benchmarks/many-small-files/small-file-50.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 50
tests/benchmarks/many-small-files/small-file-51.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 51
tests/benchmarks/many-small-files/small-file-52.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 52
tests/benchmarks/many-small-files/small-file-53.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 53
tests/benchmarks/many-small-files/small-file-54.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 54
tests/benchmarks/many-small-files/small-file-55.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 55
tests/benchmarks/many-small-files/small-file-56.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 56
tests/benchmarks/many-small-files/small-file-57.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 57
tests/benchmarks/many-small-files/small-file-58.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 58
tests/benchmarks/many-small-files/small-file-59.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 59
tests/benchmarks/many-small-files/small-file-6.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 6
tests/benchmarks/many-small-files/small-file-60.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 60
tests/benchmarks/many-small-files/small-file-61.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 61
tests/benchmarks/many-small-files/small-file-62.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 62
tests/benchmarks/many-small-files/small-file-63.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 63
tests/benchmarks/many-small-files/small-file-64.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 64
tests/benchmarks/many-small-files/small-file-65.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 65
tests/benchmarks/many-small-files/small-file-66.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 66
tests/benchmarks/many-small-files/small-file-67.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 67
tests/benchmarks/many-small-files/small-file-68.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 68
tests/benchmarks/many-small-files/small-file-69.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 69
tests/benchmarks/many-small-files/small-file-7.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 7
tests/benchmarks/many-small-files/small-file-70.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 70
tests/benchmarks/many-small-files/small-file-71.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 71
tests/benchmarks/many-small-files/small-file-72.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 72
tests/benchmarks/many-small-files/small-file-73.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 73
tests/benchmarks/many-small-files/small-file-74.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 74
tests/benchmarks/many-small-files/small-file-75.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 75
tests/benchmarks/many-small-files/small-file-76.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 76
tests/benchmarks/many-small-files/small-file-77.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 77
tests/benchmarks/many-small-files/small-file-78.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 78
tests/benchmarks/many-small-files/small-file-79.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 79
tests/benchmarks/many-small-files/small-file-8.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 8
tests/benchmarks/many-small-files/small-file-80.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 80
tests/benchmarks/many-small-files/small-file-81.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 81
tests/benchmarks/many-small-files/small-file-82.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 82
tests/benchmarks/many-small-files/small-file-83.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 83
tests/benchmarks/many-small-files/small-file-84.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 84
tests/benchmarks/many-small-files/small-file-85.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 85
tests/benchmarks/many-small-files/small-file-86.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 86
tests/benchmarks/many-small-files/small-file-87.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 87
tests/benchmarks/many-small-files/small-file-88.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 88
tests/benchmarks/many-small-files/small-file-89.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 89
tests/benchmarks/many-small-files/small-file-9.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 9
tests/benchmarks/many-small-files/small-file-90.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 90
tests/benchmarks/many-small-files/small-file-91.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 91
tests/benchmarks/many-small-files/small-file-92.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 92
tests/benchmarks/many-small-files/small-file-93.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 93
tests/benchmarks/many-small-files/small-file-94.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 94
tests/benchmarks/many-small-files/small-file-95.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 95
tests/benchmarks/many-small-files/small-file-96.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 96
tests/benchmarks/many-small-files/small-file-97.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 97
tests/benchmarks/many-small-files/small-file-98.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 98
tests/benchmarks/many-small-files/small-file-99.txtdeleted−1
@@ -1 +0,0 @@
1−I am small file 99
tests/benchmarks/run-benchmarks.sh+5−15
@@ -9,15 +9,15 @@ if ! command -v hyperfine > /dev/null 2>&1; then
99 exit 1
1010fi
1111
12−# Check that python3 is installed.
13−if ! command -v python3 > /dev/null 2>&1; then
14− echo "'python3' does not seem to be installed."
15− echo "You can get it here: https://www.python.org/downloads/"
12+# Check that jq is installed.
13+if ! command -v jq > /dev/null 2>&1; then
14+ echo "'jq' does not seem to be installed."
15+ echo "You can get it here: https://stedolan.github.io/jq"
1616 exit 1
1717fi
1818
1919get_cargo_target_dir() {
20− cargo metadata --no-deps --format-version 1 | python3 -c 'import sys, json; print(json.load(sys.stdin)["target_directory"])'
20+ cargo metadata --no-deps --format-version 1 | jq -r .target_directory
2121}
2222
2323heading() {
@@ -136,13 +136,3 @@ for wrap in character never; do
136136 cat "$RESULT_DIR/syntax-highlighting-speed-${filename}.md" >> "$REPORT"
137137 done
138138done
139−
140−
141−heading "Many small files speed (overhead of metadata)"
142−hyperfine \
143− "$(printf "%q" "$BAT") --no-config --language=txt --style=plain many-small-files/*.txt" \
144− --command-name 'bat … --language=txt *.txt' \
145− --warmup "$WARMUP_COUNT" \
146− --export-markdown "$RESULT_DIR/many-small-files-speed.md" \
147− --export-json "$RESULT_DIR/many-small-files-speed.json"
148−cat "$RESULT_DIR/many-small-files-speed.md" >> "$REPORT"
tests/examples/git/.config/git/configdeleted−3
@@ -1,3 +0,0 @@
1−[user]
2− email = foo@bar.net
3− name = foobar
tests/examples/git/.gitconfigdeleted−3
@@ -1,3 +0,0 @@
1−[user]
2− email = foo@bar.net
3− name = foobar
tests/examples/longline.jsondeleted−3
@@ -1,3 +0,0 @@
1−{"api":
2− {"ANGLE_instanced_arrays":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/ANGLE_instanced_arrays","spec_url":"https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/","support":{"chrome":{"version_added":"32"},"chrome_android":{"version_added":"32"},"edge":{"version_added":"12"},"firefox":{"version_added":"47"},"firefox_android":{"version_added":true},"ie":{"version_added":"11"},"opera":{"version_added":"19"},"opera_android":{"version_added":"19"},"safari":{"version_added":"8"},"safari_ios":{"version_added":"8"},"samsunginternet_android":{"version_added":"2.0"},"webview_android":{"version_added":"4.4"}},"status":{"experimental":false,"standard_track":true,"deprecated":false}},"drawArraysInstancedANGLE":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/ANGLE_instanced_arrays/drawArraysInstancedANGLE","spec_url":"https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/","support":{"chrome":{"version_added":"32"},"chrome_android":{"version_added":"32"},"edge":{"version_added":"12"},"firefox":{"version_added":"47"},"firefox_android":{"version_added":true},"ie":{"version_added":"11"},"opera":{"version_added":"19"},"opera_android":{"version_added":"19"},"safari":{"version_added":"8"},"safari_ios":{"version_added":"8"},"samsunginternet_android":{"version_added":"2.0"},"webview_android":{"version_added":"4.4"}},"status":{"experimental":false,"standard_track":true,"deprecated":false}}},"drawElementsInstancedANGLE":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/ANGLE_instanced_arrays/drawElementsInstancedANGLE","spec_url":"https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/","support":{"chrome":{"version_added":"32"},"chrome_android":{"version_added":"32"},"edge":{"version_added":"12"},"firefox":{"version_added":"47"},"firefox_android":{"version_added":true},"ie":{"version_added":"11"},"opera":{"version_added":"19"},"opera_android":{"version_added":"19"},"safari":{"version_added":"8"},"safari_ios":{"version_added":"8"},"samsunginternet_android":{"version_added":"2.0"},"webview_android":{"version_added":"4.4"}},"status":{"experimental":false,"standard_track":true,"deprecated":false}}},"vertexAttribDivisorANGLE":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/ANGLE_instanced_arrays/vertexAttribDivisorANGLE","spec_url":"https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/","support":{"chrome":{"version_added":"32"},"chrome_android":{"version_added":"32"},"edge":{"version_added":"12"},"firefox":{"version_added":"47"},"firefox_android":{"version_added":true},"ie":{"version_added":"11"},"opera":{"version_added":"19"},"opera_android":{"version_added":"19"},"safari":{"version_added":"8"},"safari_ios":{"version_added":"8"},"samsunginternet_android":{"version_added":"2.0"},"webview_android":{"version_added":"4.4"}},"status":{"experimental":false,"standard_track":true,"deprecated":false}}}},"AbortController":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortController","spec_url":"https://dom.spec.whatwg.org/#interface-abortcontroller","support":{"chrome":{"version_added":"66"},"chrome_android":{"version_added":"66"},"edge":{"version_added":"16"},"firefox":{"version_added":"57"},"firefox_android":{"version_added":"57"},"ie":{"version_added":false},"nodejs":{"version_added":"15.0.0"},"opera":{"version_added":"53"},"opera_android":{"version_added":"47"},"safari":[{"version_added":"12.1"},{"version_added":"11.1","partial_implementation":true,"notes":"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>."}],"safari_ios":[{"version_added":"12.2"},{"version_added":"11.3","partial_implementation":true,"notes":"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>."}],"samsunginternet_android":{"version_added":"9.0"},"webview_android":{"version_added":"66"}},"status":{"experimental":true,"standard_track":true,"deprecated":false}},"AbortController":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortController/AbortController","spec_url":"https://dom.spec.whatwg.org/#ref-for-dom-abortcontroller-abortcontroller①","description":"<code>AbortController()</code> constructor","support":{"chrome":{"version_added":"66"},"chrome_android":{"version_added":"66"},"edge":{"version_added":"16"},"firefox":{"version_added":"57"},"firefox_android":{"version_added":"57"},"ie":{"version_added":false},"nodejs":{"version_added":"15.0.0"},"opera":{"version_added":"53"},"opera_android":{"version_added":"47"},"safari":[{"version_added":"12.1"},{"version_added":"11.1","partial_implementation":true,"notes":"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>."}],"safari_ios":[{"version_added":"12.2"},{"version_added":"11.3","partial_implementation":true,"notes":"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>."}],"samsunginternet_android":{"version_added":"9.0"},"webview_android":{"version_added":"66"}},"status":{"experimental":true,"standard_track":true,"deprecated":false}}},"abort":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortController/abort","spec_url":"https://dom.spec.whatwg.org/#ref-for-dom-abortcontroller-abortcontroller①","support":{"chrome":{"version_added":"66"},"chrome_android":{"version_added":"66"},"edge":{"version_added":"16"},"firefox":{"version_added":"57"},"firefox_android":{"version_added":"57"},"ie":{"version_added":false},"nodejs":{"version_added":"15.0.0"},"opera":{"version_added":"53"},"opera_android":{"version_added":"47"},"safari":[{"version_added":"12.1"},{"version_added":"11.1","partial_implementation":true,"notes":"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>."}],"safari_ios":[{"version_added":"12.2"},{"version_added":"11.3","partial_implementation":true,"notes":"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>."}],"samsunginternet_android":{"version_added":"9.0"},"webview_android":{"version_added":"66"}},"status":{"experimental":true,"standard_track":true,"deprecated":false}}},"signal":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortController/signal","spec_url":"https://dom.spec.whatwg.org/#ref-for-dom-abortcontroller-signal②","support":{"chrome":{"version_added":"66"},"chrome_android":{"version_added":"66"},"edge":{"version_added":"16"},"firefox":{"version_added":"57"},"firefox_android":{"version_added":"57"},"ie":{"version_added":false},"nodejs":{"version_added":"15.0.0"},"opera":{"version_added":"53"},"opera_android":{"version_added":"47"},"safari":[{"version_added":"12.1"},{"version_added":"11.1","partial_implementation":true,"notes":"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>."}],"safari_ios":[{"version_added":"12.2"},{"version_added":"11.3","partial_implementation":true,"notes":"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>."}],"samsunginternet_android":{"version_added":"9.0"},"webview_android":{"version_added":"66"}},"status":{"experimental":true,"standard_track":true,"deprecated":false}}}},"AbortPaymentEvent":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortPaymentEvent","support":{"chrome":{"version_added":"70"},"chrome_android":{"version_added":"70"},"edge":{"version_added":"79"},"firefox":{"version_added":false},"firefox_android":{"version_added":false},"ie":{"version_added":false},"opera":{"version_added":"57"},"opera_android":{"version_added":"49"},"safari":{"version_added":false},"safari_ios":{"version_added":false},"samsunginternet_android":{"version_added":"10.0"},"webview_android":{"version_added":false}},"status":{"experimental":true,"standard_track":false,"deprecated":false}},"AbortPaymentEvent":{"__compat":{"description":"<code>AbortPaymentEvent()</code> constructor","mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortPaymentEvent/AbortPaymentEvent","support":{"chrome":{"version_added":"70"},"chrome_android":{"version_added":"70"},"edge":{"version_added":"79"},"firefox":{"version_added":false},"firefox_android":{"version_added":false},"ie":{"version_added":false},"opera":{"version_added":"57"},"opera_android":{"version_added":"49"},"safari":{"version_added":false},"safari_ios":{"version_added":false},"samsunginternet_android":{"version_added":"10.0"},"webview_android":{"version_added":false}},"status":{"experimental":true,"standard_track":false,"deprecated":false}}},"respondWith":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortPaymentEvent/respondWith","support":{"chrome":{"version_added":"70"},"chrome_android":{"version_added":"70"},"edge":{"version_added":"79"},"firefox":{"version_added":false},"firefox_android":{"version_added":false},"ie":{"version_added":false},"opera":{"version_added":"57"},"opera_android":{"version_added":"49"},"safari":{"version_added":false},"safari_ios":{"version_added":false},"samsunginternet_android":{"version_added":"10.0"},"webview_android":{"version_added":false}},"status":{"experimental":true,"standard_track":false,"deprecated":false}}}},"AbortSignal":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortSignal","spec_url":"https://dom.spec.whatwg.org/#interface-AbortSignal","support":{"chrome":{"version_added":"66"},"chrome_android":{"version_added":"66"},"edge":{"version_added":"16"},"firefox":{"version_added":"57"},"firefox_android":{"version_added":"57"},"ie":{"version_added":false},"nodejs":{"version_added":"15.0.0"},"opera":{"version_added":"53"},"opera_android":{"version_added":"47"},"safari":{"version_added":"11.1"},"safari_ios":{"version_added":"11.3"},"samsunginternet_android":{"version_added":"9.0"},"webview_android":{"version_added":"66"}},"status":{"experimental":false,"standard_track":true,"deprecated":false}},"abort":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortSignal/abort","spec_url":"https://dom.spec.whatwg.org/#ref-for-dom-abortsignal-abort①","support":{"chrome":{"version_added":false},"chrome_android":{"version_added":false},"edge":{"version_added":false},"firefox":{"version_added":"88"},"firefox_android":{"version_added":"88"},"ie":{"version_added":false},"nodejs":{"version_added":false},"opera":{"version_added":false},"opera_android":{"version_added":false},"safari":{"version_added":false},"safari_ios":{"version_added":false},"samsunginternet_android":{"version_added":false},"webview_android":{"version_added":false}},"status":{"experimental":false,"standard_track":true,"deprecated":false}}},"abort_event":{"__compat":{"description":"<code>abort</code> event","mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortSignal/abort_event","spec_url":"https://dom.spec.whatwg.org/#eventdef-abortsignal-abort","support":{"chrome":{"version_added":"66"},"chrome_android":{"version_added":"66"},"edge":{"version_added":"16"},"firefox":{"version_added":"57"},"firefox_android":{"version_added":"57"},"ie":{"version_added":false},"nodejs":{"version_added":"15.0.0"},"opera":{"version_added":"53"},"opera_android":{"version_added":"47"},"safari":{"version_added":"11.1"},"safari_ios":{"version_added":"11.3"},"samsunginternet_android":{"version_added":"9.0"},"webview_android":{"version_added":"66"}},"status":{"experimental":false,"standard_track":true,"deprecated":false}}},"aborted":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortSignal/aborted","spec_url":"https://dom.spec.whatwg.org/#ref-for-dom-abortsignal-aborted①","support":{"chrome":{"version_added":"66"},"chrome_android":{"version_added":"66"},"edge":{"version_added":"16"},"firefox":{"version_added":"57"},"firefox_android":{"version_added":"57"},"ie":{"version_added":false},"nodejs":{"version_added":"15.0.0"},"opera":{"version_added":"53"},"opera_android":{"version_added":"47"},"safari":{"version_added":"11.1"},"safari_ios":{"version_added":"11.3"},"samsunginternet_android":{"version_added":"9.0"},"webview_android":{"version_added":"66"}},"status":{"experimental":false,"standard_track":true,"deprecated":false}}},"onabort":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortSignal/onabort","spec_url":"https://dom.spec.whatwg.org/#abortsignal-onabort","support":{"chrome":{"version_added":"66"},"chrome_android":{"version_added":"66"},"edge":{"version_added":"16"},"firefox":{"version_added":"57"},"firefox_android":{"version_added":"57"},"ie":{"version_added":false},"nodejs":{"version_added":"15.0.0"},"opera":{"version_added":"53"},"opera_android":{"version_added":"47"},"safari":{"version_added":"11.1"},"safari_ios":{"version_added":"11.3"},"samsunginternet_android":{"version_added":"9.0"},"webview_android":{"version_added":"66"}},"status":{"experimental":false,"standard_track":true,"deprecated":false}}}},"AbsoluteOrientationSensor":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbsoluteOrientationSensor","spec_url":"https://w3c.github.io/orientation-sensor/#absoluteorientationsensor-interface","support":{"chrome":{"version_added":"67"},"chrome_android":{"version_added":"67"},"edge":{"version_added":"79"},"firefox":{"version_added":false},"firefox_android":{"version_added":false},"ie":{"version_added":false},"opera":{"version_added":"54"},"opera_android":{"version_added":"48"},"safari":{"version_added":false},"safari_ios":{"version_added":false},"samsunginternet_android":{"version_added":"9.0"},"webview_android":{"version_added":"67"}},"status":{"experimental":false,"standard_track":true,"deprecated":false}},"AbsoluteOrientationSensor":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbsoluteOrientationSensor/AbsoluteOrientationSensor","spec_url":"https://w3c.github.io/orientation-sensor/#dom-absoluteorientationsensor-absoluteorientationsensor","description":"<code>AbsoluteOrientationSensor()</code> constructor","support":{"chrome":{"version_added":"67"},"chrome_android":{"version_added":"67"},"edge":{"version_added":"79"},"firefox":{"version_added":false},"firefox_android":{"version_added":false},"ie":{"version_added":false},"opera":{"version_added":"54"},"opera_android":{"version_added":"48"},"safari":{"version_added":false},"safari_ios":{"version_added":false},"samsunginternet_android":{"version_added":"9.0"},"webview_android":{"version_added":"67"}},"status":{"experimental":false,"standard_track":true,"deprecated":false}}}},"AbstractRange":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbstractRange","spec_url":"https://dom.spec.whatwg.org/#interface-abstractrange","support":{"chrome":{"version_added":"90"},"chrome_android":{"version_added":"90"},"edge":[{"version_added":"90"},{"version_added":"18","version_removed":"79"}],"firefox":{"version_added":"69"},"firefox_android":{"version_added":false},"ie":{"version_added":false},"opera":{"version_added":false},"opera_android":{"version_added":false},"safari":{"version_added":"14.1"},"safari_ios":{"version_added":"14.5"},"samsunginternet_android":{"version_added":false},"webview_android":{"version_added":"90"}},"status":{"experimental":false,"standard_track":true,"deprecated":false}},"collapsed":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbstractRange/collapsed","spec_url":"https://dom.spec.whatwg.org/#ref-for-dom-range-collapsed①","support":{"chrome":{"version_added":"90"},"chrome_android":{"version_added":"90"},"edge":[{"version_added":"90"},{"version_added":"18","version_removed":"79"}],"firefox":{"version_added":"69"},"firefox_android":{"version_added":false},"ie":{"version_added":false},"opera":{"version_added":false},"opera_android":
3− {"version_added":false}
tests/integration_tests.rs+3−250
@@ -919,7 +919,7 @@ fn empty_file_leads_to_empty_output_with_rule_enabled() {
919919}
920920
921921#[test]
922−fn header_basic() {
922+fn filename_basic() {
923923 bat()
924924 .arg("test.txt")
925925 .arg("--decorations=always")
@@ -933,21 +933,7 @@ fn header_basic() {
933933}
934934
935935#[test]
936−fn header_full_basic() {
937− bat()
938− .arg("test.txt")
939− .arg("--decorations=always")
940− .arg("--style=header-filename,header-filesize")
941− .arg("-r=0:0")
942− .arg("--file-name=foo")
943− .assert()
944− .success()
945− .stdout("File: foo\nSize: 12 B\n")
946− .stderr("");
947−}
948−
949−#[test]
950−fn header_binary() {
936+fn filename_binary() {
951937 bat()
952938 .arg("test.binary")
953939 .arg("--decorations=always")
@@ -960,67 +946,6 @@ fn header_binary() {
960946 .stderr("");
961947}
962948
963−#[test]
964−fn header_full_binary() {
965− bat()
966− .arg("test.binary")
967− .arg("--decorations=always")
968− .arg("--style=header-filename,header-filesize")
969− .arg("-r=0:0")
970− .arg("--file-name=foo")
971− .assert()
972− .success()
973− .stdout("File: foo <BINARY>\nSize: 4 B\n")
974− .stderr("");
975−}
976−
977−#[test]
978−fn header_default() {
979− bat()
980− .arg("--paging=never")
981− .arg("--color=never")
982− .arg("--terminal-width=80")
983− .arg("--wrap=never")
984− .arg("--decorations=always")
985− .arg("--style=default")
986− .arg("single-line.txt")
987− .assert()
988− .success()
989− .stdout(
990− "\
991−───────┬────────────────────────────────────────────────────────────────────────
992− │ File: single-line.txt
993−───────┼────────────────────────────────────────────────────────────────────────
994− 1 │ Single Line
995−───────┴────────────────────────────────────────────────────────────────────────
996−",
997− )
998− .stderr("");
999−}
1000−
1001−#[test]
1002−fn header_default_is_default() {
1003− bat()
1004− .arg("--paging=never")
1005− .arg("--color=never")
1006− .arg("--terminal-width=80")
1007− .arg("--wrap=never")
1008− .arg("--decorations=always")
1009− .arg("single-line.txt")
1010− .assert()
1011− .success()
1012− .stdout(
1013− "\
1014−───────┬────────────────────────────────────────────────────────────────────────
1015− │ File: single-line.txt
1016−───────┼────────────────────────────────────────────────────────────────────────
1017− 1 │ Single Line
1018−───────┴────────────────────────────────────────────────────────────────────────
1019−",
1020− )
1021− .stderr("");
1022−}
1023−
1024949#[test]
1025950fn filename_stdin() {
1026951 bat()
@@ -1091,18 +1016,6 @@ fn header_padding() {
10911016 .stderr("");
10921017}
10931018
1094−#[test]
1095−fn header_full_padding() {
1096− bat()
1097− .arg("--decorations=always")
1098− .arg("--style=header-filename,header-filesize")
1099− .arg("test.txt")
1100− .arg("single-line.txt")
1101− .assert()
1102− .stdout("File: test.txt\nSize: 12 B\nhello world\n\nFile: single-line.txt\nSize: 11 B\nSingle Line\n")
1103− .stderr("");
1104−}
1105−
11061019#[test]
11071020fn header_padding_rule() {
11081021 bat()
@@ -1123,28 +1036,6 @@ Single Line
11231036 .stderr("");
11241037}
11251038
1126−#[test]
1127−fn header_full_padding_rule() {
1128− bat()
1129− .arg("--decorations=always")
1130− .arg("--style=header-filename,header-filesize,rule")
1131− .arg("--terminal-width=80")
1132− .arg("test.txt")
1133− .arg("single-line.txt")
1134− .assert()
1135− .stdout(
1136− "File: test.txt
1137−Size: 12 B
1138−hello world
1139−────────────────────────────────────────────────────────────────────────────────
1140−File: single-line.txt
1141−Size: 11 B
1142−Single Line
1143−",
1144− )
1145− .stderr("");
1146−}
1147−
11481039#[test]
11491040fn grid_overrides_rule() {
11501041 bat()
@@ -1164,9 +1055,7 @@ Single Line
11641055────────────────────────────────────────────────────────────────────────────────
11651056",
11661057 )
1167− .stderr(
1168− "\x1b[33m[bat warning]\x1b[0m: Style 'rule' is a subset of style 'grid', 'rule' will not be visible.\n",
1169− );
1058+ .stderr("\x1b[33m[bat warning]\x1b[0m: Style 'rule' is a subset of style 'grid', 'rule' will not be visible.\n");
11701059}
11711060
11721061#[cfg(target_os = "linux")]
@@ -1264,52 +1153,6 @@ fn show_all_mode() {
12641153 .stderr("");
12651154}
12661155
1267−#[test]
1268−fn show_all_extends_tab_markers_to_next_tabstop() {
1269− bat()
1270− .arg("tabs.txt")
1271− .arg("--show-all")
1272− .arg("--tabs=4")
1273− .arg("--style=plain")
1274− .assert()
1275− .success()
1276− .stdout(
1277− "├──┤1├─┤2├─┤3├─┤4␊
1278−1├─┤?␊
1279−22├┤?␊
1280−333↹?␊
1281−4444├──┤?␊
1282−55555├─┤?␊
1283−666666├┤?␊
1284−7777777↹?␊
1285−88888888├──┤?␊
1286−",
1287− );
1288−}
1289−
1290−#[test]
1291−fn show_all_extends_tab_markers_to_next_tabstop_width_8() {
1292− bat()
1293− .arg("tabs.txt")
1294− .arg("--show-all")
1295− .arg("--tabs=8")
1296− .arg("--style=plain")
1297− .assert()
1298− .success()
1299− .stdout(
1300− "├──────┤1├─────┤2├─────┤3├─────┤4␊
1301−1├─────┤?␊
1302−22├────┤?␊
1303−333├───┤?␊
1304−4444├──┤?␊
1305−55555├─┤?␊
1306−666666├┤?␊
1307−7777777↹?␊
1308−88888888├──────┤?␊
1309−",
1310− );
1311−}
1312−
13131156#[test]
13141157fn no_paging_arg() {
13151158 bat()
@@ -1376,7 +1219,6 @@ fn grid_for_file_without_newline() {
13761219 "\
13771220───────┬────────────────────────────────────────────────────────────────────────
13781221 │ File: single-line.txt
1379− │ Size: 11 B
13801222───────┼────────────────────────────────────────────────────────────────────────
13811223 1 │ Single Line
13821224───────┴────────────────────────────────────────────────────────────────────────
@@ -1385,25 +1227,6 @@ fn grid_for_file_without_newline() {
13851227 .stderr("");
13861228}
13871229
1388−// For ANSI theme, use underscore as a highlighter
1389−#[test]
1390−fn ansi_highlight_underline() {
1391− bat()
1392− .arg("--paging=never")
1393− .arg("--color=never")
1394− .arg("--terminal-width=80")
1395− .arg("--wrap=never")
1396− .arg("--decorations=always")
1397− .arg("--theme=ansi")
1398− .arg("--style=plain")
1399− .arg("--highlight-line=1")
1400− .write_stdin("Ansi Underscore Test\nAnother Line")
1401− .assert()
1402− .success()
1403− .stdout("\x1B[4mAnsi Underscore Test\n\x1B[24mAnother Line")
1404− .stderr("");
1405−}
1406−
14071230// Ensure that ANSI passthrough is emitted properly for both wrapping and non-wrapping printer.
14081231#[test]
14091232fn ansi_passthrough_emit() {
@@ -1427,8 +1250,6 @@ fn ansi_passthrough_emit() {
14271250fn ignored_suffix_arg() {
14281251 bat()
14291252 .arg("-f")
1430− .arg("--theme")
1431− .arg("Monokai Extended")
14321253 .arg("-p")
14331254 .arg("test.json~")
14341255 .assert()
@@ -1438,8 +1259,6 @@ fn ignored_suffix_arg() {
14381259
14391260 bat()
14401261 .arg("-f")
1441− .arg("--theme")
1442− .arg("Monokai Extended")
14431262 .arg("-p")
14441263 .arg("--ignored-suffix=.suffix")
14451264 .arg("test.json.suffix")
@@ -1450,8 +1269,6 @@ fn ignored_suffix_arg() {
14501269
14511270 bat()
14521271 .arg("-f")
1453− .arg("--theme")
1454− .arg("Monokai Extended")
14551272 .arg("-p")
14561273 .arg("test.json.suffix")
14571274 .assert()
@@ -1460,70 +1277,6 @@ fn ignored_suffix_arg() {
14601277 .stderr("");
14611278}
14621279
1463−#[test]
1464−fn highlighting_is_skipped_on_long_lines() {
1465− let expected = "\u{1b}[38;5;231m{\u{1b}[0m\u{1b}[38;5;208m\"\u{1b}[0m\u{1b}[38;5;208mapi\u{1b}[0m\u{1b}[38;5;208m\"\u{1b}[0m\u{1b}[38;5;231m:\u{1b}[0m\n".to_owned() +
1466− "\u{1b}" +
1467− r#"[38;5;231m {"ANGLE_instanced_arrays":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/ANGLE_instanced_arrays","spec_url":"https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/","support":{"chrome":{"version_added":"32"},"chrome_android":{"version_added":"32"},"edge":{"version_added":"12"},"firefox":{"version_added":"47"},"firefox_android":{"version_added":true},"ie":{"version_added":"11"},"opera":{"version_added":"19"},"opera_android":{"version_added":"19"},"safari":{"version_added":"8"},"safari_ios":{"version_added":"8"},"samsunginternet_android":{"version_added":"2.0"},"webview_android":{"version_added":"4.4"}},"status":{"experimental":false,"standard_track":true,"deprecated":false}},"drawArraysInstancedANGLE":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/ANGLE_instanced_arrays/drawArraysInstancedANGLE","spec_url":"https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/","support":{"chrome":{"version_added":"32"},"chrome_android":{"version_added":"32"},"edge":{"version_added":"12"},"firefox":{"version_added":"47"},"firefox_android":{"version_added":true},"ie":{"version_added":"11"},"opera":{"version_added":"19"},"opera_android":{"version_added":"19"},"safari":{"version_added":"8"},"safari_ios":{"version_added":"8"},"samsunginternet_android":{"version_added":"2.0"},"webview_android":{"version_added":"4.4"}},"status":{"experimental":false,"standard_track":true,"deprecated":false}}},"drawElementsInstancedANGLE":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/ANGLE_instanced_arrays/drawElementsInstancedANGLE","spec_url":"https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/","support":{"chrome":{"version_added":"32"},"chrome_android":{"version_added":"32"},"edge":{"version_added":"12"},"firefox":{"version_added":"47"},"firefox_android":{"version_added":true},"ie":{"version_added":"11"},"opera":{"version_added":"19"},"opera_android":{"version_added":"19"},"safari":{"version_added":"8"},"safari_ios":{"version_added":"8"},"samsunginternet_android":{"version_added":"2.0"},"webview_android":{"version_added":"4.4"}},"status":{"experimental":false,"standard_track":true,"deprecated":false}}},"vertexAttribDivisorANGLE":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/ANGLE_instanced_arrays/vertexAttribDivisorANGLE","spec_url":"https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/","support":{"chrome":{"version_added":"32"},"chrome_android":{"version_added":"32"},"edge":{"version_added":"12"},"firefox":{"version_added":"47"},"firefox_android":{"version_added":true},"ie":{"version_added":"11"},"opera":{"version_added":"19"},"opera_android":{"version_added":"19"},"safari":{"version_added":"8"},"safari_ios":{"version_added":"8"},"samsunginternet_android":{"version_added":"2.0"},"webview_android":{"version_added":"4.4"}},"status":{"experimental":false,"standard_track":true,"deprecated":false}}}},"AbortController":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortController","spec_url":"https://dom.spec.whatwg.org/#interface-abortcontroller","support":{"chrome":{"version_added":"66"},"chrome_android":{"version_added":"66"},"edge":{"version_added":"16"},"firefox":{"version_added":"57"},"firefox_android":{"version_added":"57"},"ie":{"version_added":false},"nodejs":{"version_added":"15.0.0"},"opera":{"version_added":"53"},"opera_android":{"version_added":"47"},"safari":[{"version_added":"12.1"},{"version_added":"11.1","partial_implementation":true,"notes":"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>."}],"safari_ios":[{"version_added":"12.2"},{"version_added":"11.3","partial_implementation":true,"notes":"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>."}],"samsunginternet_android":{"version_added":"9.0"},"webview_android":{"version_added":"66"}},"status":{"experimental":true,"standard_track":true,"deprecated":false}},"AbortController":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortController/AbortController","spec_url":"https://dom.spec.whatwg.org/#ref-for-dom-abortcontroller-abortcontroller①","description":"<code>AbortController()</code> constructor","support":{"chrome":{"version_added":"66"},"chrome_android":{"version_added":"66"},"edge":{"version_added":"16"},"firefox":{"version_added":"57"},"firefox_android":{"version_added":"57"},"ie":{"version_added":false},"nodejs":{"version_added":"15.0.0"},"opera":{"version_added":"53"},"opera_android":{"version_added":"47"},"safari":[{"version_added":"12.1"},{"version_added":"11.1","partial_implementation":true,"notes":"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>."}],"safari_ios":[{"version_added":"12.2"},{"version_added":"11.3","partial_implementation":true,"notes":"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>."}],"samsunginternet_android":{"version_added":"9.0"},"webview_android":{"version_added":"66"}},"status":{"experimental":true,"standard_track":true,"deprecated":false}}},"abort":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortController/abort","spec_url":"https://dom.spec.whatwg.org/#ref-for-dom-abortcontroller-abortcontroller①","support":{"chrome":{"version_added":"66"},"chrome_android":{"version_added":"66"},"edge":{"version_added":"16"},"firefox":{"version_added":"57"},"firefox_android":{"version_added":"57"},"ie":{"version_added":false},"nodejs":{"version_added":"15.0.0"},"opera":{"version_added":"53"},"opera_android":{"version_added":"47"},"safari":[{"version_added":"12.1"},{"version_added":"11.1","partial_implementation":true,"notes":"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>."}],"safari_ios":[{"version_added":"12.2"},{"version_added":"11.3","partial_implementation":true,"notes":"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>."}],"samsunginternet_android":{"version_added":"9.0"},"webview_android":{"version_added":"66"}},"status":{"experimental":true,"standard_track":true,"deprecated":false}}},"signal":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortController/signal","spec_url":"https://dom.spec.whatwg.org/#ref-for-dom-abortcontroller-signal②","support":{"chrome":{"version_added":"66"},"chrome_android":{"version_added":"66"},"edge":{"version_added":"16"},"firefox":{"version_added":"57"},"firefox_android":{"version_added":"57"},"ie":{"version_added":false},"nodejs":{"version_added":"15.0.0"},"opera":{"version_added":"53"},"opera_android":{"version_added":"47"},"safari":[{"version_added":"12.1"},{"version_added":"11.1","partial_implementation":true,"notes":"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>."}],"safari_ios":[{"version_added":"12.2"},{"version_added":"11.3","partial_implementation":true,"notes":"Even though <code>window.AbortController</code> is defined, it doesn't really abort <code>fetch</code> requests. See <a href='https://webkit.org/b/174980'>bug 174980</a>."}],"samsunginternet_android":{"version_added":"9.0"},"webview_android":{"version_added":"66"}},"status":{"experimental":true,"standard_track":true,"deprecated":false}}}},"AbortPaymentEvent":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortPaymentEvent","support":{"chrome":{"version_added":"70"},"chrome_android":{"version_added":"70"},"edge":{"version_added":"79"},"firefox":{"version_added":false},"firefox_android":{"version_added":false},"ie":{"version_added":false},"opera":{"version_added":"57"},"opera_android":{"version_added":"49"},"safari":{"version_added":false},"safari_ios":{"version_added":false},"samsunginternet_android":{"version_added":"10.0"},"webview_android":{"version_added":false}},"status":{"experimental":true,"standard_track":false,"deprecated":false}},"AbortPaymentEvent":{"__compat":{"description":"<code>AbortPaymentEvent()</code> constructor","mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortPaymentEvent/AbortPaymentEvent","support":{"chrome":{"version_added":"70"},"chrome_android":{"version_added":"70"},"edge":{"version_added":"79"},"firefox":{"version_added":false},"firefox_android":{"version_added":false},"ie":{"version_added":false},"opera":{"version_added":"57"},"opera_android":{"version_added":"49"},"safari":{"version_added":false},"safari_ios":{"version_added":false},"samsunginternet_android":{"version_added":"10.0"},"webview_android":{"version_added":false}},"status":{"experimental":true,"standard_track":false,"deprecated":false}}},"respondWith":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortPaymentEvent/respondWith","support":{"chrome":{"version_added":"70"},"chrome_android":{"version_added":"70"},"edge":{"version_added":"79"},"firefox":{"version_added":false},"firefox_android":{"version_added":false},"ie":{"version_added":false},"opera":{"version_added":"57"},"opera_android":{"version_added":"49"},"safari":{"version_added":false},"safari_ios":{"version_added":false},"samsunginternet_android":{"version_added":"10.0"},"webview_android":{"version_added":false}},"status":{"experimental":true,"standard_track":false,"deprecated":false}}}},"AbortSignal":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortSignal","spec_url":"https://dom.spec.whatwg.org/#interface-AbortSignal","support":{"chrome":{"version_added":"66"},"chrome_android":{"version_added":"66"},"edge":{"version_added":"16"},"firefox":{"version_added":"57"},"firefox_android":{"version_added":"57"},"ie":{"version_added":false},"nodejs":{"version_added":"15.0.0"},"opera":{"version_added":"53"},"opera_android":{"version_added":"47"},"safari":{"version_added":"11.1"},"safari_ios":{"version_added":"11.3"},"samsunginternet_android":{"version_added":"9.0"},"webview_android":{"version_added":"66"}},"status":{"experimental":false,"standard_track":true,"deprecated":false}},"abort":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortSignal/abort","spec_url":"https://dom.spec.whatwg.org/#ref-for-dom-abortsignal-abort①","support":{"chrome":{"version_added":false},"chrome_android":{"version_added":false},"edge":{"version_added":false},"firefox":{"version_added":"88"},"firefox_android":{"version_added":"88"},"ie":{"version_added":false},"nodejs":{"version_added":false},"opera":{"version_added":false},"opera_android":{"version_added":false},"safari":{"version_added":false},"safari_ios":{"version_added":false},"samsunginternet_android":{"version_added":false},"webview_android":{"version_added":false}},"status":{"experimental":false,"standard_track":true,"deprecated":false}}},"abort_event":{"__compat":{"description":"<code>abort</code> event","mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortSignal/abort_event","spec_url":"https://dom.spec.whatwg.org/#eventdef-abortsignal-abort","support":{"chrome":{"version_added":"66"},"chrome_android":{"version_added":"66"},"edge":{"version_added":"16"},"firefox":{"version_added":"57"},"firefox_android":{"version_added":"57"},"ie":{"version_added":false},"nodejs":{"version_added":"15.0.0"},"opera":{"version_added":"53"},"opera_android":{"version_added":"47"},"safari":{"version_added":"11.1"},"safari_ios":{"version_added":"11.3"},"samsunginternet_android":{"version_added":"9.0"},"webview_android":{"version_added":"66"}},"status":{"experimental":false,"standard_track":true,"deprecated":false}}},"aborted":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortSignal/aborted","spec_url":"https://dom.spec.whatwg.org/#ref-for-dom-abortsignal-aborted①","support":{"chrome":{"version_added":"66"},"chrome_android":{"version_added":"66"},"edge":{"version_added":"16"},"firefox":{"version_added":"57"},"firefox_android":{"version_added":"57"},"ie":{"version_added":false},"nodejs":{"version_added":"15.0.0"},"opera":{"version_added":"53"},"opera_android":{"version_added":"47"},"safari":{"version_added":"11.1"},"safari_ios":{"version_added":"11.3"},"samsunginternet_android":{"version_added":"9.0"},"webview_android":{"version_added":"66"}},"status":{"experimental":false,"standard_track":true,"deprecated":false}}},"onabort":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbortSignal/onabort","spec_url":"https://dom.spec.whatwg.org/#abortsignal-onabort","support":{"chrome":{"version_added":"66"},"chrome_android":{"version_added":"66"},"edge":{"version_added":"16"},"firefox":{"version_added":"57"},"firefox_android":{"version_added":"57"},"ie":{"version_added":false},"nodejs":{"version_added":"15.0.0"},"opera":{"version_added":"53"},"opera_android":{"version_added":"47"},"safari":{"version_added":"11.1"},"safari_ios":{"version_added":"11.3"},"samsunginternet_android":{"version_added":"9.0"},"webview_android":{"version_added":"66"}},"status":{"experimental":false,"standard_track":true,"deprecated":false}}}},"AbsoluteOrientationSensor":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbsoluteOrientationSensor","spec_url":"https://w3c.github.io/orientation-sensor/#absoluteorientationsensor-interface","support":{"chrome":{"version_added":"67"},"chrome_android":{"version_added":"67"},"edge":{"version_added":"79"},"firefox":{"version_added":false},"firefox_android":{"version_added":false},"ie":{"version_added":false},"opera":{"version_added":"54"},"opera_android":{"version_added":"48"},"safari":{"version_added":false},"safari_ios":{"version_added":false},"samsunginternet_android":{"version_added":"9.0"},"webview_android":{"version_added":"67"}},"status":{"experimental":false,"standard_track":true,"deprecated":false}},"AbsoluteOrientationSensor":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbsoluteOrientationSensor/AbsoluteOrientationSensor","spec_url":"https://w3c.github.io/orientation-sensor/#dom-absoluteorientationsensor-absoluteorientationsensor","description":"<code>AbsoluteOrientationSensor()</code> constructor","support":{"chrome":{"version_added":"67"},"chrome_android":{"version_added":"67"},"edge":{"version_added":"79"},"firefox":{"version_added":false},"firefox_android":{"version_added":false},"ie":{"version_added":false},"opera":{"version_added":"54"},"opera_android":{"version_added":"48"},"safari":{"version_added":false},"safari_ios":{"version_added":false},"samsunginternet_android":{"version_added":"9.0"},"webview_android":{"version_added":"67"}},"status":{"experimental":false,"standard_track":true,"deprecated":false}}}},"AbstractRange":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbstractRange","spec_url":"https://dom.spec.whatwg.org/#interface-abstractrange","support":{"chrome":{"version_added":"90"},"chrome_android":{"version_added":"90"},"edge":[{"version_added":"90"},{"version_added":"18","version_removed":"79"}],"firefox":{"version_added":"69"},"firefox_android":{"version_added":false},"ie":{"version_added":false},"opera":{"version_added":false},"opera_android":{"version_added":false},"safari":{"version_added":"14.1"},"safari_ios":{"version_added":"14.5"},"samsunginternet_android":{"version_added":false},"webview_android":{"version_added":"90"}},"status":{"experimental":false,"standard_track":true,"deprecated":false}},"collapsed":{"__compat":{"mdn_url":"https://developer.mozilla.org/docs/Web/API/AbstractRange/collapsed","spec_url":"https://dom.spec.whatwg.org/#ref-for-dom-range-collapsed①","support":{"chrome":{"version_added":"90"},"chrome_android":{"version_added":"90"},"edge":[{"version_added":"90"},{"version_added":"18","version_removed":"79"}],"firefox":{"version_added":"69"},"firefox_android":{"version_added":false},"ie":{"version_added":false},"opera":{"version_added":false},"opera_android":"# +
1468− "\u{1b}[0m\n\u{1b}[38;5;231m \u{1b}[0m\u{1b}[38;5;231m{\u{1b}[0m\u{1b}[38;5;208m\"\u{1b}[0m\u{1b}[38;5;208mversion_added\u{1b}[0m\u{1b}[38;5;208m\"\u{1b}[0m\u{1b}[38;5;231m:\u{1b}[0m\u{1b}[38;5;141mfalse\u{1b}[0m\u{1b}[38;5;231m}\u{1b}[0m\n";
1469−
1470− bat()
1471− .arg("-f")
1472− .arg("--theme")
1473− .arg("Monokai Extended")
1474− .arg("-p")
1475− .arg("longline.json")
1476− .assert()
1477− .success()
1478− .stdout(expected)
1479− .stderr("");
1480−}
1481−
1482−#[test]
1483−fn all_global_git_config_locations_syntax_mapping_work() {
1484− let fake_home = Path::new(EXAMPLES_DIR).join("git").canonicalize().unwrap();
1485− let expected = "\u{1b}[38;5;231m[\u{1b}[0m\u{1b}[38;5;149muser\u{1b}[0m\u{1b}[38;5;231m]\u{1b}[0m
1486−\u{1b}[38;5;231m \u{1b}[0m\u{1b}[38;5;231memail\u{1b}[0m\u{1b}[38;5;231m \u{1b}[0m\u{1b}[38;5;203m=\u{1b}[0m\u{1b}[38;5;231m \u{1b}[0m\u{1b}[38;5;186mfoo@bar.net\u{1b}[0m
1487−\u{1b}[38;5;231m \u{1b}[0m\u{1b}[38;5;231mname\u{1b}[0m\u{1b}[38;5;231m \u{1b}[0m\u{1b}[38;5;203m=\u{1b}[0m\u{1b}[38;5;231m \u{1b}[0m\u{1b}[38;5;186mfoobar\u{1b}[0m
1488−";
1489−
1490− bat()
1491− .env("XDG_CONFIG_HOME", fake_home.join(".config").as_os_str())
1492− .arg("-f")
1493− .arg("--theme")
1494− .arg("Monokai Extended")
1495− .arg("-p")
1496− .arg("git/.config/git/config")
1497− .assert()
1498− .success()
1499− .stdout(expected)
1500− .stderr("");
1501−
1502− bat()
1503− .env("HOME", fake_home.as_os_str())
1504− .arg("-f")
1505− .arg("--theme")
1506− .arg("Monokai Extended")
1507− .arg("-p")
1508− .arg("git/.config/git/config")
1509− .assert()
1510− .success()
1511− .stdout(expected)
1512− .stderr("");
1513−
1514− bat()
1515− .env("HOME", fake_home.as_os_str())
1516− .arg("-f")
1517− .arg("--theme")
1518− .arg("Monokai Extended")
1519− .arg("-p")
1520− .arg("git/.gitconfig")
1521− .assert()
1522− .success()
1523− .stdout(expected)
1524− .stderr("");
1525−}
1526−
15271280#[test]
15281281fn acknowledgements() {
15291282 bat()
tests/snapshots/output/full.snapshot.txt−1
@@ -1,6 +1,5 @@
11───────┬────────────────────────────────────────────────────────────────────────
22 │ File: sample.rs
3− │ Size: 533 B
43───────┼────────────────────────────────────────────────────────────────────────
54 1 + │ /// A rectangle. First line is changed to prevent a regression of #1869
65 2 │ struct Rectangle {
tests/syntax-tests/highlighted/INI/test.infdeleted−5
@@ -1,5 +0,0 @@
1−[section]
2−key=value
3−# This file is just for testing that the INI syntax is registered to handle
4−# the .inf file extension, it is not testing the syntax highlighting capabilities
5−# of the INI syntax itself
tests/syntax-tests/highlighted/JQ/sample.jqdeleted−60
@@ -1,60 +0,0 @@
1−import "../imported-file" ;
2−
3−# With Comments !
4−def weird($a; $b; $c):
5− [ $a, $b, $c ] | transpose | reduce .[][] as $item (
6− [];
7− . + $item.property
8− )
9−;
10−
11−. | weird (.a; .b; .c) |
12−
13−(
14−
15−if (. | contains("never") ) then
16− "Why yes"
17−else
18− 12.23
19−end
20−
21−) as $never |
22−
23−{
24− hello,
25− why: "because",
26− hello: ( weird | ascii_upcase ),
27− format_eg: ( . | @json "My json string \( . | this | part | just | white | ascii_upcase | transpose)" ),
28− never: $never,
29− "literal_key": literal_value,
30− "this": 12.1e12,
31− "part": "almost"
32− "like": [
33− 12,
34− 2
35− "json"
36− {
37− "quite": {
38− similar: "but not quite"
39− }
40− }
41− ],
42−} | (
43− 
44− # And with very basic brace matching
45− 
46− # Invalid End
47− ] 
48− 
49− # Other invalid ends
50− ( [ } ] )
51−
52− # A "valid" sequence
53− ( [ { key: () , other_key:( [ [] [[]] ] ), gaga } ] )
54−
55− # A "invalid" sequence
56− ( [ { key: () , other_key:( [ [] [[] ] ), gaga } ] )
57−
58− "A string\n whith escaped characters \" because we can"
59−)
60−
tests/syntax-tests/highlighted/Log/example.log−1
@@ -1,3 +1,2 @@
112021-03-06 23:22:21.392 https://[2001:db8:4006:812::200e]:8080/path/the%20page.html
222021-03-06 23:22:21 https://example.com:8080/path/the%20page(with_parens).html
3−2022-03-16T17:41:02.519 helix_term::application [WARN] unhandled window/showMessage: ShowMessageParams { typ: Error, message: "rust-analyzer failed to load workspace: Failed to read Cargo metadata from Cargo.toml file /home/zeta/dev/raytracer/Cargo.toml, cargo 1.61.0-nightly (65c8266 2022-03-09): Failed to run `\"cargo\" \"metadata\" \"--format-version\" \"1\" \"--manifest-path\" \"/home/zeta/dev/raytracer/Cargo.toml\" \"--filter-platform\" \"wasm32-unknown-unknown\"`: `cargo metadata` exited with an error: Updating crates.io index\nerror: failed to select a version for `parking_lot`.\n ... required by package `raytracer v0.1.0 (/home/zeta/dev/raytracer)`\nversions that meet the requirements `^0.12.0` are: 0.12.0\n\nthe package `raytracer` depends on `parking_lot`, with features: `wasm-bindgen` but `parking_lot` does not have these features.\n\n\nfailed to select a version for `parking_lot` which could resolve this conflict\n" }
tests/syntax-tests/highlighted/Svelte/App.svelte+1−5
@@ -27,13 +27,9 @@
2727</script>
2828
2929<script type="text/livescript">
30− // This block is a regression test for a bat panic when a LiveScript syntax definition is missing
30+ // This block is a regression test for a bat panic when a LiveScript syntax definition is missing
3131</script>
3232
33−<style lang="text/postcss">
34− /* This block is a regression test for a bat panic when a PostCSS syntax definition is missing */
35−</style>
36−
3733<style>
3834 main {
3935 position: relative;
tests/syntax-tests/highlighted/Syslog/example.syslog+3−3
@@ -1,7 +1,7 @@
11Apr 4 00:00:01 hostname-here systemd[1]: logrotate.service: Succeeded.
22Apr 4 00:00:01 hostname-here systemd[1]: Finished Rotate log files.
33Apr 4 00:00:01 hostname-here colord[920]: failed to get session [pid 137485]: No data available
4−Apr 4 00:00:21 hostname-here kernel: [55604.908232] audit: type=1400 audit(1617483621.094:28): apparmor="DENIED" operation="capable" profile="/usr/sbin/cups-browsed" pid=59311 comm="cups-browsed" capability=23 capname="sys_nice"
4+Apr 4 00:00:21 hostname-here kernel: [55604.908232] audit: type=1400 audit(1617483621.094:28): apparmor="DENIED" operation="capable" profile="/usr/sbin/cups-browsed" pid=59311 comm="cups-browsed" capability=23 capname="sys_nice"
55Apr 4 00:01:38 hostname-here systemd-resolved[721]: Server returned error NXDOMAIN, mitigating potential DNS violation DVE-2018-0001, retrying transaction with reduced feature level UDP.
66Apr 4 00:04:46 hostname-here ntpd[952]: Soliciting pool server 255.76.59.37
77Apr 4 00:05:21 hostname-here ntpd[952]: ::1 local addr 0:0:0:0:0:0:0:1 -> <null>
@@ -10,7 +10,7 @@
1010Apr 4 16:32:07 hostname-here NetworkManager[740]: <info> [1617629527.1101] manager: NetworkManager state is now CONNECTED_GLOBAL
1111Apr 4 22:00:45 hostname-here dbus-daemon[1094]: [session uid=1000 pid=1094] Successfully activated service 'io.github.celluloid_player.Celluloid'
1212Aug 11 13:29:06 hostname-here insomnia_insomnia.desktop[142666]: 13:29:06.316 › [updater] Updater not running platform=linux dev=false
13−Aug 11 13:36:34 192.168.220.5 nginx: 2021/08/11 13:36:34 [debug] 2031#2031: epoll add event: fd:6 op:1 ev:00002001
14−Aug 11 21:31:08 ::1 nginx: 2021/08/11 21:31:08 [debug] 760831#760831: epoll add event: fd:6 op:1 ev:10000001
13+Aug 11 13:36:34 192.168.220.5 nginx: 2021/08/11 13:36:34 [debug] 2031#2031: epoll add event: fd:6 op:1 ev:00002001
14+Aug 11 21:31:08 ::1 nginx: 2021/08/11 21:31:08 [debug] 760831#760831: epoll add event: fd:6 op:1 ev:10000001
1515Aug 11 21:40:31 hostname-here scop hello
1616Aug 16 21:38:21 hostname-here systemd[1]: Finished Cleanup of Temporary Directories.
tests/syntax-tests/highlighted/Vue/example.vue−5
@@ -8,11 +8,6 @@
88 </div>
99</template>
1010
11−<template lang='pug'>
12− #container.col
13− p This shall be formatted as Plain Text as long as a Pug syntax definition is missing
14−</template>
15−
1611<script>
1712import AppHeader from "@/components/AppHeader";
1813import AppLoadingIndicator from "@/components/AppLoadingIndicator";
tests/syntax-tests/highlighted/Zig/example.zig+39−39
@@ -1,18 +1,18 @@
11//! this is a top level doc, starts with "//!"
22
3−const std = @import("std");
3+const std = @import("std");
44
55pub fn main() anyerror!void {
6− const stdout = std.io.getStdOut().writer();
7− try stdout.print("Hello, {}!\n", .{"world"});
6+ const stdout = std.io.getStdOut().writer();
7+ try stdout.print("Hello, {}!\n", .{"world"});
88}
99
10−const expect = std.testing.expect;
10+const expect = std.testing.expect;
1111
1212test "comments" {
1313 // comments start with "//" until newline
1414 // foo bar baz
15− const x = true; // another comment
15+ const x = true; // another comment
1616 expect(x);
1717}
1818
@@ -25,26 +25,26 @@
2525 /// number of nanoseconds past the second
2626 nano: u32,
2727
28− const Self = @This();
28+ const Self = @This();
2929
3030 pub fn unixEpoch() Self {
3131 return Self{
32− .seconds = 0,
33− .nanos = 0,
32+ .seconds = 0,
33+ .nanos = 0,
3434 };
3535 }
3636};
3737
38−const my_val = switch (std.Target.current.os.tag) {
39− .linux => "Linux",
38+const my_val = switch (std.Target.current.os.tag) {
39+ .linux => "Linux",
4040 else => "not Linux",
4141};
4242
4343const Book = enum {
44− paperback,
45− hardcover,
46− ebook,
47− pdf,
44+ paperback,
45+ hardcover,
46+ ebook,
47+ pdf,
4848};
4949
5050const TokenType = union(enum) {
@@ -54,54 +54,54 @@
5454};
5555
5656const array_lit: [4]u8 = .{ 11, 22, 33, 44 };
57−const sentinal_lit = [_:0]u8{ 1, 2, 3, 4 };
57+const sentinal_lit = [_:0]u8{ 1, 2, 3, 4 };
5858
5959test "address of syntax" {
6060 // Get the address of a variable:
6161 const x: i32 = 1234;
62− const x_ptr = &x;
62+ const x_ptr = &x;
6363
6464 // Dereference a pointer:
6565 expect(x_ptr.* == 1234);
6666
6767 // When you get the address of a const variable, you get a const pointer to a single item.
68− expect(@TypeOf(x_ptr) == *const i32);
68+ expect(@TypeOf(x_ptr) == *const i32);
6969
7070 // If you want to mutate the value, you'd need an address of a mutable variable:
7171 var y: i32 = 5678;
72− const y_ptr = &y;
73− expect(@TypeOf(y_ptr) == *i32);
74− y_ptr.* += 1;
72+ const y_ptr = &y;
73+ expect(@TypeOf(y_ptr) == *i32);
74+ y_ptr.* += 1;
7575 expect(y_ptr.* == 5679);
7676}
7777
7878// integer literals
79−const decimal_int = 98222;
80−const hex_int = 0xff;
81−const another_hex_int = 0xFF;
82−const octal_int = 0o755;
83−const binary_int = 0b11110000;
79+const decimal_int = 98222;
80+const hex_int = 0xff;
81+const another_hex_int = 0xFF;
82+const octal_int = 0o755;
83+const binary_int = 0b11110000;
8484
8585// underscores may be placed between two digits as a visual separator
86−const one_billion = 1_000_000_000;
87−const binary_mask = 0b1_1111_1111;
88−const permissions = 0o7_5_5;
89−const big_address = 0xFF80_0000_0000_0000;
86+const one_billion = 1_000_000_000;
87+const binary_mask = 0b1_1111_1111;
88+const permissions = 0o7_5_5;
89+const big_address = 0xFF80_0000_0000_0000;
9090
9191// float literals
92−const floating_point = 123.0E+77;
93−const another_float = 123.0;
94−const yet_another = 123.0e+77;
92+const floating_point = 123.0E+77;
93+const another_float = 123.0;
94+const yet_another = 123.0e+77;
9595
96−const hex_floating_point = 0x103.70p-5;
97−const another_hex_float = 0x103.70;
98−const yet_another_hex_float = 0x103.70P-5;
96+const hex_floating_point = 0x103.70p-5;
97+const another_hex_float = 0x103.70;
98+const yet_another_hex_float = 0x103.70P-5;
9999
100100// underscores may be placed between two digits as a visual separator
101−const lightspeed = 299_792_458.000_000;
102−const nanosecond = 0.000_000_001;
103−const more_hex = 0x1234_5678.9ABC_CDEFp-10;
101+const lightspeed = 299_792_458.000_000;
102+const nanosecond = 0.000_000_001;
103+const more_hex = 0x1234_5678.9ABC_CDEFp-10;
104104
105105fn max(comptime T: type, a: T, b: T) T {
106− return if (a > b) a else b;
106+ return if (a > b) a else b;
107107}
tests/syntax-tests/highlighted/cmd-help/test.cmd-helpdeleted−54
@@ -1,54 +0,0 @@
1−bat 0.20.0 (e735562-modified)
2−A cat(1) clone with syntax highlighting and Git integration.
3−
4−USAGE:
5− bat [OPTIONS] [FILE]...
6− bat <SUBCOMMAND>
7−
8−OPTIONS:
9− -A, --show-all
10− Show non-printable characters (space, tab, newline, ..).
11−
12− -p, --plain Show plain style (alias for '--style=plain').
13− -l, --language <language> Set the language for syntax highlighting.
14− -H, --highlight-line <N:M>... Highlight lines N through M.
15− --file-name <name>... Specify the name to display for a file.
16− -d, --diff
17− Only show lines that have been added/removed/modified.
18−
19− --tabs <T> Set the tab width to T spaces.
20− --wrap <mode>
21− Specify the text-wrapping mode (*auto*, never, character).
22−
23− -n, --number
24− Show line numbers (alias for '--style=numbers').
25−
26− --color <when> When to use colors (*auto*, never, always).
27− --italic-text <when> Use italics in output (always, *never*)
28− --decorations <when>
29− When to show the decorations (*auto*, never, always).
30−
31− --paging <when>
32− Specify when to use the pager, or use `-P` to disable (*auto*, never,
33− always).
34− -m, --map-syntax <glob:syntax>...
35− Use the specified syntax for files matching the glob pattern
36− ('*.cpp:C++').
37− --theme <theme> Set the color theme for syntax highlighting.
38− --list-themes Display all supported highlighting themes.
39− --style <components>
40− Comma-separated list of style elements to display (*auto*, full, plain,
41− changes, header, grid, rule, numbers, snip).
42− -r, --line-range <N:M>... Only print the lines from N to M.
43− -L, --list-languages Display all supported languages.
44− -h, --help Print this help message.
45− -V, --version Show version information.
46−
47−ARGS:
48− <FILE>... File(s) to print / concatenate. Use '-' for standard input.
49−
50−SUBCOMMANDS:
51− cache Modify the syntax-definition and theme cache
52−
53−Note: `bat -h` prints a short and concise overview while `bat --help` gives all
54−details.
tests/syntax-tests/source/INI/test.infdeleted−5
@@ -1,5 +0,0 @@
1−[section]
2−key=value
3−# This file is just for testing that the INI syntax is registered to handle
4−# the .inf file extension, it is not testing the syntax highlighting capabilities
5−# of the INI syntax itself
tests/syntax-tests/source/JQ/LICENSE.mddeleted−25
@@ -1,25 +0,0 @@
1−The `sample.jq` file was taken from [SublimeJQ] under the following license:
2−
3−[SublimeJQ]: https://github.com/zogwarg/SublimeJQ
4−
5−MIT License
6−
7−Copyright (c) 2017 Thomas Buick
8−
9−Permission is hereby granted, free of charge, to any person obtaining a copy
10−of this software and associated documentation files (the "Software"), to deal
11−in the Software without restriction, including without limitation the rights
12−to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13−copies of the Software, and to permit persons to whom the Software is
14−furnished to do so, subject to the following conditions:
15−
16−The above copyright notice and this permission notice shall be included in all
17−copies or substantial portions of the Software.
18−
19−THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20−IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21−FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22−AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23−LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24−OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25−SOFTWARE.
tests/syntax-tests/source/JQ/sample.jqdeleted−60
@@ -1,60 +0,0 @@
1−import "../imported-file" ;
2−
3−# With Comments !
4−def weird($a; $b; $c):
5− [ $a, $b, $c ] | transpose | reduce .[][] as $item (
6− [];
7− . + $item.property
8− )
9−;
10−
11−. | weird (.a; .b; .c) |
12−
13−(
14−
15−if (. | contains("never") ) then
16− "Why yes"
17−else
18− 12.23
19−end
20−
21−) as $never |
22−
23−{
24− hello,
25− why: "because",
26− hello: ( weird | ascii_upcase ),
27− format_eg: ( . | @json "My json string \( . | this | part | just | white | ascii_upcase | transpose)" ),
28− never: $never,
29− "literal_key": literal_value,
30− "this": 12.1e12,
31− "part": "almost"
32− "like": [
33− 12,
34− 2
35− "json"
36− {
37− "quite": {
38− similar: "but not quite"
39− }
40− }
41− ],
42−} | (
43−
44− # And with very basic brace matching
45−
46− # Invalid End
47− ]
48−
49− # Other invalid ends
50− ( [ } ] )
51−
52− # A "valid" sequence
53− ( [ { key: () , other_key:( [ [] [[]] ] ), gaga } ] )
54−
55− # A "invalid" sequence
56− ( [ { key: () , other_key:( [ [] [[] ] ), gaga } ] )
57−
58− "A string\n whith escaped characters \" because we can"
59−)
60−
tests/syntax-tests/source/Log/example.log−1
@@ -1,3 +1,2 @@
112021-03-06 23:22:21.392 https://[2001:db8:4006:812::200e]:8080/path/the%20page.html
222021-03-06 23:22:21 https://example.com:8080/path/the%20page(with_parens).html
3−2022-03-16T17:41:02.519 helix_term::application [WARN] unhandled window/showMessage: ShowMessageParams { typ: Error, message: "rust-analyzer failed to load workspace: Failed to read Cargo metadata from Cargo.toml file /home/zeta/dev/raytracer/Cargo.toml, cargo 1.61.0-nightly (65c8266 2022-03-09): Failed to run `\"cargo\" \"metadata\" \"--format-version\" \"1\" \"--manifest-path\" \"/home/zeta/dev/raytracer/Cargo.toml\" \"--filter-platform\" \"wasm32-unknown-unknown\"`: `cargo metadata` exited with an error: Updating crates.io index\nerror: failed to select a version for `parking_lot`.\n ... required by package `raytracer v0.1.0 (/home/zeta/dev/raytracer)`\nversions that meet the requirements `^0.12.0` are: 0.12.0\n\nthe package `raytracer` depends on `parking_lot`, with features: `wasm-bindgen` but `parking_lot` does not have these features.\n\n\nfailed to select a version for `parking_lot` which could resolve this conflict\n" }
tests/syntax-tests/source/Svelte/App.svelte+1−5
@@ -27,13 +27,9 @@
2727</script>
2828
2929<script type="text/livescript">
30− // This block is a regression test for a bat panic when a LiveScript syntax definition is missing
30+ // This block is a regression test for a bat panic when a LiveScript syntax definition is missing
3131</script>
3232
33−<style lang="text/postcss">
34− /* This block is a regression test for a bat panic when a PostCSS syntax definition is missing */
35−</style>
36−
3733<style>
3834 main {
3935 position: relative;
tests/syntax-tests/source/Vue/example.vue−5
@@ -8,11 +8,6 @@
88 </div>
99</template>
1010
11−<template lang='pug'>
12− #container.col
13− p This shall be formatted as Plain Text as long as a Pug syntax definition is missing
14−</template>
15−
1611<script>
1712import AppHeader from "@/components/AppHeader";
1813import AppLoadingIndicator from "@/components/AppLoadingIndicator";
tests/syntax-tests/source/cmd-help/test.cmd-helpdeleted−54
@@ -1,54 +0,0 @@
1−bat 0.20.0 (e735562-modified)
2−A cat(1) clone with syntax highlighting and Git integration.
3−
4−USAGE:
5− bat [OPTIONS] [FILE]...
6− bat <SUBCOMMAND>
7−
8−OPTIONS:
9− -A, --show-all
10− Show non-printable characters (space, tab, newline, ..).
11−
12− -p, --plain Show plain style (alias for '--style=plain').
13− -l, --language <language> Set the language for syntax highlighting.
14− -H, --highlight-line <N:M>... Highlight lines N through M.
15− --file-name <name>... Specify the name to display for a file.
16− -d, --diff
17− Only show lines that have been added/removed/modified.
18−
19− --tabs <T> Set the tab width to T spaces.
20− --wrap <mode>
21− Specify the text-wrapping mode (*auto*, never, character).
22−
23− -n, --number
24− Show line numbers (alias for '--style=numbers').
25−
26− --color <when> When to use colors (*auto*, never, always).
27− --italic-text <when> Use italics in output (always, *never*)
28− --decorations <when>
29− When to show the decorations (*auto*, never, always).
30−
31− --paging <when>
32− Specify when to use the pager, or use `-P` to disable (*auto*, never,
33− always).
34− -m, --map-syntax <glob:syntax>...
35− Use the specified syntax for files matching the glob pattern
36− ('*.cpp:C++').
37− --theme <theme> Set the color theme for syntax highlighting.
38− --list-themes Display all supported highlighting themes.
39− --style <components>
40− Comma-separated list of style elements to display (*auto*, full, plain,
41− changes, header, grid, rule, numbers, snip).
42− -r, --line-range <N:M>... Only print the lines from N to M.
43− -L, --list-languages Display all supported languages.
44− -h, --help Print this help message.
45− -V, --version Show version information.
46−
47−ARGS:
48− <FILE>... File(s) to print / concatenate. Use '-' for standard input.
49−
50−SUBCOMMANDS:
51− cache Modify the syntax-definition and theme cache
52−
53−Note: `bat -h` prints a short and concise overview while `bat --help` gives all
54−details.