on master help sign in
Merge branch 'master' into fix_654_stdin_filename
38178feKyle Criddle
.github/FUNDING.ymldeleted−3
@@ -1,3 +0,0 @@
1−# These are supported funding model platforms
2−
3−github: sharkdp
.gitmodules+47−47
@@ -1,32 +1,32 @@
1[submodule "assets/syntaxes/Elixir"]
1[submodule "assets/syntaxes/Elixir"]
2− path = assets/syntaxes/Elixir
2+ path = assets/syntaxes/02_Extra/Elixir
3 url = https://github.com/princemaple/elixir-sublime-syntax/
3 url = https://github.com/princemaple/elixir-sublime-syntax/
4[submodule "assets/syntaxes/Packages"]
4[submodule "assets/syntaxes/Packages"]
5− path = assets/syntaxes/Packages
5+ path = assets/syntaxes/01_Packages
6 url = https://github.com/sublimehq/Packages/
6 url = https://github.com/sublimehq/Packages/
7[submodule "assets/syntaxes/TOML"]
7[submodule "assets/syntaxes/TOML"]
8− path = assets/syntaxes/TOML
8+ path = assets/syntaxes/02_Extra/TOML
9 url = https://github.com/jasonwilliams/sublime_toml_highlighting
9 url = https://github.com/jasonwilliams/sublime_toml_highlighting
10[submodule "assets/syntaxes/Julia"]
10[submodule "assets/syntaxes/Julia"]
11− path = assets/syntaxes/Julia
11+ path = assets/syntaxes/02_Extra/Julia
12 url = https://github.com/JuliaEditorSupport/Julia-sublime
12 url = https://github.com/JuliaEditorSupport/Julia-sublime
13[submodule "assets/themes/sublime-monokai-extended"]
13[submodule "assets/themes/sublime-monokai-extended"]
14 path = assets/themes/sublime-monokai-extended
14 path = assets/themes/sublime-monokai-extended
15 url = https://github.com/jonschlinkert/sublime-monokai-extended
15 url = https://github.com/jonschlinkert/sublime-monokai-extended
16[submodule "assets/syntaxes/Docker"]
16[submodule "assets/syntaxes/Docker"]
17− path = assets/syntaxes/Docker
17+ path = assets/syntaxes/02_Extra/Docker
18 url = https://github.com/asbjornenge/Docker.tmbundle
18 url = https://github.com/asbjornenge/Docker.tmbundle
19[submodule "assets/syntaxes/VimL"]
19[submodule "assets/syntaxes/VimL"]
20− path = assets/syntaxes/VimL
20+ path = assets/syntaxes/02_Extra/VimL
21 url = https://github.com/SalGnt/Sublime-VimL
21 url = https://github.com/SalGnt/Sublime-VimL
22[submodule "assets/syntaxes/INI"]
22[submodule "assets/syntaxes/INI"]
23− path = assets/syntaxes/INI
23+ path = assets/syntaxes/02_Extra/INI
24 url = https://github.com/clintberry/sublime-text-2-ini
24 url = https://github.com/clintberry/sublime-text-2-ini
25[submodule "assets/syntaxes/CMake"]
25[submodule "assets/syntaxes/CMake"]
26− path = assets/syntaxes/CMake
26+ path = assets/syntaxes/02_Extra/CMake
27 url = https://github.com/zyxar/Sublime-CMakeLists
27 url = https://github.com/zyxar/Sublime-CMakeLists
28[submodule "assets/syntaxes/LESS"]
28[submodule "assets/syntaxes/LESS"]
29− path = assets/syntaxes/LESS
29+ path = assets/syntaxes/02_Extra/LESS
30 url = https://github.com/danro/LESS-sublime
30 url = https://github.com/danro/LESS-sublime
31[submodule "assets/themes/DarkNeon"]
31[submodule "assets/themes/DarkNeon"]
32 path = assets/themes/DarkNeon
32 path = assets/themes/DarkNeon
@@ -41,127 +41,127 @@
41 path = assets/themes/TwoDark
41 path = assets/themes/TwoDark
42 url = https://github.com/erremauro/TwoDark
42 url = https://github.com/erremauro/TwoDark
43[submodule "assets/syntaxes/AWK"]
43[submodule "assets/syntaxes/AWK"]
44− path = assets/syntaxes/AWK
44+ path = assets/syntaxes/02_Extra/AWK
45 url = https://github.com/JohnNilsson/awk-sublime
45 url = https://github.com/JohnNilsson/awk-sublime
46[submodule "assets/syntaxes/Nix"]
46[submodule "assets/syntaxes/Nix"]
47− path = assets/syntaxes/Nix
47+ path = assets/syntaxes/02_Extra/Nix
48 url = https://github.com/wmertens/sublime-nix
48 url = https://github.com/wmertens/sublime-nix
49[submodule "assets/themes/zenburn"]
49[submodule "assets/themes/zenburn"]
50 path = assets/themes/zenburn
50 path = assets/themes/zenburn
51 url = https://github.com/colinta/zenburn.git
51 url = https://github.com/colinta/zenburn.git
52[submodule "assets/syntaxes/Kotlin"]
52[submodule "assets/syntaxes/Kotlin"]
53− path = assets/syntaxes/Kotlin
53+ path = assets/syntaxes/02_Extra/Kotlin
54 url = https://github.com/vkostyukov/kotlin-sublime-package
54 url = https://github.com/vkostyukov/kotlin-sublime-package
55[submodule "assets/syntaxes/Elm"]
55[submodule "assets/syntaxes/Elm"]
56− path = assets/syntaxes/Elm
56+ path = assets/syntaxes/02_Extra/Elm
57 url = https://github.com/elm-community/SublimeElmLanguageSupport
57 url = https://github.com/elm-community/SublimeElmLanguageSupport
58[submodule "assets/syntaxes/TypeScript"]
58[submodule "assets/syntaxes/TypeScript"]
59− path = assets/syntaxes/TypeScript
59+ path = assets/syntaxes/02_Extra/TypeScript
60 url = https://github.com/Microsoft/TypeScript-Sublime-Plugin
60 url = https://github.com/Microsoft/TypeScript-Sublime-Plugin
61[submodule "assets/syntaxes/Puppet"]
61[submodule "assets/syntaxes/Puppet"]
62− path = assets/syntaxes/Puppet
62+ path = assets/syntaxes/02_Extra/Puppet
63 url = https://github.com/russCloak/SublimePuppet
63 url = https://github.com/russCloak/SublimePuppet
64[submodule "assets/syntaxes/CSV"]
64[submodule "assets/syntaxes/CSV"]
65− path = assets/syntaxes/CSV
65+ path = assets/syntaxes/02_Extra/CSV
66 url = https://github.com/wadetb/Sublime-Text-Advanced-CSV
66 url = https://github.com/wadetb/Sublime-Text-Advanced-CSV
67[submodule "assets/themes/onehalf"]
67[submodule "assets/themes/onehalf"]
68 path = assets/themes/onehalf
68 path = assets/themes/onehalf
69 url = https://github.com/sonph/onehalf
69 url = https://github.com/sonph/onehalf
70[submodule "assets/syntaxes/JavaScript (Babel)"]
70[submodule "assets/syntaxes/JavaScript (Babel)"]
71− path = assets/syntaxes/JavaScript (Babel)
71+ path = assets/syntaxes/02_Extra/JavaScript (Babel)
72 url = https://github.com/babel/babel-sublime
72 url = https://github.com/babel/babel-sublime
73[submodule "assets/syntaxes/Cabal"]
73[submodule "assets/syntaxes/Cabal"]
74− path = assets/syntaxes/Cabal
74+ path = assets/syntaxes/02_Extra/Cabal
75 url = https://github.com/SublimeHaskell/SublimeHaskell
75 url = https://github.com/SublimeHaskell/SublimeHaskell
76[submodule "assets/syntaxes/Dart"]
76[submodule "assets/syntaxes/Dart"]
77− path = assets/syntaxes/Dart
77+ path = assets/syntaxes/02_Extra/Dart
78 url = https://github.com/guillermooo/dart-sublime-bundle
78 url = https://github.com/guillermooo/dart-sublime-bundle
79[submodule "assets/syntaxes/FSharp"]
79[submodule "assets/syntaxes/FSharp"]
80− path = assets/syntaxes/FSharp
80+ path = assets/syntaxes/02_Extra/FSharp
81 url = https://github.com/hoest/sublimetext-fsharp
81 url = https://github.com/hoest/sublimetext-fsharp
82[submodule "assets/syntaxes/PureScript"]
82[submodule "assets/syntaxes/PureScript"]
83− path = assets/syntaxes/PureScript
83+ path = assets/syntaxes/02_Extra/PureScript
84 url = https://github.com/tellnobody1/sublime-purescript-syntax
84 url = https://github.com/tellnobody1/sublime-purescript-syntax
85[submodule "assets/syntaxes/Swift"]
85[submodule "assets/syntaxes/Swift"]
86− path = assets/syntaxes/Swift
86+ path = assets/syntaxes/02_Extra/Swift
87 url = https://github.com/quiqueg/Swift-Sublime-Package
87 url = https://github.com/quiqueg/Swift-Sublime-Package
88[submodule "assets/syntaxes/Crystal"]
88[submodule "assets/syntaxes/Crystal"]
89− path = assets/syntaxes/Crystal
89+ path = assets/syntaxes/02_Extra/Crystal
90 url = https://github.com/crystal-lang-tools/sublime-crystal.git
90 url = https://github.com/crystal-lang-tools/sublime-crystal.git
91[submodule "assets/syntaxes/PowerShell"]
91[submodule "assets/syntaxes/PowerShell"]
92− path = assets/syntaxes/PowerShell
92+ path = assets/syntaxes/02_Extra/PowerShell
93 url = https://github.com/PowerShell/EditorSyntax
93 url = https://github.com/PowerShell/EditorSyntax
94[submodule "assets/syntaxes/Robot"]
94[submodule "assets/syntaxes/Robot"]
95− path = assets/syntaxes/Robot
95+ path = assets/syntaxes/02_Extra/Robot
96 url = https://github.com/andriyko/sublime-robot-framework-assistant.git
96 url = https://github.com/andriyko/sublime-robot-framework-assistant.git
97[submodule "assets/themes/sublime-snazzy"]
97[submodule "assets/themes/sublime-snazzy"]
98 path = assets/themes/sublime-snazzy
98 path = assets/themes/sublime-snazzy
99 url = https://github.com/greggb/sublime-snazzy
99 url = https://github.com/greggb/sublime-snazzy
100[submodule "assets/syntaxes/AsciiDoc"]
100[submodule "assets/syntaxes/AsciiDoc"]
101− path = assets/syntaxes/AsciiDoc
101+ path = assets/syntaxes/02_Extra/AsciiDoc
102 url = https://github.com/SublimeText/AsciiDoc.git
102 url = https://github.com/SublimeText/AsciiDoc.git
103[submodule "assets/syntaxes/Assembly (ARM)"]
103[submodule "assets/syntaxes/Assembly (ARM)"]
104− path = assets/syntaxes/Assembly (ARM)
104+ path = assets/syntaxes/02_Extra/Assembly (ARM)
105 url = https://github.com/tvi/Sublime-ARM-Assembly
105 url = https://github.com/tvi/Sublime-ARM-Assembly
106[submodule "assets/syntaxes/syslog-syntax"]
106[submodule "assets/syntaxes/syslog-syntax"]
107− path = assets/syntaxes/Syslog
107+ path = assets/syntaxes/02_Extra/Syslog
108 url = https://github.com/caos21/syslog-syntax.git
108 url = https://github.com/caos21/syslog-syntax.git
109 branch = master
109 branch = master
110[submodule "assets/syntaxes/protobuf-syntax-highlighting"]
110[submodule "assets/syntaxes/protobuf-syntax-highlighting"]
111− path = assets/syntaxes/Protobuf
111+ path = assets/syntaxes/02_Extra/Protobuf
112 url = https://github.com/VcamX/protobuf-syntax-highlighting.git
112 url = https://github.com/VcamX/protobuf-syntax-highlighting.git
113 branch = master
113 branch = master
114[submodule "assets/syntaxes/Terraform"]
114[submodule "assets/syntaxes/Terraform"]
115− path = assets/syntaxes/Terraform
115+ path = assets/syntaxes/02_Extra/Terraform
116 url = https://github.com/alexlouden/Terraform.tmLanguage.git
116 url = https://github.com/alexlouden/Terraform.tmLanguage.git
117[submodule "assets/syntaxes/Jsonnet"]
117[submodule "assets/syntaxes/Jsonnet"]
118− path = assets/syntaxes/Jsonnet
118+ path = assets/syntaxes/02_Extra/Jsonnet
119 url = https://github.com/gburiola/sublime-jsonnet-syntax.git
119 url = https://github.com/gburiola/sublime-jsonnet-syntax.git
120[submodule "assets/syntaxes/varlink"]
120[submodule "assets/syntaxes/varlink"]
121− path = assets/syntaxes/varlink
121+ path = assets/syntaxes/02_Extra/varlink
122 url = https://github.com/varlink/syntax-highlight-varlink.git
122 url = https://github.com/varlink/syntax-highlight-varlink.git
123[submodule "assets/syntaxes/sublime-fish"]
123[submodule "assets/syntaxes/sublime-fish"]
124− path = assets/syntaxes/Fish
124+ path = assets/syntaxes/02_Extra/Fish
125 url = https://github.com/Phidica/sublime-fish.git
125 url = https://github.com/Phidica/sublime-fish.git
126[submodule "assets/syntaxes/Org mode"]
126[submodule "assets/syntaxes/Org mode"]
127− path = assets/syntaxes/Org mode
127+ path = assets/syntaxes/02_Extra/Org mode
128 url = https://github.com/jezcope/Org.tmbundle.git
128 url = https://github.com/jezcope/Org.tmbundle.git
129[submodule "assets/syntaxes/requirementstxt"]
129[submodule "assets/syntaxes/requirementstxt"]
130− path = assets/syntaxes/requirementstxt
130+ path = assets/syntaxes/02_Extra/requirementstxt
131 url = https://github.com/wuub/requirementstxt
131 url = https://github.com/wuub/requirementstxt
132[submodule "assets/syntaxes/DotENV"]
132[submodule "assets/syntaxes/DotENV"]
133− path = assets/syntaxes/DotENV
133+ path = assets/syntaxes/02_Extra/DotENV
134 url = https://github.com/zaynali53/DotENV
134 url = https://github.com/zaynali53/DotENV
135[submodule "assets/syntaxes/hosts"]
135[submodule "assets/syntaxes/hosts"]
136− path = assets/syntaxes/hosts
136+ path = assets/syntaxes/02_Extra/hosts
137 url = https://github.com/brandonwamboldt/sublime-hosts
137 url = https://github.com/brandonwamboldt/sublime-hosts
138[submodule "assets/syntaxes/ssh-config"]
138[submodule "assets/syntaxes/ssh-config"]
139− path = assets/syntaxes/ssh-config
139+ path = assets/syntaxes/02_Extra/ssh-config
140 url = https://github.com/robballou/sublimetext-sshconfig.git
140 url = https://github.com/robballou/sublimetext-sshconfig.git
141[submodule "assets/syntaxes/GraphQL"]
141[submodule "assets/syntaxes/GraphQL"]
142− path = assets/syntaxes/GraphQL
142+ path = assets/syntaxes/02_Extra/GraphQL
143 url = https://github.com/dncrews/GraphQL-SublimeText3.git
143 url = https://github.com/dncrews/GraphQL-SublimeText3.git
144[submodule "assets/syntaxes/Verilog"]
144[submodule "assets/syntaxes/Verilog"]
145− path = assets/syntaxes/Verilog
145+ path = assets/syntaxes/02_Extra/Verilog
146 url = https://github.com/pro711/sublime-verilog
146 url = https://github.com/pro711/sublime-verilog
147[submodule "assets/syntaxes/SCSS_Sass"]
147[submodule "assets/syntaxes/SCSS_Sass"]
148− path = assets/syntaxes/SCSS_Sass
148+ path = assets/syntaxes/02_Extra/SCSS_Sass
149 url = https://github.com/braver/SublimeSass
149 url = https://github.com/braver/SublimeSass
150[submodule "assets/syntaxes/Strace"]
150[submodule "assets/syntaxes/Strace"]
151− path = assets/syntaxes/Strace
151+ path = assets/syntaxes/02_Extra/Strace
152 url = https://github.com/djuretic/SublimeStrace
152 url = https://github.com/djuretic/SublimeStrace
153[submodule "assets/syntaxes/Jinja2"]
153[submodule "assets/syntaxes/Jinja2"]
154− path = assets/syntaxes/Jinja2
154+ path = assets/syntaxes/02_Extra/Jinja2
155 url = https://github.com/Martin819/sublime-jinja2
155 url = https://github.com/Martin819/sublime-jinja2
156[submodule "assets/syntaxes/SLS"]
156[submodule "assets/syntaxes/SLS"]
157− path = assets/syntaxes/SLS
157+ path = assets/syntaxes/02_Extra/SLS
158 url = https://github.com/saltstack/sublime-text
158 url = https://github.com/saltstack/sublime-text
159 branch = master
159 branch = master
160[submodule "assets/themes/dracula-sublime"]
160[submodule "assets/themes/dracula-sublime"]
161 path = assets/themes/dracula-sublime
161 path = assets/themes/dracula-sublime
162 url = https://github.com/dracula/sublime.git
162 url = https://github.com/dracula/sublime.git
163[submodule "assets/syntaxes/HTML (Twig)"]
163[submodule "assets/syntaxes/HTML (Twig)"]
164− path = assets/syntaxes/HTML (Twig)
164+ path = assets/syntaxes/02_Extra/HTML (Twig)
165 url = https://github.com/Anomareh/PHP-Twig.tmbundle.git
165 url = https://github.com/Anomareh/PHP-Twig.tmbundle.git
166[submodule "assets/themes/Nord-sublime"]
166[submodule "assets/themes/Nord-sublime"]
167 path = assets/themes/Nord-sublime
167 path = assets/themes/Nord-sublime
@@ -170,9 +170,9 @@
170 path = assets/themes/solarized-sublime
170 path = assets/themes/solarized-sublime
171 url = https://github.com/paulcpederson/solarized-sublime.git
171 url = https://github.com/paulcpederson/solarized-sublime.git
172[submodule "assets/syntaxes/Vue"]
172[submodule "assets/syntaxes/Vue"]
173− path = assets/syntaxes/Vue
173+ path = assets/syntaxes/02_Extra/Vue
174 url = https://github.com/vuejs/vue-syntax-highlight.git
174 url = https://github.com/vuejs/vue-syntax-highlight.git
175 branch = new
175 branch = new
176[submodule "assets/syntaxes/CoffeeScript"]
176[submodule "assets/syntaxes/CoffeeScript"]
177− path = assets/syntaxes/CoffeeScript
177+ path = assets/syntaxes/02_Extra/CoffeeScript
178 url = https://github.com/sustained/CoffeeScript-Sublime-Plugin
178 url = https://github.com/sustained/CoffeeScript-Sublime-Plugin
.travis.yml+3−3
@@ -33,15 +33,15 @@ matrix:
33
33
34 # Minimum Rust supported channel.
34 # Minimum Rust supported channel.
35 - os: linux
35 - os: linux
36− rust: 1.36.0
36+ rust: 1.37.0
37 env: TARGET=x86_64-unknown-linux-gnu
37 env: TARGET=x86_64-unknown-linux-gnu
38 - os: linux
38 - os: linux
39− rust: 1.36.0
39+ rust: 1.37.0
40 env:
40 env:
41 - TARGET=x86_64-unknown-linux-musl
41 - TARGET=x86_64-unknown-linux-musl
42 - CC_x86_64_unknown_linux_musl=/usr/bin/musl-gcc
42 - CC_x86_64_unknown_linux_musl=/usr/bin/musl-gcc
43 - os: osx
43 - os: osx
44− rust: 1.36.0
44+ rust: 1.37.0
45 env: TARGET=x86_64-apple-darwin
45 env: TARGET=x86_64-apple-darwin
46
46
47 # Disable nightly for now
47 # Disable nightly for now
Cargo.lock+365−451
@@ -2,15 +2,15 @@
2# It is not intended for manual editing.
2# It is not intended for manual editing.
3[[package]]
3[[package]]
4name = "adler32"
4name = "adler32"
5−version = "1.0.3"
5+version = "1.0.4"
6source = "registry+https://github.com/rust-lang/crates.io-index"
6source = "registry+https://github.com/rust-lang/crates.io-index"
7
7
8[[package]]
8[[package]]
9name = "aho-corasick"
9name = "aho-corasick"
10−version = "0.7.6"
10+version = "0.7.10"
11source = "registry+https://github.com/rust-lang/crates.io-index"
11source = "registry+https://github.com/rust-lang/crates.io-index"
12dependencies = [
12dependencies = [
13− "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
13+ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
14]
14]
15
15
16[[package]]
16[[package]]
@@ -18,7 +18,7 @@ name = "ansi_colours"
18version = "1.0.1"
18version = "1.0.1"
19source = "registry+https://github.com/rust-lang/crates.io-index"
19source = "registry+https://github.com/rust-lang/crates.io-index"
20dependencies = [
20dependencies = [
21− "cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)",
21+ "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)",
22]
22]
23
23
24[[package]]
24[[package]]
@@ -44,25 +44,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
44
44
45[[package]]
45[[package]]
46name = "arrayref"
46name = "arrayref"
47−version = "0.3.5"
47+version = "0.3.6"
48source = "registry+https://github.com/rust-lang/crates.io-index"
48source = "registry+https://github.com/rust-lang/crates.io-index"
49
49
50[[package]]
50[[package]]
51name = "arrayvec"
51name = "arrayvec"
52−version = "0.4.11"
52+version = "0.5.1"
53source = "registry+https://github.com/rust-lang/crates.io-index"
53source = "registry+https://github.com/rust-lang/crates.io-index"
54−dependencies = [
55− "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
56−]
57
54
58[[package]]
55[[package]]
59name = "assert_cmd"
56name = "assert_cmd"
60version = "0.12.0"
57version = "0.12.0"
61source = "registry+https://github.com/rust-lang/crates.io-index"
58source = "registry+https://github.com/rust-lang/crates.io-index"
62dependencies = [
59dependencies = [
63− "doc-comment 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
60+ "doc-comment 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
64 "escargot 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
61 "escargot 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
65− "predicates 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
62+ "predicates 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
66 "predicates-core 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
63 "predicates-core 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
67 "predicates-tree 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
64 "predicates-tree 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
68]
65]
@@ -73,33 +70,33 @@ version = "0.2.14"
73source = "registry+https://github.com/rust-lang/crates.io-index"
70source = "registry+https://github.com/rust-lang/crates.io-index"
74dependencies = [
71dependencies = [
75 "hermit-abi 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
72 "hermit-abi 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
76− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
73+ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
77 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
74 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
78]
75]
79
76
80[[package]]
77[[package]]
81name = "autocfg"
78name = "autocfg"
82−version = "0.1.6"
79+version = "1.0.0"
83source = "registry+https://github.com/rust-lang/crates.io-index"
80source = "registry+https://github.com/rust-lang/crates.io-index"
84
81
85[[package]]
82[[package]]
86name = "backtrace"
83name = "backtrace"
87−version = "0.3.35"
84+version = "0.3.45"
88source = "registry+https://github.com/rust-lang/crates.io-index"
85source = "registry+https://github.com/rust-lang/crates.io-index"
89dependencies = [
86dependencies = [
90− "backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)",
87+ "backtrace-sys 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)",
91− "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
88+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
92− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
89+ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
93 "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
90 "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
94]
91]
95
92
96[[package]]
93[[package]]
97name = "backtrace-sys"
94name = "backtrace-sys"
98−version = "0.1.31"
95+version = "0.1.34"
99source = "registry+https://github.com/rust-lang/crates.io-index"
96source = "registry+https://github.com/rust-lang/crates.io-index"
100dependencies = [
97dependencies = [
101− "cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)",
98+ "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)",
102− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
99+ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
103]
100]
104
101
105[[package]]
102[[package]]
@@ -107,12 +104,17 @@ name = "base64"
107version = "0.10.1"
104version = "0.10.1"
108source = "registry+https://github.com/rust-lang/crates.io-index"
105source = "registry+https://github.com/rust-lang/crates.io-index"
109dependencies = [
106dependencies = [
110− "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
107+ "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
111]
108]
112
109
110+[[package]]
111+name = "base64"
112+version = "0.11.0"
113+source = "registry+https://github.com/rust-lang/crates.io-index"
114+
113[[package]]
115[[package]]
114name = "bat"
116name = "bat"
115−version = "0.12.1"
117+version = "0.13.0"
116dependencies = [
118dependencies = [
117 "ansi_colours 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
119 "ansi_colours 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
118 "ansi_term 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
120 "ansi_term 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -123,10 +125,11 @@ dependencies = [
123 "content_inspector 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
125 "content_inspector 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
124 "dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
126 "dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
125 "encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
127 "encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
126− "error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
128+ "error-chain 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
129+ "git2 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
127− "git2 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
130+ "globset 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
128 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
131 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
129− "liquid 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
132+ "liquid 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
130 "shell-words 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
133 "shell-words 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
131 "syntect 3.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
134 "syntect 3.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
132 "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
135 "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -136,22 +139,21 @@ dependencies = [
136
139
137[[package]]
140[[package]]
138name = "bincode"
141name = "bincode"
139−version = "1.1.4"
142+version = "1.2.1"
140source = "registry+https://github.com/rust-lang/crates.io-index"
143source = "registry+https://github.com/rust-lang/crates.io-index"
141dependencies = [
144dependencies = [
142− "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
143− "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
145+ "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
144− "serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
146+ "serde 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)",
145]
147]
146
148
147[[package]]
149[[package]]
148name = "bindgen"
150name = "bindgen"
149−version = "0.50.0"
151+version = "0.50.1"
150source = "registry+https://github.com/rust-lang/crates.io-index"
152source = "registry+https://github.com/rust-lang/crates.io-index"
151dependencies = [
153dependencies = [
152− "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
154+ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
153− "cexpr 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
155+ "cexpr 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
154− "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
156+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
155 "clang-sys 0.28.1 (registry+https://github.com/rust-lang/crates.io-index)",
157 "clang-sys 0.28.1 (registry+https://github.com/rust-lang/crates.io-index)",
156 "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
158 "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
157 "env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
159 "env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -161,24 +163,24 @@ dependencies = [
161 "peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
163 "peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
162 "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
164 "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
163 "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
165 "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
164− "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
166+ "regex 1.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
165 "shlex 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
167 "shlex 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
166 "which 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
168 "which 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
167]
169]
168
170
169[[package]]
171[[package]]
170name = "bitflags"
172name = "bitflags"
171−version = "1.1.0"
173+version = "1.2.1"
172source = "registry+https://github.com/rust-lang/crates.io-index"
174source = "registry+https://github.com/rust-lang/crates.io-index"
173
175
174[[package]]
176[[package]]
175name = "blake2b_simd"
177name = "blake2b_simd"
176−version = "0.5.7"
178+version = "0.5.10"
177source = "registry+https://github.com/rust-lang/crates.io-index"
179source = "registry+https://github.com/rust-lang/crates.io-index"
178dependencies = [
180dependencies = [
179− "arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
181+ "arrayref 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
180− "arrayvec 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
182+ "arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
181− "constant_time_eq 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
183+ "constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
182]
184]
183
185
184[[package]]
186[[package]]
@@ -186,20 +188,28 @@ name = "block-buffer"
186version = "0.7.3"
188version = "0.7.3"
187source = "registry+https://github.com/rust-lang/crates.io-index"
189source = "registry+https://github.com/rust-lang/crates.io-index"
188dependencies = [
190dependencies = [
189− "block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
191+ "block-padding 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
190 "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
192 "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
191− "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
193+ "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
192 "generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)",
194 "generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)",
193]
195]
194
196
195[[package]]
197[[package]]
196name = "block-padding"
198name = "block-padding"
197−version = "0.1.4"
199+version = "0.1.5"
198source = "registry+https://github.com/rust-lang/crates.io-index"
200source = "registry+https://github.com/rust-lang/crates.io-index"
199dependencies = [
201dependencies = [
200 "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
202 "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
201]
203]
202
204
205+[[package]]
206+name = "bstr"
207+version = "0.2.12"
208+source = "registry+https://github.com/rust-lang/crates.io-index"
209+dependencies = [
210+ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
211+]
212+
203[[package]]
213[[package]]
204name = "byte-tools"
214name = "byte-tools"
205version = "0.3.1"
215version = "0.3.1"
@@ -207,21 +217,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
207
217
208[[package]]
218[[package]]
209name = "byteorder"
219name = "byteorder"
210−version = "1.3.2"
220+version = "1.3.4"
211source = "registry+https://github.com/rust-lang/crates.io-index"
221source = "registry+https://github.com/rust-lang/crates.io-index"
212
222
213[[package]]
223[[package]]
214name = "cc"
224name = "cc"
215−version = "1.0.45"
225+version = "1.0.50"
216source = "registry+https://github.com/rust-lang/crates.io-index"
226source = "registry+https://github.com/rust-lang/crates.io-index"
217dependencies = [
227dependencies = [
218− "jobserver 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
219− "num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
228+ "jobserver 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)",
220]
229]
221
230
222[[package]]
231[[package]]
223name = "cexpr"
232name = "cexpr"
224−version = "0.3.5"
233+version = "0.3.6"
225source = "registry+https://github.com/rust-lang/crates.io-index"
234source = "registry+https://github.com/rust-lang/crates.io-index"
226dependencies = [
235dependencies = [
227 "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
236 "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -229,17 +238,16 @@ dependencies = [
229
238
230[[package]]
239[[package]]
231name = "cfg-if"
240name = "cfg-if"
232−version = "0.1.9"
241+version = "0.1.10"
233source = "registry+https://github.com/rust-lang/crates.io-index"
242source = "registry+https://github.com/rust-lang/crates.io-index"
234
243
235[[package]]
244[[package]]
236name = "chrono"
245name = "chrono"
237−version = "0.4.9"
246+version = "0.4.11"
238source = "registry+https://github.com/rust-lang/crates.io-index"
247source = "registry+https://github.com/rust-lang/crates.io-index"
239dependencies = [
248dependencies = [
240− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
241− "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
249+ "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
242− "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
250+ "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
243 "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
251 "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
244]
252]
245
253
@@ -249,7 +257,7 @@ version = "0.28.1"
249source = "registry+https://github.com/rust-lang/crates.io-index"
257source = "registry+https://github.com/rust-lang/crates.io-index"
250dependencies = [
258dependencies = [
251 "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
259 "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
252− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
260+ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
253 "libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
261 "libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
254]
262]
255
263
@@ -260,7 +268,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
260dependencies = [
268dependencies = [
261 "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
269 "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
262 "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
270 "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
263− "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
271+ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
264 "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
272 "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
265 "term_size 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
273 "term_size 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
266 "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
274 "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -275,18 +283,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
275dependencies = [
283dependencies = [
276 "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
284 "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
277 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
285 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
278− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
286+ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
279 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
287 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
280]
288]
281
289
282−[[package]]
283−name = "cloudabi"
284−version = "0.0.3"
285−source = "registry+https://github.com/rust-lang/crates.io-index"
286−dependencies = [
287− "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
288−]
289−
290[[package]]
290[[package]]
291name = "console"
291name = "console"
292version = "0.10.0"
292version = "0.10.0"
@@ -295,8 +295,8 @@ dependencies = [
295 "clicolors-control 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
295 "clicolors-control 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
296 "encode_unicode 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
296 "encode_unicode 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
297 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
297 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
298− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
298+ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
299− "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
299+ "regex 1.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
300 "termios 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
300 "termios 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
301 "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
301 "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
302 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
302 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -304,7 +304,7 @@ dependencies = [
304
304
305[[package]]
305[[package]]
306name = "constant_time_eq"
306name = "constant_time_eq"
307−version = "0.1.4"
307+version = "0.1.5"
308source = "registry+https://github.com/rust-lang/crates.io-index"
308source = "registry+https://github.com/rust-lang/crates.io-index"
309
309
310[[package]]
310[[package]]
@@ -312,7 +312,7 @@ name = "content_inspector"
312version = "0.2.4"
312version = "0.2.4"
313source = "registry+https://github.com/rust-lang/crates.io-index"
313source = "registry+https://github.com/rust-lang/crates.io-index"
314dependencies = [
314dependencies = [
315− "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
315+ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
316]
316]
317
317
318[[package]]
318[[package]]
@@ -320,23 +320,19 @@ name = "crc32fast"
320version = "1.2.0"
320version = "1.2.0"
321source = "registry+https://github.com/rust-lang/crates.io-index"
321source = "registry+https://github.com/rust-lang/crates.io-index"
322dependencies = [
322dependencies = [
323− "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
323+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
324]
324]
325
325
326[[package]]
326[[package]]
327name = "crossbeam-utils"
327name = "crossbeam-utils"
328−version = "0.6.6"
328+version = "0.7.2"
329source = "registry+https://github.com/rust-lang/crates.io-index"
329source = "registry+https://github.com/rust-lang/crates.io-index"
330dependencies = [
330dependencies = [
331+ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
331− "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
332+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
332 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
333 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
333]
334]
334
335
335−[[package]]
336−name = "deunicode"
337−version = "1.0.0"
338−source = "registry+https://github.com/rust-lang/crates.io-index"
339−
340[[package]]
336[[package]]
341name = "difference"
337name = "difference"
342version = "2.0.0"
338version = "2.0.0"
@@ -355,7 +351,7 @@ name = "dirs"
355version = "2.0.2"
351version = "2.0.2"
356source = "registry+https://github.com/rust-lang/crates.io-index"
352source = "registry+https://github.com/rust-lang/crates.io-index"
357dependencies = [
353dependencies = [
358− "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
354+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
359 "dirs-sys 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
355 "dirs-sys 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
360]
356]
361
357
@@ -364,15 +360,15 @@ name = "dirs-sys"
364version = "0.3.4"
360version = "0.3.4"
365source = "registry+https://github.com/rust-lang/crates.io-index"
361source = "registry+https://github.com/rust-lang/crates.io-index"
366dependencies = [
362dependencies = [
367− "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
363+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
368− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
364+ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
369− "redox_users 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
365+ "redox_users 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
370 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
366 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
371]
367]
372
368
373[[package]]
369[[package]]
374name = "doc-comment"
370name = "doc-comment"
375−version = "0.3.1"
371+version = "0.3.3"
376source = "registry+https://github.com/rust-lang/crates.io-index"
372source = "registry+https://github.com/rust-lang/crates.io-index"
377
373
378[[package]]
374[[package]]
@@ -448,18 +444,18 @@ version = "0.6.2"
448source = "registry+https://github.com/rust-lang/crates.io-index"
444source = "registry+https://github.com/rust-lang/crates.io-index"
449dependencies = [
445dependencies = [
450 "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
446 "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
451− "humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
447+ "humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
452 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
448 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
453− "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
449+ "regex 1.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
454− "termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
450+ "termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
455]
451]
456
452
457[[package]]
453[[package]]
458name = "error-chain"
454name = "error-chain"
459−version = "0.12.1"
455+version = "0.12.2"
460source = "registry+https://github.com/rust-lang/crates.io-index"
456source = "registry+https://github.com/rust-lang/crates.io-index"
461dependencies = [
457dependencies = [
462− "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
458+ "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
463]
459]
464
460
465[[package]]
461[[package]]
@@ -469,28 +465,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
469dependencies = [
465dependencies = [
470 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
466 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
471 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
467 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
472− "serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
468+ "serde 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)",
473− "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
469+ "serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)",
474]
470]
475
471
476[[package]]
472[[package]]
477name = "failure"
473name = "failure"
478−version = "0.1.5"
474+version = "0.1.7"
479−source = "registry+https://github.com/rust-lang/crates.io-index"
480−dependencies = [
481− "backtrace 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)",
482− "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
483−]
484−
485−[[package]]
486−name = "failure_derive"
487−version = "0.1.5"
488source = "registry+https://github.com/rust-lang/crates.io-index"
475source = "registry+https://github.com/rust-lang/crates.io-index"
489dependencies = [
476dependencies = [
490− "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
491− "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
492− "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)",
493− "synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
477+ "backtrace 0.3.45 (registry+https://github.com/rust-lang/crates.io-index)",
494]
478]
495
479
496[[package]]
480[[package]]
@@ -500,13 +484,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
500
484
501[[package]]
485[[package]]
502name = "flate2"
486name = "flate2"
503−version = "1.0.11"
487+version = "1.0.14"
504source = "registry+https://github.com/rust-lang/crates.io-index"
488source = "registry+https://github.com/rust-lang/crates.io-index"
505dependencies = [
489dependencies = [
490+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
506 "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
491 "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
507− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
508− "miniz-sys 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
492+ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
509− "miniz_oxide 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
493+ "miniz_oxide 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
510]
494]
511
495
512[[package]]
496[[package]]
@@ -524,7 +508,7 @@ name = "fxhash"
524version = "0.2.1"
508version = "0.2.1"
525source = "registry+https://github.com/rust-lang/crates.io-index"
509source = "registry+https://github.com/rust-lang/crates.io-index"
526dependencies = [
510dependencies = [
527− "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
511+ "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
528]
512]
529
513
530[[package]]
514[[package]]
@@ -537,24 +521,24 @@ dependencies = [
537
521
538[[package]]
522[[package]]
539name = "getrandom"
523name = "getrandom"
540−version = "0.1.12"
524+version = "0.1.14"
541source = "registry+https://github.com/rust-lang/crates.io-index"
525source = "registry+https://github.com/rust-lang/crates.io-index"
542dependencies = [
526dependencies = [
543− "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
527+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
544− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
528+ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
545− "wasi 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
529+ "wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)",
546]
530]
547
531
548[[package]]
532[[package]]
549name = "git2"
533name = "git2"
550−version = "0.12.0"
534+version = "0.13.0"
551source = "registry+https://github.com/rust-lang/crates.io-index"
535source = "registry+https://github.com/rust-lang/crates.io-index"
552dependencies = [
536dependencies = [
553− "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
537+ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
554− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
538+ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
555− "libgit2-sys 0.11.0+0.99.0 (registry+https://github.com/rust-lang/crates.io-index)",
539+ "libgit2-sys 0.12.0+0.99.0 (registry+https://github.com/rust-lang/crates.io-index)",
556 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
540 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
557− "url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
541+ "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
558]
542]
559
543
560[[package]]
544[[package]]
@@ -562,20 +546,32 @@ name = "glob"
562version = "0.3.0"
546version = "0.3.0"
563source = "registry+https://github.com/rust-lang/crates.io-index"
547source = "registry+https://github.com/rust-lang/crates.io-index"
564
548
549+[[package]]
550+name = "globset"
551+version = "0.4.5"
552+source = "registry+https://github.com/rust-lang/crates.io-index"
553+dependencies = [
554+ "aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)",
555+ "bstr 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
556+ "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
557+ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
558+ "regex 1.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
559+]
560+
565[[package]]
561[[package]]
566name = "hermit-abi"
562name = "hermit-abi"
567version = "0.1.8"
563version = "0.1.8"
568source = "registry+https://github.com/rust-lang/crates.io-index"
564source = "registry+https://github.com/rust-lang/crates.io-index"
569dependencies = [
565dependencies = [
570− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
566+ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
571]
567]
572
568
573[[package]]
569[[package]]
574name = "humantime"
570name = "humantime"
575−version = "1.2.0"
571+version = "1.3.0"
576source = "registry+https://github.com/rust-lang/crates.io-index"
572source = "registry+https://github.com/rust-lang/crates.io-index"
577dependencies = [
573dependencies = [
578− "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
574+ "quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
579]
575]
580
576
581[[package]]
577[[package]]
@@ -585,7 +581,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
585dependencies = [
581dependencies = [
586 "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
582 "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
587 "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
583 "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
588− "unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
584+ "unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
589]
585]
590
586
591[[package]]
587[[package]]
@@ -595,12 +591,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
595dependencies = [
591dependencies = [
596 "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
592 "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
597 "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
593 "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
598− "unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
594+ "unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
599]
595]
600
596
601[[package]]
597[[package]]
602name = "itertools"
598name = "itertools"
603−version = "0.8.0"
599+version = "0.8.2"
604source = "registry+https://github.com/rust-lang/crates.io-index"
600source = "registry+https://github.com/rust-lang/crates.io-index"
605dependencies = [
601dependencies = [
606 "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
602 "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -608,17 +604,15 @@ dependencies = [
608
604
609[[package]]
605[[package]]
610name = "itoa"
606name = "itoa"
611−version = "0.4.4"
607+version = "0.4.5"
612source = "registry+https://github.com/rust-lang/crates.io-index"
608source = "registry+https://github.com/rust-lang/crates.io-index"
613
609
614[[package]]
610[[package]]
615name = "jobserver"
611name = "jobserver"
616−version = "0.1.17"
612+version = "0.1.21"
617source = "registry+https://github.com/rust-lang/crates.io-index"
613source = "registry+https://github.com/rust-lang/crates.io-index"
618dependencies = [
614dependencies = [
619− "getrandom 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
620− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
621− "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
615+ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
622]
616]
623
617
624[[package]]
618[[package]]
@@ -630,6 +624,14 @@ dependencies = [
630 "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
624 "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
631]
625]
632
626
627+[[package]]
628+name = "kstring"
629+version = "0.1.0"
630+source = "registry+https://github.com/rust-lang/crates.io-index"
631+dependencies = [
632+ "serde 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)",
633+]
634+
633[[package]]
635[[package]]
634name = "lazy_static"
636name = "lazy_static"
635version = "1.4.0"
637version = "1.4.0"
@@ -642,18 +644,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
642
644
643[[package]]
645[[package]]
644name = "libc"
646name = "libc"
645−version = "0.2.62"
647+version = "0.2.68"
646source = "registry+https://github.com/rust-lang/crates.io-index"
648source = "registry+https://github.com/rust-lang/crates.io-index"
647
649
648[[package]]
650[[package]]
649name = "libgit2-sys"
651name = "libgit2-sys"
650−version = "0.11.0+0.99.0"
652+version = "0.12.0+0.99.0"
651source = "registry+https://github.com/rust-lang/crates.io-index"
653source = "registry+https://github.com/rust-lang/crates.io-index"
652dependencies = [
654dependencies = [
653− "cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)",
655+ "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)",
654− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
656+ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
655 "libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
657 "libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
656− "pkg-config 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
658+ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
657]
659]
658
660
659[[package]]
661[[package]]
@@ -661,7 +663,7 @@ name = "libloading"
661version = "0.5.2"
663version = "0.5.2"
662source = "registry+https://github.com/rust-lang/crates.io-index"
664source = "registry+https://github.com/rust-lang/crates.io-index"
663dependencies = [
665dependencies = [
664− "cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)",
666+ "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)",
665 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
667 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
666]
668]
667
669
@@ -670,10 +672,10 @@ name = "libz-sys"
670version = "1.0.25"
672version = "1.0.25"
671source = "registry+https://github.com/rust-lang/crates.io-index"
673source = "registry+https://github.com/rust-lang/crates.io-index"
672dependencies = [
674dependencies = [
673− "cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)",
675+ "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)",
674− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
676+ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
675− "pkg-config 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
677+ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
676− "vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
678+ "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
677]
679]
678
680
679[[package]]
681[[package]]
@@ -681,7 +683,7 @@ name = "line-wrap"
681version = "0.1.1"
683version = "0.1.1"
682source = "registry+https://github.com/rust-lang/crates.io-index"
684source = "registry+https://github.com/rust-lang/crates.io-index"
683dependencies = [
685dependencies = [
684− "safemem 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
686+ "safemem 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
685]
687]
686
688
687[[package]]
689[[package]]
@@ -691,78 +693,56 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
691
693
692[[package]]
694[[package]]
693name = "liquid"
695name = "liquid"
694−version = "0.19.0"
696+version = "0.20.0"
695source = "registry+https://github.com/rust-lang/crates.io-index"
697source = "registry+https://github.com/rust-lang/crates.io-index"
696dependencies = [
698dependencies = [
697− "chrono 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)",
698− "deunicode 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
699− "doc-comment 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
699+ "doc-comment 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
700− "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
701− "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
700+ "kstring 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
702− "liquid-compiler 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
701+ "liquid-core 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
703− "liquid-derive 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
704− "liquid-error 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
702+ "liquid-derive 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
705− "liquid-interpreter 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
706− "liquid-value 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
707− "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
703+ "liquid-lib 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
708− "serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
709− "unicode-segmentation 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
710− "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
704+ "serde 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)",
711]
705]
712
706
713[[package]]
707[[package]]
714−name = "liquid-compiler"
708+name = "liquid-core"
715−version = "0.19.0"
709+version = "0.20.0"
716source = "registry+https://github.com/rust-lang/crates.io-index"
710source = "registry+https://github.com/rust-lang/crates.io-index"
717dependencies = [
711dependencies = [
712+ "anymap 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
713+ "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
718− "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
714+ "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
719− "liquid-error 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
715+ "kstring 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
720− "liquid-interpreter 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
716+ "liquid-derive 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
721− "liquid-value 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
717+ "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
722− "pest 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
718+ "pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
723 "pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
719 "pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
720+ "serde 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)",
724]
721]
725
722
726[[package]]
723[[package]]
727name = "liquid-derive"
724name = "liquid-derive"
728−version = "0.19.0"
725+version = "0.20.0"
729−source = "registry+https://github.com/rust-lang/crates.io-index"
730−dependencies = [
731− "liquid-compiler 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
732− "liquid-error 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
733− "liquid-interpreter 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
734− "liquid-value 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
735− "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
736− "proc-quote 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
737− "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)",
738−]
739−
740−[[package]]
741−name = "liquid-error"
742−version = "0.19.0"
743−source = "registry+https://github.com/rust-lang/crates.io-index"
744−
745−[[package]]
746−name = "liquid-interpreter"
747−version = "0.19.0"
748source = "registry+https://github.com/rust-lang/crates.io-index"
726source = "registry+https://github.com/rust-lang/crates.io-index"
749dependencies = [
727dependencies = [
750− "anymap 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
751− "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
728+ "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
752− "liquid-error 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
729+ "proc-quote 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
753− "liquid-value 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
730+ "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
754]
731]
755
732
756[[package]]
733[[package]]
757−name = "liquid-value"
734+name = "liquid-lib"
758−version = "0.19.0"
735+version = "0.20.0"
759source = "registry+https://github.com/rust-lang/crates.io-index"
736source = "registry+https://github.com/rust-lang/crates.io-index"
760dependencies = [
737dependencies = [
761− "chrono 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)",
738+ "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
739+ "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
762− "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
740+ "kstring 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
763− "liquid-error 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
741+ "liquid-core 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
742+ "once_cell 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
764− "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
743+ "regex 1.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
744+ "unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
765− "serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
745+ "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
766]
746]
767
747
768[[package]]
748[[package]]
@@ -770,7 +750,7 @@ name = "log"
770version = "0.4.8"
750version = "0.4.8"
771source = "registry+https://github.com/rust-lang/crates.io-index"
751source = "registry+https://github.com/rust-lang/crates.io-index"
772dependencies = [
752dependencies = [
773− "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
753+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
774]
754]
775
755
776[[package]]
756[[package]]
@@ -785,73 +765,56 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
785
765
786[[package]]
766[[package]]
787name = "memchr"
767name = "memchr"
788−version = "2.2.1"
768+version = "2.3.3"
789source = "registry+https://github.com/rust-lang/crates.io-index"
769source = "registry+https://github.com/rust-lang/crates.io-index"
790
770
791−[[package]]
792−name = "miniz-sys"
793−version = "0.1.12"
794−source = "registry+https://github.com/rust-lang/crates.io-index"
795−dependencies = [
796− "cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)",
797− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
798−]
799−
800[[package]]
771[[package]]
801name = "miniz_oxide"
772name = "miniz_oxide"
802−version = "0.3.2"
773+version = "0.3.6"
803source = "registry+https://github.com/rust-lang/crates.io-index"
774source = "registry+https://github.com/rust-lang/crates.io-index"
804dependencies = [
775dependencies = [
805− "adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
776+ "adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
806]
777]
807
778
808−[[package]]
809−name = "nodrop"
810−version = "0.1.13"
811−source = "registry+https://github.com/rust-lang/crates.io-index"
812−
813[[package]]
779[[package]]
814name = "nom"
780name = "nom"
815version = "4.2.3"
781version = "4.2.3"
816source = "registry+https://github.com/rust-lang/crates.io-index"
782source = "registry+https://github.com/rust-lang/crates.io-index"
817dependencies = [
783dependencies = [
818− "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
784+ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
819 "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
785 "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
820]
786]
821
787
822[[package]]
788[[package]]
823name = "num-integer"
789name = "num-integer"
824−version = "0.1.41"
790+version = "0.1.42"
825source = "registry+https://github.com/rust-lang/crates.io-index"
791source = "registry+https://github.com/rust-lang/crates.io-index"
826dependencies = [
792dependencies = [
827− "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
793+ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
828− "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
794+ "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
829]
795]
830
796
831[[package]]
797[[package]]
832name = "num-traits"
798name = "num-traits"
833−version = "0.2.8"
799+version = "0.2.11"
834source = "registry+https://github.com/rust-lang/crates.io-index"
800source = "registry+https://github.com/rust-lang/crates.io-index"
835dependencies = [
801dependencies = [
836− "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
802+ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
837]
803]
838
804
839[[package]]
805[[package]]
840−name = "num_cpus"
806+name = "once_cell"
841−version = "1.10.1"
807+version = "1.3.1"
842source = "registry+https://github.com/rust-lang/crates.io-index"
808source = "registry+https://github.com/rust-lang/crates.io-index"
843−dependencies = [
844− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
845−]
846
809
847[[package]]
810[[package]]
848name = "onig"
811name = "onig"
849version = "5.0.0"
812version = "5.0.0"
850source = "registry+https://github.com/rust-lang/crates.io-index"
813source = "registry+https://github.com/rust-lang/crates.io-index"
851dependencies = [
814dependencies = [
852− "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
815+ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
853 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
816 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
854− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
817+ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
855 "onig_sys 69.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
818 "onig_sys 69.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
856]
819]
857
820
@@ -860,9 +823,9 @@ name = "onig_sys"
860version = "69.2.0"
823version = "69.2.0"
861source = "registry+https://github.com/rust-lang/crates.io-index"
824source = "registry+https://github.com/rust-lang/crates.io-index"
862dependencies = [
825dependencies = [
863− "bindgen 0.50.0 (registry+https://github.com/rust-lang/crates.io-index)",
826+ "bindgen 0.50.1 (registry+https://github.com/rust-lang/crates.io-index)",
864− "cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)",
827+ "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)",
865− "pkg-config 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
828+ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
866]
829]
867
830
868[[package]]
831[[package]]
@@ -887,10 +850,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
887
850
888[[package]]
851[[package]]
889name = "pest"
852name = "pest"
890−version = "2.1.2"
853+version = "2.1.3"
891source = "registry+https://github.com/rust-lang/crates.io-index"
854source = "registry+https://github.com/rust-lang/crates.io-index"
892dependencies = [
855dependencies = [
893− "ucd-trie 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
856+ "ucd-trie 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
894]
857]
895
858
896[[package]]
859[[package]]
@@ -898,35 +861,35 @@ name = "pest_derive"
898version = "2.1.0"
861version = "2.1.0"
899source = "registry+https://github.com/rust-lang/crates.io-index"
862source = "registry+https://github.com/rust-lang/crates.io-index"
900dependencies = [
863dependencies = [
901− "pest 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
864+ "pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
902− "pest_generator 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
865+ "pest_generator 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
903]
866]
904
867
905[[package]]
868[[package]]
906name = "pest_generator"
869name = "pest_generator"
907−version = "2.1.1"
870+version = "2.1.3"
908source = "registry+https://github.com/rust-lang/crates.io-index"
871source = "registry+https://github.com/rust-lang/crates.io-index"
909dependencies = [
872dependencies = [
910− "pest 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
873+ "pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
911− "pest_meta 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
874+ "pest_meta 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
912− "proc-macro2 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
875+ "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
913− "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
876+ "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
914− "syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
877+ "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
915]
878]
916
879
917[[package]]
880[[package]]
918name = "pest_meta"
881name = "pest_meta"
919−version = "2.1.2"
882+version = "2.1.3"
920source = "registry+https://github.com/rust-lang/crates.io-index"
883source = "registry+https://github.com/rust-lang/crates.io-index"
921dependencies = [
884dependencies = [
922 "maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
885 "maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
923− "pest 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
886+ "pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
924− "sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
887+ "sha-1 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
925]
888]
926
889
927[[package]]
890[[package]]
928name = "pkg-config"
891name = "pkg-config"
929−version = "0.3.15"
892+version = "0.3.17"
930source = "registry+https://github.com/rust-lang/crates.io-index"
893source = "registry+https://github.com/rust-lang/crates.io-index"
931
894
932[[package]]
895[[package]]
@@ -935,16 +898,16 @@ version = "0.4.2"
935source = "registry+https://github.com/rust-lang/crates.io-index"
898source = "registry+https://github.com/rust-lang/crates.io-index"
936dependencies = [
899dependencies = [
937 "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
900 "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
938− "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
901+ "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
939− "humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
902+ "humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
940 "line-wrap 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
903 "line-wrap 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
941− "serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
904+ "serde 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)",
942 "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
905 "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
943]
906]
944
907
945[[package]]
908[[package]]
946name = "predicates"
909name = "predicates"
947−version = "1.0.1"
910+version = "1.0.4"
948source = "registry+https://github.com/rust-lang/crates.io-index"
911source = "registry+https://github.com/rust-lang/crates.io-index"
949dependencies = [
912dependencies = [
950 "difference 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
913 "difference 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -967,13 +930,8 @@ dependencies = [
967
930
968[[package]]
931[[package]]
969name = "proc-macro-hack"
932name = "proc-macro-hack"
970−version = "0.5.9"
933+version = "0.5.14"
971source = "registry+https://github.com/rust-lang/crates.io-index"
934source = "registry+https://github.com/rust-lang/crates.io-index"
972−dependencies = [
973− "proc-macro2 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
974− "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
975− "syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
976−]
977
935
978[[package]]
936[[package]]
979name = "proc-macro2"
937name = "proc-macro2"
@@ -985,7 +943,7 @@ dependencies = [
985
943
986[[package]]
944[[package]]
987name = "proc-macro2"
945name = "proc-macro2"
988−version = "1.0.2"
946+version = "1.0.9"
989source = "registry+https://github.com/rust-lang/crates.io-index"
947source = "registry+https://github.com/rust-lang/crates.io-index"
990dependencies = [
948dependencies = [
991 "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
949 "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -993,29 +951,29 @@ dependencies = [
993
951
994[[package]]
952[[package]]
995name = "proc-quote"
953name = "proc-quote"
996−version = "0.2.2"
954+version = "0.3.0"
997source = "registry+https://github.com/rust-lang/crates.io-index"
955source = "registry+https://github.com/rust-lang/crates.io-index"
998dependencies = [
956dependencies = [
999− "proc-macro-hack 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)",
957+ "proc-macro-hack 0.5.14 (registry+https://github.com/rust-lang/crates.io-index)",
1000− "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
958+ "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
1001− "proc-quote-impl 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
959+ "proc-quote-impl 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
1002− "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
960+ "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
1003− "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)",
961+ "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
1004]
962]
1005
963
1006[[package]]
964[[package]]
1007name = "proc-quote-impl"
965name = "proc-quote-impl"
1008−version = "0.2.2"
966+version = "0.3.0"
1009source = "registry+https://github.com/rust-lang/crates.io-index"
967source = "registry+https://github.com/rust-lang/crates.io-index"
1010dependencies = [
968dependencies = [
969+ "proc-macro-hack 0.5.14 (registry+https://github.com/rust-lang/crates.io-index)",
1011− "proc-macro-hack 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)",
970+ "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
1012− "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
1013− "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
971+ "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
1014]
972]
1015
973
1016[[package]]
974[[package]]
1017name = "quick-error"
975name = "quick-error"
1018−version = "1.2.2"
976+version = "1.2.3"
1019source = "registry+https://github.com/rust-lang/crates.io-index"
977source = "registry+https://github.com/rust-lang/crates.io-index"
1020
978
1021[[package]]
979[[package]]
@@ -1028,10 +986,10 @@ dependencies = [
1028
986
1029[[package]]
987[[package]]
1030name = "quote"
988name = "quote"
1031−version = "1.0.2"
989+version = "1.0.3"
1032source = "registry+https://github.com/rust-lang/crates.io-index"
990source = "registry+https://github.com/rust-lang/crates.io-index"
1033dependencies = [
991dependencies = [
1034− "proc-macro2 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
992+ "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
1035]
993]
1036
994
1037[[package]]
995[[package]]
@@ -1040,7 +998,7 @@ version = "0.4.6"
1040source = "registry+https://github.com/rust-lang/crates.io-index"
998source = "registry+https://github.com/rust-lang/crates.io-index"
1041dependencies = [
999dependencies = [
1042 "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
1000 "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
1043− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
1001+ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
1044 "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
1002 "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
1045 "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
1003 "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
1046 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
1004 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1059,19 +1017,6 @@ name = "rand_core"
1059version = "0.4.2"
1017version = "0.4.2"
1060source = "registry+https://github.com/rust-lang/crates.io-index"
1018source = "registry+https://github.com/rust-lang/crates.io-index"
1061
1019
1062−[[package]]
1063−name = "rand_os"
1064−version = "0.1.3"
1065−source = "registry+https://github.com/rust-lang/crates.io-index"
1066−dependencies = [
1067− "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
1068− "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
1069− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
1070− "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
1071− "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
1072− "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
1073−]
1074−
1075[[package]]
1020[[package]]
1076name = "rdrand"
1021name = "rdrand"
1077version = "0.4.0"
1022version = "0.4.0"
@@ -1087,29 +1032,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
1087
1032
1088[[package]]
1033[[package]]
1089name = "redox_users"
1034name = "redox_users"
1090−version = "0.3.1"
1035+version = "0.3.4"
1091source = "registry+https://github.com/rust-lang/crates.io-index"
1036source = "registry+https://github.com/rust-lang/crates.io-index"
1092dependencies = [
1037dependencies = [
1093− "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
1094− "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
1038+ "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
1095 "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
1039 "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
1096− "rust-argon2 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
1040+ "rust-argon2 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
1097]
1041]
1098
1042
1099[[package]]
1043[[package]]
1100name = "regex"
1044name = "regex"
1101−version = "1.3.1"
1045+version = "1.3.5"
1102source = "registry+https://github.com/rust-lang/crates.io-index"
1046source = "registry+https://github.com/rust-lang/crates.io-index"
1103dependencies = [
1047dependencies = [
1104− "aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
1048+ "aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)",
1105− "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
1049+ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
1106− "regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
1050+ "regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)",
1107− "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
1051+ "thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
1108]
1052]
1109
1053
1110[[package]]
1054[[package]]
1111name = "regex-syntax"
1055name = "regex-syntax"
1112−version = "0.6.12"
1056+version = "0.6.17"
1113source = "registry+https://github.com/rust-lang/crates.io-index"
1057source = "registry+https://github.com/rust-lang/crates.io-index"
1114
1058
1115[[package]]
1059[[package]]
@@ -1122,12 +1066,13 @@ dependencies = [
1122
1066
1123[[package]]
1067[[package]]
1124name = "rust-argon2"
1068name = "rust-argon2"
1125−version = "0.5.1"
1069+version = "0.7.0"
1126source = "registry+https://github.com/rust-lang/crates.io-index"
1070source = "registry+https://github.com/rust-lang/crates.io-index"
1127dependencies = [
1071dependencies = [
1128− "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
1072+ "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
1073+ "blake2b_simd 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)",
1129− "blake2b_simd 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)",
1074+ "constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
1130− "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
1075+ "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
1131]
1076]
1132
1077
1133[[package]]
1078[[package]]
@@ -1137,53 +1082,53 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
1137
1082
1138[[package]]
1083[[package]]
1139name = "ryu"
1084name = "ryu"
1140−version = "1.0.0"
1085+version = "1.0.3"
1141source = "registry+https://github.com/rust-lang/crates.io-index"
1086source = "registry+https://github.com/rust-lang/crates.io-index"
1142
1087
1143[[package]]
1088[[package]]
1144name = "safemem"
1089name = "safemem"
1145−version = "0.3.2"
1090+version = "0.3.3"
1146source = "registry+https://github.com/rust-lang/crates.io-index"
1091source = "registry+https://github.com/rust-lang/crates.io-index"
1147
1092
1148[[package]]
1093[[package]]
1149name = "same-file"
1094name = "same-file"
1150−version = "1.0.5"
1095+version = "1.0.6"
1151source = "registry+https://github.com/rust-lang/crates.io-index"
1096source = "registry+https://github.com/rust-lang/crates.io-index"
1152dependencies = [
1097dependencies = [
1153− "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
1098+ "winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
1154]
1099]
1155
1100
1156[[package]]
1101[[package]]
1157name = "serde"
1102name = "serde"
1158−version = "1.0.99"
1103+version = "1.0.105"
1159source = "registry+https://github.com/rust-lang/crates.io-index"
1104source = "registry+https://github.com/rust-lang/crates.io-index"
1160dependencies = [
1105dependencies = [
1161− "serde_derive 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
1106+ "serde_derive 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)",
1162]
1107]
1163
1108
1164[[package]]
1109[[package]]
1165name = "serde_derive"
1110name = "serde_derive"
1166−version = "1.0.99"
1111+version = "1.0.105"
1167source = "registry+https://github.com/rust-lang/crates.io-index"
1112source = "registry+https://github.com/rust-lang/crates.io-index"
1168dependencies = [
1113dependencies = [
1169− "proc-macro2 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
1114+ "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
1170− "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
1115+ "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
1171− "syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
1116+ "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
1172]
1117]
1173
1118
1174[[package]]
1119[[package]]
1175name = "serde_json"
1120name = "serde_json"
1176−version = "1.0.40"
1121+version = "1.0.48"
1177source = "registry+https://github.com/rust-lang/crates.io-index"
1122source = "registry+https://github.com/rust-lang/crates.io-index"
1178dependencies = [
1123dependencies = [
1179− "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
1124+ "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
1180− "ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
1125+ "ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
1181− "serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
1126+ "serde 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)",
1182]
1127]
1183
1128
1184[[package]]
1129[[package]]
1185name = "sha-1"
1130name = "sha-1"
1186−version = "0.8.1"
1131+version = "0.8.2"
1187source = "registry+https://github.com/rust-lang/crates.io-index"
1132source = "registry+https://github.com/rust-lang/crates.io-index"
1188dependencies = [
1133dependencies = [
1189 "block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
1134 "block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1204,7 +1149,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
1204
1149
1205[[package]]
1150[[package]]
1206name = "smallvec"
1151name = "smallvec"
1207−version = "0.6.10"
1152+version = "1.2.0"
1208source = "registry+https://github.com/rust-lang/crates.io-index"
1153source = "registry+https://github.com/rust-lang/crates.io-index"
1209
1154
1210[[package]]
1155[[package]]
@@ -1214,53 +1159,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
1214
1159
1215[[package]]
1160[[package]]
1216name = "syn"
1161name = "syn"
1217−version = "0.15.44"
1162+version = "1.0.17"
1218source = "registry+https://github.com/rust-lang/crates.io-index"
1163source = "registry+https://github.com/rust-lang/crates.io-index"
1219dependencies = [
1164dependencies = [
1220− "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
1221− "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
1222− "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
1223−]
1224−
1225−[[package]]
1226−name = "syn"
1227−version = "1.0.5"
1228−source = "registry+https://github.com/rust-lang/crates.io-index"
1229−dependencies = [
1230− "proc-macro2 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
1165+ "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
1231− "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
1166+ "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
1232 "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
1167 "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
1233]
1168]
1234
1169
1235−[[package]]
1236−name = "synstructure"
1237−version = "0.10.2"
1238−source = "registry+https://github.com/rust-lang/crates.io-index"
1239−dependencies = [
1240− "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
1241− "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
1242− "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)",
1243− "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
1244−]
1245−
1246[[package]]
1170[[package]]
1247name = "syntect"
1171name = "syntect"
1248version = "3.3.0"
1172version = "3.3.0"
1249source = "registry+https://github.com/rust-lang/crates.io-index"
1173source = "registry+https://github.com/rust-lang/crates.io-index"
1250dependencies = [
1174dependencies = [
1251− "bincode 1.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
1175+ "bincode 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
1252− "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
1176+ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
1253− "flate2 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
1177+ "flate2 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)",
1254 "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
1178 "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
1255 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
1179 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
1256 "lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
1180 "lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
1257 "onig 5.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
1181 "onig 5.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
1258 "plist 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
1182 "plist 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
1259− "regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
1183+ "regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)",
1260− "serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
1184+ "serde 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)",
1261− "serde_derive 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
1185+ "serde_derive 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)",
1262− "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
1186+ "serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)",
1263− "walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)",
1187+ "walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
1264 "yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
1188 "yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
1265]
1189]
1266
1190
@@ -1279,16 +1203,16 @@ version = "0.3.1"
1279source = "registry+https://github.com/rust-lang/crates.io-index"
1203source = "registry+https://github.com/rust-lang/crates.io-index"
1280dependencies = [
1204dependencies = [
1281 "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
1205 "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
1282− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
1206+ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
1283 "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
1207 "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
1284]
1208]
1285
1209
1286[[package]]
1210[[package]]
1287name = "termcolor"
1211name = "termcolor"
1288−version = "1.0.5"
1212+version = "1.1.0"
1289source = "registry+https://github.com/rust-lang/crates.io-index"
1213source = "registry+https://github.com/rust-lang/crates.io-index"
1290dependencies = [
1214dependencies = [
1291− "wincolor 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
1215+ "winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
1292]
1216]
1293
1217
1294[[package]]
1218[[package]]
@@ -1296,7 +1220,7 @@ name = "termios"
1296version = "0.3.1"
1220version = "0.3.1"
1297source = "registry+https://github.com/rust-lang/crates.io-index"
1221source = "registry+https://github.com/rust-lang/crates.io-index"
1298dependencies = [
1222dependencies = [
1299− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
1223+ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
1300]
1224]
1301
1225
1302[[package]]
1226[[package]]
@@ -1310,7 +1234,7 @@ dependencies = [
1310
1234
1311[[package]]
1235[[package]]
1312name = "thread_local"
1236name = "thread_local"
1313−version = "0.3.6"
1237+version = "1.0.1"
1314source = "registry+https://github.com/rust-lang/crates.io-index"
1238source = "registry+https://github.com/rust-lang/crates.io-index"
1315dependencies = [
1239dependencies = [
1316 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
1240 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1321,7 +1245,7 @@ name = "time"
1321version = "0.1.42"
1245version = "0.1.42"
1322source = "registry+https://github.com/rust-lang/crates.io-index"
1246source = "registry+https://github.com/rust-lang/crates.io-index"
1323dependencies = [
1247dependencies = [
1324− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
1248+ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
1325 "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
1249 "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
1326 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
1250 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
1327]
1251]
@@ -1338,7 +1262,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
1338
1262
1339[[package]]
1263[[package]]
1340name = "ucd-trie"
1264name = "ucd-trie"
1341−version = "0.1.2"
1265+version = "0.1.3"
1342source = "registry+https://github.com/rust-lang/crates.io-index"
1266source = "registry+https://github.com/rust-lang/crates.io-index"
1343
1267
1344[[package]]
1268[[package]]
@@ -1351,15 +1275,15 @@ dependencies = [
1351
1275
1352[[package]]
1276[[package]]
1353name = "unicode-normalization"
1277name = "unicode-normalization"
1354−version = "0.1.8"
1278+version = "0.1.12"
1355source = "registry+https://github.com/rust-lang/crates.io-index"
1279source = "registry+https://github.com/rust-lang/crates.io-index"
1356dependencies = [
1280dependencies = [
1357− "smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
1281+ "smallvec 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
1358]
1282]
1359
1283
1360[[package]]
1284[[package]]
1361name = "unicode-segmentation"
1285name = "unicode-segmentation"
1362−version = "1.3.0"
1286+version = "1.6.0"
1363source = "registry+https://github.com/rust-lang/crates.io-index"
1287source = "registry+https://github.com/rust-lang/crates.io-index"
1364
1288
1365[[package]]
1289[[package]]
@@ -1389,7 +1313,7 @@ dependencies = [
1389
1313
1390[[package]]
1314[[package]]
1391name = "url"
1315name = "url"
1392−version = "2.1.0"
1316+version = "2.1.1"
1393source = "registry+https://github.com/rust-lang/crates.io-index"
1317source = "registry+https://github.com/rust-lang/crates.io-index"
1394dependencies = [
1318dependencies = [
1395 "idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
1319 "idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1399,7 +1323,7 @@ dependencies = [
1399
1323
1400[[package]]
1324[[package]]
1401name = "vcpkg"
1325name = "vcpkg"
1402−version = "0.2.7"
1326+version = "0.2.8"
1403source = "registry+https://github.com/rust-lang/crates.io-index"
1327source = "registry+https://github.com/rust-lang/crates.io-index"
1404
1328
1405[[package]]
1329[[package]]
@@ -1412,19 +1336,24 @@ name = "version_check"
1412version = "0.1.5"
1336version = "0.1.5"
1413source = "registry+https://github.com/rust-lang/crates.io-index"
1337source = "registry+https://github.com/rust-lang/crates.io-index"
1414
1338
1339+[[package]]
1340+name = "version_check"
1341+version = "0.9.1"
1342+source = "registry+https://github.com/rust-lang/crates.io-index"
1343+
1415[[package]]
1344[[package]]
1416name = "walkdir"
1345name = "walkdir"
1417−version = "2.2.9"
1346+version = "2.3.1"
1418source = "registry+https://github.com/rust-lang/crates.io-index"
1347source = "registry+https://github.com/rust-lang/crates.io-index"
1419dependencies = [
1348dependencies = [
1420− "same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
1349+ "same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
1421 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
1350 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
1422− "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
1351+ "winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
1423]
1352]
1424
1353
1425[[package]]
1354[[package]]
1426name = "wasi"
1355name = "wasi"
1427−version = "0.7.0"
1356+version = "0.9.0+wasi-snapshot-preview1"
1428source = "registry+https://github.com/rust-lang/crates.io-index"
1357source = "registry+https://github.com/rust-lang/crates.io-index"
1429
1358
1430[[package]]
1359[[package]]
@@ -1432,8 +1361,8 @@ name = "which"
1432version = "2.0.1"
1361version = "2.0.1"
1433source = "registry+https://github.com/rust-lang/crates.io-index"
1362source = "registry+https://github.com/rust-lang/crates.io-index"
1434dependencies = [
1363dependencies = [
1435− "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
1364+ "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
1436− "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
1365+ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
1437]
1366]
1438
1367
1439[[package]]
1368[[package]]
@@ -1470,7 +1399,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
1470
1399
1471[[package]]
1400[[package]]
1472name = "winapi-util"
1401name = "winapi-util"
1473−version = "0.1.2"
1402+version = "0.1.3"
1474source = "registry+https://github.com/rust-lang/crates.io-index"
1403source = "registry+https://github.com/rust-lang/crates.io-index"
1475dependencies = [
1404dependencies = [
1476 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
1405 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1481,15 +1410,6 @@ name = "winapi-x86_64-pc-windows-gnu"
1481version = "0.4.0"
1410version = "0.4.0"
1482source = "registry+https://github.com/rust-lang/crates.io-index"
1411source = "registry+https://github.com/rust-lang/crates.io-index"
1483
1412
1484−[[package]]
1485−name = "wincolor"
1486−version = "1.0.2"
1487−source = "registry+https://github.com/rust-lang/crates.io-index"
1488−dependencies = [
1489− "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
1490− "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
1491−]
1492−
1493[[package]]
1413[[package]]
1494name = "xml-rs"
1414name = "xml-rs"
1495version = "0.8.0"
1415version = "0.8.0"
@@ -1504,47 +1424,47 @@ dependencies = [
1504]
1424]
1505
1425
1506[metadata]
1426[metadata]
1507−"checksum adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7e522997b529f05601e05166c07ed17789691f562762c7f3b987263d2dedee5c"
1427+"checksum adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2"
1508−"checksum aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d"
1428+"checksum aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)" = "8716408b8bc624ed7f65d223ddb9ac2d044c0547b6fa4b0d554f3a9540496ada"
1509"checksum ansi_colours 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1d0f302a81afc6a7f4350c04f0ba7cfab529cc009bca3324b3fb5764e6add8b6"
1429"checksum ansi_colours 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1d0f302a81afc6a7f4350c04f0ba7cfab529cc009bca3324b3fb5764e6add8b6"
1510"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
1430"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
1511"checksum ansi_term 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
1431"checksum ansi_term 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
1512"checksum anymap 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "33954243bd79057c2de7338850b85983a44588021f8a5fee574a8888c6de4344"
1432"checksum anymap 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "33954243bd79057c2de7338850b85983a44588021f8a5fee574a8888c6de4344"
1513−"checksum arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0d382e583f07208808f6b1249e60848879ba3543f57c32277bf52d69c2f0f0ee"
1433+"checksum arrayref 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
1514−"checksum arrayvec 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "b8d73f9beda665eaa98ab9e4f7442bd4e7de6652587de55b2525e52e29c1b0ba"
1434+"checksum arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8"
1515"checksum assert_cmd 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6283bac8dd7226470d491bc4737816fea4ca1fba7a2847f2e9097fd6bfb4624c"
1435"checksum assert_cmd 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6283bac8dd7226470d491bc4737816fea4ca1fba7a2847f2e9097fd6bfb4624c"
1516"checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
1436"checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
1517−"checksum autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b671c8fb71b457dd4ae18c4ba1e59aa81793daacc361d82fcd410cef0d491875"
1437+"checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
1518−"checksum backtrace 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)" = "1371048253fa3bac6704bfd6bbfc922ee9bdcee8881330d40f308b81cc5adc55"
1438+"checksum backtrace 0.3.45 (registry+https://github.com/rust-lang/crates.io-index)" = "ad235dabf00f36301792cfe82499880ba54c6486be094d1047b02bacb67c14e8"
1519−"checksum backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "82a830b4ef2d1124a711c71d263c5abdc710ef8e907bd508c88be475cebc422b"
1439+"checksum backtrace-sys 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)" = "ca797db0057bae1a7aa2eef3283a874695455cecf08a43bfb8507ee0ebc1ed69"
1520"checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
1440"checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
1441+"checksum base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"
1521−"checksum bincode 1.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9f04a5e50dc80b3d5d35320889053637d15011aed5e66b66b37ae798c65da6f7"
1442+"checksum bincode 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5753e2a71534719bf3f4e57006c3a4f0d2c672a4b676eec84161f763eca87dbf"
1522−"checksum bindgen 0.50.0 (registry+https://github.com/rust-lang/crates.io-index)" = "65a913de3fa2fa95f2c593bb7e33b1be1ce1ce8a83f34b6bb02e6f01400b96cc"
1443+"checksum bindgen 0.50.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cb0e5a5f74b2bafe0b39379f616b5975e08bcaca4e779c078d5c31324147e9ba"
1523−"checksum bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d155346769a6855b86399e9bc3814ab343cd3d62c7e985113d46a0ec3c281fd"
1444+"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
1524−"checksum blake2b_simd 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)" = "bf775a81bb2d464e20ff170ac20316c7b08a43d11dbc72f0f82e8e8d3d6d0499"
1445+"checksum blake2b_simd 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d8fb2d74254a3a0b5cac33ac9f8ed0e44aa50378d9dbb2e5d83bd21ed1dc2c8a"
1525"checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
1446"checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
1526−"checksum block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6d4dc3af3ee2e12f3e5d224e5e1e3d73668abbeb69e566d361f7d5563a4fdf09"
1447+"checksum block-padding 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5"
1448+"checksum bstr 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "2889e6d50f394968c8bf4240dc3f2a7eb4680844d27308f798229ac9d4725f41"
1527"checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
1449"checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
1528−"checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5"
1450+"checksum byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de"
1529−"checksum cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)" = "4fc9a35e1f4290eb9e5fc54ba6cf40671ed2a2514c3eeb2b2a908dda2ea5a1be"
1451+"checksum cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)" = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd"
1530−"checksum cexpr 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "a7fa24eb00d5ffab90eaeaf1092ac85c04c64aaf358ea6f84505b8116d24c6af"
1452+"checksum cexpr 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "fce5b5fb86b0c57c20c834c1b412fd09c77c8a59b9473f86272709e78874cd1d"
1531−"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33"
1453+"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
1532−"checksum chrono 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e8493056968583b0193c1bb04d6f7684586f3726992d6c573261941a895dbd68"
1454+"checksum chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2"
1533"checksum clang-sys 0.28.1 (registry+https://github.com/rust-lang/crates.io-index)" = "81de550971c976f176130da4b2978d3b524eaa0fd9ac31f3ceb5ae1231fb4853"
1455"checksum clang-sys 0.28.1 (registry+https://github.com/rust-lang/crates.io-index)" = "81de550971c976f176130da4b2978d3b524eaa0fd9ac31f3ceb5ae1231fb4853"
1534"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
1456"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
1535"checksum clicolors-control 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90082ee5dcdd64dc4e9e0d37fbf3ee325419e39c0092191e0393df65518f741e"
1457"checksum clicolors-control 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90082ee5dcdd64dc4e9e0d37fbf3ee325419e39c0092191e0393df65518f741e"
1536−"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
1537"checksum console 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6728a28023f207181b193262711102bfbaf47cc9d13bc71d0736607ef8efe88c"
1458"checksum console 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6728a28023f207181b193262711102bfbaf47cc9d13bc71d0736607ef8efe88c"
1538−"checksum constant_time_eq 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "995a44c877f9212528ccc74b21a232f66ad69001e40ede5bcee2ac9ef2657120"
1459+"checksum constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
1539"checksum content_inspector 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b7bda66e858c683005a53a9a60c69a4aca7eeaa45d124526e389f7aec8e62f38"
1460"checksum content_inspector 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b7bda66e858c683005a53a9a60c69a4aca7eeaa45d124526e389f7aec8e62f38"
1540"checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"
1461"checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"
1541−"checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6"
1462+"checksum crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
1542−"checksum deunicode 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca8a0f5bbdedde60605d0719b998e282af68e2b1c50203110211fe4abe857560"
1543"checksum difference 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198"
1463"checksum difference 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198"
1544"checksum digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
1464"checksum digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
1545"checksum dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3"
1465"checksum dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3"
1546"checksum dirs-sys 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "afa0b23de8fd801745c471deffa6e12d248f962c9fd4b4c33787b055599bde7b"
1466"checksum dirs-sys 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "afa0b23de8fd801745c471deffa6e12d248f962c9fd4b4c33787b055599bde7b"
1547−"checksum doc-comment 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "923dea538cea0aa3025e8685b20d6ee21ef99c4f77e954a30febbaac5ec73a97"
1467+"checksum doc-comment 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
1548"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
1468"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
1549"checksum encode_unicode 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
1469"checksum encode_unicode 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
1550"checksum encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec"
1470"checksum encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec"
@@ -1555,133 +1475,127 @@ dependencies = [
1555"checksum encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18"
1475"checksum encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18"
1556"checksum encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569"
1476"checksum encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569"
1557"checksum env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3"
1477"checksum env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3"
1558−"checksum error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3ab49e9dcb602294bc42f9a7dfc9bc6e936fca4418ea300dbfb84fe16de0b7d9"
1478+"checksum error-chain 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d371106cc88ffdfb1eabd7111e432da544f16f3e2d7bf1dfe8bf575f1df045cd"
1559"checksum escargot 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "74cf96bec282dcdb07099f7e31d9fed323bca9435a09aba7b6d99b7617bca96d"
1479"checksum escargot 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "74cf96bec282dcdb07099f7e31d9fed323bca9435a09aba7b6d99b7617bca96d"
1560−"checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2"
1480+"checksum failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "b8529c2421efa3066a5cbd8063d2244603824daccb6936b079010bb2aa89464b"
1561−"checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1"
1562"checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
1481"checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
1563−"checksum flate2 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "2adaffba6388640136149e18ed080b77a78611c1e1d6de75aedcdf78df5d4682"
1482+"checksum flate2 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)" = "2cfff41391129e0a856d6d822600b8d71179d46879e310417eb9c762eb178b42"
1564"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
1483"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
1565"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
1484"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
1566"checksum fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
1485"checksum fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
1567"checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec"
1486"checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec"
1568−"checksum getrandom 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "473a1265acc8ff1e808cd0a1af8cee3c2ee5200916058a2ca113c29f2d903571"
1487+"checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"
1569−"checksum git2 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "26e07ef27260a78f7e8d218ebac2c72f2c4db50493741b190b6e8eade1da7c68"
1488+"checksum git2 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b7da16ceafe24cedd9ba02c4463a2b506b6493baf4317c79c5acb553134a3c15"
1570"checksum glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
1489"checksum glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
1490+"checksum globset 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "7ad1da430bd7281dde2576f44c84cc3f0f7b475e7202cd503042dff01a8c8120"
1571"checksum hermit-abi 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1010591b26bbfe835e9faeabeb11866061cc7dcebffd56ad7d0942d0e61aefd8"
1491"checksum hermit-abi 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1010591b26bbfe835e9faeabeb11866061cc7dcebffd56ad7d0942d0e61aefd8"
1572−"checksum humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ca7e5f2e110db35f93b837c81797f3714500b81d517bf20c431b16d3ca4f114"
1492+"checksum humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
1573"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e"
1493"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e"
1574"checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9"
1494"checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9"
1575−"checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358"
1495+"checksum itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484"
1576−"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f"
1496+"checksum itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e"
1577−"checksum jobserver 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "f2b1d42ef453b30b7387e113da1c83ab1605d90c5b4e0eb8e96d016ed3b8c160"
1497+"checksum jobserver 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2"
1578"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
1498"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
1499+"checksum kstring 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6382df53100fd22e149030b6634720c94a151076db8d727b3274d7070975d609"
1579"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
1500"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
1580"checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f"
1501"checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f"
1581−"checksum libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "34fcd2c08d2f832f376f4173a231990fa5aef4e99fb569867318a227ef4c06ba"
1502+"checksum libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)" = "dea0c0405123bba743ee3f91f49b1c7cfb684eef0da0a50110f758ccf24cdff0"
1582−"checksum libgit2-sys 0.11.0+0.99.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4d5d1459353d397a029fb18862166338de938e6be976606bd056cf8f1a912ecf"
1503+"checksum libgit2-sys 0.12.0+0.99.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05dff41ac39e7b653f5f1550886cf00ba52f8e7f57210b633cdeedb3de5b236c"
1583"checksum libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753"
1504"checksum libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753"
1584"checksum libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe"
1505"checksum libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe"
1585"checksum line-wrap 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9"
1506"checksum line-wrap 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9"
1586"checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83"
1507"checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83"
1587−"checksum liquid 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c7cf7f28965f50ff06e2e9f26162f6d944b71f976506a7a01a6308ddebd36155"
1508+"checksum liquid 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)" = "62b5a51d24120bc37da30a3bcd741ede7450f00e9fcb0b8648a1d25f7736bc6e"
1588−"checksum liquid-compiler 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7cd195c00674a2dc811b07969358c97c0639db4a73bc61514db48609d110356f"
1509+"checksum liquid-core 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3a922402825d7fd1965364e1d289f909076bcf580e5ae4a5edaf82af1fe7a9dc"
1589−"checksum liquid-derive 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b0faadd0dd1a7cf38390316c36a9a741949462750f9833b794ac6d7de145218"
1510+"checksum liquid-derive 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e6fcb48d443dbc49c65b3e5aaecc95e6e911a28b20049d6ac2d94527543fa133"
1590−"checksum liquid-error 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7d5c0851812322e87dcf67c2d7e520c3efd8651bd44eb8d0c0246e6dfb94d481"
1511+"checksum liquid-lib 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0629fbd25a919496d2e621e8a3af892bc438273d0f446eb4f0d66ce45117d15d"
1591−"checksum liquid-interpreter 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)" = "998e0411b8cb6210bb0729ccbb15abd2a1c8ef7e318c97511ae5a741c817c63e"
1592−"checksum liquid-value 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e7606ac3743bff9929daff0d0f51f9177ab3ec74520f7f832b8ec595dd96efee"
1593"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
1512"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
1594"checksum maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
1513"checksum maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
1595"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
1514"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
1596−"checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
1515+"checksum memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400"
1597−"checksum miniz-sys 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "1e9e3ae51cea1576ceba0dde3d484d30e6e5b86dee0b2d412fe3a16a15c98202"
1598−"checksum miniz_oxide 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7108aff85b876d06f22503dcce091e29f76733b2bfdd91eebce81f5e68203a10"
1516+"checksum miniz_oxide 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "aa679ff6578b1cddee93d7e82e263b94a575e0bfced07284eb0c037c1d2416a5"
1599−"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945"
1600"checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6"
1517"checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6"
1601−"checksum num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09"
1518+"checksum num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba"
1602−"checksum num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32"
1519+"checksum num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096"
1603−"checksum num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bcef43580c035376c0705c42792c294b66974abbfd2789b511784023f71f3273"
1520+"checksum once_cell 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b1c601810575c99596d4afc46f78a678c80105117c379eb3650cf99b8a21ce5b"
1604"checksum onig 5.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e4e723fc996fff1aeab8f62205f3e8528bf498bdd5eadb2784d2d31f30077947"
1521"checksum onig 5.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e4e723fc996fff1aeab8f62205f3e8528bf498bdd5eadb2784d2d31f30077947"
1605"checksum onig_sys 69.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0a8d4efbf5f59cece01f539305191485b651acb3785b9d5eef05749f0496514e"
1522"checksum onig_sys 69.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0a8d4efbf5f59cece01f539305191485b651acb3785b9d5eef05749f0496514e"
1606"checksum opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
1523"checksum opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
1607"checksum peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
1524"checksum peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
1608"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
1525"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
1609"checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
1526"checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
1610−"checksum pest 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7e4fb201c5c22a55d8b24fef95f78be52738e5e1361129be1b5e862ecdb6894a"
1527+"checksum pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"
1611"checksum pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0"
1528"checksum pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0"
1612−"checksum pest_generator 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7b9fcf299b5712d06ee128a556c94709aaa04512c4dffb8ead07c5c998447fc0"
1529+"checksum pest_generator 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55"
1613−"checksum pest_meta 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "df43fd99896fd72c485fe47542c7b500e4ac1e8700bf995544d1317a60ded547"
1530+"checksum pest_meta 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d"
1614−"checksum pkg-config 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c1d2cfa5a714db3b5f24f0915e74fcdf91d09d496ba61329705dda7774d2af"
1531+"checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677"
1615"checksum plist 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5f2a9f075f6394100e7c105ed1af73fb1859d6fd14e49d4290d578120beb167f"
1532"checksum plist 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5f2a9f075f6394100e7c105ed1af73fb1859d6fd14e49d4290d578120beb167f"
1616−"checksum predicates 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "53e09015b0d3f5a0ec2d4428f7559bb7b3fff341b4e159fedd1d57fac8b939ff"
1533+"checksum predicates 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "347a1b6f0b21e636bc9872fb60b83b8e185f6f5516298b8238699f7f9a531030"
1617"checksum predicates-core 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "06075c3a3e92559ff8929e7a280684489ea27fe44805174c3ebd9328dcb37178"
1534"checksum predicates-core 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "06075c3a3e92559ff8929e7a280684489ea27fe44805174c3ebd9328dcb37178"
1618"checksum predicates-tree 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8e63c4859013b38a76eca2414c64911fba30def9e3202ac461a2d22831220124"
1535"checksum predicates-tree 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8e63c4859013b38a76eca2414c64911fba30def9e3202ac461a2d22831220124"
1619−"checksum proc-macro-hack 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e688f31d92ffd7c1ddc57a1b4e6d773c0f2a14ee437a4b0a4f5a69c80eb221c8"
1536+"checksum proc-macro-hack 0.5.14 (registry+https://github.com/rust-lang/crates.io-index)" = "fcfdefadc3d57ca21cf17990a28ef4c0f7c61383a28cb7604cf4a18e6ede1420"
1620"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
1537"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
1621−"checksum proc-macro2 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "175a40b9cf564ce9bf050654633dbf339978706b8ead1a907bb970b63185dd95"
1538+"checksum proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6c09721c6781493a2a492a96b5a5bf19b65917fe6728884e7c44dd0c60ca3435"
1622−"checksum proc-quote 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fa612543f23fda013e1e6ce30b5285a9d313c6e582e57b4ceca74eb5b85685b5"
1539+"checksum proc-quote 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d8fe0b6f6aef22a400495cdabfd44389b8d5cf71407680fe031be86e51296c85"
1623−"checksum proc-quote-impl 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f785f0f8cd00b7945efc3f3bdf8205eb06af5aacec598d83e67f41dc8d101fda"
1540+"checksum proc-quote-impl 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "66d3ed99337a9586d312fcd7240546abd644b095a5bd1d1809d82c6ae6d16a8c"
1624−"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0"
1541+"checksum quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
1625"checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
1542"checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
1626−"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
1543+"checksum quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f"
1627"checksum rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
1544"checksum rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
1628"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
1545"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
1629"checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
1546"checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
1630−"checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
1631"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
1547"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
1632"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
1548"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
1633−"checksum redox_users 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ecedbca3bf205f8d8f5c2b44d83cd0690e39ee84b951ed649e9f1841132b66d"
1549+"checksum redox_users 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "09b23093265f8d200fa7b4c2c76297f47e681c655f6f1285a8780d6a022f7431"
1634−"checksum regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc220bd33bdce8f093101afe22a037b8eb0e5af33592e6a9caafff0d4cb81cbd"
1550+"checksum regex 1.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "8900ebc1363efa7ea1c399ccc32daed870b4002651e0bed86e72d501ebbe0048"
1635−"checksum regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "11a7e20d1cce64ef2fed88b66d347f88bd9babb82845b2b858f3edbf59a4f716"
1551+"checksum regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)" = "7fe5bd57d1d7414c6b5ed48563a2c855d995ff777729dcd91c369ec7fea395ae"
1636"checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e"
1552"checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e"
1637−"checksum rust-argon2 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ca4eaef519b494d1f2848fc602d18816fed808a981aedf4f1f00ceb7c9d32cf"
1553+"checksum rust-argon2 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017"
1638"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783"
1554"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783"
1639−"checksum ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c92464b447c0ee8c4fb3824ecc8383b81717b9f1e74ba2e72540aef7b9f82997"
1555+"checksum ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535622e6be132bccd223f4bb2b8ac8d53cda3c7a6394944d3b2b33fb974f9d76"
1640−"checksum safemem 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d2b08423011dae9a5ca23f07cf57dac3857f5c885d352b76f6d95f4aea9434d0"
1556+"checksum safemem 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
1641−"checksum same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421"
1557+"checksum same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
1642−"checksum serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)" = "fec2851eb56d010dc9a21b89ca53ee75e6528bab60c11e89d38390904982da9f"
1558+"checksum serde 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)" = "e707fbbf255b8fc8c3b99abb91e7257a622caeb20a9818cbadbeeede4e0932ff"
1643−"checksum serde_derive 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)" = "cb4dc18c61206b08dc98216c98faa0232f4337e1e1b8574551d5bad29ea1b425"
1559+"checksum serde_derive 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)" = "ac5d00fc561ba2724df6758a17de23df5914f20e41cb00f94d5b7ae42fffaff8"
1644−"checksum serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)" = "051c49229f282f7c6f3813f8286cc1e3323e8051823fce42c7ea80fe13521704"
1560+"checksum serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)" = "9371ade75d4c2d6cb154141b9752cf3781ec9c05e0e5cf35060e1e70ee7b9c25"
1645−"checksum sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "23962131a91661d643c98940b20fcaffe62d776a823247be80a48fcb8b6fce68"
1561+"checksum sha-1 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df"
1646"checksum shell-words 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "39acde55a154c4cd3ae048ac78cc21c25f3a0145e44111b523279113dce0d94a"
1562"checksum shell-words 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "39acde55a154c4cd3ae048ac78cc21c25f3a0145e44111b523279113dce0d94a"
1647"checksum shlex 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2"
1563"checksum shlex 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2"
1648−"checksum smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "ab606a9c5e214920bb66c458cd7be8ef094f813f20fe77a54cc7dbfff220d4b7"
1564+"checksum smallvec 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5c2fb2ec9bcd216a5b0d0ccf31ab17b5ed1d627960edff65bbe95d3ce221cefc"
1649"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
1565"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
1650−"checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5"
1566+"checksum syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)" = "0df0eb663f387145cab623dea85b09c2c5b4b0aef44e945d928e682fce71bb03"
1651−"checksum syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf"
1652−"checksum synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02353edf96d6e4dc81aea2d8490a7e9db177bf8acb0e951c24940bf866cb313f"
1653"checksum syntect 3.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "955e9da2455eea5635f7032fc3a229908e6af18c39600313866095e07db0d8b8"
1567"checksum syntect 3.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "955e9da2455eea5635f7032fc3a229908e6af18c39600313866095e07db0d8b8"
1654"checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8"
1568"checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8"
1655"checksum term_size 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9e5b9a66db815dcfd2da92db471106457082577c3c278d4138ab3e3b4e189327"
1569"checksum term_size 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9e5b9a66db815dcfd2da92db471106457082577c3c278d4138ab3e3b4e189327"
1656−"checksum termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "96d6098003bde162e4277c70665bd87c326f5a0c3f3fbfb285787fa482d54e6e"
1570+"checksum termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f"
1657"checksum termios 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "72b620c5ea021d75a735c943269bb07d30c9b77d6ac6b236bc8b5c496ef05625"
1571"checksum termios 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "72b620c5ea021d75a735c943269bb07d30c9b77d6ac6b236bc8b5c496ef05625"
1658"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
1572"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
1659−"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"
1573+"checksum thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14"
1660"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f"
1574"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f"
1661"checksum treeline 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a7f741b240f1a48843f9b8e0444fb55fb2a4ff67293b50a9179dfd5ea67f8d41"
1575"checksum treeline 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a7f741b240f1a48843f9b8e0444fb55fb2a4ff67293b50a9179dfd5ea67f8d41"
1662"checksum typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9"
1576"checksum typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9"
1663−"checksum ucd-trie 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8f00ed7be0c1ff1e24f46c3d2af4859f7e863672ba3a6e92e7cff702bf9f06c2"
1577+"checksum ucd-trie 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
1664"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5"
1578"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5"
1665−"checksum unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "141339a08b982d942be2ca06ff8b076563cbe223d1befd5450716790d44e2426"
1579+"checksum unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4"
1666−"checksum unicode-segmentation 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1967f4cdfc355b37fd76d2a954fb2ed3871034eb4f26d60537d88795cfc332a9"
1580+"checksum unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0"
1667"checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479"
1581"checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479"
1668"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
1582"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
1669"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
1583"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
1670"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a"
1584"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a"
1671−"checksum url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "75b414f6c464c879d7f9babf951f23bc3743fb7313c081b2e6ca719067ea9d61"
1585+"checksum url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb"
1672−"checksum vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "33dd455d0f96e90a75803cfeb7f948768c08d70a6de9a8d2362461935698bf95"
1586+"checksum vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168"
1673"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
1587"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
1674"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd"
1588"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd"
1589+"checksum version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce"
1675−"checksum walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e"
1590+"checksum walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d"
1676−"checksum wasi 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b89c3ce4ce14bdc6fb6beaf9ec7928ca331de5df7e5ea278375642a2f478570d"
1591+"checksum wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)" = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
1677"checksum which 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b57acb10231b9493c8472b20cb57317d0679a49e0bdbee44b3b803a6473af164"
1592"checksum which 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b57acb10231b9493c8472b20cb57317d0679a49e0bdbee44b3b803a6473af164"
1678"checksum wild 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "97d34fecce28871e5c0e059deae21ef7f7d13b98a5964b24c58b3735c8052fc8"
1593"checksum wild 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "97d34fecce28871e5c0e059deae21ef7f7d13b98a5964b24c58b3735c8052fc8"
1679"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
1594"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
1680"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
1595"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
1681"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
1596"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
1682"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
1597"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
1683−"checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9"
1598+"checksum winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4ccfbf554c6ad11084fb7517daca16cfdcaccbdadba4fc336f032a8b12c2ad80"
1684"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
1599"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
1685−"checksum wincolor 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "96f5016b18804d24db43cebf3c77269e7569b8954a8464501c216cc5e070eaa9"
1686"checksum xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "541b12c998c5b56aa2b4e6f18f03664eef9a4fd0a246a55594efae6cc2d964b5"
1600"checksum xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "541b12c998c5b56aa2b4e6f18f03664eef9a4fd0a246a55594efae6cc2d964b5"
1687"checksum yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "65923dd1784f44da1d2c3dbbc5e822045628c590ba72123e1c73d3c230c4434d"
1601"checksum yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "65923dd1784f44da1d2c3dbbc5e822045628c590ba72123e1c73d3c230c4434d"
Cargo.toml+4−3
@@ -7,7 +7,7 @@ license = "MIT/Apache-2.0"
7name = "bat"
7name = "bat"
8readme = "README.md"
8readme = "README.md"
9repository = "https://github.com/sharkdp/bat"
9repository = "https://github.com/sharkdp/bat"
10−version = "0.12.1"
10+version = "0.13.0"
11exclude = [
11exclude = [
12 "assets/syntaxes/*",
12 "assets/syntaxes/*",
13 "assets/themes/*",
13 "assets/themes/*",
@@ -27,9 +27,10 @@ content_inspector = "0.2.4"
27encoding = "0.2"
27encoding = "0.2"
28shell-words = "0.1.0"
28shell-words = "0.1.0"
29unicode-width = "0.1.7"
29unicode-width = "0.1.7"
30+globset = "0.4"
30
31
31[dependencies.git2]
32[dependencies.git2]
32−version = "0.12"
33+version = "0.13"
33default-features = false
34default-features = false
34features = []
35features = []
35
36
@@ -54,7 +55,7 @@ assert_cmd = "0.12.0"
54
55
55[build-dependencies]
56[build-dependencies]
56clap = "2.33"
57clap = "2.33"
57−liquid = "0.19"
58+liquid = "0.20"
58lazy_static = "1.4"
59lazy_static = "1.4"
59
60
60[profile.release]
61[profile.release]
README.md+7−7
@@ -13,7 +13,7 @@
13 <a href="#installation">Installation</a> •
13 <a href="#installation">Installation</a> •
14 <a href="#customization">Customization</a> •
14 <a href="#customization">Customization</a> •
15 <a href="#project-goals-and-alternatives">Project goals, alternatives</a> •
15 <a href="#project-goals-and-alternatives">Project goals, alternatives</a> •
16− Translation [<a href="https://github.com/chinanf-boy/bat-zh">中文</a>][<a href="doc/README-ja.md">日本語</a>]
16+ Translation [<a href="https://github.com/chinanf-boy/bat-zh">中文</a>][<a href="doc/README-ja.md">日本語</a>][<a href="doc/README-ko.md">한국어</a>]
17</p>
17</p>
18
18
19### Syntax highlighting
19### Syntax highlighting
@@ -180,7 +180,7 @@ apt install bat
180If you want to run the latest release of bat or if you are on older versions of Ubuntu/Debian, download the latest `.deb` package from the [release page](https://github.com/sharkdp/bat/releases)
180If you want to run the latest release of bat or if you are on older versions of Ubuntu/Debian, download the latest `.deb` package from the [release page](https://github.com/sharkdp/bat/releases)
181and install it via:
181and install it via:
182```bash
182```bash
183−sudo dpkg -i bat_0.12.1_amd64.deb # adapt version number and architecture
183+sudo dpkg -i bat_0.13.0_amd64.deb # adapt version number and architecture
184```
184```
185
185
186### On Alpine Linux
186### On Alpine Linux
@@ -341,7 +341,7 @@ binaries are also available: look for archives with `musl` in the file name.
341
341
342### From source
342### From source
343
343
344−If you want to build `bat` from source, you need Rust 1.36 or
344+If you want to build `bat` from source, you need Rust 1.37 or
345higher. You can then use `cargo` to build everything:
345higher. You can then use `cargo` to build everything:
346
346
347```bash
347```bash
@@ -500,11 +500,11 @@ Example configuration file:
500# Use italic text on the terminal (not supported on all terminals)
500# Use italic text on the terminal (not supported on all terminals)
501--italic-text=always
501--italic-text=always
502
502
503−# Use C++ syntax (instead of C) for .h header files
503+# Use C++ syntax for .ino files
504−--map-syntax h:cpp
504+--map-syntax "*.ino:C++"
505
505
506−# Use "gitignore" highlighting for ".ignore" files
506+# Use ".gitignore"-style highlighting for ".ignore" files
507−--map-syntax .ignore:.gitignore
507+--map-syntax ".ignore:Git Ignore"
508```
508```
509
509
510## Using `bat` on Windows
510## Using `bat` on Windows
assets/JavaDoc.sublime-syntax.patch+3−3
@@ -1,7 +1,7 @@
1−diff --git syntaxes/Packages/Java/JavaDoc.sublime-syntax syntaxes/Packages/Java/JavaDoc.sublime-syntax
1+diff --git syntaxes/01_Packages/Java/JavaDoc.sublime-syntax syntaxes/01_Packages/Java/JavaDoc.sublime-syntax
2index 422a6a9..40a741e 100644
2index 422a6a9..40a741e 100644
3−--- syntaxes/Packages/Java/JavaDoc.sublime-syntax
3+--- syntaxes/01_Packages/Java/JavaDoc.sublime-syntax
4−+++ syntaxes/Packages/Java/JavaDoc.sublime-syntax
4++++ syntaxes/01_Packages/Java/JavaDoc.sublime-syntax
5@@ -13,7 +13,7 @@ variables:
5@@ -13,7 +13,7 @@ variables:
6 contexts:
6 contexts:
7 prototype:
7 prototype:
assets/create.sh+1−1
@@ -44,7 +44,7 @@ bat cache --clear
44
44
45# TODO: Remove this (and the reverse part below) when
45# TODO: Remove this (and the reverse part below) when
46# https://github.com/trishume/syntect/issues/222 has been fixed
46# https://github.com/trishume/syntect/issues/222 has been fixed
47−JAVADOC_FILE="${ASSET_DIR}/syntaxes/Packages/Java/JavaDoc.sublime-syntax"
47+JAVADOC_FILE="${ASSET_DIR}/syntaxes/01_Packages/Java/JavaDoc.sublime-syntax"
48JAVADOC_PATCH="${ASSET_DIR}/JavaDoc.sublime-syntax.patch"
48JAVADOC_PATCH="${ASSET_DIR}/JavaDoc.sublime-syntax.patch"
49patch "$JAVADOC_FILE" "$JAVADOC_PATCH"
49patch "$JAVADOC_FILE" "$JAVADOC_PATCH"
50
50
assets/manual/bat.1.in+79−66
@@ -1,18 +1,23 @@
1.TH {{PROJECT_EXECUTABLE | upcase}} "1"
1.TH {{PROJECT_EXECUTABLE | upcase}} "1"
2.SH NAME
2.SH NAME
3−{{PROJECT_EXECUTABLE}} \- manual page for {{PROJECT_NAME}}
4−.SH DESCRIPTION
5−{{PROJECT_EXECUTABLE}} - a cat(1) clone with syntax highlighting and Git integration.
3+{{PROJECT_EXECUTABLE}} \- a cat(1) clone with syntax highlighting and Git integration.
6.SH "USAGE"
4.SH "USAGE"
7−.IP
8−{{PROJECT_EXECUTABLE}} [OPTIONS] [FILE]...
5+.IP "{{PROJECT_EXECUTABLE}} [OPTIONS] [FILE]..."
9−.IP
6+.IP "{{PROJECT_EXECUTABLE}} cache [CACHE-OPTIONS] [--build|--clear]
10−{{PROJECT_EXECUTABLE}} <SUBCOMMAND>
7+.SH DESCRIPTION
8+{{PROJECT_EXECUTABLE}} prints the syntax-highlighted content of a collection of FILEs to the
9+terminal. If no FILE is specified, or when FILE is '-', it reads from standard input.
10+
11+{{PROJECT_EXECUTABLE}} supports a large number of programming and markup languages.
12+It also communicates with git(1) to show modifications with respect to the git index.
13+{{PROJECT_EXECUTABLE}} automatically pipes its output through a pager (by default: less).
14+
15+Whenever the output of {{PROJECT_EXECUTABLE}} goes to a non-interactive terminal, i.e. when the
16+output is piped into another process or into a file, {{PROJECT_EXECUTABLE}} will act as a drop-in
17+replacement for cat(1) and fall back to printing the plain file contents.
18+
11.SH "OPTIONS"
19.SH "OPTIONS"
12−.HP
13−General remarks
14−.IP
15−Command-line options like '-l'/'--language' that take values can be specified as
20+General remarks: Command-line options like '-l'/'--language' that take values can be specified as
16either '--language value', '--language=value', '-l value' or '-lvalue'.
21either '--language value', '--language=value', '-l value' or '-lvalue'.
17.HP
22.HP
18\fB\-A\fR, \fB\-\-show\-all\fR
23\fB\-A\fR, \fB\-\-show\-all\fR
@@ -33,78 +38,80 @@ specified as a name (like 'C++' or 'LaTeX') or possible file extension
33(like 'cpp', 'hpp' or 'md'). Use '\-\-list\-languages' to show all supported
38(like 'cpp', 'hpp' or 'md'). Use '\-\-list\-languages' to show all supported
34language names and file extensions.
39language names and file extensions.
35.HP
40.HP
36−\fB\-H\fR, \fB\-\-highlight\-line\fR <N>...
41+\fB\-H\fR, \fB\-\-highlight\-line\fR <N:M>...
37.IP
42.IP
38−Highlight the N\-th line with a different background color
43+Highlight the specified line ranges with a different background color For example:
44+.RS
45+.IP "\-\-highlight\-line 40"
46+highlights line 40
47+.IP "\-\-highlight\-line 30:40"
48+highlights lines 30 to 40
49+.IP "\-\-highlight\-line :40"
50+highlights lines 1 to 40
51+.IP "\-\-highlight\-line 40:"
52+highlights lines 40 to the end of the file
53+.RE
39.HP
54.HP
40\fB\-\-tabs\fR <T>
55\fB\-\-tabs\fR <T>
41.IP
56.IP
42−Set the tab width to T spaces. Use a width of 0 to pass tabs through
57+Set the tab width to T spaces. Use a width of 0 to pass tabs through directly
43−directly
44.HP
58.HP
45\fB\-\-wrap\fR <mode>
59\fB\-\-wrap\fR <mode>
46.IP
60.IP
47−Specify the text\-wrapping mode (*auto*, never, character). The
61+Specify the text\-wrapping mode (*auto*, never, character). The '\-\-terminal\-width' option
48−\&'\-\-terminal\-width' option can be used in addition to control the output
62+can be used in addition to control the output width.
49−width.
50.HP
63.HP
51\fB\-\-terminal\-width\fR <width>
64\fB\-\-terminal\-width\fR <width>
52.IP
65.IP
53−Explicitly set the width of the terminal instead of determining it
66+Explicitly set the width of the terminal instead of determining it automatically. If
54−automatically. If prefixed with '+' or '\-', the value will be treated as
67+prefixed with '+' or '\-', the value will be treated as an offset to the actual terminal
55−an offset to the actual terminal width. See also: '\-\-wrap'.
68+width. See also: '\-\-wrap'.
56.HP
69.HP
57\fB\-n\fR, \fB\-\-number\fR
70\fB\-n\fR, \fB\-\-number\fR
58.IP
71.IP
59−Only show line numbers, no other decorations. This is an alias for
72+Only show line numbers, no other decorations. This is an alias for '\-\-style=numbers'
60−\&'\-\-style=numbers'
61.HP
73.HP
62\fB\-\-color\fR <when>
74\fB\-\-color\fR <when>
63.IP
75.IP
64−Specify when to use colored output. The automatic mode only enables colors
76+Specify when to use colored output. The automatic mode only enables colors if an
65−if an interactive terminal is detected. Possible values: *auto*, never,
77+interactive terminal is detected. Possible values: *auto*, never, always.
66−always.
67.HP
78.HP
68\fB\-\-italic\-text\fR <when>
79\fB\-\-italic\-text\fR <when>
69.IP
80.IP
70−Specify when to use ANSI sequences for italic text in the output. Possible
81+Specify when to use ANSI sequences for italic text in the output. Possible values:
71−values: always, *never*.
82+always, *never*.
72.HP
83.HP
73\fB\-\-decorations\fR <when>
84\fB\-\-decorations\fR <when>
74.IP
85.IP
75−Specify when to use the decorations that have been specified via
86+Specify when to use the decorations that have been specified via '\-\-style'. The
76−\&'\-\-style'. The automatic mode only enables decorations if an interactive
87+automatic mode only enables decorations if an interactive terminal is detected. Possible
77−terminal is detected. Possible values: *auto*, never, always.
88+values: *auto*, never, always.
78.HP
89.HP
79\fB\-\-paging\fR <when>
90\fB\-\-paging\fR <when>
80.IP
91.IP
81−Specify when to use the pager. To control which pager is used, set the
92+Specify when to use the pager. To control which pager is used, set the PAGER or
82−PAGER or BAT_PAGER environment variables (the latter takes precedence) or
93+BAT_PAGER environment variables (the latter takes precedence) or use the '\-\-pager'
83−use the '\-\-pager' option. To disable the pager permanently, set BAT_PAGER
94+option. To disable the pager permanently, set BAT_PAGER to an empty string or set
84−to an empty string or set '\-\-paging=never' in the configuration file.
85−Possible values: *auto*, never, always.
95+\&'\-\-paging=never' in the configuration file. Possible values: *auto*, never, always.
86.HP
96.HP
87\fB\-\-pager\fR <command>
97\fB\-\-pager\fR <command>
88.IP
98.IP
89−Determine which pager is used. This option will overwrite the PAGER and
99+Determine which pager is used. This option will overwrite the PAGER and BAT_PAGER
90−BAT_PAGER environment variables. The default pager is 'less'. To disable
100+environment variables. The default pager is 'less'. To disable the pager completely, use
91−the pager completely, use the '\-\-paging' option. Example: '\-\-pager "less
101+the '\-\-paging' option. Example: '\-\-pager "less \fB\-RF\fR"'.
92−\fB\-RF\fR"'.
93.HP
102.HP
94−\fB\-m\fR, \fB\-\-map\-syntax\fR <from:to>...
103+\fB\-m\fR, \fB\-\-map\-syntax\fR <glob-pattern:syntax-name>...
95.IP
104.IP
96−Map a file extension or file name to an existing syntax (specified by a
105+Map a glob pattern to an existing syntax name. The glob pattern is matched on the full
97−file extension or file name). For example, to
98−highlight *.build files with the Python syntax, use '\-m build:py'. To
106+path and the filename. For example, to highlight *.build files with the Python syntax,
99−highlight files named '.myignore' with the Git Ignore syntax, use '\-m
107+use -m '*.build:Python'. To highlight files named '.myignore' with the Git Ignore
100−\&.myignore:gitignore'.
108+syntax, use -m '.myignore:Git Ignore'.
101.HP
109.HP
102\fB\-\-theme\fR <theme>
110\fB\-\-theme\fR <theme>
103.IP
111.IP
104−Set the theme for syntax highlighting. Use '\-\-list\-themes' to see all
112+Set the theme for syntax highlighting. Use '\-\-list\-themes' to see all available themes.
105−available themes. To set a default theme, add the '\-\-theme="..."' option
113+To set a default theme, add the '\-\-theme="..."' option to the configuration file or
106−to the configuration file or export the BAT_THEME environment variable
114+export the BAT_THEME environment variable (e.g.: export BAT_THEME="...").
107−(e.g.: export BAT_THEME="...").
108.HP
115.HP
109\fB\-\-list\-themes\fR
116\fB\-\-list\-themes\fR
110.IP
117.IP
@@ -112,12 +119,11 @@ Display a list of supported themes for syntax highlighting.
112.HP
119.HP
113\fB\-\-style\fR <style\-components>
120\fB\-\-style\fR <style\-components>
114.IP
121.IP
115−Configure which elements (line numbers, file headers, grid borders, Git
122+Configure which elements (line numbers, file headers, grid borders, Git modifications,
116−modifications, ..) to display in addition to the file contents. The
123+\&..) to display in addition to the file contents. The argument is a comma\-separated list
117−argument is a comma\-separated list of components to display (e.g.
118−\&'numbers,changes,grid') or a pre\-defined style ('full'). To set a default
124+of components to display (e.g. 'numbers,changes,grid') or a pre\-defined style ('full').
119−style, add the '\-\-style=".."' option to the configuration file or export
125+To set a default style, add the '\-\-style=".."' option to the configuration file or
120−the BAT_STYLE environment variable (e.g.: export BAT_STYLE=".."). Possible
126+export the BAT_STYLE environment variable (e.g.: export BAT_STYLE=".."). Possible
121values: *auto*, full, plain, changes, header, grid, numbers, snip.
127values: *auto*, full, plain, changes, header, grid, numbers, snip.
122.HP
128.HP
123\fB\-r\fR, \fB\-\-line\-range\fR <N:M>...
129\fB\-r\fR, \fB\-\-line\-range\fR <N:M>...
@@ -138,8 +144,8 @@ Display a list of supported languages for syntax highlighting.
138.HP
144.HP
139\fB\-u\fR, \fB\-\-unbuffered\fR
145\fB\-u\fR, \fB\-\-unbuffered\fR
140.IP
146.IP
141−This option exists for POSIX\-compliance reasons ('u' is for 'unbuffered').
147+This option exists for POSIX\-compliance reasons ('u' is for 'unbuffered'). The output is
142−The output is always unbuffered \- this option is simply ignored.
148+always unbuffered \- this option is simply ignored.
143.HP
149.HP
144\fB\-h\fR, \fB\-\-help\fR
150\fB\-h\fR, \fB\-\-help\fR
145.IP
151.IP
@@ -148,13 +154,20 @@ Print this help message.
148\fB\-V\fR, \fB\-\-version\fR
154\fB\-V\fR, \fB\-\-version\fR
149.IP
155.IP
150Show version information.
156Show version information.
151−.SH "ARGS"
157+.SH "POSITIONAL ARGUMENTS"
152−.IP
158+.HP
153−<FILE>...
159+\fB<FILE>...\fR
154.IP
160.IP
155−File(s) to print / concatenate. Use a dash ('\-') or no argument at all to read
161+Files to print and concatenate. Use a dash ('\-') or no argument at all to read from
156−from standard input.
162+standard input.
157.SH "SUBCOMMANDS"
163.SH "SUBCOMMANDS"
158−.IP
164+.HP
159−cache
160−Modify the syntax\-definition and theme cache
165+\fBcache\fR - Modify the syntax\-definition and theme cache.
166+.SH "FILES"
167+{{PROJECT_EXECUTABLE}} can also be customized with a configuration file. The location of the file
168+is dependent on your operating system. To get the default path for your system, call:
169+
170+\fB{{PROJECT_EXECUTABLE}} --config-file\fR
171+
172+Alternatively, you can use the BAT_CONFIG_PATH environment variable to point bat to a non-default
173+location of the configuration file.
assets/syntaxes.bin

Binary file not shown.

assets/syntaxes/Packages → assets/syntaxes/01_Packagesrenamed

The content is the same.

assets/syntaxes/AWK → assets/syntaxes/02_Extra/AWKrenamed

The content is the same.

assets/syntaxes/AsciiDoc → assets/syntaxes/02_Extra/AsciiDocrenamed

The content is the same.

assets/syntaxes/AsciiDoc.sublime-syntax → assets/syntaxes/02_Extra/AsciiDoc.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/Assembly (ARM) → assets/syntaxes/02_Extra/Assembly (ARM)renamed

The content is the same.

assets/syntaxes/Assembly (ARM).sublime-syntax → assets/syntaxes/02_Extra/Assembly (ARM).sublime-syntaxrenamed

The content is the same.

assets/syntaxes/Assembly (x86_64).sublime-syntax → assets/syntaxes/02_Extra/Assembly (x86_64).sublime-syntaxrenamed

The content is the same.

assets/syntaxes/CMake → assets/syntaxes/02_Extra/CMakerenamed

The content is the same.

assets/syntaxes/CSV → assets/syntaxes/02_Extra/CSVrenamed

The content is the same.

assets/syntaxes/CSV.sublime-syntax → assets/syntaxes/02_Extra/CSV.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/Cabal → assets/syntaxes/02_Extra/Cabalrenamed

The content is the same.

assets/syntaxes/Cabal.sublime-syntax → assets/syntaxes/02_Extra/Cabal.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/CoffeeScript → assets/syntaxes/02_Extra/CoffeeScriptrenamed

The content is the same.

assets/syntaxes/CoffeeScript.sublime-syntax → assets/syntaxes/02_Extra/CoffeeScript.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/CpuInfo.sublime-syntax → assets/syntaxes/02_Extra/CpuInfo.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/Crystal → assets/syntaxes/02_Extra/Crystalrenamed

The content is the same.

assets/syntaxes/Crystal.sublime-syntax → assets/syntaxes/02_Extra/Crystal.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/Dart → assets/syntaxes/02_Extra/Dartrenamed

The content is the same.

assets/syntaxes/Dart.sublime-syntax → assets/syntaxes/02_Extra/Dart.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/Docker → assets/syntaxes/02_Extra/Dockerrenamed

The content is the same.

assets/syntaxes/DotENV → assets/syntaxes/02_Extra/DotENVrenamed

The content is the same.

assets/syntaxes/DotENV.sublime-syntax → assets/syntaxes/02_Extra/DotENV.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/Elixir → assets/syntaxes/02_Extra/Elixirrenamed

The content is the same.

assets/syntaxes/Elm → assets/syntaxes/02_Extra/Elmrenamed

The content is the same.

assets/syntaxes/FSharp → assets/syntaxes/02_Extra/FSharprenamed

The content is the same.

assets/syntaxes/Fish → assets/syntaxes/02_Extra/Fishrenamed

The content is the same.

assets/syntaxes/Fstab.sublime-syntax → assets/syntaxes/02_Extra/Fstab.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/GraphQL → assets/syntaxes/02_Extra/GraphQLrenamed

The content is the same.

assets/syntaxes/Group.sublime-syntax → assets/syntaxes/02_Extra/Group.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/HTML (Twig) → assets/syntaxes/02_Extra/HTML (Twig)renamed

The content is the same.

assets/syntaxes/HTML (Twig).sublime-syntax → assets/syntaxes/02_Extra/HTML (Twig).sublime-syntaxrenamed

The content is the same.

assets/syntaxes/Hosts.sublime-syntax → assets/syntaxes/02_Extra/Hosts.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/INI → assets/syntaxes/02_Extra/INIrenamed

The content is the same.

assets/syntaxes/INI.sublime-syntax → assets/syntaxes/02_Extra/INI.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/JavaScript (Babel) → assets/syntaxes/02_Extra/JavaScript (Babel)renamed

The content is the same.

assets/syntaxes/JavaScript (Babel).sublime-syntax → assets/syntaxes/02_Extra/JavaScript (Babel).sublime-syntaxrenamed

The content is the same.

assets/syntaxes/Jinja2 → assets/syntaxes/02_Extra/Jinja2renamed

The content is the same.

assets/syntaxes/Jsonnet → assets/syntaxes/02_Extra/Jsonnetrenamed

The content is the same.

assets/syntaxes/Julia → assets/syntaxes/02_Extra/Juliarenamed

The content is the same.

assets/syntaxes/Kotlin → assets/syntaxes/02_Extra/Kotlinrenamed

The content is the same.

assets/syntaxes/Kotlin.sublime-syntax → assets/syntaxes/02_Extra/Kotlin.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/LESS → assets/syntaxes/02_Extra/LESSrenamed

The content is the same.

assets/syntaxes/Manpage.sublime-syntax → assets/syntaxes/02_Extra/Manpage.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/MemInfo.sublime-syntax → assets/syntaxes/02_Extra/MemInfo.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/Nim.sublime-syntax → assets/syntaxes/02_Extra/Nim.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/Nix → assets/syntaxes/02_Extra/Nixrenamed

The content is the same.

assets/syntaxes/Nix.sublime-syntax → assets/syntaxes/02_Extra/Nix.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/Org mode → assets/syntaxes/02_Extra/Org moderenamed

The content is the same.

assets/syntaxes/Org mode.sublime-syntax → assets/syntaxes/02_Extra/Org mode.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/Passwd.sublime-syntax → assets/syntaxes/02_Extra/Passwd.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/PowerShell → assets/syntaxes/02_Extra/PowerShellrenamed

The content is the same.

assets/syntaxes/PowerShell.sublime-syntax → assets/syntaxes/02_Extra/PowerShell.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/Protobuf → assets/syntaxes/02_Extra/Protobufrenamed

The content is the same.

assets/syntaxes/Puppet → assets/syntaxes/02_Extra/Puppetrenamed

The content is the same.

assets/syntaxes/PureScript → assets/syntaxes/02_Extra/PureScriptrenamed

The content is the same.

assets/syntaxes/Resolv.sublime-syntax → assets/syntaxes/02_Extra/Resolv.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/Robot → assets/syntaxes/02_Extra/Robotrenamed

The content is the same.

assets/syntaxes/Robot.sublime-syntax → assets/syntaxes/02_Extra/Robot.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/SCSS_Sass → assets/syntaxes/02_Extra/SCSS_Sassrenamed

The content is the same.

assets/syntaxes/SLS → assets/syntaxes/02_Extra/SLSrenamed

The content is the same.

assets/syntaxes/Strace → assets/syntaxes/02_Extra/Stracerenamed

The content is the same.

assets/syntaxes/Swift → assets/syntaxes/02_Extra/Swiftrenamed

The content is the same.

assets/syntaxes/Swift.sublime-syntax → assets/syntaxes/02_Extra/Swift.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/Syslog → assets/syntaxes/02_Extra/Syslogrenamed

The content is the same.

assets/syntaxes/TOML → assets/syntaxes/02_Extra/TOMLrenamed

The content is the same.

assets/syntaxes/Terraform → assets/syntaxes/02_Extra/Terraformrenamed

The content is the same.

assets/syntaxes/TypeScript → assets/syntaxes/02_Extra/TypeScriptrenamed

The content is the same.

assets/syntaxes/TypeScript.sublime-syntax → assets/syntaxes/02_Extra/TypeScript.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/TypsecriptReact.sublime-syntax → assets/syntaxes/02_Extra/TypsecriptReact.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/Verilog → assets/syntaxes/02_Extra/Verilogrenamed

The content is the same.

assets/syntaxes/Verilog.sublime-syntax → assets/syntaxes/02_Extra/Verilog.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/VimL → assets/syntaxes/02_Extra/VimLrenamed

The content is the same.

assets/syntaxes/VimL.sublime-syntax → assets/syntaxes/02_Extra/VimL.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/Vue → assets/syntaxes/02_Extra/Vuerenamed

The content is the same.

assets/syntaxes/hosts → assets/syntaxes/02_Extra/hostsrenamed

The content is the same.

assets/syntaxes/requirementstxt → assets/syntaxes/02_Extra/requirementstxtrenamed

The content is the same.

assets/syntaxes/requirementstxt.sublime-syntax → assets/syntaxes/02_Extra/requirementstxt.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/show-nonprintable.sublime-syntax → assets/syntaxes/02_Extra/show-nonprintable.sublime-syntaxrenamed

The content is the same.

assets/syntaxes/ssh-config → assets/syntaxes/02_Extra/ssh-configrenamed

The content is the same.

assets/syntaxes/varlink → assets/syntaxes/02_Extra/varlinkrenamed

The content is the same.

assets/syntaxes/FSharp.sublime-syntaxdeleted−672
@@ -1,672 +0,0 @@
1−%YAML 1.2
2−---
3−# http://www.sublimetext.com/docs/3/syntax.html
4−name: "F#"
5−file_extensions:
6− - fs
7− - fsi
8− - fsx
9−scope: source.fsharp
10−contexts:
11− main:
12− - include: compiler_directives
13− - include: comments
14− - include: constants
15− - include: strings
16− - include: chars
17− - include: double_tick
18− - include: definition
19− - include: abstract_definition
20− - include: attributes
21− - include: modules
22− - include: anonymous_functions
23− - include: du_declaration
24− - include: record_declaration
25− - include: records
26− - include: strp_inlined
27− - include: keywords
28− - include: cexprs
29− - include: text
30− abstract_definition:
31− - match: '\b(abstract)\s+(member)?(\s+\[\<.*\>\])?\s*([_[:alpha:]0-9,\._`\s]+)(:)'
32− captures:
33− 1: keyword.fsharp
34− 2: keyword.fsharp
35− 3: support.function.attribute.fsharp
36− 5: keyword.fsharp
37− push:
38− - meta_scope: abstract.definition.fsharp
39− - match: \s*(with)\b|=|$
40− captures:
41− 1: keyword.fsharp
42− pop: true
43− - include: comments
44− - include: common_declaration
45− - match: '(\?{0,1})([[:alpha:]0-9''`^._ ]+)\s*(:)(\s*([[:alpha:]0-9''`^._ ]+)){0,1}'
46− captures:
47− 1: keyword.symbol.fsharp
48− 2: variable.parameter.fsharp
49− 3: keyword.symbol.fsharp
50− 4: entity.name.type.fsharp
51− - match: '(?!with|get|set\b)\b([\w0-9''`^._]+)'
52− captures:
53− 1: entity.name.type.fsharp
54− - include: keywords
55− anonymous_functions:
56− - match: \b(fun)\b
57− captures:
58− 1: keyword.fsharp
59− push:
60− - meta_scope: function.anonymous
61− - match: (->)
62− captures:
63− 1: keyword.fsharp
64− pop: true
65− - include: comments
66− - match: (\()
67− captures:
68− 1: keyword.symbol.fsharp
69− push:
70− - match: \s*(?=(->))
71− captures:
72− 1: keyword.symbol.fsharp
73− pop: true
74− - include: member_declaration
75− - include: variables
76− attributes:
77− - match: '\[\<'
78− push:
79− - meta_scope: support.function.attribute.fsharp
80− - match: '\>\]|\]'
81− pop: true
82− - include: main
83− cexprs:
84− - match: '\b(async|seq|promise|task|maybe|asyncMaybe|controller|scope|application|pipeline)\s*\{'
85− scope: cexpr.fsharp
86− captures:
87− 0: keyword.fsharp
88− chars:
89− - match: ('\\?.')
90− scope: char.fsharp
91− captures:
92− 1: string.quoted.single.fsharp
93− comments:
94− - match: (\(\*(?!\)))
95− captures:
96− 1: comment.block.fsharp
97− push:
98− - meta_scope: comment.block.fsharp
99− - match: (\*\))
100− captures:
101− 1: comment.block.fsharp
102− pop: true
103− - match: //.*$
104− scope: comment.line.double-slash.fsharp
105− common_binding_definition:
106− - include: comments
107− - include: attributes
108− - match: (:)\s*(\()\s*(static member|member)
109− captures:
110− 1: keyword.symbol.fsharp
111− 2: keyword.symbol.fsharp
112− 3: keyword.fsharp
113− push:
114− - match: (\))\s*((?=,)|(?=\=))
115− captures:
116− 1: keyword.symbol.fsharp
117− pop: true
118− - match: '(\^[[:alpha:]0-9''._]+)'
119− captures:
120− 1: entity.name.type.fsharp
121− - include: variables
122− - include: keywords
123− - match: (:)\s*(\()
124− captures:
125− 1: keyword.symbol.fsharp
126− 2: keyword.symbol.fsharp
127− push:
128− - match: '(\)\s*(([?[:alpha:]0-9''`^._ ]*)))'
129− captures:
130− 1: keyword.symbol.fsharp
131− 2: entity.name.type.fsharp
132− pop: true
133− - include: tuple_signature
134− - match: '(:)\s*(\^[[:alpha:]0-9''._]+)\s*(when)'
135− captures:
136− 1: keyword.symbol.fsharp
137− 2: entity.name.type.fsharp
138− 3: keyword.fsharp
139− push:
140− - match: (?=:)
141− captures:
142− 1: keyword.symbol.fsharp
143− pop: true
144− - match: \b(and|when|or)\b
145− scope: keyword.fsharp
146− - match: "([[:alpha:]0-9'^._]+)"
147− comment: Because we first capture the keywords, we can capture what looks like a word and assume it's an entity definition
148− captures:
149− 1: entity.name.type.fsharp
150− - match: (\(|\))
151− scope: keyword.symbol.fsharp
152− - match: '(:)\s*([?[:alpha:]0-9''`^._ ]+)'
153− captures:
154− 1: keyword.symbol.fsharp
155− 2: entity.name.type.fsharp
156− - match: '(->)\s*(\()?\s*([?[:alpha:]0-9''`^._ ]+)*'
157− captures:
158− 1: keyword.symbol.fsharp
159− 2: keyword.symbol.fsharp
160− 3: entity.name.type.fsharp
161− - match: (\*)\s*(\()
162− captures:
163− 1: keyword.symbol.fsharp
164− 2: keyword.symbol.fsharp
165− push:
166− - match: '(\)\s*(([?[:alpha:]0-9''`^._ ]+))+)'
167− captures:
168− 1: keyword.symbol.fsharp
169− 2: entity.name.type.fsharp
170− pop: true
171− - include: tuple_signature
172− - match: '(\*)(\s*([?[:alpha:]0-9''`^._ ]+))*'
173− captures:
174− 1: keyword.symbol.fsharp
175− 2: entity.name.type.fsharp
176− - match: '(<(?![[:space:]]*\)))'
177− captures:
178− 1: keyword.symbol.fsharp
179− push:
180− - match: ((?<!:)>)
181− captures:
182− 1: keyword.symbol.fsharp
183− pop: true
184− - include: generic_declaration
185− - match: "({)"
186− captures:
187− 1: keyword.symbol.fsharp
188− push:
189− - match: "(})"
190− captures:
191− 1: keyword.symbol.fsharp
192− pop: true
193− - include: record_signature
194− - include: definition
195− - include: variables
196− - include: keywords
197− common_declaration:
198− - match: '\s*(->)\s*([[:alpha:]0-9''`^._ ]+)(<)'
199− captures:
200− 1: keyword.symbol.fsharp
201− 2: entity.name.type.fsharp
202− 3: keyword.symbol.fsharp
203− push:
204− - match: (>)
205− captures:
206− 1: keyword.symbol.fsharp
207− pop: true
208− - match: "([[:alpha:]0-9'`^._ ]+)"
209− captures:
210− 1: entity.name.type.fsharp
211− - include: keywords
212− - match: '\s*(->)\s*(?!with|get|set\b)\b([\w0-9''`^._]+)'
213− captures:
214− 1: keyword.symbol.fsharp
215− 2: entity.name.type.fsharp
216− - match: '(\?{0,1})([[:alpha:]0-9''`^._ ]+)\s*(:)(\s*([?[:alpha:]0-9''`^._ ]+)(<))'
217− captures:
218− 1: keyword.symbol.fsharp
219− 2: variable.parameter.fsharp
220− 3: keyword.symbol.fsharp
221− 4: keyword.symbol.fsharp
222− 5: entity.name.type.fsharp
223− push:
224− - match: (>)
225− captures:
226− 1: keyword.symbol.fsharp
227− pop: true
228− - match: "([[:alpha:]0-9'`^._ ]+)"
229− captures:
230− 1: entity.name.type.fsharp
231− - include: keywords
232− compiler_directives:
233− - match: \s?(#if|#elif|#else|#elseif|#endif|#light|#nowarn)
234− scope: compiler_directive.fsharp
235− captures:
236− constants:
237− - match: \(\)
238− scope: constant.language.unit.fsharp
239− - match: '\b-?[0-9][0-9_]*((\.([0-9][0-9_]*([eE][+-]??[0-9][0-9_]*)?)?)|([eE][+-]??[0-9][0-9_]*))'
240− scope: constant.numeric.floating-point.fsharp
241− - match: '\b(-?((0(x|X)[0-9a-fA-F][0-9a-fA-F_]*)|(0(o|O)[0-7][0-7_]*)|(0(b|B)[01][01_]*)|([0-9][0-9_]*)))'
242− scope: constant.numeric.integer.nativeint.fsharp
243− - match: \b(true|false|null|unit)\b
244− scope: constant.others.fsharp
245− definition:
246− - match: '\b(let mutable|static let mutable|let inline|let|member val|static member inline|static member|default|member|override|let!)(\s+rec|mutable)?(\s+\[\<.*\>\])?\s*(private|internal|public)?\s+(\[[^-=]*\]|[_[:alpha:]]([_[:alpha:]0-9,\._]+)*|``[_[:alpha:]]([_[:alpha:]0-9,\._`\s]+|(?<=,)\s)*)?'
247− captures:
248− 1: keyword.fsharp
249− 2: keyword.fsharp
250− 3: support.function.attribute.fsharp
251− 4: keyword.fsharp
252− 5: variable.fsharp
253− push:
254− - meta_scope: binding.fsharp
255− - match: \s*(with\b|=|\n+=|(?<=\=))
256− captures:
257− 1: keyword.fsharp
258− pop: true
259− - include: common_binding_definition
260− - match: '\b(static val mutable|val mutable|val)(\s+rec|mutable)?(\s+\[\<.*\>\])?\s*(private|internal|public)?\s+(\[[^-=]*\]|[_[:alpha:]]([_[:alpha:]0-9,\._]+)*|``[_[:alpha:]]([_[:alpha:]0-9,\._`\s]+|(?<=,)\s)*)?'
261− captures:
262− 1: keyword.fsharp
263− 2: keyword.fsharp
264− 3: support.function.attribute.fsharp
265− 4: keyword.fsharp
266− 5: variable.fsharp
267− push:
268− - meta_scope: binding.fsharp
269− - match: \n$
270− pop: true
271− - include: common_binding_definition
272− double_tick:
273− - match: (``)(.*)(``)
274− scope: variable.other.binding.fsharp
275− captures:
276− 1: string.quoted.single.fsharp
277− 2: variable.other.binding.fsharp
278− 3: string.quoted.single.fsharp
279− du_declaration:
280− - match: \b(of)\b
281− captures:
282− 1: keyword.fsharp
283− push:
284− - meta_scope: du_declaration.fsharp
285− - match: $|(\|)
286− captures:
287− 1: keyword.symbol.fsharp
288− pop: true
289− - include: comments
290− - match: '([[:alpha:]0-9''`<>^._]+|``[[:alpha:]0-9'' <>^._]+``)\s*(:)\s*([[:alpha:]0-9''`<>^._]+|``[[:alpha:]0-9'' <>^._]+``)'
291− captures:
292− 1: variable.parameter.fsharp
293− 2: keyword.symbol.fsharp
294− 3: entity.name.type.fsharp
295− - match: "([[:alpha:]0-9'`^._]+)|``([[:alpha:]0-9'^._ ]+)``"
296− captures:
297− 1: entity.name.type.fsharp
298− - include: keywords
299− generic_declaration:
300− - match: (:)\s*(\()\s*(static member|member)
301− captures:
302− 1: keyword.symbol.fsharp
303− 2: keyword.symbol.fsharp
304− 3: keyword.fsharp
305− push:
306− - match: (\))
307− captures:
308− 1: keyword.symbol.fsharp
309− pop: true
310− - match: (\()
311− captures:
312− 1: keyword.symbol.fsharp
313− push:
314− - match: (\))
315− captures:
316− 1: keyword.symbol.fsharp
317− pop: true
318− - include: member_declaration
319− - match: '((''|\^)[[:alpha:]0-9''._]+)'
320− captures:
321− 1: entity.name.type.fsharp
322− - include: variables
323− - include: keywords
324− - match: \b(private|to|public|internal|function|yield!|yield|class|exception|match|delegate|of|new|in|as|if|then|else|elif|for|begin|end|inherit|do|let\!|return\!|return|interface|with|abstract|property|union|enum|member|try|finally|and|when|use|use\!|struct|while|mutable)(?!')\b
325− scope: keyword.fsharp
326− - match: ":"
327− scope: keyword.fsharp
328− - include: constants
329− - match: '((''|\^)[[:alpha:]0-9''._]+)'
330− captures:
331− 1: entity.name.type.fsharp
332− - match: (<)
333− captures:
334− 1: keyword.symbol.fsharp
335− push:
336− - match: (>)
337− captures:
338− 1: keyword.symbol.fsharp
339− pop: true
340− - match: '((''|\^)[[:alpha:]0-9''._]+)'
341− captures:
342− 1: entity.name.type.fsharp
343− - include: tuple_signature
344− - include: generic_declaration
345− - match: '(?!when|and|or\b)\b([\w0-9''`^._]+)'
346− captures:
347− 1: entity.name.type.fsharp
348− - match: (\|)
349− captures:
350− 1: keyword.symbol.fsharp
351− - include: keywords
352− keywords:
353− - match: \b(private|to|public|internal|function|yield!|yield|class|exception|match|delegate|of|new|in|as|if|then|else|elif|for|begin|end|inherit|do|let\!|return\!|return|interface|with|abstract|property|union|enum|member|try|finally|and|when|or|use|use\!|struct|while|mutable)(?!')\b
354− scope: keyword.fsharp
355− - match: '(&&&|\|\|\||\^\^\^|~~~|<<<|>>>|\|>|\->|\<\-|:>|:\?>|:|\[|\]|\;|<>|=|@|\|\||&&|{|}|\||_|\.\.|\,|\+|\-|\*|\/|\^|\!|\>|\>\=|\>\>|\<|\<\=|\(|\)|\<\<)'
356− scope: keyword.symbol.fsharp
357− member_declaration:
358− - include: comments
359− - include: common_declaration
360− - match: (:)\s*(\()\s*(static member|member)
361− captures:
362− 1: keyword.symbol.fsharp
363− 2: keyword.symbol.fsharp
364− 3: keyword.fsharp
365− push:
366− - match: (\))\s*((?=,)|(?=\=))
367− captures:
368− 1: keyword.symbol.fsharp
369− pop: true
370− - match: (\()
371− captures:
372− 1: keyword.symbol.fsharp
373− push:
374− - match: (\))
375− captures:
376− 1: keyword.symbol.fsharp
377− pop: true
378− - include: member_declaration
379− - match: '(\^[[:alpha:]0-9''._]+)'
380− captures:
381− 1: entity.name.type.fsharp
382− - include: variables
383− - include: keywords
384− - match: '(\^[[:alpha:]0-9''._]+)'
385− captures:
386− 1: entity.name.type.fsharp
387− - match: \b(and|when|or)\b
388− scope: keyword.fsharp
389− - match: (\(|\))
390− scope: keyword.symbol.fsharp
391− - match: '(\?{0,1})([[:alpha:]0-9''`^._]+|``[[:alpha:]0-9''`^:,._ ]+``)\s*(:{0,1})(\s*([?[:alpha:]0-9''`<>._ ]+)){0,1}'
392− captures:
393− 1: keyword.symbol.fsharp
394− 2: variable.parameter.fsharp
395− 3: keyword.symbol.fsharp
396− 4: entity.name.type.fsharp
397− - include: keywords
398− modules:
399− - match: '\b(namespace|module)\s*(public|internal|private)?\s+([[:alpha:]][[:alpha:]0-9''_. ]*)'
400− captures:
401− 1: keyword.fsharp
402− 2: keyword.fsharp
403− 3: entity.name.section.fsharp
404− push:
405− - meta_scope: entity.name.section.fsharp
406− - match: (\s?=|\s|$)
407− captures:
408− 1: keyword.symbol.fsharp
409− pop: true
410− - match: '(\.)([A-Z][[:alpha:]0-9''_]*)'
411− scope: entity.name.section.fsharp
412− captures:
413− 1: punctuation.separator.namespace-reference.fsharp
414− 2: entity.name.section.fsharp
415− - match: '\b(open)\s+([[:alpha:]][[:alpha:]0-9''_]*)(?=(\.[A-Z][[:alpha:]0-9_]*)*)'
416− captures:
417− 1: keyword.fsharp
418− 2: entity.name.section.fsharp
419− push:
420− - meta_scope: namespace.open.fsharp
421− - match: (\s|$)
422− pop: true
423− - match: '(\.)([[:alpha:]][[:alpha:]0-9''_]*)'
424− scope: entity.name.section.fsharp
425− captures:
426− 1: punctuation.separator.namespace-reference.fsharp
427− 2: entity.name.section.fsharp
428− - match: '^\s*(module)\s+([A-Z][[:alpha:]0-9''_]*)\s*(=)\s*([A-Z][[:alpha:]0-9''_]*)'
429− captures:
430− 1: keyword.fsharp
431− 2: entity.name.type.namespace.fsharp
432− 3: punctuation.separator.namespace-definition.fsharp
433− 4: entity.name.section.fsharp
434− push:
435− - meta_scope: namespace.alias.fsharp
436− - match: (\s|$)
437− pop: true
438− - match: '(\.)([A-Z][[:alpha:]0-9''_]*)'
439− scope: entity.name.section.fsharp
440− captures:
441− 1: punctuation.separator.namespace-reference.fsharp
442− 2: entity.name.section.fsharp
443− record_declaration:
444− - match: '(\{)'
445− captures:
446− 1: keyword.symbol.fsharp
447− push:
448− - match: '(?<=\})'
449− pop: true
450− - include: comments
451− - match: '(((mutable)\s[[:alpha:]]+)|[[:alpha:]0-9''`<>^._]*)\s*((?<!:):(?!:))\s*'
452− captures:
453− 3: keyword.fsharp
454− 4: keyword.symbol.fsharp
455− push:
456− - match: '$|(;|\})'
457− captures:
458− 1: keyword.symbol.fsharp
459− pop: true
460− - include: comments
461− - match: "([[:alpha:]0-9'`^_ ]+)"
462− captures:
463− 1: entity.name.type.fsharp
464− - include: keywords
465− - include: compiler_directives
466− - include: constants
467− - include: strings
468− - include: chars
469− - include: double_tick
470− - include: definition
471− - include: attributes
472− - include: anonymous_functions
473− - include: keywords
474− - include: cexprs
475− - include: text
476− record_signature:
477− - match: "[[:alpha:]0-9'`^_ ]+(=)([[:alpha:]0-9'`^_ ]+)"
478− captures:
479− 1: keyword.symbol.fsharp
480− 2: variable.parameter.fsharp
481− - match: "({)"
482− captures:
483− 1: keyword.symbol.fsharp
484− push:
485− - match: "(})"
486− captures:
487− 1: keyword.symbol.fsharp
488− pop: true
489− - match: "[[:alpha:]0-9'`^_ ]+(=)([[:alpha:]0-9'`^_ ]+)"
490− captures:
491− 1: keyword.symbol.fsharp
492− 2: variable.parameter.fsharp
493− - include: record_signature
494− - include: keywords
495− records:
496− - match: '\b(type)[\s]+(private|internal|public)?\s*'
497− captures:
498− 1: keyword.fsharp
499− 2: keyword.fsharp
500− push:
501− - meta_scope: record.fsharp
502− - match: '\s*((with)|((as)\s+([[:alpha:]0-9'']+))|(=)|[\n=]|(\(\)))'
503− captures:
504− 2: keyword.fsharp
505− 3: keyword.fsharp
506− 4: keyword.fsharp
507− 5: variable.parameter.fsharp
508− 6: keyword.symbol.fsharp
509− 7: constant.language.unit.fsharp
510− pop: true
511− - include: comments
512− - include: attributes
513− - match: "([[:alpha:]0-9'^._]+|``[[:alpha:]0-9'`^:,._ ]+``)"
514− captures:
515− 1: entity.name.type.fsharp
516− - match: (<)
517− captures:
518− 1: keyword.fsharp
519− push:
520− - match: ((?<!:)>)
521− captures:
522− 1: keyword.fsharp
523− pop: true
524− - match: '((''|\^)``[[:alpha:]0-9`^:,._ ]+``|(''|\^)[[:alpha:]0-9`^:._]+)'
525− captures:
526− 1: entity.name.type.fsharp
527− - match: \b(interface|with|abstract|and|when|or|not|struct|equality|comparison|unmanaged|delegate|enum)\b
528− scope: keyword.fsharp
529− - match: (\()
530− captures:
531− 1: keyword.symbol.fsharp
532− push:
533− - match: (\))
534− captures:
535− 1: keyword.symbol.fsharp
536− pop: true
537− - match: (static member|member|new)
538− captures:
539− 1: keyword.fsharp
540− - include: common_binding_definition
541− - match: '([\w0-9''`^._]+)'
542− captures:
543− 1: entity.name.type.fsharp
544− - include: keywords
545− - match: \s*(private|internal|public)
546− captures:
547− 1: keyword.symbol.fsharp
548− 2: keyword.fsharp
549− - match: (\()
550− captures:
551− 1: keyword.symbol.fsharp
552− push:
553− - match: '\s*(?=(=)|[\n=]|(\(\))|(as))'
554− captures:
555− 1: keyword.symbol.fsharp
556− pop: true
557− - include: member_declaration
558− - include: keywords
559− string_formatter:
560− - match: (%0?-?(\d+)?((a|t)|(\.\d+)?(f|F|e|E|g|G|M)|(b|c|s|d|i|x|X|o|u)|(s|b|O)|(\+?A)))
561− scope: entity.name.type.format.specifier.fsharp
562− captures:
563− 1: keyword.format.specifier.fsharp
564− strings:
565− - match: '(?=[^\\])(@")'
566− captures:
567− 1: punctuation.definition.string.begin.fsharp
568− push:
569− - meta_scope: string.quoted.literal.fsharp
570− - match: (")(?!")
571− captures:
572− 1: punctuation.definition.string.end.fsharp
573− pop: true
574− - match: '"(")'
575− scope: constant.character.string.escape.fsharp
576− - match: '(?=[^\\])(""")'
577− captures:
578− 1: punctuation.definition.string.begin.fsharp
579− push:
580− - meta_scope: string.quoted.triple.fsharp
581− - match: (""")
582− captures:
583− 1: punctuation.definition.string.end.fsharp
584− pop: true
585− - include: string_formatter
586− - match: '(?=[^\\])(")'
587− captures:
588− 1: punctuation.definition.string.begin.fsharp
589− push:
590− - meta_scope: string.quoted.double.fsharp
591− - match: (")
592− captures:
593− 1: punctuation.definition.string.end.fsharp
594− pop: true
595− - match: '\\$[ \t]*'
596− scope: punctuation.separator.string.ignore-eol.fsharp
597− - match: '\\([\\''''ntbr]|u[a-fA-F0-9]{4}|u[a-fA-F0-9]{8})'
598− scope: constant.character.string.escape.fsharp
599− - match: '\\(?![\\''''ntbr]|u[a-fA-F0-9]{4}|u[a-fA-F0-9]{8}).'
600− scope: invalid.illeagal.character.string.fsharp
601− - include: string_formatter
602− strp_inlined:
603− - match: (\()
604− captures:
605− 1: keyword.symbol.fsharp
606− push:
607− - match: (\))
608− captures:
609− 1: keyword.symbol.fsharp
610− pop: true
611− - include: strp_inlined_body
612− strp_inlined_body:
613− - include: comments
614− - include: anonymous_functions
615− - match: '(\^[[:alpha:]0-9''._]+)'
616− captures:
617− 1: entity.name.type.fsharp
618− - match: \b(and|when|or)\b
619− scope: keyword.fsharp
620− - match: (\()
621− captures:
622− 1: keyword.symbol.fsharp
623− push:
624− - match: (\))
625− captures:
626− 1: keyword.symbol.fsharp
627− pop: true
628− - include: strp_inlined_body
629− - match: '(static member|member)\s*([[:alpha:]0-9''`<>^._]+|``[[:alpha:]0-9'' <>^._]+``)\s*(:)'
630− captures:
631− 1: keyword.fsharp
632− 2: variable.fsharp
633− 3: keyword.symbol.fsharp
634− - include: compiler_directives
635− - include: constants
636− - include: strings
637− - include: chars
638− - include: double_tick
639− - include: keywords
640− - include: text
641− - include: definition
642− - include: attributes
643− - include: keywords
644− - include: cexprs
645− - include: text
646− text:
647− - match: \\
648− scope: text.fsharp
649− tuple_signature:
650− - match: "(([?[:alpha:]0-9'`^._ ]+))+"
651− captures:
652− 1: entity.name.type.fsharp
653− - match: (\()
654− captures:
655− 1: keyword.symbol.fsharp
656− push:
657− - match: (\))
658− captures:
659− 1: keyword.symbol.fsharp
660− pop: true
661− - match: "(([?[:alpha:]0-9'`^._ ]+))+"
662− captures:
663− 1: entity.name.type.fsharp
664− - include: tuple_signature
665− - include: keywords
666− variables:
667− - match: \(\)
668− scope: constant.language.unit.fsharp
669− - match: '(\?{0,1})(``[[:alpha:]0-9''`^:,._ ]+``|[[:alpha:]0-9''`<>^._ ]\w*)'
670− captures:
671− 1: keyword.symbol.fsharp
672− 2: variable.parameter.fsharp
assets/themes.bin

Binary file not shown.

build.rs+21−27
@@ -7,6 +7,7 @@ extern crate liquid;
7
7
8use std::error::Error;
8use std::error::Error;
9use std::fs;
9use std::fs;
10+use std::path::Path;
10
11
11// Read environment variables.
12// Read environment variables.
12lazy_static! {
13lazy_static! {
@@ -17,34 +18,13 @@ lazy_static! {
17 .unwrap_or("bat");
18 .unwrap_or("bat");
18}
19}
19
20
20−fn init_template() -> liquid::value::Object {
21− let mut globals = liquid::value::Object::new();
22−
23− globals.insert(
24− "PROJECT_NAME".into(),
25− liquid::value::Value::scalar(PROJECT_NAME.to_owned()),
26− );
27−
28− globals.insert(
29− "PROJECT_EXECUTABLE".into(),
30− liquid::value::Value::scalar(EXECUTABLE_NAME.to_owned()),
31− );
32−
33− globals.insert(
34− "PROJECT_VERSION".into(),
35− liquid::value::Value::scalar(PROJECT_VERSION.to_owned()),
36− );
37−
38− globals
39−}
40−
41/// Generates a file from a liquid template.
21/// Generates a file from a liquid template.
42fn template(
22fn template(
43− variables: &liquid::value::Object,
23+ variables: &liquid::Object,
44 in_file: &str,
24 in_file: &str,
45− out_file: &str,
25+ out_file: impl AsRef<Path>,
46) -> Result<(), Box<dyn Error>> {
26) -> Result<(), Box<dyn Error>> {
47− let template = liquid::ParserBuilder::with_liquid()
27+ let template = liquid::ParserBuilder::with_stdlib()
48 .build()?
28 .build()?
49 .parse(&fs::read_to_string(in_file)?)?;
29 .parse(&fs::read_to_string(in_file)?)?;
50
30
@@ -53,13 +33,27 @@ fn template(
53}
33}
54
34
55fn main() -> Result<(), Box<dyn Error>> {
35fn main() -> Result<(), Box<dyn Error>> {
56− let variables = init_template();
36+ let variables = liquid::object!({
37+ "PROJECT_NAME": PROJECT_NAME.to_owned(),
38+ "PROJECT_EXECUTABLE": EXECUTABLE_NAME.to_owned(),
39+ "PROJECT_VERSION": PROJECT_VERSION.to_owned(),
40+ });
57
41
42+ let out_dir_env = std::env::var_os("OUT_DIR").expect("OUT_DIR to be set in build.rs");
43+ let out_dir = Path::new(&out_dir_env);
44+
45+ std::fs::create_dir_all(out_dir.join("assets/manual")).unwrap();
46+ std::fs::create_dir_all(out_dir.join("assets/completions")).unwrap();
47+
48+ template(
49+ &variables,
58− template(&variables, "assets/manual/bat.1.in", "assets/manual/bat.1")?;
50+ "assets/manual/bat.1.in",
51+ out_dir.join("assets/manual/bat.1"),
52+ )?;
59 template(
53 template(
60 &variables,
54 &variables,
61 "assets/completions/bat.fish.in",
55 "assets/completions/bat.fish.in",
62− "assets/completions/bat.fish",
56+ out_dir.join("assets/completions/bat.fish"),
63 )?;
57 )?;
64
58
65 Ok(())
59 Ok(())
ci/before_deploy.bash+6−5
@@ -38,7 +38,7 @@ pack() {
38 "${gcc_prefix}"strip "$tempdir/$package_name/$PROJECT_NAME"
38 "${gcc_prefix}"strip "$tempdir/$package_name/$PROJECT_NAME"
39
39
40 # manpage, readme and license
40 # manpage, readme and license
41− cp "assets/manual/bat.1" "$tempdir/$package_name/$PROJECT_NAME.1"
41+ cp target/"$TARGET"/release/build/"$PROJECT_NAME"-*/out/assets/manual/bat.1 "$tempdir/$package_name/$PROJECT_NAME.1"
42 cp README.md "$tempdir/$package_name"
42 cp README.md "$tempdir/$package_name"
43 cp LICENSE-MIT "$tempdir/$package_name"
43 cp LICENSE-MIT "$tempdir/$package_name"
44 cp LICENSE-APACHE "$tempdir/$package_name"
44 cp LICENSE-APACHE "$tempdir/$package_name"
@@ -47,7 +47,7 @@ pack() {
47 # TODO: disabled for now, see issue #372
47 # TODO: disabled for now, see issue #372
48 # cp target/"$TARGET"/release/build/"$PROJECT_NAME"-*/out/"$PROJECT_NAME".bash "$tempdir/$package_name/autocomplete/${PROJECT_NAME}.bash-completion"
48 # cp target/"$TARGET"/release/build/"$PROJECT_NAME"-*/out/"$PROJECT_NAME".bash "$tempdir/$package_name/autocomplete/${PROJECT_NAME}.bash-completion"
49 # cp target/"$TARGET"/release/build/"$PROJECT_NAME"-*/out/"$PROJECT_NAME".fish "$tempdir/$package_name/autocomplete"
49 # cp target/"$TARGET"/release/build/"$PROJECT_NAME"-*/out/"$PROJECT_NAME".fish "$tempdir/$package_name/autocomplete"
50− cp "assets/completions/bat.fish" "$tempdir/$package_name/autocomplete/$PROJECT_NAME.fish"
50+ cp target/"$TARGET"/release/build/"$PROJECT_NAME"-*/out/assets/completions/bat.fish "$tempdir/$package_name/autocomplete/$PROJECT_NAME.fish"
51 # cp target/"$TARGET"/release/build/"$PROJECT_NAME"-*/out/_"$PROJECT_NAME" "$tempdir/$package_name/autocomplete"
51 # cp target/"$TARGET"/release/build/"$PROJECT_NAME"-*/out/_"$PROJECT_NAME" "$tempdir/$package_name/autocomplete"
52
52
53 # archiving
53 # archiving
@@ -108,11 +108,11 @@ make_deb() {
108 "${gcc_prefix}"strip "$tempdir/usr/bin/$PROJECT_NAME"
108 "${gcc_prefix}"strip "$tempdir/usr/bin/$PROJECT_NAME"
109
109
110 # manpage
110 # manpage
111− install -Dm644 "assets/manual/bat.1" "$tempdir/usr/share/man/man1/$PROJECT_NAME.1"
111+ install -Dm644 target/"$TARGET"/release/build/"$PROJECT_NAME"-*/out/assets/manual/bat.1 "$tempdir/usr/share/man/man1/$PROJECT_NAME.1"
112 gzip --best "$tempdir/usr/share/man/man1/$PROJECT_NAME.1"
112 gzip --best "$tempdir/usr/share/man/man1/$PROJECT_NAME.1"
113
113
114 # completions
114 # completions
115− install -Dm644 "assets/completions/bat.fish" "$tempdir/usr/share/fish/vendor_completions.d/$PROJECT_NAME.fish"
115+ install -Dm644 target/"$TARGET"/release/build/"$PROJECT_NAME"-*/out/assets/completions/bat.fish "$tempdir/usr/share/fish/vendor_completions.d/$PROJECT_NAME.fish"
116
116
117 # readme and license
117 # readme and license
118 install -Dm644 README.md "$tempdir/usr/share/doc/$PROJECT_NAME/README.md"
118 install -Dm644 README.md "$tempdir/usr/share/doc/$PROJECT_NAME/README.md"
@@ -164,7 +164,8 @@ Package: $dpkgname
164Version: $version
164Version: $version
165Section: utils
165Section: utils
166Priority: optional
166Priority: optional
167−Maintainer: David Peter <mail@david-peter.de>
167+Maintainer: $maintainer
168+Homepage: $homepage
168Architecture: $architecture
169Architecture: $architecture
169Provides: $PROJECT_NAME
170Provides: $PROJECT_NAME
170Conflicts: $conflictname
171Conflicts: $conflictname
doc/README-ja.md+6−6
@@ -13,7 +13,7 @@
13 <a href="#インストール">インストール</a> •
13 <a href="#インストール">インストール</a> •
14 <a href="#カスタマイズ">カスタマイズ</a> •
14 <a href="#カスタマイズ">カスタマイズ</a> •
15 <a href="#プロジェクトの目標と既存の類似したOSS">プロジェクトの目標と既存の類似したOSS</a> •
15 <a href="#プロジェクトの目標と既存の類似したOSS">プロジェクトの目標と既存の類似したOSS</a> •
16− 翻訳 [<a href="https://github.com/chinanf-boy/bat-zh">中文</a>][<a href="README-ja.md">日本語</a>]
16+ 翻訳 [<a href="https://github.com/chinanf-boy/bat-zh">中文</a>][<a href="README-ja.md">日本語</a>][<a href="README-ko.md">한국어</a>]
17</p>
17</p>
18
18
19### シンタックスハイライト
19### シンタックスハイライト
@@ -180,7 +180,7 @@ apt install bat
180batの最新リリースを実行する場合、または Ubuntu/Debian の古いバージョンを使用している場合は、[release page](https://github.com/sharkdp/bat/releases) から最新の `.deb` パッケージをダウンロードし、
180batの最新リリースを実行する場合、または Ubuntu/Debian の古いバージョンを使用している場合は、[release page](https://github.com/sharkdp/bat/releases) から最新の `.deb` パッケージをダウンロードし、
181次の方法でインストールします:
181次の方法でインストールします:
182```bash
182```bash
183−sudo dpkg -i bat_0.12.1_amd64.deb # adapt version number and architecture
183+sudo dpkg -i bat_0.13.0_amd64.deb # adapt version number and architecture
184```
184```
185
185
186### On Alpine Linux
186### On Alpine Linux
@@ -500,11 +500,11 @@ export BAT_CONFIG_PATH="/path/to/bat.conf"
500# Use italic text on the terminal (not supported on all terminals)
500# Use italic text on the terminal (not supported on all terminals)
501--italic-text=always
501--italic-text=always
502
502
503−# Use C++ syntax (instead of C) for .h header files
503+# Use C++ syntax for .ino files
504−--map-syntax h:cpp
504+--map-syntax "*.ino:C++"
505
505
506−# Use "gitignore" highlighting for ".ignore" files
506+# Use ".gitignore"-style highlighting for ".ignore" files
507−--map-syntax .ignore:.gitignore
507+--map-syntax ".ignore:Git Ignore"
508```
508```
509
509
510## Windows での `bat` の利用
510## Windows での `bat` の利用
doc/README-ko.mdnew file+560
@@ -0,0 +1,560 @@
1+<p align="center">
2+ <img src="../doc/logo-header.svg" alt="bat - a cat clone with wings"><br>
3+ <a href="https://travis-ci.org/sharkdp/bat"><img src="https://travis-ci.org/sharkdp/bat.svg?branch=master" alt="Build Status"></a>
4+ <a href="https://ci.appveyor.com/project/sharkdp/bat"><img src="https://ci.appveyor.com/api/projects/status/cptsmtbiwbnr2vhf/branch/master?svg=true"></a>
5+ <img src="https://img.shields.io/crates/l/bat.svg" alt="license">
6+ <a href="https://crates.io/crates/bat"><img src="https://img.shields.io/crates/v/bat.svg?colorB=319e8c" alt="Version info"></a><br>
7+
8+ 문법 강조와 깃 통합 기능의 <i>cat(1)</i> 클론
9+</p>
10+
11+<p align="center">
12+ <a href="#문법-강조">주요 기능들</a> •
13+ <a href="#사용법">사용법</a> •
14+ <a href="#설치">설치</a> •
15+ <a href="#커스터마이즈">커스터마이즈</a> •
16+ <a href="#프로젝트-목표와-대안들">프로젝트 목표와 대안들</a> •
17+ 번역 [<a href="https://github.com/chinanf-boy/bat-zh">中文</a>][<a href="../doc/README-ja.md">日本語</a>]
18+</p>
19+
20+### 문법 강조
21+
22+`bat`은 다양한 프로그래밍 언어와 마크업 언어에 대해 문법 강조(Syntax highlighting)기능을 지원하고 있습니다:
23+
24+![Syntax highlighting example](https://imgur.com/rGsdnDe.png)
25+
26+### Git 통합
27+
28+`bat`은 `git`을 통해 인덱스와 함께 변경분을 표시합니다 (왼쪽 바를 확인하세요):
29+
30+![Git integration example](https://i.imgur.com/2lSW4RE.png)
31+
32+### 표시할 수 없는 문자 처리
33+
34+`-A`/`--show-all` 옵션을 사용하여 표시할수 없는 문자를 시각화 해줍니다:
35+
36+![Non-printable character example](https://i.imgur.com/WndGp9H.png)
37+
38+### 자동 페이징
39+
40+하나의 화면에 비해 출력이 너무 큰 경우, `less` 를 이용해 출력들을 연결할 수 있습니다.
41+
42+### 파일 연결
43+
44+이 뿐만 아니라 파일을 연결할 때도 사용 할 수 있습니다. :wink: `bat`가 인터렉티브 하지 않은(non-interactive)가 감지하면 (예를 들어,다른 프로세스 혹은 파일과 파이프라인을 연결 한 경우) `bat`은 `cat`을 대신하여 동작하며 일반 파일 내용을 표기해줍니다.
45+
46+## 사용법
47+
48+터미널에서 하나의 파일 표시하기
49+
50+```bash
51+> bat README.md
52+```
53+
54+여러 파일 한번에 보여주기
55+
56+```bash
57+> bat src/*.rs
58+```
59+
60+stdin에서 읽고, 자동으로 맞는 문법 강조 적용하기
61+
62+```bash
63+> curl -s https://sh.rustup.rs | bat
64+```
65+
66+stdin에서 읽고, 명시적으로 언어 지정하여 적용하기
67+
68+```bash
69+> yaml2json .travis.yml | json_pp | bat -l json
70+```
71+
72+표시할 수 없는 문자 처리하기
73+```bash
74+> bat -A /etc/hosts
75+```
76+
77+`cat` 대신 사용하기:
78+
79+```bash
80+bat > note.md # quickly create a new file
81+
82+bat header.md content.md footer.md > document.md
83+
84+bat -n main.rs # show line numbers (only)
85+
86+bat f - g # output 'f', then stdin, then 'g'.
87+```
88+
89+### 다른 툴과의 통합
90+
91+#### `find` 와 `fd`
92+
93+`find`의 `-exec` 옵션을 사용하여 `bat`의 모든 검색 결과를 미리 볼 수 있습니다:
94+```bash
95+find … -exec bat {} +
96+```
97+
98+[`fd`](https://github.com/sharkdp/fd)를 사용하고 있는 경우, `-X`/`--exec-batch` 옵션을 이용하여 동일하게 사용할 수 있습니다:
99+```bash
100+fd … -X bat
101+```
102+
103+#### `ripgrep`
104+
105+[`batgrep`](https://github.com/eth-p/bat-extras/blob/master/doc/batgrep.md)과 함께, [`ripgrep`](https://github.com/BurntSushi/ripgrep)의 검색 결과를 `bat`을 이용하여 볼 수 있습니다.
106+
107+```bash
108+batgrep needle src/
109+```
110+
111+#### `tail -f`
112+
113+`bat` 과 `tail -f`를 함께 사용하여, 특정 파일을 문법 강조하며 지속적으로 모니터링 할 수 있습니다.
114+```bash
115+tail -f /var/log/pacman.log | bat --paging=never -l log
116+```
117+이 작업을 하려면 페이징 기능을 꺼야합니다. 또, 자동 감지가 되지 않기 때문에, 적용되어야할 문법을 명시적(`-l log`)으로 지정해야 합니다.
118+
119+#### `git`
120+
121+`bat`과 `git show`를 함께 사용하여 주어진 파일의 이전 기록을 문법 강조와 함께 볼 수 있습니다:
122+```bash
123+git show v0.6.0:src/main.rs | bat -l rs
124+```
125+
126+diffs 내에서 문법 강조 표시는 현재 지원되지 않습니다. 이 기능은 [`delta`](https://github.com/dandavison/delta)에서 찾아 볼 수 있습니다.
127+
128+#### `xclip`
129+
130+`bat` 출력에서 라인 넘버와 Git 수정 내역이 같이 있어 파일 내용을 복사하기가 어려울 수도 있습니다. 이 경우에는 `-p`/`--plain` 옵션을 사용 하거나 출력 시 파이프라인으로 `xclip`을 사용하면 됩니다:
131+```bash
132+bat main.cpp | xclip
133+```
134+`bat` 에서는 리다이렉트된 것으로 감지하여, 파일 내용만 출력합니다.
135+
136+#### `man`
137+
138+`bat`은 `MANPAGER` 환경 변수 설정을 통해 `man`에 대하여 컬러 페이져를 사용할 수 있습니다:
139+
140+```bash
141+export MANPAGER="sh -c 'col -bx | bat -l man -p'"
142+man 2 select
143+```
144+
145+포매팅 문제가 발생한다면, `MANROFFOPT="-c"` 설정 해야 할 수도 있습니다 .
146+
147+새 커맨드에서 이 번들을 사용하려면, [`batman`](https://github.com/eth-p/bat-extras/blob/master/doc/batman.md)을 이용 할 수 있습니다.
148+
149+
150+참고 : [Manpage syntax](../assets/syntaxes/Manpage.sublime-syntax)는 이 저장소에서 개발되고 있으며, 아직 작업 중 입니다.
151+
152+#### `prettier` / `shfmt` / `rustfmt`
153+
154+[`prettybat`](https://github.com/eth-p/bat-extras/blob/master/doc/prettybat.md) 스크립트는 코드를 포맷팅하고 `bat`으로 출력해주는 랩퍼(wrapper) 입니다.
155+
156+
157+## 설치
158+
159+[![Packaging status](https://repology.org/badge/vertical-allrepos/bat.svg)](https://repology.org/project/bat/versions)
160+
161+### On Ubuntu
162+*... 그리고 기타 Debian 기반의 Linux 배포판들.*
163+
164+Ubuntu Eoan 19.10 혹은 Debian unstable sid 이후 버전 부터는 [Ubuntu용 `bat` 패키지](https://packages.ubuntu.com/eoan/bat)나 [Debian용 `bat` 패키지](https://packages.debian.org/sid/bat) 를 설치 할 수 있습니다.
165+
166+```bash
167+apt install bat
168+```
169+
170+만약 최근 릴리즈된 bat을 사용을 원하거나 buntu/Debian 예전 버전을 사용하는 경우, [릴리즈 페이지](https://github.com/sharkdp/bat/releases)에서 다음과 같이 `.deb` 패키지를 받아 설치 할 수도 있습니다:
171+
172+```bash
173+sudo dpkg -i bat_0.13.0_amd64.deb # adapt version number and architecture
174+```
175+
176+### On Alpine Linux
177+
178+공식 소스를 통해 [`bat` 패키지](https://pkgs.alpinelinux.org/packages?name=bat) 를 설치 할 수 있습니다:
179+
180+```bash
181+apk add bat
182+```
183+
184+### On Arch Linux
185+
186+공식 소스를 통해 [`bat` 패키지](https://www.archlinux.org/packages/community/x86_64/bat/)를 설치할 수 있습니다:
187+
188+```bash
189+pacman -S bat
190+```
191+
192+### On Fedora
193+
194+[공식 Fedora 모듈 저장소](https://docs.fedoraproject.org/en-US/modularity/using-modules/)에서 [`bat` 패키지](https://koji.fedoraproject.org/koji/packageinfo?packageID=27506)을 설치할 수 있습니다:
195+
196+```bash
197+dnf install bat
198+```
199+
200+### On Gentoo Linux
201+
202+공식 소스를 통해 [`bat` 패키지](https://packages.gentoo.org/packages/sys-apps/bat)를 설치할 수 있습니다.
203+
204+```bash
205+emerge sys-apps/bat
206+```
207+
208+### On Void Linux
209+
210+xbps-install를 이용해 `bat`을 설치할 수 있습니다:
211+```bash
212+xbps-install -S bat
213+```
214+
215+### On FreeBSD
216+
217+pkg를 이용하여 미리 컴파일된 [`bat` 패키지](https://www.freshports.org/textproc/bat)를 설치할 수 있습니다:
218+
219+```bash
220+pkg install bat
221+```
222+
223+또는 FreeBSD 포트에서 직접 빌드할 수도 있습니다:
224+
225+```bash
226+cd /usr/ports/textproc/bat
227+make install
228+```
229+
230+### Via nix
231+
232+[nix package manager](https://nixos.org/nix)를 이용해 `bat`을 설치할 수 있습니다:
233+
234+```bash
235+nix-env -i bat
236+```
237+
238+### On openSUSE
239+
240+zypper을 이용해 `bat`을 설치할 수 있습니다:
241+
242+```bash
243+zypper install bat
244+```
245+
246+### On macOS
247+
248+[Homebrew](http://braumeister.org/formula/bat)를 이용해 `bat`을 설치할 수 있습니다:
249+
250+```bash
251+brew install bat
252+```
253+
254+또는 [MacPorts](https://ports.macports.org/port/bat/summary)를 사용할 수도 있습니다:
255+
256+```bash
257+port install bat
258+```
259+
260+### On Windows
261+
262+Windows에서 `bat`을 설치할 수 있는 몇 가지 옵션들이 있습니다. 먼저 `bat`을 설치 한 후, ["Windows에서 사용하기"](#Windows에서-사용하기) 참고하시기 바랍니다.
263+
264+#### With Chocolatey
265+
266+[Chocolatey](https://chocolatey.org/packages/Bat)를 이용해 `bat`을 설치할 수 있습니다:
267+```bash
268+choco install bat
269+```
270+
271+#### With Scoop
272+
273+[scoop](https://scoop.sh/)을 이용해 `bat`을 설치할 수 있습니다:
274+```bash
275+scoop install bat
276+```
277+[Visual C++ Redistributable 패키지](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads)를 같이 설치해 주어야 합니다.
278+
279+#### From prebuilt binaries:
280+
281+[릴리즈 페이지](https://github.com/sharkdp/bat/releases)에서 빌드된 바이너리를 다운받을 수 있습니다.
282+
283+[Visual C++ Redistributable 패키지](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads)를 같이 설치해 주어야 합니다.
284+
285+### Via Docker
286+
287+컨테이너에서 `bat`을 사용할 수 있는 [Docker image](https://hub.docker.com/r/danlynn/bat/)가 있습니다.:
288+```bash
289+docker pull danlynn/bat
290+alias bat='docker run -it --rm -e BAT_THEME -e BAT_STYLE -e BAT_TABS -v "$(pwd):/myapp" danlynn/bat'
291+```
292+
293+### Via Ansible
294+
295+[Ansible](https://www.ansible.com/)을 사용해 `bat`을 설치할 수 있습니다:
296+
297+```bash
298+# Install role on local machine
299+ansible-galaxy install aeimer.install_bat
300+```
301+
302+```yaml
303+---
304+# Playbook to install bat
305+- host: all
306+ roles:
307+ - aeimer.install_bat
308+```
309+
310+- [Ansible Galaxy](https://galaxy.ansible.com/aeimer/install_bat)
311+- [GitHub](https://github.com/aeimer/ansible-install-bat)
312+
313+다음 배포판들에서 동작합니다:
314+- Debian/Ubuntu
315+- ARM (eg. Raspberry PI)
316+- Arch Linux
317+- Void Linux
318+- FreeBSD
319+- MacOS
320+
321+### From binaries
322+
323+[릴리즈 페이지](https://github.com/sharkdp/bat/releases)에서 다양한 환경을 위해 빌드된 버전들을 확인 할 수 있습니다. 정적 링크 바이너리들은 아카이브에서 파일 이름에 `musl` 이 포함 파일로 확인 할 수 있습니다.
324+
325+### From source
326+
327+`bat`의 소스를 직접 빌드하기 위해서는, Rust 1.36 이상이 필요하며 `cargo`를 이용해 빌드할 수 있습니다.
328+
329+```bash
330+cargo install bat
331+```
332+
333+일부 플랫폼에서는 `llvm` 그리고/또는 `libclang-dev` 설치가 필요할 수도 있습니다.
334+
335+## 커스터마이즈
336+
337+### 문법 강조 테마
338+
339+`bat --list-themes`을 사용하면, 현재 사용 가능한 문법 강조 테마들을 확인할 수 있습니다. `TwoDark` 테마 선택하는 경우, `--theme=TwoDark` 옵션과 함께 `bat`을 사용하거나 환경변수에서 `BAT_THEME`를 `TwoDark`로 세팅해주면 됩니다. 쉘 시작 파일에 `export BAT_THEME="TwoDark"` 를 정의해 계속 사용도 가능합니다. 이 밖에 `bat`의 [설정 파일](#설정-파일)을 이용할 수도 있습니다.
340+
341+다른 테마를 미리 보고 싶은경우 다음 명령어와 같이 사용할 수 있습니다.(이 경우 [`fzf`](https://github.com/junegunn/fzf)가 필요합니다.)
342+
343+```bash
344+bat --list-themes | fzf --preview="bat --theme={} --color=always /path/to/file"
345+```
346+`bat`의 기본 테마는 어두운 배경색 터미널에 적합합니다. 만일 밝은 배경색을 사용할 경우에는 `GitHub` 이나 `OneHalfLight` 과 같은 테마가 더 잘 어울립니다. 아래 [새로운 테마 추가하기](#새로운-테마-추가하기)에 따라 커스텀 테마를 사용할수도 있습니다.
347+
348+### 출력 스타일
349+
350+`--style` 옵션을 이용하여 `bat`의 출력 스타일을 변경 할 수 있습니다. 예를 들어, `--style=numbers,changes`는 Git 변경분과 라인 넘버에 대해서만 출력하며 눈금과 파일 헤더가 표시되지 않습니다. `BAT_STYLE` 환경 변수로 정의하여 계속해서 사용하거나`bat`의 [설정 파일](#설정-파일)을 사용할 수도 있습니다.
351+
352+### 새로운 문법 강조 / 언어 추가하기
353+
354+`bat`은 문법 강조를 위해 [`syntect`](https://github.com/trishume/syntect/) 라이브러리를 사용하고 있습니다. `syntect`는 [Sublime Text의 `.sublime-syntax` 파일](https://www.sublimetext.com/docs/3/syntax.html)과 테마를 읽을 수 있습니다. 새로운 문법 강조를 추가하는 방법은 다음과 같습니다.
355+
356+우선 문법 정의 파일을 넣을 폴더를 만듭니다:
357+
358+```bash
359+mkdir -p "$(bat --config-dir)/syntaxes"
360+cd "$(bat --config-dir)/syntaxes"
361+
362+# Put new '.sublime-syntax' language definition files
363+# in this folder (or its subdirectories), for example:
364+git clone https://github.com/tellnobody1/sublime-purescript-syntax
365+```
366+
367+다음 명령어를 통해 파일을 바이너리 캐시로 파싱합니다.
368+
369+```bash
370+bat cache --build
371+```
372+
373+마지막으로 `bat --list-languages`을 통해 새로운 언어가 사용 가능한지 확인합니다.
374+
375+기본 설정으로 돌아가려면, 다음 명령어를 이용합니다.:
376+
377+```bash
378+bat cache --clear
379+```
380+
381+### 새로운 테마 추가하기
382+
383+새로운 문법 정의 추가와 매우 유사합니다.
384+
385+먼저, 새로운 문법 강조 테마 폴더를 만듭니다.
386+```bash
387+mkdir -p "$(bat --config-dir)/themes"
388+cd "$(bat --config-dir)/themes"
389+
390+# Download a theme in '.tmTheme' format, for example:
391+git clone https://github.com/greggb/sublime-snazzy
392+
393+# Update the binary cache
394+bat cache --build
395+```
396+
397+마지막으로 `bat --list-themes`을 통해 새로운 테마가 사용 가능한지 확인합니다.
398+
399+### 다른 페이져 사용하기
400+
401+`bat`은 환경변수 `PAGER`로 사용할 페이져를 명시합니다. 만약 이 변수가 정의되어있지 않다면 `less`가 기본입니다. 만약 다른 페이져를 사용하고 싶다면 `PAGER` 변수를 수정하거나 `BAT_PAGER` 환경 변수로 `PAGER` 대신 정의 할 수도 있습니다.
402+
403+만약 커맨드라인 인수로 넘기려면, `PAGER`/`BAT_PAGER` 변수를 정의를 통해 사용 할 수 있습니다. :
404+
405+```bash
406+export BAT_PAGER="less -RF"
407+```
408+
409+환경 변수 대신, `bat`의 [설정 파일](#설정-파일)에서 페이져를 설정 할 수도 있습니다.(`--pager` 옵션)
410+
411+**참고**: 기본적으로 페이져가 `less`로 설정 되어있다면, `bat`은 다음 옵션들을 받을 수 있습니다: `-R`/`--RAW-CONTROL-CHARS`,
412+`-F`/`--quit-if-one-screen` 그리고 `-X`/`--no-init`. 마지막 옵션(`-X`)은 530 이전 버전에서만 사용됩니다.
413+
414+`-R` 옵션은 ANSI 컬러를 올바르게 해석하기 위해 필요합니다. 두번째 옵션 (`-F`)은 출력 크기가 터미널의 세로 크기보다 작을 경우 즉시 종료되도록 합니다.
415+페이져를 종료하기 위해 `q`를 누를 필요 없기 때문에 작은 파일을 다룰 때 용이합니다. 세번째 옵션(`-X`)는 `less` 이전 버전의 `--quit-if-one-screen` 기능과 함께 버그를 잡을 때 필요합니다. 안타깝게도, `less`의 마우스 휠 지원은 종료합니다.
416+
417+`less` 예전 버전에서 마우스 휠 기능을 활성화 시키려면, `-R` 옵션을 사용하면 됩니다. (위의 예제처럼, 이 옵션은 quit-if-one-screen 기능을 비활성화 시킵니다.)
418+530 이하 버전에서는 그대로 사용할 수 있습니다.
419+
420+### 다크 모드
421+
422+macOS에서 다크 모드를 사용하고 있다면, OS 테마에 따라 다른 테마를 사용하도록 `bat`의 구성할 수 있습니다. 아래 코드는 라이트 모드에서는 `default` 테마를 다크모드에서는 `Github` 테마를 사용하는 방법입니다.
423+
424+```bash
425+alias cat="bat --theme=\$(defaults read -globalDomain AppleInterfaceStyle &> /dev/null && echo default || echo GitHub)"
426+```
427+
428+## 설정 파일
429+
430+`bat` 설정 파일로 커스터마이즈 할 수 있습니다. 파일의 위치는 운영 체제에 따라 다릅니다. 아래 커맨드를 통해 시스템의 기본 경로를 알 수 있습니다.
431+```
432+bat --config-file
433+```
434+
435+또는, `BAT_CONFIG_PATH` 환경 변수를 사용하여 `bat`의 설정 파일 위치를 지정할 수 있습니다.
436+```bash
437+export BAT_CONFIG_PATH="/path/to/bat.conf"
438+```
439+
440+### 포맷
441+
442+설정 파일은 명령어 인수들의 리스트 입니다. `bat --help`를 이용하여 가능한 옵션들과 값들을 확인해 볼 수 있습니다. 또, `#` 으로 주석을 추가할수도 있습니다.
443+
444+설정 파일의 예:
445+```bash
446+# Set the theme to "TwoDark"
447+--theme="TwoDark"
448+
449+# Show line numbers, Git modifications and file header (but no grid)
450+--style="numbers,changes,header"
451+
452+# Use italic text on the terminal (not supported on all terminals)
453+--italic-text=always
454+
455+# Use C++ syntax for .ino files
456+--map-syntax "*.ino:C++"
457+
458+# Use ".gitignore"-style highlighting for ".ignore" files
459+--map-syntax ".ignore:Git Ignore"
460+```
461+
462+## Windows에서 사용하기
463+
464+`bat` 대부분의 경우 Windows에서 기본적으로 잘 작동하지만, 일부 기능에는 추가 적인 구성이 필요할 수 있습니다.
465+
466+### 페이징
467+
468+Windows는 `more` 형식의 매우 제한된 페이저만이 포함되어있습니다. `less`용 Windows 바이너리는 [이 홈페이지](http://www.greenwoodsoftware.com/less/download.html)나 [Chocolatey](https://chocolatey.org/packages/Less)에서 다운로드 받을 수 있습니다. 이를 사용하려면 바이너리를 `PATH` 디렉토리에 배치하거나 [환경 변수로 정의](#using-a-different-pager) 하세요. [Chocolatey 패키지](#on-windows)로 `less`를 자동으로 설치할 수 있습니다.
469+
470+### 색상
471+
472+Windows 10은 기본 내장기능으로 [v1511](https://en.wikipedia.org/wiki/Windows_10_version_history#Version_1511_(November_Update)) 이후의 `conhost.exe`(Command Prompt) 와 PowerShell, 그리고 최신 버전의 bash에서 색상을 지원합니다. 이전 버전의 Windows에서는, [ConEmu](https://conemu.github.io/)가 포함 된 [Cmder](http://cmder.net/)를 사용할 수 있습니다 .
473+
474+**참고:** `less`의 Git과 MSYS 버전은 Windows에서 색상을 올바르게 해석하지 않습니다. 다른 페이져가 설치되어 있지 않은 경우, `--paging=never` 하거나 `BAT_PAGER`를 빈 문자열로 설정하여 페이징을 완전히 비활성화 할 수 있습니다 .
475+
476+### Cygwin
477+
478+Windows에서의 `bat`은 기본적으로 Cygwin의 unix 스타일의 경로(`/cygdrive/*`)를 지원하지 않습니다. cygwin 절대경로를 인자로 받았을 때, `bat`은 다음과 같이 오류를 반환합니다. `:The system cannot find the path specified. (os error 3)`
479+
480+이 경우, wrapper를 만들거나 다음 함수를 `.bash_profile`추가하여 문제를 해결하실 수 있습니다 :
481+
482+```bash
483+bat() {
484+ local index
485+ local args=("$@")
486+ for index in $(seq 0 ${#args[@]}) ; do
487+ case "${args[index]}" in
488+ -*) continue;;
489+ *) [ -e "${args[index]}" ] && args[index]="$(cygpath --windows "${args[index]}")";;
490+ esac
491+ done
492+ command bat "${args[@]}"
493+}
494+```
495+
496+## 트러블슈팅
497+
498+### 터미널과 색상
499+
500+`bat`은 터미널 트루컬러 지원 여부와 상관없이 동작합니다. 하지만, 문법 강조 테마의 색상이 8-bit 컬러에는 최적화 되어 있지 않고 있으며, 24-bit 트루컬러 지원하는 터미널 사용하는 것을 적극 권장합니다.(`terminator`, `konsole`, `iTerm2`, ...). [이 글](https://gist.github.com/XVilka/8346728)에서 24-bit 트루컬러 지원하는 터미널들을 찾아보실 수 있습니다.
501+
502+사용하고 있는 터미널에서 `COLORTERM`을 `truecolor` 혹은
503+`24bit`으로 설정 되어있는지 확인하세요. 만약 아니라면, `bat`은 24-bit escape sequence를 지원되는지 여부를 판단 할 수 없습니다. (그리고 8-bit 색상으로 돌아갑니다.)
504+
505+### 라인 숫자와 눈금이 잘 보이지 않는 경우
506+
507+다른 테마를 사용해 보세요. (`bat --list-themes`에서 테마들을 확인해 볼 수 있습니다.) `OneHalfDark` 과 `OneHalfLight` 테마는 눈금과 선의 색을 밝게 합니다.
508+
509+### 파일 인코딩
510+
511+`bat`은 기본적으로 UTF-8과 UTF-8을 제공합니다. 다른 파일 인코딩의 경우, 자동 감지 되지 않으므로 UTF-8로 먼저 변환해 주어야 합니다. 이렇게 할 때, `iconv`를 사용 할 수 있습니다. 예를 들어, Latin-1 (ISO-8859-1)로 인코딩된 PHP파일이라면 다음과 같이 사용할 수 있습니다.:
512+``` bash
513+iconv -f ISO-8859-1 -t UTF-8 my-file.php | bat
514+```
515+참고: `bat`으로 자동 감지가 되지 않는 경우에는 `-l`/`--language` 옵션을 사용할 수도 있습니다.
516+
517+## 배포
518+
519+```bash
520+# Recursive clone to retrieve all submodules
521+git clone --recursive https://github.com/sharkdp/bat
522+
523+# Build (debug version)
524+cd bat
525+cargo build --bins
526+
527+# Run unit tests and integration tests
528+cargo test
529+
530+# Install (release version)
531+cargo install
532+
533+# Build a bat binary with modified syntaxes and themes
534+bash assets/create.sh
535+cargo install -f
536+```
537+
538+## 메인테이너들
539+
540+- [sharkdp](https://github.com/sharkdp)
541+- [eth-p](https://github.com/eth-p)
542+
543+## 프로젝트 목표와 대안들
544+
545+`bat`은 아래와 같은 목표를 달성하려고 합니다:
546+
547+- 아름답고 발전된 문법 강조 기능
548+- Git 연동을 통한 파일 수정 내역 확인
549+- (POSIX)`cat`의 대체제
550+- 사용자 친화적인 CLI 제공
551+
552+
553+비슷한 프로그램들을 찾고 있다면, 많은 대안들이 있습니다. 비교는 [이 문서]((doc/alternatives.md))를 참조해주세요.
554+
555+## 라이센스
556+Copyright (c) 2018-2020 [bat-developers](https://github.com/sharkdp/bat).
557+
558+`bat`는 MIT 라이센스 및 Apache 라이센스 2.0의 조건에 따라 배포됩니다.
559+
560+라이센스 세부사항은 [LICENSE-APACHE](LICENSE-APACHE)와 [LICENSE-MIT](LICENSE-MIT)를 참조하세요.
examples/cat.rsnew file+33
@@ -0,0 +1,33 @@
1+/// A very simple colorized `cat` clone, using `bat` as a library.
2+/// See `src/bin/bat` for the full `bat` application.
3+use bat::{
4+ config::{Config, InputFile, StyleComponent, StyleComponents},
5+ Controller, HighlightingAssets,
6+};
7+use console::Term;
8+use std::process;
9+
10+fn main() {
11+ let files = std::env::args_os().skip(1).collect::<Vec<_>>();
12+
13+ if files.is_empty() {
14+ eprintln!("No input files specified");
15+ process::exit(1);
16+ }
17+
18+ let config = Config {
19+ term_width: Term::stdout().size().1 as usize,
20+ colored_output: true,
21+ true_color: true,
22+ style_components: StyleComponents::new(&[
23+ StyleComponent::Header,
24+ StyleComponent::Grid,
25+ StyleComponent::Numbers,
26+ ]),
27+ files: files.iter().map(|file| InputFile::Ordinary(file)).collect(),
28+ ..Default::default()
29+ };
30+ let assets = HighlightingAssets::from_binary();
31+
32+ Controller::new(&config, &assets).run().expect("no errors");
33+}
examples/simple.rs+7−22
@@ -1,35 +1,20 @@
1+/// A simple program that prints its own source code using the bat library
1use bat::{
2use bat::{
2− assets::HighlightingAssets,
3− controller::Controller,
4− inputfile::InputFile,
3+ config::{Config, InputFile},
5− style::{OutputComponent, OutputComponents},
4+ Controller, HighlightingAssets,
6− Config,
7};
5};
8−use console::Term;
6+use std::ffi::OsStr;
9−use std::process;
10
7
11fn main() {
8fn main() {
12− let files = std::env::args_os().skip(1).collect::<Vec<_>>();
9+ let path_to_this_file = OsStr::new(file!());
13−
14− if files.is_empty() {
15− eprintln!("No input files specified");
16− process::exit(1);
17− }
18
10
19 let config = Config {
11 let config = Config {
20− term_width: Term::stdout().size().1 as usize,
12+ files: vec![InputFile::Ordinary(path_to_this_file)],
21 colored_output: true,
13 colored_output: true,
22 true_color: true,
14 true_color: true,
23− output_components: OutputComponents::new(&[
24− OutputComponent::Header,
25− OutputComponent::Grid,
26− OutputComponent::Numbers,
27− ]),
28− files: files.iter().map(|file| InputFile::Ordinary(file)).collect(),
29− theme: "1337".into(),
30 ..Default::default()
15 ..Default::default()
31 };
16 };
32− let assets = HighlightingAssets::new();
17+ let assets = HighlightingAssets::from_binary();
33
18
34 Controller::new(&config, &assets).run().expect("no errors");
19 Controller::new(&config, &assets).run().expect("no errors");
35}
20}
src/assets.rs+169−65
@@ -1,41 +1,35 @@
1−use std::borrow::Cow;
2use std::collections::BTreeMap;
1use std::collections::BTreeMap;
3use std::fs::{self, File};
2use std::fs::{self, File};
4use std::io::BufReader;
3use std::io::BufReader;
5−use std::path::{Path, PathBuf};
4+use std::path::Path;
6
5
7use syntect::dumps::{dump_to_file, from_binary, from_reader};
6use syntect::dumps::{dump_to_file, from_binary, from_reader};
8use syntect::highlighting::{Theme, ThemeSet};
7use syntect::highlighting::{Theme, ThemeSet};
9use syntect::parsing::{SyntaxReference, SyntaxSet, SyntaxSetBuilder};
8use syntect::parsing::{SyntaxReference, SyntaxSet, SyntaxSetBuilder};
10
9
11−use crate::dirs::PROJECT_DIRS;
12−
13use crate::errors::*;
10use crate::errors::*;
14use crate::inputfile::{InputFile, InputFileReader};
11use crate::inputfile::{InputFile, InputFileReader};
15−use crate::syntax_mapping::SyntaxMapping;
12+use crate::syntax_mapping::{MappingTarget, SyntaxMapping};
16−
17−pub const BAT_THEME_DEFAULT: &str = "Monokai Extended";
18
13
19#[derive(Debug)]
14#[derive(Debug)]
20pub struct HighlightingAssets {
15pub struct HighlightingAssets {
21− pub syntax_set: SyntaxSet,
16+ pub(crate) syntax_set: SyntaxSet,
22− pub theme_set: ThemeSet,
17+ pub(crate) theme_set: ThemeSet,
18+ fallback_theme: Option<&'static str>,
23}
19}
24
20
25impl HighlightingAssets {
21impl HighlightingAssets {
26− pub fn new() -> Self {
22+ pub fn default_theme() -> &'static str {
27− Self::from_cache().unwrap_or_else(|_| Self::from_binary())
23+ "Monokai Extended"
28 }
24 }
29
25
30− pub fn from_files(dir: Option<&Path>, start_empty: bool) -> Result<Self> {
26+ pub fn from_files(source_dir: &Path, include_integrated_assets: bool) -> Result<Self> {
31− let source_dir = dir.unwrap_or_else(|| PROJECT_DIRS.config_dir());
32−
33− let mut theme_set = if start_empty {
27+ let mut theme_set = if include_integrated_assets {
28+ Self::get_integrated_themeset()
29+ } else {
34 ThemeSet {
30 ThemeSet {
35 themes: BTreeMap::new(),
31 themes: BTreeMap::new(),
36 }
32 }
37− } else {
38− Self::get_integrated_themeset()
39 };
33 };
40
34
41 let theme_dir = source_dir.join("themes");
35 let theme_dir = source_dir.join("themes");
@@ -48,7 +42,7 @@ impl HighlightingAssets {
48 );
42 );
49 }
43 }
50
44
51− let mut syntax_set_builder = if start_empty {
45+ let mut syntax_set_builder = if !include_integrated_assets {
52 let mut builder = SyntaxSetBuilder::new();
46 let mut builder = SyntaxSetBuilder::new();
53 builder.add_plain_text_syntax();
47 builder.add_plain_text_syntax();
54 builder
48 builder
@@ -69,15 +63,15 @@ impl HighlightingAssets {
69 Ok(HighlightingAssets {
63 Ok(HighlightingAssets {
70 syntax_set: syntax_set_builder.build(),
64 syntax_set: syntax_set_builder.build(),
71 theme_set,
65 theme_set,
66+ fallback_theme: None,
72 })
67 })
73 }
68 }
74
69
75− fn from_cache() -> Result<Self> {
70+ pub fn from_cache(theme_set_path: &Path, syntax_set_path: &Path) -> Result<Self> {
76− let theme_set_path = theme_set_path();
77− let syntax_set_file = File::open(&syntax_set_path()).chain_err(|| {
71+ let syntax_set_file = File::open(syntax_set_path).chain_err(|| {
78 format!(
72 format!(
79 "Could not load cached syntax set '{}'",
73 "Could not load cached syntax set '{}'",
80− syntax_set_path().to_string_lossy()
74+ syntax_set_path.to_string_lossy()
81 )
75 )
82 })?;
76 })?;
83 let syntax_set: SyntaxSet = from_reader(BufReader::new(syntax_set_file))
77 let syntax_set: SyntaxSet = from_reader(BufReader::new(syntax_set_file))
@@ -95,6 +89,7 @@ impl HighlightingAssets {
95 Ok(HighlightingAssets {
89 Ok(HighlightingAssets {
96 syntax_set,
90 syntax_set,
97 theme_set,
91 theme_set,
92+ fallback_theme: None,
98 })
93 })
99 }
94 }
100
95
@@ -106,18 +101,18 @@ impl HighlightingAssets {
106 from_binary(include_bytes!("../assets/themes.bin"))
101 from_binary(include_bytes!("../assets/themes.bin"))
107 }
102 }
108
103
109− fn from_binary() -> Self {
104+ pub fn from_binary() -> Self {
110 let syntax_set = Self::get_integrated_syntaxset();
105 let syntax_set = Self::get_integrated_syntaxset();
111 let theme_set = Self::get_integrated_themeset();
106 let theme_set = Self::get_integrated_themeset();
112
107
113 HighlightingAssets {
108 HighlightingAssets {
114 syntax_set,
109 syntax_set,
115 theme_set,
110 theme_set,
111+ fallback_theme: None,
116 }
112 }
117 }
113 }
118
114
119− pub fn save(&self, dir: Option<&Path>) -> Result<()> {
115+ pub fn save_to_cache(&self, target_dir: &Path) -> Result<()> {
120− let target_dir = dir.unwrap_or_else(|| PROJECT_DIRS.cache_dir());
121 let _ = fs::create_dir_all(target_dir);
116 let _ = fs::create_dir_all(target_dir);
122 let theme_set_path = target_dir.join("themes.bin");
117 let theme_set_path = target_dir.join("themes.bin");
123 let syntax_set_path = target_dir.join("syntaxes.bin");
118 let syntax_set_path = target_dir.join("syntaxes.bin");
@@ -149,22 +144,36 @@ impl HighlightingAssets {
149 Ok(())
144 Ok(())
150 }
145 }
151
146
147+ pub fn set_fallback_theme(&mut self, theme: &'static str) {
148+ self.fallback_theme = Some(theme);
149+ }
150+
151+ pub fn syntaxes(&self) -> &[SyntaxReference] {
152+ self.syntax_set.syntaxes()
153+ }
154+
155+ pub fn themes(&self) -> impl Iterator<Item = &String> {
156+ self.theme_set.themes.keys()
157+ }
158+
152− pub fn get_theme(&self, theme: &str) -> &Theme {
159+ pub(crate) fn get_theme(&self, theme: &str) -> &Theme {
153 match self.theme_set.themes.get(theme) {
160 match self.theme_set.themes.get(theme) {
154 Some(theme) => theme,
161 Some(theme) => theme,
155 None => {
162 None => {
163+ if theme != "" {
156− use ansi_term::Colour::Yellow;
164+ use ansi_term::Colour::Yellow;
157− eprintln!(
165+ eprintln!(
158− "{}: Unknown theme '{}', using default.",
166+ "{}: Unknown theme '{}', using default.",
159− Yellow.paint("[bat warning]"),
167+ Yellow.paint("[bat warning]"),
160− theme
168+ theme
161− );
169+ );
162− &self.theme_set.themes[BAT_THEME_DEFAULT]
170+ }
171+ &self.theme_set.themes[self.fallback_theme.unwrap_or(Self::default_theme())]
163 }
172 }
164 }
173 }
165 }
174 }
166
175
167− pub fn get_syntax(
176+ pub(crate) fn get_syntax(
168 &self,
177 &self,
169 language: Option<&str>,
178 language: Option<&str>,
170 filename: InputFile,
179 filename: InputFile,
@@ -175,25 +184,28 @@ impl HighlightingAssets {
175 (Some(language), _) => self.syntax_set.find_syntax_by_token(language),
184 (Some(language), _) => self.syntax_set.find_syntax_by_token(language),
176 (None, InputFile::Ordinary(filename)) => {
185 (None, InputFile::Ordinary(filename)) => {
177 let path = Path::new(filename);
186 let path = Path::new(filename);
187+
178 let file_name = path.file_name().and_then(|n| n.to_str()).unwrap_or("");
188 let file_name = path.file_name().and_then(|n| n.to_str()).unwrap_or("");
179 let extension = path.extension().and_then(|x| x.to_str()).unwrap_or("");
189 let extension = path.extension().and_then(|x| x.to_str()).unwrap_or("");
180
190
181− let file_name = mapping.replace(file_name);
182− let extension = mapping.replace(extension);
183−
184 let ext_syntax = self
191 let ext_syntax = self
185 .syntax_set
192 .syntax_set
186 .find_syntax_by_extension(&file_name)
193 .find_syntax_by_extension(&file_name)
187 .or_else(|| self.syntax_set.find_syntax_by_extension(&extension));
194 .or_else(|| self.syntax_set.find_syntax_by_extension(&extension));
188− let line_syntax = if ext_syntax.is_none() {
189− String::from_utf8(reader.first_line.clone())
195+ let line_syntax = String::from_utf8(reader.first_line.clone())
190− .ok()
196+ .ok()
191− .and_then(|l| self.syntax_set.find_syntax_by_first_line(&l))
197+ .and_then(|l| self.syntax_set.find_syntax_by_first_line(&l));
192− } else {
198+
193− None
199+ let absolute_path = path.canonicalize().ok().unwrap_or(path.to_owned());
194− };
200+ match mapping.get_syntax_for(absolute_path) {
195−
201+ Some(MappingTarget::MapTo(syntax_name)) => {
202+ // TODO: we should probably return an error here if this syntax can not be
203+ // found. Currently, we just fall back to 'plain'.
204+ self.syntax_set.find_syntax_by_name(syntax_name)
205+ }
206+ Some(MappingTarget::MapToUnknown) => line_syntax,
196− ext_syntax.or(line_syntax)
207+ None => ext_syntax.or(line_syntax),
208+ }
197 }
209 }
198 (None, InputFile::StdIn) => String::from_utf8(reader.first_line.clone())
210 (None, InputFile::StdIn) => String::from_utf8(reader.first_line.clone())
199 .ok()
211 .ok()
@@ -205,28 +217,120 @@ impl HighlightingAssets {
205 }
217 }
206}
218}
207
219
208−fn theme_set_path() -> PathBuf {
220+#[cfg(test)]
209− PROJECT_DIRS.cache_dir().join("themes.bin")
221+mod tests {
210−}
222+ use std::ffi::OsStr;
223+ use std::fs::File;
224+ use std::io;
225+ use std::io::Write;
211
226
212−fn syntax_set_path() -> PathBuf {
227+ use tempdir::TempDir;
213− PROJECT_DIRS.cache_dir().join("syntaxes.bin")
214−}
215
228
216−pub fn config_dir() -> Cow<'static, str> {
229+ use crate::assets::HighlightingAssets;
217− PROJECT_DIRS.config_dir().to_string_lossy()
230+ use crate::inputfile::InputFile;
218−}
231+ use crate::syntax_mapping::{MappingTarget, SyntaxMapping};
219
232
220−pub fn cache_dir() -> Cow<'static, str> {
233+ struct SyntaxDetectionTest<'a> {
221− PROJECT_DIRS.cache_dir().to_string_lossy()
234+ assets: HighlightingAssets,
235+ pub syntax_mapping: SyntaxMapping<'a>,
236+ temp_dir: TempDir,
237+ }
238+
239+ impl<'a> SyntaxDetectionTest<'a> {
240+ fn new() -> Self {
241+ SyntaxDetectionTest {
242+ assets: HighlightingAssets::from_binary(),
243+ syntax_mapping: SyntaxMapping::builtin(),
244+ temp_dir: TempDir::new("bat_syntax_detection_tests")
245+ .expect("creation of temporary directory"),
246+ }
247+ }
248+
249+ fn synax_for_file_with_content(&self, file_name: &str, first_line: &str) -> String {
250+ let file_path = self.temp_dir.path().join(file_name);
251+ {
252+ let mut temp_file = File::create(&file_path).unwrap();
253+ writeln!(temp_file, "{}", first_line).unwrap();
222−}
254+ }
255+
256+ let input_file = InputFile::Ordinary(OsStr::new(&file_path));
257+ let syntax = self.assets.get_syntax(
258+ None,
259+ input_file,
260+ &mut input_file.get_reader(&io::stdin()).unwrap(),
261+ &self.syntax_mapping,
262+ );
223
263
224−pub fn clear_assets() {
264+ syntax.name.clone()
225− print!("Clearing theme set cache ... ");
265+ }
226− fs::remove_file(theme_set_path()).ok();
266+
227− println!("okay");
267+ fn syntax_for_file(&self, file_name: &str) -> String {
268+ self.synax_for_file_with_content(file_name, "")
269+ }
270+ }
228
271
229− print!("Clearing syntax set cache ... ");
272+ #[test]
230− fs::remove_file(syntax_set_path()).ok();
273+ fn syntax_detection_basic() {
231− println!("okay");
274+ let test = SyntaxDetectionTest::new();
275+
276+ assert_eq!(test.syntax_for_file("test.rs"), "Rust");
277+ assert_eq!(test.syntax_for_file("test.cpp"), "C++");
278+ assert_eq!(test.syntax_for_file("test.build"), "NAnt Build File");
279+ assert_eq!(
280+ test.syntax_for_file("PKGBUILD"),
281+ "Bourne Again Shell (bash)"
282+ );
283+ assert_eq!(test.syntax_for_file(".bashrc"), "Bourne Again Shell (bash)");
284+ assert_eq!(test.syntax_for_file("Makefile"), "Makefile");
285+ }
286+
287+ #[test]
288+ fn syntax_detection_well_defined_mapping_for_duplicate_extensions() {
289+ let test = SyntaxDetectionTest::new();
290+
291+ assert_eq!(test.syntax_for_file("test.h"), "C++");
292+ assert_eq!(test.syntax_for_file("test.sass"), "Sass");
293+ assert_eq!(test.syntax_for_file("test.hs"), "Haskell (improved)");
294+ assert_eq!(test.syntax_for_file("test.js"), "JavaScript (Babel)");
295+ }
296+
297+ #[test]
298+ fn syntax_detection_first_line() {
299+ let test = SyntaxDetectionTest::new();
300+
301+ assert_eq!(
302+ test.synax_for_file_with_content("my_script", "#!/bin/bash"),
303+ "Bourne Again Shell (bash)"
304+ );
305+ assert_eq!(
306+ test.synax_for_file_with_content("build", "#!/bin/bash"),
307+ "Bourne Again Shell (bash)"
308+ );
309+ assert_eq!(
310+ test.synax_for_file_with_content("my_script", "<?php"),
311+ "PHP"
312+ );
313+ }
314+
315+ #[test]
316+ fn syntax_detection_with_custom_mapping() {
317+ let mut test = SyntaxDetectionTest::new();
318+
319+ assert_eq!(test.syntax_for_file("test.h"), "C++");
320+ test.syntax_mapping
321+ .insert("*.h", MappingTarget::MapTo("C"))
322+ .ok();
323+ assert_eq!(test.syntax_for_file("test.h"), "C");
324+ }
325+
326+ #[test]
327+ fn syntax_detection_is_case_sensitive() {
328+ let mut test = SyntaxDetectionTest::new();
329+
330+ assert_ne!(test.syntax_for_file("README.MD"), "Markdown");
331+ test.syntax_mapping
332+ .insert("*.MD", MappingTarget::MapTo("Markdown"))
333+ .ok();
334+ assert_eq!(test.syntax_for_file("README.MD"), "Markdown");
335+ }
232}
336}
src/bin/bat/app.rs+38−38
@@ -17,13 +17,12 @@ use console::Term;
17use ansi_term;
17use ansi_term;
18
18
19use bat::{
19use bat::{
20− assets::BAT_THEME_DEFAULT,
20+ config::{
21+ Config, HighlightedLineRanges, InputFile, LineRange, LineRanges, MappingTarget, OutputWrap,
22+ PagingMode, StyleComponent, StyleComponents, SyntaxMapping,
23+ },
21 errors::*,
24 errors::*,
22− inputfile::InputFile,
25+ HighlightingAssets,
23− line_range::{LineRange, LineRanges},
24− style::{OutputComponent, OutputComponents, OutputWrap},
25− syntax_mapping::SyntaxMapping,
26− Config, PagingMode,
27};
26};
28
27
29fn is_truecolor_terminal() -> bool {
28fn is_truecolor_terminal() -> bool {
@@ -79,7 +78,7 @@ impl App {
79
78
80 pub fn config(&self) -> Result<Config> {
79 pub fn config(&self) -> Result<Config> {
81 let files = self.files();
80 let files = self.files();
82− let output_components = self.output_components()?;
81+ let style_components = self.style_components()?;
83
82
84 let paging_mode = match self.matches.value_of("paging") {
83 let paging_mode = match self.matches.value_of("paging") {
85 Some("always") => PagingMode::Always,
84 Some("always") => PagingMode::Always,
@@ -105,17 +104,17 @@ impl App {
105 }
104 }
106 };
105 };
107
106
108− let mut syntax_mapping = SyntaxMapping::new();
107+ let mut syntax_mapping = SyntaxMapping::builtin();
109
108
110 if let Some(values) = self.matches.values_of("map-syntax") {
109 if let Some(values) = self.matches.values_of("map-syntax") {
111 for from_to in values {
110 for from_to in values {
112 let parts: Vec<_> = from_to.split(':').collect();
111 let parts: Vec<_> = from_to.split(':').collect();
113
112
114 if parts.len() != 2 {
113 if parts.len() != 2 {
115− return Err("Invalid syntax mapping. The format of the -m/--map-syntax option is 'from:to'.".into());
114+ return Err("Invalid syntax mapping. The format of the -m/--map-syntax option is '<glob-pattern>:<syntax-name>'. For example: '*.cpp:C++'.".into());
116 }
115 }
117
116
118− syntax_mapping.insert(parts[0], parts[1]);
117+ syntax_mapping.insert(parts[0], MappingTarget::MapTo(parts[1]))?;
119 }
118 }
120 }
119 }
121
120
@@ -158,7 +157,7 @@ impl App {
158 Some("character") => OutputWrap::Character,
157 Some("character") => OutputWrap::Character,
159 Some("never") => OutputWrap::None,
158 Some("never") => OutputWrap::None,
160 Some("auto") | _ => {
159 Some("auto") | _ => {
161− if output_components.plain() {
160+ if style_components.plain() {
162 OutputWrap::None
161 OutputWrap::None
163 } else {
162 } else {
164 OutputWrap::Character
163 OutputWrap::Character
@@ -188,7 +187,7 @@ impl App {
188 .or_else(|| env::var("BAT_TABS").ok())
187 .or_else(|| env::var("BAT_TABS").ok())
189 .and_then(|t| t.parse().ok())
188 .and_then(|t| t.parse().ok())
190 .unwrap_or(
189 .unwrap_or(
191− if output_components.plain() && paging_mode == PagingMode::Never {
190+ if style_components.plain() && paging_mode == PagingMode::Never {
192 0
191 0
193 } else {
192 } else {
194 4
193 4
@@ -201,33 +200,34 @@ impl App {
201 .or_else(|| env::var("BAT_THEME").ok())
200 .or_else(|| env::var("BAT_THEME").ok())
202 .map(|s| {
201 .map(|s| {
203 if s == "default" {
202 if s == "default" {
204− String::from(BAT_THEME_DEFAULT)
203+ String::from(HighlightingAssets::default_theme())
205 } else {
204 } else {
206 s
205 s
207 }
206 }
208 })
207 })
209− .unwrap_or_else(|| String::from(BAT_THEME_DEFAULT)),
208+ .unwrap_or_else(|| String::from(HighlightingAssets::default_theme())),
210− line_ranges: LineRanges::from(
209+ line_ranges: self
211− self.matches
210+ .matches
212− .values_of("line-range")
211+ .values_of("line-range")
213− .map(|vs| vs.map(LineRange::from).collect())
212+ .map(|vs| vs.map(LineRange::from).collect())
214− .transpose()?
213+ .transpose()?
215− .unwrap_or_else(|| vec![]),
214+ .map(LineRanges::from)
216− ),
215+ .unwrap_or_default(),
217− output_components,
216+ style_components,
218 syntax_mapping,
217 syntax_mapping,
219 pager: self.matches.value_of("pager"),
218 pager: self.matches.value_of("pager"),
220 use_italic_text: match self.matches.value_of("italic-text") {
219 use_italic_text: match self.matches.value_of("italic-text") {
221 Some("always") => true,
220 Some("always") => true,
222 _ => false,
221 _ => false,
223 },
222 },
224− highlight_lines: LineRanges::from(
223+ highlighted_lines: self
225− self.matches
224+ .matches
226− .values_of("highlight-line")
225+ .values_of("highlight-line")
227− .map(|ws| ws.map(LineRange::from).collect())
226+ .map(|ws| ws.map(LineRange::from).collect())
228− .transpose()?
227+ .transpose()?
229− .unwrap_or_else(|| vec![LineRange { lower: 0, upper: 0 }]),
228+ .map(LineRanges::from)
230− ),
229+ .map(|lr| HighlightedLineRanges(lr))
230+ .unwrap_or_default(),
231 filenames: self
231 filenames: self
232 .matches
232 .matches
233 .values_of("file-name")
233 .values_of("file-name")
@@ -252,23 +252,23 @@ impl App {
252 .unwrap_or_else(|| vec![InputFile::StdIn])
252 .unwrap_or_else(|| vec![InputFile::StdIn])
253 }
253 }
254
254
255− fn output_components(&self) -> Result<OutputComponents> {
255+ fn style_components(&self) -> Result<StyleComponents> {
256 let matches = &self.matches;
256 let matches = &self.matches;
257− Ok(OutputComponents(
257+ Ok(StyleComponents(
258 if matches.value_of("decorations") == Some("never") {
258 if matches.value_of("decorations") == Some("never") {
259 HashSet::new()
259 HashSet::new()
260 } else if matches.is_present("number") {
260 } else if matches.is_present("number") {
261− [OutputComponent::Numbers].iter().cloned().collect()
261+ [StyleComponent::Numbers].iter().cloned().collect()
262 } else if matches.is_present("plain") {
262 } else if matches.is_present("plain") {
263− [OutputComponent::Plain].iter().cloned().collect()
263+ [StyleComponent::Plain].iter().cloned().collect()
264 } else {
264 } else {
265− let env_style_components: Option<Vec<OutputComponent>> = env::var("BAT_STYLE")
265+ let env_style_components: Option<Vec<StyleComponent>> = env::var("BAT_STYLE")
266 .ok()
266 .ok()
267 .map(|style_str| {
267 .map(|style_str| {
268 style_str
268 style_str
269 .split(',')
269 .split(',')
270− .map(|x| OutputComponent::from_str(&x))
270+ .map(|x| StyleComponent::from_str(&x))
271− .collect::<Result<Vec<OutputComponent>>>()
271+ .collect::<Result<Vec<StyleComponent>>>()
272 })
272 })
273 .transpose()?;
273 .transpose()?;
274
274
@@ -277,12 +277,12 @@ impl App {
277 .map(|styles| {
277 .map(|styles| {
278 styles
278 styles
279 .split(',')
279 .split(',')
280− .map(|style| style.parse::<OutputComponent>())
280+ .map(|style| style.parse::<StyleComponent>())
281 .filter_map(|style| style.ok())
281 .filter_map(|style| style.ok())
282 .collect::<Vec<_>>()
282 .collect::<Vec<_>>()
283 })
283 })
284 .or(env_style_components)
284 .or(env_style_components)
285− .unwrap_or_else(|| vec![OutputComponent::Full])
285+ .unwrap_or_else(|| vec![StyleComponent::Full])
286 .into_iter()
286 .into_iter()
287 .map(|style| style.components(self.interactive_output))
287 .map(|style| style.components(self.interactive_output))
288 .fold(HashSet::new(), |mut acc, components| {
288 .fold(HashSet::new(), |mut acc, components| {
src/bin/bat/assets.rsnew file+38
@@ -0,0 +1,38 @@
1+use std::borrow::Cow;
2+use std::fs;
3+use std::path::PathBuf;
4+
5+use crate::directories::PROJECT_DIRS;
6+
7+use bat::HighlightingAssets;
8+
9+fn theme_set_path() -> PathBuf {
10+ PROJECT_DIRS.cache_dir().join("themes.bin")
11+}
12+
13+fn syntax_set_path() -> PathBuf {
14+ PROJECT_DIRS.cache_dir().join("syntaxes.bin")
15+}
16+
17+pub fn config_dir() -> Cow<'static, str> {
18+ PROJECT_DIRS.config_dir().to_string_lossy()
19+}
20+
21+pub fn cache_dir() -> Cow<'static, str> {
22+ PROJECT_DIRS.cache_dir().to_string_lossy()
23+}
24+
25+pub fn clear_assets() {
26+ print!("Clearing theme set cache ... ");
27+ fs::remove_file(theme_set_path()).ok();
28+ println!("okay");
29+
30+ print!("Clearing syntax set cache ... ");
31+ fs::remove_file(syntax_set_path()).ok();
32+ println!("okay");
33+}
34+
35+pub fn assets_from_cache_or_binary() -> HighlightingAssets {
36+ HighlightingAssets::from_cache(&theme_set_path(), &syntax_set_path())
37+ .unwrap_or(HighlightingAssets::from_binary())
38+}
src/bin/bat/clap_app.rs+7−7
@@ -260,13 +260,13 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
260 .multiple(true)
260 .multiple(true)
261 .takes_value(true)
261 .takes_value(true)
262 .number_of_values(1)
262 .number_of_values(1)
263− .value_name("from:to")
263+ .value_name("glob:syntax")
264− .help("Map a file extension or name to an existing syntax.")
264+ .help("Use the specified syntax for files matching the glob pattern ('*.cpp:C++').")
265 .long_help(
265 .long_help(
266− "Map a file extension or file name to an existing syntax (specified by a file \
266+ "Map a glob pattern to an existing syntax name. The glob pattern is matched \
267− extension or file name). For example, to highlight *.build files with the \
267+ on the full path and the filename. For example, to highlight *.build files \
268− Python syntax, use '-m build:py'. To highlight files named '.myignore' with \
268+ with the Python syntax, use -m '*.build:Python'. To highlight files named \
269− the Git Ignore syntax, use '-m .myignore:gitignore'.",
269+ '.myignore' with the Git Ignore syntax, use -m '.myignore:Git Ignore'.",
270 )
270 )
271 .takes_value(true),
271 .takes_value(true),
272 )
272 )
@@ -293,7 +293,7 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
293 .arg(
293 .arg(
294 Arg::with_name("style")
294 Arg::with_name("style")
295 .long("style")
295 .long("style")
296− .value_name("style-components")
296+ .value_name("components")
297 // Need to turn this off for overrides_with to work as we want. See the bottom most
297 // Need to turn this off for overrides_with to work as we want. See the bottom most
298 // example at https://docs.rs/clap/2.32.0/clap/struct.Arg.html#method.overrides_with
298 // example at https://docs.rs/clap/2.32.0/clap/struct.Arg.html#method.overrides_with
299 .use_delimiter(false)
299 .use_delimiter(false)
src/bin/bat/config.rs+1−1
@@ -5,7 +5,7 @@ use std::path::PathBuf;
5
5
6use shell_words;
6use shell_words;
7
7
8−use bat::dirs::PROJECT_DIRS;
8+use crate::directories::PROJECT_DIRS;
9
9
10pub fn config_file() -> PathBuf {
10pub fn config_file() -> PathBuf {
11 env::var("BAT_CONFIG_PATH")
11 env::var("BAT_CONFIG_PATH")
src/dirs.rs → src/bin/bat/directories.rsrenamed+25−15
@@ -1,8 +1,8 @@
1−use crate::dirs_rs;
1+use std::env;
2use std::path::{Path, PathBuf};
2use std::path::{Path, PathBuf};
3
3
4−#[cfg(target_os = "macos")]
4+use dirs;
5−use std::env;
5+use lazy_static::lazy_static;
6
6
7/// Wrapper for 'dirs' that treats MacOS more like Linux, by following the XDG specification.
7/// Wrapper for 'dirs' that treats MacOS more like Linux, by following the XDG specification.
8/// This means that the `XDG_CACHE_HOME` and `XDG_CONFIG_HOME` environment variables are
8/// This means that the `XDG_CACHE_HOME` and `XDG_CONFIG_HOME` environment variables are
@@ -14,25 +14,16 @@ pub struct BatProjectDirs {
14
14
15impl BatProjectDirs {
15impl BatProjectDirs {
16 fn new() -> Option<BatProjectDirs> {
16 fn new() -> Option<BatProjectDirs> {
17− #[cfg(target_os = "macos")]
17+ let cache_dir = BatProjectDirs::get_cache_dir()?;
18− let cache_dir_op = env::var_os("XDG_CACHE_HOME")
19− .map(PathBuf::from)
20− .filter(|p| p.is_absolute())
21− .or_else(|| dirs_rs::home_dir().map(|d| d.join(".cache")));
22−
23− #[cfg(not(target_os = "macos"))]
24− let cache_dir_op = dirs_rs::cache_dir();
25−
26− let cache_dir = cache_dir_op.map(|d| d.join("bat"))?;
27
18
28 #[cfg(target_os = "macos")]
19 #[cfg(target_os = "macos")]
29 let config_dir_op = env::var_os("XDG_CONFIG_HOME")
20 let config_dir_op = env::var_os("XDG_CONFIG_HOME")
30 .map(PathBuf::from)
21 .map(PathBuf::from)
31 .filter(|p| p.is_absolute())
22 .filter(|p| p.is_absolute())
32− .or_else(|| dirs_rs::home_dir().map(|d| d.join(".config")));
23+ .or_else(|| dirs::home_dir().map(|d| d.join(".config")));
33
24
34 #[cfg(not(target_os = "macos"))]
25 #[cfg(not(target_os = "macos"))]
35− let config_dir_op = dirs_rs::config_dir();
26+ let config_dir_op = dirs::config_dir();
36
27
37 let config_dir = config_dir_op.map(|d| d.join("bat"))?;
28 let config_dir = config_dir_op.map(|d| d.join("bat"))?;
38
29
@@ -42,6 +33,25 @@ impl BatProjectDirs {
42 })
33 })
43 }
34 }
44
35
36+ pub fn get_cache_dir() -> Option<PathBuf> {
37+ // on all OS prefer BAT_CACHE_PATH if set
38+ let cache_dir_op = env::var_os("BAT_CACHE_PATH").map(PathBuf::from);
39+ if cache_dir_op.is_some() {
40+ return cache_dir_op;
41+ }
42+
43+ #[cfg(target_os = "macos")]
44+ let cache_dir_op = env::var_os("XDG_CACHE_HOME")
45+ .map(PathBuf::from)
46+ .filter(|p| p.is_absolute())
47+ .or_else(|| dirs::home_dir().map(|d| d.join(".cache")));
48+
49+ #[cfg(not(target_os = "macos"))]
50+ let cache_dir_op = dirs::cache_dir();
51+
52+ cache_dir_op.map(|d| d.join("bat"))
53+ }
54+
45 pub fn cache_dir(&self) -> &Path {
55 pub fn cache_dir(&self) -> &Path {
46 &self.cache_dir
56 &self.cache_dir
47 }
57 }
src/bin/bat/main.rs+27−19
@@ -4,9 +4,13 @@
4#[macro_use]
4#[macro_use]
5extern crate clap;
5extern crate clap;
6
6
7+extern crate dirs as dirs_rs;
8+
7mod app;
9mod app;
10+mod assets;
8mod clap_app;
11mod clap_app;
9mod config;
12mod config;
13+mod directories;
10
14
11use std::collections::HashSet;
15use std::collections::HashSet;
12use std::ffi::OsStr;
16use std::ffi::OsStr;
@@ -19,25 +23,31 @@ use ansi_term::Colour::Green;
19use ansi_term::Style;
23use ansi_term::Style;
20
24
21use crate::{app::App, config::config_file};
25use crate::{app::App, config::config_file};
26+use assets::{assets_from_cache_or_binary, cache_dir, clear_assets, config_dir};
22−use bat::controller::Controller;
27+use bat::Controller;
28+use directories::PROJECT_DIRS;
23
29
24use bat::{
30use bat::{
25− assets::{cache_dir, clear_assets, config_dir, HighlightingAssets},
31+ config::{Config, InputFile, StyleComponent, StyleComponents},
26 errors::*,
32 errors::*,
27− inputfile::InputFile,
33+ HighlightingAssets,
28− style::{OutputComponent, OutputComponents},
29− Config,
30};
34};
31
35
32fn run_cache_subcommand(matches: &clap::ArgMatches) -> Result<()> {
36fn run_cache_subcommand(matches: &clap::ArgMatches) -> Result<()> {
33 if matches.is_present("build") {
37 if matches.is_present("build") {
34− let source_dir = matches.value_of("source").map(Path::new);
38+ let source_dir = matches
39+ .value_of("source")
40+ .map(Path::new)
41+ .unwrap_or_else(|| PROJECT_DIRS.config_dir());
35− let target_dir = matches.value_of("target").map(Path::new);
42+ let target_dir = matches
43+ .value_of("target")
44+ .map(Path::new)
45+ .unwrap_or_else(|| PROJECT_DIRS.cache_dir());
36
46
37 let blank = matches.is_present("blank");
47 let blank = matches.is_present("blank");
38
48
39− let assets = HighlightingAssets::from_files(source_dir, blank)?;
49+ let assets = HighlightingAssets::from_files(source_dir, !blank)?;
40− assets.save(target_dir)?;
50+ assets.save_to_cache(target_dir)?;
41 } else if matches.is_present("clear") {
51 } else if matches.is_present("clear") {
42 clear_assets();
52 clear_assets();
43 }
53 }
@@ -46,9 +56,8 @@ fn run_cache_subcommand(matches: &clap::ArgMatches) -> Result<()> {
46}
56}
47
57
48pub fn list_languages(config: &Config) -> Result<()> {
58pub fn list_languages(config: &Config) -> Result<()> {
49− let assets = HighlightingAssets::new();
59+ let assets = assets_from_cache_or_binary();
50 let mut languages = assets
60 let mut languages = assets
51− .syntax_set
52 .syntaxes()
61 .syntaxes()
53 .iter()
62 .iter()
54 .filter(|syntax| !syntax.hidden && !syntax.file_extensions.is_empty())
63 .filter(|syntax| !syntax.hidden && !syntax.file_extensions.is_empty())
@@ -109,19 +118,18 @@ pub fn list_languages(config: &Config) -> Result<()> {
109}
118}
110
119
111pub fn list_themes(cfg: &Config) -> Result<()> {
120pub fn list_themes(cfg: &Config) -> Result<()> {
112− let assets = HighlightingAssets::new();
121+ let assets = assets_from_cache_or_binary();
113− let themes = &assets.theme_set.themes;
114 let mut config = cfg.clone();
122 let mut config = cfg.clone();
115 let mut style = HashSet::new();
123 let mut style = HashSet::new();
116− style.insert(OutputComponent::Plain);
124+ style.insert(StyleComponent::Plain);
117 config.files = vec![InputFile::ThemePreviewFile];
125 config.files = vec![InputFile::ThemePreviewFile];
118− config.output_components = OutputComponents(style);
126+ config.style_components = StyleComponents(style);
119
127
120 let stdout = io::stdout();
128 let stdout = io::stdout();
121 let mut stdout = stdout.lock();
129 let mut stdout = stdout.lock();
122
130
123 if config.colored_output {
131 if config.colored_output {
124− for (theme, _) in themes.iter() {
132+ for theme in assets.themes() {
125 writeln!(
133 writeln!(
126 stdout,
134 stdout,
127 "Theme: {}\n",
135 "Theme: {}\n",
@@ -132,7 +140,7 @@ pub fn list_themes(cfg: &Config) -> Result<()> {
132 writeln!(stdout)?;
140 writeln!(stdout)?;
133 }
141 }
134 } else {
142 } else {
135− for (theme, _) in themes.iter() {
143+ for theme in assets.themes() {
136 writeln!(stdout, "{}", theme)?;
144 writeln!(stdout, "{}", theme)?;
137 }
145 }
138 }
146 }
@@ -141,7 +149,7 @@ pub fn list_themes(cfg: &Config) -> Result<()> {
141}
149}
142
150
143fn run_controller(config: &Config) -> Result<bool> {
151fn run_controller(config: &Config) -> Result<bool> {
144− let assets = HighlightingAssets::new();
152+ let assets = assets_from_cache_or_binary();
145 let controller = Controller::new(&config, &assets);
153 let controller = Controller::new(&config, &assets);
146 controller.run()
154 controller.run()
147}
155}
@@ -199,7 +207,7 @@ fn main() {
199
207
200 match result {
208 match result {
201 Err(error) => {
209 Err(error) => {
202− handle_error(&error);
210+ default_error_handler(&error);
203 process::exit(1);
211 process::exit(1);
204 }
212 }
205 Ok(false) => {
213 Ok(false) => {
src/config.rsnew file+96
@@ -0,0 +1,96 @@
1+pub use crate::inputfile::InputFile;
2+pub use crate::line_range::{HighlightedLineRanges, LineRange, LineRanges};
3+pub use crate::style::{StyleComponent, StyleComponents};
4+pub use crate::syntax_mapping::{MappingTarget, SyntaxMapping};
5+pub use crate::wrap::OutputWrap;
6+
7+#[derive(Debug, Clone, Copy, PartialEq)]
8+pub enum PagingMode {
9+ Always,
10+ QuitIfOneScreen,
11+ Never,
12+}
13+
14+impl Default for PagingMode {
15+ fn default() -> Self {
16+ PagingMode::Never
17+ }
18+}
19+
20+#[derive(Debug, Clone, Default)]
21+pub struct Config<'a> {
22+ /// List of files to print
23+ pub files: Vec<InputFile<'a>>,
24+
25+ /// The explicitly configured language, if any
26+ pub language: Option<&'a str>,
27+
28+ /// Whether or not to show/replace non-printable characters like space, tab and newline.
29+ pub show_nonprintable: bool,
30+
31+ /// The character width of the terminal
32+ pub term_width: usize,
33+
34+ /// The width of tab characters.
35+ /// Currently, a value of 0 will cause tabs to be passed through without expanding them.
36+ pub tab_width: usize,
37+
38+ /// Whether or not to simply loop through all input (`cat` mode)
39+ pub loop_through: bool,
40+
41+ /// Whether or not the output should be colorized
42+ pub colored_output: bool,
43+
44+ /// Whether or not the output terminal supports true color
45+ pub true_color: bool,
46+
47+ /// Style elements (grid, line numbers, ...)
48+ pub style_components: StyleComponents,
49+
50+ /// Text wrapping mode
51+ pub output_wrap: OutputWrap,
52+
53+ /// Pager or STDOUT
54+ pub paging_mode: PagingMode,
55+
56+ /// Specifies the lines that should be printed
57+ pub line_ranges: LineRanges,
58+
59+ /// The syntax highlighting theme
60+ pub theme: String,
61+
62+ /// File extension/name mappings
63+ pub syntax_mapping: SyntaxMapping<'a>,
64+
65+ /// Command to start the pager
66+ pub pager: Option<&'a str>,
67+
68+ /// Whether or not to use ANSI italics
69+ pub use_italic_text: bool,
70+
71+ /// Ranges of lines which should be highlighted with a special background color
72+ pub highlighted_lines: HighlightedLineRanges,
73+
74+ /// Name of file to display when printing
75+ pub filenames: Option<Vec<&'a str>>,
76+}
77+
78+#[test]
79+fn default_config_should_include_all_lines() {
80+ use crate::line_range::RangeCheckResult;
81+
82+ assert_eq!(
83+ Config::default().line_ranges.check(17),
84+ RangeCheckResult::InRange
85+ );
86+}
87+
88+#[test]
89+fn default_config_should_highlight_no_lines() {
90+ use crate::line_range::RangeCheckResult;
91+
92+ assert_ne!(
93+ Config::default().highlighted_lines.0.check(17),
94+ RangeCheckResult::InRange
95+ );
96+}
src/controller.rs+8−4
@@ -2,12 +2,12 @@ use std::io::{self, Write};
2use std::path::Path;
2use std::path::Path;
3
3
4use crate::assets::HighlightingAssets;
4use crate::assets::HighlightingAssets;
5+use crate::config::{Config, PagingMode};
5use crate::errors::*;
6use crate::errors::*;
6use crate::inputfile::{InputFile, InputFileReader};
7use crate::inputfile::{InputFile, InputFileReader};
7use crate::line_range::{LineRanges, RangeCheckResult};
8use crate::line_range::{LineRanges, RangeCheckResult};
8use crate::output::OutputType;
9use crate::output::OutputType;
9use crate::printer::{InteractivePrinter, Printer, SimplePrinter};
10use crate::printer::{InteractivePrinter, Printer, SimplePrinter};
10−use crate::{Config, PagingMode};
11
11
12pub struct Controller<'a> {
12pub struct Controller<'a> {
13 config: &'a Config<'a>,
13 config: &'a Config<'a>,
@@ -20,6 +20,10 @@ impl<'b> Controller<'b> {
20 }
20 }
21
21
22 pub fn run(&self) -> Result<bool> {
22 pub fn run(&self) -> Result<bool> {
23+ self.run_with_error_handler(default_error_handler)
24+ }
25+
26+ pub fn run_with_error_handler(&self, handle_error: impl Fn(&Error)) -> Result<bool> {
23 // Do not launch the pager if NONE of the input files exist
27 // Do not launch the pager if NONE of the input files exist
24 let mut paging_mode = self.config.paging_mode;
28 let mut paging_mode = self.config.paging_mode;
25 if self.config.paging_mode != PagingMode::Never {
29 if self.config.paging_mode != PagingMode::Never {
@@ -93,7 +97,7 @@ impl<'b> Controller<'b> {
93 input_file: InputFile<'a>,
97 input_file: InputFile<'a>,
94 file_name: Option<&str>,
98 file_name: Option<&str>,
95 ) -> Result<()> {
99 ) -> Result<()> {
96− if !reader.first_line.is_empty() || self.config.output_components.header() {
100+ if !reader.first_line.is_empty() || self.config.style_components.header() {
97 printer.print_header(writer, input_file, file_name)?;
101 printer.print_header(writer, input_file, file_name)?;
98 }
102 }
99
103
@@ -120,7 +124,7 @@ impl<'b> Controller<'b> {
120
124
121 while reader.read_line(&mut line_buffer)? {
125 while reader.read_line(&mut line_buffer)? {
122 match line_ranges.check(line_number) {
126 match line_ranges.check(line_number) {
123− RangeCheckResult::OutsideRange => {
127+ RangeCheckResult::BeforeOrBetweenRanges => {
124 // Call the printer in case we need to call the syntax highlighter
128 // Call the printer in case we need to call the syntax highlighter
125 // for this line. However, set `out_of_range` to `true`.
129 // for this line. However, set `out_of_range` to `true`.
126 printer.print_line(true, writer, line_number, &line_buffer)?;
130 printer.print_line(true, writer, line_number, &line_buffer)?;
@@ -128,7 +132,7 @@ impl<'b> Controller<'b> {
128 }
132 }
129
133
130 RangeCheckResult::InRange => {
134 RangeCheckResult::InRange => {
131− if self.config.output_components.snip() {
135+ if self.config.style_components.snip() {
132 if first_range {
136 if first_range {
133 first_range = false;
137 first_range = false;
134 mid_range = true;
138 mid_range = true;
src/errors.rsnew file+25
@@ -0,0 +1,25 @@
1+use error_chain::error_chain;
2+
3+error_chain! {
4+ foreign_links {
5+ Clap(::clap::Error);
6+ Io(::std::io::Error);
7+ SyntectError(::syntect::LoadingError);
8+ ParseIntError(::std::num::ParseIntError);
9+ GlobParsingError(::globset::Error);
10+ }
11+}
12+
13+pub fn default_error_handler(error: &Error) {
14+ match error {
15+ Error(ErrorKind::Io(ref io_error), _)
16+ if io_error.kind() == ::std::io::ErrorKind::BrokenPipe =>
17+ {
18+ ::std::process::exit(0);
19+ }
20+ _ => {
21+ use ansi_term::Colour::Red;
22+ eprintln!("{}: {}", Red.paint("[bat error]"), error);
23+ }
24+ };
25+}
src/inputfile.rs+4−4
@@ -10,8 +10,8 @@ const THEME_PREVIEW_FILE: &[u8] = include_bytes!("../assets/theme_preview.rs");
10
10
11pub struct InputFileReader<'a> {
11pub struct InputFileReader<'a> {
12 inner: Box<dyn BufRead + 'a>,
12 inner: Box<dyn BufRead + 'a>,
13− pub first_line: Vec<u8>,
13+ pub(crate) first_line: Vec<u8>,
14− pub content_type: Option<ContentType>,
14+ pub(crate) content_type: Option<ContentType>,
15}
15}
16
16
17impl<'a> InputFileReader<'a> {
17impl<'a> InputFileReader<'a> {
@@ -36,7 +36,7 @@ impl<'a> InputFileReader<'a> {
36 }
36 }
37 }
37 }
38
38
39− pub fn read_line(&mut self, buf: &mut Vec<u8>) -> io::Result<bool> {
39+ pub(crate) fn read_line(&mut self, buf: &mut Vec<u8>) -> io::Result<bool> {
40 if self.first_line.is_empty() {
40 if self.first_line.is_empty() {
41 let res = self.inner.read_until(b'\n', buf).map(|size| size > 0)?;
41 let res = self.inner.read_until(b'\n', buf).map(|size| size > 0)?;
42
42
@@ -60,7 +60,7 @@ pub enum InputFile<'a> {
60}
60}
61
61
62impl<'a> InputFile<'a> {
62impl<'a> InputFile<'a> {
63− pub fn get_reader(&self, stdin: &'a io::Stdin) -> Result<InputFileReader> {
63+ pub(crate) fn get_reader(&self, stdin: &'a io::Stdin) -> Result<InputFileReader> {
64 match self {
64 match self {
65 InputFile::StdIn => Ok(InputFileReader::new(stdin.lock())),
65 InputFile::StdIn => Ok(InputFileReader::new(stdin.lock())),
66 InputFile::Ordinary(filename) => {
66 InputFile::Ordinary(filename) => {
src/lib.rs+13−114
@@ -1,12 +1,6 @@
1// `error_chain!` can recurse deeply
1// `error_chain!` can recurse deeply
2#![recursion_limit = "1024"]
2#![recursion_limit = "1024"]
3
3
4−#[macro_use]
5−extern crate error_chain;
6−
7−#[macro_use]
8−extern crate lazy_static;
9−
10extern crate ansi_term;
4extern crate ansi_term;
11extern crate atty;
5extern crate atty;
12extern crate console;
6extern crate console;
@@ -18,118 +12,23 @@ extern crate shell_words;
18extern crate syntect;
12extern crate syntect;
19extern crate wild;
13extern crate wild;
20
14
21−pub mod assets;
15+pub(crate) mod assets;
16+pub mod config;
22−pub mod controller;
17+pub(crate) mod controller;
23mod decorations;
18mod decorations;
24mod diff;
19mod diff;
25−pub mod dirs;
20+pub mod errors;
26−pub mod inputfile;
21+pub(crate) mod inputfile;
27mod less;
22mod less;
28−pub mod line_range;
23+pub(crate) mod line_range;
29mod output;
24mod output;
30mod preprocessor;
25mod preprocessor;
31−mod printer;
26+pub(crate) mod printer;
32−pub mod style;
27+pub(crate) mod style;
33−pub mod syntax_mapping;
28+pub(crate) mod syntax_mapping;
34mod terminal;
29mod terminal;
30+pub(crate) mod wrap;
35
31
36−pub mod errors {
32+pub use assets::HighlightingAssets;
37− error_chain! {
33+pub use controller::Controller;
38− foreign_links {
34+pub use printer::{InteractivePrinter, Printer, SimplePrinter};
39− Clap(::clap::Error);
40− Io(::std::io::Error);
41− SyntectError(::syntect::LoadingError);
42− ParseIntError(::std::num::ParseIntError);
43− }
44− }
45−
46− pub fn handle_error(error: &Error) {
47− match error {
48− Error(ErrorKind::Io(ref io_error), _)
49− if io_error.kind() == ::std::io::ErrorKind::BrokenPipe =>
50− {
51− ::std::process::exit(0);
52− }
53− _ => {
54− use ansi_term::Colour::Red;
55− eprintln!("{}: {}", Red.paint("[bat error]"), error);
56− }
57− };
58− }
59−}
60−
61−#[derive(Debug, Clone, Copy, PartialEq)]
62−pub enum PagingMode {
63− Always,
64− QuitIfOneScreen,
65− Never,
66−}
67−
68−impl Default for PagingMode {
69− fn default() -> Self {
70− PagingMode::Never
71− }
72−}
73−
74−use inputfile::InputFile;
75−use line_range::LineRanges;
76−use style::{OutputComponents, OutputWrap};
77−use syntax_mapping::SyntaxMapping;
78−
79−#[derive(Debug, Clone, Default)]
80−pub struct Config<'a> {
81− /// List of files to print
82− pub files: Vec<InputFile<'a>>,
83−
84− /// The explicitly configured language, if any
85− pub language: Option<&'a str>,
86−
87− /// Whether or not to show/replace non-printable characters like space, tab and newline.
88− pub show_nonprintable: bool,
89−
90− /// The character width of the terminal
91− pub term_width: usize,
92−
93− /// The width of tab characters.
94− /// Currently, a value of 0 will cause tabs to be passed through without expanding them.
95− pub tab_width: usize,
96−
97− /// Whether or not to simply loop through all input (`cat` mode)
98− pub loop_through: bool,
99−
100− /// Whether or not the output should be colorized
101− pub colored_output: bool,
102−
103− /// Whether or not the output terminal supports true color
104− pub true_color: bool,
105−
106− /// Style elements (grid, line numbers, ...)
107− pub output_components: OutputComponents,
108−
109− /// Text wrapping mode
110− pub output_wrap: OutputWrap,
111−
112− /// Pager or STDOUT
113− pub paging_mode: PagingMode,
114−
115− /// Specifies the lines that should be printed
116− pub line_ranges: LineRanges,
117−
118− /// The syntax highlighting theme
119− pub theme: String,
120−
121− /// File extension/name mappings
122− pub syntax_mapping: SyntaxMapping,
123−
124− /// Command to start the pager
125− pub pager: Option<&'a str>,
126−
127− /// Whether or not to use ANSI italics
128− pub use_italic_text: bool,
129−
130− /// Lines to highlight
131− pub highlight_lines: LineRanges,
132−
133− /// Name of file to display when printing
134− pub filenames: Option<Vec<&'a str>>,
135−}
src/line_range.rs+53−21
@@ -6,20 +6,22 @@ pub struct LineRange {
6 pub upper: usize,
6 pub upper: usize,
7}
7}
8
8
9−impl LineRange {
9+impl Default for LineRange {
10− pub fn from(range_raw: &str) -> Result<LineRange> {
11− LineRange::parse_range(range_raw)
12− }
13−
14− pub fn new() -> LineRange {
10+ fn default() -> LineRange {
15 LineRange {
11 LineRange {
16 lower: usize::min_value(),
12 lower: usize::min_value(),
17 upper: usize::max_value(),
13 upper: usize::max_value(),
18 }
14 }
19 }
15 }
16+}
17+
18+impl LineRange {
19+ pub fn from(range_raw: &str) -> Result<LineRange> {
20+ LineRange::parse_range(range_raw)
21+ }
20
22
21− pub fn parse_range(range_raw: &str) -> Result<LineRange> {
23+ fn parse_range(range_raw: &str) -> Result<LineRange> {
22− let mut new_range = LineRange::new();
24+ let mut new_range = LineRange::default();
23
25
24 if range_raw.bytes().nth(0).ok_or("Empty line range")? == b':' {
26 if range_raw.bytes().nth(0).ok_or("Empty line range")? == b':' {
25 new_range.upper = range_raw[1..].parse()?;
27 new_range.upper = range_raw[1..].parse()?;
@@ -48,7 +50,7 @@ impl LineRange {
48 }
50 }
49 }
51 }
50
52
51− pub fn is_inside(&self, line: usize) -> bool {
53+ pub(crate) fn is_inside(&self, line: usize) -> bool {
52 line >= self.lower && line <= self.upper
54 line >= self.lower && line <= self.upper
53 }
55 }
54}
56}
@@ -97,19 +99,27 @@ pub enum RangeCheckResult {
97 InRange,
99 InRange,
98
100
99 // Before the first range or within two ranges
101 // Before the first range or within two ranges
100− OutsideRange,
102+ BeforeOrBetweenRanges,
101
103
102 // Line number is outside of all ranges and larger than the last range.
104 // Line number is outside of all ranges and larger than the last range.
103 AfterLastRange,
105 AfterLastRange,
104}
106}
105
107
106−#[derive(Debug, Clone, Default)]
108+#[derive(Debug, Clone)]
107pub struct LineRanges {
109pub struct LineRanges {
108 ranges: Vec<LineRange>,
110 ranges: Vec<LineRange>,
109 largest_upper_bound: usize,
111 largest_upper_bound: usize,
110}
112}
111
113
112impl LineRanges {
114impl LineRanges {
115+ pub fn none() -> LineRanges {
116+ LineRanges::from(vec![])
117+ }
118+
119+ pub fn all() -> LineRanges {
120+ LineRanges::from(vec![LineRange::default()])
121+ }
122+
113 pub fn from(ranges: Vec<LineRange>) -> LineRanges {
123 pub fn from(ranges: Vec<LineRange>) -> LineRanges {
114 let largest_upper_bound = ranges
124 let largest_upper_bound = ranges
115 .iter()
125 .iter()
@@ -122,17 +132,32 @@ impl LineRanges {
122 }
132 }
123 }
133 }
124
134
125− pub fn check(&self, line: usize) -> RangeCheckResult {
135+ pub(crate) fn check(&self, line: usize) -> RangeCheckResult {
126− if self.ranges.is_empty() | self.ranges.iter().any(|r| r.is_inside(line)) {
136+ if self.ranges.iter().any(|r| r.is_inside(line)) {
127 RangeCheckResult::InRange
137 RangeCheckResult::InRange
128 } else if line < self.largest_upper_bound {
138 } else if line < self.largest_upper_bound {
129− RangeCheckResult::OutsideRange
139+ RangeCheckResult::BeforeOrBetweenRanges
130 } else {
140 } else {
131 RangeCheckResult::AfterLastRange
141 RangeCheckResult::AfterLastRange
132 }
142 }
133 }
143 }
134}
144}
135
145
146+impl Default for LineRanges {
147+ fn default() -> Self {
148+ Self::all()
149+ }
150+}
151+
152+#[derive(Debug, Clone)]
153+pub struct HighlightedLineRanges(pub LineRanges);
154+
155+impl Default for HighlightedLineRanges {
156+ fn default() -> Self {
157+ HighlightedLineRanges(LineRanges::none())
158+ }
159+}
160+
136#[cfg(test)]
161#[cfg(test)]
137fn ranges(rs: &[&str]) -> LineRanges {
162fn ranges(rs: &[&str]) -> LineRanges {
138 LineRanges::from(rs.iter().map(|r| LineRange::from(r).unwrap()).collect())
163 LineRanges::from(rs.iter().map(|r| LineRange::from(r).unwrap()).collect())
@@ -142,7 +167,7 @@ fn ranges(rs: &[&str]) -> LineRanges {
142fn test_ranges_simple() {
167fn test_ranges_simple() {
143 let ranges = ranges(&["3:8"]);
168 let ranges = ranges(&["3:8"]);
144
169
145− assert_eq!(RangeCheckResult::OutsideRange, ranges.check(2));
170+ assert_eq!(RangeCheckResult::BeforeOrBetweenRanges, ranges.check(2));
146 assert_eq!(RangeCheckResult::InRange, ranges.check(5));
171 assert_eq!(RangeCheckResult::InRange, ranges.check(5));
147 assert_eq!(RangeCheckResult::AfterLastRange, ranges.check(9));
172 assert_eq!(RangeCheckResult::AfterLastRange, ranges.check(9));
148}
173}
@@ -151,11 +176,11 @@ fn test_ranges_simple() {
151fn test_ranges_advanced() {
176fn test_ranges_advanced() {
152 let ranges = ranges(&["3:8", "11:20", "25:30"]);
177 let ranges = ranges(&["3:8", "11:20", "25:30"]);
153
178
154− assert_eq!(RangeCheckResult::OutsideRange, ranges.check(2));
179+ assert_eq!(RangeCheckResult::BeforeOrBetweenRanges, ranges.check(2));
155 assert_eq!(RangeCheckResult::InRange, ranges.check(5));
180 assert_eq!(RangeCheckResult::InRange, ranges.check(5));
156− assert_eq!(RangeCheckResult::OutsideRange, ranges.check(9));
181+ assert_eq!(RangeCheckResult::BeforeOrBetweenRanges, ranges.check(9));
157 assert_eq!(RangeCheckResult::InRange, ranges.check(11));
182 assert_eq!(RangeCheckResult::InRange, ranges.check(11));
158− assert_eq!(RangeCheckResult::OutsideRange, ranges.check(22));
183+ assert_eq!(RangeCheckResult::BeforeOrBetweenRanges, ranges.check(22));
159 assert_eq!(RangeCheckResult::InRange, ranges.check(28));
184 assert_eq!(RangeCheckResult::InRange, ranges.check(28));
160 assert_eq!(RangeCheckResult::AfterLastRange, ranges.check(31));
185 assert_eq!(RangeCheckResult::AfterLastRange, ranges.check(31));
161}
186}
@@ -174,15 +199,22 @@ fn test_ranges_open_low() {
174fn test_ranges_open_high() {
199fn test_ranges_open_high() {
175 let ranges = ranges(&["3:", "2:5"]);
200 let ranges = ranges(&["3:", "2:5"]);
176
201
177− assert_eq!(RangeCheckResult::OutsideRange, ranges.check(1));
202+ assert_eq!(RangeCheckResult::BeforeOrBetweenRanges, ranges.check(1));
178 assert_eq!(RangeCheckResult::InRange, ranges.check(3));
203 assert_eq!(RangeCheckResult::InRange, ranges.check(3));
179 assert_eq!(RangeCheckResult::InRange, ranges.check(5));
204 assert_eq!(RangeCheckResult::InRange, ranges.check(5));
180 assert_eq!(RangeCheckResult::InRange, ranges.check(9));
205 assert_eq!(RangeCheckResult::InRange, ranges.check(9));
181}
206}
182
207
183#[test]
208#[test]
184−fn test_ranges_empty() {
209+fn test_ranges_all() {
185− let ranges = ranges(&[]);
210+ let ranges = LineRanges::all();
186
211
187 assert_eq!(RangeCheckResult::InRange, ranges.check(1));
212 assert_eq!(RangeCheckResult::InRange, ranges.check(1));
188}
213}
214+
215+#[test]
216+fn test_ranges_none() {
217+ let ranges = LineRanges::none();
218+
219+ assert_ne!(RangeCheckResult::InRange, ranges.check(1));
220+}
src/output.rs+1−1
@@ -6,9 +6,9 @@ use std::process::{Child, Command, Stdio};
6
6
7use shell_words;
7use shell_words;
8
8
9+use crate::config::PagingMode;
9use crate::errors::*;
10use crate::errors::*;
10use crate::less::retrieve_less_version;
11use crate::less::retrieve_less_version;
11−use crate::PagingMode;
12
12
13#[derive(Debug)]
13#[derive(Debug)]
14pub enum OutputType {
14pub enum OutputType {
src/printer.rs+13−13
@@ -20,6 +20,7 @@ use encoding::{DecoderTrap, Encoding};
20use unicode_width::UnicodeWidthChar;
20use unicode_width::UnicodeWidthChar;
21
21
22use crate::assets::HighlightingAssets;
22use crate::assets::HighlightingAssets;
23+use crate::config::Config;
23use crate::decorations::{
24use crate::decorations::{
24 Decoration, GridBorderDecoration, LineChangesDecoration, LineNumberDecoration,
25 Decoration, GridBorderDecoration, LineChangesDecoration, LineNumberDecoration,
25};
26};
@@ -29,9 +30,8 @@ use crate::errors::*;
29use crate::inputfile::{InputFile, InputFileReader};
30use crate::inputfile::{InputFile, InputFileReader};
30use crate::line_range::RangeCheckResult;
31use crate::line_range::RangeCheckResult;
31use crate::preprocessor::{expand_tabs, replace_nonprintable};
32use crate::preprocessor::{expand_tabs, replace_nonprintable};
32−use crate::style::OutputWrap;
33use crate::terminal::{as_terminal_escaped, to_ansi_color};
33use crate::terminal::{as_terminal_escaped, to_ansi_color};
34−use crate::Config;
34+use crate::wrap::OutputWrap;
35
35
36pub trait Printer {
36pub trait Printer {
37 fn print_header(
37 fn print_header(
@@ -126,11 +126,11 @@ impl<'a> InteractivePrinter<'a> {
126 // Create decorations.
126 // Create decorations.
127 let mut decorations: Vec<Box<dyn Decoration>> = Vec::new();
127 let mut decorations: Vec<Box<dyn Decoration>> = Vec::new();
128
128
129− if config.output_components.numbers() {
129+ if config.style_components.numbers() {
130 decorations.push(Box::new(LineNumberDecoration::new(&colors)));
130 decorations.push(Box::new(LineNumberDecoration::new(&colors)));
131 }
131 }
132
132
133− if config.output_components.changes() {
133+ if config.style_components.changes() {
134 decorations.push(Box::new(LineChangesDecoration::new(&colors)));
134 decorations.push(Box::new(LineChangesDecoration::new(&colors)));
135 }
135 }
136
136
@@ -140,7 +140,7 @@ impl<'a> InteractivePrinter<'a> {
140 // The grid border decoration isn't added until after the panel_width calculation, since the
140 // The grid border decoration isn't added until after the panel_width calculation, since the
141 // print_horizontal_line, print_header, and print_footer functions all assume the panel
141 // print_horizontal_line, print_header, and print_footer functions all assume the panel
142 // width is without the grid border.
142 // width is without the grid border.
143− if config.output_components.grid() && !decorations.is_empty() {
143+ if config.style_components.grid() && !decorations.is_empty() {
144 decorations.push(Box::new(GridBorderDecoration::new(&colors)));
144 decorations.push(Box::new(GridBorderDecoration::new(&colors)));
145 }
145 }
146
146
@@ -162,7 +162,7 @@ impl<'a> InteractivePrinter<'a> {
162 None
162 None
163 } else {
163 } else {
164 // Get the Git modifications
164 // Get the Git modifications
165− line_changes = if config.output_components.changes() {
165+ line_changes = if config.style_components.changes() {
166 match file {
166 match file {
167 InputFile::Ordinary(filename) => get_git_diff(filename),
167 InputFile::Ordinary(filename) => get_git_diff(filename),
168 _ => None,
168 _ => None,
@@ -216,7 +216,7 @@ impl<'a> InteractivePrinter<'a> {
216 text_truncated,
216 text_truncated,
217 " ".repeat(self.panel_width - 1 - text_truncated.len())
217 " ".repeat(self.panel_width - 1 - text_truncated.len())
218 );
218 );
219− if self.config.output_components.grid() {
219+ if self.config.style_components.grid() {
220 format!("{} │ ", text_filled)
220 format!("{} │ ", text_filled)
221 } else {
221 } else {
222 format!("{}", text_filled)
222 format!("{}", text_filled)
@@ -240,7 +240,7 @@ impl<'a> Printer for InteractivePrinter<'a> {
240 file: InputFile,
240 file: InputFile,
241 file_name: Option<&str>,
241 file_name: Option<&str>,
242 ) -> Result<()> {
242 ) -> Result<()> {
243− if !self.config.output_components.header() {
243+ if !self.config.style_components.header() {
244 if Some(ContentType::BINARY) == self.content_type && !self.config.show_nonprintable {
244 if Some(ContentType::BINARY) == self.content_type && !self.config.show_nonprintable {
245 let input = match file {
245 let input = match file {
246 InputFile::Ordinary(filename) => format!(
246 InputFile::Ordinary(filename) => format!(
@@ -259,14 +259,14 @@ impl<'a> Printer for InteractivePrinter<'a> {
259 input
259 input
260 )?;
260 )?;
261 } else {
261 } else {
262− if self.config.output_components.grid() {
262+ if self.config.style_components.grid() {
263 self.print_horizontal_line(handle, '┬')?;
263 self.print_horizontal_line(handle, '┬')?;
264 }
264 }
265 }
265 }
266 return Ok(());
266 return Ok(());
267 }
267 }
268
268
269− if self.config.output_components.grid() {
269+ if self.config.style_components.grid() {
270 self.print_horizontal_line(handle, '┬')?;
270 self.print_horizontal_line(handle, '┬')?;
271
271
272 write!(
272 write!(
@@ -305,7 +305,7 @@ impl<'a> Printer for InteractivePrinter<'a> {
305 mode
305 mode
306 )?;
306 )?;
307
307
308− if self.config.output_components.grid() {
308+ if self.config.style_components.grid() {
309 if self.content_type.map_or(false, |c| c.is_text()) || self.config.show_nonprintable {
309 if self.content_type.map_or(false, |c| c.is_text()) || self.config.show_nonprintable {
310 self.print_horizontal_line(handle, '┼')?;
310 self.print_horizontal_line(handle, '┼')?;
311 } else {
311 } else {
@@ -317,7 +317,7 @@ impl<'a> Printer for InteractivePrinter<'a> {
317 }
317 }
318
318
319 fn print_footer(&mut self, handle: &mut dyn Write) -> Result<()> {
319 fn print_footer(&mut self, handle: &mut dyn Write) -> Result<()> {
320− if self.config.output_components.grid()
320+ if self.config.style_components.grid()
321 && (self.content_type.map_or(false, |c| c.is_text()) || self.config.show_nonprintable)
321 && (self.content_type.map_or(false, |c| c.is_text()) || self.config.show_nonprintable)
322 {
322 {
323 self.print_horizontal_line(handle, '┴')
323 self.print_horizontal_line(handle, '┴')
@@ -395,7 +395,7 @@ impl<'a> Printer for InteractivePrinter<'a> {
395
395
396 // Line highlighting
396 // Line highlighting
397 let highlight_this_line =
397 let highlight_this_line =
398− self.config.highlight_lines.check(line_number) == RangeCheckResult::InRange;
398+ self.config.highlighted_lines.0.check(line_number) == RangeCheckResult::InRange;
399
399
400 let background_color = self
400 let background_color = self
401 .background_color_highlight
401 .background_color_highlight
src/style.rs+37−49
@@ -4,7 +4,7 @@ use std::str::FromStr;
4use crate::errors::*;
4use crate::errors::*;
5
5
6#[derive(Debug, Eq, PartialEq, Copy, Clone, Hash)]
6#[derive(Debug, Eq, PartialEq, Copy, Clone, Hash)]
7−pub enum OutputComponent {
7+pub enum StyleComponent {
8 Auto,
8 Auto,
9 Changes,
9 Changes,
10 Grid,
10 Grid,
@@ -15,92 +15,80 @@ pub enum OutputComponent {
15 Plain,
15 Plain,
16}
16}
17
17
18−#[derive(Debug, Eq, PartialEq, Copy, Clone, Hash)]
18+impl StyleComponent {
19−pub enum OutputWrap {
20− Character,
21− None,
22−}
23−
24−impl Default for OutputWrap {
25− fn default() -> Self {
26− OutputWrap::None
27− }
28−}
29−
30−impl OutputComponent {
31− pub fn components(self, interactive_terminal: bool) -> &'static [OutputComponent] {
19+ pub fn components(self, interactive_terminal: bool) -> &'static [StyleComponent] {
32 match self {
20 match self {
33− OutputComponent::Auto => {
21+ StyleComponent::Auto => {
34 if interactive_terminal {
22 if interactive_terminal {
35− OutputComponent::Full.components(interactive_terminal)
23+ StyleComponent::Full.components(interactive_terminal)
36 } else {
24 } else {
37− OutputComponent::Plain.components(interactive_terminal)
25+ StyleComponent::Plain.components(interactive_terminal)
38 }
26 }
39 }
27 }
40− OutputComponent::Changes => &[OutputComponent::Changes],
28+ StyleComponent::Changes => &[StyleComponent::Changes],
41− OutputComponent::Grid => &[OutputComponent::Grid],
29+ StyleComponent::Grid => &[StyleComponent::Grid],
42− OutputComponent::Header => &[OutputComponent::Header],
30+ StyleComponent::Header => &[StyleComponent::Header],
43− OutputComponent::Numbers => &[OutputComponent::Numbers],
31+ StyleComponent::Numbers => &[StyleComponent::Numbers],
44− OutputComponent::Snip => &[OutputComponent::Snip],
32+ StyleComponent::Snip => &[StyleComponent::Snip],
45− OutputComponent::Full => &[
33+ StyleComponent::Full => &[
46− OutputComponent::Changes,
34+ StyleComponent::Changes,
47− OutputComponent::Grid,
35+ StyleComponent::Grid,
48− OutputComponent::Header,
36+ StyleComponent::Header,
49− OutputComponent::Numbers,
37+ StyleComponent::Numbers,
50− OutputComponent::Snip,
38+ StyleComponent::Snip,
51 ],
39 ],
52− OutputComponent::Plain => &[],
40+ StyleComponent::Plain => &[],
53 }
41 }
54 }
42 }
55}
43}
56
44
57−impl FromStr for OutputComponent {
45+impl FromStr for StyleComponent {
58 type Err = Error;
46 type Err = Error;
59
47
60 fn from_str(s: &str) -> Result<Self> {
48 fn from_str(s: &str) -> Result<Self> {
61 match s {
49 match s {
62− "auto" => Ok(OutputComponent::Auto),
50+ "auto" => Ok(StyleComponent::Auto),
63− "changes" => Ok(OutputComponent::Changes),
51+ "changes" => Ok(StyleComponent::Changes),
64− "grid" => Ok(OutputComponent::Grid),
52+ "grid" => Ok(StyleComponent::Grid),
65− "header" => Ok(OutputComponent::Header),
53+ "header" => Ok(StyleComponent::Header),
66− "numbers" => Ok(OutputComponent::Numbers),
54+ "numbers" => Ok(StyleComponent::Numbers),
67− "snip" => Ok(OutputComponent::Snip),
55+ "snip" => Ok(StyleComponent::Snip),
68− "full" => Ok(OutputComponent::Full),
56+ "full" => Ok(StyleComponent::Full),
69− "plain" => Ok(OutputComponent::Plain),
57+ "plain" => Ok(StyleComponent::Plain),
70 _ => Err(format!("Unknown style '{}'", s).into()),
58 _ => Err(format!("Unknown style '{}'", s).into()),
71 }
59 }
72 }
60 }
73}
61}
74
62
75#[derive(Debug, Clone, Default)]
63#[derive(Debug, Clone, Default)]
76−pub struct OutputComponents(pub HashSet<OutputComponent>);
64+pub struct StyleComponents(pub HashSet<StyleComponent>);
77
65
78−impl OutputComponents {
66+impl StyleComponents {
79− pub fn new(components: &[OutputComponent]) -> OutputComponents {
67+ pub fn new(components: &[StyleComponent]) -> StyleComponents {
80− OutputComponents(components.iter().cloned().collect())
68+ StyleComponents(components.iter().cloned().collect())
81 }
69 }
82
70
83 pub fn changes(&self) -> bool {
71 pub fn changes(&self) -> bool {
84− self.0.contains(&OutputComponent::Changes)
72+ self.0.contains(&StyleComponent::Changes)
85 }
73 }
86
74
87 pub fn grid(&self) -> bool {
75 pub fn grid(&self) -> bool {
88− self.0.contains(&OutputComponent::Grid)
76+ self.0.contains(&StyleComponent::Grid)
89 }
77 }
90
78
91 pub fn header(&self) -> bool {
79 pub fn header(&self) -> bool {
92− self.0.contains(&OutputComponent::Header)
80+ self.0.contains(&StyleComponent::Header)
93 }
81 }
94
82
95 pub fn numbers(&self) -> bool {
83 pub fn numbers(&self) -> bool {
96− self.0.contains(&OutputComponent::Numbers)
84+ self.0.contains(&StyleComponent::Numbers)
97 }
85 }
98
86
99 pub fn snip(&self) -> bool {
87 pub fn snip(&self) -> bool {
100− self.0.contains(&OutputComponent::Snip)
88+ self.0.contains(&StyleComponent::Snip)
101 }
89 }
102
90
103 pub fn plain(&self) -> bool {
91 pub fn plain(&self) -> bool {
104− self.0.iter().all(|c| c == &OutputComponent::Plain)
92+ self.0.iter().all(|c| c == &StyleComponent::Plain)
105 }
93 }
106}
94}
src/syntax_mapping.rs+94−18
@@ -1,35 +1,111 @@
1−use std::borrow::Cow;
1+use std::path::Path;
2−use std::collections::HashMap;
2+
3+use crate::errors::Result;
4+
5+use globset::{Candidate, GlobBuilder, GlobMatcher};
6+
7+#[derive(Debug, Clone, Copy, PartialEq)]
8+pub enum MappingTarget<'a> {
9+ MapTo(&'a str),
10+ MapToUnknown,
11+}
3
12
4#[derive(Debug, Clone, Default)]
13#[derive(Debug, Clone, Default)]
5−pub struct SyntaxMapping(HashMap<String, String>);
14+pub struct SyntaxMapping<'a> {
15+ mappings: Vec<(GlobMatcher, MappingTarget<'a>)>,
16+}
6
17
7−impl SyntaxMapping {
18+impl<'a> SyntaxMapping<'a> {
8− pub fn new() -> SyntaxMapping {
19+ pub fn empty() -> SyntaxMapping<'a> {
9 Default::default()
20 Default::default()
10 }
21 }
11
22
12− pub fn insert(&mut self, from: impl Into<String>, to: impl Into<String>) -> Option<String> {
23+ pub fn builtin() -> SyntaxMapping<'a> {
13− self.0.insert(from.into(), to.into())
24+ let mut mapping = Self::empty();
25+ mapping.insert("*.h", MappingTarget::MapTo("C++")).unwrap();
26+ mapping
27+ .insert("build", MappingTarget::MapToUnknown)
28+ .unwrap();
29+ mapping
30+ .insert("**/.ssh/config", MappingTarget::MapTo("SSH Config"))
31+ .unwrap();
32+ mapping
33+ .insert(
34+ "/etc/profile",
35+ MappingTarget::MapTo("Bourne Again Shell (bash)"),
36+ )
37+ .unwrap();
38+
39+ mapping
40+ }
41+
42+ pub fn insert(&mut self, from: &str, to: MappingTarget<'a>) -> Result<()> {
43+ let glob = GlobBuilder::new(from)
44+ .case_insensitive(false)
45+ .literal_separator(true)
46+ .build()?;
47+ self.mappings.push((glob.compile_matcher(), to));
48+ Ok(())
14 }
49 }
15
50
16− pub fn replace<'a>(&self, input: impl Into<Cow<'a, str>>) -> Cow<'a, str> {
51+ pub(crate) fn get_syntax_for(&self, path: impl AsRef<Path>) -> Option<MappingTarget<'a>> {
17− let input = input.into();
52+ let candidate = Candidate::new(path.as_ref());
18− match self.0.get(input.as_ref()) {
53+ let canddidate_filename = path.as_ref().file_name().map(Candidate::new);
19− Some(s) => Cow::from(s.clone()),
54+ for (ref glob, ref syntax) in self.mappings.iter().rev() {
20− None => input,
55+ if glob.is_match_candidate(&candidate)
56+ || canddidate_filename
57+ .as_ref()
58+ .map_or(false, |filename| glob.is_match_candidate(filename))
59+ {
60+ return Some(*syntax);
61+ }
21 }
62 }
63+ None
22 }
64 }
23}
65}
24
66
25#[test]
67#[test]
26fn basic() {
68fn basic() {
27− let mut map = SyntaxMapping::new();
69+ let mut map = SyntaxMapping::empty();
28− map.insert("Cargo.lock", "toml");
70+ map.insert("/path/to/Cargo.lock", MappingTarget::MapTo("TOML"))
71+ .ok();
29− map.insert(".ignore", ".gitignore");
72+ map.insert("/path/to/.ignore", MappingTarget::MapTo("Git Ignore"))
73+ .ok();
30
74
31− assert_eq!("toml", map.replace("Cargo.lock"));
75+ assert_eq!(
76+ map.get_syntax_for("/path/to/Cargo.lock"),
77+ Some(MappingTarget::MapTo("TOML"))
78+ );
32− assert_eq!("other.lock", map.replace("other.lock"));
79+ assert_eq!(map.get_syntax_for("/path/to/other.lock"), None);
80+
81+ assert_eq!(
82+ map.get_syntax_for("/path/to/.ignore"),
83+ Some(MappingTarget::MapTo("Git Ignore"))
84+ );
85+}
86+
87+#[test]
88+fn user_can_override_builtin_mappings() {
89+ let mut map = SyntaxMapping::builtin();
90+
91+ assert_eq!(
92+ map.get_syntax_for("/etc/profile"),
93+ Some(MappingTarget::MapTo("Bourne Again Shell (bash)"))
94+ );
95+ map.insert("/etc/profile", MappingTarget::MapTo("My Syntax"))
96+ .ok();
97+ assert_eq!(
98+ map.get_syntax_for("/etc/profile"),
99+ Some(MappingTarget::MapTo("My Syntax"))
100+ );
101+}
102+
103+#[test]
104+fn builtin_mappings() {
105+ let map = SyntaxMapping::builtin();
33
106
34− assert_eq!(".gitignore", map.replace(".ignore"));
107+ assert_eq!(
108+ map.get_syntax_for("/path/to/build"),
109+ Some(MappingTarget::MapToUnknown)
110+ );
35}
111}
src/wrap.rsnew file+11
@@ -0,0 +1,11 @@
1+#[derive(Debug, Eq, PartialEq, Copy, Clone, Hash)]
2+pub enum OutputWrap {
3+ Character,
4+ None,
5+}
6+
7+impl Default for OutputWrap {
8+ fn default() -> Self {
9+ OutputWrap::None
10+ }
11+}
tests/no_duplicate_extensions.rsnew file+35
@@ -0,0 +1,35 @@
1+use std::collections::HashSet;
2+
3+use bat::HighlightingAssets;
4+
5+#[test]
6+fn no_duplicate_extensions() {
7+ const KNOWN_EXCEPTIONS: &[&'static str] = &[
8+ // The '.h' extension currently appears in multiple syntaxes: C, C++, Objective C,
9+ // Objective C++
10+ "h",
11+ // In addition to the standard Haskell syntax in 'Packages', we also ship the 'Cabal'
12+ // syntax which comes with a "Haskell (improved)" syntax.
13+ "hs",
14+ // In addition to the standard JavaScript syntax in 'Packages', we also ship the
15+ // 'Javascript (Babel)' syntax.
16+ "js",
17+ // The "Ruby Haml" syntax also comes with a '.sass' extension. However, we make sure
18+ // that 'sass' is mapped to the 'Sass' syntax.
19+ "sass",
20+ ];
21+
22+ let assets = HighlightingAssets::from_binary();
23+
24+ let mut extensions = HashSet::new();
25+
26+ for syntax in assets.syntaxes() {
27+ for extension in &syntax.file_extensions {
28+ assert!(
29+ KNOWN_EXCEPTIONS.contains(&extension.as_str()) || extensions.insert(extension),
30+ "File extension / pattern \"{}\" appears twice in the syntax set",
31+ extension
32+ );
33+ }
34+ }
35+}
tests/syntax_detection.rsdeleted−78
@@ -1,78 +0,0 @@
1−use std::ffi::OsStr;
2−use std::fs::File;
3−use std::io;
4−use std::io::Write;
5−
6−use tempdir::TempDir;
7−
8−use bat::assets::HighlightingAssets;
9−use bat::inputfile::InputFile;
10−use bat::syntax_mapping::SyntaxMapping;
11−
12−struct SyntaxDetectionTest {
13− assets: HighlightingAssets,
14− pub syntax_mapping: SyntaxMapping,
15− temp_dir: TempDir,
16−}
17−
18−impl SyntaxDetectionTest {
19− fn new() -> Self {
20− SyntaxDetectionTest {
21− assets: HighlightingAssets::new(),
22− syntax_mapping: SyntaxMapping::new(),
23− temp_dir: TempDir::new("bat_syntax_detection_tests")
24− .expect("creation of temporary directory"),
25− }
26− }
27−
28− fn syntax_name_with_content(&self, file_name: &str, first_line: &str) -> String {
29− let file_path = self.temp_dir.path().join(file_name);
30− {
31− let mut temp_file = File::create(&file_path).unwrap();
32− writeln!(temp_file, "{}", first_line).unwrap();
33− }
34−
35− let input_file = InputFile::Ordinary(OsStr::new(&file_path));
36− let syntax = self.assets.get_syntax(
37− None,
38− input_file,
39− &mut input_file.get_reader(&io::stdin()).unwrap(),
40− &self.syntax_mapping,
41− );
42−
43− syntax.name.clone()
44− }
45−
46− fn syntax_name(&self, file_name: &str) -> String {
47− self.syntax_name_with_content(file_name, "")
48− }
49−}
50−
51−#[test]
52−fn syntax_detection_basic() {
53− let test = SyntaxDetectionTest::new();
54−
55− assert_eq!(test.syntax_name("test.rs"), "Rust");
56− assert_eq!(test.syntax_name("test.cpp"), "C++");
57− assert_eq!(test.syntax_name("PKGBUILD"), "Bourne Again Shell (bash)");
58−}
59−
60−#[test]
61−fn syntax_detection_first_line() {
62− let test = SyntaxDetectionTest::new();
63−
64− assert_eq!(
65− test.syntax_name_with_content("my_script", "#!/bin/bash"),
66− "Bourne Again Shell (bash)"
67− );
68− assert_eq!(test.syntax_name_with_content("my_script", "<?php"), "PHP");
69−}
70−
71−#[test]
72−fn syntax_detection_with_custom_mapping() {
73− let mut test = SyntaxDetectionTest::new();
74−
75− assert_ne!(test.syntax_name("test.h"), "C++");
76− test.syntax_mapping.insert("h", "cpp");
77− assert_eq!(test.syntax_name("test.h"), "C++");
78−}