mirror of
https://github.com/sharkdp/bat
synced 2026-08-03 18:51:44 +00:00
Compare commits
101 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9e65ecd03e | |||
| 9cb43ef64d | |||
| bb18ece8a4 | |||
| 2ab6474761 | |||
| fe20328ab7 | |||
| d84ac09abd | |||
| 69e6cae0a7 | |||
| 302707f3ce | |||
| 2e2043971b | |||
| e54e218e3b | |||
| bd17fd571f | |||
| 3f6e88b4be | |||
| 28af18ba27 | |||
| 8f1babf346 | |||
| fa25695b74 | |||
| 943b1f82b6 | |||
| b7a09516e7 | |||
| c4031ad65c | |||
| 2eaced4d30 | |||
| bdea2fe94c | |||
| c96ff30876 | |||
| 4c100cffdb | |||
| d6abad908a | |||
| f1129189ea | |||
| 7e84477408 | |||
| 6b86ab5cd0 | |||
| 5074b96cd5 | |||
| 3094ac90b7 | |||
| 35b6067496 | |||
| 5aa20c090b | |||
| 9c371ed8a2 | |||
| f03ab11623 | |||
| 887e61a99d | |||
| 0aca8cab0b | |||
| d08d1f8c45 | |||
| 403ab6e443 | |||
| b8687bc969 | |||
| 9166c9dd35 | |||
| cc52f79e42 | |||
| 59140b458c | |||
| 82981c9663 | |||
| 157b8dd848 | |||
| 1fb669ae1a | |||
| 7d07aa395a | |||
| c2c7070712 | |||
| daf06bb026 | |||
| 5b11b1ba47 | |||
| ee287447c5 | |||
| 257f978ceb | |||
| 8e803bdb02 | |||
| a265242e6e | |||
| 3aa9b31bda | |||
| c692c4770a | |||
| 6ceba56288 | |||
| 4be66f8b88 | |||
| 54a85d98f1 | |||
| 491a5a17f3 | |||
| b3373398e8 | |||
| 0040fef215 | |||
| 1a6e8d297f | |||
| f39487fca9 | |||
| 2596bfe7a7 | |||
| 406bffa8c8 | |||
| 48441b99ef | |||
| ce4717144a | |||
| f59d00d4c7 | |||
| dcfdbf82dd | |||
| 0cb884d501 | |||
| 7bc4020a92 | |||
| 0792195156 | |||
| 83f24ffcfb | |||
| 74ec390770 | |||
| 9014ffcfd8 | |||
| 81af375289 | |||
| d707eab95c | |||
| d64c55ef11 | |||
| 2b1d53fb27 | |||
| bf696f58c8 | |||
| 296bad8ffd | |||
| 94310af30c | |||
| 38c096bf79 | |||
| 696d1b3ed3 | |||
| 17d98724a5 | |||
| 7d7ee1b594 | |||
| 682b4209f2 | |||
| 41ddcbd240 | |||
| 48a7ce3bf2 | |||
| 3bcc4d0d55 | |||
| 8821bca656 | |||
| 56111aa20d | |||
| 5fe8a8342b | |||
| 989109145a | |||
| 23afc8e90c | |||
| 8e18786556 | |||
| 81488adf8b | |||
| e37e9c1214 | |||
| a4828387c1 | |||
| abeac8b12e | |||
| 82e7786e74 | |||
| 0064321323 | |||
| 9e622a1a5f |
+12
-6
@@ -70,9 +70,6 @@
|
||||
[submodule "assets/syntaxes/JavaScript (Babel)"]
|
||||
path = assets/syntaxes/02_Extra/JavaScript (Babel)
|
||||
url = https://github.com/babel/babel-sublime
|
||||
[submodule "assets/syntaxes/Cabal"]
|
||||
path = assets/syntaxes/02_Extra/Cabal
|
||||
url = https://github.com/SublimeHaskell/SublimeHaskell
|
||||
[submodule "assets/syntaxes/Dart"]
|
||||
path = assets/syntaxes/02_Extra/Dart
|
||||
url = https://github.com/guillermooo/dart-sublime-bundle
|
||||
@@ -166,9 +163,6 @@
|
||||
[submodule "assets/themes/Nord-sublime"]
|
||||
path = assets/themes/Nord-sublime
|
||||
url = https://github.com/crabique/Nord-plist.git
|
||||
[submodule "assets/themes/solarized-sublime"]
|
||||
path = assets/themes/solarized-sublime
|
||||
url = https://github.com/paulcpederson/solarized-sublime.git
|
||||
[submodule "assets/syntaxes/Vue"]
|
||||
path = assets/syntaxes/02_Extra/Vue
|
||||
url = https://github.com/vuejs/vue-syntax-highlight.git
|
||||
@@ -179,3 +173,15 @@
|
||||
[submodule "assets/syntaxes/02_Extra/Stylus"]
|
||||
path = assets/syntaxes/02_Extra/Stylus
|
||||
url = https://github.com/billymoon/Stylus
|
||||
[submodule "assets/themes/Solarized"]
|
||||
path = assets/themes/Solarized
|
||||
url = https://github.com/braver/Solarized
|
||||
[submodule "assets/syntaxes/02_Extra/Fortran"]
|
||||
path = assets/syntaxes/02_Extra/Fortran
|
||||
url = https://github.com/315234/SublimeFortran
|
||||
[submodule "assets/syntaxes/02_Extra/Email"]
|
||||
path = assets/syntaxes/02_Extra/Email
|
||||
url = https://github.com/mariozaizar/email.sublime-syntax.git
|
||||
[submodule "assets/syntaxes/02_Extra/QML"]
|
||||
path = assets/syntaxes/02_Extra/QML
|
||||
url = https://github.com/skozlovf/Sublime-QML
|
||||
|
||||
+3
-3
@@ -32,15 +32,15 @@ matrix:
|
||||
|
||||
# Minimum Rust supported channel.
|
||||
- os: linux
|
||||
rust: 1.37.0
|
||||
rust: 1.40.0
|
||||
env: TARGET=x86_64-unknown-linux-gnu
|
||||
- os: linux
|
||||
rust: 1.37.0
|
||||
rust: 1.40.0
|
||||
env:
|
||||
- TARGET=x86_64-unknown-linux-musl
|
||||
- CC_x86_64_unknown_linux_musl=/usr/bin/musl-gcc
|
||||
- os: osx
|
||||
rust: 1.37.0
|
||||
rust: 1.40.0
|
||||
env: TARGET=x86_64-apple-darwin
|
||||
|
||||
# Disable nightly for now
|
||||
|
||||
+87
-10
@@ -1,15 +1,92 @@
|
||||
# Upcoming release
|
||||
|
||||
# unreleased
|
||||
|
||||
## Features
|
||||
## Bugfixes
|
||||
## Other
|
||||
## `bat` as a library
|
||||
## New syntaxes
|
||||
## New themes
|
||||
## `bat` as a library
|
||||
## Packaging
|
||||
|
||||
# v0.15.3
|
||||
|
||||
## Bugfixes
|
||||
|
||||
- Added missing Solarized themes, see #1027
|
||||
- Fixed highlighting bug in Haskell source files, see #1026
|
||||
|
||||
# v0.15.3
|
||||
|
||||
## Bugfixes
|
||||
|
||||
- Cannot run `bat` with relative paths, see #1022
|
||||
- bat mishighlights Users that start with digits in SSH config, see #984
|
||||
|
||||
## New syntaxes
|
||||
|
||||
- SML, see #1005 (@kopecs)
|
||||
|
||||
## Other
|
||||
|
||||
- Some syntaxes and themes have been updated to the latest version
|
||||
|
||||
# v0.15.2
|
||||
|
||||
## Bugfixes
|
||||
|
||||
- Fix syntax detection for files called 'rails', see #1008
|
||||
- Fix potential errors with syntax detection for symlinked files, see #1001
|
||||
- `--map-syntax` doesn't work with names provided through `--file-name` (@eth-p)
|
||||
|
||||
## Other
|
||||
|
||||
- Add padding above headers when not using a grid, see #968 and #981 (@pt2121)
|
||||
- bat now prints an error if an invalid syntax is specified via `-l` or `--map-syntax`, see #1004 (@eth-p)
|
||||
|
||||
## `bat` as a library
|
||||
|
||||
- `PrettyPrinter::vcs_modification_markers` has been marked deprecated when building without the `git` feature, see #997 and #1020 (@eth-p, @sharkdp)
|
||||
|
||||
## Packaging
|
||||
|
||||
- Compilation problems with `onig_sys` on various platforms have been resolved by upgrading to `syntect 4.2`, which includes a new `onig` version that allows to build `onig_sys` without the `bindgen` dependency. This removes the need for `libclang(-dev)` to be installed to compile `bat`. Package maintainers might want to remove `clang` as a build dependency. See #650 for more details.
|
||||
|
||||
# v0.15.1
|
||||
|
||||
## Bugfixes
|
||||
|
||||
- Fix highlighting of Markdown files, see #963 and #977
|
||||
- Fix `base16` theme (was broken since in v0.14), see #972, #934 and #979 (@mk12).
|
||||
Users suffering from #865 ("no color for bat in ssh from a Windows client") can use the `ansi-dark` and `ansi-light` themes from now on.
|
||||
|
||||
## New syntaxes
|
||||
|
||||
- Fortran, see #957
|
||||
- Email (@mariozaizar)
|
||||
- QML, see #962 (@pylipp)
|
||||
|
||||
# v0.15.0
|
||||
|
||||
## Features
|
||||
|
||||
- Add a new `--diff`/`-d` option that can be used to only show lines surrounding
|
||||
Git changes, i.e. added, removed or modified lines. The amount of additional
|
||||
context can be controlled with `--diff-context=N`. See #23 and #940
|
||||
|
||||
## Bugfixes
|
||||
|
||||
- Error message printed in the middle of the output for another file, see #946
|
||||
- Performance improvements when using custom caches (via `bat cache --build`): the `bat` startup time should now be twice as fast (@lzutao).
|
||||
|
||||
## Themes
|
||||
|
||||
- Updated version of the Solarized dark/light themes, see #941
|
||||
|
||||
## `bat` as a library
|
||||
|
||||
- There are a few changes in the "low level" API (the `Config` struct has changed and
|
||||
the error handler needs a new `&mut dyn Write` argument). The high-level API is not
|
||||
affected.
|
||||
|
||||
# v0.14.0
|
||||
|
||||
@@ -414,7 +491,7 @@ You can see the API documentation here: https://docs.rs/bat/
|
||||
## Bugfixes
|
||||
|
||||
- Bat Panics on Haskell Source Code, see #314
|
||||
- Disable wrapping when `--style=plain`/`-p` is used, see #289
|
||||
- Disable wrapping when `--style=plain`/`-p` is used, see #289
|
||||
|
||||
## Other
|
||||
|
||||
@@ -469,7 +546,7 @@ You can see the API documentation here: https://docs.rs/bat/
|
||||
## Bugfixes
|
||||
|
||||
- Fixed panic when running `bat --list-languages | head`, see #232 (@mchlrhw)
|
||||
- Respect `--color` settings for `--list-themes` and `--list-languages`, see #233
|
||||
- Respect `--color` settings for `--list-themes` and `--list-languages`, see #233
|
||||
- Git modifications now work on Windows
|
||||
|
||||
## Other
|
||||
@@ -499,7 +576,7 @@ You can see the API documentation here: https://docs.rs/bat/
|
||||
## Other
|
||||
|
||||
* Extended and cleaned-up `--help` text.
|
||||
* Added initial version of a man page, see #52
|
||||
* Added initial version of a man page, see #52
|
||||
* New README sections: *Development* and *Troubleshooting*, see #220
|
||||
|
||||
# v0.5.0
|
||||
@@ -514,18 +591,18 @@ You can see the API documentation here: https://docs.rs/bat/
|
||||
|
||||
## Changes
|
||||
|
||||
- The customization of syntax sets and theme sets is now separated. Syntax definitions are now loaded *in addition* to the ones that are stored in the `bat` binary by default. Please refer to these new sections in the README: [Adding new syntaxes](https://github.com/sharkdp/bat#adding-new-syntaxes--language-definitions), [Adding new themes](https://github.com/sharkdp/bat#adding-new-themes), also see #172
|
||||
- The customization of syntax sets and theme sets is now separated. Syntax definitions are now loaded *in addition* to the ones that are stored in the `bat` binary by default. Please refer to these new sections in the README: [Adding new syntaxes](https://github.com/sharkdp/bat#adding-new-syntaxes--language-definitions), [Adding new themes](https://github.com/sharkdp/bat#adding-new-themes), also see #172
|
||||
- The color for the filename is now the default foreground color. The colors for the grid and the line numbers is now determined from the syntax highlighting theme, which now also works for light backgrounds, see #178.
|
||||
|
||||
## Bugfixes
|
||||
|
||||
- Escape Sequences get partially stripped, see #182 (@eth-p)
|
||||
- Use separate Git repository for snapshot testing, see #165 and #161
|
||||
- Markdown breaking on JavaScript, see #183
|
||||
- Markdown breaking on JavaScript, see #183
|
||||
|
||||
## Other
|
||||
|
||||
- Binaries for armv7 are now provided, see #196
|
||||
- Binaries for armv7 are now provided, see #196
|
||||
- `bat` is now in the official [Arch package repositories](https://www.archlinux.org/packages/community/x86_64/bat/).
|
||||
- Optimizations in the RGB => 8-bit conversion (@mina86)
|
||||
|
||||
@@ -535,7 +612,7 @@ You can see the API documentation here: https://docs.rs/bat/
|
||||
|
||||
## Bugfixes
|
||||
|
||||
- Fix problem with `cargo test` when `bat` is not checked out in a Git repository, see #161
|
||||
- Fix problem with `cargo test` when `bat` is not checked out in a Git repository, see #161
|
||||
|
||||
# v0.4.0
|
||||
|
||||
|
||||
Generated
+73
-260
@@ -79,65 +79,43 @@ name = "autocfg"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "backtrace"
|
||||
version = "0.3.46"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"backtrace-sys 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "backtrace-sys"
|
||||
version = "0.1.36"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "base64"
|
||||
version = "0.10.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "base64"
|
||||
version = "0.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "base64"
|
||||
version = "0.12.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "bat"
|
||||
version = "0.14.0"
|
||||
version = "0.15.4"
|
||||
dependencies = [
|
||||
"ansi_colours 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"ansi_term 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"assert_cmd 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"console 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"console 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"content_inspector 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"error-chain 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"git2 0.13.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"git2 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"globset 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"liquid 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"path_abs 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_yaml 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"shell-words 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syntect 4.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_yaml 0.8.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"shell-words 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syntect 4.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"wild 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"wild 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -146,29 +124,7 @@ version = "1.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bindgen"
|
||||
version = "0.50.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cexpr 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"clang-sys 0.28.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"shlex 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"which 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -244,14 +200,6 @@ dependencies = [
|
||||
"jobserver 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cexpr"
|
||||
version = "0.3.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "0.1.10"
|
||||
@@ -267,16 +215,6 @@ dependencies = [
|
||||
"time 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clang-sys"
|
||||
version = "0.28.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "2.33.0"
|
||||
@@ -292,30 +230,20 @@ dependencies = [
|
||||
"vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clicolors-control"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "console"
|
||||
version = "0.10.0"
|
||||
version = "0.11.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"clicolors-control 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"encode_unicode 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"terminal_size 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"termios 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -459,18 +387,6 @@ name = "encoding_index_tests"
|
||||
version = "0.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "env_logger"
|
||||
version = "0.6.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "error-chain"
|
||||
version = "0.12.2"
|
||||
@@ -479,14 +395,6 @@ dependencies = [
|
||||
"version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "failure"
|
||||
version = "0.1.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"backtrace 0.3.46 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fake-simd"
|
||||
version = "0.1.2"
|
||||
@@ -522,14 +430,6 @@ name = "fuchsia-cprng"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "fxhash"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "generic-array"
|
||||
version = "0.12.3"
|
||||
@@ -550,12 +450,12 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "git2"
|
||||
version = "0.13.3"
|
||||
version = "0.13.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libgit2-sys 0.12.4+1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libgit2-sys 0.12.5+1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
@@ -585,14 +485,6 @@ dependencies = [
|
||||
"libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "humantime"
|
||||
version = "1.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "idna"
|
||||
version = "0.1.5"
|
||||
@@ -656,7 +548,7 @@ name = "kstring"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -676,7 +568,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "libgit2-sys"
|
||||
version = "0.12.4+1.0.0"
|
||||
version = "0.12.5+1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@@ -685,15 +577,6 @@ dependencies = [
|
||||
"pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libloading"
|
||||
version = "0.5.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libz-sys"
|
||||
version = "1.0.25"
|
||||
@@ -728,7 +611,7 @@ dependencies = [
|
||||
"liquid-core 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"liquid-derive 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"liquid-lib 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -744,7 +627,7 @@ dependencies = [
|
||||
"num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -803,15 +686,6 @@ dependencies = [
|
||||
"adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nom"
|
||||
version = "4.2.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-integer"
|
||||
version = "0.1.42"
|
||||
@@ -836,21 +710,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "onig"
|
||||
version = "5.0.0"
|
||||
version = "6.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"onig_sys 69.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"onig_sys 69.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "onig_sys"
|
||||
version = "69.2.0"
|
||||
version = "69.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"bindgen 0.50.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
@@ -861,9 +734,12 @@ version = "0.2.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "peeking_take_while"
|
||||
version = "0.1.2"
|
||||
name = "path_abs"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"std_prelude 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "percent-encoding"
|
||||
@@ -921,14 +797,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "plist"
|
||||
version = "0.5.5"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"base64 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"line-wrap 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"xml-rs 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
@@ -960,14 +836,6 @@ name = "proc-macro-hack"
|
||||
version = "0.5.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "0.4.30"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.10"
|
||||
@@ -998,19 +866,6 @@ dependencies = [
|
||||
"quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quick-error"
|
||||
version = "1.2.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "0.6.13"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.3"
|
||||
@@ -1102,11 +957,6 @@ dependencies = [
|
||||
"crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustc-demangle"
|
||||
version = "0.1.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "ryu"
|
||||
version = "1.0.3"
|
||||
@@ -1140,15 +990,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.106"
|
||||
version = "1.0.110"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "1.0.106"
|
||||
version = "1.0.110"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@@ -1163,17 +1013,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_yaml"
|
||||
version = "0.8.11"
|
||||
version = "0.8.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"dtoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
@@ -1190,12 +1040,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "shell-words"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "shlex"
|
||||
version = "0.1.1"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
@@ -1203,6 +1048,11 @@ name = "smallvec"
|
||||
version = "1.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "std_prelude"
|
||||
version = "0.2.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "strsim"
|
||||
version = "0.8.0"
|
||||
@@ -1220,7 +1070,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "syntect"
|
||||
version = "4.1.1"
|
||||
version = "4.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"bincode 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@@ -1230,11 +1080,11 @@ dependencies = [
|
||||
"fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"onig 5.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"plist 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"onig 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"plist 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@@ -1260,11 +1110,12 @@ dependencies = [
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "termcolor"
|
||||
version = "1.1.0"
|
||||
name = "terminal_size"
|
||||
version = "0.1.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"winapi-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1342,11 +1193,6 @@ name = "unicode-width"
|
||||
version = "0.1.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-xid"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-xid"
|
||||
version = "0.2.0"
|
||||
@@ -1382,11 +1228,6 @@ name = "vec_map"
|
||||
version = "0.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "version_check"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "version_check"
|
||||
version = "0.9.1"
|
||||
@@ -1415,18 +1256,9 @@ name = "wasi"
|
||||
version = "0.9.0+wasi-snapshot-preview1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "which"
|
||||
version = "2.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wild"
|
||||
version = "2.0.2"
|
||||
version = "2.0.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@@ -1494,12 +1326,9 @@ dependencies = [
|
||||
"checksum assert_cmd 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c88b9ca26f9c16ec830350d309397e74ee9abdfd8eb1f71cb6ecc71a3fc818da"
|
||||
"checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
|
||||
"checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
|
||||
"checksum backtrace 0.3.46 (registry+https://github.com/rust-lang/crates.io-index)" = "b1e692897359247cc6bb902933361652380af0f1b7651ae5c5013407f30e109e"
|
||||
"checksum backtrace-sys 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)" = "78848718ee1255a2485d1309ad9cdecfc2e7d0362dd11c6829364c6b35ae1bc7"
|
||||
"checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
|
||||
"checksum base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"
|
||||
"checksum base64 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "53d1ccbaf7d9ec9537465a97bf19edc1a4e158ecb49fc16178202238c569cc42"
|
||||
"checksum bincode 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5753e2a71534719bf3f4e57006c3a4f0d2c672a4b676eec84161f763eca87dbf"
|
||||
"checksum bindgen 0.50.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cb0e5a5f74b2bafe0b39379f616b5975e08bcaca4e779c078d5c31324147e9ba"
|
||||
"checksum bit-set 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e84c238982c4b1e1ee668d136c510c67a13465279c0cb367ea6baf6310620a80"
|
||||
"checksum bit-vec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f59bbe95d4e52a6398ec21238d31577f2b28a9d86807f06ca59d191d8440d0bb"
|
||||
"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
|
||||
@@ -1510,13 +1339,10 @@ dependencies = [
|
||||
"checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
|
||||
"checksum byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de"
|
||||
"checksum cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)" = "c3d87b23d6a92cd03af510a5ade527033f6aa6fa92161e2d5863a907d4c5e31d"
|
||||
"checksum cexpr 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "fce5b5fb86b0c57c20c834c1b412fd09c77c8a59b9473f86272709e78874cd1d"
|
||||
"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
|
||||
"checksum chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2"
|
||||
"checksum clang-sys 0.28.1 (registry+https://github.com/rust-lang/crates.io-index)" = "81de550971c976f176130da4b2978d3b524eaa0fd9ac31f3ceb5ae1231fb4853"
|
||||
"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
|
||||
"checksum clicolors-control 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90082ee5dcdd64dc4e9e0d37fbf3ee325419e39c0092191e0393df65518f741e"
|
||||
"checksum console 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6728a28023f207181b193262711102bfbaf47cc9d13bc71d0736607ef8efe88c"
|
||||
"checksum console 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dea0f3e2e8d7dba335e913b97f9e1992c86c4399d54f8be1d31c8727d0652064"
|
||||
"checksum constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
|
||||
"checksum content_inspector 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b7bda66e858c683005a53a9a60c69a4aca7eeaa45d124526e389f7aec8e62f38"
|
||||
"checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"
|
||||
@@ -1536,22 +1362,18 @@ dependencies = [
|
||||
"checksum encoding-index-singlebyte 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a"
|
||||
"checksum encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18"
|
||||
"checksum encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569"
|
||||
"checksum env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3"
|
||||
"checksum error-chain 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d371106cc88ffdfb1eabd7111e432da544f16f3e2d7bf1dfe8bf575f1df045cd"
|
||||
"checksum failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "b8529c2421efa3066a5cbd8063d2244603824daccb6936b079010bb2aa89464b"
|
||||
"checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
|
||||
"checksum fancy-regex 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b0e2de1b89ad299d536b7cefc5d177f5c005957fa2266ce58eca4d189e74bff5"
|
||||
"checksum flate2 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)" = "2cfff41391129e0a856d6d822600b8d71179d46879e310417eb9c762eb178b42"
|
||||
"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
|
||||
"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
|
||||
"checksum fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
|
||||
"checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec"
|
||||
"checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"
|
||||
"checksum git2 0.13.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bdfc6e264105ef4bf1f5c9a0907f285b43ed2ede987b4876556d0478359f0a0f"
|
||||
"checksum git2 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e1e02a51cd90229028c9bd8be0a0364f85b6b3199cccaa0ef39005ddbd5ac165"
|
||||
"checksum glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
|
||||
"checksum globset 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "7ad1da430bd7281dde2576f44c84cc3f0f7b475e7202cd503042dff01a8c8120"
|
||||
"checksum hermit-abi 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8a0d737e0f947a1864e93d33fdef4af8445a00d1ed8dc0c8ddb73139ea6abf15"
|
||||
"checksum humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
|
||||
"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e"
|
||||
"checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9"
|
||||
"checksum indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "076f042c5b7b98f31d205f1249267e12a6518c1481e9dae9764af19b707d2292"
|
||||
@@ -1563,8 +1385,7 @@ dependencies = [
|
||||
"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||
"checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f"
|
||||
"checksum libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)" = "99e85c08494b21a9054e7fe1374a732aeadaff3980b6990b94bfd3a70f690005"
|
||||
"checksum libgit2-sys 0.12.4+1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef2870ecd7b50a76391b108edc2c62283ad2b62e5b1ab4d5263ef1cd04ef1c44"
|
||||
"checksum libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753"
|
||||
"checksum libgit2-sys 0.12.5+1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3eadeec65514971355bf7134967a543f71372f35b53ac6c7143e7bd157f07535"
|
||||
"checksum libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe"
|
||||
"checksum line-wrap 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9"
|
||||
"checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83"
|
||||
@@ -1577,14 +1398,13 @@ dependencies = [
|
||||
"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
|
||||
"checksum memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400"
|
||||
"checksum miniz_oxide 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "aa679ff6578b1cddee93d7e82e263b94a575e0bfced07284eb0c037c1d2416a5"
|
||||
"checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6"
|
||||
"checksum num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba"
|
||||
"checksum num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096"
|
||||
"checksum once_cell 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b1c601810575c99596d4afc46f78a678c80105117c379eb3650cf99b8a21ce5b"
|
||||
"checksum onig 5.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e4e723fc996fff1aeab8f62205f3e8528bf498bdd5eadb2784d2d31f30077947"
|
||||
"checksum onig_sys 69.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0a8d4efbf5f59cece01f539305191485b651acb3785b9d5eef05749f0496514e"
|
||||
"checksum onig 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bd91ccd8a02fce2f7e8a86655aec67bc6c171e6f8e704118a0e8c4b866a05a8a"
|
||||
"checksum onig_sys 69.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3814583fad89f3c60ae0701d80e87e1fd3028741723deda72d0d4a0ecf0cb0db"
|
||||
"checksum opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
|
||||
"checksum peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
|
||||
"checksum path_abs 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "eb6b8e6dede0bf94e9300e669f335ba92d5fc9fc8be7f4b1ca8a05206489388c"
|
||||
"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
|
||||
"checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
|
||||
"checksum pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"
|
||||
@@ -1592,17 +1412,14 @@ dependencies = [
|
||||
"checksum pest_generator 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55"
|
||||
"checksum pest_meta 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d"
|
||||
"checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677"
|
||||
"checksum plist 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "9b59eb8d91dfa89208ec74a920e3b55f840476cf46568026c18dbaa2999e0d48"
|
||||
"checksum plist 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b336d94e8e4ce29bf15bba393164629764744c567e8ad306cc1fdd0119967fd"
|
||||
"checksum predicates 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "347a1b6f0b21e636bc9872fb60b83b8e185f6f5516298b8238699f7f9a531030"
|
||||
"checksum predicates-core 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "06075c3a3e92559ff8929e7a280684489ea27fe44805174c3ebd9328dcb37178"
|
||||
"checksum predicates-tree 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8e63c4859013b38a76eca2414c64911fba30def9e3202ac461a2d22831220124"
|
||||
"checksum proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)" = "0d659fe7c6d27f25e9d80a1a094c223f5246f6a6596453e09d7229bf42750b63"
|
||||
"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
|
||||
"checksum proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)" = "df246d292ff63439fea9bc8c0a270bed0e390d5ebd4db4ba15aba81111b5abe3"
|
||||
"checksum proc-quote 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "06ea4226882439d07839be9c7f683e13d6d69d9c2fe960d61f637d1e2fa4c081"
|
||||
"checksum proc-quote-impl 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7fb3ec628b063cdbcf316e06a8b8c1a541d28fa6c0a8eacd2bfb2b7f49e88aa0"
|
||||
"checksum quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
|
||||
"checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
|
||||
"checksum quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f"
|
||||
"checksum rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
|
||||
"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
|
||||
@@ -1614,26 +1431,25 @@ dependencies = [
|
||||
"checksum regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)" = "7fe5bd57d1d7414c6b5ed48563a2c855d995ff777729dcd91c369ec7fea395ae"
|
||||
"checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e"
|
||||
"checksum rust-argon2 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017"
|
||||
"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783"
|
||||
"checksum ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535622e6be132bccd223f4bb2b8ac8d53cda3c7a6394944d3b2b33fb974f9d76"
|
||||
"checksum safemem 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
|
||||
"checksum same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
|
||||
"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
|
||||
"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
|
||||
"checksum serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)" = "36df6ac6412072f67cf767ebbde4133a5b2e88e76dc6187fa7104cd16f783399"
|
||||
"checksum serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)" = "9e549e3abf4fb8621bd1609f11dfc9f5e50320802273b12f3811a67e6716ea6c"
|
||||
"checksum serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)" = "99e7b308464d16b56eba9964e4972a3eee817760ab60d88c3f86e1fecb08204c"
|
||||
"checksum serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)" = "818fbf6bfa9a42d3bfcaca148547aa00c7b915bec71d1757aa2d44ca68771984"
|
||||
"checksum serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)" = "da07b57ee2623368351e9a0488bb0b261322a15a6e0ae53e243cbdc0f4208da9"
|
||||
"checksum serde_yaml 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)" = "691b17f19fc1ec9d94ec0b5864859290dff279dbd7b03f017afda54eb36c3c35"
|
||||
"checksum serde_yaml 0.8.12 (registry+https://github.com/rust-lang/crates.io-index)" = "16c7a592a1ec97c9c1c68d75b6e537dcbf60c7618e038e7841e00af1d9ccf0c4"
|
||||
"checksum sha-1 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df"
|
||||
"checksum shell-words 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "39acde55a154c4cd3ae048ac78cc21c25f3a0145e44111b523279113dce0d94a"
|
||||
"checksum shlex 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2"
|
||||
"checksum shell-words 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b6fa3938c99da4914afedd13bf3d79bcb6c277d1b2c398d23257a304d9e1b074"
|
||||
"checksum smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05720e22615919e4734f6a99ceae50d00226c3c5aca406e102ebc33298214e0a"
|
||||
"checksum std_prelude 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "8207e78455ffdf55661170876f88daf85356e4edd54e0a3dbc79586ca1e50cbe"
|
||||
"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
|
||||
"checksum syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)" = "0df0eb663f387145cab623dea85b09c2c5b4b0aef44e945d928e682fce71bb03"
|
||||
"checksum syntect 4.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6bc79276a4d38e39fbeb83c5fd9c23fbd027eeec7c50ee6a3d07deee33d7f621"
|
||||
"checksum syntect 4.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "83b43a6ca1829ccb0c933b615c9ea83ffc8793ae240cecbd15119b13d741161d"
|
||||
"checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8"
|
||||
"checksum term_size 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9e5b9a66db815dcfd2da92db471106457082577c3c278d4138ab3e3b4e189327"
|
||||
"checksum termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f"
|
||||
"checksum terminal_size 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "8038f95fc7a6f351163f4b964af631bd26c9e828f7db085f2a84aca56f70d13b"
|
||||
"checksum termios 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6f0fcee7b24a25675de40d5bb4de6e41b0df07bc9856295e7e2b3a3600c400c2"
|
||||
"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
|
||||
"checksum thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14"
|
||||
@@ -1645,19 +1461,16 @@ dependencies = [
|
||||
"checksum unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4"
|
||||
"checksum unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0"
|
||||
"checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479"
|
||||
"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
|
||||
"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
|
||||
"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a"
|
||||
"checksum url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb"
|
||||
"checksum vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168"
|
||||
"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
|
||||
"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd"
|
||||
"checksum version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce"
|
||||
"checksum wait-timeout 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
|
||||
"checksum walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d"
|
||||
"checksum wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)" = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
|
||||
"checksum which 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b57acb10231b9493c8472b20cb57317d0679a49e0bdbee44b3b803a6473af164"
|
||||
"checksum wild 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "97d34fecce28871e5c0e059deae21ef7f7d13b98a5964b24c58b3735c8052fc8"
|
||||
"checksum wild 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4ba8b7242834f4698a54b1afac075446b29c96c8ed5dc17a1f76a264f8aaeed5"
|
||||
"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
|
||||
"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
|
||||
"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
|
||||
|
||||
+6
-5
@@ -7,7 +7,7 @@ license = "MIT/Apache-2.0"
|
||||
name = "bat"
|
||||
readme = "README.md"
|
||||
repository = "https://github.com/sharkdp/bat"
|
||||
version = "0.14.0"
|
||||
version = "0.15.4"
|
||||
exclude = [
|
||||
"assets/syntaxes/*",
|
||||
"assets/themes/*",
|
||||
@@ -39,18 +39,19 @@ regex-fancy = ["syntect/regex-fancy"] # Use the rust-only "fancy-regex" engine
|
||||
atty = { version = "0.2.14", optional = true }
|
||||
ansi_term = "^0.12.1"
|
||||
ansi_colours = "^1.0"
|
||||
console = "0.10"
|
||||
console = "0.11.2"
|
||||
dirs = { version = "2.0", optional = true }
|
||||
lazy_static = { version = "1.4", optional = true }
|
||||
wild = { version = "2.0", optional = true }
|
||||
content_inspector = "0.2.4"
|
||||
encoding = "0.2"
|
||||
shell-words = { version = "0.1.0", optional = true }
|
||||
shell-words = { version = "1.0.0", optional = true }
|
||||
unicode-width = "0.1.7"
|
||||
globset = "0.4"
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_yaml = "0.8"
|
||||
semver = "0.9"
|
||||
path_abs = { version = "0.5", default-features = false }
|
||||
|
||||
[dependencies.git2]
|
||||
version = "0.13"
|
||||
@@ -58,7 +59,7 @@ optional = true
|
||||
default-features = false
|
||||
|
||||
[dependencies.syntect]
|
||||
version = "4.1.0"
|
||||
version = "4.2.0"
|
||||
default-features = false
|
||||
features = ["parsing", "yaml-load", "dump-load", "dump-create"]
|
||||
|
||||
@@ -79,7 +80,7 @@ assert_cmd = "1.0.1"
|
||||
[build-dependencies]
|
||||
clap = { version = "2.33", optional = true }
|
||||
liquid = { version = "0.20", optional = true }
|
||||
lazy_static = { version = "1.4", optional = true }
|
||||
|
||||
[profile.release]
|
||||
lto = true
|
||||
codegen-units = 1
|
||||
|
||||
@@ -168,7 +168,7 @@ The [`prettybat`](https://github.com/eth-p/bat-extras/blob/master/doc/prettybat.
|
||||
|
||||
[](https://repology.org/project/bat/versions)
|
||||
|
||||
### On Ubuntu
|
||||
### On Ubuntu (using `apt`)
|
||||
*... and other Debian-based Linux distributions.*
|
||||
|
||||
`bat` is making its way through the [Ubuntu](https://packages.ubuntu.com/eoan/bat) and
|
||||
@@ -182,12 +182,22 @@ If your Ubuntu/Debian installation is new enough you can simply run:
|
||||
apt install bat
|
||||
```
|
||||
|
||||
If you install `bat` this way, please note that the executable may be installed as `batcat` instead of `bat` (due to [a name
|
||||
clash with another package](https://github.com/sharkdp/bat/issues/982)). You can set up a `bat -> batcat` symlink or alias to prevent any issues that may come up because of this and to be consistent with other distrutions:
|
||||
``` bash
|
||||
mkdir -p ~/.local/bin
|
||||
ln -s /usr/bin/batcat ~/.local/bin/bat
|
||||
```
|
||||
|
||||
### On Ubuntu (using most recent `.deb` packages)
|
||||
*... and other Debian-based Linux distributions.*
|
||||
|
||||
If the package has not yet been promoted to your Ubuntu/Debian installation, or you want
|
||||
the most recent release of `bat`, download the latest `.deb` package from the
|
||||
[release page](https://github.com/sharkdp/bat/releases) and install it via:
|
||||
|
||||
```bash
|
||||
sudo dpkg -i bat_0.13.0_amd64.deb # adapt version number and architecture
|
||||
sudo dpkg -i bat_0.15.4_amd64.deb # adapt version number and architecture
|
||||
```
|
||||
|
||||
### On Alpine Linux
|
||||
@@ -348,15 +358,13 @@ binaries are also available: look for archives with `musl` in the file name.
|
||||
|
||||
### From source
|
||||
|
||||
If you want to build `bat` from source, you need Rust 1.37 or
|
||||
If you want to build `bat` from source, you need Rust 1.40 or
|
||||
higher. You can then use `cargo` to build everything:
|
||||
|
||||
```bash
|
||||
cargo install bat
|
||||
cargo install --locked bat
|
||||
```
|
||||
|
||||
On some platforms, you might need to install `llvm` and/or `libclang-dev`.
|
||||
|
||||
## Customization
|
||||
|
||||
### Highlighting theme
|
||||
@@ -606,11 +614,11 @@ cargo build --bins
|
||||
cargo test
|
||||
|
||||
# Install (release version)
|
||||
cargo install
|
||||
cargo install --locked
|
||||
|
||||
# Build a bat binary with modified syntaxes and themes
|
||||
bash assets/create.sh
|
||||
cargo install -f
|
||||
cargo install --locked --force
|
||||
```
|
||||
|
||||
## Maintainers
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ environment:
|
||||
|
||||
install:
|
||||
- appveyor DownloadFile https://win.rustup.rs/ -FileName rustup-init.exe
|
||||
- rustup-init.exe -y --default-host %TARGET%
|
||||
- rustup-init.exe -y --default-host %TARGET% --profile minimal
|
||||
- set PATH=%PATH%;C:\cargo\bin
|
||||
- rustc -Vv
|
||||
- cargo -V
|
||||
|
||||
Vendored
+7
@@ -34,6 +34,7 @@ The following files have been manually modified after converting from a `.tmLang
|
||||
* `Dart.sublime-syntax` => removed `#regex.dart` include.
|
||||
* `INI.sublime-syntax` => added `.hgrc`, `hgrc`, and `desktop` file types.
|
||||
* `Org mode.sublime-syntax` => removed `task` file type.
|
||||
* `SML.sublime_syntax` => removed `ml` file type.
|
||||
|
||||
### Non-submodule additions
|
||||
|
||||
@@ -42,3 +43,9 @@ The following files have been manually modified after converting from a `.tmLang
|
||||
* `Rego.sublime-syntax` has been added manually from https://github.com/open-policy-agent/opa/blob/master/misc/syntax/sublime/rego.sublime-syntax
|
||||
as it is not kept in a standalone repository. The file is generated from
|
||||
https://github.com/open-policy-agent/opa/blob/master/misc/syntax/textmate/Rego.tmLanguage
|
||||
* `SML.sublime_syntax` has been added manually from
|
||||
https://github.com/seanjames777/SML-Language-Definitiona as it is not
|
||||
kept in a standalone repository. The file generated is from
|
||||
https://github.com/seanjames777/SML-Language-Definition/blob/master/sml.tmLanguage
|
||||
* `Cabal.sublime_syntax` has been added manually from
|
||||
https://github.com/SublimeHaskell/SublimeHaskell/ - we don't want to include the whole submodule because it includes other syntaxes ("Haskell improved") as well.
|
||||
|
||||
+168
@@ -0,0 +1,168 @@
|
||||
diff --git syntaxes/01_Packages/Markdown/Markdown.sublime-syntax syntaxes/01_Packages/Markdown/Markdown.sublime-syntax
|
||||
index 19dc685d..6afd87ae 100644
|
||||
--- syntaxes/01_Packages/Markdown/Markdown.sublime-syntax
|
||||
+++ syntaxes/01_Packages/Markdown/Markdown.sublime-syntax
|
||||
@@ -24,7 +24,6 @@ variables:
|
||||
)
|
||||
[ \t]*$ # followed by any number of tabs or spaces, followed by the end of the line
|
||||
)
|
||||
- setext_escape: ^(?=\s{0,3}(?:---+|===+)\s*$)
|
||||
block_quote: (?:[ ]{,3}>(?:.|$)) # between 0 and 3 spaces, followed by a greater than sign, followed by any character or the end of the line
|
||||
atx_heading: (?:[#]{1,6}\s*) # between 1 and 6 hashes, followed by any amount of whitespace
|
||||
indented_code_block: (?:[ ]{4}|\t) # 4 spaces or a tab
|
||||
@@ -277,69 +276,40 @@ contexts:
|
||||
8: markup.underline.link.markdown
|
||||
push: [link-ref-def, after-link-title, link-title]
|
||||
- match: '^(?=\S)(?![=-]{3,}\s*$)'
|
||||
- branch_point: heading2-branch
|
||||
- branch:
|
||||
- - not-heading2
|
||||
- - heading2
|
||||
-
|
||||
- not-paragraph:
|
||||
- - match: |-
|
||||
- (?x) # pop out of this context when one of the following conditions are met:
|
||||
- ^(?:
|
||||
- \s*$ # the line is blank (or only contains whitespace)
|
||||
- | (?=
|
||||
- {{block_quote}} # a block quote begins the line
|
||||
- | [ ]{,3}[*+-][ ] # an unordered list item begins the line
|
||||
- | [ ]{,3}1[.][ ] # an ordered list item with number "1" begins the line
|
||||
- | \# # an ATX heading begins the line
|
||||
- | [ ]{,3}<( # all types of HTML blocks except type 7 may interrupt a paragraph
|
||||
- {{html_tag_block_end_at_close_tag}} # 1
|
||||
- | !-- # 2
|
||||
- | \? # 3
|
||||
- | ![A-Z] # 4
|
||||
- | !\[CDATA\[ # 5
|
||||
- | {{html_tag_block_end_at_blank_line}} # 6
|
||||
+ push:
|
||||
+ - meta_scope: meta.paragraph.markdown
|
||||
+ - match: |-
|
||||
+ (?x) # pop out of this context when one of the following conditions are met:
|
||||
+ ^(?:
|
||||
+ \s*$ # the line is blank (or only contains whitespace)
|
||||
+ | (?=
|
||||
+ {{block_quote}} # a block quote begins the line
|
||||
+ | [ ]{,3}[*+-][ ] # an unordered list item begins the line
|
||||
+ | [ ]{,3}1[.][ ] # an ordered list item with number "1" begins the line
|
||||
+ | \# # an ATX heading begins the line
|
||||
+ | [ ]{,3}<( # all types of HTML blocks except type 7 may interrupt a paragraph
|
||||
+ {{html_tag_block_end_at_close_tag}} # 1
|
||||
+ | !-- # 2
|
||||
+ | \? # 3
|
||||
+ | ![A-Z] # 4
|
||||
+ | !\[CDATA\[ # 5
|
||||
+ | {{html_tag_block_end_at_blank_line}} # 6
|
||||
+ )
|
||||
)
|
||||
)
|
||||
- )
|
||||
- pop: true
|
||||
-
|
||||
- not-heading2:
|
||||
- - include: not-paragraph
|
||||
- - match: (?=\S)
|
||||
- branch_point: heading1-branch
|
||||
- branch:
|
||||
- - paragraph
|
||||
- - heading1
|
||||
- - match: ''
|
||||
- pop: true
|
||||
-
|
||||
- paragraph:
|
||||
- - meta_scope: meta.paragraph.markdown
|
||||
- - match: ^\s{0,3}===+\s*$
|
||||
- fail: heading1-branch
|
||||
- - match: ^\s{0,3}---+\s*$
|
||||
- fail: heading2-branch
|
||||
- - include: not-paragraph
|
||||
- - include: inline-bold-italic-linebreak
|
||||
- - include: scope:text.html.basic
|
||||
-
|
||||
- heading1:
|
||||
- - meta_scope: markup.heading.1.markdown
|
||||
- - include: inline-bold-italic-linebreak
|
||||
- - match: '^[ \t]{0,3}(={3,})(?=[ \t]*$)'
|
||||
- captures:
|
||||
- 1: markup.heading.1.setext.markdown punctuation.definition.heading.setext.markdown
|
||||
- pop: true
|
||||
-
|
||||
- heading2:
|
||||
- - meta_scope: markup.heading.2.markdown
|
||||
- - include: inline-bold-italic-linebreak
|
||||
- - match: '^[ \t]{0,3}(-{3,})(?=[ \t]*$)'
|
||||
- captures:
|
||||
- 1: markup.heading.2.setext.markdown punctuation.definition.heading.setext.markdown
|
||||
- pop: true
|
||||
-
|
||||
+ pop: true
|
||||
+ - include: inline-bold-italic-linebreak
|
||||
+ - include: scope:text.html.basic
|
||||
+ - match: '^(={3,})(?=[ \t]*$)'
|
||||
+ scope: markup.heading.1.setext.markdown
|
||||
+ captures:
|
||||
+ 1: punctuation.definition.heading.setext.markdown
|
||||
+ pop: true
|
||||
+ - match: '^(-{3,})(?=[ \t]*$)'
|
||||
+ scope: markup.heading.2.setext.markdown
|
||||
+ captures:
|
||||
+ 1: punctuation.definition.heading.setext.markdown
|
||||
+ pop: true
|
||||
link-ref-def:
|
||||
- meta_scope: meta.link.reference.def.markdown
|
||||
- match: ''
|
||||
@@ -430,8 +400,6 @@ contexts:
|
||||
push:
|
||||
- meta_scope: markup.bold.markdown
|
||||
- meta_content_scope: markup.italic.markdown
|
||||
- - match: '{{setext_escape}}'
|
||||
- pop: true
|
||||
- match: |-
|
||||
(?x)
|
||||
[ \t]*\*{4,} # if there are more than 3 its not applicable to be bold or italic
|
||||
@@ -446,8 +414,6 @@ contexts:
|
||||
scope: punctuation.definition.bold.end.markdown
|
||||
set:
|
||||
- meta_content_scope: markup.italic.markdown
|
||||
- - match: '{{setext_escape}}'
|
||||
- pop: true
|
||||
- match: |-
|
||||
(?x)
|
||||
[ \t]*\*{3,} # if there are more than 3 its not applicable to be bold or italic
|
||||
@@ -463,8 +429,6 @@ contexts:
|
||||
scope: punctuation.definition.italic.end.markdown
|
||||
set:
|
||||
- meta_content_scope: markup.bold.markdown
|
||||
- - match: '{{setext_escape}}'
|
||||
- pop: true
|
||||
- match: |-
|
||||
(?x)
|
||||
[ \t]*\*{3,} # if there are more than 3 its not applicable to be bold or italic
|
||||
@@ -727,8 +691,6 @@ contexts:
|
||||
scope: punctuation.definition.italic.begin.markdown
|
||||
push:
|
||||
- meta_scope: markup.italic.markdown
|
||||
- - match: '{{setext_escape}}'
|
||||
- pop: true
|
||||
- match: |-
|
||||
(?x)
|
||||
[ \t]*\*{4,} # if there are more than 3 its not applicable to be bold or italic
|
||||
@@ -745,8 +707,6 @@ contexts:
|
||||
scope: punctuation.definition.italic.begin.markdown
|
||||
push:
|
||||
- meta_scope: markup.italic.markdown
|
||||
- - match: '{{setext_escape}}'
|
||||
- pop: true
|
||||
- match: |-
|
||||
(?x)
|
||||
[ \t]*_{4,} # if there are more than 3 its not applicable to be bold or italic
|
||||
@@ -773,8 +733,6 @@ contexts:
|
||||
- include: bold-italic-trailing
|
||||
bold-italic-trailing:
|
||||
- include: scope:text.html.basic
|
||||
- - match: '{{setext_escape}}'
|
||||
- pop: true
|
||||
- match: ^\s*$\n?
|
||||
scope: invalid.illegal.non-terminated.bold-italic.markdown
|
||||
pop: true
|
||||
Vendored
BIN
Binary file not shown.
Vendored
-1
Submodule assets/syntaxes/02_Extra/Cabal deleted from 2d98cb79eb
Vendored
+1
-1
Submodule assets/syntaxes/02_Extra/Elixir updated: 89b3bada32...1f010d5f63
Vendored
+1
-1
Submodule assets/syntaxes/02_Extra/Elm updated: dfbb8bdc9a...e266d279c8
+1
Submodule assets/syntaxes/02_Extra/Email added at ee3e68fce2
+1
Submodule assets/syntaxes/02_Extra/Fortran added at dcf4f24f1c
Vendored
+1
-1
Submodule assets/syntaxes/02_Extra/Julia updated: 0ca4cc2990...6c0d770fc7
+1
Submodule assets/syntaxes/02_Extra/QML added at e3e058a21f
+103
@@ -0,0 +1,103 @@
|
||||
%YAML 1.2
|
||||
---
|
||||
# http://www.sublimetext.com/docs/3/syntax.html
|
||||
name: QML
|
||||
file_extensions:
|
||||
- qml
|
||||
- qmlproject
|
||||
scope: source.qml
|
||||
contexts:
|
||||
main:
|
||||
- match: /\*(?!/)
|
||||
comment: Block comment.
|
||||
push:
|
||||
- meta_scope: comment.block.documentation.qml
|
||||
- match: \*/
|
||||
pop: true
|
||||
- match: //.*$
|
||||
comment: Line comment.
|
||||
scope: comment.line.double-slash.qml
|
||||
- match: \b(import)\s+
|
||||
comment: import statement.
|
||||
captures:
|
||||
1: keyword.other.import.qml
|
||||
push:
|
||||
- meta_scope: meta.import.qml
|
||||
- match: $
|
||||
pop: true
|
||||
- match: '([\w\d\.]+)\s+(\d+\.\d+)(?:\s+(as)\s+([A-Z][\w\d]*))?'
|
||||
comment: "import Namespace VersionMajor.VersionMinor [as SingletonTypeIdentifier]"
|
||||
scope: meta.import.namespace.qml
|
||||
captures:
|
||||
1: entity.name.class.qml
|
||||
2: constant.numeric.qml
|
||||
3: keyword.other.import.qml
|
||||
4: entity.name.class.qml
|
||||
- match: '(\"[^\"]+\")(?:\s+(as)\s+([A-Z][\w\d]*))?'
|
||||
comment: "import <string> [as Script]"
|
||||
scope: meta.import.dirjs.qml
|
||||
captures:
|
||||
1: string.quoted.double.qml
|
||||
2: keyword.other.import.qml
|
||||
3: entity.name.class.qml
|
||||
- match: '\b[A-Z]\w*\b'
|
||||
comment: Capitalized word (class or enum).
|
||||
scope: support.class.qml
|
||||
- match: '(((^|\{)\s*)|\b)on[A-Z]\w*\b'
|
||||
comment: onSomething - handler.
|
||||
scope: support.class.qml
|
||||
- match: '(?:^|\{)\s*(id)\s*\:\s*([^;\s]+)\b'
|
||||
comment: "id: <something>"
|
||||
scope: meta.id.qml
|
||||
captures:
|
||||
1: keyword.other.qml
|
||||
2: storage.modifier.qml
|
||||
- match: '^\s*(?:(default|readonly)\s+)?(property)\s+(?:(alias)|([\w\<\>]+))\s+(\w+)'
|
||||
comment: property definition.
|
||||
scope: meta.propertydef.qml
|
||||
captures:
|
||||
1: keyword.other.qml
|
||||
2: keyword.other.qml
|
||||
3: keyword.other.qml
|
||||
4: storage.type.qml
|
||||
5: entity.other.attribute-name.qml
|
||||
- match: \b(signal)\s+(\w+)\s*
|
||||
comment: "signal <signalName>[([<type> <parameter>[, ...]])]"
|
||||
captures:
|
||||
1: keyword.other.qml
|
||||
2: support.function.qml
|
||||
push:
|
||||
- meta_scope: meta.signal.qml
|
||||
- match: ;|(?=/)|$
|
||||
pop: true
|
||||
- match: (\w+)\s+(\w+)
|
||||
scope: meta.signal.parameters.qml
|
||||
captures:
|
||||
1: storage.type.qml
|
||||
2: variable.parameter.qml
|
||||
- match: (?:\b|\s+)(?:(true|false|null|undefined)|(var|void)|(on|as|enum|connect|break|case|catch|continue|debugger|default|delete|do|else|finally|for|if|in|instanceof|new|return|switch|this|throw|try|typeof|while|with))\b
|
||||
comment: js keywords.
|
||||
scope: meta.keyword.qml
|
||||
captures:
|
||||
1: constant.language.qml
|
||||
2: storage.type.qml
|
||||
3: keyword.control.qml
|
||||
- match: '\b(function)\s+([\w_]+)\s*(?=\()'
|
||||
comment: function definition.
|
||||
scope: meta.function.qml
|
||||
captures:
|
||||
1: storage.type.qml
|
||||
2: entity.name.function.untitled
|
||||
- match: '\b[\w_]+\s*(?=\()'
|
||||
comment: function call.
|
||||
scope: support.function.qml
|
||||
- match: '(?:^|\{|;)\s*[a-z][\w\.]*\s*(?=\:)'
|
||||
comment: "property (property: <something>)."
|
||||
scope: entity.other.attribute-name.qml
|
||||
- match: (?<=\.)\b\w*
|
||||
comment: property of the variable (name.property).
|
||||
scope: entity.other.attribute-name.qml
|
||||
- match: '\b([a-z_]\w*)\b'
|
||||
comment: All non colored words are assumed to be variables.
|
||||
scope: variable.parameter
|
||||
- include: scope:source.js
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
%YAML 1.2
|
||||
---
|
||||
# http://www.sublimetext.com/docs/3/syntax.html
|
||||
name: SML
|
||||
file_extensions:
|
||||
- sml
|
||||
- cm
|
||||
- sig
|
||||
scope: source.sml
|
||||
contexts:
|
||||
main:
|
||||
- match: \b(EQUAL|GREATER|LESS|NONE|SOME|abstraction|abstype|and|andalso|array|as|before|bool|case|char|datatype|do|else|end|eqtype|exception|exn|false|fn|fun|functor|handle|if|in|include|infix|infixr|int|let|list|local|nil|nonfix|not|o|of|op|open|option|orelse|overload|print|raise|real|rec|ref|sharing|sig|signature|string|struct|structure|substring|then|true|type|unit|val|vector|where|while|with|withtype|word)\b
|
||||
comment: SML keywords
|
||||
scope: keyword.source.sml
|
||||
- match: '\b[0-9]+\b'
|
||||
comment: Numeric constants
|
||||
scope: constant.numeric.sml
|
||||
- match: '\b[A-Z]([A-z0-9]*)\b'
|
||||
comment: Built in types
|
||||
scope: support.type.sml
|
||||
- match: '"(\\"|[^"])*"'
|
||||
comment: String constant
|
||||
scope: string.sml
|
||||
- match: \(\*
|
||||
comment: Comment
|
||||
push:
|
||||
- meta_scope: comment.sml
|
||||
- match: \*\)
|
||||
pop: true
|
||||
- match: '(\(\)|=>|::|\[\]|->|:>)'
|
||||
comment: Character
|
||||
scope: constant.character.sml
|
||||
|
||||
Vendored
+1
-1
Submodule assets/syntaxes/02_Extra/ssh-config updated: 16e19d5da4...3ec06d0e9c
Vendored
BIN
Binary file not shown.
+1
Submodule assets/themes/Solarized added at 87e01090cf
Vendored
+59
-59
@@ -3,8 +3,8 @@
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<!--
|
||||
The colors in this theme are encoded as #RRGGBBAA where RR is an base16
|
||||
color number from 00 to 0f, and AA is the special value 0f to indicate
|
||||
The colors in this theme are encoded as #RRGGBBAA where RR is an ANSI
|
||||
palette number from 00 to 0f, and AA is the special value 00 to indicate
|
||||
that this encoding is being used.
|
||||
-->
|
||||
<key>author</key>
|
||||
@@ -19,21 +19,21 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>background</key>
|
||||
<string>#0000000f</string>
|
||||
<string>#00000000</string>
|
||||
<key>caret</key>
|
||||
<string>#0700000f</string>
|
||||
<string>#07000000</string>
|
||||
<key>foreground</key>
|
||||
<string>#0700000f</string>
|
||||
<string>#07000000</string>
|
||||
<key>invisibles</key>
|
||||
<string>#0800000f</string>
|
||||
<string>#08000000</string>
|
||||
<key>lineHighlight</key>
|
||||
<string>#0800000f</string>
|
||||
<string>#08000000</string>
|
||||
<key>selection</key>
|
||||
<string>#0b00000f</string>
|
||||
<string>#0b000000</string>
|
||||
<key>gutter</key>
|
||||
<string>#0a00000f</string>
|
||||
<string>#0a000000</string>
|
||||
<key>gutterForeground</key>
|
||||
<string>#0800000f</string>
|
||||
<string>#08000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -44,7 +44,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0700000f</string>
|
||||
<string>#07000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -55,7 +55,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0800000f</string>
|
||||
<string>#08000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -66,7 +66,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0700000f</string>
|
||||
<string>#07000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -77,7 +77,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0700000f</string>
|
||||
<string>#07000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -88,7 +88,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0700000f</string>
|
||||
<string>#07000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -99,7 +99,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0500000f</string>
|
||||
<string>#05000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -110,7 +110,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0700000f</string>
|
||||
<string>#07000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -121,7 +121,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0400000f</string>
|
||||
<string>#04000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -132,7 +132,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0e00000f</string>
|
||||
<string>#0e000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -143,7 +143,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0300000f</string>
|
||||
<string>#03000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -154,7 +154,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0f00000f</string>
|
||||
<string>#0f000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -165,7 +165,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0400000f</string>
|
||||
<string>#04000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -176,7 +176,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0500000f</string>
|
||||
<string>#05000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -187,7 +187,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0600000f</string>
|
||||
<string>#06000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -198,7 +198,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0200000f</string>
|
||||
<string>#02000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -209,7 +209,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0900000f</string>
|
||||
<string>#09000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -220,7 +220,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0900000f</string>
|
||||
<string>#09000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -231,7 +231,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0900000f</string>
|
||||
<string>#09000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -242,7 +242,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0900000f</string>
|
||||
<string>#09000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -253,7 +253,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0100000f</string>
|
||||
<string>#01000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -264,7 +264,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0900000f</string>
|
||||
<string>#09000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -275,7 +275,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0400000f</string>
|
||||
<string>#04000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -286,7 +286,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0500000f</string>
|
||||
<string>#05000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -297,7 +297,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0900000f</string>
|
||||
<string>#09000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -310,7 +310,7 @@
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
<key>foreground</key>
|
||||
<string>#0400000f</string>
|
||||
<string>#04000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -321,7 +321,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0900000f</string>
|
||||
<string>#09000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -334,7 +334,7 @@
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
<key>foreground</key>
|
||||
<string>#0300000f</string>
|
||||
<string>#03000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -347,7 +347,7 @@
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
<key>foreground</key>
|
||||
<string>#0500000f</string>
|
||||
<string>#05000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -358,7 +358,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0200000f</string>
|
||||
<string>#02000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -369,7 +369,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0100000f</string>
|
||||
<string>#01000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -380,7 +380,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0900000f</string>
|
||||
<string>#09000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -391,7 +391,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0900000f</string>
|
||||
<string>#09000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -402,9 +402,9 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>background</key>
|
||||
<string>#0b00000f</string>
|
||||
<string>#0b000000</string>
|
||||
<key>foreground</key>
|
||||
<string>#0700000f</string>
|
||||
<string>#07000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -415,7 +415,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0200000f</string>
|
||||
<string>#02000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -426,7 +426,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0100000f</string>
|
||||
<string>#01000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -437,7 +437,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0500000f</string>
|
||||
<string>#05000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -448,7 +448,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0600000f</string>
|
||||
<string>#06000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -459,7 +459,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0600000f</string>
|
||||
<string>#06000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -470,7 +470,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0600000f</string>
|
||||
<string>#06000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -481,7 +481,7 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#0500000f</string>
|
||||
<string>#05000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -492,9 +492,9 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>background</key>
|
||||
<string>#0100000f</string>
|
||||
<string>#01000000</string>
|
||||
<key>foreground</key>
|
||||
<string>#0f00000f</string>
|
||||
<string>#0f000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -505,9 +505,9 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>background</key>
|
||||
<string>#0900000f</string>
|
||||
<string>#09000000</string>
|
||||
<key>foreground</key>
|
||||
<string>#0000000f</string>
|
||||
<string>#00000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -518,9 +518,9 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>background</key>
|
||||
<string>#0e00000f</string>
|
||||
<string>#0e000000</string>
|
||||
<key>foreground</key>
|
||||
<string>#0f00000f</string>
|
||||
<string>#0f000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -531,9 +531,9 @@
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>background</key>
|
||||
<string>#0800000f</string>
|
||||
<string>#08000000</string>
|
||||
<key>foreground</key>
|
||||
<string>#0f00000f</string>
|
||||
<string>#0f000000</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
|
||||
Vendored
+1
-1
Submodule assets/themes/dracula-sublime updated: 811a634420...26c57ec282
Vendored
+1
-1
Submodule assets/themes/onehalf updated: fdcbffe317...970abdf26b
Vendored
-1
Submodule assets/themes/solarized-sublime deleted from 1394cf0f5f
@@ -12,16 +12,10 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
use std::fs;
|
||||
use std::path::Path;
|
||||
|
||||
use lazy_static::lazy_static;
|
||||
|
||||
// Read environment variables.
|
||||
lazy_static! {
|
||||
static ref PROJECT_NAME: &'static str = option_env!("PROJECT_NAME").unwrap_or("bat");
|
||||
static ref PROJECT_VERSION: &'static str = option_env!("CARGO_PKG_VERSION").unwrap();
|
||||
static ref EXECUTABLE_NAME: &'static str = option_env!("PROJECT_EXECUTABLE")
|
||||
.or(option_env!("PROJECT_NAME"))
|
||||
.unwrap_or("bat");
|
||||
}
|
||||
let project_name = option_env!("PROJECT_NAME").unwrap_or("bat");
|
||||
let executable_name = option_env!("PROJECT_EXECUTABLE").unwrap_or(project_name);
|
||||
static PROJECT_VERSION: &str = env!("CARGO_PKG_VERSION");
|
||||
|
||||
/// Generates a file from a liquid template.
|
||||
fn template(
|
||||
@@ -38,16 +32,16 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
}
|
||||
|
||||
let variables = liquid::object!({
|
||||
"PROJECT_NAME": PROJECT_NAME.to_owned(),
|
||||
"PROJECT_EXECUTABLE": EXECUTABLE_NAME.to_owned(),
|
||||
"PROJECT_VERSION": PROJECT_VERSION.to_owned(),
|
||||
"PROJECT_NAME": project_name,
|
||||
"PROJECT_EXECUTABLE": executable_name,
|
||||
"PROJECT_VERSION": PROJECT_VERSION,
|
||||
});
|
||||
|
||||
let out_dir_env = std::env::var_os("OUT_DIR").expect("OUT_DIR to be set in build.rs");
|
||||
let out_dir = Path::new(&out_dir_env);
|
||||
|
||||
std::fs::create_dir_all(out_dir.join("assets/manual")).unwrap();
|
||||
std::fs::create_dir_all(out_dir.join("assets/completions")).unwrap();
|
||||
fs::create_dir_all(out_dir.join("assets/manual")).unwrap();
|
||||
fs::create_dir_all(out_dir.join("assets/completions")).unwrap();
|
||||
|
||||
template(
|
||||
&variables,
|
||||
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
* linguist-vendored
|
||||
Vendored
+56
-14
@@ -7,6 +7,20 @@ set -o pipefail
|
||||
export LC_ALL=C
|
||||
export LANG=C
|
||||
|
||||
BAT="bat"
|
||||
if ! command -v bat &>/dev/null; then
|
||||
if command -v batcat &> /dev/null; then
|
||||
BAT="batcat"
|
||||
else
|
||||
tput setaf 1
|
||||
printf "%s\n%s\n" \
|
||||
"Unable to find a bat executable on your PATH." \
|
||||
"Please ensure that 'bat' exists and is not named something else."
|
||||
tput sgr0
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Modules:
|
||||
# -----------------------------------------------------------------------------
|
||||
@@ -41,33 +55,42 @@ _tool_:description() {
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
_bat_:run() {
|
||||
_out bat --version
|
||||
_out "$BAT" --version
|
||||
_out env | grep '^BAT_\|^PAGER='
|
||||
|
||||
local cache_dir="$(bat --cache-dir)"
|
||||
if [[ -f "${cache_dir}/syntaxes.bin" ]]; then
|
||||
_print_command "bat" "--list-languages"
|
||||
_print_command "$BAT" "--list-languages"
|
||||
echo "Found custom syntax set."
|
||||
fi
|
||||
|
||||
if [[ -f "${cache_dir}/themes.bin" ]]; then
|
||||
_print_command "bat" "--list-themes"
|
||||
_print_command "$BAT" "--list-themes"
|
||||
echo "Found custom theme set."
|
||||
fi
|
||||
}
|
||||
|
||||
_bat_config_:run() {
|
||||
if [[ -f "$(bat --config-file)" ]]; then
|
||||
_out_fence cat "$(bat --config-file)"
|
||||
if [[ -f "$("$BAT" --config-file)" ]]; then
|
||||
_out_fence cat "$("$BAT" --config-file)"
|
||||
fi
|
||||
}
|
||||
|
||||
_bat_wrapper_:run() {
|
||||
if file "$(which bat)" | grep "text executable" &> /dev/null; then
|
||||
_out_fence cat "$(which bat)"
|
||||
return
|
||||
_bat_wrapper_:detect_wrapper() {
|
||||
local bat="$1"
|
||||
if file "$(which "${bat}")" | grep "text executable" &> /dev/null; then
|
||||
_out_fence cat "$(which "${bat}")"
|
||||
return
|
||||
fi
|
||||
|
||||
printf "\nNo wrapper script for '%s'.\n" "${bat}"
|
||||
}
|
||||
|
||||
_bat_wrapper_:detect_wrapper bat
|
||||
if [[ "$BAT" != "bat" ]]; then
|
||||
_bat_wrapper_:detect_wrapper "$BAT"
|
||||
fi
|
||||
printf "\nNo wrapper script.\n"
|
||||
}
|
||||
|
||||
_bat_wrapper_function_:run() {
|
||||
@@ -75,17 +98,17 @@ _bat_wrapper_function_:run() {
|
||||
local command="$1"
|
||||
case "$("$SHELL" --version | head -n 1)" in
|
||||
*fish*)
|
||||
if "$SHELL" --login -i -c "type ${command}" 2>&1 | grep 'function' &>/dev/null; then
|
||||
if "$SHELL" --login -i -c "type ${command}" 2>&1 | grep 'function' &> /dev/null; then
|
||||
_out_fence "$SHELL" --login -i -c "functions ${command}"
|
||||
return
|
||||
fi ;;
|
||||
|
||||
*bash*|*zsh*)
|
||||
*bash* | *zsh*)
|
||||
local type="$("$SHELL" --login -i -c "type ${command}" 2>&1)"
|
||||
if grep 'function' <<< "$type" &>/dev/null; then
|
||||
if grep 'function' <<< "$type" &> /dev/null; then
|
||||
_out_fence "$SHELL" --login -i -c "declare -f ${command}"
|
||||
return
|
||||
elif grep 'alias' <<< "$type" &>/dev/null; then
|
||||
elif grep 'alias' <<< "$type" &> /dev/null; then
|
||||
_out_fence "$SHELL" --login -i -c "type ${command}"
|
||||
return
|
||||
fi ;;
|
||||
@@ -99,6 +122,9 @@ _bat_wrapper_function_:run() {
|
||||
|
||||
_bat_wrapper_function_:detect_wrapper bat
|
||||
_bat_wrapper_function_:detect_wrapper cat
|
||||
if [[ "$BAT" != "bat" ]]; then
|
||||
_bat_wrapper_function_:detect_wrapper "$BAT"
|
||||
fi
|
||||
}
|
||||
|
||||
_system_:run() {
|
||||
@@ -169,7 +195,8 @@ EOF
|
||||
declare -f "_$1_:run" \
|
||||
| sed 's/^ *//; s/;$//' \
|
||||
| grep '^_out[^ ]* ' \
|
||||
| sed 's/^_out[^ ]* //' 1>&2
|
||||
| sed 's/^_out[^ ]* //' \
|
||||
| sed "s/\"\$BAT\"/$BAT/" 1>&2
|
||||
|
||||
# Prompt
|
||||
printf "\n" 1>&2
|
||||
@@ -196,6 +223,21 @@ _run_module() {
|
||||
# Functions:
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
# Tell the user if their executable isn't named "bat".
|
||||
if [[ "$BAT" != "bat" ]] && [[ "$1" != '-y' ]]; then
|
||||
trap '_tput rmcup; exit 1' INT
|
||||
_tput smcup
|
||||
_tput clear
|
||||
_tput cup 0 0
|
||||
_tput setaf 1
|
||||
printf "The %s executable on your system is named '%s'.\n%s\n" "bat" "$BAT" \
|
||||
"If your issue is related to installation, please check that this isn't the issue."
|
||||
_tput sgr0
|
||||
printf "Press any key to continue...\n"
|
||||
read -rsn1
|
||||
_tput rmcup
|
||||
fi
|
||||
|
||||
# Ask for consent.
|
||||
if [[ "$1" == '-y' ]]; then
|
||||
_modules_consented=("${_modules[@]}")
|
||||
|
||||
+4
-4
@@ -180,7 +180,7 @@ apt install bat
|
||||
batの最新リリースを実行する場合、または Ubuntu/Debian の古いバージョンを使用している場合は、[release page](https://github.com/sharkdp/bat/releases) から最新の `.deb` パッケージをダウンロードし、
|
||||
次の方法でインストールします:
|
||||
```bash
|
||||
sudo dpkg -i bat_0.13.0_amd64.deb # adapt version number and architecture
|
||||
sudo dpkg -i bat_0.15.4_amd64.deb # adapt version number and architecture
|
||||
```
|
||||
|
||||
### On Alpine Linux
|
||||
@@ -345,7 +345,7 @@ ansible-galaxy install aeimer.install_bat
|
||||
そして `cargo` をビルドに対して使用します:
|
||||
|
||||
```bash
|
||||
cargo install bat
|
||||
cargo install --locked bat
|
||||
```
|
||||
|
||||
一部のプラットフォームでは `llvm` および/または `libclang-dev` のインストールが必要になる場合があります。
|
||||
@@ -594,11 +594,11 @@ cargo build --bins
|
||||
cargo test
|
||||
|
||||
# Install (release version)
|
||||
cargo install
|
||||
cargo install --locked
|
||||
|
||||
# Build a bat binary with modified syntaxes and themes
|
||||
bash assets/create.sh
|
||||
cargo install -f
|
||||
cargo install --locked --force
|
||||
```
|
||||
|
||||
## Maintainers
|
||||
|
||||
+4
-4
@@ -170,7 +170,7 @@ apt install bat
|
||||
만약 최근 릴리즈된 bat을 사용을 원하거나 buntu/Debian 예전 버전을 사용하는 경우, [릴리즈 페이지](https://github.com/sharkdp/bat/releases)에서 다음과 같이 `.deb` 패키지를 받아 설치 할 수도 있습니다:
|
||||
|
||||
```bash
|
||||
sudo dpkg -i bat_0.13.0_amd64.deb # adapt version number and architecture
|
||||
sudo dpkg -i bat_0.15.4_amd64.deb # adapt version number and architecture
|
||||
```
|
||||
|
||||
### On Alpine Linux
|
||||
@@ -327,7 +327,7 @@ ansible-galaxy install aeimer.install_bat
|
||||
`bat`의 소스를 직접 빌드하기 위해서는, Rust 1.36 이상이 필요하며 `cargo`를 이용해 빌드할 수 있습니다.
|
||||
|
||||
```bash
|
||||
cargo install bat
|
||||
cargo install --locked bat
|
||||
```
|
||||
|
||||
일부 플랫폼에서는 `llvm` 그리고/또는 `libclang-dev` 설치가 필요할 수도 있습니다.
|
||||
@@ -528,11 +528,11 @@ cargo build --bins
|
||||
cargo test
|
||||
|
||||
# Install (release version)
|
||||
cargo install
|
||||
cargo install --locked
|
||||
|
||||
# Build a bat binary with modified syntaxes and themes
|
||||
bash assets/create.sh
|
||||
cargo install -f
|
||||
cargo install --locked --force
|
||||
```
|
||||
|
||||
## 메인테이너들
|
||||
|
||||
+152
-49
@@ -8,6 +8,8 @@ use syntect::dumps::{dump_to_file, from_binary, from_reader};
|
||||
use syntect::highlighting::{Theme, ThemeSet};
|
||||
use syntect::parsing::{SyntaxReference, SyntaxSet, SyntaxSetBuilder};
|
||||
|
||||
use path_abs::PathAbs;
|
||||
|
||||
use crate::assets_metadata::AssetsMetadata;
|
||||
use crate::error::*;
|
||||
use crate::input::{InputReader, OpenedInput, OpenedInputKind};
|
||||
@@ -180,7 +182,7 @@ impl HighlightingAssets {
|
||||
theme
|
||||
);
|
||||
}
|
||||
&self.theme_set.themes[self.fallback_theme.unwrap_or(Self::default_theme())]
|
||||
&self.theme_set.themes[self.fallback_theme.unwrap_or_else(|| Self::default_theme())]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -190,47 +192,63 @@ impl HighlightingAssets {
|
||||
language: Option<&str>,
|
||||
input: &mut OpenedInput,
|
||||
mapping: &SyntaxMapping,
|
||||
) -> &SyntaxReference {
|
||||
let syntax = if let Some(language) = language {
|
||||
self.syntax_set.find_syntax_by_token(language)
|
||||
) -> Result<&SyntaxReference> {
|
||||
if input.kind.is_theme_preview_file() {
|
||||
self.syntax_set
|
||||
.find_syntax_by_name("Rust")
|
||||
.ok_or_else(|| ErrorKind::UnknownSyntax("Rust".to_owned()).into())
|
||||
} else if let Some(language) = language {
|
||||
self.syntax_set
|
||||
.find_syntax_by_token(language)
|
||||
.ok_or_else(|| ErrorKind::UnknownSyntax(language.to_owned()).into())
|
||||
} else {
|
||||
match input.kind {
|
||||
OpenedInputKind::OrdinaryFile(ref actual_path) => {
|
||||
let path_str = input
|
||||
.metadata
|
||||
.user_provided_name
|
||||
.as_ref()
|
||||
.unwrap_or(actual_path);
|
||||
let path = Path::new(path_str);
|
||||
let line_syntax = self.get_first_line_syntax(&mut input.reader);
|
||||
let line_syntax = self.get_first_line_syntax(&mut input.reader);
|
||||
|
||||
let absolute_path = path.canonicalize().ok().unwrap_or(path.to_owned());
|
||||
match mapping.get_syntax_for(absolute_path) {
|
||||
Some(MappingTarget::MapTo(syntax_name)) => {
|
||||
// TODO: we should probably return an error here if this syntax can not be
|
||||
// found. Currently, we just fall back to 'plain'.
|
||||
self.syntax_set.find_syntax_by_name(syntax_name)
|
||||
}
|
||||
Some(MappingTarget::MapToUnknown) => line_syntax,
|
||||
None => {
|
||||
let file_name = path.file_name().unwrap_or_default();
|
||||
self.get_extension_syntax(file_name).or(line_syntax)
|
||||
}
|
||||
// Get the path of the file:
|
||||
// If this was set by the metadata, that will take priority.
|
||||
// If it wasn't, it will use the real file path (if available).
|
||||
let path_str =
|
||||
input
|
||||
.metadata
|
||||
.user_provided_name
|
||||
.as_ref()
|
||||
.or_else(|| match input.kind {
|
||||
OpenedInputKind::OrdinaryFile(ref path) => Some(path),
|
||||
_ => None,
|
||||
});
|
||||
|
||||
if let Some(path_str) = path_str {
|
||||
// If a path was provided, we try and detect the syntax based on extension mappings.
|
||||
let path = Path::new(path_str);
|
||||
let absolute_path = PathAbs::new(path)
|
||||
.ok()
|
||||
.map(|p| p.as_path().to_path_buf())
|
||||
.unwrap_or_else(|| path.to_owned());
|
||||
|
||||
match mapping.get_syntax_for(absolute_path) {
|
||||
Some(MappingTarget::MapToUnknown) => line_syntax.ok_or_else(|| {
|
||||
ErrorKind::UndetectedSyntax(path.to_string_lossy().into()).into()
|
||||
}),
|
||||
|
||||
Some(MappingTarget::MapTo(syntax_name)) => self
|
||||
.syntax_set
|
||||
.find_syntax_by_name(syntax_name)
|
||||
.ok_or_else(|| ErrorKind::UnknownSyntax(syntax_name.to_owned()).into()),
|
||||
|
||||
None => {
|
||||
let file_name = path.file_name().unwrap_or_default();
|
||||
self.get_extension_syntax(file_name)
|
||||
.or(line_syntax)
|
||||
.ok_or_else(|| {
|
||||
ErrorKind::UndetectedSyntax(path.to_string_lossy().into()).into()
|
||||
})
|
||||
}
|
||||
}
|
||||
OpenedInputKind::StdIn | OpenedInputKind::CustomReader => {
|
||||
if let Some(ref name) = input.metadata.user_provided_name {
|
||||
self.get_extension_syntax(&name)
|
||||
.or(self.get_first_line_syntax(&mut input.reader))
|
||||
} else {
|
||||
self.get_first_line_syntax(&mut input.reader)
|
||||
}
|
||||
}
|
||||
OpenedInputKind::ThemePreviewFile => self.syntax_set.find_syntax_by_name("Rust"),
|
||||
} else {
|
||||
// If a path wasn't provided, we fall back to the detect first-line syntax.
|
||||
line_syntax.ok_or_else(|| ErrorKind::UndetectedSyntax("[unknown]".into()).into())
|
||||
}
|
||||
};
|
||||
|
||||
syntax.unwrap_or_else(|| self.syntax_set.find_syntax_plain_text())
|
||||
}
|
||||
}
|
||||
|
||||
fn get_extension_syntax(&self, file_name: &OsStr) -> Option<&SyntaxReference> {
|
||||
@@ -258,9 +276,9 @@ mod tests {
|
||||
use super::*;
|
||||
|
||||
use std::ffi::OsStr;
|
||||
|
||||
use std::fs::File;
|
||||
use std::io::Write;
|
||||
|
||||
use tempdir::TempDir;
|
||||
|
||||
use crate::input::Input;
|
||||
@@ -268,7 +286,7 @@ mod tests {
|
||||
struct SyntaxDetectionTest<'a> {
|
||||
assets: HighlightingAssets,
|
||||
pub syntax_mapping: SyntaxMapping<'a>,
|
||||
temp_dir: TempDir,
|
||||
pub temp_dir: TempDir,
|
||||
}
|
||||
|
||||
impl<'a> SyntaxDetectionTest<'a> {
|
||||
@@ -281,7 +299,11 @@ mod tests {
|
||||
}
|
||||
}
|
||||
|
||||
fn syntax_for_file_with_content_os(&self, file_name: &OsStr, first_line: &str) -> String {
|
||||
fn syntax_for_real_file_with_content_os(
|
||||
&self,
|
||||
file_name: &OsStr,
|
||||
first_line: &str,
|
||||
) -> String {
|
||||
let file_path = self.temp_dir.path().join(file_name);
|
||||
{
|
||||
let mut temp_file = File::create(&file_path).unwrap();
|
||||
@@ -291,11 +313,26 @@ mod tests {
|
||||
let input = Input::ordinary_file(file_path.as_os_str());
|
||||
let dummy_stdin: &[u8] = &[];
|
||||
let mut opened_input = input.open(dummy_stdin).unwrap();
|
||||
let syntax = self
|
||||
.assets
|
||||
.get_syntax(None, &mut opened_input, &self.syntax_mapping);
|
||||
|
||||
syntax.name.clone()
|
||||
self.assets
|
||||
.get_syntax(None, &mut opened_input, &self.syntax_mapping)
|
||||
.unwrap_or_else(|_| self.assets.syntax_set.find_syntax_plain_text())
|
||||
.name
|
||||
.clone()
|
||||
}
|
||||
|
||||
fn syntax_for_file_with_content_os(&self, file_name: &OsStr, first_line: &str) -> String {
|
||||
let file_path = self.temp_dir.path().join(file_name);
|
||||
let input = Input::from_reader(Box::new(BufReader::new(first_line.as_bytes())))
|
||||
.with_name(Some(file_path.as_os_str()));
|
||||
let dummy_stdin: &[u8] = &[];
|
||||
let mut opened_input = input.open(dummy_stdin).unwrap();
|
||||
|
||||
self.assets
|
||||
.get_syntax(None, &mut opened_input, &self.syntax_mapping)
|
||||
.unwrap_or_else(|_| self.assets.syntax_set.find_syntax_plain_text())
|
||||
.name
|
||||
.clone()
|
||||
}
|
||||
|
||||
fn syntax_for_file_os(&self, file_name: &OsStr) -> String {
|
||||
@@ -314,10 +351,27 @@ mod tests {
|
||||
let input = Input::stdin().with_name(Some(OsStr::new(file_name)));
|
||||
let mut opened_input = input.open(content).unwrap();
|
||||
|
||||
let syntax = self
|
||||
.assets
|
||||
.get_syntax(None, &mut opened_input, &self.syntax_mapping);
|
||||
syntax.name.clone()
|
||||
self.assets
|
||||
.get_syntax(None, &mut opened_input, &self.syntax_mapping)
|
||||
.unwrap_or_else(|_| self.assets.syntax_set.find_syntax_plain_text())
|
||||
.name
|
||||
.clone()
|
||||
}
|
||||
|
||||
fn syntax_is_same_for_inputkinds(&self, file_name: &str, content: &str) -> bool {
|
||||
let as_file = self.syntax_for_real_file_with_content_os(file_name.as_ref(), content);
|
||||
let as_reader = self.syntax_for_file_with_content_os(file_name.as_ref(), content);
|
||||
let consistent = as_file == as_reader;
|
||||
// TODO: Compare StdIn somehow?
|
||||
|
||||
if !consistent {
|
||||
eprintln!(
|
||||
"Inconsistent syntax detection:\nFor File: {}\nFor Reader: {}",
|
||||
as_file, as_reader
|
||||
)
|
||||
}
|
||||
|
||||
consistent
|
||||
}
|
||||
}
|
||||
|
||||
@@ -349,13 +403,33 @@ mod tests {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn syntax_detection_same_for_inputkinds() {
|
||||
let mut test = SyntaxDetectionTest::new();
|
||||
|
||||
test.syntax_mapping
|
||||
.insert("*.myext", MappingTarget::MapTo("C"))
|
||||
.ok();
|
||||
test.syntax_mapping
|
||||
.insert("MY_FILE", MappingTarget::MapTo("Markdown"))
|
||||
.ok();
|
||||
|
||||
assert!(test.syntax_is_same_for_inputkinds("Test.md", ""));
|
||||
assert!(test.syntax_is_same_for_inputkinds("Test.txt", "#!/bin/bash"));
|
||||
assert!(test.syntax_is_same_for_inputkinds(".bashrc", ""));
|
||||
assert!(test.syntax_is_same_for_inputkinds("test.h", ""));
|
||||
assert!(test.syntax_is_same_for_inputkinds("test.js", "#!/bin/bash"));
|
||||
assert!(test.syntax_is_same_for_inputkinds("test.myext", ""));
|
||||
assert!(test.syntax_is_same_for_inputkinds("MY_FILE", ""));
|
||||
assert!(test.syntax_is_same_for_inputkinds("MY_FILE", "<?php"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn syntax_detection_well_defined_mapping_for_duplicate_extensions() {
|
||||
let test = SyntaxDetectionTest::new();
|
||||
|
||||
assert_eq!(test.syntax_for_file("test.h"), "C++");
|
||||
assert_eq!(test.syntax_for_file("test.sass"), "Sass");
|
||||
assert_eq!(test.syntax_for_file("test.hs"), "Haskell (improved)");
|
||||
assert_eq!(test.syntax_for_file("test.js"), "JavaScript (Babel)");
|
||||
}
|
||||
|
||||
@@ -411,4 +485,33 @@ mod tests {
|
||||
"Bourne Again Shell (bash)"
|
||||
);
|
||||
}
|
||||
|
||||
#[cfg(unix)]
|
||||
#[test]
|
||||
fn syntax_detection_for_symlinked_file() {
|
||||
use std::os::unix::fs::symlink;
|
||||
|
||||
let test = SyntaxDetectionTest::new();
|
||||
let file_path = test.temp_dir.path().join("my_ssh_config_filename");
|
||||
{
|
||||
File::create(&file_path).unwrap();
|
||||
}
|
||||
let file_path_symlink = test.temp_dir.path().join(".ssh").join("config");
|
||||
|
||||
std::fs::create_dir(test.temp_dir.path().join(".ssh"))
|
||||
.expect("creation of directory succeeds");
|
||||
symlink(&file_path, &file_path_symlink).expect("creation of symbolic link succeeds");
|
||||
|
||||
let input = Input::ordinary_file(file_path_symlink.as_os_str());
|
||||
let dummy_stdin: &[u8] = &[];
|
||||
let mut opened_input = input.open(dummy_stdin).unwrap();
|
||||
|
||||
assert_eq!(
|
||||
test.assets
|
||||
.get_syntax(None, &mut opened_input, &test.syntax_mapping)
|
||||
.unwrap_or_else(|_| test.assets.syntax_set.find_syntax_plain_text())
|
||||
.name,
|
||||
"SSH Config"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ pub struct AssetsMetadata {
|
||||
creation_time: Option<SystemTime>,
|
||||
}
|
||||
|
||||
const FILENAME: &'static str = "metadata.yaml";
|
||||
const FILENAME: &str = "metadata.yaml";
|
||||
|
||||
impl AssetsMetadata {
|
||||
pub(crate) fn new(current_version: &str) -> AssetsMetadata {
|
||||
|
||||
+27
-16
@@ -15,7 +15,7 @@ use console::Term;
|
||||
|
||||
use bat::{
|
||||
assets::HighlightingAssets,
|
||||
config::Config,
|
||||
config::{Config, VisibleLines},
|
||||
error::*,
|
||||
input::Input,
|
||||
line_range::{HighlightedLineRanges, LineRange, LineRanges},
|
||||
@@ -80,7 +80,7 @@ impl App {
|
||||
let paging_mode = match self.matches.value_of("paging") {
|
||||
Some("always") => PagingMode::Always,
|
||||
Some("never") => PagingMode::Never,
|
||||
Some("auto") | _ => {
|
||||
Some("auto") | None => {
|
||||
if self.matches.occurrences_of("plain") > 1 {
|
||||
// If we have -pp as an option when in auto mode, the pager should be disabled.
|
||||
PagingMode::Never
|
||||
@@ -99,6 +99,7 @@ impl App {
|
||||
PagingMode::Never
|
||||
}
|
||||
}
|
||||
_ => unreachable!("other values for --paging are not allowed"),
|
||||
};
|
||||
|
||||
let mut syntax_mapping = SyntaxMapping::builtin();
|
||||
@@ -147,13 +148,14 @@ impl App {
|
||||
match self.matches.value_of("wrap") {
|
||||
Some("character") => WrappingMode::Character,
|
||||
Some("never") => WrappingMode::NoWrapping,
|
||||
Some("auto") | _ => {
|
||||
Some("auto") | None => {
|
||||
if style_components.plain() {
|
||||
WrappingMode::NoWrapping
|
||||
} else {
|
||||
WrappingMode::Character
|
||||
}
|
||||
}
|
||||
_ => unreachable!("other values for --paging are not allowed"),
|
||||
}
|
||||
} else {
|
||||
// We don't have the tty width when piping to another program.
|
||||
@@ -196,13 +198,24 @@ impl App {
|
||||
}
|
||||
})
|
||||
.unwrap_or_else(|| String::from(HighlightingAssets::default_theme())),
|
||||
line_ranges: self
|
||||
.matches
|
||||
.values_of("line-range")
|
||||
.map(|vs| vs.map(LineRange::from).collect())
|
||||
.transpose()?
|
||||
.map(LineRanges::from)
|
||||
.unwrap_or_default(),
|
||||
visible_lines: match self.matches.is_present("diff") {
|
||||
#[cfg(feature = "git")]
|
||||
true => VisibleLines::DiffContext(
|
||||
self.matches
|
||||
.value_of("diff-context")
|
||||
.and_then(|t| t.parse().ok())
|
||||
.unwrap_or(2),
|
||||
),
|
||||
|
||||
_ => VisibleLines::Ranges(
|
||||
self.matches
|
||||
.values_of("line-range")
|
||||
.map(|vs| vs.map(LineRange::from).collect())
|
||||
.transpose()?
|
||||
.map(LineRanges::from)
|
||||
.unwrap_or_default(),
|
||||
),
|
||||
},
|
||||
style_components,
|
||||
syntax_mapping,
|
||||
pager: self.matches.value_of("pager"),
|
||||
@@ -238,19 +251,17 @@ impl App {
|
||||
.map(|values| values.collect());
|
||||
|
||||
let mut filenames_or_none: Box<dyn Iterator<Item = _>> = match filenames {
|
||||
Some(ref filenames) => {
|
||||
Box::new(filenames.into_iter().map(|name| Some(OsStr::new(*name))))
|
||||
}
|
||||
Some(ref filenames) => Box::new(filenames.iter().map(|name| Some(OsStr::new(*name)))),
|
||||
None => Box::new(std::iter::repeat(None)),
|
||||
};
|
||||
let files: Option<Vec<&OsStr>> = self.matches.values_of_os("FILE").map(|vs| vs.collect());
|
||||
|
||||
if files.is_none() {
|
||||
let input = Input::stdin().with_name(filenames_or_none.nth(0).unwrap_or(None));
|
||||
let input = Input::stdin().with_name(filenames_or_none.next().unwrap_or(None));
|
||||
return Ok(vec![input]);
|
||||
}
|
||||
let files_or_none: Box<dyn Iterator<Item = _>> = match files {
|
||||
Some(ref files) => Box::new(files.into_iter().map(|name| Some(*name))),
|
||||
Some(ref files) => Box::new(files.iter().map(|name| Some(*name))),
|
||||
None => Box::new(std::iter::repeat(None)),
|
||||
};
|
||||
|
||||
@@ -264,7 +275,7 @@ impl App {
|
||||
}
|
||||
}
|
||||
}
|
||||
return Ok(file_input);
|
||||
Ok(file_input)
|
||||
}
|
||||
|
||||
fn style_components(&self) -> Result<StyleComponents> {
|
||||
|
||||
@@ -53,5 +53,6 @@ pub fn assets_from_cache_or_binary() -> Result<HighlightingAssets> {
|
||||
}
|
||||
}
|
||||
|
||||
Ok(HighlightingAssets::from_cache(&cache_dir).unwrap_or(HighlightingAssets::from_binary()))
|
||||
Ok(HighlightingAssets::from_cache(&cache_dir)
|
||||
.unwrap_or_else(|_| HighlightingAssets::from_binary()))
|
||||
}
|
||||
|
||||
+67
-27
@@ -8,7 +8,7 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
|
||||
AppSettings::ColorNever
|
||||
};
|
||||
|
||||
let app = ClapApp::new(crate_name!())
|
||||
let mut app = ClapApp::new(crate_name!())
|
||||
.version(crate_version!())
|
||||
.global_setting(clap_color_setting)
|
||||
.global_setting(AppSettings::DeriveDisplayOrder)
|
||||
@@ -44,7 +44,7 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
|
||||
.long_help(
|
||||
"Show non-printable characters like space, tab or newline. \
|
||||
This option can also be used to print binary files. \
|
||||
Use '--tabs' to control the width of the tab-placeholders."
|
||||
Use '--tabs' to control the width of the tab-placeholders.",
|
||||
),
|
||||
)
|
||||
.arg(
|
||||
@@ -90,7 +90,7 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
|
||||
'--highlight-line 40' highlights line 40\n \
|
||||
'--highlight-line 30:40' highlights lines 30 to 40\n \
|
||||
'--highlight-line :40' highlights lines 1 to 40\n \
|
||||
'--highlight-line 40:' highlights lines 40 to the end of the file"
|
||||
'--highlight-line 40:' highlights lines 40 to the end of the file",
|
||||
),
|
||||
)
|
||||
.arg(
|
||||
@@ -101,30 +101,67 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
|
||||
.multiple(true)
|
||||
.value_name("name")
|
||||
.help("Specify the name to display for a file.")
|
||||
.long_help("Specify the name to display for a file. Useful when piping \
|
||||
data to bat from STDIN when bat does not otherwise know \
|
||||
the filename."),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("tabs")
|
||||
.long("tabs")
|
||||
.overrides_with("tabs")
|
||||
.takes_value(true)
|
||||
.value_name("T")
|
||||
.validator(
|
||||
|t| {
|
||||
t.parse::<u32>()
|
||||
.map_err(|_t| "must be a number")
|
||||
.map(|_t| ()) // Convert to Result<(), &str>
|
||||
.map_err(|e| e.to_string())
|
||||
}, // Convert to Result<(), String>
|
||||
)
|
||||
.help("Set the tab width to T spaces.")
|
||||
.long_help(
|
||||
"Set the tab width to T spaces. Use a width of 0 to pass tabs through \
|
||||
directly",
|
||||
"Specify the name to display for a file. Useful when piping \
|
||||
data to bat from STDIN when bat does not otherwise know \
|
||||
the filename.",
|
||||
),
|
||||
)
|
||||
);
|
||||
|
||||
#[cfg(feature = "git")]
|
||||
{
|
||||
app = app
|
||||
.arg(
|
||||
Arg::with_name("diff")
|
||||
.long("diff")
|
||||
.short("d")
|
||||
.help("Only show lines that have been added/removed/modified.")
|
||||
.long_help(
|
||||
"Only show lines that have been added/removed/modified with respect \
|
||||
to the Git index. Use --diff-context=N to control how much context you want to see.",
|
||||
),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("diff-context")
|
||||
.long("diff-context")
|
||||
.overrides_with("diff-context")
|
||||
.takes_value(true)
|
||||
.value_name("N")
|
||||
.validator(
|
||||
|n| {
|
||||
n.parse::<usize>()
|
||||
.map_err(|_| "must be a number")
|
||||
.map(|_| ()) // Convert to Result<(), &str>
|
||||
.map_err(|e| e.to_string())
|
||||
}, // Convert to Result<(), String>
|
||||
)
|
||||
.hidden_short_help(true)
|
||||
.long_help(
|
||||
"Include N lines of context around added/removed/modified lines when using '--diff'.",
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
app = app.arg(
|
||||
Arg::with_name("tabs")
|
||||
.long("tabs")
|
||||
.overrides_with("tabs")
|
||||
.takes_value(true)
|
||||
.value_name("T")
|
||||
.validator(
|
||||
|t| {
|
||||
t.parse::<u32>()
|
||||
.map_err(|_t| "must be a number")
|
||||
.map(|_t| ()) // Convert to Result<(), &str>
|
||||
.map_err(|e| e.to_string())
|
||||
}, // Convert to Result<(), String>
|
||||
)
|
||||
.help("Set the tab width to T spaces.")
|
||||
.long_help(
|
||||
"Set the tab width to T spaces. Use a width of 0 to pass tabs through \
|
||||
directly",
|
||||
),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("wrap")
|
||||
.long("wrap")
|
||||
@@ -152,7 +189,7 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
|
||||
t.parse::<i32>()
|
||||
.map_err(|_e| "must be an offset or number")
|
||||
.and_then(|v| if v == 0 && !is_offset {
|
||||
Err("terminal width cannot be zero".into())
|
||||
Err("terminal width cannot be zero")
|
||||
} else {
|
||||
Ok(())
|
||||
})
|
||||
@@ -305,7 +342,9 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
|
||||
.validator(|val| {
|
||||
let mut invalid_vals = val.split(',').filter(|style| {
|
||||
!&[
|
||||
"auto", "full", "plain", "changes", "header", "grid", "numbers", "snip"
|
||||
"auto", "full", "plain", "header", "grid", "numbers", "snip",
|
||||
#[cfg(feature = "git")]
|
||||
"changes",
|
||||
]
|
||||
.contains(style)
|
||||
});
|
||||
@@ -339,6 +378,7 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
|
||||
.takes_value(true)
|
||||
.number_of_values(1)
|
||||
.value_name("N:M")
|
||||
.conflicts_with("diff")
|
||||
.help("Only print the lines from N to M.")
|
||||
.long_help(
|
||||
"Only print the specified range of lines for each file. \
|
||||
|
||||
@@ -35,10 +35,11 @@ pub fn generate_config_file() -> bat::error::Result<()> {
|
||||
match config_dir {
|
||||
Some(path) => fs::create_dir_all(path)?,
|
||||
None => {
|
||||
return Ok(Err(format!(
|
||||
return Err(format!(
|
||||
"Unable to write config file to: {}",
|
||||
config_file.to_string_lossy()
|
||||
))?)
|
||||
)
|
||||
.into());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -77,7 +78,7 @@ pub fn generate_config_file() -> bat::error::Result<()> {
|
||||
config_file.to_string_lossy()
|
||||
);
|
||||
|
||||
return Ok(());
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn get_args_from_config_file() -> Result<Vec<OsString>, shell_words::ParseError> {
|
||||
|
||||
+3
-2
@@ -70,7 +70,7 @@ pub fn list_languages(config: &Config) -> Result<()> {
|
||||
|
||||
if config.loop_through {
|
||||
for lang in languages {
|
||||
write!(stdout, "{}:{}\n", lang.name, lang.file_extensions.join(","))?;
|
||||
writeln!(stdout, "{}:{}", lang.name, lang.file_extensions.join(","))?;
|
||||
}
|
||||
} else {
|
||||
let longest = languages
|
||||
@@ -210,7 +210,8 @@ fn main() {
|
||||
|
||||
match result {
|
||||
Err(error) => {
|
||||
default_error_handler(&error);
|
||||
let stderr = std::io::stderr();
|
||||
default_error_handler(&error, &mut stderr.lock());
|
||||
process::exit(1);
|
||||
}
|
||||
Ok(false) => {
|
||||
|
||||
+29
-6
@@ -5,6 +5,32 @@ use crate::style::StyleComponents;
|
||||
use crate::syntax_mapping::SyntaxMapping;
|
||||
use crate::wrapping::WrappingMode;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum VisibleLines {
|
||||
/// Show all lines which are included in the line ranges
|
||||
Ranges(LineRanges),
|
||||
|
||||
#[cfg(feature = "git")]
|
||||
/// Only show lines surrounding added/deleted/modified lines
|
||||
DiffContext(usize),
|
||||
}
|
||||
|
||||
impl VisibleLines {
|
||||
pub fn diff_mode(&self) -> bool {
|
||||
match self {
|
||||
Self::Ranges(_) => false,
|
||||
#[cfg(feature = "git")]
|
||||
Self::DiffContext(_) => true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for VisibleLines {
|
||||
fn default() -> Self {
|
||||
VisibleLines::Ranges(LineRanges::default())
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Default)]
|
||||
pub struct Config<'a> {
|
||||
/// The explicitly configured language, if any
|
||||
@@ -39,8 +65,8 @@ pub struct Config<'a> {
|
||||
#[cfg(feature = "paging")]
|
||||
pub paging_mode: PagingMode,
|
||||
|
||||
/// Specifies the lines that should be printed
|
||||
pub line_ranges: LineRanges,
|
||||
/// Specifies which lines should be printed
|
||||
pub visible_lines: VisibleLines,
|
||||
|
||||
/// The syntax highlighting theme
|
||||
pub theme: String,
|
||||
@@ -62,10 +88,7 @@ pub struct Config<'a> {
|
||||
fn default_config_should_include_all_lines() {
|
||||
use crate::line_range::RangeCheckResult;
|
||||
|
||||
assert_eq!(
|
||||
Config::default().line_ranges.check(17),
|
||||
RangeCheckResult::InRange
|
||||
);
|
||||
assert_eq!(LineRanges::default().check(17), RangeCheckResult::InRange);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
+83
-11
@@ -1,9 +1,13 @@
|
||||
use std::io::{self, Write};
|
||||
|
||||
use crate::assets::HighlightingAssets;
|
||||
use crate::config::Config;
|
||||
use crate::config::{Config, VisibleLines};
|
||||
#[cfg(feature = "git")]
|
||||
use crate::diff::{get_git_diff, LineChanges};
|
||||
use crate::error::*;
|
||||
use crate::input::{Input, InputReader, OpenedInput};
|
||||
#[cfg(feature = "git")]
|
||||
use crate::line_range::LineRange;
|
||||
use crate::line_range::{LineRanges, RangeCheckResult};
|
||||
use crate::output::OutputType;
|
||||
#[cfg(feature = "paging")]
|
||||
@@ -27,7 +31,7 @@ impl<'b> Controller<'b> {
|
||||
pub fn run_with_error_handler(
|
||||
&self,
|
||||
inputs: Vec<Input>,
|
||||
handle_error: impl Fn(&Error),
|
||||
handle_error: impl Fn(&Error, &mut dyn Write),
|
||||
) -> Result<bool> {
|
||||
let mut output_type;
|
||||
|
||||
@@ -41,9 +45,9 @@ impl<'b> Controller<'b> {
|
||||
if self.config.paging_mode != PagingMode::Never {
|
||||
let call_pager = inputs.iter().any(|ref input| {
|
||||
if let InputKind::OrdinaryFile(ref path) = input.kind {
|
||||
return Path::new(path).exists();
|
||||
Path::new(path).exists()
|
||||
} else {
|
||||
return true;
|
||||
true
|
||||
}
|
||||
});
|
||||
if !call_pager {
|
||||
@@ -58,16 +62,56 @@ impl<'b> Controller<'b> {
|
||||
output_type = OutputType::stdout();
|
||||
}
|
||||
|
||||
let attached_to_pager = output_type.is_pager();
|
||||
let writer = output_type.handle()?;
|
||||
let mut no_errors: bool = true;
|
||||
|
||||
for input in inputs.into_iter() {
|
||||
let stderr = io::stderr();
|
||||
let print_error = |error: &Error, write: &mut dyn Write| {
|
||||
if attached_to_pager {
|
||||
handle_error(error, write);
|
||||
} else {
|
||||
handle_error(error, &mut stderr.lock());
|
||||
}
|
||||
};
|
||||
|
||||
for (index, input) in inputs.into_iter().enumerate() {
|
||||
match input.open(io::stdin().lock()) {
|
||||
Err(error) => {
|
||||
handle_error(&error);
|
||||
print_error(&error, writer);
|
||||
no_errors = false;
|
||||
}
|
||||
Ok(mut opened_input) => {
|
||||
#[cfg(feature = "git")]
|
||||
let line_changes = if self.config.visible_lines.diff_mode()
|
||||
|| (!self.config.loop_through && self.config.style_components.changes())
|
||||
{
|
||||
match opened_input.kind {
|
||||
crate::input::OpenedInputKind::OrdinaryFile(ref path) => {
|
||||
let diff = get_git_diff(path);
|
||||
|
||||
// Skip files without Git modifications
|
||||
if self.config.visible_lines.diff_mode()
|
||||
&& diff
|
||||
.as_ref()
|
||||
.map(|changes| changes.is_empty())
|
||||
.unwrap_or(false)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
diff
|
||||
}
|
||||
_ if self.config.visible_lines.diff_mode() => {
|
||||
// Skip non-file inputs in diff mode
|
||||
continue;
|
||||
}
|
||||
_ => None,
|
||||
}
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
let mut printer: Box<dyn Printer> = if self.config.loop_through {
|
||||
Box::new(SimplePrinter::new())
|
||||
} else {
|
||||
@@ -75,13 +119,22 @@ impl<'b> Controller<'b> {
|
||||
&self.config,
|
||||
&self.assets,
|
||||
&mut opened_input,
|
||||
))
|
||||
#[cfg(feature = "git")]
|
||||
&line_changes,
|
||||
)?)
|
||||
};
|
||||
|
||||
let result = self.print_file(&mut *printer, writer, &mut opened_input);
|
||||
let result = self.print_file(
|
||||
&mut *printer,
|
||||
writer,
|
||||
&mut opened_input,
|
||||
index != 0,
|
||||
#[cfg(feature = "git")]
|
||||
&line_changes,
|
||||
);
|
||||
|
||||
if let Err(error) = result {
|
||||
handle_error(&error);
|
||||
print_error(&error, writer);
|
||||
no_errors = false;
|
||||
}
|
||||
}
|
||||
@@ -96,13 +149,32 @@ impl<'b> Controller<'b> {
|
||||
printer: &mut dyn Printer,
|
||||
writer: &mut dyn Write,
|
||||
input: &mut OpenedInput,
|
||||
add_header_padding: bool,
|
||||
#[cfg(feature = "git")] line_changes: &Option<LineChanges>,
|
||||
) -> Result<()> {
|
||||
if !input.reader.first_line.is_empty() || self.config.style_components.header() {
|
||||
printer.print_header(writer, input)?;
|
||||
printer.print_header(writer, input, add_header_padding)?;
|
||||
}
|
||||
|
||||
if !input.reader.first_line.is_empty() {
|
||||
self.print_file_ranges(printer, writer, &mut input.reader, &self.config.line_ranges)?;
|
||||
let line_ranges = match self.config.visible_lines {
|
||||
VisibleLines::Ranges(ref line_ranges) => line_ranges.clone(),
|
||||
#[cfg(feature = "git")]
|
||||
VisibleLines::DiffContext(context) => {
|
||||
let mut line_ranges: Vec<LineRange> = vec![];
|
||||
|
||||
if let Some(line_changes) = line_changes {
|
||||
for line in line_changes.keys() {
|
||||
let line = *line as usize;
|
||||
line_ranges.push(LineRange::new(line - context, line + context));
|
||||
}
|
||||
}
|
||||
|
||||
LineRanges::from(line_ranges)
|
||||
}
|
||||
};
|
||||
|
||||
self.print_file_ranges(printer, writer, &mut input.reader, &line_ranges)?;
|
||||
}
|
||||
printer.print_footer(writer, input)?;
|
||||
|
||||
|
||||
+18
-4
@@ -1,4 +1,5 @@
|
||||
use error_chain::error_chain;
|
||||
use std::io::Write;
|
||||
|
||||
error_chain! {
|
||||
foreign_links {
|
||||
@@ -9,9 +10,20 @@ error_chain! {
|
||||
GlobParsingError(::globset::Error);
|
||||
SerdeYamlError(::serde_yaml::Error);
|
||||
}
|
||||
|
||||
errors {
|
||||
UndetectedSyntax(input: String) {
|
||||
description("unable to detect syntax"),
|
||||
display("unable to detect syntax for {}", input)
|
||||
}
|
||||
UnknownSyntax(name: String) {
|
||||
description("unknown syntax"),
|
||||
display("unknown syntax: '{}'", name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn default_error_handler(error: &Error) {
|
||||
pub fn default_error_handler(error: &Error, output: &mut dyn Write) {
|
||||
use ansi_term::Colour::Red;
|
||||
|
||||
match error {
|
||||
@@ -21,14 +33,16 @@ pub fn default_error_handler(error: &Error) {
|
||||
::std::process::exit(0);
|
||||
}
|
||||
Error(ErrorKind::SerdeYamlError(_), _) => {
|
||||
eprintln!(
|
||||
writeln!(
|
||||
output,
|
||||
"{}: Error while parsing metadata.yaml file: {}",
|
||||
Red.paint("[bat error]"),
|
||||
error
|
||||
);
|
||||
)
|
||||
.ok();
|
||||
}
|
||||
_ => {
|
||||
eprintln!("{}: {}", Red.paint("[bat error]"), error);
|
||||
writeln!(output, "{}: {}", Red.paint("[bat error]"), error).ok();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -39,6 +39,15 @@ pub(crate) enum OpenedInputKind {
|
||||
CustomReader,
|
||||
}
|
||||
|
||||
impl OpenedInputKind {
|
||||
pub(crate) fn is_theme_preview_file(&self) -> bool {
|
||||
match self {
|
||||
OpenedInputKind::ThemePreviewFile => true,
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) struct OpenedInput<'a> {
|
||||
pub(crate) kind: OpenedInputKind,
|
||||
pub(crate) metadata: InputMetadata,
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@ impl LineRange {
|
||||
fn parse_range(range_raw: &str) -> Result<LineRange> {
|
||||
let mut new_range = LineRange::default();
|
||||
|
||||
if range_raw.bytes().nth(0).ok_or("Empty line range")? == b':' {
|
||||
if range_raw.bytes().next().ok_or("Empty line range")? == b':' {
|
||||
new_range.upper = range_raw[1..].parse()?;
|
||||
return Ok(new_range);
|
||||
} else if range_raw.bytes().last().ok_or("Empty line range")? == b':' {
|
||||
|
||||
@@ -125,6 +125,20 @@ impl OutputType {
|
||||
OutputType::Stdout(io::stdout())
|
||||
}
|
||||
|
||||
#[cfg(feature = "paging")]
|
||||
pub(crate) fn is_pager(&self) -> bool {
|
||||
if let OutputType::Pager(_) = self {
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "paging"))]
|
||||
pub(crate) fn is_pager(&self) -> bool {
|
||||
false
|
||||
}
|
||||
|
||||
pub fn handle(&mut self) -> Result<&mut dyn Write> {
|
||||
Ok(match *self {
|
||||
#[cfg(feature = "paging")]
|
||||
|
||||
+8
-8
@@ -36,15 +36,15 @@ pub fn expand_tabs(line: &str, width: usize, cursor: &mut usize) -> String {
|
||||
fn try_parse_utf8_char(input: &[u8]) -> Option<(char, usize)> {
|
||||
let str_from_utf8 = |seq| std::str::from_utf8(seq).ok();
|
||||
|
||||
let decoded = None
|
||||
.or(input.get(0..1).and_then(str_from_utf8).map(|c| (c, 1)))
|
||||
.or(input.get(0..2).and_then(str_from_utf8).map(|c| (c, 2)))
|
||||
.or(input.get(0..3).and_then(str_from_utf8).map(|c| (c, 3)))
|
||||
.or(input.get(0..4).and_then(str_from_utf8).map(|c| (c, 4)));
|
||||
let decoded = input
|
||||
.get(0..1)
|
||||
.and_then(str_from_utf8)
|
||||
.map(|c| (c, 1))
|
||||
.or_else(|| input.get(0..2).and_then(str_from_utf8).map(|c| (c, 2)))
|
||||
.or_else(|| input.get(0..3).and_then(str_from_utf8).map(|c| (c, 3)))
|
||||
.or_else(|| input.get(0..4).and_then(str_from_utf8).map(|c| (c, 4)));
|
||||
|
||||
let decoded_char = decoded.map(|(seq, n)| (seq.chars().next().unwrap(), n));
|
||||
|
||||
decoded_char
|
||||
decoded.map(|(seq, n)| (seq.chars().next().unwrap(), n))
|
||||
}
|
||||
|
||||
pub fn replace_nonprintable(input: &[u8], tab_width: usize) -> String {
|
||||
|
||||
+17
-4
@@ -6,7 +6,7 @@ use syntect::parsing::SyntaxReference;
|
||||
|
||||
use crate::{
|
||||
assets::HighlightingAssets,
|
||||
config::Config,
|
||||
config::{Config, VisibleLines},
|
||||
controller::Controller,
|
||||
error::Result,
|
||||
input::Input,
|
||||
@@ -165,9 +165,21 @@ impl<'a> PrettyPrinter<'a> {
|
||||
self
|
||||
}
|
||||
|
||||
/// Whether to show modification markers for VCS changes
|
||||
/// Whether to show modification markers for VCS changes. This has no effect if
|
||||
/// the `git` feature is not activated.
|
||||
#[cfg_attr(
|
||||
not(feature = "git"),
|
||||
deprecated(
|
||||
note = "Using vcs_modification_markers without the 'git' feature has no effect. \
|
||||
The function will be removed (for non-'git' use cases) in the future."
|
||||
)
|
||||
)]
|
||||
#[allow(unused_variables)]
|
||||
pub fn vcs_modification_markers(&mut self, yes: bool) -> &mut Self {
|
||||
self.active_style_components.vcs_modification_markers = yes;
|
||||
#[cfg(feature = "git")]
|
||||
{
|
||||
self.active_style_components.vcs_modification_markers = yes;
|
||||
}
|
||||
self
|
||||
}
|
||||
|
||||
@@ -205,7 +217,7 @@ impl<'a> PrettyPrinter<'a> {
|
||||
|
||||
/// Specify the lines that should be printed (default: all)
|
||||
pub fn line_ranges(&mut self, ranges: LineRanges) -> &mut Self {
|
||||
self.config.line_ranges = ranges;
|
||||
self.config.visible_lines = VisibleLines::Ranges(ranges);
|
||||
self
|
||||
}
|
||||
|
||||
@@ -269,6 +281,7 @@ impl<'a> PrettyPrinter<'a> {
|
||||
style_components.push(StyleComponent::Snip);
|
||||
}
|
||||
if self.active_style_components.vcs_modification_markers {
|
||||
#[cfg(feature = "git")]
|
||||
style_components.push(StyleComponent::Changes);
|
||||
}
|
||||
self.config.style_components = StyleComponents::new(&style_components);
|
||||
|
||||
+40
-31
@@ -24,7 +24,7 @@ use crate::config::Config;
|
||||
use crate::decorations::LineChangesDecoration;
|
||||
use crate::decorations::{Decoration, GridBorderDecoration, LineNumberDecoration};
|
||||
#[cfg(feature = "git")]
|
||||
use crate::diff::{get_git_diff, LineChanges};
|
||||
use crate::diff::LineChanges;
|
||||
use crate::error::*;
|
||||
use crate::input::OpenedInput;
|
||||
use crate::line_range::RangeCheckResult;
|
||||
@@ -33,7 +33,12 @@ use crate::terminal::{as_terminal_escaped, to_ansi_color};
|
||||
use crate::wrapping::WrappingMode;
|
||||
|
||||
pub(crate) trait Printer {
|
||||
fn print_header(&mut self, handle: &mut dyn Write, input: &OpenedInput) -> Result<()>;
|
||||
fn print_header(
|
||||
&mut self,
|
||||
handle: &mut dyn Write,
|
||||
input: &OpenedInput,
|
||||
add_header_padding: bool,
|
||||
) -> Result<()>;
|
||||
fn print_footer(&mut self, handle: &mut dyn Write, input: &OpenedInput) -> Result<()>;
|
||||
|
||||
fn print_snip(&mut self, handle: &mut dyn Write) -> Result<()>;
|
||||
@@ -56,7 +61,12 @@ impl SimplePrinter {
|
||||
}
|
||||
|
||||
impl Printer for SimplePrinter {
|
||||
fn print_header(&mut self, _handle: &mut dyn Write, _input: &OpenedInput) -> Result<()> {
|
||||
fn print_header(
|
||||
&mut self,
|
||||
_handle: &mut dyn Write,
|
||||
_input: &OpenedInput,
|
||||
_add_header_padding: bool,
|
||||
) -> Result<()> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -90,7 +100,7 @@ pub(crate) struct InteractivePrinter<'a> {
|
||||
ansi_prefix_sgr: String,
|
||||
content_type: Option<ContentType>,
|
||||
#[cfg(feature = "git")]
|
||||
pub line_changes: Option<LineChanges>,
|
||||
pub line_changes: &'a Option<LineChanges>,
|
||||
highlighter: Option<HighlightLines<'a>>,
|
||||
syntax_set: &'a SyntaxSet,
|
||||
background_color_highlight: Option<Color>,
|
||||
@@ -101,7 +111,8 @@ impl<'a> InteractivePrinter<'a> {
|
||||
config: &'a Config,
|
||||
assets: &'a HighlightingAssets,
|
||||
input: &mut OpenedInput,
|
||||
) -> Self {
|
||||
#[cfg(feature = "git")] line_changes: &'a Option<LineChanges>,
|
||||
) -> Result<Self> {
|
||||
let theme = assets.get_theme(&config.theme);
|
||||
|
||||
let background_color_highlight = theme.settings.line_highlight;
|
||||
@@ -145,9 +156,6 @@ impl<'a> InteractivePrinter<'a> {
|
||||
panel_width = 0;
|
||||
}
|
||||
|
||||
#[cfg(feature = "git")]
|
||||
let mut line_changes = None;
|
||||
|
||||
let highlighter = if input
|
||||
.reader
|
||||
.content_type
|
||||
@@ -155,24 +163,19 @@ impl<'a> InteractivePrinter<'a> {
|
||||
{
|
||||
None
|
||||
} else {
|
||||
// Get the Git modifications
|
||||
#[cfg(feature = "git")]
|
||||
{
|
||||
use crate::input::OpenedInputKind;
|
||||
|
||||
if config.style_components.changes() {
|
||||
if let OpenedInputKind::OrdinaryFile(ref path) = input.kind {
|
||||
line_changes = get_git_diff(path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Determine the type of syntax for highlighting
|
||||
let syntax = assets.get_syntax(config.language, input, &config.syntax_mapping);
|
||||
let syntax = match assets.get_syntax(config.language, input, &config.syntax_mapping) {
|
||||
Ok(syntax) => syntax,
|
||||
Err(Error(ErrorKind::UndetectedSyntax(_), _)) => {
|
||||
assets.syntax_set.find_syntax_plain_text()
|
||||
}
|
||||
Err(e) => return Err(e),
|
||||
};
|
||||
|
||||
Some(HighlightLines::new(syntax, theme))
|
||||
};
|
||||
|
||||
InteractivePrinter {
|
||||
Ok(InteractivePrinter {
|
||||
panel_width,
|
||||
colors,
|
||||
config,
|
||||
@@ -184,7 +187,7 @@ impl<'a> InteractivePrinter<'a> {
|
||||
highlighter,
|
||||
syntax_set: &assets.syntax_set,
|
||||
background_color_highlight,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
fn print_horizontal_line(&mut self, handle: &mut dyn Write, grid_char: char) -> Result<()> {
|
||||
@@ -216,7 +219,7 @@ impl<'a> InteractivePrinter<'a> {
|
||||
if self.config.style_components.grid() {
|
||||
format!("{} │ ", text_filled)
|
||||
} else {
|
||||
format!("{}", text_filled)
|
||||
text_filled
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -232,7 +235,12 @@ impl<'a> InteractivePrinter<'a> {
|
||||
}
|
||||
|
||||
impl<'a> Printer for InteractivePrinter<'a> {
|
||||
fn print_header(&mut self, handle: &mut dyn Write, input: &OpenedInput) -> Result<()> {
|
||||
fn print_header(
|
||||
&mut self,
|
||||
handle: &mut dyn Write,
|
||||
input: &OpenedInput,
|
||||
add_header_padding: bool,
|
||||
) -> Result<()> {
|
||||
if !self.config.style_components.header() {
|
||||
if Some(ContentType::BINARY) == self.content_type && !self.config.show_nonprintable {
|
||||
writeln!(
|
||||
@@ -243,10 +251,8 @@ impl<'a> Printer for InteractivePrinter<'a> {
|
||||
Yellow.paint("[bat warning]"),
|
||||
input.description().full,
|
||||
)?;
|
||||
} else {
|
||||
if self.config.style_components.grid() {
|
||||
self.print_horizontal_line(handle, '┬')?;
|
||||
}
|
||||
} else if self.config.style_components.grid() {
|
||||
self.print_horizontal_line(handle, '┬')?;
|
||||
}
|
||||
return Ok(());
|
||||
}
|
||||
@@ -263,6 +269,9 @@ impl<'a> Printer for InteractivePrinter<'a> {
|
||||
.paint(if self.panel_width > 0 { "│ " } else { "" }),
|
||||
)?;
|
||||
} else {
|
||||
if add_header_padding {
|
||||
writeln!(handle)?;
|
||||
}
|
||||
write!(handle, "{}", " ".repeat(self.panel_width))?;
|
||||
}
|
||||
|
||||
@@ -318,9 +327,9 @@ impl<'a> Printer for InteractivePrinter<'a> {
|
||||
let snip_right =
|
||||
" ─".repeat((self.config.term_width - panel_count - snip_left_count - title_count) / 2);
|
||||
|
||||
write!(
|
||||
writeln!(
|
||||
handle,
|
||||
"{}\n",
|
||||
"{}",
|
||||
self.colors
|
||||
.grid
|
||||
.paint(format!("{}{}{}{}", panel, snip_left, title, snip_right))
|
||||
|
||||
@@ -6,6 +6,7 @@ use crate::error::*;
|
||||
#[derive(Debug, Eq, PartialEq, Copy, Clone, Hash)]
|
||||
pub enum StyleComponent {
|
||||
Auto,
|
||||
#[cfg(feature = "git")]
|
||||
Changes,
|
||||
Grid,
|
||||
Header,
|
||||
@@ -25,12 +26,14 @@ impl StyleComponent {
|
||||
StyleComponent::Plain.components(interactive_terminal)
|
||||
}
|
||||
}
|
||||
#[cfg(feature = "git")]
|
||||
StyleComponent::Changes => &[StyleComponent::Changes],
|
||||
StyleComponent::Grid => &[StyleComponent::Grid],
|
||||
StyleComponent::Header => &[StyleComponent::Header],
|
||||
StyleComponent::LineNumbers => &[StyleComponent::LineNumbers],
|
||||
StyleComponent::Snip => &[StyleComponent::Snip],
|
||||
StyleComponent::Full => &[
|
||||
#[cfg(feature = "git")]
|
||||
StyleComponent::Changes,
|
||||
StyleComponent::Grid,
|
||||
StyleComponent::Header,
|
||||
@@ -48,6 +51,7 @@ impl FromStr for StyleComponent {
|
||||
fn from_str(s: &str) -> Result<Self> {
|
||||
match s {
|
||||
"auto" => Ok(StyleComponent::Auto),
|
||||
#[cfg(feature = "git")]
|
||||
"changes" => Ok(StyleComponent::Changes),
|
||||
"grid" => Ok(StyleComponent::Grid),
|
||||
"header" => Ok(StyleComponent::Header),
|
||||
|
||||
@@ -30,7 +30,10 @@ impl<'a> SyntaxMapping<'a> {
|
||||
.insert("**/.ssh/config", MappingTarget::MapTo("SSH Config"))
|
||||
.unwrap();
|
||||
mapping
|
||||
.insert("**/bat/config", MappingTarget::MapTo("Bourne Again Shell (bash)"))
|
||||
.insert(
|
||||
"**/bat/config",
|
||||
MappingTarget::MapTo("Bourne Again Shell (bash)"),
|
||||
)
|
||||
.unwrap();
|
||||
mapping
|
||||
.insert(
|
||||
@@ -39,6 +42,11 @@ impl<'a> SyntaxMapping<'a> {
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
// See #1008
|
||||
mapping
|
||||
.insert("rails", MappingTarget::MapToUnknown)
|
||||
.unwrap();
|
||||
|
||||
mapping
|
||||
}
|
||||
|
||||
|
||||
+14
-14
@@ -7,11 +7,13 @@ pub fn to_ansi_color(color: highlighting::Color, true_color: bool) -> ansi_term:
|
||||
if color.a == 0 {
|
||||
// Themes can specify one of the user-configurable terminal colors by
|
||||
// encoding them as #RRGGBBAA with AA set to 00 (transparent) and RR set
|
||||
// to the color palette number. The built-in themes ansi-light,
|
||||
// to the 8-bit color palette number. The built-in themes ansi-light,
|
||||
// ansi-dark, and base16 use this.
|
||||
Fixed(color.r)
|
||||
} else if color.a == 0x0f {
|
||||
match color.r {
|
||||
// For the first 8 colors, use the Color enum to produce ANSI escape
|
||||
// sequences using codes 30-37 (foreground) and 40-47 (background).
|
||||
// For example, red foreground is \x1b[31m. This works on terminals
|
||||
// without 256-color support.
|
||||
0x00 => Color::Black,
|
||||
0x01 => Color::Red,
|
||||
0x02 => Color::Green,
|
||||
@@ -20,17 +22,15 @@ pub fn to_ansi_color(color: highlighting::Color, true_color: bool) -> ansi_term:
|
||||
0x05 => Color::Purple,
|
||||
0x06 => Color::Cyan,
|
||||
0x07 => Color::White,
|
||||
// TODO: the following should be high-intensity variants of
|
||||
// these colors ("bright black", "bright red", ...).
|
||||
0x08 => Color::Black,
|
||||
0x09 => Color::Red,
|
||||
0x0a => Color::Green,
|
||||
0x0b => Color::Yellow,
|
||||
0x0c => Color::Blue,
|
||||
0x0d => Color::Purple,
|
||||
0x0e => Color::Cyan,
|
||||
0x0f => Color::White,
|
||||
_ => unreachable!("The 0x0f color encoding does not allow for codes higher than 0x0f")
|
||||
// For all other colors, use Fixed to produce escape sequences using
|
||||
// codes 38;5 (foreground) and 48;5 (background). For example,
|
||||
// bright red foreground is \x1b[38;5;9m. This only works on
|
||||
// terminals with 256-color support.
|
||||
//
|
||||
// TODO: When ansi_term adds support for bright variants using codes
|
||||
// 90-97 (foreground) and 100-107 (background), we should use those
|
||||
// for values 0x08 to 0x0f and only use Fixed for 0x10 to 0xff.
|
||||
n => Fixed(n),
|
||||
}
|
||||
} else if true_color {
|
||||
RGB(color.r, color.g, color.b)
|
||||
|
||||
@@ -2,3 +2,4 @@ examples/* linguist-vendored
|
||||
snapshots/* linguist-vendored
|
||||
benchmarks/* linguist-vendored
|
||||
benchmarks/test-src/* linguist-vendored
|
||||
scripts/* linguist-vendored
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
use bat::assets::HighlightingAssets;
|
||||
|
||||
/// This test ensures that we are not accidentally removing themes due to submodule updates.
|
||||
#[test]
|
||||
fn all_themes_are_present() {
|
||||
let assets = HighlightingAssets::from_binary();
|
||||
|
||||
let mut themes: Vec<_> = assets.themes().collect();
|
||||
themes.sort();
|
||||
|
||||
assert_eq!(
|
||||
themes,
|
||||
vec![
|
||||
"1337",
|
||||
"DarkNeon",
|
||||
"Dracula",
|
||||
"GitHub",
|
||||
"Monokai Extended",
|
||||
"Monokai Extended Bright",
|
||||
"Monokai Extended Light",
|
||||
"Monokai Extended Origin",
|
||||
"Nord",
|
||||
"OneHalfDark",
|
||||
"OneHalfLight",
|
||||
"Solarized (dark)",
|
||||
"Solarized (light)",
|
||||
"Sublime Snazzy",
|
||||
"TwoDark",
|
||||
"ansi-dark",
|
||||
"ansi-light",
|
||||
"base16",
|
||||
"zenburn"
|
||||
]
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
// This test should be considered a failure if the detected syntax differs between the following two commands:
|
||||
/*
|
||||
# bat --map-syntax '*.js:Markdown' --file-name 'issue_985.js' < issue_985.js
|
||||
# bat --map-syntax '*.js:Markdown' --file-name 'issue_985.js' issue_985.js
|
||||
*/
|
||||
@@ -1,4 +1,8 @@
|
||||
use assert_cmd::Command;
|
||||
use std::path::Path;
|
||||
use std::str::from_utf8;
|
||||
|
||||
const EXAMPLES_DIR: &str = "tests/examples";
|
||||
|
||||
fn bat_with_config() -> Command {
|
||||
let mut cmd = Command::cargo_bin("bat").unwrap();
|
||||
@@ -611,7 +615,7 @@ fn filename_multiple_ok() {
|
||||
.arg("--file-name=bar")
|
||||
.assert()
|
||||
.success()
|
||||
.stdout("File: foo\nFile: bar\n")
|
||||
.stdout("File: foo\n\nFile: bar\n")
|
||||
.stderr("");
|
||||
}
|
||||
|
||||
@@ -628,6 +632,18 @@ fn filename_multiple_err() {
|
||||
.failure();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn header_padding() {
|
||||
bat()
|
||||
.arg("--decorations=always")
|
||||
.arg("--style=header")
|
||||
.arg("test.txt")
|
||||
.arg("single-line.txt")
|
||||
.assert()
|
||||
.stdout("File: test.txt\nhello world\n\nFile: single-line.txt\nSingle Line\n")
|
||||
.stderr("");
|
||||
}
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
#[test]
|
||||
fn file_with_invalid_utf8_filename() {
|
||||
@@ -670,3 +686,32 @@ fn do_not_panic_regression_tests() {
|
||||
.success();
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn do_not_detect_different_syntax_for_stdin_and_files() {
|
||||
let file = "regression_tests/issue_985.js";
|
||||
|
||||
let cmd_for_file = bat()
|
||||
.arg("--color=always")
|
||||
.arg("--map-syntax=*.js:Markdown")
|
||||
.arg(&format!("--file-name={}", file))
|
||||
.arg("--style=plain")
|
||||
.arg(file)
|
||||
.assert()
|
||||
.success();
|
||||
|
||||
let cmd_for_stdin = bat()
|
||||
.arg("--color=always")
|
||||
.arg("--map-syntax=*.js:Markdown")
|
||||
.arg("--style=plain")
|
||||
.arg(&format!("--file-name={}", file))
|
||||
.pipe_stdin(Path::new(EXAMPLES_DIR).join(file))
|
||||
.unwrap()
|
||||
.assert()
|
||||
.success();
|
||||
|
||||
assert_eq!(
|
||||
from_utf8(&cmd_for_file.get_output().stdout).expect("output is valid utf-8"),
|
||||
from_utf8(&cmd_for_stdin.get_output().stdout).expect("output is valid utf-8")
|
||||
);
|
||||
}
|
||||
|
||||
@@ -4,13 +4,10 @@ use bat::assets::HighlightingAssets;
|
||||
|
||||
#[test]
|
||||
fn no_duplicate_extensions() {
|
||||
const KNOWN_EXCEPTIONS: &[&'static str] = &[
|
||||
const KNOWN_EXCEPTIONS: &[&str] = &[
|
||||
// The '.h' extension currently appears in multiple syntaxes: C, C++, Objective C,
|
||||
// Objective C++
|
||||
"h",
|
||||
// In addition to the standard Haskell syntax in 'Packages', we also ship the 'Cabal'
|
||||
// syntax which comes with a "Haskell (improved)" syntax.
|
||||
"hs",
|
||||
// In addition to the standard JavaScript syntax in 'Packages', we also ship the
|
||||
// 'Javascript (Babel)' syntax.
|
||||
"js",
|
||||
|
||||
Reference in New Issue
Block a user