on 4cdac18 help sign in
706 files changed+4395−54010
since splitsnapshots
unifiedsplit
.github/.codecov.yml−1 .github/FUNDING.yml−1 .github/ISSUE_TEMPLATE/bug_report.md+15−40 .github/ISSUE_TEMPLATE/config.yml+1 .github/ISSUE_TEMPLATE/feature_request.md+1 .github/ISSUE_TEMPLATE/question.md+1−2 .github/dependabot.yml−18 .github/workflows/CICD.yml+229−417 .gitignore−2 .gitmodules+13−72 .travis.yml+106 CHANGELOG.md+1−304 CONTRIBUTING.md−70 Cargo.lock+788−647 Cargo.toml+33−46 LICENSE-MIT+1−1 NOTICE−6 README.md+61−245 appveyor.yml+49 assets/README.md+51 assets/acknowledgements.bin assets/completions/_bat.ps1.in−92 assets/completions/bat.bash.in−101 assets/completions/bat.fish.in+2−4 assets/completions/bat.zsh.in−99 assets/create.sh+9−15 assets/manual/bat.1.in+10−75 assets/patches/Groff.sublime-syntax.patch−16 assets/patches/Markdown.sublime-syntax.patch+1−10 assets/patches/MediaWiki.sublime-syntax.patch−13 assets/patches/Monokai-Extended.tmTheme.patch−36 assets/patches/Python.sublime-syntax.patch−15 assets/patches/ShellScript.sublime-syntax.patch−20 assets/patches/XML.sublime-syntax.patch−12 assets/syntaxes.bin assets/syntaxes/02_Extra/AWK+1−1 assets/syntaxes/02_Extra/Apache−1 assets/syntaxes/02_Extra/Apache.sublime-syntax−221 assets/syntaxes/02_Extra/CMake+1−1 assets/syntaxes/02_Extra/CSV+1 assets/syntaxes/02_Extra/CSV.sublime-syntax+39−71 assets/syntaxes/02_Extra/Crystal+1−1 assets/syntaxes/02_Extra/Dart+1−1 assets/syntaxes/02_Extra/Dart.sublime-syntax+243−85 assets/syntaxes/02_Extra/DotENV+1−1 assets/syntaxes/02_Extra/DotENV.sublime-syntax+2−4 assets/syntaxes/02_Extra/Elixir+1−1 assets/syntaxes/02_Extra/Email+1−1 assets/syntaxes/02_Extra/FSharp+1−1 assets/syntaxes/02_Extra/Fish+1−1 assets/syntaxes/02_Extra/Fstab.sublime-syntax−2 assets/syntaxes/02_Extra/GLSL−1 assets/syntaxes/02_Extra/GraphQL+1−1 assets/syntaxes/02_Extra/Groff−1 assets/syntaxes/02_Extra/INI.sublime-syntax+3−4 assets/syntaxes/02_Extra/Julia+1−1 assets/syntaxes/02_Extra/LESS+1−1 assets/syntaxes/02_Extra/LLVM−1 assets/syntaxes/02_Extra/Lean−1 assets/syntaxes/02_Extra/Lean.sublime-syntax−125 assets/syntaxes/02_Extra/LiveScript−1 assets/syntaxes/02_Extra/LiveScript.sublime-syntax−400 assets/syntaxes/02_Extra/Manpage.sublime-syntax+26−144 assets/syntaxes/02_Extra/MediaWiki−1 assets/syntaxes/02_Extra/Nginx−1 assets/syntaxes/02_Extra/Nim.sublime-syntax−1 assets/syntaxes/02_Extra/Ninja−1 assets/syntaxes/02_Extra/Ninja.sublime-syntax−52 assets/syntaxes/02_Extra/PowerShell+1−1 assets/syntaxes/02_Extra/PowerShell.sublime-syntax+48−58 assets/syntaxes/02_Extra/Racket−1 assets/syntaxes/02_Extra/Racket.sublime-syntax−52 assets/syntaxes/02_Extra/Robot.sublime-syntax+1−2 assets/syntaxes/02_Extra/SCSS_Sass+1−1 assets/syntaxes/02_Extra/Slim−1 assets/syntaxes/02_Extra/Slim.sublime-syntax−306 assets/syntaxes/02_Extra/Stylus.sublime-syntax+2−2 assets/syntaxes/02_Extra/SublimeEthereum−1 assets/syntaxes/02_Extra/SublimeJQ−1 assets/syntaxes/02_Extra/Svelte−1 assets/syntaxes/02_Extra/Syslog+1 assets/syntaxes/02_Extra/SystemVerilog−1 assets/syntaxes/02_Extra/TOML+1−1 assets/syntaxes/02_Extra/Terraform+1−1 assets/syntaxes/02_Extra/TypeScript+1−1 assets/syntaxes/02_Extra/TypeScript.sublime-syntax+148−213 assets/syntaxes/02_Extra/TypsecriptReact.sublime-syntax+477−896 assets/syntaxes/02_Extra/VimL+1−1 assets/syntaxes/02_Extra/VimL.sublime-syntax+91 assets/syntaxes/02_Extra/Zig−1 assets/syntaxes/02_Extra/cmd-help−1 assets/syntaxes/02_Extra/gnuplot−1 assets/syntaxes/02_Extra/gnuplot.sublime-syntax−182 assets/syntaxes/02_Extra/http-request-response−1 assets/syntaxes/02_Extra/log.sublime-syntax−140 assets/syntaxes/02_Extra/requirementstxt+1 assets/syntaxes/02_Extra/requirementstxt.sublime-syntax+19 assets/syntaxes/02_Extra/show-nonprintable.sublime-syntax+1−1 assets/syntaxes/02_Extra/ssh-config+1−1 assets/syntaxes/02_Extra/syntax_test_csv.csv−60 assets/syntaxes/02_Extra/syntax_test_man.man−162 assets/syntaxes/02_Extra/syntax_test_tsv.tsv−60 assets/syntaxes/02_Extra/syslog.sublime-syntax−63 assets/themes.bin assets/themes/Coldark−1 assets/themes/base16-256.tmTheme → assets/themes/ansi-dark.tmTheme+22−69 assets/themes/ansi.tmTheme → assets/themes/ansi-light.tmTheme+87−13 assets/themes/base16.tmTheme+2−9 assets/themes/dracula-sublime+1−1 assets/themes/gruvbox−1 assets/themes/onehalf+1−1 assets/themes/visual-studio-dark-plus−1 assets/themes/zenburn+1−1 build.rs+11−32 ci/.gitattributes+1 ci/before_deploy.bash+188 ci/before_deploy.ps1+28 ci/before_install.bash+38 ci/script.bash+20 diagnostics/info.sh+4−6 doc/README-ja.md+29−54 doc/README-ko.md+191−466 doc/README-ru.md+98−102 doc/README-zh.md−678 doc/alternatives.md+1−40 doc/assets.md−100 doc/logo-header.svg+1−1 doc/release-checklist.md−73 doc/sponsors.md−14 doc/sponsors/workos-logo-white-bg.svg−11 rustfmt.toml−1 src/assets.rs+234−419 src/assets/build_assets.rs−176 src/assets/build_assets/acknowledgements.rs−222 src/assets/lazy_theme_set.rs−104 src/assets/serialized_syntax_set.rs−27 src/assets/assets_metadata.rs → src/assets_metadata.rs+9−10 src/bin/bat/app.rs+31−49 src/bin/bat/assets.rs+19−26 src/bin/bat/clap_app.rs+27−128 src/bin/bat/config.rs+9−14 src/bin/bat/directories.rs+17−23 src/bin/bat/input.rs+5−5 src/bin/bat/main.rs+45−148 src/config.rs−12 src/controller.rs+76−96 src/diff.rs+2−1 src/error.rs+22−39 src/input.rs+41−98 src/less.rs+12−79 src/lib.rs+1−10 src/line_range.rs+1−69 src/macros.rs−7 src/output.rs+89−88 src/pager.rs−123 src/preprocessor.rs+4−11 src/pretty_printer.rs+63−47 src/printer.rs+155−250 src/style.rs+4−37 src/syntax_mapping.rs+3−129 src/syntax_mapping/ignored_suffixes.rs−107 src/terminal.rs+9−19 src/vscreen.rs−212 src/wrapping.rs+2−3 tests/.gitattributes+9−8 tests/assets.rs+3−10 tests/benchmarks/.gitignore−1 tests/benchmarks/comparison.sh+31 tests/benchmarks/highlighting-speed-src/grep-output-ansi-sequences.txt−2272 tests/benchmarks/highlighting-speed-src/numpy_test_multiarray.py−8471 tests/benchmarks/many-small-files/small-file-0.txt−1 tests/benchmarks/many-small-files/small-file-1.txt−1 tests/benchmarks/many-small-files/small-file-10.txt−1 tests/benchmarks/many-small-files/small-file-100.txt−1 tests/benchmarks/many-small-files/small-file-11.txt−1 tests/benchmarks/many-small-files/small-file-12.txt−1 tests/benchmarks/many-small-files/small-file-13.txt−1 tests/benchmarks/many-small-files/small-file-14.txt−1 tests/benchmarks/many-small-files/small-file-15.txt−1 tests/benchmarks/many-small-files/small-file-16.txt−1 tests/benchmarks/many-small-files/small-file-17.txt−1 tests/benchmarks/many-small-files/small-file-18.txt−1 tests/benchmarks/many-small-files/small-file-19.txt−1 tests/benchmarks/many-small-files/small-file-2.txt−1 tests/benchmarks/many-small-files/small-file-20.txt−1 tests/benchmarks/many-small-files/small-file-21.txt−1 tests/benchmarks/many-small-files/small-file-22.txt−1 tests/benchmarks/many-small-files/small-file-23.txt−1 tests/benchmarks/many-small-files/small-file-24.txt−1 tests/benchmarks/many-small-files/small-file-25.txt−1 tests/benchmarks/many-small-files/small-file-26.txt−1 tests/benchmarks/many-small-files/small-file-27.txt−1 tests/benchmarks/many-small-files/small-file-28.txt−1 tests/benchmarks/many-small-files/small-file-29.txt−1 tests/benchmarks/many-small-files/small-file-3.txt−1 tests/benchmarks/many-small-files/small-file-30.txt−1 tests/benchmarks/many-small-files/small-file-31.txt−1 tests/benchmarks/many-small-files/small-file-32.txt−1 tests/benchmarks/many-small-files/small-file-33.txt−1 tests/benchmarks/many-small-files/small-file-34.txt−1 tests/benchmarks/many-small-files/small-file-35.txt−1 tests/benchmarks/many-small-files/small-file-36.txt−1 tests/benchmarks/many-small-files/small-file-37.txt−1 tests/benchmarks/many-small-files/small-file-38.txt−1 tests/benchmarks/many-small-files/small-file-39.txt−1 tests/benchmarks/many-small-files/small-file-4.txt−1 tests/benchmarks/many-small-files/small-file-40.txt−1 tests/benchmarks/many-small-files/small-file-41.txt−1 tests/benchmarks/many-small-files/small-file-42.txt−1 tests/benchmarks/many-small-files/small-file-43.txt−1 tests/benchmarks/many-small-files/small-file-44.txt−1 tests/benchmarks/many-small-files/small-file-45.txt−1 tests/benchmarks/many-small-files/small-file-46.txt−1 tests/benchmarks/many-small-files/small-file-47.txt−1 tests/benchmarks/many-small-files/small-file-48.txt−1 tests/benchmarks/many-small-files/small-file-49.txt−1 tests/benchmarks/many-small-files/small-file-5.txt−1 tests/benchmarks/many-small-files/small-file-50.txt−1 tests/benchmarks/many-small-files/small-file-51.txt−1 tests/benchmarks/many-small-files/small-file-52.txt−1 tests/benchmarks/many-small-files/small-file-53.txt−1 tests/benchmarks/many-small-files/small-file-54.txt−1 tests/benchmarks/many-small-files/small-file-55.txt−1 tests/benchmarks/many-small-files/small-file-56.txt−1 tests/benchmarks/many-small-files/small-file-57.txt−1 tests/benchmarks/many-small-files/small-file-58.txt−1 tests/benchmarks/many-small-files/small-file-59.txt−1 tests/benchmarks/many-small-files/small-file-6.txt−1 tests/benchmarks/many-small-files/small-file-60.txt−1 tests/benchmarks/many-small-files/small-file-61.txt−1 tests/benchmarks/many-small-files/small-file-62.txt−1 tests/benchmarks/many-small-files/small-file-63.txt−1 tests/benchmarks/many-small-files/small-file-64.txt−1 tests/benchmarks/many-small-files/small-file-65.txt−1 tests/benchmarks/many-small-files/small-file-66.txt−1 tests/benchmarks/many-small-files/small-file-67.txt−1 tests/benchmarks/many-small-files/small-file-68.txt−1 tests/benchmarks/many-small-files/small-file-69.txt−1 tests/benchmarks/many-small-files/small-file-7.txt−1 tests/benchmarks/many-small-files/small-file-70.txt−1 tests/benchmarks/many-small-files/small-file-71.txt−1 tests/benchmarks/many-small-files/small-file-72.txt−1 tests/benchmarks/many-small-files/small-file-73.txt−1 tests/benchmarks/many-small-files/small-file-74.txt−1 tests/benchmarks/many-small-files/small-file-75.txt−1 tests/benchmarks/many-small-files/small-file-76.txt−1 tests/benchmarks/many-small-files/small-file-77.txt−1 tests/benchmarks/many-small-files/small-file-78.txt−1 tests/benchmarks/many-small-files/small-file-79.txt−1 tests/benchmarks/many-small-files/small-file-8.txt−1 tests/benchmarks/many-small-files/small-file-80.txt−1 tests/benchmarks/many-small-files/small-file-81.txt−1 tests/benchmarks/many-small-files/small-file-82.txt−1 tests/benchmarks/many-small-files/small-file-83.txt−1 tests/benchmarks/many-small-files/small-file-84.txt−1 tests/benchmarks/many-small-files/small-file-85.txt−1 tests/benchmarks/many-small-files/small-file-86.txt−1 tests/benchmarks/many-small-files/small-file-87.txt−1 tests/benchmarks/many-small-files/small-file-88.txt−1 tests/benchmarks/many-small-files/small-file-89.txt−1 tests/benchmarks/many-small-files/small-file-9.txt−1 tests/benchmarks/many-small-files/small-file-90.txt−1 tests/benchmarks/many-small-files/small-file-91.txt−1 tests/benchmarks/many-small-files/small-file-92.txt−1 tests/benchmarks/many-small-files/small-file-93.txt−1 tests/benchmarks/many-small-files/small-file-94.txt−1 tests/benchmarks/many-small-files/small-file-95.txt−1 tests/benchmarks/many-small-files/small-file-96.txt−1 tests/benchmarks/many-small-files/small-file-97.txt−1 tests/benchmarks/many-small-files/small-file-98.txt−1 tests/benchmarks/many-small-files/small-file-99.txt−1 tests/benchmarks/run-benchmarks.sh+17−139 tests/benchmarks/startup-time-src/small-CpuInfo-file.cpuinfo−1 tests/benchmarks/startup-time-src/small-Markdown-file.md−3 tests/benchmarks/highlighting-speed-src/jquery.js → tests/benchmarks/test-src/jquery-3.3.1.js tests/benchmarks/test-src/jquery-3.3.1.min.js+2 tests/benchmarks/highlighting-speed-src/miniz.c → tests/benchmarks/test-src/miniz.c tests/examples/git/.config/git/config−3 tests/examples/git/.gitconfig−3 tests/examples/longline.json−3 tests/examples/nonprintable.txt tests/examples/regression_tests/first_line_fallback.invalid-syntax−2 tests/examples/test.json.suffix−1 tests/examples/test.json~−1 tests/integration_tests.rs+13−856 tests/mocked-pagers/more−2 tests/mocked-pagers/more.bat−1 tests/mocked-pagers/most−2 tests/mocked-pagers/most.bat−1 tests/no_duplicate_extensions.rs+1−7 tests/scripts/find-slow-to-highlight-files.py+2−2 tests/scripts/license-checks.sh−24 tests/snapshot_tests.rs+1−11 tests/snapshots/generate_snapshots.py+1−1 tests/snapshots/output/changes.snapshot.txt−1 tests/snapshots/output/changes_grid.snapshot.txt−1 tests/snapshots/output/changes_grid_header.snapshot.txt−1 tests/snapshots/output/changes_grid_header_numbers.snapshot.txt+22−23 tests/snapshots/output/changes_grid_header_numbers_rule.snapshot.txt−27 tests/snapshots/output/changes_grid_header_rule.snapshot.txt−27 tests/snapshots/output/changes_grid_numbers.snapshot.txt+22−23 tests/snapshots/output/changes_grid_numbers_rule.snapshot.txt−25 tests/snapshots/output/changes_grid_rule.snapshot.txt−25 tests/snapshots/output/changes_header.snapshot.txt−1 tests/snapshots/output/changes_header_numbers.snapshot.txt+22−23 tests/snapshots/output/changes_header_numbers_rule.snapshot.txt−24 tests/snapshots/output/changes_header_rule.snapshot.txt−24 tests/snapshots/output/changes_numbers.snapshot.txt+22−23 tests/snapshots/output/changes_numbers_rule.snapshot.txt−23 tests/snapshots/output/changes_rule.snapshot.txt−23 tests/snapshots/output/full.snapshot.txt+22−24 tests/snapshots/output/grid.snapshot.txt−1 tests/snapshots/output/grid_header.snapshot.txt−1 tests/snapshots/output/grid_header_numbers.snapshot.txt+22−23 tests/snapshots/output/grid_header_numbers_rule.snapshot.txt−27 tests/snapshots/output/grid_header_rule.snapshot.txt−27 tests/snapshots/output/grid_numbers.snapshot.txt+22−23 tests/snapshots/output/grid_numbers_rule.snapshot.txt−25 tests/snapshots/output/grid_rule.snapshot.txt−25 tests/snapshots/output/header.snapshot.txt−1 tests/snapshots/output/header_numbers.snapshot.txt+22−23 tests/snapshots/output/header_numbers_rule.snapshot.txt−24 tests/snapshots/output/header_rule.snapshot.txt−24 tests/snapshots/output/numbers.snapshot.txt+22−23 tests/snapshots/output/numbers_rule.snapshot.txt−23 tests/snapshots/output/plain.snapshot.txt−1 tests/snapshots/output/rule.snapshot.txt−23 tests/snapshots/sample.modified.rs−1 tests/syntax-tests/BatTestCustomAssets.sublime-syntax−21 tests/syntax-tests/compare_highlighted_versions.py−65 tests/syntax-tests/create_highlighted_versions.py−133 tests/syntax-tests/highlighted/ARM Assembly/test.S−55 tests/syntax-tests/highlighted/ASP/test.asp−36 tests/syntax-tests/highlighted/AWK/quicksort.awk−35 tests/syntax-tests/highlighted/ActionScript/test.as−75 tests/syntax-tests/highlighted/Apache/httpd.conf−42 tests/syntax-tests/highlighted/AppleScript/test.applescript−25 tests/syntax-tests/highlighted/AsciiDoc/test.adoc−173 tests/syntax-tests/highlighted/Assembly (x86_64)/test.nasm−86 tests/syntax-tests/highlighted/Bash/batgrep.sh−511 tests/syntax-tests/highlighted/Bash/simple.sh−72 tests/syntax-tests/highlighted/BatTestCustomAssets/NoColorsUnlessCustomAssetsAreUsed.battestcustomassets−2 tests/syntax-tests/highlighted/Batch/build.bat−59 tests/syntax-tests/highlighted/BibTeX/test.bib−18 tests/syntax-tests/highlighted/C-Sharp/Stack.cs−64 tests/syntax-tests/highlighted/C/test.c−62 tests/syntax-tests/highlighted/CMake/CMakeLists.txt−16 tests/syntax-tests/highlighted/CSS/style.css−115 tests/syntax-tests/highlighted/CSV/comma_in_quotes.csv−7 tests/syntax-tests/highlighted/Cabal/semantic.cabal−247 tests/syntax-tests/highlighted/Clojure/test.clj−58 tests/syntax-tests/highlighted/CoffeeScript/coffeescript.coffee−391 tests/syntax-tests/highlighted/Cpp/test.cpp−79 tests/syntax-tests/highlighted/CpuInfo/test.cpuinfo−45 tests/syntax-tests/highlighted/Crystal/test.cr−117 tests/syntax-tests/highlighted/D/test.d−44 tests/syntax-tests/highlighted/Dart/inner_comment.dart−5 tests/syntax-tests/highlighted/Dart/test.dart−133 tests/syntax-tests/highlighted/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff−353 tests/syntax-tests/highlighted/Dockerfile/Dockerfile−19 tests/syntax-tests/highlighted/DotENV/.env−57 tests/syntax-tests/highlighted/Elixir/command.ex−31 tests/syntax-tests/highlighted/Elm/test.elm−137 tests/syntax-tests/highlighted/Email/test.eml−16 tests/syntax-tests/highlighted/Erlang/bat_erlang.erl−72 tests/syntax-tests/highlighted/EtcGroup/test.group−67 tests/syntax-tests/highlighted/F#/string.fs−182 tests/syntax-tests/highlighted/Fish/test.fish−77 tests/syntax-tests/highlighted/Fortran (Fixed Form)/quicksort_real_F77.F−323 tests/syntax-tests/highlighted/Fortran (Modern)/test_savetxt.f90−119 tests/syntax-tests/highlighted/Fortran Namelist/test.namelist−5 tests/syntax-tests/highlighted/Fstab/fstab−7 tests/syntax-tests/highlighted/GLSL/test.glsl−42 tests/syntax-tests/highlighted/Git Attributes/example.gitattributes−16 tests/syntax-tests/highlighted/Git Config/text.gitconfig−107 tests/syntax-tests/highlighted/Git Ignore/test.gitignore−43 tests/syntax-tests/highlighted/Go/main.go−81 tests/syntax-tests/highlighted/GraphQL/test.graphql−145 tests/syntax-tests/highlighted/Graphviz DOT/test_digraph.dot−41 tests/syntax-tests/highlighted/Graphviz DOT/test_graph.dot−3 tests/syntax-tests/highlighted/Groff/rustdoc.1−126 tests/syntax-tests/highlighted/Groovy/test.groovy−77 tests/syntax-tests/highlighted/HTML/test.html−115 tests/syntax-tests/highlighted/Haskell/test.hs−86 tests/syntax-tests/highlighted/Hosts/hosts−8 tests/syntax-tests/highlighted/INI/test.inf−5 tests/syntax-tests/highlighted/INI/test.ini−18 tests/syntax-tests/highlighted/Ignored suffixes/test.rs.bak−1 tests/syntax-tests/highlighted/Ignored suffixes/test.rs.dpkg-dist−1 tests/syntax-tests/highlighted/Ignored suffixes/test.rs.dpkg-old−1 tests/syntax-tests/highlighted/Ignored suffixes/test.rs.in−1 tests/syntax-tests/highlighted/Ignored suffixes/test.rs.in.in−1 tests/syntax-tests/highlighted/Ignored suffixes/test.rs.old−1 tests/syntax-tests/highlighted/Ignored suffixes/test.rs.orig−1 tests/syntax-tests/highlighted/Ignored suffixes/test.rs.orig~−1 tests/syntax-tests/highlighted/Ignored suffixes/test.rs.rpmnew−1 tests/syntax-tests/highlighted/Ignored suffixes/test.rs.rpmorig−1 tests/syntax-tests/highlighted/Ignored suffixes/test.rs.rpmsave−1 tests/syntax-tests/highlighted/Ignored suffixes/test.rs.ucf-dist−1 tests/syntax-tests/highlighted/Ignored suffixes/test.rs.ucf-new−1 tests/syntax-tests/highlighted/Ignored suffixes/test.rs.ucf-old−1 tests/syntax-tests/highlighted/Ignored suffixes/test.rs~−1 tests/syntax-tests/highlighted/Ignored suffixes/test.unknown~−1 tests/syntax-tests/highlighted/JQ/sample.jq−60 tests/syntax-tests/highlighted/JSON/test.json−29 tests/syntax-tests/highlighted/Java Server Page (JSP)/sessionDetail.jsp−197 tests/syntax-tests/highlighted/Java/test.java−39 tests/syntax-tests/highlighted/JavaScript/test.js−114 tests/syntax-tests/highlighted/Jinja2/template.jinja2−30 tests/syntax-tests/highlighted/Julia/test.jl−71 tests/syntax-tests/highlighted/Kotlin/test.kt−85 tests/syntax-tests/highlighted/LLVM/test.ll−29 tests/syntax-tests/highlighted/Lean/test.lean−68 tests/syntax-tests/highlighted/Less/example.less−43 tests/syntax-tests/highlighted/Lisp/utils.lisp−80 tests/syntax-tests/highlighted/Literate Haskell/Main.lhs−47 tests/syntax-tests/highlighted/LiveScript/livescript-demo.ls−83 tests/syntax-tests/highlighted/Log/example.log−3 tests/syntax-tests/highlighted/Lua/test.lua−34 tests/syntax-tests/highlighted/MATLAB/test.matlab−34 tests/syntax-tests/highlighted/Makefile/Makefile−385 tests/syntax-tests/highlighted/Manpage/bat-0.16.man−243 tests/syntax-tests/highlighted/Manpage/select-2.man−330 tests/syntax-tests/highlighted/Markdown/example.md−39 tests/syntax-tests/highlighted/MediaWiki/test.mediawiki−37 tests/syntax-tests/highlighted/MemInfo/test.meminfo−53 tests/syntax-tests/highlighted/NAnt Build File/Default.build−167 tests/syntax-tests/highlighted/Ninja/test.ninja−6 tests/syntax-tests/highlighted/OCaml/syntax-test.ml−83 tests/syntax-tests/highlighted/Objective-C++/test.mm−68 tests/syntax-tests/highlighted/Objective-C/test.m−32 tests/syntax-tests/highlighted/PHP/test.php−111 tests/syntax-tests/highlighted/Pascal/test.pas−42 tests/syntax-tests/highlighted/Passwd/passwd−7 tests/syntax-tests/highlighted/Perl/test.pl−157 tests/syntax-tests/highlighted/Plaintext/plaintext.txt−178 tests/syntax-tests/highlighted/PowerShell/test.ps1−25 tests/syntax-tests/highlighted/Protocol Buffer/vyconf.proto−158 tests/syntax-tests/highlighted/Puppet/manifest_large_exported_classes_node.pp−65 tests/syntax-tests/highlighted/PureScript/test.purs−89 tests/syntax-tests/highlighted/Python/battest.py−100 tests/syntax-tests/highlighted/QML/BatSyntaxTest.qml−219 tests/syntax-tests/highlighted/R/test.r−170 tests/syntax-tests/highlighted/Racket/test.rkt−56 tests/syntax-tests/highlighted/Rego/src_test.rego−181 tests/syntax-tests/highlighted/Regular Expression/test.re−1 tests/syntax-tests/highlighted/Robot Framework/recipe141_aws_simple_storage_service.robot−31 tests/syntax-tests/highlighted/Ruby Haml/test.html.haml−15 tests/syntax-tests/highlighted/Ruby On Rails/test.rb−22 tests/syntax-tests/highlighted/Ruby/output.rb−56 tests/syntax-tests/highlighted/Rust/output.rs−161 tests/syntax-tests/highlighted/SCSS/example.scss−82 tests/syntax-tests/highlighted/SLS/test.sls−57 tests/syntax-tests/highlighted/SML/sample.sml−47 tests/syntax-tests/highlighted/SQL/ims.sql−266 tests/syntax-tests/highlighted/SSH Config/ssh_config−9 tests/syntax-tests/highlighted/SSHD Config/sshd_config−36 tests/syntax-tests/highlighted/Sass/example.sass−76 tests/syntax-tests/highlighted/Scala/ConcurrentEffectLaws.scala−98 tests/syntax-tests/highlighted/Slim/test.slim−20 tests/syntax-tests/highlighted/Solidity/ERC721.sol−376 tests/syntax-tests/highlighted/Strace/ls.strace−94 tests/syntax-tests/highlighted/Stylus/gradients.styl−90 tests/syntax-tests/highlighted/Svelte/App.svelte−65 tests/syntax-tests/highlighted/Swift/test.swift−268 tests/syntax-tests/highlighted/Syslog/example.syslog−16 tests/syntax-tests/highlighted/SystemVerilog/output.sv−103 tests/syntax-tests/highlighted/TOML/Cargo.toml−87 tests/syntax-tests/highlighted/Tcl/test.tcl−22 tests/syntax-tests/highlighted/TeX/main.tex−84 tests/syntax-tests/highlighted/Terraform/main.tf−48 tests/syntax-tests/highlighted/Textile/test.textile−40 tests/syntax-tests/highlighted/TypeScript/example.ts−110 tests/syntax-tests/highlighted/TypeScriptReact/app.tsx−35 tests/syntax-tests/highlighted/Verilog/div_pipelined.v−172 tests/syntax-tests/highlighted/VimL/source.vim−92 tests/syntax-tests/highlighted/Vue/example.vue−60 tests/syntax-tests/highlighted/Vyper/crowdsale.vy−89 tests/syntax-tests/highlighted/XAML/ItemPage.xaml−264 tests/syntax-tests/highlighted/XML/example.xml−22 tests/syntax-tests/highlighted/YAML/example.yaml−34 tests/syntax-tests/highlighted/Zig/example.zig−107 tests/syntax-tests/highlighted/cmd-help/test.cmd-help−54 tests/syntax-tests/highlighted/dash/shfm−425 tests/syntax-tests/highlighted/gnuplot/test.gp−19 tests/syntax-tests/highlighted/http-request-response/example.http−44 tests/syntax-tests/highlighted/jsonnet/stdlib.jsonnet−88 tests/syntax-tests/highlighted/nginx/nginx.conf−140 tests/syntax-tests/highlighted/nim/main.nim−41 tests/syntax-tests/highlighted/nim/test.nimble−23 tests/syntax-tests/highlighted/nix/test.nix−15 tests/syntax-tests/highlighted/orgmode/test.org−38 tests/syntax-tests/highlighted/reStructuredText/reference.rst−320 tests/syntax-tests/highlighted/resolv.conf/resolv.conf−4 tests/syntax-tests/highlighted/varlink/org.varlink.certification.varlink−86 tests/syntax-tests/regression_test.sh−15 tests/syntax-tests/source/ARM Assembly/test.S−55 tests/syntax-tests/source/ASP/test.asp−36 tests/syntax-tests/source/AWK/quicksort.awk−35 tests/syntax-tests/source/ActionScript/test.as−75 tests/syntax-tests/source/Apache/httpd.conf−42 tests/syntax-tests/source/AppleScript/test.applescript−25 tests/syntax-tests/source/AsciiDoc/test.adoc−173 tests/syntax-tests/source/Assembly (x86_64)/test.nasm−86 tests/syntax-tests/source/Bash/batgrep.sh−511 tests/syntax-tests/source/Bash/simple.sh−72 tests/syntax-tests/source/BatTestCustomAssets/NoColorsUnlessCustomAssetsAreUsed.battestcustomassets−2 tests/syntax-tests/source/Batch/LICENSE.md−26 tests/syntax-tests/source/Batch/build.bat−59 tests/syntax-tests/source/BibTeX/test.bib−18 tests/syntax-tests/source/C-Sharp/Stack.cs−64 tests/syntax-tests/source/C/test.c−62 tests/syntax-tests/source/CMake/CMakeLists.txt−16 tests/syntax-tests/source/CSS/style.css−115 tests/syntax-tests/source/CSV/LICENSE.md−27 tests/syntax-tests/source/CSV/comma_in_quotes.csv−7 tests/syntax-tests/source/Cabal/LICENSE.md−25 tests/syntax-tests/source/Cabal/semantic.cabal−247 tests/syntax-tests/source/Clojure/test.clj−58 tests/syntax-tests/source/CoffeeScript/LICENSE.md−26 tests/syntax-tests/source/CoffeeScript/coffeescript.coffee−391 tests/syntax-tests/source/Cpp/test.cpp−79 tests/syntax-tests/source/CpuInfo/test.cpuinfo−45 tests/syntax-tests/source/Crystal/test.cr−117 tests/syntax-tests/source/D/test.d−44 tests/syntax-tests/source/Dart/inner_comment.dart−5 tests/syntax-tests/source/Dart/test.dart−133 tests/syntax-tests/source/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff−353 tests/syntax-tests/source/Dockerfile/Dockerfile−19 tests/syntax-tests/source/DotENV/.env−57 tests/syntax-tests/source/DotENV/LICENSE.md−23 tests/syntax-tests/source/Elixir/LICENSE.md−21 tests/syntax-tests/source/Elixir/command.ex−31 tests/syntax-tests/source/Elm/LICENSE.md−32 tests/syntax-tests/source/Elm/test.elm−137 tests/syntax-tests/source/Email/test.eml−16 tests/syntax-tests/source/Erlang/bat_erlang.erl−72 tests/syntax-tests/source/EtcGroup/test.group−67 tests/syntax-tests/source/F#/LICENSE.md−27 tests/syntax-tests/source/F#/string.fs−182 tests/syntax-tests/source/Fish/test.fish−77 tests/syntax-tests/source/Fortran (Fixed Form)/LICENSE.md−25 tests/syntax-tests/source/Fortran (Fixed Form)/quicksort_real_F77.F−323 tests/syntax-tests/source/Fortran (Modern)/LICENSE.md−25 tests/syntax-tests/source/Fortran (Modern)/test_savetxt.f90−119 tests/syntax-tests/source/Fortran Namelist/test.namelist−5 tests/syntax-tests/source/Fstab/fstab−7 tests/syntax-tests/source/GLSL/test.glsl−42 tests/syntax-tests/source/Git Attributes/example.gitattributes−16 tests/syntax-tests/source/Git Config/LICENSE.md−1 tests/syntax-tests/source/Git Config/text.gitconfig−107 tests/syntax-tests/source/Git Ignore/LICENSE.md−234 tests/syntax-tests/source/Git Ignore/test.gitignore−43 tests/syntax-tests/source/Go/LICENSE.md−205 tests/syntax-tests/source/Go/main.go−81 tests/syntax-tests/source/GraphQL/test.graphql−145 tests/syntax-tests/source/Graphviz DOT/LICENSE.md−22 tests/syntax-tests/source/Graphviz DOT/test_digraph.dot−41 tests/syntax-tests/source/Graphviz DOT/test_graph.dot−3 tests/syntax-tests/source/Groff/LICENSE.md−235 tests/syntax-tests/source/Groff/rustdoc.1−126 tests/syntax-tests/source/Groovy/test.groovy−77 tests/syntax-tests/source/HTML/test.html−115 tests/syntax-tests/source/Haskell/test.hs−86 tests/syntax-tests/source/Hosts/hosts−8 tests/syntax-tests/source/INI/test.inf−5 tests/syntax-tests/source/INI/test.ini−18 tests/syntax-tests/source/Ignored suffixes/test.rs.bak−1 tests/syntax-tests/source/Ignored suffixes/test.rs.dpkg-dist−1 tests/syntax-tests/source/Ignored suffixes/test.rs.dpkg-old−1 tests/syntax-tests/source/Ignored suffixes/test.rs.in−1 tests/syntax-tests/source/Ignored suffixes/test.rs.in.in−1 tests/syntax-tests/source/Ignored suffixes/test.rs.old−1 tests/syntax-tests/source/Ignored suffixes/test.rs.orig−1 tests/syntax-tests/source/Ignored suffixes/test.rs.orig~−1 tests/syntax-tests/source/Ignored suffixes/test.rs.rpmnew−1 tests/syntax-tests/source/Ignored suffixes/test.rs.rpmorig−1 tests/syntax-tests/source/Ignored suffixes/test.rs.rpmsave−1 tests/syntax-tests/source/Ignored suffixes/test.rs.ucf-dist−1 tests/syntax-tests/source/Ignored suffixes/test.rs.ucf-new−1 tests/syntax-tests/source/Ignored suffixes/test.rs.ucf-old−1 tests/syntax-tests/source/Ignored suffixes/test.rs~−1 tests/syntax-tests/source/Ignored suffixes/test.unknown~−1 tests/syntax-tests/source/JQ/LICENSE.md−25 tests/syntax-tests/source/JQ/sample.jq−60 tests/syntax-tests/source/JSON/test.json−29 tests/syntax-tests/source/Java Server Page (JSP)/LICENSE.md−1141 tests/syntax-tests/source/Java Server Page (JSP)/NOTICE−68 tests/syntax-tests/source/Java Server Page (JSP)/sessionDetail.jsp−197 tests/syntax-tests/source/Java/test.java−39 tests/syntax-tests/source/JavaScript/test.js−114 tests/syntax-tests/source/Jinja2/template.jinja2−30 tests/syntax-tests/source/Julia/test.jl−71 tests/syntax-tests/source/Kotlin/test.kt−85 tests/syntax-tests/source/LLVM/test.ll−29 tests/syntax-tests/source/Lean/test.lean−68 tests/syntax-tests/source/Less/example.less−43 tests/syntax-tests/source/Lisp/LICENSE.md−24 tests/syntax-tests/source/Lisp/utils.lisp−80 tests/syntax-tests/source/Literate Haskell/Main.lhs−47 tests/syntax-tests/source/LiveScript/LICENSE.md−23 tests/syntax-tests/source/LiveScript/livescript-demo.ls−83 tests/syntax-tests/source/Log/example.log−3 tests/syntax-tests/source/Lua/test.lua−34 tests/syntax-tests/source/MATLAB/LICENSE.md−27 tests/syntax-tests/source/MATLAB/test.matlab−34 tests/syntax-tests/source/Makefile/LICENSE.md−12 tests/syntax-tests/source/Makefile/Makefile−385 tests/syntax-tests/source/Manpage/bat-0.16.man−243 tests/syntax-tests/source/Manpage/select-2.man−330 tests/syntax-tests/source/Markdown/example.md−39 tests/syntax-tests/source/MediaWiki/test.mediawiki−37 tests/syntax-tests/source/MemInfo/test.meminfo−53 tests/syntax-tests/source/NAnt Build File/Default.build−167 tests/syntax-tests/source/NAnt Build File/LICENSE.md−25 tests/syntax-tests/source/Ninja/LICENSE.md−204 tests/syntax-tests/source/Ninja/test.ninja−6 tests/syntax-tests/source/OCaml/syntax-test.ml−83 tests/syntax-tests/source/Objective-C++/test.mm−68 tests/syntax-tests/source/Objective-C/test.m−32 tests/syntax-tests/source/PHP/test.php−111 tests/syntax-tests/source/Pascal/test.pas−42 tests/syntax-tests/source/Passwd/passwd−7 tests/syntax-tests/source/Perl/test.pl−157 tests/syntax-tests/source/Plaintext/README.md−12 tests/syntax-tests/source/Plaintext/bat_options−1 tests/syntax-tests/source/Plaintext/plaintext.txt tests/syntax-tests/source/PowerShell/test.ps1 tests/syntax-tests/source/Protocol Buffer/vyconf.proto−158 tests/syntax-tests/source/Puppet/LICENSE.md−206 tests/syntax-tests/source/Puppet/manifest_large_exported_classes_node.pp−65 tests/syntax-tests/source/PureScript/test.purs−89 tests/syntax-tests/source/Python/battest.py−100 tests/syntax-tests/source/QML/BatSyntaxTest.qml−219 tests/syntax-tests/source/R/test.r−170 tests/syntax-tests/source/Racket/test.rkt−56 tests/syntax-tests/source/Rego/LICENSE.md−25 tests/syntax-tests/source/Rego/src_test.rego−181 tests/syntax-tests/source/Regular Expression/test.re−1 tests/syntax-tests/source/Robot Framework/LICENSE.md−25 tests/syntax-tests/source/Robot Framework/recipe141_aws_simple_storage_service.robot−31 tests/syntax-tests/source/Ruby Haml/test.html.haml−15 tests/syntax-tests/source/Ruby On Rails/test.rb−22 tests/syntax-tests/source/Ruby/output.rb−56 tests/syntax-tests/source/Rust/output.rs−161 tests/syntax-tests/source/SCSS/example.scss−82 tests/syntax-tests/source/SLS/test.sls−57 tests/syntax-tests/source/SML/sample.sml−47 tests/syntax-tests/source/SQL/ims.sql−266 tests/syntax-tests/source/SSH Config/ssh_config−9 tests/syntax-tests/source/SSHD Config/sshd_config−36 tests/syntax-tests/source/Sass/example.sass−76 tests/syntax-tests/source/Scala/ConcurrentEffectLaws.scala−98 tests/syntax-tests/source/Scala/LICENSE.md−179 tests/syntax-tests/source/Slim/test.slim−20 tests/syntax-tests/source/Solidity/ERC721.sol−376 tests/syntax-tests/source/Solidity/LICENSE.md−27 tests/syntax-tests/source/Strace/ls.strace−94 tests/syntax-tests/source/Stylus/LICENSE.md−24 tests/syntax-tests/source/Stylus/gradients.styl−90 tests/syntax-tests/source/Svelte/App.svelte−65 tests/syntax-tests/source/Svelte/LICENSE.md−14 tests/syntax-tests/source/Swift/test.swift−268 tests/syntax-tests/source/Syslog/example.syslog−16 tests/syntax-tests/source/SystemVerilog/output.sv−103 tests/syntax-tests/source/TOML/Cargo.toml−87 tests/syntax-tests/source/Tcl/test.tcl−22 tests/syntax-tests/source/TeX/main.tex−84 tests/syntax-tests/source/Terraform/main.tf−48 tests/syntax-tests/source/Textile/test.textile−40 tests/syntax-tests/source/TypeScript/LICENSE.md−19 tests/syntax-tests/source/TypeScript/example.ts−110 tests/syntax-tests/source/TypeScriptReact/LICENSE.md−25 tests/syntax-tests/source/TypeScriptReact/app.tsx−35 tests/syntax-tests/source/Verilog/LICENSE.md−205 tests/syntax-tests/source/Verilog/div_pipelined.v−172 tests/syntax-tests/source/VimL/source.vim−92 tests/syntax-tests/source/Vue/example.vue−60 tests/syntax-tests/source/Vyper/LICENSE.md−205 tests/syntax-tests/source/Vyper/crowdsale.vy−89 tests/syntax-tests/source/XAML/ItemPage.xaml−264 tests/syntax-tests/source/XAML/LICENSE.md−23 tests/syntax-tests/source/XML/example.xml−22 tests/syntax-tests/source/YAML/example.yaml−34 tests/syntax-tests/source/Zig/example.zig−107 tests/syntax-tests/source/cmd-help/test.cmd-help−54 tests/syntax-tests/source/dash/LICENSE.md−23 tests/syntax-tests/source/dash/shfm−425 tests/syntax-tests/source/gnuplot/test.gp−19 tests/syntax-tests/source/http-request-response/example.http−44 tests/syntax-tests/source/jsonnet/LICENSE.md−206 tests/syntax-tests/source/jsonnet/stdlib.jsonnet−88 tests/syntax-tests/source/nginx/nginx.conf−140 tests/syntax-tests/source/nim/main.nim−41 tests/syntax-tests/source/nim/test.nimble−23 tests/syntax-tests/source/nix/test.nix−15 tests/syntax-tests/source/orgmode/test.org−38 tests/syntax-tests/source/reStructuredText/reference.rst−320 tests/syntax-tests/source/resolv.conf/resolv.conf−4 tests/syntax-tests/source/varlink/LICENSE.md−229 tests/syntax-tests/source/varlink/org.varlink.certification.varlink−86 tests/syntax-tests/test_custom_assets.sh−74 tests/syntax-tests/update.sh−7 tests/tester.rs+19−21 tests/utils/mocked_pagers.rs−69 tests/utils/mod.rs−1
.github/.codecov.ymldeleted−1
@@ -1 +0,0 @@
1−comment: false
.github/FUNDING.ymldeleted−1
@@ -1 +0,0 @@
1−github: [sharkdp, keith-hall, Enselic]
.github/ISSUE_TEMPLATE/bug_report.md+15−40
@@ -8,57 +8,32 @@ assignees: ''
88---
99
1010<!--
11+Hey there, thanks for creating an issue!
1112
12−Hey there, thank you for reporting a bug!
13+In order to reproduce your issue, we might need to know a little bit more about the environment
14+which you're running `bat` on.
1315
14−Please note that the following bugs have already been reported:
15−
16−* dpkg: error processing archive /some/path/some-program.deb (--unpack):
17− trying to overwrite '/usr/.crates2.json'
18−
19− See https://github.com/sharkdp/bat/issues/938
16+If you're on Linux or MacOS:
17+ Please run the script at https://github.com/sharkdp/bat/blob/master/diagnostics/info.sh and
18+ paste the output at the bottom of the bug report.
2019
20+If you're on Windows:
21+ Please tell us about your Windows Version (e.g. "Windows 10 1908") at the
22+ bottom of the bug report.
2123-->
2224
23−**What steps will reproduce the bug?**
24−
25−1. step 1
26−2. step 2
27−3. ...
28−
29−**What happens?**
25+**What version of `bat` are you using?**
26+[paste the output of `bat --version` here]
3027
28+**Describe the bug you encountered:**
3129...
3230
33−**What did you expect to happen instead?**
34−
31+**Describe what you expected to happen?**
3532...
3633
37−
3834**How did you install `bat`?**
39−
40−<!-- apt-get, homebrew, GitHub release, etc. -->
35+apt-get, homebrew, GitHub release, etc.
4136
4237---
4338
44−**bat version and environment**
45−
46−<!--
47−In order to reproduce your issue, please add some information about the environment
48−in which you're running bat. To do this, run the full `bat` command that demonstrates
49−the bug, and attach the `--diagnostic` option:
50−
51− bat [other options and arguments…] --diagnostic
52−
53−Finally, paste the Markdown output here. Please make sure that it does not reveal any
54−personal information.
55−
56−
57−If you are running bat 0.17.1 or older (where --diagnostic is not available), please
58−run the script at
59−
60− https://github.com/sharkdp/bat/blob/master/diagnostics/info.sh
61−
62−(click "Raw" to get the actual source code) and paste the Markdown output here. If you
63−are on Windows, please let us know your bat version and your Windows version.
64−-->
39+[paste the output of `info.sh` here]
.github/ISSUE_TEMPLATE/config.yml+1
@@ -1 +1,2 @@
11blank_issues_enabled: true
2+
.github/ISSUE_TEMPLATE/feature_request.md+1
@@ -7,3 +7,4 @@ assignees: ''
77
88---
99
10+
.github/ISSUE_TEMPLATE/question.md+1−2
@@ -7,5 +7,4 @@ assignees: ''
77
88---
99
10−<!-- Using a normal ticket is still fine, but feel free to ask your
11−questions about bat on https://github.com/sharkdp/bat/discussions instead. -->
10+
.github/dependabot.ymldeleted−18
@@ -1,18 +0,0 @@
1−version: 2
2−updates:
3−- package-ecosystem: cargo
4− directory: "/"
5− schedule:
6− interval: monthly
7− time: "04:00"
8− timezone: Europe/Berlin
9− ignore:
10− - dependency-name: git2
11− versions:
12− - 0.13.17
13−- package-ecosystem: gitsubmodule
14− directory: "/"
15− schedule:
16− interval: monthly
17− time: "04:00"
18− timezone: Europe/Berlin
.github/workflows/CICD.yml+229−417
@@ -1,190 +1,175 @@
11name: CICD
22
33env:
4− MIN_SUPPORTED_RUST_VERSION: "1.51.0"
5− CICD_INTERMEDIATES_DIR: "_cicd-intermediates"
4+ PROJECT_NAME: bat
5+ PROJECT_DESC: "A `cat` clone with wings"
6+ PROJECT_AUTH: "sharkdp"
7+ RUST_MIN_SRV: "1.40.0"
68
7−on:
8− workflow_dispatch:
9− pull_request:
10− push:
11− branches:
12− - master
13− tags:
14− - '*'
9+on: [push, pull_request]
1510
1611jobs:
17− ensure_cargo_fmt:
18− name: Ensure 'cargo fmt' has been run
19− runs-on: ubuntu-20.04
20− steps:
21− - uses: actions-rs/toolchain@v1
22− with:
23− toolchain: stable
24− default: true
25− profile: minimal
26− components: rustfmt
27− - uses: actions/checkout@v2
28− - run: cargo fmt -- --check
29−
30− license_checks:
31− name: License checks
32− runs-on: ubuntu-20.04
33− steps:
34− - uses: actions/checkout@v2
35− with:
36− submodules: true # we especially want to perform license checks on submodules
37− - run: tests/scripts/license-checks.sh
38−
3912 min_version:
40− name: Minimum supported rust version
41− runs-on: ubuntu-20.04
13+ name: MinSRV # Minimum supported rust version
14+ runs-on: ubuntu-latest
4215 steps:
43− - name: Checkout source code
44− uses: actions/checkout@v2
45−
46− - name: Install rust toolchain (v${{ env.MIN_SUPPORTED_RUST_VERSION }})
16+ - uses: actions/checkout@v1
17+ - name: Install `rust` toolchain (v${{ env.RUST_MIN_SRV }})
4718 uses: actions-rs/toolchain@v1
4819 with:
49− toolchain: ${{ env.MIN_SUPPORTED_RUST_VERSION }}
20+ toolchain: ${{ env.RUST_MIN_SRV }}
5021 default: true
5122 profile: minimal # minimal component installation (ie, no documentation)
52− components: clippy
53− - name: Run clippy (on minimum supported rust version to prevent warnings we can't fix)
54− uses: actions-rs/cargo@v1
55− with:
56− command: clippy
57− args: --locked --all-targets --all-features
58− - name: Run tests
23+ - name: Test
5924 uses: actions-rs/cargo@v1
6025 with:
6126 command: test
62− args: --locked
63−
64− test_with_new_syntaxes_and_themes:
65− name: Run tests with updated syntaxes and themes
66− runs-on: ubuntu-20.04
67− steps:
68− - name: Git checkout
69− uses: actions/checkout@v2
70− with:
71− submodules: true # we need all syntax and theme submodules
72− - name: Install Rust toolchain
73− uses: actions-rs/toolchain@v1
74− with:
75− toolchain: stable
76− default: true
77− profile: minimal
78− - name: Build and install bat
79− uses: actions-rs/cargo@v1
80− with:
81− command: install
82− args: --locked --path .
83− - name: Rebuild binary assets (syntaxes and themes)
84− run: bash assets/create.sh
85− - name: Build and install bat with updated assets
86− uses: actions-rs/cargo@v1
87− with:
88− command: install
89− args: --locked --path .
90− - name: Run unit tests with new syntaxes and themes
91− uses: actions-rs/cargo@v1
92− with:
93− command: test
94− args: --locked --release
95− - name: Run ignored-by-default unit tests with new syntaxes and themes
96− uses: actions-rs/cargo@v1
97− with:
98− command: test
99− args: --locked --release -- --ignored
100− - name: Syntax highlighting regression test
101− run: tests/syntax-tests/regression_test.sh
102− - name: List of languages
103− run: bat --list-languages
104− - name: List of themes
105− run: bat --list-themes
106− - name: Test custom assets
107− run: tests/syntax-tests/test_custom_assets.sh
108−
109− documentation:
110− name: Documentation
111− runs-on: ubuntu-20.04
112− steps:
113− - name: Git checkout
114− uses: actions/checkout@v2
115− - name: Install Rust toolchain
116− uses: actions-rs/toolchain@v1
117− with:
118− toolchain: stable
119− default: true
120− profile: minimal
121− - name: Print -h
122− uses: actions-rs/cargo@v1
123− with:
124− command: run
125− args: --locked -- -h
126− - name: Print --help
127− uses: actions-rs/cargo@v1
128− with:
129− command: run
130− args: --locked -- --help
131− - name: Show man page
132− run: man $(find . -name bat.1)
133− - name: Check documentation
134− env:
135− RUSTDOCFLAGS: -D warnings
136− uses: actions-rs/cargo@v1
137− with:
138− command: doc
139− args: --locked --no-deps --document-private-items --all-features
14027
14128 build:
142− name: ${{ matrix.job.target }} (${{ matrix.job.os }})
29+ name: Build
14330 runs-on: ${{ matrix.job.os }}
14431 strategy:
14532 fail-fast: false
14633 matrix:
14734 job:
148− - { target: aarch64-unknown-linux-gnu , os: ubuntu-20.04, use-cross: true }
149− - { target: arm-unknown-linux-gnueabihf , os: ubuntu-20.04, use-cross: true }
150− - { target: arm-unknown-linux-musleabihf, os: ubuntu-20.04, use-cross: true }
151− - { target: i686-pc-windows-msvc , os: windows-2019 }
152− - { target: i686-unknown-linux-gnu , os: ubuntu-20.04, use-cross: true }
153− - { target: i686-unknown-linux-musl , os: ubuntu-20.04, use-cross: true }
154− - { target: x86_64-apple-darwin , os: macos-10.15 }
155− - { target: x86_64-pc-windows-gnu , os: windows-2019 }
156− - { target: x86_64-pc-windows-msvc , os: windows-2019 }
157− - { target: x86_64-unknown-linux-gnu , os: ubuntu-20.04, use-cross: true }
158− - { target: x86_64-unknown-linux-musl , os: ubuntu-20.04, use-cross: true }
35+ # { os, target, cargo-options, features, use-cross, toolchain }
36+ - { os: ubuntu-latest , target: arm-unknown-linux-gnueabihf , use-cross: use-cross }
37+ - { os: ubuntu-18.04 , target: aarch64-unknown-linux-gnu , use-cross: use-cross }
38+ - { os: ubuntu-18.04 , target: i586-unknown-linux-gnu , use-cross: use-cross }
39+ - { os: ubuntu-18.04 , target: i586-unknown-linux-musl , use-cross: use-cross }
40+ - { os: ubuntu-18.04 , target: i686-unknown-linux-gnu , use-cross: use-cross }
41+ - { os: ubuntu-18.04 , target: i686-unknown-linux-musl , use-cross: use-cross }
42+ - { os: ubuntu-18.04 , target: x86_64-unknown-linux-gnu , use-cross: use-cross }
43+ - { os: ubuntu-18.04 , target: x86_64-unknown-linux-musl , use-cross: use-cross }
44+ - { os: ubuntu-16.04 , target: x86_64-unknown-linux-gnu , use-cross: use-cross }
45+ - { os: macos-latest , target: x86_64-apple-darwin }
46+ # - { os: windows-latest , target: i686-pc-windows-gnu } ## disabled; linker errors (missing '_imp____acrt_iob_func')
47+ - { os: windows-latest , target: i686-pc-windows-msvc }
48+ # - { os: windows-latest , target: x86_64-pc-windows-gnu } ## disabled; linker errors (missing '_imp____acrt_iob_func')
49+ - { os: windows-latest , target: x86_64-pc-windows-msvc }
15950 steps:
160− - name: Checkout source code
161− uses: actions/checkout@v2
162−
163− - name: Install prerequisites
51+ - uses: actions/checkout@v1
52+ - name: Install any prerequisites
16453 shell: bash
16554 run: |
16655 case ${{ matrix.job.target }} in
167− arm-unknown-linux-*) sudo apt-get -y update ; sudo apt-get -y install gcc-arm-linux-gnueabihf ;;
56+ arm-unknown-linux-gnueabihf) sudo apt-get -y update ; sudo apt-get -y install gcc-arm-linux-gnueabihf ;;
16857 aarch64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt-get -y install gcc-aarch64-linux-gnu ;;
16958 esac
170−
171− - name: Extract crate information
59+ - name: Initialize workflow variables
60+ id: vars
17261 shell: bash
17362 run: |
174− echo "PROJECT_NAME=$(sed -n 's/^name = "\(.*\)"/\1/p' Cargo.toml | head -n1)" >> $GITHUB_ENV
175− echo "PROJECT_VERSION=$(sed -n 's/^version = "\(.*\)"/\1/p' Cargo.toml | head -n1)" >> $GITHUB_ENV
176− echo "PROJECT_MAINTAINER=$(sed -n 's/^authors = \["\(.*\)"\]/\1/p' Cargo.toml)" >> $GITHUB_ENV
177− echo "PROJECT_HOMEPAGE=$(sed -n 's/^homepage = "\(.*\)"/\1/p' Cargo.toml)" >> $GITHUB_ENV
178−
179− - name: Install Rust toolchain
63+ # toolchain
64+ TOOLCHAIN="stable" ## default to "stable" toolchain
65+ # * specify alternate TOOLCHAIN for *-pc-windows-gnu targets; gnu targets on Windows are broken for the standard *-pc-windows-msvc toolchain (refs: <https://github.com/rust-lang/rust/issues/47048>, <https://github.com/rust-lang/rust/issues/53454>, <https://github.com/rust-lang/cargo/issues/6754>)
66+ case ${{ matrix.job.target }} in *-pc-windows-gnu) TOOLCHAIN="stable-${{ matrix.job.target }}" ;; esac;
67+ # * use requested TOOLCHAIN if specified
68+ if [ -n "${{ matrix.job.toolchain }}" ]; then TOOLCHAIN="${{ matrix.job.toolchain }}" ; fi
69+ echo set-output name=TOOLCHAIN::${TOOLCHAIN}
70+ echo ::set-output name=TOOLCHAIN::${TOOLCHAIN}
71+ # staging directory
72+ STAGING='_staging'
73+ echo set-output name=STAGING::${STAGING}
74+ echo ::set-output name=STAGING::${STAGING}
75+ # determine EXE suffix
76+ EXE_suffix="" ; case ${{ matrix.job.target }} in *-pc-windows-*) EXE_suffix=".exe" ;; esac;
77+ echo set-output name=EXE_suffix::${EXE_suffix}
78+ echo ::set-output name=EXE_suffix::${EXE_suffix}
79+ # parse commit reference info
80+ REF_NAME=${GITHUB_REF#refs/*/}
81+ unset REF_BRANCH ; case ${GITHUB_REF} in refs/heads/*) REF_BRANCH=${GITHUB_REF#refs/heads/} ;; esac;
82+ unset REF_TAG ; case ${GITHUB_REF} in refs/tags/*) REF_TAG=${GITHUB_REF#refs/tags/} ;; esac;
83+ REF_SHAS=${GITHUB_SHA:0:8}
84+ echo set-output name=REF_NAME::${REF_NAME}
85+ echo set-output name=REF_BRANCH::${REF_BRANCH}
86+ echo set-output name=REF_TAG::${REF_TAG}
87+ echo set-output name=REF_SHAS::${REF_SHAS}
88+ echo ::set-output name=REF_NAME::${REF_NAME}
89+ echo ::set-output name=REF_BRANCH::${REF_BRANCH}
90+ echo ::set-output name=REF_TAG::${REF_TAG}
91+ echo ::set-output name=REF_SHAS::${REF_SHAS}
92+ # parse target
93+ unset TARGET_ARCH ; case ${{ matrix.job.target }} in arm-unknown-linux-gnueabihf) TARGET_ARCH=arm ;; i686-*) TARGET_ARCH=i686 ;; x86_64-*) TARGET_ARCH=x86_64 ;; esac;
94+ echo set-output name=TARGET_ARCH::${TARGET_ARCH}
95+ echo ::set-output name=TARGET_ARCH::${TARGET_ARCH}
96+ unset TARGET_OS ; case ${{ matrix.job.target }} in *-linux-*) TARGET_OS=linux ;; *-apple-*) TARGET_OS=macos ;; *-windows-*) TARGET_OS=windows ;; esac;
97+ echo set-output name=TARGET_OS::${TARGET_OS}
98+ echo ::set-output name=TARGET_OS::${TARGET_OS}
99+ # package name
100+ PKG_suffix=".tar.gz" ; case ${{ matrix.job.target }} in *-pc-windows-*) PKG_suffix=".zip" ;; esac;
101+ PKG_BASENAME=${PROJECT_NAME}-${REF_TAG:-$REF_SHAS}-${{ matrix.job.target }}
102+ PKG_NAME=${PKG_BASENAME}${PKG_suffix}
103+ echo set-output name=PKG_suffix::${PKG_suffix}
104+ echo set-output name=PKG_BASENAME::${PKG_BASENAME}
105+ echo set-output name=PKG_NAME::${PKG_NAME}
106+ echo ::set-output name=PKG_suffix::${PKG_suffix}
107+ echo ::set-output name=PKG_BASENAME::${PKG_BASENAME}
108+ echo ::set-output name=PKG_NAME::${PKG_NAME}
109+ # deployable tag? (ie, leading "vM" or "M"; M == version number)
110+ unset DEPLOY ; if [[ $REF_TAG =~ ^[vV]?[0-9].* ]]; then DEPLOY='true' ; fi
111+ echo set-output name=DEPLOY::${DEPLOY:-<empty>/false}
112+ echo ::set-output name=DEPLOY::${DEPLOY}
113+ # DPKG architecture?
114+ unset DPKG_ARCH
115+ case ${{ matrix.job.target }} in
116+ aarch64-*-linux-*) DPKG_ARCH=arm64 ;;
117+ arm-*-linux-*hf) DPKG_ARCH=armhf ;;
118+ i686-*-linux-*) DPKG_ARCH=i686 ;;
119+ x86_64-*-linux-*) DPKG_ARCH=amd64 ;;
120+ esac;
121+ echo set-output name=DPKG_ARCH::${DPKG_ARCH}
122+ echo ::set-output name=DPKG_ARCH::${DPKG_ARCH}
123+ # DPKG version?
124+ unset DPKG_VERSION ; if [[ $REF_TAG =~ ^[vV]?[0-9].* ]]; then DPKG_VERSION=${REF_TAG/#[vV]/} ; fi
125+ echo set-output name=DPKG_VERSION::${DPKG_VERSION}
126+ echo ::set-output name=DPKG_VERSION::${DPKG_VERSION}
127+ # DPKG base name/conflicts?
128+ DPKG_BASENAME=${PROJECT_NAME}
129+ DPKG_CONFLICTS=${PROJECT_NAME}-musl
130+ case ${{ matrix.job.target }} in *-musl) DPKG_BASENAME=${PROJECT_NAME}-musl ; DPKG_CONFLICTS=${PROJECT_NAME} ;; esac;
131+ echo set-output name=DPKG_BASENAME::${DPKG_BASENAME}
132+ echo set-output name=DPKG_CONFLICTS::${DPKG_CONFLICTS}
133+ echo ::set-output name=DPKG_BASENAME::${DPKG_BASENAME}
134+ echo ::set-output name=DPKG_CONFLICTS::${DPKG_CONFLICTS}
135+ # DPKG name
136+ unset DPKG_NAME;
137+ if [[ -n $DPKG_ARCH && -n $DPKG_VERSION ]]; then DPKG_NAME="${DPKG_BASENAME}_${DPKG_VERSION}_${DPKG_ARCH}.deb" ; fi
138+ echo set-output name=DPKG_NAME::${DPKG_NAME}
139+ echo ::set-output name=DPKG_NAME::${DPKG_NAME}
140+ # target-specific options
141+ # * CARGO_USE_CROSS (truthy)
142+ CARGO_USE_CROSS='true' ; case '${{ matrix.job.use-cross }}' in ''|0|f|false|n|no) unset CARGO_USE_CROSS ;; esac;
143+ echo set-output name=CARGO_USE_CROSS::${CARGO_USE_CROSS:-<empty>/false}
144+ echo ::set-output name=CARGO_USE_CROSS::${CARGO_USE_CROSS}
145+ # # * `arm` cannot be tested on ubuntu-* hosts (b/c testing is currently primarily done via comparison of target outputs with built-in outputs and the `arm` target is not executable on the host)
146+ JOB_DO_TESTING="true"
147+ case ${{ matrix.job.target }} in arm-*) unset JOB_DO_TESTING ;; esac;
148+ echo set-output name=JOB_DO_TESTING::${JOB_DO_TESTING:-<empty>/false}
149+ echo ::set-output name=JOB_DO_TESTING::${JOB_DO_TESTING}
150+ # # * test only library unit tests and binary for arm-type targets
151+ unset CARGO_TEST_OPTIONS
152+ unset CARGO_TEST_OPTIONS ; case ${{ matrix.job.target }} in arm-* | aarch64-*) CARGO_TEST_OPTIONS="--lib --bin ${PROJECT_NAME}" ;; esac;
153+ echo set-output name=CARGO_TEST_OPTIONS::${CARGO_TEST_OPTIONS}
154+ echo ::set-output name=CARGO_TEST_OPTIONS::${CARGO_TEST_OPTIONS}
155+ # * executable for `strip`?
156+ STRIP="strip" ; case ${{ matrix.job.target }} in arm-unknown-linux-gnueabihf) STRIP="arm-linux-gnueabihf-strip" ;; aarch64-unknown-linux-gnu) STRIP="aarch64-linux-gnu-strip" ;; *-pc-windows-msvc) STRIP="" ;; esac;
157+ echo set-output name=STRIP::${STRIP}
158+ echo ::set-output name=STRIP::${STRIP}
159+ - name: Create all needed build/work directories
160+ shell: bash
161+ run: |
162+ mkdir -p '${{ steps.vars.outputs.STAGING }}'
163+ mkdir -p '${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.PKG_BASENAME }}'
164+ mkdir -p '${{ steps.vars.outputs.STAGING }}/dpkg'
165+ - name: rust toolchain ~ install
180166 uses: actions-rs/toolchain@v1
181167 with:
182− toolchain: stable
168+ toolchain: ${{ steps.vars.outputs.TOOLCHAIN }}
183169 target: ${{ matrix.job.target }}
184170 override: true
185171 profile: minimal # minimal component installation (ie, no documentation)
186−
187− - name: Show version information (Rust, cargo, GCC)
172+ - name: Info
188173 shell: bash
189174 run: |
190175 gcc --version || true
@@ -193,290 +178,117 @@ jobs:
193178 rustup default
194179 cargo -V
195180 rustc -V
196−
197181 - name: Build
198182 uses: actions-rs/cargo@v1
199183 with:
200− use-cross: ${{ matrix.job.use-cross }}
184+ use-cross: ${{ steps.vars.outputs.CARGO_USE_CROSS }}
201185 command: build
202− args: --locked --release --target=${{ matrix.job.target }}
203−
204− - name: Strip debug information from executable
205− id: strip
206− shell: bash
207− run: |
208− # Figure out suffix of binary
209− EXE_suffix=""
210− case ${{ matrix.job.target }} in
211− *-pc-windows-*) EXE_suffix=".exe" ;;
212− esac;
213−
214− # Figure out what strip tool to use if any
215− STRIP="strip"
216− case ${{ matrix.job.target }} in
217− arm-unknown-linux-*) STRIP="arm-linux-gnueabihf-strip" ;;
218− aarch64-unknown-linux-gnu) STRIP="aarch64-linux-gnu-strip" ;;
219− *-pc-windows-msvc) STRIP="" ;;
220− esac;
221−
222− # Setup paths
223− BIN_DIR="${{ env.CICD_INTERMEDIATES_DIR }}/stripped-release-bin/"
224− mkdir -p "${BIN_DIR}"
225− BIN_NAME="${{ env.PROJECT_NAME }}${EXE_suffix}"
226− BIN_PATH="${BIN_DIR}/${BIN_NAME}"
227−
228− # Copy the release build binary to the result location
229− cp "target/${{ matrix.job.target }}/release/${BIN_NAME}" "${BIN_DIR}"
230−
231− # Also strip if possible
232− if [ -n "${STRIP}" ]; then
233− "${STRIP}" "${BIN_PATH}"
234− fi
235−
236− # Let subsequent steps know where to find the (stripped) bin
237− echo ::set-output name=BIN_PATH::${BIN_PATH}
238− echo ::set-output name=BIN_NAME::${BIN_NAME}
239−
240− - name: Set testing options
241− id: test-options
242− shell: bash
243− run: |
244− # test only library unit tests and binary for arm-type targets
245− unset CARGO_TEST_OPTIONS
246− unset CARGO_TEST_OPTIONS ; case ${{ matrix.job.target }} in arm-* | aarch64-*) CARGO_TEST_OPTIONS="--lib --bin ${PROJECT_NAME}" ;; esac;
247− echo ::set-output name=CARGO_TEST_OPTIONS::${CARGO_TEST_OPTIONS}
248−
249− - name: Run tests
186+ args: --release --target=${{ matrix.job.target }} ${{ matrix.job.cargo-options }}
187+ - name: Test
250188 uses: actions-rs/cargo@v1
251189 with:
252− use-cross: ${{ matrix.job.use-cross }}
190+ use-cross: ${{ steps.vars.outputs.CARGO_USE_CROSS }}
253191 command: test
254− args: --locked --target=${{ matrix.job.target }} ${{ steps.test-options.outputs.CARGO_TEST_OPTIONS}}
255−
256− - name: Run bat
257− uses: actions-rs/cargo@v1
258− with:
259− use-cross: ${{ matrix.job.use-cross }}
260− command: run
261− args: --locked --target=${{ matrix.job.target }} -- --paging=never --color=always --theme=ansi Cargo.toml src/config.rs
262−
263− - name: Show diagnostics (bat --diagnostic)
264− uses: actions-rs/cargo@v1
265− with:
266− use-cross: ${{ matrix.job.use-cross }}
267− command: run
268− args: --locked --target=${{ matrix.job.target }} -- --paging=never --color=always --theme=ansi Cargo.toml src/config.rs --diagnostic
269−
270− - name: "Feature check: regex-onig"
271− uses: actions-rs/cargo@v1
272− with:
273− use-cross: ${{ matrix.job.use-cross }}
274− command: check
275− args: --locked --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig
276−
277− - name: "Feature check: regex-onig,git"
278− uses: actions-rs/cargo@v1
279− with:
280− use-cross: ${{ matrix.job.use-cross }}
281− command: check
282− args: --locked --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig,git
283−
284− - name: "Feature check: regex-onig,paging"
285− uses: actions-rs/cargo@v1
286− with:
287− use-cross: ${{ matrix.job.use-cross }}
288− command: check
289− args: --locked --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig,paging
290−
291− - name: "Feature check: regex-onig,git,paging"
292− uses: actions-rs/cargo@v1
293− with:
294− use-cross: ${{ matrix.job.use-cross }}
295− command: check
296− args: --locked --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig,git,paging
297−
298− - name: "Feature check: minimal-application"
299− uses: actions-rs/cargo@v1
192+ args: --target=${{ matrix.job.target }} ${{ steps.vars.outputs.CARGO_TEST_OPTIONS}} ${{ matrix.job.cargo-options }}
193+ - name: Archive executable artifacts
194+ uses: actions/upload-artifact@master
300195 with:
301− use-cross: ${{ matrix.job.use-cross }}
302− command: check
303− args: --locked --target=${{ matrix.job.target }} --verbose --no-default-features --features minimal-application
304−
305− - name: Create tarball
306− id: package
196+ name: ${{ env.PROJECT_NAME }}-${{ matrix.job.target }}
197+ path: target/${{ matrix.job.target }}/release/${{ env.PROJECT_NAME }}${{ steps.vars.outputs.EXE_suffix }}
198+ - name: Package
307199 shell: bash
308200 run: |
309− PKG_suffix=".tar.gz" ; case ${{ matrix.job.target }} in *-pc-windows-*) PKG_suffix=".zip" ;; esac;
310− PKG_BASENAME=${PROJECT_NAME}-v${PROJECT_VERSION}-${{ matrix.job.target }}
311− PKG_NAME=${PKG_BASENAME}${PKG_suffix}
312− echo ::set-output name=PKG_NAME::${PKG_NAME}
313−
314− PKG_STAGING="${{ env.CICD_INTERMEDIATES_DIR }}/package"
315− ARCHIVE_DIR="${PKG_STAGING}/${PKG_BASENAME}/"
316− mkdir -p "${ARCHIVE_DIR}"
317− mkdir -p "${ARCHIVE_DIR}/autocomplete"
318−
319− # Binary
320− cp "${{ steps.strip.outputs.BIN_PATH }}" "$ARCHIVE_DIR"
321−
322− # Man page
323− cp 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/manual/bat.1 "$ARCHIVE_DIR"
324−
325− # README, LICENSE and CHANGELOG files
326− cp "README.md" "LICENSE-MIT" "LICENSE-APACHE" "CHANGELOG.md" "$ARCHIVE_DIR"
327−
328− # Autocompletion files
329− cp 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.bash "$ARCHIVE_DIR/autocomplete/${{ env.PROJECT_NAME }}.bash"
330− cp 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.fish "$ARCHIVE_DIR/autocomplete/${{ env.PROJECT_NAME }}.fish"
331− cp 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/_bat.ps1 "$ARCHIVE_DIR/autocomplete/_${{ env.PROJECT_NAME }}.ps1"
332− cp 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.zsh "$ARCHIVE_DIR/autocomplete/${{ env.PROJECT_NAME }}.zsh"
333−
201+ # binary
202+ cp 'target/${{ matrix.job.target }}/release/${{ env.PROJECT_NAME }}${{ steps.vars.outputs.EXE_suffix }}' '${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.PKG_BASENAME }}/'
203+ # `strip` binary (if needed)
204+ if [ -n "${{ steps.vars.outputs.STRIP }}" ]; then "${{ steps.vars.outputs.STRIP }}" '${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.PKG_BASENAME }}/${{ env.PROJECT_NAME }}${{ steps.vars.outputs.EXE_suffix }}' ; fi
205+ # README and LICENSE
206+ # * spell-checker:ignore EADME ICENSE
207+ (shopt -s nullglob; for f in [R]"EADME"{,.*}; do cp $f '${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.PKG_BASENAME }}/' ; done)
208+ (shopt -s nullglob; for f in [L]"ICENSE"{-*,}{,.*}; do cp $f '${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.PKG_BASENAME }}/' ; done)
334209 # base compressed package
335− pushd "${PKG_STAGING}/" >/dev/null
210+ pushd '${{ steps.vars.outputs.STAGING }}/' >/dev/null
336211 case ${{ matrix.job.target }} in
337− *-pc-windows-*) 7z -y a "${PKG_NAME}" "${PKG_BASENAME}"/* | tail -2 ;;
338− *) tar czf "${PKG_NAME}" "${PKG_BASENAME}"/* ;;
212+ *-pc-windows-*) 7z -y a '${{ steps.vars.outputs.PKG_NAME }}' '${{ steps.vars.outputs.PKG_BASENAME }}'/* | tail -2 ;;
213+ *) tar czf '${{ steps.vars.outputs.PKG_NAME }}' '${{ steps.vars.outputs.PKG_BASENAME }}'/* ;;
339214 esac;
340215 popd >/dev/null
341−
342− # Let subsequent steps know where to find the compressed package
343− echo ::set-output name=PKG_PATH::"${PKG_STAGING}/${PKG_NAME}"
344−
345− - name: Create Debian package
346− id: debian-package
347− shell: bash
348− if: startsWith(matrix.job.os, 'ubuntu')
349− run: |
350− COPYRIGHT_YEARS="2018 - "$(date "+%Y")
351− DPKG_STAGING="${{ env.CICD_INTERMEDIATES_DIR }}/debian-package"
352− DPKG_DIR="${DPKG_STAGING}/dpkg"
353− mkdir -p "${DPKG_DIR}"
354−
355− DPKG_BASENAME=${PROJECT_NAME}
356− DPKG_CONFLICTS=${PROJECT_NAME}-musl
357− case ${{ matrix.job.target }} in *-musl) DPKG_BASENAME=${PROJECT_NAME}-musl ; DPKG_CONFLICTS=${PROJECT_NAME} ;; esac;
358− DPKG_VERSION=${PROJECT_VERSION}
359−
360− unset DPKG_ARCH
361− case ${{ matrix.job.target }} in
362− aarch64-*-linux-*) DPKG_ARCH=arm64 ;;
363− arm-*-linux-*hf) DPKG_ARCH=armhf ;;
364− i686-*-linux-*) DPKG_ARCH=i686 ;;
365− x86_64-*-linux-*) DPKG_ARCH=amd64 ;;
366− *) DPKG_ARCH=notset ;;
367− esac;
368−
369− DPKG_NAME="${DPKG_BASENAME}_${DPKG_VERSION}_${DPKG_ARCH}.deb"
370− echo ::set-output name=DPKG_NAME::${DPKG_NAME}
371−
372− # Binary
373− install -Dm755 "${{ steps.strip.outputs.BIN_PATH }}" "${DPKG_DIR}/usr/bin/${{ steps.strip.outputs.BIN_NAME }}"
374−
375− # Man page
376− install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/manual/bat.1 "${DPKG_DIR}/usr/share/man/man1/${{ env.PROJECT_NAME }}.1"
377− gzip -n --best "${DPKG_DIR}/usr/share/man/man1/${{ env.PROJECT_NAME }}.1"
378−
379− # Autocompletion files
380− install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.bash "${DPKG_DIR}/usr/share/bash-completion/completions/${{ env.PROJECT_NAME }}"
381− install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.fish "${DPKG_DIR}/usr/share/fish/vendor_completions.d/${{ env.PROJECT_NAME }}.fish"
382− install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.zsh "${DPKG_DIR}/usr/share/zsh/vendor-completions/_${{ env.PROJECT_NAME }}"
383−
384− # README and LICENSE
385− install -Dm644 "README.md" "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/README.md"
386− install -Dm644 "LICENSE-MIT" "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/LICENSE-MIT"
387− install -Dm644 "LICENSE-APACHE" "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/LICENSE-APACHE"
388− install -Dm644 "CHANGELOG.md" "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/changelog"
389− gzip -n --best "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/changelog"
390−
391− cat > "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/copyright" <<EOF
392− Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
393− Upstream-Name: ${{ env.PROJECT_NAME }}
394− Source: ${{ env.PROJECT_HOMEPAGE }}
395−
396− Files: *
397− Copyright: ${{ env.PROJECT_MAINTAINER }}
398− Copyright: $COPYRIGHT_YEARS ${{ env.PROJECT_MAINTAINER }}
399− License: Apache-2.0 or MIT
400−
401− License: Apache-2.0
402− On Debian systems, the complete text of the Apache-2.0 can be found in the
403− file /usr/share/common-licenses/Apache-2.0.
404−
405− License: MIT
406− Permission is hereby granted, free of charge, to any
407− person obtaining a copy of this software and associated
408− documentation files (the "Software"), to deal in the
409− Software without restriction, including without
410− limitation the rights to use, copy, modify, merge,
411− publish, distribute, sublicense, and/or sell copies of
412− the Software, and to permit persons to whom the Software
413− is furnished to do so, subject to the following
414− conditions:
415− .
416− The above copyright notice and this permission notice
417− shall be included in all copies or substantial portions
418− of the Software.
419− .
420− THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
421− ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
422− TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
423− PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
424− SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
425− CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
426− OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
427− IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
428− DEALINGS IN THE SOFTWARE.
429− EOF
430− chmod 644 "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/copyright"
431−
216+ # dpkg
217+ if [ -n "${{ steps.vars.outputs.DPKG_NAME }}" ]; then
218+ DPKG_DIR="${{ steps.vars.outputs.STAGING }}/dpkg"
219+ # binary
220+ install -Dm755 'target/${{ matrix.job.target }}/release/${{ env.PROJECT_NAME }}${{ steps.vars.outputs.EXE_suffix }}' "${DPKG_DIR}/usr/bin/${{ env.PROJECT_NAME }}${{ steps.vars.outputs.EXE_suffix }}"
221+ if [ -n "${{ steps.vars.outputs.STRIP }}" ]; then "${{ steps.vars.outputs.STRIP }}" "${DPKG_DIR}/usr/bin/${{ env.PROJECT_NAME }}${{ steps.vars.outputs.EXE_suffix }}" ; fi
222+ # README and LICENSE
223+ (shopt -s nullglob; for f in [R]"EADME"{,.*}; do install -Dm644 "$f" "${DPKG_DIR}/usr/share/doc/${{ env.PROJECT_NAME }}/$f" ; done)
224+ (shopt -s nullglob; for f in [L]"ICENSE"{-*,}{,.*}; do install -Dm644 "$f" "${DPKG_DIR}/usr/share/doc/${{ env.PROJECT_NAME }}/$f" ; done)
432225 # control file
433226 mkdir -p "${DPKG_DIR}/DEBIAN"
434− cat > "${DPKG_DIR}/DEBIAN/control" <<EOF
435− Package: ${DPKG_BASENAME}
436− Version: ${DPKG_VERSION}
437− Section: utils
438− Priority: optional
439− Maintainer: ${{ env.PROJECT_MAINTAINER }}
440− Homepage: ${{ env.PROJECT_HOMEPAGE }}
441− Architecture: ${DPKG_ARCH}
442− Provides: ${{ env.PROJECT_NAME }}
443− Conflicts: ${DPKG_CONFLICTS}
444− Description: cat(1) clone with wings.
445− A cat(1) clone with syntax highlighting and Git integration.
446− EOF
447−
448− DPKG_PATH="${DPKG_STAGING}/${DPKG_NAME}"
449− echo ::set-output name=DPKG_PATH::${DPKG_PATH}
450−
451− # build dpkg
452− fakeroot dpkg-deb --build "${DPKG_DIR}" "${DPKG_PATH}"
453−
454− - name: "Artifact upload: tarball"
455− uses: actions/upload-artifact@master
456− with:
457− name: ${{ steps.package.outputs.PKG_NAME }}
458− path: ${{ steps.package.outputs.PKG_PATH }}
459−
460− - name: "Artifact upload: Debian package"
461− uses: actions/upload-artifact@master
462− if: steps.debian-package.outputs.DPKG_NAME
227+ printf "Package: ${{ steps.vars.outputs.DPKG_BASENAME }}\nVersion: ${{ steps.vars.outputs.DPKG_VERSION }}\nSection: utils\nPriority: optional\nMaintainer: ${{ env.PROJECT_AUTH }}\nArchitecture: ${{ steps.vars.outputs.DPKG_ARCH }}\nProvides: ${{ env.PROJECT_NAME }}\nConflicts: ${{ steps.vars.outputs.DPKG_CONFLICTS }}\nDescription: ${{ env.PROJECT_DESC }}\n" > "${DPKG_DIR}/DEBIAN/control"
228+ # build dpkg
229+ fakeroot dpkg-deb --build "${DPKG_DIR}" "${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.DPKG_NAME }}"
230+ fi
231+ - name: Publish
232+ uses: softprops/action-gh-release@v1
233+ if: steps.vars.outputs.DEPLOY
463234 with:
464− name: ${{ steps.debian-package.outputs.DPKG_NAME }}
465− path: ${{ steps.debian-package.outputs.DPKG_PATH }}
235+ files: |
236+ ${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.PKG_NAME }}
237+ ${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.DPKG_NAME }}
238+ env:
239+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
466240
467− - name: Check for release
468− id: is-release
241+ coverage:
242+ name: Code Coverage
243+ runs-on: ${{ matrix.job.os }}
244+ strategy:
245+ fail-fast: true
246+ matrix:
247+ # job: [ { os: ubuntu-latest }, { os: macos-latest }, { os: windows-latest } ]
248+ job:
249+ - { os: ubuntu-latest , toolchain: nightly-2020-04-29 }
250+ - { os: macos-latest , toolchain: nightly-2020-04-29 }
251+ - { os: windows-latest , toolchain: nightly-2020-04-29-x86_64-pc-windows-gnu }
252+ steps:
253+ - uses: actions/checkout@v1
254+ - name: Initialize workflow variables
255+ id: vars
469256 shell: bash
470257 run: |
471− unset IS_RELEASE ; if [[ $GITHUB_REF =~ ^refs/tags/v[0-9].* ]]; then IS_RELEASE='true' ; fi
472− echo ::set-output name=IS_RELEASE::${IS_RELEASE}
473−
474− - name: Publish archives and packages
475− uses: softprops/action-gh-release@v1
476− if: steps.is-release.outputs.IS_RELEASE
258+ # toolchain
259+ TOOLCHAIN="nightly" ## default to "nightly" toolchain
260+ # * use requested TOOLCHAIN if specified
261+ if [ -n "${{ matrix.job.toolchain }}" ]; then TOOLCHAIN="${{ matrix.job.toolchain }}" ; fi
262+ # * use requested TOOLCHAIN if specified
263+ if [ -n "${{ matrix.job.toolchain }}" ]; then TOOLCHAIN="${{ matrix.job.toolchain }}" ; fi
264+ echo set-output name=TOOLCHAIN::${TOOLCHAIN}
265+ echo ::set-output name=TOOLCHAIN::${TOOLCHAIN}
266+ # target-specific options
267+ # * CODECOV_FLAGS
268+ CODECOV_FLAGS=$( echo "${{ matrix.job.os }}" | sed 's/[^[:alnum:]]/_/g' )
269+ echo set-output name=CODECOV_FLAGS::${CODECOV_FLAGS}
270+ echo ::set-output name=CODECOV_FLAGS::${CODECOV_FLAGS}
271+ - name: rust toolchain ~ install
272+ uses: actions-rs/toolchain@v1
477273 with:
478− files: |
479− ${{ steps.package.outputs.PKG_PATH }}
480− ${{ steps.debian-package.outputs.DPKG_PATH }}
274+ toolchain: ${{ steps.vars.outputs.TOOLCHAIN }}
275+ override: true
276+ profile: minimal # minimal component installation (ie, no documentation)
277+ - name: Test
278+ uses: actions-rs/cargo@v1
279+ with:
280+ command: test
281+ args: --no-fail-fast
481282 env:
482− GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
283+ CARGO_INCREMENTAL: '0'
284+ RUSTFLAGS: '-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Zno-landing-pads'
285+ - name: Generate coverage data
286+ id: coverage
287+ uses: actions-rs/grcov@v0.1
288+ - name: Upload coverage results (to Codecov.io)
289+ uses: codecov/codecov-action@v1
290+ with:
291+ file: ${{ steps.coverage.outputs.report }}
292+ flags: ${{ steps.vars.outputs.CODECOV_FLAGS }}
293+ name: codecov-umbrella
294+ fail_ci_if_error: false
.gitignore−2
@@ -2,8 +2,6 @@
22**/*.rs.bk
33
44# Generated files
5−/assets/completions/bat.bash
65/assets/completions/bat.fish
7−/assets/completions/bat.zsh
86/assets/manual/bat.1
97/assets/metadata.yaml
.gitmodules+13−72
@@ -61,12 +61,18 @@
6161[submodule "assets/syntaxes/Puppet"]
6262 path = assets/syntaxes/02_Extra/Puppet
6363 url = https://github.com/russCloak/SublimePuppet
64+[submodule "assets/syntaxes/CSV"]
65+ path = assets/syntaxes/02_Extra/CSV
66+ url = https://github.com/wadetb/Sublime-Text-Advanced-CSV
6467[submodule "assets/themes/onehalf"]
6568 path = assets/themes/onehalf
6669 url = https://github.com/sonph/onehalf
6770[submodule "assets/syntaxes/JavaScript (Babel)"]
6871 path = assets/syntaxes/02_Extra/JavaScript (Babel)
6972 url = https://github.com/babel/babel-sublime
73+[submodule "assets/syntaxes/Dart"]
74+ path = assets/syntaxes/02_Extra/Dart
75+ url = https://github.com/guillermooo/dart-sublime-bundle
7076[submodule "assets/syntaxes/FSharp"]
7177 path = assets/syntaxes/02_Extra/FSharp
7278 url = https://github.com/hoest/sublimetext-fsharp
@@ -91,6 +97,10 @@
9197[submodule "assets/syntaxes/Assembly (ARM)"]
9298 path = assets/syntaxes/02_Extra/Assembly (ARM)
9399 url = https://github.com/tvi/Sublime-ARM-Assembly
100+[submodule "assets/syntaxes/syslog-syntax"]
101+ path = assets/syntaxes/02_Extra/Syslog
102+ url = https://github.com/caos21/syslog-syntax.git
103+ branch = master
94104[submodule "assets/syntaxes/protobuf-syntax-highlighting"]
95105 path = assets/syntaxes/02_Extra/Protobuf
96106 url = https://github.com/VcamX/protobuf-syntax-highlighting.git
@@ -110,6 +120,9 @@
110120[submodule "assets/syntaxes/Org mode"]
111121 path = assets/syntaxes/02_Extra/Org mode
112122 url = https://github.com/jezcope/Org.tmbundle.git
123+[submodule "assets/syntaxes/requirementstxt"]
124+ path = assets/syntaxes/02_Extra/requirementstxt
125+ url = https://github.com/wuub/requirementstxt
113126[submodule "assets/syntaxes/DotENV"]
114127 path = assets/syntaxes/02_Extra/DotENV
115128 url = https://github.com/zaynali53/DotENV
@@ -172,75 +185,3 @@
172185[submodule "assets/syntaxes/02_Extra/AsciiDoc"]
173186 path = assets/syntaxes/02_Extra/AsciiDoc
174187 url = https://github.com/asciidoctor/sublimetext-asciidoc.git
175−[submodule "assets/syntaxes/02_Extra/GLSL"]
176− path = assets/syntaxes/02_Extra/GLSL
177− url = https://github.com/euler0/sublime-glsl
178−[submodule "assets/syntaxes/02_Extra/Nginx"]
179− path = assets/syntaxes/02_Extra/Nginx
180− url = https://github.com/brandonwamboldt/sublime-nginx
181−[submodule "assets/syntaxes/02_Extra/Apache"]
182− path = assets/syntaxes/02_Extra/Apache
183− url = https://github.com/colinta/ApacheConf.tmLanguage
184−[submodule "assets/syntaxes/02_Extra/Ninja"]
185− path = assets/syntaxes/02_Extra/Ninja
186− url = https://github.com/pope/SublimeNinja.git
187−[submodule "assets/syntaxes/02_Extra/Svelte"]
188− path = assets/syntaxes/02_Extra/Svelte
189− url = https://github.com/corneliusio/svelte-sublime
190−[submodule "assets/themes/Coldark"]
191− path = assets/themes/Coldark
192− url = https://github.com/ArmandPhilippot/coldark-bat.git
193−[submodule "assets/themes/gruvbox"]
194− path = assets/themes/gruvbox
195− url = https://github.com/subnut/gruvbox-tmTheme.git
196− branch = bat-source
197−[submodule "assets/syntaxes/02_Extra/Lean"]
198− path = assets/syntaxes/02_Extra/Lean
199− url = https://github.com/leanprover/vscode-lean.git
200−[submodule "assets/syntaxes/02_Extra/LiveScript"]
201− path = assets/syntaxes/02_Extra/LiveScript
202− url = https://github.com/paulmillr/LiveScript.tmbundle
203−[submodule "assets/syntaxes/02_Extra/Zig"]
204− path = assets/syntaxes/02_Extra/Zig
205− url = https://github.com/ziglang/sublime-zig-language.git
206−[submodule "assets/syntaxes/02_Extra/gnuplot"]
207− path = assets/syntaxes/02_Extra/gnuplot
208− url = https://github.com/hesstobi/sublime_gnuplot
209−[submodule "assets/syntaxes/02_Extra/SystemVerilog"]
210− path = assets/syntaxes/02_Extra/SystemVerilog
211− url = https://github.com/TheClams/SystemVerilog.git
212−[submodule "assets/themes/visual-studio-dark-plus"]
213− path = assets/themes/visual-studio-dark-plus
214− url = https://github.com/vidann1/visual-studio-dark-plus.git
215−[submodule "assets/syntaxes/02_Extra/SublimeEthereum"]
216− path = assets/syntaxes/02_Extra/SublimeEthereum
217− url = https://github.com/davidhq/SublimeEthereum.git
218−[submodule "assets/syntaxes/02_Extra/Groff"]
219− path = assets/syntaxes/02_Extra/Groff
220− url = https://github.com/carsonoid/sublime_man_page_support
221−[submodule "assets/syntaxes/02_Extra/http-request-response"]
222− path = assets/syntaxes/02_Extra/http-request-response
223− url = https://github.com/keith-hall/http-request-response-syntax.git
224−[submodule "assets/syntaxes/02_Extra/LLVM"]
225− path = assets/syntaxes/02_Extra/LLVM
226− url = https://github.com/ioncodes/LLVM.tmBundle
227−[submodule "assets/syntaxes/02_Extra/Slim"]
228− path = assets/syntaxes/02_Extra/Slim
229− url = https://github.com/slim-template/ruby-slim.tmbundle.git
230−[submodule "assets/syntaxes/02_Extra/Racket"]
231− path = assets/syntaxes/02_Extra/Racket
232− url = https://github.com/follesoe/sublime-racket.git
233−[submodule "assets/syntaxes/02_Extra/MediaWiki"]
234− path = assets/syntaxes/02_Extra/MediaWiki
235− url = https://github.com/tosher/Mediawiker.git
236−[submodule "assets/syntaxes/02_Extra/Dart"]
237− path = assets/syntaxes/02_Extra/Dart
238− url = https://github.com/elMuso/Dartlight.git
239−[submodule "assets/syntaxes/02_Extra/SublimeJQ"]
240− path = assets/syntaxes/02_Extra/SublimeJQ
241− url = https://github.com/zogwarg/SublimeJQ.git
242−[submodule "assets/syntaxes/02_Extra/cmd-help"]
243− path = assets/syntaxes/02_Extra/cmd-help
244− url = https://github.com/victor-gp/cmd-help-sublime-syntax.git
245− branch = main
246− shallow = true
.travis.ymlnew file+106
@@ -0,0 +1,106 @@
1+language: rust
2+
3+matrix:
4+ include:
5+ # Stable channel.
6+ - os: linux
7+ rust: stable
8+ env: TARGET=x86_64-unknown-linux-gnu
9+ - os: linux
10+ rust: stable
11+ env:
12+ - TARGET=x86_64-unknown-linux-musl
13+ - CC_x86_64_unknown_linux_musl=/usr/bin/musl-gcc
14+ - os: linux
15+ rust: stable
16+ env: TARGET=i686-unknown-linux-gnu
17+ - os: osx
18+ rust: stable
19+ env: TARGET=x86_64-apple-darwin
20+ - os: linux
21+ rust: stable
22+ env:
23+ - TARGET=arm-unknown-linux-gnueabihf
24+ - CC_arm_unknown_linux_gnueabihf=/usr/bin/arm-linux-gnueabihf-gcc-4.8
25+ - CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc-4.8
26+ - os: linux
27+ rust: stable
28+ env:
29+ - TARGET=aarch64-unknown-linux-gnu
30+ - CC_aarch64-unknown-linux-gnu=/usr/bin/aarch64-linux-gnu-gcc-4.8
31+ - CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc-4.8
32+
33+ # Minimum Rust supported channel.
34+ - os: linux
35+ rust: 1.40.0
36+ env: TARGET=x86_64-unknown-linux-gnu
37+ - os: linux
38+ rust: 1.40.0
39+ env:
40+ - TARGET=x86_64-unknown-linux-musl
41+ - CC_x86_64_unknown_linux_musl=/usr/bin/musl-gcc
42+ - os: osx
43+ rust: 1.40.0
44+ env: TARGET=x86_64-apple-darwin
45+
46+ # Disable nightly for now
47+ # # Code formatting check
48+ # - os: linux
49+ # rust: nightly
50+ # # skip the global install step
51+ # install:
52+ # - cargo install --debug --force rustfmt-nightly
53+ # script: cargo fmt -- --check
54+
55+sudo: required
56+
57+before_install:
58+ - ci/before_install.bash
59+
60+env:
61+ global:
62+ # Default target on travis-ci.
63+ # Used as conditional check in the install stage
64+ - HOST=x86_64-unknown-linux-gnu
65+ # Used on the deployment script
66+ - PROJECT_NAME=bat
67+
68+install:
69+ # prevent target re-add error from rustup
70+ - if [[ $TRAVIS_OS_NAME = linux && $HOST != $TARGET ]]; then rustup target add $TARGET; fi
71+
72+script:
73+ - ci/script.bash
74+
75+before_deploy:
76+ - bash ci/before_deploy.bash
77+
78+deploy:
79+ provider: releases
80+ # NOTE updating the `api_key.secure`
81+ # - go to: https://github.com/settings/tokens/new
82+ # - generate new token using `public_repo` scope
83+ # - encrypt it using: `travis encrypt API_KEY_HERE`
84+ # - paste the output below
85+ api_key:
86+ secure: "GZL8nYk+/MZGEqejpP0UMMGVmwUEdxiF9CflFIGccu+/tznDyHnHOpyJmbH3M5IKWIxa7xFgqOE8pHuD4oQXt4mzyJGB0KMKKEFLW7ckbTYKya5bw0heKznaqGnS0Yz+vpfqYR25eiPFYCz7mDsGsCzH5QZqt3cdn9MDQGu1D0IaxPjuBNH3T9kBblR0ifBd3Diy0JYhiVcMSI3V1rkel18F1yBHO2GQ95hkWxVgjANQnefq5+zdzbx4ki539ewYENShA8N0w6ULJVY9LmWRWJIp90ggOD3JCH6Nz/fBpYBqwfABO6Dr7Csw7IRm7pM4IVkFZS1taiDYFX9thxZh3UTmI4YYtSTPxH9NGV47kxPipbf4vAXFwW+1VcHKMpBzz+5IVsHnk1Pfx9/GZsXbqXM3PUWCStec36Xtqh5vQapDKEg9khkEs4b1X7/E73gvpRuQl9gbnyufSVWgDsXIWqM+0aDbqQz1FpLmVxz6eij0cB9vR+8kbNoe/CEPHPO9ZllvAHseukOeHPzSBd8rILORXaaGmQausXz2wWgSsffUSYz4705P8joI0zFCfmkHjL+kA1ZUx5SxLCc1ID7CFFZChhAxHoPL7xc21snswwr8QeheERdwvuzKNaerBGZEw8dmMMx98YkjftIj65DDySr2mRZuufBQeQpmMhFyIT4="
87+ # for uploading multiple files
88+ file_glob: true
89+ # NOTE explanation on each env variable
90+ # - PROJECT_NAME: name of the project, set on the `env.global` above
91+ # - TRAVIS_TAG: tag name that the build is being deployed for, usually the version number
92+ # - TARGET: target triple of the build
93+ file:
94+ - $PROJECT_NAME-$TRAVIS_TAG-$TARGET.*
95+ - $PROJECT_NAME*.deb
96+ # don't delete artifacts from previous stage
97+ skip_cleanup: true
98+ on:
99+ # deploy only if we push a tag
100+ tags: true
101+ # deploy only on stable channel that has TARGET env variable sets
102+ condition: $TRAVIS_RUST_VERSION = stable && $TARGET != ""
103+
104+notifications:
105+ email:
106+ on_success: never
CHANGELOG.md+1−304
@@ -2,316 +2,15 @@
22
33## Features
44
5−- Make the default macOS theme depend on Dark Mode. See #2197, #1746 (@Enselic)
6−
7−## Bugfixes
8−
9−## Other
10−
11−- Relaxed glibc requirements on amd64, see #2106 and #2194 (@sharkdp)
12−
13−## Syntaxes
14−
15−## Themes
16−
17−## `bat` as a library
18−
19−
20−# v0.21.0
21−
22−## Features
23−
24−- Correctly render tab stops in `--show-all`, see #2038 (@Synthetica9)
25−- Add a `--style=default` option and make it the default. It is less verbose than `full`, see #2061 (@IsaacHorvath)
26−- Enable BusyBox `less` as pager, see #2162 (@nfisher1226)
27−- File extensions are now matched case-insensitively. See #1854, #2181 (@Enselic)
28−
29−## Bugfixes
30−
31−- Bump `regex` dependency from 1.5.4 to 1.5.5 to fix [CVE-2022-24713](https://blog.rust-lang.org/2022/03/08/cve-2022-24713.html), see #2145, #2139 (@Enselic)
32−- `bat` no longer crashes when encountering files that references missing syntaxes. See #915, #2181 (@Enselic)
33−
34−## Performance
35−
36−- Skip syntax highlighting on long lines (> 16384 chars) to help improve performance. See #2165 (@keith-hall)
37−- Vastly improve startup time by lazy-loading syntaxes via syntect 5.0.0. This makes bat display small files ~75% faster than before. See #951, #2181 (@Enselic)
38−
39−## Other
40−
41−- Include info about custom assets in `--diagnostics` if used. See #2107, #2144 (@Enselic)
42−
43−## Syntaxes
44−
45−- Mapped clang-format config file (.clang-format) to YAML syntax (@TruncatedDinosour)
46−- log syntax: improved handling of escape characters in double quoted strings. See #2123 (@keith-hall)
47−- Associate `/var/spool/mail/*` and `/var/mail/*` with the `Email` syntax. See #2156 (@cyqsimon)
48−- Added cmd-help syntax to scope --help messages. See #2148 (@victor-gp)
49−- Slightly adjust Zig syntax. See #2136 (@Enselic)
50−- Associate `.inf` files with the `INI` syntax. See #2190 (@Enselic)
51−
52−## `bat` as a library
53−
54−- Allow configuration of `show_nonprintable` with `PrettyPrinter`, see #2142
55−- The binary format of syntaxes.bin has been changed due to syntaxes now being lazy-loaded via syntect 5.0.0. See #2181 (@Enselic)
56−- Mark `bat::error::Error` enum as `#[non_exhaustive]` to allow adding new variants without future semver breakage. See #2181 (@Enselic)
57−- Change `Error::SyntectError(syntect::LoadingError)` to `Error::SyntectError(syntect::Error)`. See #2181 (@Enselic)
58−- Add `Error::SyntectLoadingError(syntect::LoadingError)` enum variant. See #2181 (@Enselic)
59−
60−
61−# v0.20.0
62−
63−## Features
64−
65−- New style component `header-filesize` to show size of the displayed file in the header. See #1988 (@mdibaiee)
66−- Use underline for line highlighting on ANSI, see #1730 (@mdibaiee)
67−
68−## Bugfixes
69−
70−- Fix bash completion on bash 3.x and bash-completion 1.x. See #2066 (@joshpencheon)
71−
72−## Syntaxes
73−
74−- `GraphQL`: Add support for interfaces implementing interfaces and consider ampersand an operator. See #2000
75−- Associate `_vimrc` and `_gvimrc` files with the `VimL` syntax. See #2002
76−- Associate `poetry.lock` files with the `TOML` syntax. See #2049
77−- Associate `.mesh`, `.task`, `.rgen`, `.rint`, `.rahit`, `.rchit`, `.rmiss`, and `.rcall` with the `GLSL` syntax. See #2050
78−- Added support for `JQ` syntax, see #2072
79−- Properly associate global git config files rooted in `$XDG_CONFIG_HOME/git/` or `$HOME/.config/git/`. See #2067 (@cyqsimon)
80−
81−## `bat` as a library
82−
83−- Exposed `get_syntax_set` and `get_theme` methods on `HighlightingAssets`. See #2030 (@dandavison)
84−- Added `HeaderFilename` and `HeaderFilesize` to `StyleComponent` enum, and mark it `#[non_exhaustive]`. See #1988 (@mdibaiee)
85−
86−
87−# v0.19.0
88−
89−## Performance
90−
91−- Reduce startup time in loop-through mode (e.g. when redirecting output) by 90%. See #1747 (@Enselic)
92−- Load themes lazily to make bat start 25% faster when disregarding syntax load time. See #1969 (@Enselic)
93−- Python syntax highlighting no longer suffers from abysmal performance in specific scenarios. See #1688 (@keith-hall)
94−- Fix for poor performance when ANSI escape sequences are piped to `bat`, see #1596 (@eth-p)
95−- Fix for incorrect handling of ANSI escape sequences when using `--wrap=never`, see #1596 (@eth-p)
96−- Load custom assets as fast as integrated assets, see #1753 (@Enselic)
97−
98−## Features
99−
100−- Support for `x:-delta` (minus) syntax in line ranges (e.g. `20:-10`). See #1901 (@bojan88)
101−- Support for `--ignored-suffix` argument. See #1892 (@bojan88)
102−- `$BAT_CONFIG_DIR` is now a recognized environment variable. It has precedence over `$XDG_CONFIG_HOME`, see #1727 (@billrisher)
103−- Support for `x:+delta` syntax in line ranges (e.g. `20:+10`). See #1810 (@bojan88)
104−- Add new `--acknowledgements` option that gives credit to theme and syntax definition authors. See #1971 (@Enselic)
105−- Include git hash in `bat -V` and `bat --version` output if present. See #1921 (@Enselic)
106−
107−## Bugfixes
108−
109−- First line not shown in diff context. See #1891 (@divagant-martian)
110−- Do not ignore syntaxes that handle file names with a `*.conf` extension. See #1703 (@cbolgiano)
111−
112−## Other
113−
114−- Add PowerShell completion, see #1826 (@rashil2000)
115−- Minimum supported Rust version (MSRV) bumped to 1.51, see #1994 (@mdibaiee)
116−
117−## Syntaxes
118−
119−- Groff, see #1685 (@scop)
120−- HTTP Requests and Responses, see #1748 (@keith-hall)
121−- LLVM, see #1777 (@ioncodes)
122−- Highlight for `vimrc` and `gvimrc` files, see #1763 (@SuperSandro2000)
123−- Syslog highlighting improvements, see #1793 (@scop)
124−- Added support for `slim` syntax, see #1693 (@mfinelli)
125−- Racket, see #1884 (@jubnzv)
126−- LiveScript, see #1915 (@Enselic)
127−- MediaWiki, see #1925 (@sorairolake)
128−- The `requirements.txt` syntax has been removed due to incompatible license requirements.
129−- Dart, new highlighter, see #1959 (@Ersikan)
130−- SCSS and Sass syntaxes updated, see #1766 (@Enselic)
131−- PowerShell syntax updated, see #1935 (@Enselic)
132−- TypeScript syntax updated, see #1834 (@Enselic)
133−
134−## `bat` as a library
135−
136−- Deprecate `HighlightingAssets::syntaxes()` and `HighlightingAssets::syntax_for_file_name()`. Use `HighlightingAssets::get_syntaxes()` and `HighlightingAssets::get_syntax_for_path()` instead. They return a `Result` which is needed for upcoming lazy-loading work to improve startup performance. They also return which `SyntaxSet` the returned `SyntaxReference` belongs to. See #1747, #1755, #1776, #1862 (@Enselic)
137−- Remove `HighlightingAssets::from_files` and `HighlightingAssets::save_to_cache`. Instead of calling the former and then the latter you now make a single call to `bat::assets::build`. See #1802, #1971 (@Enselic)
138−- Replace the `error::Error(error::ErrorKind, _)` struct and enum with an `error::Error` enum. `Error(ErrorKind::UnknownSyntax, _)` becomes `Error::UnknownSyntax`, etc. Also remove the `error::ResultExt` trait. These changes stem from replacing `error-chain` with `thiserror`. See #1820 (@Enselic)
139−- Add new `MappingTarget` enum variant `MapExtensionToUnknown`. Refer to its documentation for more information. Also mark `MappingTarget` as `#[non_exhaustive]` since more enum variants might be added in the future. See #1703 (@cbolgiano), #2012 (@Enselic)
140−
141−
142−# v0.18.3
143−
144−## Bugfixes
145−
146−- Bump `git2` dependency to fix build with Rust 1.54, see #1761
147−
148−
149−# v0.18.2
150−
151−## Features
152−
153−- Ignore known backup/template filename suffixes when selecting the syntax, see #1687 (@scop)
154−
155−## Bugfixes
156−
157−- Fix for a security vulnerability on Windows. Prior to this release, `bat` would execute programs called `less`/`less.exe` from the current working directory (instead of the one from `PATH`) with priority. An attacker might be able to use this by placing a malicious program in a shared directory where the user would execute `bat`. `bat` users on Windows are advised to upgrade to this version. See #1724 and #1472 (@Ry0taK).
158−
159−## Other
160−
161−- Add bash completion, see #1678 (@scop)
162−- Fix Clippy lints, see #1661 (@mohamed-abdelnour)
163−- Add syntax highlighting test files, see #1213 and #1668 (@mohamed-abdelnour)
164−
165−## Syntaxes
166−
167−- Upgraded Julia syntax to fix a highlighting bug, see #1692
168−- Added support for `dash` syntax, see #1654 (@mohamed-abdelnour)
169−- Added support for `XAML` syntax, see #1590 and #1655 (@mohamed-abdelnour)
170−- Apply `DotENV` syntax also for `.env.default` and `.env.defaults` files, see #1669
171−
172−
173−# v0.18.1
174−
175−## Bugfixes
176−
177−- Mouse support and screen clearing broken for `less` versions with minor version number (581.2), see #1629 and #1639 (@aswild)
178−
179−## Other
180−
181−- `Input::ordinary_file` and `Input::with_name` now accept `Path` rather than `OsStr` see #1571 (@matklad)
182−- The `LESS` environment variable is now included in `bat --diagnostic`, see #1589 (@Enselic)
183−- Increased min. required Rust version to 1.45
184−
185−## Syntaxes
186−
187−- Improved the Syslog syntax highlighting, see #1606 (@keith-hall)
188−- Replaced "Advanced CSV" with a custom CSV syntax definition written especially for `bat`; see #1574 (@keith-hall)
189−- Added SystemVerilog file syntax, see #1580 (@SeanMcLoughlin)
190−- Added Solidity and Vyper syntax, see #1602 (@Ersikan)
191−
192−## New themes
193−
194−- Dark+ VS Code theme, see #1588 and #1598 (@PatriotRossii)
195−
196−
197−
198−# v0.18.0
199−
200−## Features
201−
202−- Use a pager when `bat --list-languages` is called, see #1394 (@stku1985)
203−
204−## Bugfixes
205−
206−- If the last line doesn't end with a newline character, don't add it if `--style=plain`, see #1438 (@Enselic)
207−- Only print themes hint in interactive mode (`bat --list-themes`), see #1439 (@rsteube)
208−- Make ./tests/syntax-tests/regression_test.sh work on recent versions of macOS, see #1443 (@Enselic)
209−- VimL syntax highlighting fix, see #1450 (@esensar)
210−- Print an 'Invalid syntax theme settings' error message if a custom theme is broken, see #614 (@Enselic)
211−- If plain mode is set and wrap is not explicitly opted in, long lines will no be truncated, see #1426
212−- If `PAGER` (but not `BAT_PAGER` or `--pager`) is `more` or `most`, silently use `less` instead to ensure support for colors, see #1063 (@Enselic)
213−- If `PAGER` is `bat`, silently use `less` to prevent recursion. For `BAT_PAGER` or `--pager`, exit with error, see #1413 (@Enselic)
214−- Manpage highlighting fix, see #1511 (@keith-hall)
215−- `BAT_CONFIG_PATH` ignored by `bat` if non-existent, see #1550 (@sharkdp)
216−
217−## Other
218−
219−- Performance improvements, see #1421 (@LovecraftianHorror)
220−- Added a new `--diagnostic` option to collect information for bug reports, see #1459 (@sharkdp)
221−- Modified default theme colors to differentiate between a JSON key and a string value, see #1400 (@keith-hall)
222−- Upped min required Rust version to 1.42
223−
224−## Syntaxes
225−
226−- Added Zig syntax, see #1470 (@paulsmith)
227−- Added Lean syntax, see #1446 (@Julian)
228−- Added `.resource` extension for Robot Framework files, see #1386
229−- Added `gnuplot` syntax, see #1431 (@sharkdp)
230−- Highlight *.pac (Proxy auto-config) files as JavaScript, see #1515 (@sharkdp)
231−
232−## New themes
233−
234−- `ansi` replaces `ansi-dark` and `ansi-light`, see #1104 and #1412 (@mk12). **Breaking change:** users that were previously using one of the `ansi-*` themes should switch to `ansi`.
235−- The Gruvbox theme has been updated, see #1291 (@j0hnmeow). **Breaking change:** users that were previously using `gruvbox` or `gruvbox-white` should update and use `gruvbox-dark`/`gruvbox-light` instead.
236−
237−## `bat` as a library
238−
239−- The following `PrettyPrinter` methods have been removed (they were previously deprecated):
240− - `input_stdin_with_name`
241− - `input_from_bytes_with_name`
242− - `input_from_reader_with_name`
243− - `vcs_modification_markers` (if the `git` feature is not enabled)
244−
245−
246−# v0.17.1
247−
248−## Bugfixes
249−
250−- Running `bat` without arguments fails ("output file is also an input"), see #1396
251−
252−
253−# v0.17.0
254−
255−## Features
256−
257−- Added a new `--style` value, `rule`, which adds a simple horizontal ruled line between files, see #1276 (@tommilligan)
258−- Pass `-S` ("chop long lines") to `less` if `--wrap=never` is set in `bat`, see #1255 (@gahag)
259−
260−## Bugfixes
261−
262−- Detect infinite loop when input and output are the same, see #1193 and #1197 (@niklasmohrin)
263−- Throw an error when `bat` is being used as `pager`, see #1343 (@adrian-rivera)
264−- Bash syntax highlighting not selected for `*.ebuild` and `*.eclass` files, see #1292 (@sharkdp)
265−- Fix `zsh` completion when using `-p`, see #1320 (@xzfc)
266−
267−## Other
268−
269−- Add note to refer to see detailed help with `--help` (and vice versa with `-h`), see #1215 (@henil)
270−- Add a `Contributors` section to `README`, see #1348 (@adrian-rivera)
271−
272−## Syntaxes
273−
274−- Manpage syntax highlighting has been improved, see #1315 (@keith-hall)
275−- Add Svelte file syntax, see #1285 (@kjmph)
276−
277−## New themes
278−
279−- Coldark, see #1329 (@armandphilippot)
280−
281−
282−# v0.16.0
283−
284−## Features
285−
2865- Added support for the `NO_COLOR` environment variable, see #1021 and #1031 (@eth-p)
287−- Added `-P` short flag to disable paging, see #1075 and #1082 (@LordFlashmeow)
288−- Added `--force-colorization`/`-f` flag to provide an alias for forced color and decoration output, see #1141 (@alexanderkarlis)
2896
2907## Bugfixes
291−
292−- Fixed non-printable characters display for redirected output, see #1061 (@gsomix)
293−- Handle file extension conflicts in `--list-languages`, see #1076 and #1135 (@Kienyew)
294−
2958## Other
296−
297−- Switched to "·" (U+00B7) Middle Dot from "•" (U+2022) Bullet for non-printing spaces, see #1056 and #1100 (@LordFlashmeow)
298−- Added zsh shell completion script, see #1136 (@Kienyew)
299−- Improved `--help` text (@sharkdp)
300−- Added custom languages/themes sections to manpage (@eth-p)
301−
3029## Syntaxes
30310
30411- Update AsciiDoc syntax, see #1034 (@rxt1077)
305−- GLSL (@caioalonso)
306−- Add Nginx and Apache config file syntax, see #1137 (@kjmph, @niklasmohrin)
307−- Use `fstab` syntax for `crypttab` files, see #1073 (@sharkdp)
308−- Support syntax highlighting for files in `$XDG_CONFIG_HOME/git/`, see #1191 (@ahmedelgabri)
30912
31013## New themes
311−
312−- Gruvbox, see #1069 (@kyleondy)
313−- base16-256 for [base16-shell](https://github.com/chriskempson/base16-shell) users, see #1111 (@mk12)
314−
31514## `bat` as a library
31615
31716- Add APIs to provide `Input` descriptions with `InputDescription` (@eth-p)
@@ -320,8 +19,6 @@
32019
32120## Packaging
32221
323−- Removed build dependency on `liquid` (@sharkdp).
324−
32522# v0.15.4
32623
32724## Bugfixes
@@ -685,7 +382,7 @@ You can see the API documentation here: https://docs.rs/bat/
685382
686383- Added `BAT_CONFIG_PATH` environment variable to set a non-default path for `bat`s configuration file, see #375 (@deg4uss3r)
687384
688−- Allow for multiple occurrences of `--style` to allow for the configuration
385+- Allow for multiple occurences of `--style` to allow for the configuration
689386 of styles from the config file, see #367 (@sindreij)
690387
691388- Allow for multiple `--line-range` arguments, see #23
CONTRIBUTING.mddeleted−70
@@ -1,70 +0,0 @@
1−# Contributing
2−
3−Thank you for considering to contribute to `bat`!
4−
5−
6−
7−## Add an entry to the changelog
8−
9−If your contribution changes the behavior of `bat` (as opposed to a typo-fix
10−in the documentation), please update the [`CHANGELOG.md`](CHANGELOG.md) file
11−and describe your changes. This makes the release process much easier and
12−therefore helps to get your changes into a new `bat` release faster.
13−
14−The top of the `CHANGELOG` contains a *"unreleased"* section with a few
15−subsections (Features, Bugfixes, …). Please add your entry to the subsection
16−that best describes your change.
17−
18−Entries follow this format:
19−```
20−- Short description of what has been changed, see #123 (@user)
21−```
22−Here, `#123` is the number of the original issue and/or your pull request.
23−Please replace `@user` by your GitHub username.
24−
25−
26−## Development
27−
28−Please check out the [Development](https://github.com/sharkdp/bat#development)
29−section in the README.
30−
31−
32−## Adding a new feature
33−
34−Please consider opening a
35−[feature request ticket](https://github.com/sharkdp/bat/issues/new?assignees=&labels=feature-request&template=feature_request.md)
36−first in order to give us a chance to discuss the feature first.
37−
38−
39−## Adding new syntaxes/languages or themes
40−
41−Before you make a pull request that adds a new syntax or theme, please read
42−the [Customization](https://github.com/sharkdp/bat#customization) section
43−in the README first.
44−
45−If you really think that a particular syntax or theme should be added for all
46−users, please read the corresponding
47−[documentation](https://github.com/sharkdp/bat/blob/master/doc/assets.md)
48−first.
49−
50−
51−## Regression tests
52−
53−You are strongly encouraged to add regression tests. Regression tests are great,
54−not least because they:
55−
56−* ensure that your contribution will never completely stop working,
57−
58−* makes code review easier, because it becomes very clear what the code is
59− supposed to do.
60−
61−For functional changes, you most likely want to add a test to
62−[`tests/integration_tests.rs`](https://github.com/sharkdp/bat/blob/master/tests/integration_tests.rs).
63−Look at existing tests to know how to write a new test. In short, you will
64−invoke the `bat` binary with a certain set of arguments, and then assert on
65−stdout/stderr.
66−
67−To learn how to write regression tests for theme and syntax changes, read the
68−[Syntax
69−tests](https://github.com/sharkdp/bat/blob/master/doc/assets.md#syntax-tests)
70−section in `assets.md`.
Cargo.lock+788−647
@@ -1,1340 +1,1481 @@
11# This file is automatically @generated by Cargo.
22# It is not intended for manual editing.
3−version = 3
4−
53[[package]]
6−name = "adler"
7−version = "1.0.2"
4+name = "adler32"
5+version = "1.0.4"
86source = "registry+https://github.com/rust-lang/crates.io-index"
9−checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
107
118[[package]]
129name = "aho-corasick"
13−version = "0.7.18"
10+version = "0.7.10"
1411source = "registry+https://github.com/rust-lang/crates.io-index"
15−checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
1612dependencies = [
17− "memchr",
13+ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
1814]
1915
2016[[package]]
2117name = "ansi_colours"
22−version = "1.1.1"
18+version = "1.0.1"
2319source = "registry+https://github.com/rust-lang/crates.io-index"
24−checksum = "32678233b67f9056b0c144b39d46dc3218637e8d84ad6038ded339e08b19620d"
2520dependencies = [
26− "rgb",
21+ "cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)",
22+]
23+
24+[[package]]
25+name = "ansi_term"
26+version = "0.11.0"
27+source = "registry+https://github.com/rust-lang/crates.io-index"
28+dependencies = [
29+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
2730]
2831
2932[[package]]
3033name = "ansi_term"
3134version = "0.12.1"
3235source = "registry+https://github.com/rust-lang/crates.io-index"
33−checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
3436dependencies = [
35− "winapi",
37+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
3638]
3739
40+[[package]]
41+name = "anymap"
42+version = "0.12.1"
43+source = "registry+https://github.com/rust-lang/crates.io-index"
44+
45+[[package]]
46+name = "arrayref"
47+version = "0.3.6"
48+source = "registry+https://github.com/rust-lang/crates.io-index"
49+
50+[[package]]
51+name = "arrayvec"
52+version = "0.5.1"
53+source = "registry+https://github.com/rust-lang/crates.io-index"
54+
3855[[package]]
3956name = "assert_cmd"
40−version = "2.0.4"
57+version = "1.0.1"
4158source = "registry+https://github.com/rust-lang/crates.io-index"
42−checksum = "93ae1ddd39efd67689deb1979d80bad3bf7f2b09c6e6117c8d1f2443b5e2f83e"
4359dependencies = [
44− "bstr",
45− "doc-comment",
46− "predicates",
47− "predicates-core",
48− "predicates-tree",
49− "wait-timeout",
60+ "doc-comment 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
61+ "predicates 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
62+ "predicates-core 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
63+ "predicates-tree 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
64+ "wait-timeout 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
5065]
5166
5267[[package]]
5368name = "atty"
5469version = "0.2.14"
5570source = "registry+https://github.com/rust-lang/crates.io-index"
56−checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
5771dependencies = [
58− "hermit-abi",
59− "libc",
60− "winapi",
72+ "hermit-abi 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
73+ "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
74+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
6175]
6276
6377[[package]]
6478name = "autocfg"
65−version = "1.0.1"
79+version = "1.0.0"
6680source = "registry+https://github.com/rust-lang/crates.io-index"
67−checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
6881
6982[[package]]
7083name = "base64"
71−version = "0.13.0"
84+version = "0.11.0"
85+source = "registry+https://github.com/rust-lang/crates.io-index"
86+
87+[[package]]
88+name = "base64"
89+version = "0.12.1"
7290source = "registry+https://github.com/rust-lang/crates.io-index"
73−checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
7491
7592[[package]]
7693name = "bat"
77−version = "0.21.0"
78−dependencies = [
79− "ansi_colours",
80− "ansi_term",
81− "assert_cmd",
82− "atty",
83− "bincode",
84− "bugreport",
85− "bytesize",
86− "clap",
87− "clircle",
88− "console",
89− "content_inspector",
90− "dirs-next",
91− "encoding",
92− "flate2",
93− "git2",
94− "globset",
95− "grep-cli",
96− "nix",
97− "once_cell",
98− "path_abs",
99− "predicates",
100− "regex",
101− "semver",
102− "serde",
103− "serde_yaml",
104− "serial_test",
105− "shell-words",
106− "syntect",
107− "tempfile",
108− "thiserror",
109− "unicode-width",
110− "wait-timeout",
111− "walkdir",
112− "wild",
94+version = "0.15.4"
95+dependencies = [
96+ "ansi_colours 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
97+ "ansi_term 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
98+ "assert_cmd 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
99+ "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
100+ "clap 2.33.1 (registry+https://github.com/rust-lang/crates.io-index)",
101+ "console 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)",
102+ "content_inspector 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
103+ "dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
104+ "encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
105+ "error-chain 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
106+ "git2 0.13.6 (registry+https://github.com/rust-lang/crates.io-index)",
107+ "globset 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
108+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
109+ "liquid 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
110+ "path_abs 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
111+ "semver 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
112+ "serde 1.0.111 (registry+https://github.com/rust-lang/crates.io-index)",
113+ "serde_yaml 0.8.12 (registry+https://github.com/rust-lang/crates.io-index)",
114+ "shell-words 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
115+ "syntect 4.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
116+ "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
117+ "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
118+ "wild 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
113119]
114120
115121[[package]]
116122name = "bincode"
117−version = "1.3.3"
123+version = "1.2.1"
118124source = "registry+https://github.com/rust-lang/crates.io-index"
119−checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
120125dependencies = [
121− "serde",
126+ "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
127+ "serde 1.0.111 (registry+https://github.com/rust-lang/crates.io-index)",
122128]
123129
124130[[package]]
125131name = "bit-set"
126−version = "0.5.2"
132+version = "0.5.1"
127133source = "registry+https://github.com/rust-lang/crates.io-index"
128−checksum = "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de"
129134dependencies = [
130− "bit-vec",
135+ "bit-vec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
131136]
132137
133138[[package]]
134139name = "bit-vec"
135−version = "0.6.3"
140+version = "0.5.1"
136141source = "registry+https://github.com/rust-lang/crates.io-index"
137−checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
138142
139143[[package]]
140144name = "bitflags"
141−version = "1.3.2"
145+version = "1.2.1"
142146source = "registry+https://github.com/rust-lang/crates.io-index"
143−checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
144147
145148[[package]]
146−name = "bstr"
147−version = "0.2.17"
149+name = "blake2b_simd"
150+version = "0.5.10"
148151source = "registry+https://github.com/rust-lang/crates.io-index"
149−checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
150152dependencies = [
151− "lazy_static",
152− "memchr",
153− "regex-automata",
153+ "arrayref 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
154+ "arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
155+ "constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
154156]
155157
156158[[package]]
157−name = "bugreport"
158−version = "0.5.0"
159+name = "block-buffer"
160+version = "0.7.3"
159161source = "registry+https://github.com/rust-lang/crates.io-index"
160−checksum = "535120b8182547808081a66f1f77a64533c780b23da26763e0ee34dfb94f98c9"
161162dependencies = [
162− "git-version",
163− "shell-escape",
164− "sys-info",
163+ "block-padding 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
164+ "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
165+ "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
166+ "generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)",
165167]
166168
167169[[package]]
168−name = "bytemuck"
169−version = "1.7.3"
170+name = "block-padding"
171+version = "0.1.5"
172+source = "registry+https://github.com/rust-lang/crates.io-index"
173+dependencies = [
174+ "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
175+]
176+
177+[[package]]
178+name = "bstr"
179+version = "0.2.12"
170180source = "registry+https://github.com/rust-lang/crates.io-index"
171−checksum = "439989e6b8c38d1b6570a384ef1e49c8848128f5a97f3914baef02920842712f"
181+dependencies = [
182+ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
183+]
172184
173185[[package]]
174−name = "bytesize"
175−version = "1.1.0"
186+name = "byte-tools"
187+version = "0.3.1"
188+source = "registry+https://github.com/rust-lang/crates.io-index"
189+
190+[[package]]
191+name = "byteorder"
192+version = "1.3.4"
176193source = "registry+https://github.com/rust-lang/crates.io-index"
177−checksum = "6c58ec36aac5066d5ca17df51b3e70279f5670a72102f5752cb7e7c856adfc70"
178194
179195[[package]]
180196name = "cc"
181−version = "1.0.72"
197+version = "1.0.52"
182198source = "registry+https://github.com/rust-lang/crates.io-index"
183−checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee"
184199dependencies = [
185− "jobserver",
200+ "jobserver 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)",
186201]
187202
188203[[package]]
189204name = "cfg-if"
190−version = "1.0.0"
205+version = "0.1.10"
191206source = "registry+https://github.com/rust-lang/crates.io-index"
192−checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
193207
194208[[package]]
195−name = "clap"
196−version = "2.34.0"
209+name = "chrono"
210+version = "0.4.11"
197211source = "registry+https://github.com/rust-lang/crates.io-index"
198−checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
199212dependencies = [
200− "ansi_term",
201− "atty",
202− "bitflags",
203− "strsim",
204− "term_size",
205− "textwrap",
206− "unicode-width",
207− "vec_map",
213+ "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
214+ "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
215+ "time 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)",
208216]
209217
210218[[package]]
211−name = "clircle"
212−version = "0.3.0"
219+name = "clap"
220+version = "2.33.1"
213221source = "registry+https://github.com/rust-lang/crates.io-index"
214−checksum = "e68bbd985a63de680ab4d1ad77b6306611a8f961b282c8b5ab513e6de934e396"
215222dependencies = [
216− "cfg-if",
217− "libc",
218− "serde",
219− "winapi",
223+ "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
224+ "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
225+ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
226+ "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
227+ "term_size 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
228+ "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
229+ "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
230+ "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
220231]
221232
222233[[package]]
223234name = "console"
224−version = "0.15.0"
235+version = "0.11.3"
225236source = "registry+https://github.com/rust-lang/crates.io-index"
226−checksum = "a28b32d32ca44b70c3e4acd7db1babf555fa026e385fb95f18028f88848b3c31"
227237dependencies = [
228− "encode_unicode",
229− "libc",
230− "once_cell",
231− "regex",
232− "terminal_size",
233− "unicode-width",
234− "winapi",
238+ "encode_unicode 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
239+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
240+ "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
241+ "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
242+ "terminal_size 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
243+ "termios 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
244+ "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
245+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
246+ "winapi-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
235247]
236248
249+[[package]]
250+name = "constant_time_eq"
251+version = "0.1.5"
252+source = "registry+https://github.com/rust-lang/crates.io-index"
253+
237254[[package]]
238255name = "content_inspector"
239256version = "0.2.4"
240257source = "registry+https://github.com/rust-lang/crates.io-index"
241−checksum = "b7bda66e858c683005a53a9a60c69a4aca7eeaa45d124526e389f7aec8e62f38"
242258dependencies = [
243− "memchr",
259+ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
244260]
245261
246262[[package]]
247263name = "crc32fast"
248−version = "1.3.0"
264+version = "1.2.0"
249265source = "registry+https://github.com/rust-lang/crates.io-index"
250−checksum = "738c290dfaea84fc1ca15ad9c168d083b05a714e1efddd8edaab678dc28d2836"
251266dependencies = [
252− "cfg-if",
267+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
253268]
254269
255270[[package]]
256−name = "difflib"
257−version = "0.4.0"
271+name = "crossbeam-utils"
272+version = "0.7.2"
258273source = "registry+https://github.com/rust-lang/crates.io-index"
259−checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
274+dependencies = [
275+ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
276+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
277+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
278+]
260279
261280[[package]]
262−name = "dirs-next"
281+name = "difference"
263282version = "2.0.0"
264283source = "registry+https://github.com/rust-lang/crates.io-index"
265−checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
284+
285+[[package]]
286+name = "digest"
287+version = "0.8.1"
288+source = "registry+https://github.com/rust-lang/crates.io-index"
266289dependencies = [
267− "cfg-if",
268− "dirs-sys-next",
290+ "generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)",
269291]
270292
271293[[package]]
272−name = "dirs-sys-next"
273−version = "0.1.2"
294+name = "dirs"
295+version = "2.0.2"
274296source = "registry+https://github.com/rust-lang/crates.io-index"
275−checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
276297dependencies = [
277− "libc",
278− "redox_users",
279− "winapi",
298+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
299+ "dirs-sys 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
300+]
301+
302+[[package]]
303+name = "dirs-sys"
304+version = "0.3.4"
305+source = "registry+https://github.com/rust-lang/crates.io-index"
306+dependencies = [
307+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
308+ "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
309+ "redox_users 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
310+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
280311]
281312
282313[[package]]
283314name = "doc-comment"
284315version = "0.3.3"
285316source = "registry+https://github.com/rust-lang/crates.io-index"
286−checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
317+
318+[[package]]
319+name = "dtoa"
320+version = "0.4.5"
321+source = "registry+https://github.com/rust-lang/crates.io-index"
287322
288323[[package]]
289324name = "either"
290−version = "1.6.1"
325+version = "1.5.3"
291326source = "registry+https://github.com/rust-lang/crates.io-index"
292−checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
293327
294328[[package]]
295329name = "encode_unicode"
296330version = "0.3.6"
297331source = "registry+https://github.com/rust-lang/crates.io-index"
298−checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
299332
300333[[package]]
301334name = "encoding"
302335version = "0.2.33"
303336source = "registry+https://github.com/rust-lang/crates.io-index"
304−checksum = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec"
305337dependencies = [
306− "encoding-index-japanese",
307− "encoding-index-korean",
308− "encoding-index-simpchinese",
309− "encoding-index-singlebyte",
310− "encoding-index-tradchinese",
338+ "encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)",
339+ "encoding-index-korean 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)",
340+ "encoding-index-simpchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)",
341+ "encoding-index-singlebyte 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)",
342+ "encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)",
311343]
312344
313345[[package]]
314346name = "encoding-index-japanese"
315347version = "1.20141219.5"
316348source = "registry+https://github.com/rust-lang/crates.io-index"
317−checksum = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91"
318349dependencies = [
319− "encoding_index_tests",
350+ "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
320351]
321352
322353[[package]]
323354name = "encoding-index-korean"
324355version = "1.20141219.5"
325356source = "registry+https://github.com/rust-lang/crates.io-index"
326−checksum = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81"
327357dependencies = [
328− "encoding_index_tests",
358+ "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
329359]
330360
331361[[package]]
332362name = "encoding-index-simpchinese"
333363version = "1.20141219.5"
334364source = "registry+https://github.com/rust-lang/crates.io-index"
335−checksum = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7"
336365dependencies = [
337− "encoding_index_tests",
366+ "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
338367]
339368
340369[[package]]
341370name = "encoding-index-singlebyte"
342371version = "1.20141219.5"
343372source = "registry+https://github.com/rust-lang/crates.io-index"
344−checksum = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a"
345373dependencies = [
346− "encoding_index_tests",
374+ "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
347375]
348376
349377[[package]]
350378name = "encoding-index-tradchinese"
351379version = "1.20141219.5"
352380source = "registry+https://github.com/rust-lang/crates.io-index"
353−checksum = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18"
354381dependencies = [
355− "encoding_index_tests",
382+ "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
356383]
357384
358385[[package]]
359386name = "encoding_index_tests"
360387version = "0.1.4"
361388source = "registry+https://github.com/rust-lang/crates.io-index"
362−checksum = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569"
363389
364390[[package]]
365−name = "fancy-regex"
366−version = "0.7.1"
391+name = "error-chain"
392+version = "0.12.2"
367393source = "registry+https://github.com/rust-lang/crates.io-index"
368−checksum = "9d6b8560a05112eb52f04b00e5d3790c0dd75d9d980eb8a122fb23b92a623ccf"
369394dependencies = [
370− "bit-set",
371− "regex",
395+ "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
372396]
373397
374398[[package]]
375−name = "fastrand"
376−version = "1.7.0"
399+name = "fake-simd"
400+version = "0.1.2"
377401source = "registry+https://github.com/rust-lang/crates.io-index"
378−checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf"
379−dependencies = [
380− "instant",
381−]
382402
383403[[package]]
384−name = "flate2"
385−version = "1.0.23"
404+name = "fancy-regex"
405+version = "0.3.3"
386406source = "registry+https://github.com/rust-lang/crates.io-index"
387−checksum = "b39522e96686d38f4bc984b9198e3a0613264abaebaff2c5c918bfa6b6da09af"
388407dependencies = [
389− "cfg-if",
390− "crc32fast",
391− "libc",
392− "miniz_oxide",
408+ "bit-set 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
409+ "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
393410]
394411
395412[[package]]
396−name = "float-cmp"
397−version = "0.9.0"
413+name = "flate2"
414+version = "1.0.14"
398415source = "registry+https://github.com/rust-lang/crates.io-index"
399−checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
400416dependencies = [
401− "num-traits",
417+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
418+ "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
419+ "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
420+ "miniz_oxide 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
402421]
403422
404423[[package]]
405424name = "fnv"
406−version = "1.0.7"
425+version = "1.0.6"
407426source = "registry+https://github.com/rust-lang/crates.io-index"
408−checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
409427
410428[[package]]
411−name = "form_urlencoded"
412−version = "1.0.1"
413−source = "registry+https://github.com/rust-lang/crates.io-index"
414−checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
415−dependencies = [
416− "matches",
417− "percent-encoding",
418−]
419−
420−[[package]]
421−name = "getrandom"
422−version = "0.2.3"
429+name = "fuchsia-cprng"
430+version = "0.1.1"
423431source = "registry+https://github.com/rust-lang/crates.io-index"
424−checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753"
425−dependencies = [
426− "cfg-if",
427− "libc",
428− "wasi",
429−]
430432
431433[[package]]
432−name = "git-version"
433−version = "0.3.5"
434+name = "generic-array"
435+version = "0.12.3"
434436source = "registry+https://github.com/rust-lang/crates.io-index"
435−checksum = "f6b0decc02f4636b9ccad390dcbe77b722a77efedfa393caf8379a51d5c61899"
436437dependencies = [
437− "git-version-macro",
438− "proc-macro-hack",
438+ "typenum 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
439439]
440440
441441[[package]]
442−name = "git-version-macro"
443−version = "0.3.5"
442+name = "getrandom"
443+version = "0.1.14"
444444source = "registry+https://github.com/rust-lang/crates.io-index"
445−checksum = "fe69f1cbdb6e28af2bac214e943b99ce8a0a06b447d15d3e61161b0423139f3f"
446445dependencies = [
447− "proc-macro-hack",
448− "proc-macro2",
449− "quote",
450− "syn",
446+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
447+ "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
448+ "wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)",
451449]
452450
453451[[package]]
454452name = "git2"
455−version = "0.14.2"
453+version = "0.13.6"
456454source = "registry+https://github.com/rust-lang/crates.io-index"
457−checksum = "3826a6e0e2215d7a41c2bfc7c9244123969273f3476b939a226aac0ab56e9e3c"
458455dependencies = [
459− "bitflags",
460− "libc",
461− "libgit2-sys",
462− "log",
463− "url",
456+ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
457+ "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
458+ "libgit2-sys 0.12.6+1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
459+ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
460+ "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
464461]
465462
466463[[package]]
467464name = "glob"
468465version = "0.3.0"
469466source = "registry+https://github.com/rust-lang/crates.io-index"
470−checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
471467
472468[[package]]
473469name = "globset"
474−version = "0.4.8"
470+version = "0.4.5"
475471source = "registry+https://github.com/rust-lang/crates.io-index"
476−checksum = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd"
477472dependencies = [
478− "aho-corasick",
479− "bstr",
480− "fnv",
481− "log",
482− "regex",
473+ "aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)",
474+ "bstr 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
475+ "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
476+ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
477+ "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
483478]
484479
485480[[package]]
486−name = "grep-cli"
487−version = "0.1.6"
481+name = "hermit-abi"
482+version = "0.1.11"
488483source = "registry+https://github.com/rust-lang/crates.io-index"
489−checksum = "2dd110c34bb4460d0de5062413b773e385cbf8a85a63fc535590110a09e79e8a"
490484dependencies = [
491− "atty",
492− "bstr",
493− "globset",
494− "lazy_static",
495− "log",
496− "regex",
497− "same-file",
498− "termcolor",
499− "winapi-util",
485+ "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
500486]
501487
502488[[package]]
503−name = "hashbrown"
504−version = "0.11.2"
505−source = "registry+https://github.com/rust-lang/crates.io-index"
506−checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
507−
508−[[package]]
509−name = "hermit-abi"
510−version = "0.1.19"
489+name = "idna"
490+version = "0.1.5"
511491source = "registry+https://github.com/rust-lang/crates.io-index"
512−checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
513492dependencies = [
514− "libc",
493+ "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
494+ "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
495+ "unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
515496]
516497
517498[[package]]
518499name = "idna"
519−version = "0.2.3"
500+version = "0.2.0"
520501source = "registry+https://github.com/rust-lang/crates.io-index"
521−checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
522502dependencies = [
523− "matches",
524− "unicode-bidi",
525− "unicode-normalization",
503+ "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
504+ "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
505+ "unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
526506]
527507
528508[[package]]
529509name = "indexmap"
530−version = "1.7.0"
510+version = "1.3.2"
531511source = "registry+https://github.com/rust-lang/crates.io-index"
532−checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5"
533512dependencies = [
534− "autocfg",
535− "hashbrown",
513+ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
536514]
537515
538516[[package]]
539−name = "instant"
540−version = "0.1.12"
517+name = "itertools"
518+version = "0.8.2"
541519source = "registry+https://github.com/rust-lang/crates.io-index"
542−checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
543520dependencies = [
544− "cfg-if",
521+ "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
545522]
546523
547524[[package]]
548−name = "itertools"
549−version = "0.10.3"
525+name = "itoa"
526+version = "0.4.5"
550527source = "registry+https://github.com/rust-lang/crates.io-index"
551−checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
552−dependencies = [
553− "either",
554−]
555528
556529[[package]]
557−name = "itoa"
558−version = "0.4.8"
530+name = "jobserver"
531+version = "0.1.21"
559532source = "registry+https://github.com/rust-lang/crates.io-index"
560−checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
533+dependencies = [
534+ "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
535+]
561536
562537[[package]]
563−name = "itoa"
564−version = "1.0.1"
538+name = "kernel32-sys"
539+version = "0.2.2"
565540source = "registry+https://github.com/rust-lang/crates.io-index"
566−checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
541+dependencies = [
542+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
543+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
544+]
567545
568546[[package]]
569−name = "jobserver"
570−version = "0.1.24"
547+name = "kstring"
548+version = "0.1.0"
571549source = "registry+https://github.com/rust-lang/crates.io-index"
572−checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa"
573550dependencies = [
574− "libc",
551+ "serde 1.0.111 (registry+https://github.com/rust-lang/crates.io-index)",
575552]
576553
577554[[package]]
578555name = "lazy_static"
579556version = "1.4.0"
580557source = "registry+https://github.com/rust-lang/crates.io-index"
581−checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
558+
559+[[package]]
560+name = "lazycell"
561+version = "1.2.1"
562+source = "registry+https://github.com/rust-lang/crates.io-index"
582563
583564[[package]]
584565name = "libc"
585−version = "0.2.125"
566+version = "0.2.69"
586567source = "registry+https://github.com/rust-lang/crates.io-index"
587−checksum = "5916d2ae698f6de9bfb891ad7a8d65c09d232dc58cc4ac433c7da3b2fd84bc2b"
588568
589569[[package]]
590570name = "libgit2-sys"
591−version = "0.13.2+1.4.2"
571+version = "0.12.6+1.0.0"
592572source = "registry+https://github.com/rust-lang/crates.io-index"
593−checksum = "3a42de9a51a5c12e00fc0e4ca6bc2ea43582fc6418488e8f615e905d886f258b"
594573dependencies = [
595− "cc",
596− "libc",
597− "libz-sys",
598− "pkg-config",
574+ "cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)",
575+ "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
576+ "libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
577+ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
599578]
600579
601580[[package]]
602581name = "libz-sys"
603−version = "1.1.3"
582+version = "1.0.25"
604583source = "registry+https://github.com/rust-lang/crates.io-index"
605−checksum = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66"
606584dependencies = [
607− "cc",
608− "libc",
609− "pkg-config",
610− "vcpkg",
585+ "cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)",
586+ "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
587+ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
588+ "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
611589]
612590
613591[[package]]
614592name = "line-wrap"
615593version = "0.1.1"
616594source = "registry+https://github.com/rust-lang/crates.io-index"
617−checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9"
618595dependencies = [
619− "safemem",
596+ "safemem 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
620597]
621598
622599[[package]]
623600name = "linked-hash-map"
624−version = "0.5.4"
601+version = "0.5.2"
625602source = "registry+https://github.com/rust-lang/crates.io-index"
626−checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"
627603
628604[[package]]
629−name = "lock_api"
630−version = "0.4.5"
605+name = "liquid"
606+version = "0.20.0"
607+source = "registry+https://github.com/rust-lang/crates.io-index"
608+dependencies = [
609+ "doc-comment 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
610+ "kstring 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
611+ "liquid-core 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
612+ "liquid-derive 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
613+ "liquid-lib 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
614+ "serde 1.0.111 (registry+https://github.com/rust-lang/crates.io-index)",
615+]
616+
617+[[package]]
618+name = "liquid-core"
619+version = "0.20.0"
631620source = "registry+https://github.com/rust-lang/crates.io-index"
632−checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109"
633621dependencies = [
634− "scopeguard",
622+ "anymap 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
623+ "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
624+ "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
625+ "kstring 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
626+ "liquid-derive 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
627+ "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
628+ "pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
629+ "pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
630+ "serde 1.0.111 (registry+https://github.com/rust-lang/crates.io-index)",
631+]
632+
633+[[package]]
634+name = "liquid-derive"
635+version = "0.20.0"
636+source = "registry+https://github.com/rust-lang/crates.io-index"
637+dependencies = [
638+ "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
639+ "proc-quote 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
640+ "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
641+]
642+
643+[[package]]
644+name = "liquid-lib"
645+version = "0.20.0"
646+source = "registry+https://github.com/rust-lang/crates.io-index"
647+dependencies = [
648+ "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
649+ "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
650+ "kstring 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
651+ "liquid-core 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
652+ "once_cell 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
653+ "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
654+ "unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
655+ "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
635656]
636657
637658[[package]]
638659name = "log"
639−version = "0.4.14"
660+version = "0.4.8"
640661source = "registry+https://github.com/rust-lang/crates.io-index"
641−checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
642662dependencies = [
643− "cfg-if",
663+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
644664]
645665
666+[[package]]
667+name = "maplit"
668+version = "1.0.2"
669+source = "registry+https://github.com/rust-lang/crates.io-index"
670+
646671[[package]]
647672name = "matches"
648−version = "0.1.9"
673+version = "0.1.8"
649674source = "registry+https://github.com/rust-lang/crates.io-index"
650−checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
651675
652676[[package]]
653677name = "memchr"
654−version = "2.4.1"
678+version = "2.3.3"
655679source = "registry+https://github.com/rust-lang/crates.io-index"
656−checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
657680
658681[[package]]
659682name = "miniz_oxide"
660−version = "0.5.1"
683+version = "0.3.6"
661684source = "registry+https://github.com/rust-lang/crates.io-index"
662−checksum = "d2b29bd4bc3f33391105ebee3589c19197c4271e3e5a9ec9bfe8127eeff8f082"
663685dependencies = [
664− "adler",
686+ "adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
665687]
666688
667689[[package]]
668−name = "nix"
669−version = "0.24.1"
690+name = "num-integer"
691+version = "0.1.42"
670692source = "registry+https://github.com/rust-lang/crates.io-index"
671−checksum = "8f17df307904acd05aa8e32e97bb20f2a0df1728bbc2d771ae8f9a90463441e9"
672693dependencies = [
673− "bitflags",
674− "cfg-if",
675− "libc",
694+ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
695+ "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
676696]
677697
678−[[package]]
679−name = "normalize-line-endings"
680−version = "0.3.0"
681−source = "registry+https://github.com/rust-lang/crates.io-index"
682−checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
683−
684698[[package]]
685699name = "num-traits"
686−version = "0.2.14"
700+version = "0.2.11"
687701source = "registry+https://github.com/rust-lang/crates.io-index"
688−checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
689702dependencies = [
690− "autocfg",
703+ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
691704]
692705
693706[[package]]
694707name = "once_cell"
695−version = "1.10.0"
708+version = "1.3.1"
696709source = "registry+https://github.com/rust-lang/crates.io-index"
697−checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9"
698710
699711[[package]]
700712name = "onig"
701−version = "6.3.1"
713+version = "6.0.0"
702714source = "registry+https://github.com/rust-lang/crates.io-index"
703−checksum = "67ddfe2c93bb389eea6e6d713306880c7f6dcc99a75b659ce145d962c861b225"
704715dependencies = [
705− "bitflags",
706− "lazy_static",
707− "libc",
708− "onig_sys",
716+ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
717+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
718+ "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
719+ "onig_sys 69.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
709720]
710721
711722[[package]]
712723name = "onig_sys"
713−version = "69.7.1"
724+version = "69.5.0"
725+source = "registry+https://github.com/rust-lang/crates.io-index"
726+dependencies = [
727+ "cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)",
728+ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
729+]
730+
731+[[package]]
732+name = "opaque-debug"
733+version = "0.2.3"
734+source = "registry+https://github.com/rust-lang/crates.io-index"
735+
736+[[package]]
737+name = "path_abs"
738+version = "0.5.0"
714739source = "registry+https://github.com/rust-lang/crates.io-index"
715−checksum = "5dd3eee045c84695b53b20255bb7317063df090b68e18bfac0abb6c39cf7f33e"
716740dependencies = [
717− "cc",
718− "pkg-config",
741+ "std_prelude 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
719742]
720743
721744[[package]]
722−name = "parking_lot"
723−version = "0.11.2"
745+name = "percent-encoding"
746+version = "1.0.1"
747+source = "registry+https://github.com/rust-lang/crates.io-index"
748+
749+[[package]]
750+name = "percent-encoding"
751+version = "2.1.0"
752+source = "registry+https://github.com/rust-lang/crates.io-index"
753+
754+[[package]]
755+name = "pest"
756+version = "2.1.3"
724757source = "registry+https://github.com/rust-lang/crates.io-index"
725−checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
726758dependencies = [
727− "instant",
728− "lock_api",
729− "parking_lot_core",
759+ "ucd-trie 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
730760]
731761
732762[[package]]
733−name = "parking_lot_core"
734−version = "0.8.5"
763+name = "pest_derive"
764+version = "2.1.0"
735765source = "registry+https://github.com/rust-lang/crates.io-index"
736−checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
737766dependencies = [
738− "cfg-if",
739− "instant",
740− "libc",
741− "redox_syscall",
742− "smallvec",
743− "winapi",
767+ "pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
768+ "pest_generator 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
744769]
745770
746771[[package]]
747−name = "path_abs"
748−version = "0.5.1"
772+name = "pest_generator"
773+version = "2.1.3"
749774source = "registry+https://github.com/rust-lang/crates.io-index"
750−checksum = "05ef02f6342ac01d8a93b65f96db53fe68a92a15f41144f97fb00a9e669633c3"
751775dependencies = [
752− "std_prelude",
776+ "pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
777+ "pest_meta 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
778+ "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
779+ "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
780+ "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
753781]
754782
755783[[package]]
756−name = "percent-encoding"
757−version = "2.1.0"
784+name = "pest_meta"
785+version = "2.1.3"
758786source = "registry+https://github.com/rust-lang/crates.io-index"
759−checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
787+dependencies = [
788+ "maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
789+ "pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
790+ "sha-1 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
791+]
760792
761793[[package]]
762794name = "pkg-config"
763−version = "0.3.24"
795+version = "0.3.17"
764796source = "registry+https://github.com/rust-lang/crates.io-index"
765−checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe"
766797
767798[[package]]
768799name = "plist"
769−version = "1.3.1"
800+version = "1.0.0"
770801source = "registry+https://github.com/rust-lang/crates.io-index"
771−checksum = "bd39bc6cdc9355ad1dc5eeedefee696bb35c34caf21768741e81826c0bbd7225"
772802dependencies = [
773− "base64",
774− "indexmap",
775− "line-wrap",
776− "serde",
777− "time",
778− "xml-rs",
803+ "base64 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
804+ "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
805+ "indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
806+ "line-wrap 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
807+ "serde 1.0.111 (registry+https://github.com/rust-lang/crates.io-index)",
808+ "xml-rs 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
779809]
780810
781811[[package]]
782812name = "predicates"
783−version = "2.1.1"
813+version = "1.0.4"
784814source = "registry+https://github.com/rust-lang/crates.io-index"
785−checksum = "a5aab5be6e4732b473071984b3164dbbfb7a3674d30ea5ff44410b6bcd960c3c"
786815dependencies = [
787− "difflib",
788− "float-cmp",
789− "itertools",
790− "normalize-line-endings",
791− "predicates-core",
792− "regex",
816+ "difference 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
817+ "predicates-core 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
793818]
794819
795820[[package]]
796821name = "predicates-core"
797−version = "1.0.2"
822+version = "1.0.0"
798823source = "registry+https://github.com/rust-lang/crates.io-index"
799−checksum = "57e35a3326b75e49aa85f5dc6ec15b41108cf5aee58eabb1f274dd18b73c2451"
800824
801825[[package]]
802826name = "predicates-tree"
803−version = "1.0.4"
827+version = "1.0.0"
804828source = "registry+https://github.com/rust-lang/crates.io-index"
805−checksum = "338c7be2905b732ae3984a2f40032b5e94fd8f52505b186c7d4d68d193445df7"
806829dependencies = [
807− "predicates-core",
808− "termtree",
830+ "predicates-core 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
831+ "treeline 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
809832]
810833
811834[[package]]
812−name = "proc-macro-error"
813−version = "1.0.4"
835+name = "proc-macro-hack"
836+version = "0.5.15"
837+source = "registry+https://github.com/rust-lang/crates.io-index"
838+
839+[[package]]
840+name = "proc-macro2"
841+version = "1.0.10"
814842source = "registry+https://github.com/rust-lang/crates.io-index"
815−checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
816843dependencies = [
817− "proc-macro-error-attr",
818− "proc-macro2",
819− "quote",
820− "syn",
821− "version_check",
844+ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
822845]
823846
824847[[package]]
825−name = "proc-macro-error-attr"
826−version = "1.0.4"
848+name = "proc-quote"
849+version = "0.3.2"
827850source = "registry+https://github.com/rust-lang/crates.io-index"
828−checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
829851dependencies = [
830− "proc-macro2",
831− "quote",
832− "version_check",
852+ "proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)",
853+ "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
854+ "proc-quote-impl 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
855+ "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
856+ "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
833857]
834858
835859[[package]]
836−name = "proc-macro-hack"
837−version = "0.5.19"
860+name = "proc-quote-impl"
861+version = "0.3.2"
838862source = "registry+https://github.com/rust-lang/crates.io-index"
839−checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
863+dependencies = [
864+ "proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)",
865+ "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
866+ "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
867+]
840868
841869[[package]]
842−name = "proc-macro2"
843−version = "1.0.36"
870+name = "quote"
871+version = "1.0.3"
844872source = "registry+https://github.com/rust-lang/crates.io-index"
845−checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
846873dependencies = [
847− "unicode-xid",
874+ "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
848875]
849876
850877[[package]]
851−name = "quote"
852−version = "1.0.14"
878+name = "rand"
879+version = "0.4.6"
853880source = "registry+https://github.com/rust-lang/crates.io-index"
854−checksum = "47aa80447ce4daf1717500037052af176af5d38cc3e571d9ec1c7353fc10c87d"
855881dependencies = [
856− "proc-macro2",
882+ "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
883+ "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
884+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
885+ "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
886+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
857887]
858888
859889[[package]]
860−name = "redox_syscall"
861−version = "0.2.10"
890+name = "rand_core"
891+version = "0.3.1"
862892source = "registry+https://github.com/rust-lang/crates.io-index"
863−checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff"
864893dependencies = [
865− "bitflags",
894+ "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
866895]
867896
868897[[package]]
869−name = "redox_users"
898+name = "rand_core"
899+version = "0.4.2"
900+source = "registry+https://github.com/rust-lang/crates.io-index"
901+
902+[[package]]
903+name = "rdrand"
870904version = "0.4.0"
871905source = "registry+https://github.com/rust-lang/crates.io-index"
872−checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
873906dependencies = [
874− "getrandom",
875− "redox_syscall",
907+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
876908]
877909
878910[[package]]
879−name = "regex"
880−version = "1.5.5"
911+name = "redox_syscall"
912+version = "0.1.56"
913+source = "registry+https://github.com/rust-lang/crates.io-index"
914+
915+[[package]]
916+name = "redox_users"
917+version = "0.3.4"
881918source = "registry+https://github.com/rust-lang/crates.io-index"
882−checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286"
883919dependencies = [
884− "aho-corasick",
885− "memchr",
886− "regex-syntax",
920+ "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
921+ "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
922+ "rust-argon2 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
887923]
888924
889925[[package]]
890−name = "regex-automata"
891−version = "0.1.10"
926+name = "regex"
927+version = "1.3.7"
892928source = "registry+https://github.com/rust-lang/crates.io-index"
893−checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
929+dependencies = [
930+ "aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)",
931+ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
932+ "regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)",
933+ "thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
934+]
894935
895936[[package]]
896937name = "regex-syntax"
897−version = "0.6.25"
938+version = "0.6.17"
898939source = "registry+https://github.com/rust-lang/crates.io-index"
899−checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
900940
901941[[package]]
902942name = "remove_dir_all"
903−version = "0.5.3"
943+version = "0.5.2"
904944source = "registry+https://github.com/rust-lang/crates.io-index"
905−checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
906945dependencies = [
907− "winapi",
946+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
908947]
909948
910949[[package]]
911−name = "rgb"
912−version = "0.8.31"
950+name = "rust-argon2"
951+version = "0.7.0"
913952source = "registry+https://github.com/rust-lang/crates.io-index"
914−checksum = "9a374af9a0e5fdcdd98c1c7b64f05004f9ea2555b6c75f211daa81268a3c50f1"
915953dependencies = [
916− "bytemuck",
954+ "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
955+ "blake2b_simd 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)",
956+ "constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
957+ "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
917958]
918959
919−[[package]]
920−name = "rustversion"
921−version = "1.0.6"
922−source = "registry+https://github.com/rust-lang/crates.io-index"
923−checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f"
924−
925960[[package]]
926961name = "ryu"
927−version = "1.0.9"
962+version = "1.0.3"
928963source = "registry+https://github.com/rust-lang/crates.io-index"
929−checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
930964
931965[[package]]
932966name = "safemem"
933967version = "0.3.3"
934968source = "registry+https://github.com/rust-lang/crates.io-index"
935−checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
936969
937970[[package]]
938971name = "same-file"
939972version = "1.0.6"
940973source = "registry+https://github.com/rust-lang/crates.io-index"
941−checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
942974dependencies = [
943− "winapi-util",
975+ "winapi-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
944976]
945977
946978[[package]]
947−name = "scopeguard"
948−version = "1.1.0"
979+name = "semver"
980+version = "0.10.0"
949981source = "registry+https://github.com/rust-lang/crates.io-index"
950−checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
982+dependencies = [
983+ "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
984+]
951985
952986[[package]]
953−name = "semver"
954−version = "1.0.7"
987+name = "semver-parser"
988+version = "0.7.0"
955989source = "registry+https://github.com/rust-lang/crates.io-index"
956−checksum = "d65bd28f48be7196d222d95b9243287f48d27aca604e08497513019ff0502cc4"
957990
958991[[package]]
959992name = "serde"
960−version = "1.0.136"
993+version = "1.0.111"
961994source = "registry+https://github.com/rust-lang/crates.io-index"
962−checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789"
963995dependencies = [
964− "serde_derive",
996+ "serde_derive 1.0.111 (registry+https://github.com/rust-lang/crates.io-index)",
965997]
966998
967999[[package]]
9681000name = "serde_derive"
969−version = "1.0.136"
1001+version = "1.0.111"
9701002source = "registry+https://github.com/rust-lang/crates.io-index"
971−checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9"
9721003dependencies = [
973− "proc-macro2",
974− "quote",
975− "syn",
1004+ "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
1005+ "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
1006+ "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
9761007]
9771008
9781009[[package]]
9791010name = "serde_json"
980−version = "1.0.74"
1011+version = "1.0.51"
9811012source = "registry+https://github.com/rust-lang/crates.io-index"
982−checksum = "ee2bb9cd061c5865d345bb02ca49fcef1391741b672b54a0bf7b679badec3142"
9831013dependencies = [
984− "itoa 1.0.1",
985− "ryu",
986− "serde",
1014+ "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
1015+ "ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
1016+ "serde 1.0.111 (registry+https://github.com/rust-lang/crates.io-index)",
9871017]
9881018
9891019[[package]]
9901020name = "serde_yaml"
991−version = "0.8.23"
1021+version = "0.8.12"
9921022source = "registry+https://github.com/rust-lang/crates.io-index"
993−checksum = "a4a521f2940385c165a24ee286aa8599633d162077a54bdcae2a6fd5a7bfa7a0"
9941023dependencies = [
995− "indexmap",
996− "ryu",
997− "serde",
998− "yaml-rust",
1024+ "dtoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
1025+ "linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
1026+ "serde 1.0.111 (registry+https://github.com/rust-lang/crates.io-index)",
1027+ "yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
9991028]
10001029
10011030[[package]]
1002−name = "serial_test"
1003−version = "0.6.0"
1004−source = "registry+https://github.com/rust-lang/crates.io-index"
1005−checksum = "e5bcc41d18f7a1d50525d080fd3e953be87c4f9f1a974f3c21798ca00d54ec15"
1006−dependencies = [
1007− "lazy_static",
1008− "parking_lot",
1009− "serial_test_derive",
1010−]
1011−
1012−[[package]]
1013−name = "serial_test_derive"
1014−version = "0.6.0"
1031+name = "sha-1"
1032+version = "0.8.2"
10151033source = "registry+https://github.com/rust-lang/crates.io-index"
1016−checksum = "2881bccd7d60fb32dfa3d7b3136385312f8ad75e2674aab2852867a09790cae8"
10171034dependencies = [
1018− "proc-macro-error",
1019− "proc-macro2",
1020− "quote",
1021− "rustversion",
1022− "syn",
1035+ "block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
1036+ "digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
1037+ "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
1038+ "opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
10231039]
10241040
1025−[[package]]
1026−name = "shell-escape"
1027−version = "0.1.5"
1028−source = "registry+https://github.com/rust-lang/crates.io-index"
1029−checksum = "45bb67a18fa91266cc7807181f62f9178a6873bfad7dc788c42e6430db40184f"
1030−
10311041[[package]]
10321042name = "shell-words"
1033−version = "1.1.0"
1043+version = "1.0.0"
10341044source = "registry+https://github.com/rust-lang/crates.io-index"
1035−checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
10361045
10371046[[package]]
10381047name = "smallvec"
1039−version = "1.7.0"
1048+version = "1.3.0"
10401049source = "registry+https://github.com/rust-lang/crates.io-index"
1041−checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309"
10421050
10431051[[package]]
10441052name = "std_prelude"
10451053version = "0.2.12"
10461054source = "registry+https://github.com/rust-lang/crates.io-index"
1047−checksum = "8207e78455ffdf55661170876f88daf85356e4edd54e0a3dbc79586ca1e50cbe"
10481055
10491056[[package]]
10501057name = "strsim"
10511058version = "0.8.0"
10521059source = "registry+https://github.com/rust-lang/crates.io-index"
1053−checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
10541060
10551061[[package]]
10561062name = "syn"
1057−version = "1.0.85"
1063+version = "1.0.17"
10581064source = "registry+https://github.com/rust-lang/crates.io-index"
1059−checksum = "a684ac3dcd8913827e18cd09a68384ee66c1de24157e3c556c9ab16d85695fb7"
10601065dependencies = [
1061− "proc-macro2",
1062− "quote",
1063− "unicode-xid",
1066+ "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
1067+ "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
1068+ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
10641069]
10651070
10661071[[package]]
10671072name = "syntect"
1068−version = "5.0.0"
1069−source = "registry+https://github.com/rust-lang/crates.io-index"
1070−checksum = "c6c454c27d9d7d9a84c7803aaa3c50cd088d2906fe3c6e42da3209aa623576a8"
1071−dependencies = [
1072− "bincode",
1073− "bitflags",
1074− "fancy-regex",
1075− "flate2",
1076− "fnv",
1077− "lazy_static",
1078− "once_cell",
1079− "onig",
1080− "plist",
1081− "regex-syntax",
1082− "serde",
1083− "serde_derive",
1084− "serde_json",
1085− "thiserror",
1086− "walkdir",
1087− "yaml-rust",
1088−]
1089−
1090−[[package]]
1091−name = "sys-info"
1092−version = "0.9.1"
1073+version = "4.2.0"
10931074source = "registry+https://github.com/rust-lang/crates.io-index"
1094−checksum = "0b3a0d0aba8bf96a0e1ddfdc352fc53b3df7f39318c71854910c3c4b024ae52c"
10951075dependencies = [
1096− "cc",
1097− "libc",
1076+ "bincode 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
1077+ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
1078+ "fancy-regex 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
1079+ "flate2 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)",
1080+ "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
1081+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
1082+ "lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
1083+ "onig 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
1084+ "plist 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
1085+ "regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)",
1086+ "serde 1.0.111 (registry+https://github.com/rust-lang/crates.io-index)",
1087+ "serde_derive 1.0.111 (registry+https://github.com/rust-lang/crates.io-index)",
1088+ "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)",
1089+ "walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
1090+ "yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
10981091]
10991092
11001093[[package]]
1101−name = "tempfile"
1102−version = "3.3.0"
1094+name = "tempdir"
1095+version = "0.3.7"
11031096source = "registry+https://github.com/rust-lang/crates.io-index"
1104−checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
11051097dependencies = [
1106− "cfg-if",
1107− "fastrand",
1108− "libc",
1109− "redox_syscall",
1110− "remove_dir_all",
1111− "winapi",
1098+ "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
1099+ "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
11121100]
11131101
11141102[[package]]
11151103name = "term_size"
1116−version = "0.3.2"
1104+version = "0.3.1"
11171105source = "registry+https://github.com/rust-lang/crates.io-index"
1118−checksum = "1e4129646ca0ed8f45d09b929036bafad5377103edd06e50bf574b353d2b08d9"
11191106dependencies = [
1120− "libc",
1121− "winapi",
1107+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
1108+ "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
1109+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
11221110]
11231111
11241112[[package]]
1125−name = "termcolor"
1126−version = "1.1.2"
1113+name = "terminal_size"
1114+version = "0.1.12"
11271115source = "registry+https://github.com/rust-lang/crates.io-index"
1128−checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
11291116dependencies = [
1130− "winapi-util",
1117+ "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
1118+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
11311119]
11321120
11331121[[package]]
1134−name = "terminal_size"
1135−version = "0.1.17"
1122+name = "termios"
1123+version = "0.3.2"
11361124source = "registry+https://github.com/rust-lang/crates.io-index"
1137−checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
11381125dependencies = [
1139− "libc",
1140− "winapi",
1126+ "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
11411127]
11421128
1143−[[package]]
1144−name = "termtree"
1145−version = "0.2.3"
1146−source = "registry+https://github.com/rust-lang/crates.io-index"
1147−checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16"
1148−
11491129[[package]]
11501130name = "textwrap"
11511131version = "0.11.0"
11521132source = "registry+https://github.com/rust-lang/crates.io-index"
1153−checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
11541133dependencies = [
1155− "term_size",
1156− "unicode-width",
1134+ "term_size 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
1135+ "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
11571136]
11581137
11591138[[package]]
1160−name = "thiserror"
1161−version = "1.0.31"
1139+name = "thread_local"
1140+version = "1.0.1"
11621141source = "registry+https://github.com/rust-lang/crates.io-index"
1163−checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a"
11641142dependencies = [
1165− "thiserror-impl",
1143+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
11661144]
11671145
11681146[[package]]
1169−name = "thiserror-impl"
1170−version = "1.0.31"
1147+name = "time"
1148+version = "0.1.43"
11711149source = "registry+https://github.com/rust-lang/crates.io-index"
1172−checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a"
11731150dependencies = [
1174− "proc-macro2",
1175− "quote",
1176− "syn",
1151+ "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
1152+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
11771153]
11781154
11791155[[package]]
1180−name = "time"
1181−version = "0.3.5"
1156+name = "treeline"
1157+version = "0.1.0"
11821158source = "registry+https://github.com/rust-lang/crates.io-index"
1183−checksum = "41effe7cfa8af36f439fac33861b66b049edc6f9a32331e2312660529c1c24ad"
1184−dependencies = [
1185− "itoa 0.4.8",
1186− "libc",
1187−]
11881159
11891160[[package]]
1190−name = "tinyvec"
1191−version = "1.5.1"
1161+name = "typenum"
1162+version = "1.12.0"
11921163source = "registry+https://github.com/rust-lang/crates.io-index"
1193−checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2"
1194−dependencies = [
1195− "tinyvec_macros",
1196−]
11971164
11981165[[package]]
1199−name = "tinyvec_macros"
1200−version = "0.1.0"
1166+name = "ucd-trie"
1167+version = "0.1.3"
12011168source = "registry+https://github.com/rust-lang/crates.io-index"
1202−checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
12031169
12041170[[package]]
12051171name = "unicode-bidi"
1206−version = "0.3.7"
1172+version = "0.3.4"
12071173source = "registry+https://github.com/rust-lang/crates.io-index"
1208−checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f"
1174+dependencies = [
1175+ "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
1176+]
12091177
12101178[[package]]
12111179name = "unicode-normalization"
1212−version = "0.1.19"
1180+version = "0.1.12"
12131181source = "registry+https://github.com/rust-lang/crates.io-index"
1214−checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
12151182dependencies = [
1216− "tinyvec",
1183+ "smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
12171184]
12181185
1186+[[package]]
1187+name = "unicode-segmentation"
1188+version = "1.6.0"
1189+source = "registry+https://github.com/rust-lang/crates.io-index"
1190+
12191191[[package]]
12201192name = "unicode-width"
1221−version = "0.1.9"
1193+version = "0.1.7"
12221194source = "registry+https://github.com/rust-lang/crates.io-index"
1223−checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
12241195
12251196[[package]]
12261197name = "unicode-xid"
1227−version = "0.2.2"
1198+version = "0.2.0"
12281199source = "registry+https://github.com/rust-lang/crates.io-index"
1229−checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
12301200
12311201[[package]]
12321202name = "url"
1233−version = "2.2.2"
1203+version = "1.7.2"
12341204source = "registry+https://github.com/rust-lang/crates.io-index"
1235−checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
12361205dependencies = [
1237− "form_urlencoded",
1238− "idna",
1239− "matches",
1240− "percent-encoding",
1206+ "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
1207+ "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
1208+ "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
1209+]
1210+
1211+[[package]]
1212+name = "url"
1213+version = "2.1.1"
1214+source = "registry+https://github.com/rust-lang/crates.io-index"
1215+dependencies = [
1216+ "idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
1217+ "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
1218+ "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
12411219]
12421220
12431221[[package]]
12441222name = "vcpkg"
1245−version = "0.2.15"
1223+version = "0.2.8"
12461224source = "registry+https://github.com/rust-lang/crates.io-index"
1247−checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
12481225
12491226[[package]]
12501227name = "vec_map"
1251−version = "0.8.2"
1228+version = "0.8.1"
12521229source = "registry+https://github.com/rust-lang/crates.io-index"
1253−checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
12541230
12551231[[package]]
12561232name = "version_check"
1257−version = "0.9.4"
1233+version = "0.9.1"
12581234source = "registry+https://github.com/rust-lang/crates.io-index"
1259−checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
12601235
12611236[[package]]
12621237name = "wait-timeout"
12631238version = "0.2.0"
12641239source = "registry+https://github.com/rust-lang/crates.io-index"
1265−checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
12661240dependencies = [
1267− "libc",
1241+ "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
12681242]
12691243
12701244[[package]]
12711245name = "walkdir"
1272−version = "2.3.2"
1246+version = "2.3.1"
12731247source = "registry+https://github.com/rust-lang/crates.io-index"
1274−checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
12751248dependencies = [
1276− "same-file",
1277− "winapi",
1278− "winapi-util",
1249+ "same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
1250+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
1251+ "winapi-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
12791252]
12801253
12811254[[package]]
12821255name = "wasi"
1283−version = "0.10.2+wasi-snapshot-preview1"
1256+version = "0.9.0+wasi-snapshot-preview1"
12841257source = "registry+https://github.com/rust-lang/crates.io-index"
1285−checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
12861258
12871259[[package]]
12881260name = "wild"
1289−version = "2.0.4"
1261+version = "2.0.3"
12901262source = "registry+https://github.com/rust-lang/crates.io-index"
1291−checksum = "035793abb854745033f01a07647a79831eba29ec0be377205f2a25b0aa830020"
12921263dependencies = [
1293− "glob",
1264+ "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
12941265]
12951266
12961267[[package]]
12971268name = "winapi"
1298−version = "0.3.9"
1269+version = "0.2.8"
1270+source = "registry+https://github.com/rust-lang/crates.io-index"
1271+
1272+[[package]]
1273+name = "winapi"
1274+version = "0.3.8"
12991275source = "registry+https://github.com/rust-lang/crates.io-index"
1300−checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
13011276dependencies = [
1302− "winapi-i686-pc-windows-gnu",
1303− "winapi-x86_64-pc-windows-gnu",
1277+ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
1278+ "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
13041279]
13051280
1281+[[package]]
1282+name = "winapi-build"
1283+version = "0.1.1"
1284+source = "registry+https://github.com/rust-lang/crates.io-index"
1285+
13061286[[package]]
13071287name = "winapi-i686-pc-windows-gnu"
13081288version = "0.4.0"
13091289source = "registry+https://github.com/rust-lang/crates.io-index"
1310−checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
13111290
13121291[[package]]
13131292name = "winapi-util"
13141293version = "0.1.5"
13151294source = "registry+https://github.com/rust-lang/crates.io-index"
1316−checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
13171295dependencies = [
1318− "winapi",
1296+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
13191297]
13201298
13211299[[package]]
13221300name = "winapi-x86_64-pc-windows-gnu"
13231301version = "0.4.0"
13241302source = "registry+https://github.com/rust-lang/crates.io-index"
1325−checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
13261303
13271304[[package]]
13281305name = "xml-rs"
1329−version = "0.8.4"
1306+version = "0.8.2"
13301307source = "registry+https://github.com/rust-lang/crates.io-index"
1331−checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3"
13321308
13331309[[package]]
13341310name = "yaml-rust"
1335−version = "0.4.5"
1336−source = "registry+https://github.com/rust-lang/crates.io-index"
1337−checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
1338−dependencies = [
1339− "linked-hash-map",
1340−]
1311+version = "0.4.3"
1312+source = "registry+https://github.com/rust-lang/crates.io-index"
1313+dependencies = [
1314+ "linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
1315+]
1316+
1317+[metadata]
1318+"checksum adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2"
1319+"checksum aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)" = "8716408b8bc624ed7f65d223ddb9ac2d044c0547b6fa4b0d554f3a9540496ada"
1320+"checksum ansi_colours 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1d0f302a81afc6a7f4350c04f0ba7cfab529cc009bca3324b3fb5764e6add8b6"
1321+"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
1322+"checksum ansi_term 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
1323+"checksum anymap 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "33954243bd79057c2de7338850b85983a44588021f8a5fee574a8888c6de4344"
1324+"checksum arrayref 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
1325+"checksum arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8"
1326+"checksum assert_cmd 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c88b9ca26f9c16ec830350d309397e74ee9abdfd8eb1f71cb6ecc71a3fc818da"
1327+"checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
1328+"checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
1329+"checksum base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"
1330+"checksum base64 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "53d1ccbaf7d9ec9537465a97bf19edc1a4e158ecb49fc16178202238c569cc42"
1331+"checksum bincode 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5753e2a71534719bf3f4e57006c3a4f0d2c672a4b676eec84161f763eca87dbf"
1332+"checksum bit-set 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e84c238982c4b1e1ee668d136c510c67a13465279c0cb367ea6baf6310620a80"
1333+"checksum bit-vec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f59bbe95d4e52a6398ec21238d31577f2b28a9d86807f06ca59d191d8440d0bb"
1334+"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
1335+"checksum blake2b_simd 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d8fb2d74254a3a0b5cac33ac9f8ed0e44aa50378d9dbb2e5d83bd21ed1dc2c8a"
1336+"checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
1337+"checksum block-padding 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5"
1338+"checksum bstr 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "2889e6d50f394968c8bf4240dc3f2a7eb4680844d27308f798229ac9d4725f41"
1339+"checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
1340+"checksum byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de"
1341+"checksum cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)" = "c3d87b23d6a92cd03af510a5ade527033f6aa6fa92161e2d5863a907d4c5e31d"
1342+"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
1343+"checksum chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2"
1344+"checksum clap 2.33.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bdfa80d47f954d53a35a64987ca1422f495b8d6483c0fe9f7117b36c2a792129"
1345+"checksum console 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8c0994e656bba7b922d8dd1245db90672ffb701e684e45be58f20719d69abc5a"
1346+"checksum constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
1347+"checksum content_inspector 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b7bda66e858c683005a53a9a60c69a4aca7eeaa45d124526e389f7aec8e62f38"
1348+"checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"
1349+"checksum crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
1350+"checksum difference 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198"
1351+"checksum digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
1352+"checksum dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3"
1353+"checksum dirs-sys 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "afa0b23de8fd801745c471deffa6e12d248f962c9fd4b4c33787b055599bde7b"
1354+"checksum doc-comment 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
1355+"checksum dtoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4358a9e11b9a09cf52383b451b49a169e8d797b68aa02301ff586d70d9661ea3"
1356+"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
1357+"checksum encode_unicode 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
1358+"checksum encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec"
1359+"checksum encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91"
1360+"checksum encoding-index-korean 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81"
1361+"checksum encoding-index-simpchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7"
1362+"checksum encoding-index-singlebyte 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a"
1363+"checksum encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18"
1364+"checksum encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569"
1365+"checksum error-chain 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d371106cc88ffdfb1eabd7111e432da544f16f3e2d7bf1dfe8bf575f1df045cd"
1366+"checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
1367+"checksum fancy-regex 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b0e2de1b89ad299d536b7cefc5d177f5c005957fa2266ce58eca4d189e74bff5"
1368+"checksum flate2 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)" = "2cfff41391129e0a856d6d822600b8d71179d46879e310417eb9c762eb178b42"
1369+"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
1370+"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
1371+"checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec"
1372+"checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"
1373+"checksum git2 0.13.6 (registry+https://github.com/rust-lang/crates.io-index)" = "11e4b2082980e751c4bf4273e9cbb4a02c655729c8ee8a79f66cad03c8f4d31e"
1374+"checksum glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
1375+"checksum globset 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "7ad1da430bd7281dde2576f44c84cc3f0f7b475e7202cd503042dff01a8c8120"
1376+"checksum hermit-abi 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8a0d737e0f947a1864e93d33fdef4af8445a00d1ed8dc0c8ddb73139ea6abf15"
1377+"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e"
1378+"checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9"
1379+"checksum indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "076f042c5b7b98f31d205f1249267e12a6518c1481e9dae9764af19b707d2292"
1380+"checksum itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484"
1381+"checksum itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e"
1382+"checksum jobserver 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2"
1383+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
1384+"checksum kstring 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6382df53100fd22e149030b6634720c94a151076db8d727b3274d7070975d609"
1385+"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
1386+"checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f"
1387+"checksum libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)" = "99e85c08494b21a9054e7fe1374a732aeadaff3980b6990b94bfd3a70f690005"
1388+"checksum libgit2-sys 0.12.6+1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bf81b43f9b45ab07897a780c9b7b26b1504497e469c7a78162fc29e3b8b1c1b3"
1389+"checksum libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe"
1390+"checksum line-wrap 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9"
1391+"checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83"
1392+"checksum liquid 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)" = "62b5a51d24120bc37da30a3bcd741ede7450f00e9fcb0b8648a1d25f7736bc6e"
1393+"checksum liquid-core 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3a922402825d7fd1965364e1d289f909076bcf580e5ae4a5edaf82af1fe7a9dc"
1394+"checksum liquid-derive 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e6fcb48d443dbc49c65b3e5aaecc95e6e911a28b20049d6ac2d94527543fa133"
1395+"checksum liquid-lib 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0629fbd25a919496d2e621e8a3af892bc438273d0f446eb4f0d66ce45117d15d"
1396+"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
1397+"checksum maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
1398+"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
1399+"checksum memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400"
1400+"checksum miniz_oxide 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "aa679ff6578b1cddee93d7e82e263b94a575e0bfced07284eb0c037c1d2416a5"
1401+"checksum num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba"
1402+"checksum num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096"
1403+"checksum once_cell 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b1c601810575c99596d4afc46f78a678c80105117c379eb3650cf99b8a21ce5b"
1404+"checksum onig 6.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bd91ccd8a02fce2f7e8a86655aec67bc6c171e6f8e704118a0e8c4b866a05a8a"
1405+"checksum onig_sys 69.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3814583fad89f3c60ae0701d80e87e1fd3028741723deda72d0d4a0ecf0cb0db"
1406+"checksum opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
1407+"checksum path_abs 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "eb6b8e6dede0bf94e9300e669f335ba92d5fc9fc8be7f4b1ca8a05206489388c"
1408+"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
1409+"checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
1410+"checksum pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"
1411+"checksum pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0"
1412+"checksum pest_generator 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55"
1413+"checksum pest_meta 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d"
1414+"checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677"
1415+"checksum plist 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b336d94e8e4ce29bf15bba393164629764744c567e8ad306cc1fdd0119967fd"
1416+"checksum predicates 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "347a1b6f0b21e636bc9872fb60b83b8e185f6f5516298b8238699f7f9a531030"
1417+"checksum predicates-core 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "06075c3a3e92559ff8929e7a280684489ea27fe44805174c3ebd9328dcb37178"
1418+"checksum predicates-tree 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8e63c4859013b38a76eca2414c64911fba30def9e3202ac461a2d22831220124"
1419+"checksum proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)" = "0d659fe7c6d27f25e9d80a1a094c223f5246f6a6596453e09d7229bf42750b63"
1420+"checksum proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)" = "df246d292ff63439fea9bc8c0a270bed0e390d5ebd4db4ba15aba81111b5abe3"
1421+"checksum proc-quote 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "06ea4226882439d07839be9c7f683e13d6d69d9c2fe960d61f637d1e2fa4c081"
1422+"checksum proc-quote-impl 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7fb3ec628b063cdbcf316e06a8b8c1a541d28fa6c0a8eacd2bfb2b7f49e88aa0"
1423+"checksum quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f"
1424+"checksum rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
1425+"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
1426+"checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
1427+"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
1428+"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
1429+"checksum redox_users 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "09b23093265f8d200fa7b4c2c76297f47e681c655f6f1285a8780d6a022f7431"
1430+"checksum regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a6020f034922e3194c711b82a627453881bc4682166cabb07134a10c26ba7692"
1431+"checksum regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)" = "7fe5bd57d1d7414c6b5ed48563a2c855d995ff777729dcd91c369ec7fea395ae"
1432+"checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e"
1433+"checksum rust-argon2 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017"
1434+"checksum ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535622e6be132bccd223f4bb2b8ac8d53cda3c7a6394944d3b2b33fb974f9d76"
1435+"checksum safemem 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
1436+"checksum same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
1437+"checksum semver 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "394cec28fa623e00903caf7ba4fa6fb9a0e260280bb8cdbbba029611108a0190"
1438+"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
1439+"checksum serde 1.0.111 (registry+https://github.com/rust-lang/crates.io-index)" = "c9124df5b40cbd380080b2cc6ab894c040a3070d995f5c9dc77e18c34a8ae37d"
1440+"checksum serde_derive 1.0.111 (registry+https://github.com/rust-lang/crates.io-index)" = "3f2c3ac8e6ca1e9c80b8be1023940162bf81ae3cffbb1809474152f2ce1eb250"
1441+"checksum serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)" = "da07b57ee2623368351e9a0488bb0b261322a15a6e0ae53e243cbdc0f4208da9"
1442+"checksum serde_yaml 0.8.12 (registry+https://github.com/rust-lang/crates.io-index)" = "16c7a592a1ec97c9c1c68d75b6e537dcbf60c7618e038e7841e00af1d9ccf0c4"
1443+"checksum sha-1 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df"
1444+"checksum shell-words 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b6fa3938c99da4914afedd13bf3d79bcb6c277d1b2c398d23257a304d9e1b074"
1445+"checksum smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05720e22615919e4734f6a99ceae50d00226c3c5aca406e102ebc33298214e0a"
1446+"checksum std_prelude 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "8207e78455ffdf55661170876f88daf85356e4edd54e0a3dbc79586ca1e50cbe"
1447+"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
1448+"checksum syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)" = "0df0eb663f387145cab623dea85b09c2c5b4b0aef44e945d928e682fce71bb03"
1449+"checksum syntect 4.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "83b43a6ca1829ccb0c933b615c9ea83ffc8793ae240cecbd15119b13d741161d"
1450+"checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8"
1451+"checksum term_size 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9e5b9a66db815dcfd2da92db471106457082577c3c278d4138ab3e3b4e189327"
1452+"checksum terminal_size 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "8038f95fc7a6f351163f4b964af631bd26c9e828f7db085f2a84aca56f70d13b"
1453+"checksum termios 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6f0fcee7b24a25675de40d5bb4de6e41b0df07bc9856295e7e2b3a3600c400c2"
1454+"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
1455+"checksum thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14"
1456+"checksum time 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"
1457+"checksum treeline 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a7f741b240f1a48843f9b8e0444fb55fb2a4ff67293b50a9179dfd5ea67f8d41"
1458+"checksum typenum 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33"
1459+"checksum ucd-trie 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
1460+"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5"
1461+"checksum unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4"
1462+"checksum unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0"
1463+"checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479"
1464+"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
1465+"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a"
1466+"checksum url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb"
1467+"checksum vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168"
1468+"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
1469+"checksum version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce"
1470+"checksum wait-timeout 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
1471+"checksum walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d"
1472+"checksum wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)" = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
1473+"checksum wild 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4ba8b7242834f4698a54b1afac075446b29c96c8ed5dc17a1f76a264f8aaeed5"
1474+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
1475+"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
1476+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
1477+"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
1478+"checksum winapi-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
1479+"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
1480+"checksum xml-rs 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2bb76e5c421bbbeb8924c60c030331b345555024d56261dae8f3e786ed817c23"
1481+"checksum yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "65923dd1784f44da1d2c3dbbc5e822045628c590ba72123e1c73d3c230c4434d"
Cargo.toml+33−46
@@ -1,13 +1,17 @@
11[package]
22authors = ["David Peter <mail@david-peter.de>"]
33categories = ["command-line-utilities"]
4−description = "A cat(1) clone with wings."
4+description="A cat(1) clone with wings."
55homepage = "https://github.com/sharkdp/bat"
66license = "MIT/Apache-2.0"
77name = "bat"
8+readme = "README.md"
89repository = "https://github.com/sharkdp/bat"
9−version = "0.21.0"
10−exclude = ["assets/syntaxes/*", "assets/themes/*"]
10+version = "0.15.4"
11+exclude = [
12+ "assets/syntaxes/*",
13+ "assets/themes/*",
14+]
1115build = "build.rs"
1216edition = '2018'
1317
@@ -16,84 +20,67 @@ default = ["application"]
1620# Feature required for bat the application. Should be disabled when depending on
1721# bat as a library.
1822application = [
19− "bugreport",
20− "build-assets",
21− "git",
22− "minimal-application",
23−]
24−# Mainly for developers that want to iterate quickly
25−# Be aware that the included features might change in the future
26−minimal-application = [
2723 "atty",
2824 "clap",
29− "dirs-next",
25+ "dirs",
26+ "git",
27+ "lazy_static",
28+ "liquid",
3029 "paging",
31− "regex-onig",
3230 "wild",
31+ "regex-onig",
3332]
3433git = ["git2"] # Support indicating git modifications
35−paging = ["shell-words", "grep-cli"] # Support applying a pager on the output
36−build-assets = ["syntect/yaml-load", "syntect/plist-load", "regex", "walkdir"]
37−
38−# You need to use one of these if you depend on bat as a library:
34+paging = ["shell-words"] # Support applying a pager on the output
3935regex-onig = ["syntect/regex-onig"] # Use the "oniguruma" regex engine
4036regex-fancy = ["syntect/regex-fancy"] # Use the rust-only "fancy-regex" engine
4137
4238[dependencies]
4339atty = { version = "0.2.14", optional = true }
4440ansi_term = "^0.12.1"
45−ansi_colours = "^1.1"
46−bincode = "1.0"
47−console = "0.15.0"
48−flate2 = "1.0"
49−once_cell = "1.10"
50−thiserror = "1.0"
41+ansi_colours = "^1.0"
42+console = "0.11.3"
43+dirs = { version = "2.0", optional = true }
44+lazy_static = { version = "1.4", optional = true }
5145wild = { version = "2.0", optional = true }
5246content_inspector = "0.2.4"
5347encoding = "0.2"
54−shell-words = { version = "1.1.0", optional = true }
55−unicode-width = "0.1.9"
48+shell-words = { version = "1.0.0", optional = true }
49+unicode-width = "0.1.7"
5650globset = "0.4"
5751serde = { version = "1.0", features = ["derive"] }
5852serde_yaml = "0.8"
59−semver = "1.0"
53+semver = "0.10"
6054path_abs = { version = "0.5", default-features = false }
61−clircle = "0.3"
62−bugreport = { version = "0.5.0", optional = true }
63−dirs-next = { version = "2.0.0", optional = true }
64−grep-cli = { version = "0.1.6", optional = true }
65−regex = { version = "1.5.5", optional = true }
66−walkdir = { version = "2.0", optional = true }
67−bytesize = { version = "1.1.0" }
6855
6956[dependencies.git2]
70−version = "0.14"
57+version = "0.13"
7158optional = true
7259default-features = false
7360
7461[dependencies.syntect]
75−version = "5.0.0"
62+version = "4.2.0"
7663default-features = false
77−features = ["parsing"]
64+features = ["parsing", "yaml-load", "dump-load", "dump-create"]
7865
7966[dependencies.clap]
80−version = "2.34"
67+version = "2.33"
8168optional = true
8269default-features = false
8370features = ["suggestions", "color", "wrap_help"]
8471
85−[dev-dependencies]
86−assert_cmd = "2.0.4"
87−serial_test = "0.6.0"
88−predicates = "2.1.1"
89−wait-timeout = "0.2.0"
90−tempfile = "3.3.0"
72+[dependencies.error-chain]
73+version = "0.12"
74+default-features = false
9175
92−[target.'cfg(unix)'.dev-dependencies]
93−nix = { version = "0.24.1", default-features = false, features = ["term"] }
76+[dev-dependencies]
77+tempdir = "0.3"
78+assert_cmd = "1.0.1"
79+predicates = "1.0.4"
9480
9581[build-dependencies]
96−clap = { version = "2.34", optional = true }
82+clap = { version = "2.33", optional = true }
83+liquid = { version = "0.20", optional = true }
9784
9885[profile.release]
9986lto = true
LICENSE-MIT+1−1
@@ -1,4 +1,4 @@
1−Copyright (c) 2018-2021 bat-developers (https://github.com/sharkdp/bat).
1+Copyright (c) 2018-2020 bat-developers (https://github.com/sharkdp/bat).
22
33Permission is hereby granted, free of charge, to any person obtaining a copy
44of this software and associated documentation files (the "Software"), to deal
NOTICEdeleted−6
@@ -1,6 +0,0 @@
1−Copyright (c) 2018-2021 bat-developers (https://github.com/sharkdp/bat).
2−
3−bat is made available under the terms of either the MIT License or the Apache
4−License 2.0, at your option.
5−
6−See the LICENSE-APACHE and LICENSE-MIT files for license details.
README.md+61−245
@@ -1,6 +1,7 @@
11<p align="center">
22 <img src="doc/logo-header.svg" alt="bat - a cat clone with wings"><br>
3− <a href="https://github.com/sharkdp/bat/actions?query=workflow%3ACICD"><img src="https://github.com/sharkdp/bat/workflows/CICD/badge.svg" alt="Build Status"></a>
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>
45 <img src="https://img.shields.io/crates/l/bat.svg" alt="license">
56 <a href="https://crates.io/crates/bat"><img src="https://img.shields.io/crates/v/bat.svg?colorB=319e8c" alt="Version info"></a><br>
67 A <i>cat(1)</i> clone with syntax highlighting and Git integration.
@@ -12,26 +13,9 @@
1213 <a href="#installation">Installation</a> •
1314 <a href="#customization">Customization</a> •
1415 <a href="#project-goals-and-alternatives">Project goals, alternatives</a><br>
15− [English]
16− [<a href="doc/README-zh.md">中文</a>]
17− [<a href="doc/README-ja.md">日本語</a>]
18− [<a href="doc/README-ko.md">한국어</a>]
19− [<a href="doc/README-ru.md">Русский</a>]
16+ [<a href="https://github.com/chinanf-boy/bat-zh">中文</a>] [<a href="doc/README-ja.md">日本語</a>] [<a href="doc/README-ko.md">한국어</a>] [<a href="doc/README-ru.md">Русский</a>]
2017</p>
2118
22−### Sponsors
23−
24−A special *thank you* goes to our biggest <a href="doc/sponsors.md">sponsors</a>:<br>
25−<a href="https://workos.com/?utm_campaign=github_repo&utm_medium=referral&utm_content=bat&utm_source=github">
26− <img src="doc/sponsors/workos-logo-white-bg.svg" width="200" alt="WorkOS">
27− <br>
28− <strong>Your app, enterprise-ready.</strong>
29− <br>
30− <sub>Start selling to enterprise customers with just a few lines of code.</sub>
31− <br>
32− <sup>Add Single Sign-On (and more) in minutes instead of months.</sup>
33−</a>
34−
3519### Syntax highlighting
3620
3721`bat` supports syntax highlighting for a large number of programming and markup
@@ -55,14 +39,14 @@ characters:
5539
5640### Automatic paging
5741
58−By default, `bat` pipes its own output to a pager (e.g. `less`) if the output is too large for one screen.
59−If you would rather `bat` work like `cat` all the time (never page output), you can set `--paging=never` as an option, either on the command line or in your configuration file.
60−If you intend to alias `cat` to `bat` in your shell configuration, you can use `alias cat='bat --paging=never'` to preserve the default behavior.
42+`bat` can pipe its own output to `less` if the output is too large for one screen.
6143
62−#### File concatenation
44+### File concatenation
6345
64−Even with a pager set, you can still use `bat` to concatenate files :wink:.
65−Whenever `bat` detects a non-interactive terminal (i.e. when you pipe into another process or into a file), `bat` will act as a drop-in replacement for `cat` and fall back to printing the plain file contents, regardless of the `--pager` option's value.
46+Oh.. you can also use it to concatenate files :wink:. Whenever
47+`bat` detects a non-interactive terminal (i.e. when you pipe into another process
48+or into a file), `bat` will act as a drop-in replacement for `cat` and
49+fall back to printing the plain file contents.
6650
6751## How to use
6852
@@ -111,28 +95,14 @@ bat f - g # output 'f', then stdin, then 'g'.
11195
11296### Integration with other tools
11397
114−#### `fzf`
115−
116−You can use `bat` as a previewer for [`fzf`](https://github.com/junegunn/fzf). To do this,
117−use `bat`s `--color=always` option to force colorized output. You can also use `--line-range`
118−option to restrict the load times for long files:
119−
120−```bash
121−fzf --preview 'bat --color=always --style=numbers --line-range=:500 {}'
122−```
123−
124−For more information, see [`fzf`'s `README`](https://github.com/junegunn/fzf#preview-window).
125−
12698#### `find` or `fd`
12799
128100You can use the `-exec` option of `find` to preview all search results with `bat`:
129−
130101```bash
131102find … -exec bat {} +
132103```
133104
134105If you happen to use [`fd`](https://github.com/sharkdp/fd), you can use the `-X`/`--exec-batch` option to do the same:
135−
136106```bash
137107fd … -X bat
138108```
@@ -148,11 +118,9 @@ batgrep needle src/
148118#### `tail -f`
149119
150120`bat` can be combined with `tail -f` to continuously monitor a given file with syntax highlighting.
151−
152121```bash
153122tail -f /var/log/pacman.log | bat --paging=never -l log
154123```
155−
156124Note that we have to switch off paging in order for this to work. We have also specified the syntax
157125explicitly (`-l log`), as it can not be auto-detected in this case.
158126
@@ -160,23 +128,11 @@ explicitly (`-l log`), as it can not be auto-detected in this case.
160128
161129You can combine `bat` with `git show` to view an older version of a given file with proper syntax
162130highlighting:
163−
164131```bash
165132git show v0.6.0:src/main.rs | bat -l rs
166133```
167134
168−#### `git diff`
169−
170−You can combine `bat` with `git diff` to view lines around code changes with proper syntax
171−highlighting:
172−```bash
173−batdiff() {
174− git diff --name-only --relative --diff-filter=d | xargs bat --diff
175−}
176−```
177−If you prefer to use this as a separate tool, check out `batdiff` in [`bat-extras`](https://github.com/eth-p/bat-extras).
178−
179−If you are looking for more support for git and diff operations, check out [`delta`](https://github.com/dandavison/delta).
135+Note that syntax highlighting within diffs is currently not supported. If you are looking for this, check out [`delta`](https://github.com/dandavison/delta).
180136
181137#### `xclip`
182138
@@ -197,7 +153,6 @@ bat main.cpp | xclip
197153export MANPAGER="sh -c 'col -bx | bat -l man -p'"
198154man 2 select
199155```
200−(replace `bat` with `batcat` if you are on Debian or Ubuntu)
201156
202157It might also be necessary to set `MANROFFOPT="-c"` if you experience
203158formatting problems.
@@ -206,47 +161,30 @@ If you prefer to have this bundled in a new command, you can also use [`batman`]
206161
207162Note that the [Manpage syntax](assets/syntaxes/02_Extra/Manpage.sublime-syntax) is developed in this repository and still needs some work.
208163
209−Also, note that this will [not work](https://github.com/sharkdp/bat/issues/1145) with Mandocs `man` implementation.
210−
211164#### `prettier` / `shfmt` / `rustfmt`
212165
213166The [`prettybat`](https://github.com/eth-p/bat-extras/blob/master/doc/prettybat.md) script is a wrapper that will format code and print it with `bat`.
214167
215−#### Highlighting `--help` messages
216−
217−You can use `bat` to colorize help text: `$ cp --help | bat -plhelp`
218−
219−You can also use a wrapper around this:
220−
221−```bash
222−# in your .bashrc/.zshrc/*rc
223−alias bathelp='bat --plain --language=help'
224−help() {
225− "$@" --help 2>&1 | bathelp
226−}
227−```
228−
229−Then you can do `$ help cp` or `$ help git commit`.
230−
231−Please report any issues with the help syntax in [this repository](https://github.com/victor-gp/cmd-help-sublime-syntax).
232−
233168
234169## Installation
235170
236−[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg)](https://repology.org/project/bat-cat/versions)
171+[![Packaging status](https://repology.org/badge/vertical-allrepos/bat.svg)](https://repology.org/project/bat/versions)
237172
238173### On Ubuntu (using `apt`)
239174*... and other Debian-based Linux distributions.*
240175
241−`bat` is available on [Ubuntu since 20.04 ("Focal")](https://packages.ubuntu.com/search?keywords=bat&exact=1) and [Debian since August 2021 (Debian 11 - "Bullseye")](https://packages.debian.org/bullseye/bat).
176+`bat` is making its way through the [Ubuntu](https://packages.ubuntu.com/eoan/bat) and
177+[Debian](https://packages.debian.org/sid/bat) package release process, and is available
178+for Ubuntu as of Eoan 19.10. On Debian `bat` is currently only available on the unstable
179+"Sid" branch.
242180
243181If your Ubuntu/Debian installation is new enough you can simply run:
244182
245183```bash
246−sudo apt install bat
184+apt install bat
247185```
248186
249−**Important**: If you install `bat` this way, please note that the executable may be installed as `batcat` instead of `bat` (due to [a name
187+If you install `bat` this way, please note that the executable may be installed as `batcat` instead of `bat` (due to [a name
250188clash with another package](https://github.com/sharkdp/bat/issues/982)). You can set up a `bat -> batcat` symlink or alias to prevent any issues that may come up because of this and to be consistent with other distributions:
251189``` bash
252190mkdir -p ~/.local/bin
@@ -261,7 +199,7 @@ the most recent release of `bat`, download the latest `.deb` package from the
261199[release page](https://github.com/sharkdp/bat/releases) and install it via:
262200
263201```bash
264−sudo dpkg -i bat_0.18.3_amd64.deb # adapt version number and architecture
202+sudo dpkg -i bat_0.15.4_amd64.deb # adapt version number and architecture
265203```
266204
267205### On Alpine Linux
@@ -290,14 +228,6 @@ You can install [the `bat` package](https://koji.fedoraproject.org/koji/packagei
290228dnf install bat
291229```
292230
293−### On Funtoo Linux
294−
295−You can install [the `bat` package](https://github.com/funtoo/dev-kit/tree/1.4-release/sys-apps/bat) from dev-kit.
296−
297−```bash
298−emerge sys-apps/bat
299−```
300−
301231### On Gentoo Linux
302232
303233You can install [the `bat` package](https://packages.gentoo.org/packages/sys-apps/bat)
@@ -314,13 +244,6 @@ You can install `bat` via xbps-install:
314244xbps-install -S bat
315245```
316246
317−### On Termux
318−
319−You can install `bat` via pkg:
320−```bash
321−pkg install bat
322−```
323−
324247### On FreeBSD
325248
326249You can install a precompiled [`bat` package](https://www.freshports.org/textproc/bat) with pkg:
@@ -336,14 +259,6 @@ cd /usr/ports/textproc/bat
336259make install
337260```
338261
339−### On OpenBSD
340−
341−You can install `bat` package using [`pkg_add(1)`](https://man.openbsd.org/pkg_add.1):
342−
343−```bash
344−pkg_add bat
345−```
346−
347262### Via nix
348263
349264You can install `bat` using the [nix package manager](https://nixos.org/nix):
@@ -360,21 +275,14 @@ You can install `bat` with zypper:
360275zypper install bat
361276```
362277
363−### Via snap package
364−
365−There is currently no recommended snap package available.
366−Existing packages may be available, but are not officially supported and may contain [issues](https://github.com/sharkdp/bat/issues/1519).
278+### On macOS
367279
368−### On macOS (or Linux) via Homebrew
369−
370−You can install `bat` with [Homebrew on MacOS](https://formulae.brew.sh/formula/bat) or [Homebrew on Linux](https://formulae.brew.sh/formula-linux/bat):
280+You can install `bat` with [Homebrew](http://braumeister.org/formula/bat):
371281
372282```bash
373283brew install bat
374284```
375285
376−### On macOS via MacPorts
377−
378286Or install `bat` with [MacPorts](https://ports.macports.org/port/bat/summary):
379287
380288```bash
@@ -386,10 +294,6 @@ port install bat
386294There are a few options to install `bat` on Windows. Once you have installed `bat`,
387295take a look at the ["Using `bat` on Windows"](#using-bat-on-windows) section.
388296
389−#### Prerequisites
390−
391−You will need to install the [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) package.
392−
393297#### With Chocolatey
394298
395299You can install `bat` via [Chocolatey](https://chocolatey.org/packages/Bat):
@@ -404,12 +308,22 @@ You can install `bat` via [scoop](https://scoop.sh/):
404308scoop install bat
405309```
406310
311+You will need to install the [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) package.
312+
407313#### From prebuilt binaries:
408314
409315You can download prebuilt binaries from the [Release page](https://github.com/sharkdp/bat/releases),
410316
411317You will need to install the [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) package.
412318
319+### Via Docker
320+
321+There is a [Docker image](https://hub.docker.com/r/danlynn/bat/) that you can use to run `bat` in a container:
322+```bash
323+docker pull danlynn/bat
324+alias bat='docker run -it --rm -e BAT_THEME -e BAT_STYLE -e BAT_TABS -v "$(pwd):/myapp" danlynn/bat'
325+```
326+
413327### From binaries
414328
415329Check out the [Release page](https://github.com/sharkdp/bat/releases) for
@@ -418,16 +332,13 @@ binaries are also available: look for archives with `musl` in the file name.
418332
419333### From source
420334
421−If you want to build `bat` from source, you need Rust 1.51 or
335+If you want to build `bat` from source, you need Rust 1.40 or
422336higher. You can then use `cargo` to build everything:
423337
424338```bash
425339cargo install --locked bat
426340```
427341
428−Note that additional files like the man page or shell completion
429−files can not be installed in this way. They will be generated by `cargo` and should be available in the cargo target folder (under `build`).
430−
431342## Customization
432343
433344### Highlighting theme
@@ -450,26 +361,6 @@ light background, some themes like `GitHub` or `OneHalfLight` will work better f
450361You can also use a custom theme by following the
451362['Adding new themes' section below](https://github.com/sharkdp/bat#adding-new-themes).
452363
453−### 8-bit themes
454−
455−`bat` has three themes that always use [8-bit colors](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors),
456−even when truecolor support is available:
457−
458−- `ansi` looks decent on any terminal. It uses 3-bit colors: black, red, green,
459− yellow, blue, magenta, cyan, and white.
460−- `base16` is designed for [base16](https://github.com/chriskempson/base16) terminal themes. It uses
461− 4-bit colors (3-bit colors plus bright variants) in accordance with the
462− [base16 styling guidelines](https://github.com/chriskempson/base16/blob/master/styling.md).
463−- `base16-256` is designed for [base16-shell](https://github.com/chriskempson/base16-shell).
464− It replaces certain bright colors with 8-bit colors from 16 to 21. **Do not** use this simply
465− because you have a 256-color terminal but are not using base16-shell.
466−
467−Although these themes are more restricted, they have three advantages over truecolor themes. They:
468−
469−- Enjoy maximum compatibility. Some terminal utilities do not support more than 3-bit colors.
470−- Adapt to terminal theme changes. Even for already printed output.
471−- Visually harmonize better with other terminal software.
472−
473364### Output style
474365
475366You can use the `--style` option to control the appearance of `bat`s output.
@@ -480,45 +371,35 @@ variable to make these changes permanent or use `bat`s
480371
481372### Adding new syntaxes / language definitions
482373
483−Should you find that a particular syntax is not available within `bat`, you can follow these
484−instructions to easily add new syntaxes to your current `bat` installation.
485−
486374`bat` uses the excellent [`syntect`](https://github.com/trishume/syntect/)
487375library for syntax highlighting. `syntect` can read any
488376[Sublime Text `.sublime-syntax` file](https://www.sublimetext.com/docs/3/syntax.html)
489−and theme.
490−
491−A good resource for finding Sublime Syntax packages is [Package Control](https://packagecontrol.io/). Once you found a
492−syntax:
377+and theme. To add new syntax definitions, do the following.
493378
494−1. Create a folder with syntax definition files:
379+Create a folder with syntax definition files:
495380
496− ```bash
497− mkdir -p "$(bat --config-dir)/syntaxes"
498− cd "$(bat --config-dir)/syntaxes"
499−
500− # Put new '.sublime-syntax' language definition files
501− # in this folder (or its subdirectories), for example:
502− git clone https://github.com/tellnobody1/sublime-purescript-syntax
503− ```
381+```bash
382+mkdir -p "$(bat --config-dir)/syntaxes"
383+cd "$(bat --config-dir)/syntaxes"
504384
505−2. Now use the following command to parse these files into a binary cache:
385+# Put new '.sublime-syntax' language definition files
386+# in this folder (or its subdirectories), for example:
387+git clone https://github.com/tellnobody1/sublime-purescript-syntax
388+```
506389
507− ```bash
508− bat cache --build
509− ```
390+Now use the following command to parse these files into a binary cache:
510391
511−3. Finally, use `bat --list-languages` to check if the new languages are available.
392+```bash
393+bat cache --build
394+```
512395
513− If you ever want to go back to the default settings, call:
396+Finally, use `bat --list-languages` to check if the new languages are available.
514397
515− ```bash
516− bat cache --clear
517− ```
398+If you ever want to go back to the default settings, call:
518399
519−4. If you think that a specific syntax should be included in `bat` by default, please
520− consider opening a "syntax request" ticket after reading the policies and
521− instructions [here](doc/assets.md): [Open Syntax Request](https://github.com/sharkdp/bat/issues/new?labels=syntax-request&template=syntax_request.md).
400+```bash
401+bat cache --clear
402+```
522403
523404### Adding new themes
524405
@@ -538,34 +419,6 @@ bat cache --build
538419
539420Finally, use `bat --list-themes` to check if the new themes are available.
540421
541−### Adding or changing file type associations
542−
543−You can add new (or change existing) file name patterns using the `--map-syntax`
544−command line option. The option takes an argument of the form `pattern:syntax` where
545−`pattern` is a glob pattern that is matched against the file name and
546−the absolute file path. The `syntax` part is the full name of a supported language
547−(use `bat --list-languages` for an overview).
548−
549−**Note:** You probably want to use this option as [an entry in `bat`'s configuration file](#configuration-file)
550−for persistence instead of passing it on the command line as a one-off. Generally
551−you'd just use `-l` if you want to manually specify a language for a file.
552−
553−Example: To use "INI" syntax highlighting for all files with a `.conf` file extension, use
554−```bash
555−--map-syntax='*.conf:INI'
556−```
557−
558−Example: To open all files called `.ignore` (exact match) with the "Git Ignore" syntax, use:
559−```bash
560−--map-syntax='.ignore:Git Ignore'
561−```
562−
563−Example: To open all `.conf` files in subfolders of `/etc/apache2` with the "Apache Conf"
564−syntax, use (this mapping is already built in):
565−```bash
566−--map-syntax='/etc/apache2/**/*.conf:Apache Conf'
567−```
568−
569422### Using a different pager
570423
571424`bat` uses the pager that is specified in the `PAGER` environment variable. If this variable is not
@@ -573,8 +426,6 @@ set, `less` is used by default. If you want to use a different pager, you can ei
573426`PAGER` variable or set the `BAT_PAGER` environment variable to override what is specified in
574427`PAGER`.
575428
576−**Note**: If `PAGER` is `more` or `most`, `bat` will silently use `less` instead to ensure support for colors.
577−
578429If you want to pass command-line arguments to the pager, you can also set them via the
579430`PAGER`/`BAT_PAGER` variables:
580431
@@ -599,16 +450,6 @@ If you want to enable mouse-wheel scrolling on older versions of `less`, you can
599450in the example above, this will disable the quit-if-one-screen feature). For less 530 or newer,
600451it should work out of the box.
601452
602−### Indentation
603−
604−`bat` expands tabs to 4 spaces by itself, not relying on the pager. To change this, simply add the
605−`--tabs` argument with the number of spaces you want to be displayed.
606−
607−**Note**: Defining tab stops for the pager (via the `--pager` argument by `bat`, or via the `LESS`
608−environment variable for `less`) won't be taken into account because the pager will already get
609−expanded spaces instead of tabs. This behaviour is added to avoid indentation issues caused by the
610−sidebar. Calling `bat` with `--tabs=0` will override it and let tabs be consumed by the pager.
611−
612453### Dark mode
613454
614455If you make use of the dark mode feature in macOS, you might want to configure `bat` to use a different
@@ -619,12 +460,11 @@ and the `GitHub` theme when in the _light mode_.
619460alias cat="bat --theme=\$(defaults read -globalDomain AppleInterfaceStyle &> /dev/null && echo default || echo GitHub)"
620461```
621462
622−
623463## Configuration file
624464
625465`bat` can also be customized with a configuration file. The location of the file is dependent
626466on your operating system. To get the default path for your system, call
627−```bash
467+```
628468bat --config-file
629469```
630470
@@ -654,18 +494,17 @@ Example configuration file:
654494# Use italic text on the terminal (not supported on all terminals)
655495--italic-text=always
656496
657−# Use C++ syntax for Arduino .ino files
497+# Use C++ syntax for .ino files
658498--map-syntax "*.ino:C++"
499+
500+# Use ".gitignore"-style highlighting for ".ignore" files
501+--map-syntax ".ignore:Git Ignore"
659502```
660503
661504## Using `bat` on Windows
662505
663506`bat` mostly works out-of-the-box on Windows, but a few features may need extra configuration.
664507
665−### Prerequisites
666−
667−You will need to install the [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) package.
668−
669508### Paging
670509
671510Windows only includes a very limited pager in the form of `more`. You can download a Windows binary
@@ -706,19 +545,11 @@ bat() {
706545
707546## Troubleshooting
708547
709−### Garbled output
710−
711−If an input file contains color codes or other ANSI escape sequences or control characters, `bat` will have problems
712−performing syntax highlighting and text wrapping, and thus the output can become garbled.
713−When displaying such files it is recommended to disable both syntax highlighting and wrapping by
714−passing the `--color=never --wrap=never` options to `bat`.
715−
716548### Terminals & colors
717549
718−`bat` handles terminals *with* and *without* truecolor support. However, the colors in most syntax
719−highlighting themes are not optimized for 8-bit colors. It is therefore strongly recommended
720−that you use a terminal with 24-bit truecolor support (`terminator`, `konsole`, `iTerm2`, ...),
721−or use one of the basic [8-bit themes](#8-bit-themes) designed for a restricted set of colors.
550+`bat` handles terminals *with* and *without* truecolor support. However, the colors in the syntax
551+highlighting themes are not optimized for 8-bit colors and it is therefore strongly recommended
552+that you use a terminal with 24-bit truecolor support (`terminator`, `konsole`, `iTerm2`, ...).
722553See [this article](https://gist.github.com/XVilka/8346728) for more details and a full list of
723554terminals with truecolor support.
724555
@@ -757,32 +588,17 @@ cargo build --bins
757588cargo test
758589
759590# Install (release version)
760−cargo install --path . --locked
591+cargo install --locked
761592
762593# Build a bat binary with modified syntaxes and themes
763594bash assets/create.sh
764−cargo install --path . --locked --force
595+cargo install --locked --force
765596```
766597
767−If you want to build an application that uses `bat`s pretty-printing
768−features as a library, check out the [the API documentation](https://docs.rs/bat/).
769−Note that you have to use either `regex-onig` or `regex-fancy` as a feature
770−when you depend on `bat` as a library.
771−
772−## Contributing
773−
774−Take a look at the [`CONTRIBUTING.md`](CONTRIBUTING.md) guide.
775−
776598## Maintainers
777599
778600- [sharkdp](https://github.com/sharkdp)
779601- [eth-p](https://github.com/eth-p)
780−- [keith-hall](https://github.com/keith-hall)
781−- [Enselic](https://github.com/Enselic)
782−
783−## Security vulnerabilities
784−
785−Please contact [David Peter](https://david-peter.de/) via email if you want to report a vulnerability in `bat`.
786602
787603## Project goals and alternatives
788604
@@ -797,8 +613,8 @@ There are a lot of alternatives, if you are looking for similar programs. See
797613[this document](doc/alternatives.md) for a comparison.
798614
799615## License
800−Copyright (c) 2018-2021 [bat-developers](https://github.com/sharkdp/bat).
616+Copyright (c) 2018-2020 [bat-developers](https://github.com/sharkdp/bat).
801617
802−`bat` is made available under the terms of either the MIT License or the Apache License 2.0, at your option.
618+`bat` is distributed under the terms of both the MIT License and the Apache License 2.0.
803619
804620See the [LICENSE-APACHE](LICENSE-APACHE) and [LICENSE-MIT](LICENSE-MIT) files for license details.
appveyor.ymlnew file+49
@@ -0,0 +1,49 @@
1+environment:
2+ global:
3+ TARGET: x86_64-pc-windows-msvc
4+ RUST_VERSION: stable
5+ CRATE_NAME: bat
6+ CARGO_HOME: "c:\\cargo"
7+ RUSTUP_HOME: "c:\\rustup"
8+
9+install:
10+ - appveyor DownloadFile https://win.rustup.rs/ -FileName rustup-init.exe
11+ - rustup-init.exe -y --default-host %TARGET% --profile minimal
12+ - set PATH=%PATH%;C:\cargo\bin
13+ - rustc -Vv
14+ - cargo -V
15+
16+build: false
17+test_script:
18+ - cargo test --target %TARGET% --verbose
19+ - cargo run --target %TARGET% -- src/bin/bat/main.rs README.md --paging=never
20+
21+before_deploy:
22+ # Generate artifacts for release
23+ - cargo build --bins --release --verbose
24+ - ps: ci\before_deploy.ps1
25+
26+deploy:
27+ description: 'Automatically deployed release'
28+ artifact: /.*\.zip/
29+ # Here's how:
30+ # - Go to 'https://github.com/settings/tokens/new' and generate a Token with only the
31+ # `public_repo` scope enabled
32+ # - Then go to 'https://ci.appveyor.com/tools/encrypt' and enter the newly generated token.
33+ # - Enter the "encrypted value" below
34+ auth_token:
35+ secure: oO4/J+hcFXgXcEqEc8gzlQNqLG0IxU78s4EyH+uczGdsyWajb3yipxPR6nXUvmoj
36+ provider: GitHub
37+ on:
38+ RUST_VERSION: stable
39+ appveyor_repo_tag: true
40+
41+cache:
42+ - C:\Users\appveyor\.cargo\registry
43+ - target
44+
45+notifications:
46+ - provider: Email
47+ on_build_success: false
48+ on_build_failure: false
49+ on_build_status_changed: false
assets/README.mdnew file+51
@@ -0,0 +1,51 @@
1+## Syntax Highlighting in bat
2+
3+`bat` uses the [syntect](https://github.com/trishume/syntect) library to highlight source
4+code. As a basis, syntect uses [Sublime Text](https://www.sublimetext.com/) syntax definitions
5+in the `.sublime-syntax` format.
6+
7+In order to add new syntaxes to `bat`, follow these steps:
8+
9+1. Find a Sublime Text syntax for the given language, preferably in a separate Git repository
10+ which can be included as a submodule (under `assets/syntaxes`).
11+
12+2. If the Sublime Text syntax is only available as a `.tmLanguage` file, open the file in
13+ Sublime Text and convert it to a `.sublime-syntax` file via *Tools* -> *Developer* ->
14+ *New Syntax from XXX.tmLanguage...*. Save the new file in the `assets/syntaxes` folder.
15+
16+3. Run the `create.sh` script. It calls `bat cache --build` to parse all available
17+ `.sublime-syntax` files and serialize them to a `syntaxes.bin` file (in this folder).
18+
19+4. Re-compile `bat`. At compilation time, the `syntaxes.bin` file will be stored inside the
20+ `bat` binary.
21+
22+5. If you send a pull request with your changes, please do *not* include the changed `syntaxes.bin`
23+ file. A new binary cache file will be created once before every new release of `bat`.
24+
25+### Troubleshooting
26+
27+Make sure that the local cache does not interfere with the internally stored syntaxes and
28+themes (`bat cache --clear`).
29+
30+### Manual modifications
31+
32+The following files have been manually modified after converting from a `.tmLanguage` file:
33+
34+* `Dart.sublime-syntax` => removed `#regex.dart` include.
35+* `INI.sublime-syntax` => added `.hgrc`, `hgrc`, and `desktop` file types.
36+* `Org mode.sublime-syntax` => removed `task` file type.
37+* `SML.sublime_syntax` => removed `ml` file type.
38+
39+### Non-submodule additions
40+
41+* `Assembly (x86_64)` has been manually added from https://github.com/13xforever/x86-assembly-textmate-bundle due to `git clone` recursion problems
42+* `Nim.sublime-syntax` has been added manually from https://github.com/getzola/zola/blob/master/sublime_syntaxes/Nim.sublime-syntax as there was no suitable Git repository for it. The original syntax seems to originate from https://github.com/Varriount/NimLime
43+* `Rego.sublime-syntax` has been added manually from https://github.com/open-policy-agent/opa/blob/master/misc/syntax/sublime/rego.sublime-syntax
44+ as it is not kept in a standalone repository. The file is generated from
45+ https://github.com/open-policy-agent/opa/blob/master/misc/syntax/textmate/Rego.tmLanguage
46+* `SML.sublime_syntax` has been added manually from
47+ https://github.com/seanjames777/SML-Language-Definitiona as it is not
48+ kept in a standalone repository. The file generated is from
49+ https://github.com/seanjames777/SML-Language-Definition/blob/master/sml.tmLanguage
50+* `Cabal.sublime_syntax` has been added manually from
51+ https://github.com/SublimeHaskell/SublimeHaskell/ - we don't want to include the whole submodule because it includes other syntaxes ("Haskell improved") as well.
assets/acknowledgements.bindeleted

Binary file not shown.

assets/completions/_bat.ps1.indeleted−92
@@ -1,92 +0,0 @@
1−
2−using namespace System.Management.Automation
3−using namespace System.Management.Automation.Language
4−
5−Register-ArgumentCompleter -Native -CommandName '{{PROJECT_EXECUTABLE}}' -ScriptBlock {
6− param($wordToComplete, $commandAst, $cursorPosition)
7−
8− $commandElements = $commandAst.CommandElements
9− $command = @(
10− '{{PROJECT_EXECUTABLE}}'
11− for ($i = 1; $i -lt $commandElements.Count; $i++) {
12− $element = $commandElements[$i]
13− if ($element -isnot [StringConstantExpressionAst] -or
14− $element.StringConstantType -ne [StringConstantType]::BareWord -or
15− $element.Value.StartsWith('-')) {
16− break
17− }
18− $element.Value
19− }) -join ';'
20−
21− $completions = @(switch ($command) {
22− '{{PROJECT_EXECUTABLE}}' {
23− [CompletionResult]::new('-l', 'l', [CompletionResultType]::ParameterName, 'Set the language for syntax highlighting.')
24− [CompletionResult]::new('--language', 'language', [CompletionResultType]::ParameterName, 'Set the language for syntax highlighting.')
25− [CompletionResult]::new('-H', 'H', [CompletionResultType]::ParameterName, 'Highlight lines N through M.')
26− [CompletionResult]::new('--highlight-line', 'highlight-line', [CompletionResultType]::ParameterName, 'Highlight lines N through M.')
27− [CompletionResult]::new('--file-name', 'file-name', [CompletionResultType]::ParameterName, 'Specify the name to display for a file.')
28− [CompletionResult]::new('--diff-context', 'diff-context', [CompletionResultType]::ParameterName, 'diff-context')
29− [CompletionResult]::new('--tabs', 'tabs', [CompletionResultType]::ParameterName, 'Set the tab width to T spaces.')
30− [CompletionResult]::new('--wrap', 'wrap', [CompletionResultType]::ParameterName, 'Specify the text-wrapping mode (*auto*, never, character).')
31− [CompletionResult]::new('--terminal-width', 'terminal-width', [CompletionResultType]::ParameterName, 'Explicitly set the width of the terminal instead of determining it automatically. If prefixed with ''+'' or ''-'', the value will be treated as an offset to the actual terminal width. See also: ''--wrap''.')
32− [CompletionResult]::new('--color', 'color', [CompletionResultType]::ParameterName, 'When to use colors (*auto*, never, always).')
33− [CompletionResult]::new('--italic-text', 'italic-text', [CompletionResultType]::ParameterName, 'Use italics in output (always, *never*)')
34− [CompletionResult]::new('--decorations', 'decorations', [CompletionResultType]::ParameterName, 'When to show the decorations (*auto*, never, always).')
35− [CompletionResult]::new('--paging', 'paging', [CompletionResultType]::ParameterName, 'Specify when to use the pager, or use `-P` to disable (*auto*, never, always).')
36− [CompletionResult]::new('--pager', 'pager', [CompletionResultType]::ParameterName, 'Determine which pager to use.')
37− [CompletionResult]::new('-m', 'm', [CompletionResultType]::ParameterName, 'Use the specified syntax for files matching the glob pattern (''*.cpp:C++'').')
38− [CompletionResult]::new('--map-syntax', 'map-syntax', [CompletionResultType]::ParameterName, 'Use the specified syntax for files matching the glob pattern (''*.cpp:C++'').')
39− [CompletionResult]::new('--theme', 'theme', [CompletionResultType]::ParameterName, 'Set the color theme for syntax highlighting.')
40− [CompletionResult]::new('--style', 'style', [CompletionResultType]::ParameterName, 'Comma-separated list of style elements to display (*default*, auto, full, plain, changes, header, header-filename, header-filesize, grid, rule, numbers, snip).')
41− [CompletionResult]::new('-r', 'r', [CompletionResultType]::ParameterName, 'Only print the lines from N to M.')
42− [CompletionResult]::new('--line-range', 'line-range', [CompletionResultType]::ParameterName, 'Only print the lines from N to M.')
43− [CompletionResult]::new('-A', 'A', [CompletionResultType]::ParameterName, 'Show non-printable characters (space, tab, newline, ..).')
44− [CompletionResult]::new('--show-all', 'show-all', [CompletionResultType]::ParameterName, 'Show non-printable characters (space, tab, newline, ..).')
45− [CompletionResult]::new('-p', 'p', [CompletionResultType]::ParameterName, 'Show plain style (alias for ''--style=plain'').')
46− [CompletionResult]::new('--plain', 'plain', [CompletionResultType]::ParameterName, 'Show plain style (alias for ''--style=plain'').')
47− [CompletionResult]::new('-d', 'd', [CompletionResultType]::ParameterName, 'Only show lines that have been added/removed/modified.')
48− [CompletionResult]::new('--diff', 'diff', [CompletionResultType]::ParameterName, 'Only show lines that have been added/removed/modified.')
49− [CompletionResult]::new('-n', 'n', [CompletionResultType]::ParameterName, 'Show line numbers (alias for ''--style=numbers'').')
50− [CompletionResult]::new('--number', 'number', [CompletionResultType]::ParameterName, 'Show line numbers (alias for ''--style=numbers'').')
51− [CompletionResult]::new('-f', 'f', [CompletionResultType]::ParameterName, 'f')
52− [CompletionResult]::new('--force-colorization', 'force-colorization', [CompletionResultType]::ParameterName, 'force-colorization')
53− [CompletionResult]::new('-P', 'P', [CompletionResultType]::ParameterName, 'Alias for ''--paging=never''')
54− [CompletionResult]::new('--no-paging', 'no-paging', [CompletionResultType]::ParameterName, 'Alias for ''--paging=never''')
55− [CompletionResult]::new('--list-themes', 'list-themes', [CompletionResultType]::ParameterName, 'Display all supported highlighting themes.')
56− [CompletionResult]::new('-L', 'L', [CompletionResultType]::ParameterName, 'Display all supported languages.')
57− [CompletionResult]::new('--list-languages', 'list-languages', [CompletionResultType]::ParameterName, 'Display all supported languages.')
58− [CompletionResult]::new('-u', 'u', [CompletionResultType]::ParameterName, 'u')
59− [CompletionResult]::new('--unbuffered', 'unbuffered', [CompletionResultType]::ParameterName, 'unbuffered')
60− [CompletionResult]::new('--no-config', 'no-config', [CompletionResultType]::ParameterName, 'Do not use the configuration file')
61− [CompletionResult]::new('--no-custom-assets', 'no-custom-assets', [CompletionResultType]::ParameterName, 'Do not load custom assets')
62− [CompletionResult]::new('--config-file', 'config-file', [CompletionResultType]::ParameterName, 'Show path to the configuration file.')
63− [CompletionResult]::new('--generate-config-file', 'generate-config-file', [CompletionResultType]::ParameterName, 'Generates a default configuration file.')
64− [CompletionResult]::new('--config-dir', 'config-dir', [CompletionResultType]::ParameterName, 'Show bat''s configuration directory.')
65− [CompletionResult]::new('--cache-dir', 'cache-dir', [CompletionResultType]::ParameterName, 'Show bat''s cache directory.')
66− [CompletionResult]::new('--diagnostic', 'diagnostic', [CompletionResultType]::ParameterName, 'Show diagnostic information for bug reports.')
67− [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Print this help message.')
68− [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Print this help message.')
69− [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Show version information.')
70− [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Show version information.')
71− [CompletionResult]::new('cache', 'cache', [CompletionResultType]::ParameterValue, 'Modify the syntax-definition and theme cache')
72− break
73− }
74− '{{PROJECT_EXECUTABLE}};cache' {
75− [CompletionResult]::new('--source', 'source', [CompletionResultType]::ParameterName, 'Use a different directory to load syntaxes and themes from.')
76− [CompletionResult]::new('--target', 'target', [CompletionResultType]::ParameterName, 'Use a different directory to store the cached syntax and theme set.')
77− [CompletionResult]::new('-b', 'b', [CompletionResultType]::ParameterName, 'Initialize (or update) the syntax/theme cache.')
78− [CompletionResult]::new('--build', 'build', [CompletionResultType]::ParameterName, 'Initialize (or update) the syntax/theme cache.')
79− [CompletionResult]::new('-c', 'c', [CompletionResultType]::ParameterName, 'Remove the cached syntax definitions and themes.')
80− [CompletionResult]::new('--clear', 'clear', [CompletionResultType]::ParameterName, 'Remove the cached syntax definitions and themes.')
81− [CompletionResult]::new('--blank', 'blank', [CompletionResultType]::ParameterName, 'Create completely new syntax and theme sets (instead of appending to the default sets).')
82− [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information')
83− [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
84− [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
85− [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
86− break
87− }
88− })
89−
90− $completions.Where{ $_.CompletionText -like "$wordToComplete*" } |
91− Sort-Object -Property ListItemText
92−}
assets/completions/bat.bash.indeleted−101
@@ -1,101 +0,0 @@
1−# shellcheck disable=SC2207
2−
3−# Requires https://github.com/scop/bash-completion
4−
5−# Macs have bash3 for which the bash-completion package doesn't include
6−# _init_completion. This is a minimal version of that function.
7−__bat_init_completion()
8−{
9− COMPREPLY=()
10− _get_comp_words_by_ref "$@" cur prev words cword
11−}
12−
13−_bat() {
14− local cur prev words cword split=false
15− if declare -F _init_completion >/dev/null 2>&1; then
16− _init_completion -s || return 0
17− else
18− __bat_init_completion -n "=" || return 0
19− _split_longopt && split=true
20− fi
21−
22− if [[ ${words[1]-} == cache ]]; then
23− case $prev in
24− --source | --target)
25− _filedir -d
26− return 0
27− ;;
28− esac
29− COMPREPLY=($(compgen -W "
30− --build --clear --source --target --blank --help
31− " -- "$cur"))
32− return 0
33− fi
34−
35− case $prev in
36− -l | --language)
37− local IFS=$'\n'
38− COMPREPLY=($(compgen -W "$(
39− "$1" --list-languages | while IFS=: read -r lang _; do
40− printf "%s\n" "$lang"
41− done
42− )" -- "$cur"))
43− compopt -o filenames # for escaping
44− return 0
45− ;;
46− -H | --highlight-line | --diff-context | --tabs | --terminal-width | \
47− -m | --map-syntax | --style | --line-range | -h | --help | -V | \
48− --version | --diagnostic | --config-file | --config-dir | \
49− --cache-dir | --generate-config-file)
50− # argument required but no completion available, or option
51− # causes an exit
52− return 0
53− ;;
54− --file-name)
55− _filedir
56− return 0
57− ;;
58− --wrap)
59− COMPREPLY=($(compgen -W "auto never character" -- "$cur"))
60− return 0
61− ;;
62− --color | --decorations | --paging)
63− COMPREPLY=($(compgen -W "auto never always" -- "$cur"))
64− return 0
65− ;;
66− --italic-text)
67− COMPREPLY=($(compgen -W "always never" -- "$cur"))
68− return 0
69− ;;
70− --pager)
71− COMPREPLY=($(compgen -c -- "$cur"))
72− return 0
73− ;;
74− --theme)
75− local IFS=$'\n'
76− COMPREPLY=($(compgen -W "$("$1" --list-themes)" -- "$cur"))
77− compopt -o filenames # for escaping
78− return 0
79− ;;
80− esac
81−
82− $split && return 0
83−
84− if [[ $cur == -* ]]; then
85− COMPREPLY=($(compgen -W "
86− --show-all --plain --language --highlight-line
87− --file-name --diff --diff-context --tabs --wrap
88− --terminal-width --number --color --italic-text
89− --decorations --paging --pager --map-syntax --theme
90− --list-themes --style --line-range --list-languages
91− --help --version --force-colorization --unbuffered
92− --diagnostic --config-file --config-dir --cache-dir
93− --generate-config-file
94− " -- "$cur"))
95− return 0
96− fi
97−
98− _filedir
99− ((cword == 1)) && COMPREPLY+=($(compgen -W cache -- "$cur"))
100−
101−} && complete -F _bat {{PROJECT_EXECUTABLE}}
assets/completions/bat.fish.in+2−4
@@ -34,7 +34,7 @@ complete -c {{PROJECT_EXECUTABLE}} -s H -l highlight-line -x -d "<N> Highlight t
3434
3535complete -c {{PROJECT_EXECUTABLE}} -l italic-text -xka "always never" -d "Specify when to use ANSI sequences for italic text (default: never)" -n "not __fish_seen_subcommand_from cache"
3636
37−complete -c {{PROJECT_EXECUTABLE}} -s l -l language -d "Set the language for syntax highlighting" -n "not __fish_seen_subcommand_from cache" -xa "(__{{PROJECT_EXECUTABLE}}_autocomplete_languages)"
37+complete -c {{PROJECT_EXECUTABLE}} -s l -l language -d "Set the language for syntax highlighting" -n "not __fish_seen_subcommand_from cache" -xa "(__{{PROJECT_EXECUTABLE}}_autocomplete_languages)"
3838
3939complete -c {{PROJECT_EXECUTABLE}} -s r -l line-range -x -d "<N:M> Only print the specified range of lines for each file" -n "not __fish_seen_subcommand_from cache"
4040
@@ -52,11 +52,9 @@ complete -c {{PROJECT_EXECUTABLE}} -l paging -xka "auto never always" -d "Specif
5252
5353complete -c {{PROJECT_EXECUTABLE}} -s p -l plain -d "Only show plain style, no decorations. Alias for '--style=plain'" -n "not __fish_seen_subcommand_from cache"
5454
55−complete -c {{PROJECT_EXECUTABLE}} -s P -d "Disable paging. Alias for '--paging=never'" -n "not __fish_seen_subcommand_from cache"
56−
5755complete -c {{PROJECT_EXECUTABLE}} -s A -l show-all -d "Show non-printable characters like space/tab/newline" -n "not __fish_seen_subcommand_from cache"
5856
59−complete -c {{PROJECT_EXECUTABLE}} -l style -xka "default auto full plain changes header header-filename header-filesize grid rule numbers snip" -d "Comma-separated list of style elements or presets to display with file contents" -n "not __fish_seen_subcommand_from cache"
57+complete -c {{PROJECT_EXECUTABLE}} -l style -xka "auto full plain changes header grid numbers" -d "Comma-separated list of style elements or presets to display with file contents" -n "not __fish_seen_subcommand_from cache"
6058
6159complete -c {{PROJECT_EXECUTABLE}} -l tabs -x -d "<T> Set the tab width to T spaces (width of 0 passes tabs through directly)" -n "not __fish_seen_subcommand_from cache"
6260
assets/completions/bat.zsh.indeleted−99
@@ -1,99 +0,0 @@
1−#compdef {{PROJECT_EXECUTABLE}}
2−
3−local context state state_descr line
4−typeset -A opt_args
5−
6−(( $+functions[_{{PROJECT_EXECUTABLE}}_cache_subcommand] )) ||
7−_{{PROJECT_EXECUTABLE}}_cache_subcommand() {
8− local -a args
9− args=(
10− '(-b --build -c --clear)'{-b,--build}'[Initialize or update the syntax/theme cache]'
11− '(-b --build -c --clear)'{-c,--clear}'[Remove the cached syntax definitions and themes]'
12− '(--source)'--source='[Use a different directory to load syntaxes and themes from]:directory:_files -/'
13− '(--target)'--target='[Use a different directory to store the cached syntax and theme set]:directory:_files -/'
14− '(--blank)'--blank'[Create completely new syntax and theme sets]'
15− '(: -)'{-h,--help}'[Prints help information]'
16− '*: :'
17− )
18−
19− _arguments -S -s $args
20−}
21−
22−(( $+functions[_{{PROJECT_EXECUTABLE}}_main] )) ||
23−_{{PROJECT_EXECUTABLE}}_main() {
24− local -a args
25− args=(
26− '(-A --show-all)'{-A,--show-all}'[Show non-printable characters (space, tab, newline, ..)]'
27− '*'{-p,--plain}'[Show plain style (alias for `--style=plain`), repeat twice to disable disable automatic paging (alias for `--paging=never`)]'
28− '(-l --language)'{-l+,--language=}'[Set the language for syntax highlighting]:<language>:->language'
29− '(-H --highlight-line)'{-H,--highlight-line}'[Highlight lines N through M]:<N\:M>...'
30− '(--file-name)'--file-name'[Specify the name to display for a file]:<name>...:_files'
31− '(-d --diff)'--diff'[Only show lines that have been added/removed/modified]'
32− '(--diff-context)'--diff-context'[Include N lines of context around added/removed/modified lines when using `--diff`]:<N> (lines):()'
33− '(--tabs)'--tabs'[Set the tab width to T spaces]:<T> (tab width):()'
34− '(--wrap)'--wrap='[Specify the text-wrapping mode]:<when>:(auto never character)'
35− '(--terminal-width)'--terminal-width'[Explicitly set the width of the terminal instead of determining it automatically]:<width>'
36− '(-n --number)'{-n,--number}'[Show line numbers]'
37− '(--color)'--color='[When to use colors]:<when>:(auto never always)'
38− '(--italic-text)'--italic-text='[Use italics in output]:<when>:(always never)'
39− '(--decorations)'--decorations='[When to show the decorations]:<when>:(auto never always)'
40− '(--paging)'--paging='[Specify when to use the pager]:<when>:(auto never always)'
41− '(-m --map-syntax)'{-m+,--map-syntax=}'[Use the specified syntax for files matching the glob pattern]:<glob\:syntax>...'
42− '(--theme)'--theme='[Set the color theme for syntax highlighting]:<theme>:->theme'
43− '(: --list-themes --list-languages -L)'--list-themes'[Display all supported highlighting themes]'
44− '(--style)'--style='[Comma-separated list of style elements to display]:<components>:->style'
45− '(-r --line-range)'{-r+,--line-range=}'[Only print the lines from N to M]:<N\:M>...'
46− '(: --list-themes --list-languages -L)'{-L,--list-languages}'[Display all supported languages]'
47− '(: --no-config)'--no-config'[Do not use the configuration file]'
48− '(: --no-custom-assets)'--no-custom-assets'[Do not load custom assets]'
49− '(: --config-dir)'--config-dir'[Show bat'"'"'s configuration directory]'
50− '(: --config-file)'--config-file'[Show path to the configuration file]'
51− '(: --generate-config-file)'--generate-config-file'[Generates a default configuration file]'
52− '(: --cache-dir)'--cache-dir'[Show bat'"'"'s cache directory]'
53− '(: -)'{-h,--help}'[Print this help message]'
54− '(: -)'{-V,--version}'[Show version information]'
55− '*: :_files'
56− )
57−
58− _arguments -S -s $args
59−
60− case "$state" in
61− language)
62− local IFS=$'\n'
63− local -a languages
64− languages=( $({{PROJECT_EXECUTABLE}} --list-languages | awk -F':|,' '{ for (i = 1; i <= NF; ++i) printf("%s:%s\n", $i, $1) }') )
65−
66− _describe 'language' languages
67− ;;
68−
69− theme)
70− local IFS=$'\n'
71− local -a themes
72− themes=( $({{PROJECT_EXECUTABLE}} --list-themes | sort) )
73−
74− _values 'theme' $themes
75− ;;
76−
77− style)
78− _values -s , 'style' default auto full plain changes header header-filename header-filesize grid rule numbers snip
79− ;;
80− esac
81−}
82−
83−# first positional argument
84−if (( ${#words} == 2 )); then
85− local -a subcommands
86− subcommands=('cache:Modify the syntax-definition and theme cache')
87− _describe subcommand subcommands
88− _{{PROJECT_EXECUTABLE}}_main
89−else
90− case $words[2] in
91− cache)
92− _{{PROJECT_EXECUTABLE}}_cache_subcommand
93− ;;
94−
95− *)
96− _{{PROJECT_EXECUTABLE}}_main
97− ;;
98− esac
99−fi
assets/create.sh+9−15
@@ -1,11 +1,11 @@
1−#!/usr/bin/env bash
1+#!/bin/bash
22set -euo pipefail
33
44ASSET_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
55REPO_DIR="$ASSET_DIR/.."
66
77# Ensure submodules are initialized.
8−update_submodules() {
8+function update_submodules() {
99 local submodule
1010 local submodule_prompt=unspecified
1111 local submodule_path
@@ -46,7 +46,6 @@ bat cache --clear
4646# - Remove the JavaDoc patch once https://github.com/trishume/syntect/issues/222 has been fixed
4747# - Remove the C# patch once https://github.com/sublimehq/Packages/pull/2331 has been merged
4848
49−# Apply patches
5049(
5150 cd "$ASSET_DIR"
5251 for patch in patches/*.patch; do
@@ -54,16 +53,11 @@ bat cache --clear
5453 done
5554)
5655
57−reverse_patches() {
58− (
59− cd "$ASSET_DIR"
60− for patch in patches/*.patch; do
61− patch --strip=0 --reverse <"$patch"
62− done
63− )
64−}
65−
66−# Make sure to always reverse patches, even if the `bat cache` command fails or aborts
67−trap reverse_patches EXIT
56+bat cache --build --blank --source="$ASSET_DIR" --target="$ASSET_DIR"
6857
69−bat cache --build --blank --acknowledgements --source="$ASSET_DIR" --target="$ASSET_DIR"
58+(
59+ cd "$ASSET_DIR"
60+ for patch in patches/*.patch; do
61+ patch --strip=0 --reverse < "$patch"
62+ done
63+)
assets/manual/bat.1.in+10−75
@@ -1,4 +1,4 @@
1−.TH {{PROJECT_EXECUTABLE_UPPERCASE}} "1"
1+.TH {{PROJECT_EXECUTABLE | upcase}} "1"
22.SH NAME
33{{PROJECT_EXECUTABLE}} \- a cat(1) clone with syntax highlighting and Git integration.
44.SH "USAGE"
@@ -40,7 +40,7 @@ language names and file extensions.
4040.HP
4141\fB\-H\fR, \fB\-\-highlight\-line\fR <N:M>...
4242.IP
43−Highlight the specified line ranges with a different background color. For example:
43+Highlight the specified line ranges with a different background color For example:
4444.RS
4545.IP "\-\-highlight\-line 40"
4646highlights line 40
@@ -50,22 +50,8 @@ highlights lines 30 to 40
5050highlights lines 1 to 40
5151.IP "\-\-highlight\-line 40:"
5252highlights lines 40 to the end of the file
53−.IP "\-\-highlight\-line 30:+10"
54−highlights lines 30 to 40
5553.RE
5654.HP
57−\fB\-\-file\-name\fR <name>...
58−.IP
59−Specify the name to display for a file. Useful when piping data to {{PROJECT_EXECUTABLE}} from STDIN when {{PROJECT_EXECUTABLE}} does not otherwise know the filename. Note that the provided file name is also used for syntax detection.
60−.HP
61−\fB\-d\fR, \fB\-\-diff\fR
62−.IP
63−Only show lines that have been added/removed/modified with respect to the Git index. Use '\-\-diff\-context=N' to control how much context you want to see.
64−.HP
65−\fB\-\-diff\-context\fR <N>...
66−.IP
67−Include N lines of context around added/removed/modified lines when using '\-\-diff'.
68−.HP
6955\fB\-\-tabs\fR <T>
7056.IP
7157Set the tab width to T spaces. Use a width of 0 to pass tabs through directly
@@ -101,25 +87,18 @@ Specify when to use the decorations that have been specified via '\-\-style'. Th
10187automatic mode only enables decorations if an interactive terminal is detected. Possible
10288values: *auto*, never, always.
10389.HP
104−\fB\-f\fR, \fB\-\-force\-colorization\fR
105−.IP
106−Alias for '--decorations=always --color=always'. This is useful \
107−if the output of {{PROJECT_EXECUTABLE}} is piped to another program, but you want \
108−to keep the colorization/decorations.
109−.HP
11090\fB\-\-paging\fR <when>
11191.IP
112−Specify when to use the pager. To disable the pager, use \&'\-\-paging=never' or its alias,
113−\fB-P\fR. To disable the pager permanently, set BAT_PAGER to an empty string. To control
114−which pager is used, see the '\-\-pager' option. Possible values: *auto*, never, always.
92+Specify when to use the pager. To control which pager is used, set the PAGER or
93+BAT_PAGER environment variables (the latter takes precedence) or use the '\-\-pager'
94+option. To disable the pager permanently, set BAT_PAGER to an empty string or set
95+\&'\-\-paging=never' in the configuration file. Possible values: *auto*, never, always.
11596.HP
11697\fB\-\-pager\fR <command>
11798.IP
118−Determine which pager is used. This option will override the PAGER and BAT_PAGER
119−environment variables. The default pager is 'less'. To control when the pager is used, see
99+Determine which pager is used. This option will overwrite the PAGER and BAT_PAGER
100+environment variables. The default pager is 'less'. To disable the pager completely, use
120101the '\-\-paging' option. Example: '\-\-pager "less \fB\-RF\fR"'.
121−
122−Note: By default, if the pager is set to 'less' (and no command-line options are specified), 'bat' will pass the following command line options to the pager: '-R'/'--RAW-CONTROL-CHARS', '-F'/'--quit-if-one-screen' and '-X'/'--no-init'. The last option ('-X') is only used for 'less' versions older than 530. The '-R' option is needed to interpret ANSI colors correctly. The second option ('-F') instructs less to exit immediately if the output size is smaller than the vertical size of the terminal. This is convenient for small files because you do not have to press 'q' to quit the pager. The third option ('-X') is needed to fix a bug with the '--quit-if-one-screen' feature in old versions of 'less'. Unfortunately, it also breaks mouse-wheel support in 'less'. If you want to enable mouse-wheel scrolling on older versions of 'less', you can pass just '-R' (as in the example above, this will disable the quit-if-one-screen feature). For less 530 or newer, it should work out of the box.
123102.HP
124103\fB\-m\fR, \fB\-\-map\-syntax\fR <glob-pattern:syntax-name>...
125104.IP
@@ -127,7 +106,6 @@ Map a glob pattern to an existing syntax name. The glob pattern is matched on th
127106path and the filename. For example, to highlight *.build files with the Python syntax,
128107use -m '*.build:Python'. To highlight files named '.myignore' with the Git Ignore
129108syntax, use -m '.myignore:Git Ignore'.
130−Note that the right-hand side is the *name* of the syntax, not a file extension.
131109.HP
132110\fB\-\-theme\fR <theme>
133111.IP
@@ -146,8 +124,7 @@ Configure which elements (line numbers, file headers, grid borders, Git modifica
146124of components to display (e.g. 'numbers,changes,grid') or a pre\-defined style ('full').
147125To set a default style, add the '\-\-style=".."' option to the configuration file or
148126export the BAT_STYLE environment variable (e.g.: export BAT_STYLE=".."). Possible
149−values: *default*, full, auto, plain, changes, header, header-filename, header-filesize, grid,
150−rule, numbers, snip.
127+values: *auto*, full, plain, changes, header, grid, numbers, snip.
151128.HP
152129\fB\-r\fR, \fB\-\-line\-range\fR <N:M>...
153130.IP
@@ -159,8 +136,6 @@ prints lines 30 to 40
159136prints lines 1 to 40
160137.IP "\-\-line\-range 40:"
161138prints lines 40 to the end of the file
162−.IP "\-\-line\-range 30:+10"
163−prints lines 30 to 40
164139.RE
165140.HP
166141\fB\-L\fR, \fB\-\-list\-languages\fR
@@ -194,45 +169,5 @@ is dependent on your operating system. To get the default path for your system,
194169
195170\fB{{PROJECT_EXECUTABLE}} --config-file\fR
196171
197−Alternatively, you can use the BAT_CONFIG_PATH environment variable to point {{PROJECT_EXECUTABLE}} to a non-default
172+Alternatively, you can use the BAT_CONFIG_PATH environment variable to point bat to a non-default
198173location of the configuration file.
199−
200−To generate a default configuration file, call:
201−
202−\fB{{PROJECT_EXECUTABLE}} --generate-config-file\fR
203−.SH "ADDING CUSTOM LANGUAGES"
204−{{PROJECT_EXECUTABLE}} supports Sublime Text \fB.sublime-syntax\fR language files, and can be
205−customized to add additional languages to your local installation. To do this, add the \fB.sublime-syntax\fR language
206−files to `\fB$({{PROJECT_EXECUTABLE}} --config-dir)/syntaxes\fR` and run `\fB{{PROJECT_EXECUTABLE}} cache --build\fR`.
207−
208−\fBExample:\fR
209−
210−.RS 0.5i
211−mkdir -p "$({{PROJECT_EXECUTABLE}} --config-dir)/syntaxes"
212−.br
213−cd "$({{PROJECT_EXECUTABLE}} --config-dir)/syntaxes"
214−
215−# Put new '.sublime-syntax' language definition files
216−.br
217−# in this folder (or its subdirectories), for example:
218−.br
219−git clone https://github.com/tellnobody1/sublime-purescript-syntax
220−
221−# And then build the cache.
222−.br
223−{{PROJECT_EXECUTABLE}} cache --build
224−.RE
225−
226−Once the cache is built, the new language will be visible in `\fB{{PROJECT_EXECUTABLE}} --list-languages\fR`.
227−.br
228−If you ever want to remove the custom languages, you can clear the cache with `\fB{{PROJECT_EXECUTABLE}} cache --clear\fR`.
229−
230−.SH "ADDING CUSTOM THEMES"
231−Similarly to custom languages, {{PROJECT_EXECUTABLE}} supports Sublime Text \fB.tmTheme\fR themes.
232−These can be installed to `\fB$({{PROJECT_EXECUTABLE}} --config-dir)/themes\fR`, and are added to the cache with
233−`\fB{{PROJECT_EXECUTABLE}} cache --build`.
234−.SH "MORE INFORMATION"
235−
236−For more information and up-to-date documentation, visit the {{PROJECT_EXECUTABLE}} repo:
237−.br
238−\fBhttps://github.com/sharkdp/bat\fR
assets/patches/Groff.sublime-syntax.patchdeleted−16
@@ -1,16 +0,0 @@
1−diff --git syntaxes/02_Extra/Groff/Man Page/Man Page.sublime-syntax syntaxes/02_Extra/Groff/Man Page/Man Page.sublime-syntax
2−index 57834af..6648664 100644
3−--- syntaxes/02_Extra/Groff/Man Page/Man Page.sublime-syntax
4−+++ syntaxes/02_Extra/Groff/Man Page/Man Page.sublime-syntax
5−@@ -4,9 +4,9 @@
6− # - man-pages(7)
7− # - groff(7)
8− ---
9−-name: Man Page (groff/troff)
10−+name: Groff/troff
11− scope: text.groff
12−-file_extensions: [man, groff, troff, '1', '2', '3', '4', '5', '6', '7']
13−+file_extensions: [groff, troff, '1', '2', '3', '4', '5', '6', '7', '8', '9']
14−
15− contexts:
16− main:
assets/patches/Markdown.sublime-syntax.patch+1−10
@@ -1,5 +1,5 @@
11diff --git syntaxes/01_Packages/Markdown/Markdown.sublime-syntax syntaxes/01_Packages/Markdown/Markdown.sublime-syntax
2−index 19dc685d..44440c7f 100644
2+index 19dc685d..6afd87ae 100644
33--- syntaxes/01_Packages/Markdown/Markdown.sublime-syntax
44+++ syntaxes/01_Packages/Markdown/Markdown.sublime-syntax
55@@ -24,7 +24,6 @@ variables:
@@ -166,12 +166,3 @@ index 19dc685d..44440c7f 100644
166166 - match: ^\s*$\n?
167167 scope: invalid.illegal.non-terminated.bold-italic.markdown
168168 pop: true
169−@@ -1152,7 +1110,7 @@ contexts:
170− - match: |-
171− (?x)
172− {{fenced_code_block_start}}
173−- ((?i:rust))
174−+ ((?i:rust|rs))
175− {{fenced_code_block_trailing_infostring_characters}}
176− captures:
177− 0: meta.code-fence.definition.begin.rust.markdown-gfm
assets/patches/MediaWiki.sublime-syntax.patchdeleted−13
@@ -1,13 +0,0 @@
1−diff --git syntaxes/02_Extra/MediaWiki/MediawikiNG.sublime-syntax syntaxes/02_Extra/MediaWiki/MediawikiNG.sublime-syntax
2−index f542c9e..8eaf020 100644
3−--- syntaxes/02_Extra/MediaWiki/MediawikiNG.sublime-syntax
4−+++ syntaxes/02_Extra/MediaWiki/MediawikiNG.sublime-syntax
5−@@ -1,7 +1,7 @@
6− %YAML 1.2
7− ---
8− # http://www.sublimetext.com/docs/3/syntax.html
9−-name: Mediawiki NG
10−+name: MediaWiki
11− file_extensions: [mediawiki, wikipedia, wiki]
12− scope: text.html.mediawiki
13−
assets/patches/Monokai-Extended.tmTheme.patchdeleted−36
@@ -1,36 +0,0 @@
1−diff --git themes/sublime-monokai-extended/Monokai\ Extended.tmTheme themes/sublime-monokai-extended/Monokai\ Extended.tmTheme
2−index 9c2aa3e..180cbbf 100644
3−--- themes/sublime-monokai-extended/Monokai Extended.tmTheme
4−+++ themes/sublime-monokai-extended/Monokai Extended.tmTheme
5−@@ -810,11 +810,11 @@
6− <key>name</key>
7− <string>JSON String</string>
8− <key>scope</key>
9−- <string>meta.structure.dictionary.json string.quoted.double.json</string>
10−+ <string>meta.mapping.key.json string.quoted.double.json, punctuation.separator.sequence.csv</string>
11− <key>settings</key>
12− <dict>
13− <key>foreground</key>
14−- <string>#cfcfc2</string>
15−+ <string>#fd971f</string>
16− </dict>
17− </dict>
18− <dict>
19−@@ -1027,7 +1027,7 @@
20− <key>name</key>
21− <string>Invalid</string>
22− <key>scope</key>
23−- <string>invalid</string>
24−+ <string>invalid, markup.error</string>
25− <key>settings</key>
26− <dict>
27− <key>background</key>
28−@@ -1042,7 +1042,7 @@
29− <key>name</key>
30− <string>Invalid deprecated</string>
31− <key>scope</key>
32−- <string>invalid.deprecated</string>
33−+ <string>invalid.deprecated, markup.warning</string>
34− <key>settings</key>
35− <dict>
36− <key>background</key>
assets/patches/Python.sublime-syntax.patchdeleted−15
@@ -1,15 +0,0 @@
1−diff --git syntaxes/01_Packages/Python/Python.sublime-syntax syntaxes/01_Packages/Python/Python.sublime-syntax
2−index 2acd86d8..86257f7b 100644
3−--- syntaxes/01_Packages/Python/Python.sublime-syntax
4−+++ syntaxes/01_Packages/Python/Python.sublime-syntax
5−@@ -988,10 +988,6 @@ contexts:
6− - match: \}
7− scope: punctuation.section.mapping-or-set.end.python
8− set: after-expression
9−- - match: (?={{simple_expression}}:|\s*\*\*)
10−- set: inside-dictionary
11−- - match: (?={{simple_expression}}[,}]|\s*\*)
12−- set: inside-set
13− - match: ','
14− scope: punctuation.separator.set.python
15− set: inside-set
assets/patches/ShellScript.sublime-syntax.patchdeleted−20
@@ -1,20 +0,0 @@
1−diff --git syntaxes/01_Packages/ShellScript/Bash.sublime-syntax syntaxes/01_Packages/ShellScript/Bash.sublime-syntax
2−index e973e319..07c170a7 100644
3−--- syntaxes/01_Packages/ShellScript/Bash.sublime-syntax
4−+++ syntaxes/01_Packages/ShellScript/Bash.sublime-syntax
5−@@ -30,12 +30,12 @@ file_extensions:
6− - .zshenv
7− - .zshrc
8− - PKGBUILD # https://jlk.fjfi.cvut.cz/arch/manpages/man/PKGBUILD.5
9−- - .ebuild
10−- - .eclass
11−+ - ebuild
12−+ - eclass
13−
14− first_line_match: |
15− (?x)
16−- ^\#! .* \b(bash|zsh|sh|tcsh|ash)\b
17−+ ^\#! .* \b(bash|zsh|sh|tcsh|ash|dash)\b
18− | ^\# \s* -\*- [^*]* mode: \s* shell-script [^*]* -\*-
19−
20− #-------------------------------------------------------------------------------
assets/patches/XML.sublime-syntax.patchdeleted−12
@@ -1,12 +0,0 @@
1−diff --git syntaxes/01_Packages/XML/XML.sublime-syntax syntaxes/01_Packages/XML/XML.sublime-syntax
2−index ad7d9c87..af4a00f0 100644
3−--- syntaxes/01_Packages/XML/XML.sublime-syntax
4−+++ syntaxes/01_Packages/XML/XML.sublime-syntax
5−@@ -12,6 +12,7 @@ file_extensions:
6− - rss
7− - opml
8− - svg
9−+ - xaml
10− first_line_match: |-
11− (?x:
12− ^(?:
assets/syntaxes.bin

Binary file not shown.

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

Submodule changed.

assets/syntaxes/02_Extra/Apachedeleted−1

Submodule changed.

assets/syntaxes/02_Extra/Apache.sublime-syntaxdeleted−221
@@ -1,221 +0,0 @@
1−%YAML 1.2
2−---
3−# http://www.sublimetext.com/docs/3/syntax.html
4−name: Apache Conf
5−file_extensions:
6− - envvars
7− - htaccess
8− - HTACCESS
9− - htgroups
10− - HTGROUPS
11− - htpasswd
12− - HTPASSWD
13− - .htaccess
14− - .HTACCESS
15− - .htgroups
16− - .HTGROUPS
17− - .htpasswd
18− - .HTPASSWD
19−scope: source.apacheconf
20−contexts:
21− main:
22− - match: ^(\s)*(#).*$\n?
23− scope: comment.line.hash.ini
24− captures:
25− 1: punctuation.definition.comment.apacheconf
26− - match: (<)(Proxy|ProxyMatch|IfVersion|Directory|DirectoryMatch|Files|FilesMatch|IfDefine|IfModule|Limit|LimitExcept|Location|LocationMatch|VirtualHost|Macro|If|Else|ElseIf)(\s(.+?))?(>)
27− captures:
28− 1: punctuation.definition.tag.apacheconf
29− 2: entity.tag.apacheconf
30− 4: string.value.apacheconf
31− 5: punctuation.definition.tag.apacheconf
32− - match: (</)(Proxy|ProxyMatch|IfVersion|Directory|DirectoryMatch|Files|FilesMatch|IfDefine|IfModule|Limit|LimitExcept|Location|LocationMatch|VirtualHost|Macro|If|Else|ElseIf)(>)
33− captures:
34− 1: punctuation.definition.tag.apacheconf
35− 2: entity.tag.apacheconf
36− 3: punctuation.definition.tag.apacheconf
37− - match: (?<=(Rewrite(Rule|Cond)))\s+(.+?)\s+(.+?)($|\s)
38− captures:
39− 3: string.regexp.apacheconf
40− 4: string.replacement.apacheconf
41− - match: (?<=RedirectMatch)(\s+(\d\d\d|permanent|temp|seeother|gone))?\s+(.+?)\s+((.+?)($|\s))?
42− captures:
43− 2: entity.status.apacheconf
44− 3: string.regexp.apacheconf
45− 5: string.path.apacheconf
46− - match: (?<=Redirect)(\s+(\d\d\d|permanent|temp|seeother|gone))?\s+(.+?)\s+((.+?)($|\s))?
47− captures:
48− 2: entity.status.apacheconf
49− 3: string.path.apacheconf
50− 5: string.path.apacheconf
51− - match: (?<=ScriptAliasMatch|AliasMatch)\s+(.+?)\s+((.+?)\s)?
52− captures:
53− 1: string.regexp.apacheconf
54− 3: string.path.apacheconf
55− - match: (?<=RedirectPermanent|RedirectTemp|ScriptAlias|Alias)\s+(.+?)\s+((.+?)($|\s))?
56− captures:
57− 1: string.path.apacheconf
58− 3: string.path.apacheconf
59− - match: \b(AcceptPathInfo|AccessFileName|AddDefaultCharset|AddOutputFilterByType|AllowEncodedSlashes|AllowOverride|AuthName|AuthType|CGIMapExtension|ContentDigest|DefaultType|Define|DocumentRoot|EnableMMAP|EnableSendfile|ErrorDocument|ErrorLog|FileETag|ForceType|HostnameLookups|IdentityCheck|Include(Optional)?|KeepAlive|KeepAliveTimeout|LimitInternalRecursion|LimitRequestBody|LimitRequestFields|LimitRequestFieldSize|LimitRequestLine|LimitXMLRequestBody|LogLevel|MaxKeepAliveRequests|Mutex|NameVirtualHost|Options|Require|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScriptInterpreterSource|ServerAdmin|ServerAlias|ServerName|ServerPath|ServerRoot|ServerSignature|ServerTokens|SetHandler|SetInputFilter|SetOutputFilter|Time(O|o)ut|TraceEnable|UseCanonicalName|Use|ErrorLogFormat|GlobalLog|PHPIniDir|SSLHonorCipherOrder|SSLCompression|SSLUseStapling|SSLStapling\w+|SSLCARevocationCheck|SSLSRPVerifierFile|SSLSessionTickets|RequestReadTimeout|ProxyHTML\w+|MaxRanges)\b
60− captures:
61− 1: keyword.core.apacheconf
62− - match: \b(AcceptMutex|AssignUserID|BS2000Account|ChildPerUserID|CoreDumpDirectory|EnableExceptionHook|Group|Listen|ListenBacklog|LockFile|MaxClients|MaxConnectionsPerChild|MaxMemFree|MaxRequestsPerChild|MaxRequestsPerThread|MaxRequestWorkers|MaxSpareServers|MaxSpareThreads|MaxThreads|MaxThreadsPerChild|MinSpareServers|MinSpareThreads|NumServers|PidFile|ReceiveBufferSize|ScoreBoardFile|SendBufferSize|ServerLimit|StartServers|StartThreads|ThreadLimit|ThreadsPerChild|ThreadStackSize|User|Win32DisableAcceptEx)\b
63− captures:
64− 1: keyword.mpm.apacheconf
65− - match: \b(Allow|Deny|Order)\b
66− captures:
67− 1: keyword.access.apacheconf
68− - match: \b(Action|Script)\b
69− captures:
70− 1: keyword.actions.apacheconf
71− - match: \b(Alias|AliasMatch|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ScriptAlias|ScriptAliasMatch)\b
72− captures:
73− 1: keyword.alias.apacheconf
74− - match: \b(AuthAuthoritative|AuthGroupFile|AuthUserFile|AuthBasicProvider|AuthBasicFake|AuthBasicAuthoritative|AuthBasicUseDigestAlgorithm)\b
75− captures:
76− 1: keyword.auth.apacheconf
77− - match: \b(Anonymous|Anonymous_Authoritative|Anonymous_LogEmail|Anonymous_MustGiveEmail|Anonymous_NoUserID|Anonymous_VerifyEmail)\b
78− captures:
79− 1: keyword.auth_anon.apacheconf
80− - match: \b(AuthDBMAuthoritative|AuthDBMGroupFile|AuthDBMType|AuthDBMUserFile)\b
81− captures:
82− 1: keyword.auth_dbm.apacheconf
83− - match: \b(AuthDigestAlgorithm|AuthDigestDomain|AuthDigestFile|AuthDigestGroupFile|AuthDigestNcCheck|AuthDigestNonceFormat|AuthDigestNonceLifetime|AuthDigestQop|AuthDigestShmemSize|AuthDigestProvider)\b
84− captures:
85− 1: keyword.auth_digest.apacheconf
86− - match: \b(AuthLDAPAuthoritative|AuthLDAPBindDN|AuthLDAPBindPassword|AuthLDAPCharsetConfig|AuthLDAPCompareDNOnServer|AuthLDAPDereferenceAliases|AuthLDAPEnabled|AuthLDAPFrontPageHack|AuthLDAPGroupAttribute|AuthLDAPGroupAttributeIsDN|AuthLDAPRemoteUserIsDN|AuthLDAPUrl)\b
87− captures:
88− 1: keyword.auth_ldap.apacheconf
89− - match: \b(AddAlt|AddAltByEncoding|AddAltByType|AddDescription|AddIcon|AddIconByEncoding|AddIconByType|DefaultIcon|HeaderName|IndexIgnore|IndexOptions|IndexOrderDefault|IndexStyleSheet|IndexHeadInsert|ReadmeName)\b
90− captures:
91− 1: keyword.autoindex.apacheconf
92− - match: \b(BalancerMember|BalancerGrowth|BalancerPersist|BalancerInherit)\b
93− captures:
94− 1: keyword.filter.apacheconf
95− - match: \b(CacheDefaultExpire|CacheDisable|CacheEnable|CacheForceCompletion|CacheIgnoreCacheControl|CacheIgnoreHeaders|CacheIgnoreNoLastMod|CacheLastModifiedFactor|CacheMaxExpire)\b
96− captures:
97− 1: keyword.cache.apacheconf
98− - match: \b(MetaDir|MetaFiles|MetaSuffix)\b
99− captures:
100− 1: keyword.cern_meta.apacheconf
101− - match: \b(ScriptLog|ScriptLogBuffer|ScriptLogLength)\b
102− captures:
103− 1: keyword.cgi.apacheconf
104− - match: \b(ScriptLog|ScriptLogBuffer|ScriptLogLength|ScriptSock)\b
105− captures:
106− 1: keyword.cgid.apacheconf
107− - match: \b(CharsetDefault|CharsetOptions|CharsetSourceEnc)\b
108− captures:
109− 1: keyword.charset_lite.apacheconf
110− - match: \b(Dav|DavDepthInfinity|DavMinTimeout|DavLockDB)\b
111− captures:
112− 1: keyword.dav.apacheconf
113− - match: \b(DeflateBufferSize|DeflateCompressionLevel|DeflateFilterNote|DeflateMemLevel|DeflateWindowSize)\b
114− captures:
115− 1: keyword.deflate.apacheconf
116− - match: \b(DirectoryIndex|DirectorySlash|FallbackResource)\b
117− captures:
118− 1: keyword.dir.apacheconf
119− - match: \b(CacheDirLength|CacheDirLevels|CacheExpiryCheck|CacheGcClean|CacheGcDaily|CacheGcInterval|CacheGcMemUsage|CacheGcUnused|CacheMaxFileSize|CacheMinFileSize|CacheRoot|CacheSize|CacheTimeMargin)\b
120− captures:
121− 1: keyword.disk_cache.apacheconf
122− - match: \b(DumpIOInput|DumpIOOutput)\b
123− captures:
124− 1: keyword.dumpio.apacheconf
125− - match: \b(PassEnv|SetEnv|UnsetEnv)\b
126− captures:
127− 1: keyword.env.apacheconf
128− - match: \b(ExpiresActive|ExpiresByType|ExpiresDefault)\b
129− captures:
130− 1: keyword.expires.apacheconf
131− - match: \b(ExtFilterDefine|ExtFilterOptions)\b
132− captures:
133− 1: keyword.ext_filter.apacheconf
134− - match: \b(CacheFile|MMapFile)\b
135− captures:
136− 1: keyword.file_cache.apacheconf
137− - match: \b(AddOutputFilterByType|FilterChain|FilterDeclare|FilterProtocol|FilterProvider|FilterTrace)\b
138− captures:
139− 1: keyword.filter.apacheconf
140− - match: \b(Header|RequestHeader)\b
141− captures:
142− 1: keyword.headers.apacheconf
143− - match: \b(ImapBase|ImapDefault|ImapMenu)\b
144− captures:
145− 1: keyword.imap.apacheconf
146− - match: \b(SSIEndTag|SSIErrorMsg|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|XBitHack)\b
147− captures:
148− 1: keyword.include.apacheconf
149− - match: \b(ISAPIAppendLogToErrors|ISAPIAppendLogToQuery|ISAPICacheFile|ISAPIFakeAsync|ISAPILogNotSupported|ISAPIReadAheadBuffer)\b
150− captures:
151− 1: keyword.isapi.apacheconf
152− - match: \b(LDAPCacheEntries|LDAPCacheTTL|LDAPConnectionTimeout|LDAPOpCacheEntries|LDAPOpCacheTTL|LDAPSharedCacheFile|LDAPSharedCacheSize|LDAPTrustedCA|LDAPTrustedCAType)\b
153− captures:
154− 1: keyword.ldap.apacheconf
155− - match: \b(BufferedLogs|CookieLog|CustomLog|LogFormat|TransferLog|ForensicLog)\b
156− captures:
157− 1: keyword.log.apacheconf
158− - match: \b(MCacheMaxObjectCount|MCacheMaxObjectSize|MCacheMaxStreamingBuffer|MCacheMinObjectSize|MCacheRemovalAlgorithm|MCacheSize)\b
159− captures:
160− 1: keyword.mem_cache.apacheconf
161− - match: \b(AddCharset|AddEncoding|AddHandler|AddInputFilter|AddLanguage|AddOutputFilter|AddType|DefaultLanguage|ModMimeUsePathInfo|MultiviewsMatch|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|TypesConfig)\b
162− captures:
163− 1: keyword.mime.apacheconf
164− - match: \b(ProtocolEcho|Example|AddModuleInfo|MimeMagicFile|CheckSpelling|ExtendedStatus|SuexecUserGroup|UserDir)\b
165− captures:
166− 1: keyword.misc.apacheconf
167− - match: \b(CacheNegotiatedDocs|ForceLanguagePriority|LanguagePriority)\b
168− captures:
169− 1: keyword.negotiation.apacheconf
170− - match: \b(NWSSLTrustedCerts|NWSSLUpgradeable|SecureListen)\b
171− captures:
172− 1: keyword.nw_ssl.apacheconf
173− - match: \b(AllowCONNECT|NoProxy|ProxyBadHeader|ProxyBlock|ProxyDomain|ProxyErrorOverride|ProxyFtpDirCharset|ProxyIOBufferSize|ProxyMaxForwards|ProxyPass|ProxyPassMatch|ProxyPassReverse|ProxyPreserveHost|ProxyReceiveBufferSize|ProxyRemote|ProxyRemoteMatch|ProxyRequests|ProxyTimeout|ProxyVia)\b
174− captures:
175− 1: keyword.proxy.apacheconf
176− - match: \b(RewriteBase|RewriteCond|RewriteEngine|RewriteLock|RewriteLog|RewriteLogLevel|RewriteMap|RewriteOptions|RewriteRule)\b
177− captures:
178− 1: keyword.rewrite.apacheconf
179− - match: \b(BrowserMatch|BrowserMatchNoCase|SetEnvIf|SetEnvIfNoCase)\b
180− captures:
181− 1: keyword.setenvif.apacheconf
182− - match: \b(LoadFile|LoadModule)\b
183− captures:
184− 1: keyword.so.apacheconf
185− - match: \b(SSLCACertificateFile|SSLCACertificatePath|SSLCARevocationFile|SSLCARevocationPath|SSLCertificateChainFile|SSLCertificateFile|SSLCertificateKeyFile|SSLCipherSuite|SSLEngine|SSLMutex|SSLOptions|SSLPassPhraseDialog|SSLProtocol|SSLProxyCACertificateFile|SSLProxyCACertificatePath|SSLProxyCARevocationFile|SSLProxyCARevocationPath|SSLProxyCipherSuite|SSLProxyEngine|SSLProxyMachineCertificateFile|SSLProxyMachineCertificatePath|SSLProxyProtocol|SSLProxyVerify|SSLProxyVerifyDepth|SSLRandomSeed|SSLRequire|SSLRequireSSL|SSLSessionCache|SSLSessionCacheTimeout|SSLUserName|SSLVerifyClient|SSLVerifyDepth|SSLInsecureRenegotiation|SSLOpenSSLConfCmd)\b
186− captures:
187− 1: keyword.ssl.apacheconf
188− - match: \b(Substitute|SubstituteInheritBefore|SubstituteMaxLineLength)\b
189− captures:
190− 1: keyword.substitute.apacheconf
191− - match: \b(CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking)\b
192− captures:
193− 1: keyword.usertrack.apacheconf
194− - match: \b(VirtualDocumentRoot|VirtualDocumentRootIP|VirtualScriptAlias|VirtualScriptAliasIP)\b
195− captures:
196− 1: keyword.vhost_alias.apacheconf
197− - match: \b(php_value|php_flag|php_admin_value|php_admin_flag)\b(\s+(.+?)(\s+(".+?"|.+?))?)?\s
198− captures:
199− 1: keyword.php.apacheconf
200− 3: entity.property.apacheconf
201− 5: string.value.apacheconf
202− - match: '(%\{)((HTTP_USER_AGENT|HTTP_REFERER|HTTP_COOKIE|HTTP_FORWARDED|HTTP_HOST|HTTP_PROXY_CONNECTION|HTTP_ACCEPT|REMOTE_ADDR|REMOTE_HOST|REMOTE_PORT|REMOTE_USER|REMOTE_IDENT|REQUEST_METHOD|SCRIPT_FILENAME|PATH_INFO|QUERY_STRING|AUTH_TYPE|DOCUMENT_ROOT|SERVER_ADMIN|SERVER_NAME|SERVER_ADDR|SERVER_PORT|SERVER_PROTOCOL|SERVER_SOFTWARE|TIME_YEAR|TIME_MON|TIME_DAY|TIME_HOUR|TIME_MIN|TIME_SEC|TIME_WDAY|TIME|API_VERSION|THE_REQUEST|REQUEST_URI|REQUEST_FILENAME|IS_SUBREQ|HTTPS)|(.*?))(\})'
203− captures:
204− 1: punctuation.variable.apacheconf
205− 3: variable.env.apacheconf
206− 4: variable.misc.apacheconf
207− 5: punctuation.variable.apacheconf
208− - match: \b((text|image|application|video|audio)/.+?)\s
209− captures:
210− 1: entity.mime-type.apacheconf
211− - match: \b(?i)(export|from|unset|set|on|off)\b
212− captures:
213− 1: entity.helper.apacheconf
214− - match: \b(\d+)\b
215− captures:
216− 1: constant.numeric.integer.decimal.apacheconf
217− - match: '\s(\[)(.*?)(\])\s'
218− captures:
219− 1: punctuation.definition.flag.apacheconf
220− 2: string.flag.apacheconf
221− 3: punctuation.definition.flag.apacheconf
assets/syntaxes/02_Extra/CMake+1−1

Submodule changed.

assets/syntaxes/02_Extra/CSVnew file+1

Submodule changed.

assets/syntaxes/02_Extra/CSV.sublime-syntax+39−71
@@ -1,78 +1,46 @@
11%YAML 1.2
22---
3−# See http://www.sublimetext.com/docs/3/syntax.html
4−name: Comma Separated Values
3+# http://www.sublimetext.com/docs/3/syntax.html
4+name: Advanced CSV
55file_extensions:
66 - csv
77 - tsv
8−scope: text.csv
9−variables:
10− field_separator: (?:[,;\t])
11− record_separator: (?:$\n?)
8+scope: text.advanced_csv
129contexts:
13− prototype:
14− - match: (?={{record_separator}})
15− pop: true
16− fields:
17− - match: ''
18− push:
19− - field_or_record_separator
20− - field4
21− - field_or_record_separator
22− - field3
23− - field_or_record_separator
24− - field2
25− - field_or_record_separator
26− - field1
2710 main:
28− - meta_include_prototype: false
29− - match: '^'
30− set: fields
31−
32− field_or_record_separator:
33− - meta_include_prototype: false
34− - match: '{{record_separator}}'
35− scope: punctuation.terminator.record.csv
36− pop: true
37− - match: '{{field_separator}}'
38− scope: punctuation.separator.sequence.csv
39− pop: true
40−
41− field_contents:
42− - match: '"'
43− scope: punctuation.definition.string.begin.csv
44− push: double_quoted_string
45−
46− - match: (?={{field_separator}}|{{record_separator}})
47− pop: true
48−
49− double_quoted_string:
50− - meta_include_prototype: false
51− - meta_scope: string.quoted.double.csv
52− - match: '""'
53− scope: constant.character.escape.csv
54− - match: '"'
55− scope: punctuation.definition.string.end.csv
56− pop: true
57−
58− field1:
59− - match: ''
60− set:
61− - meta_content_scope: meta.field-1.csv support.type
62− - include: field_contents
63− field2:
64− - match: ''
65− set:
66− - meta_content_scope: meta.field-2.csv support.function
67− - include: field_contents
68− field3:
69− - match: ''
70− set:
71− - meta_content_scope: meta.field-3.csv constant.numeric
72− - include: field_contents
73− field4:
74− - match: ''
75− set:
76− - meta_content_scope: meta.field-4.csv keyword.operator
77− - include: field_contents
78−
11+ - match: (\")
12+ captures:
13+ 1: string.quoted.double.advanced_csv
14+ push:
15+ - meta_scope: meta.quoted.advanced_csv
16+ - match: (\")
17+ captures:
18+ 1: string.quoted.double.advanced_csv
19+ pop: true
20+ - include: main
21+ - match: '(\[([+-]?\d*)(\:)?([+-]?\d*)(\,)?([+-]?\d*)(\:)?([+-]?\d*)\])?\s*([<>v^])?\s*(=)'
22+ captures:
23+ 1: keyword.operator.advanced_csv
24+ 2: constant.numeric.formula.advanced_csv
25+ 4: constant.numeric.formula.advanced_csv
26+ 6: constant.numeric.formula.advanced_csv
27+ 8: constant.numeric.formula.advanced_csv
28+ 9: keyword.operator.advanced_csv
29+ 10: keyword.operator.advanced_csv
30+ push:
31+ - meta_scope: meta.range.advanced_csv
32+ - match: (?=(\")|$)
33+ pop: true
34+ - include: scope:source.python
35+ - match: '(?<=^|,|\s|\")([0-9.eE+-]+)(?=$|,|\s|\")'
36+ scope: meta.number.advanced_csv
37+ captures:
38+ 1: constant.numeric.advanced_csv
39+ - match: '(?<=^|,|\s|\")([^, \t\"]+)(?=$|,|\s|\")'
40+ scope: meta.nonnumber.advanced_csv
41+ captures:
42+ 1: storage.type.advanced_csv
43+ - match: (\,)
44+ scope: meta.delimiter.advanced_csv
45+ captures:
46+ 1: keyword.operator.advanced_csv
assets/syntaxes/02_Extra/Crystal+1−1

Submodule changed.

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

Submodule changed.

assets/syntaxes/02_Extra/Dart.sublime-syntax+243−85
@@ -1,6 +1,6 @@
11%YAML 1.2
22---
3−# http://www.sublimetext.com/docs/syntax.html
3+# http://www.sublimetext.com/docs/3/syntax.html
44name: Dart
55file_extensions:
66 - dart
@@ -9,7 +9,7 @@ contexts:
99 main:
1010 - match: ^(#!.*)$
1111 scope: meta.preprocessor.script.dart
12− - match: ^\w*\b(library|import|part of|part|export)\b
12+ - match: ^\s*\b(library|import|export|part of|part)\b
1313 captures:
1414 0: keyword.other.import.dart
1515 push:
@@ -19,114 +19,242 @@ contexts:
1919 0: punctuation.terminator.dart
2020 pop: true
2121 - include: strings
22− - include: comments
23− - match: \b(as|show|hide)\b
22+ - match: \b(as|show|hide|deferred)\b
2423 scope: keyword.other.import.dart
2524 - include: comments
26− - include: punctuation
25+ - include: constants-and-special-vars
2726 - include: annotations
27+ - include: decl-typedef
28+ - include: decl-class
29+ - include: decl-enum
30+ - include: decl-function
2831 - include: keywords
29− - include: constants-and-special-vars
3032 - include: strings
3133 annotations:
32− - match: '@[a-zA-Z]+'
33− scope: storage.type.annotation.dart
34+ - match: '^(?:\s*)((@)([a-zA-Z0-9_]+))'
35+ captures:
36+ 1: annotation.dart
37+ 2: entity.name.function.annotation.dart
38+ 3: support.type.dart
3439 comments:
3540 - match: /\*\*/
3641 scope: comment.block.empty.dart
3742 captures:
3843 0: punctuation.definition.comment.dart
39− - include: comments-doc-oldschool
40− - include: comments-doc
4144 - include: comments-inline
42− comments-block:
45+ comments-inline:
4346 - match: /\*
4447 push:
4548 - meta_scope: comment.block.dart
4649 - match: \*/
4750 pop: true
48− - include: comments-block
49− comments-doc:
50− - match: ///
51+ - include: scope:text.dart-doccomments
52+ - match: (///)
53+ captures:
54+ 1: marker.dart
5155 push:
52− - meta_scope: comment.block.documentation.dart
53− - match: .*
56+ - meta_scope: comment.line.triple-slash.dart
57+ - match: $
5458 pop: true
55− - include: dartdoc
56− comments-doc-oldschool:
57− - match: /\*\*
59+ - include: scope:text.dart-doccomments
60+ - match: (//)
61+ captures:
62+ 1: marker.dart
5863 push:
59− - meta_scope: comment.block.documentation.dart
60− - match: \*/
64+ - meta_scope: comment.line.double-slash.dart
65+ - match: $
6166 pop: true
62− - include: comments-doc-oldschool
63− - include: comments-block
64− - include: dartdoc
65− comments-inline:
66− - include: comments-block
67− - match: ((//).*)$
68− captures:
69− 1: comment.line.double-slash.dart
67+ - include: scope:text.dart-doccomments
7068 constants-and-special-vars:
71− - match: (?<!\$)\b(true|false|null)\b(?!\$)
69+ - match: \b(true|false|null)\b
7270 scope: constant.language.dart
73− - match: (?<!\$)\b(this|super)\b(?!\$)
71+ - match: \b(this|super)\b
7472 scope: variable.language.dart
75− - match: '(?<!\$)\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)\b(?!\$)'
73+ - match: '\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)\b'
7674 scope: constant.numeric.dart
77− - match: '(?<![a-zA-Z0-9_$])([_$]*[A-Z][a-zA-Z0-9_$]*|bool\b|num\b|int\b|double\b|dynamic\b)'
78− scope: support.class.dart
79− - match: '([_$]*[a-z][a-zA-Z0-9_$]*)(<|\(|\s+=>)'
75+ decl-class:
76+ - match: \bclass\b
8077 captures:
81− 1: entity.name.function.dart
82− dartdoc:
83− - match: '(\[.*?\])'
78+ 0: keyword.control.new.dart
79+ push:
80+ - meta_scope: meta.declaration.class.dart
81+ - match: "(?={)"
82+ pop: true
83+ - include: keywords
84+ - match: "[A-Za-z_][A-Za-z0-9_]*"
85+ scope: class.name.dart
86+ decl-enum:
87+ - match: \benum\b
88+ captures:
89+ 0: keyword.declaration.dart
90+ push:
91+ - meta_scope: meta.declaration.enum.dart
92+ - match: "(?={)"
93+ pop: true
94+ - include: keywords
95+ - match: "[A-Za-z_][A-Za-z0-9_]*"
96+ scope: enum.name.dart
97+ decl-function:
98+ - match: ^\s*(?:\b(void|bool|num|int|double|dynamic|var|String|List|Map)\b)\s+(get)\s+(\w+)\s+(?==>)
99+ comment: A getter with a primitive return type.
100+ scope: meta.declaration.function.dart
84101 captures:
85− 0: variable.name.source.dart
86− - match: '^ {4,}(?![ \*]).*'
102+ 1: storage.type.primitive.dart
103+ 2: keyword.declaration.dart
104+ 3: function.name.dart
105+ - match: ^\s*(?:\b(\w+)\b\s+)?(get)\s+(\w+)\s+(?==>)
106+ comment: A getter with a user-defined return type or no return type.
107+ scope: meta.declaration.function.dart
108+ captures:
109+ 1: type.user-defined.dart
110+ 2: keyword.declaration.dart
111+ 3: function.name.dart
112+ - match: ^\s*(set)\s+(\w+)(?=\()
113+ comment: A setter.
114+ captures:
115+ 1: keyword.declaration.dart
116+ 2: function.name.dart
117+ push:
118+ - meta_scope: meta.declaration.function.dart
119+ - match: \)
120+ pop: true
121+ - include: comments-inline
122+ - include: decl-function-parameter
123+ - include: strings
124+ - include: keywords
125+ - match: ^\s*(?:\b(void|bool|num|int|double|dynamic|var|String|List|Map)\b)\s+(\w+)(?=\()
126+ comment: A function with a primitive return type.
127+ captures:
128+ 1: storage.type.primitive.dart
129+ 2: function.name.dart
130+ push:
131+ - meta_scope: meta.declaration.function.dart
132+ - match: \)
133+ pop: true
134+ - include: comments-inline
135+ - include: decl-function-parameter
136+ - include: strings
137+ - include: keywords
138+ - match: ^\s*(?:\b(return)\b)\s+(\w+)(?=\()
139+ comment: A function invocation after 'return'
140+ captures:
141+ 1: keyword.control.dart
142+ 2: function.name.dart
143+ push:
144+ - meta_scope: meta.invocation.function.dart
145+ - match: \)
146+ pop: true
147+ - include: comments-inline
148+ - include: decl-function-parameter
149+ - include: strings
150+ - include: keywords
151+ - match: ^\s*\b(new)\b\s+(\w+)(?=\()
152+ comment: A class instantiation after 'new'
153+ captures:
154+ 1: keyword.declaration.dart
155+ 2: function.name.dart
156+ push:
157+ - meta_scope: meta.invocation.function.dart
158+ - match: \)
159+ pop: true
160+ - include: comments-inline
161+ - include: decl-function-parameter
162+ - include: strings
163+ - include: keywords
164+ decl-function-parameter:
165+ - include: constants-and-special-vars
166+ - match: (?:\b(void|bool|num|int|double|dynamic|var|String|List|Map)\b)\s+(\w+)(?=\()
167+ comment: A function with a primitive return type.
168+ captures:
169+ 1: storage.type.primitive.dart
170+ 2: function.name.dart
171+ push:
172+ - meta_scope: meta.parameter.function.dart
173+ - match: \)
174+ pop: true
175+ - include: decl-function-parameter
176+ - include: strings
177+ - include: keywords
178+ - match: \b(new)\b\s+(\w+)(?=\()
179+ comment: A class instantiation after 'new'
87180 captures:
88− 0: variable.name.source.dart
89− - match: '```.*?$'
181+ 1: keyword.declaration.dart
182+ 2: function.name.dart
90183 push:
91− - meta_content_scope: variable.other.source.dart
92− - match: '```'
184+ - meta_scope: meta.invocation.function.dart
185+ - match: \)
93186 pop: true
94− - match: (`.*?`)
187+ - include: decl-function-parameter
188+ - include: strings
189+ - include: keywords
190+ - match: (?:\b(\w+)\b)\s+(\w+)(?=\()
191+ comment: A function with a user-defined return type.
95192 captures:
96− 0: variable.other.source.dart
97− - match: (`.*?`)
193+ 1: type.user-defined.dart
194+ 2: function.name.dart
195+ push:
196+ - meta_scope: meta.parameter.function.dart
197+ - match: \)
198+ pop: true
199+ - include: decl-function-parameter
200+ - include: strings
201+ - include: keywords
202+ - match: (\w+)(?=\()
203+ comment: A function with no return type.
98204 captures:
99− 0: variable.other.source.dart
100− - match: (\* (( ).*))$
205+ 1: function.name.dart
206+ push:
207+ - meta_scope: meta.parameter.function.dart
208+ - match: \)
209+ pop: true
210+ - include: decl-function-parameter
211+ - include: strings
212+ - include: keywords
213+ decl-typedef:
214+ - match: typedef
101215 captures:
102− 2: variable.other.source.dart
103− - match: (\* .*)$
216+ 0: keyword.control.new.dart
217+ push:
218+ - meta_scope: meta.declaration.typedef.dart
219+ - match: ;
220+ captures:
221+ 0: punctuation.terminator.dart
222+ pop: true
223+ - match: '(?:\b(void|bool|num|int|double|dynamic|var|String|List|Map)\b|([a-zA-Z_][a-zA-Z0-9_]*))\s+([a-zA-Z_][a-zA-Z0-9_]+)'
224+ captures:
225+ 1: storage.type.primitive.dart
226+ 2: typedef.return.dart
227+ 3: typedef.name.dart
228+ - match: \(
229+ push:
230+ - meta_scope: typedef.params.dart
231+ - match: \)
232+ pop: true
233+ - include: keywords
104234 keywords:
105− - match: (?<!\$)\bas\b(?!\$)
235+ - match: \bassert\b
236+ scope: keyword.control.assert.dart
237+ - match: \bas\b
106238 scope: keyword.cast.dart
107− - match: (?<!\$)\b(try|on|catch|finally|throw|rethrow)\b(?!\$)
239+ - match: \b(try|catch|finally|throw|on|rethrow)\b
108240 scope: keyword.control.catch-exception.dart
109− - match: (?<!\$)\b(break|case|continue|default|do|else|for|if|in|return|switch|while)\b(?!\$)
241+ - match: \s+\?\s+|\s+:\s+
242+ scope: keyword.control.ternary.dart
243+ - match: \b(break|case|continue|default|do|else|for|if|in|return|switch|while)\b
110244 scope: keyword.control.dart
111− - match: (?<!\$)\b(sync(\*)?|async(\*)?|await|yield(\*)?)\b(?!\$)
112− scope: keyword.control.dart
113− - match: (?<!\$)\bassert\b(?!\$)
114− scope: keyword.control.dart
115− - match: (?<!\$)\b(new)\b(?!\$)
245+ - match: \b(async\*|async|await\*|await|yield)\b
246+ scope: keyword.control.async.dart
247+ - match: \b(new)\b
116248 scope: keyword.control.new.dart
117− - match: (?<!\$)\b(abstract|class|enum|extends|external|factory|implements|get|mixin|native|operator|set|typedef|with|covariant)\b(?!\$)
249+ - match: \b(abstract|extends|external|factory|implements|with|interface|get|native|operator|set|typedef)\b
118250 scope: keyword.declaration.dart
119− - match: (?<!\$)\b(is\!?)\b(?!\$)
251+ - match: \b(is\!?)\b
120252 scope: keyword.operator.dart
121− - match: '\?|:'
122− scope: keyword.operator.ternary.dart
123253 - match: (<<|>>>?|~|\^|\||&)
124254 scope: keyword.operator.bitwise.dart
125255 - match: ((&|\^|\||<<|>>>?)=)
126256 scope: keyword.operator.assignment.bitwise.dart
127− - match: (=>)
128− scope: keyword.operator.closure.dart
129− - match: (==|!=|<=?|>=?)
257+ - match: (===?|!==?|<=?|>=?)
130258 scope: keyword.operator.comparison.dart
131259 - match: '(([+*/%-]|\~)=)'
132260 scope: keyword.operator.assignment.arithmetic.dart
@@ -138,22 +266,56 @@ contexts:
138266 scope: keyword.operator.arithmetic.dart
139267 - match: (!|&&|\|\|)
140268 scope: keyword.operator.logical.dart
141− - match: (?<!\$)\b(static|final|const)\b(?!\$)
142− scope: storage.modifier.dart
143− - match: (?<!\$)\b(?:void|var)\b(?!\$)
144− scope: storage.type.primitive.dart
145− punctuation:
146− - match: ','
147− scope: punctuation.comma.dart
148269 - match: ;
149270 scope: punctuation.terminator.dart
271+ - match: \b(static|final|const)\b
272+ scope: storage.modifier.dart
273+ - match: \b(?:void|bool|num|int|double|dynamic|var|String|List|Map)\b
274+ scope: storage.type.primitive.dart
275+ regexp:
276+ - match: '\\[^''"]'
277+ scope: constant.character.escaped.regex.dart
278+ - match: \(
279+ push:
280+ - meta_content_scope: meta.capture.regex.dart
281+ - match: \)
282+ pop: true
283+ - match: \?(:|=|!)
284+ scope: ignore.capture.regex.dart
285+ - match: \*|\+|\?|\.|\|
286+ scope: keyword.other.regex.dart
287+ - match: \^|\$
288+ scope: keyword.other.regex.dart
150289 - match: \.
151− scope: punctuation.dot.dart
290+ scope: constant.other.regex.dart
291+ - match: '\[(\^)?'
292+ captures:
293+ 1: keyword.other.negation.regex.dart
294+ push:
295+ - meta_scope: constant.character.range.regex.dart
296+ - match: '\]'
297+ pop: true
298+ - match: '\\[^"'']'
299+ scope: constant.character.escaped.regex.dart
300+ - match: '\{(?:\d+)?,(?:\d+)?\}'
301+ scope: keyword.other.regex.dart
152302 string-interp:
153− - match: '\$((\w+)|\{([^{}]+)\})'
303+ - match: '(\$)(\{)'
154304 captures:
305+ 1: keyword.other.dart
306+ 2: keyword.other.dart
307+ push:
308+ - meta_scope: interpolation.dart
309+ - meta_content_scope: source.dart
310+ - match: '(\})'
311+ captures:
312+ 1: keyword.other.dart
313+ pop: true
314+ - include: main
315+ - match: (\$)(\w+)
316+ captures:
317+ 1: keyword.other.dart
155318 2: variable.parameter.dart
156− 3: variable.parameter.dart
157319 - match: \\.
158320 scope: constant.character.escape.dart
159321 strings:
@@ -166,7 +328,7 @@ contexts:
166328 - match: (?<!r)'''
167329 push:
168330 - meta_scope: string.interpolated.triple.single.dart
169− - match: '''''''(?!'')'
331+ - match: "'''(?!')"
170332 pop: true
171333 - include: string-interp
172334 - match: r"""
@@ -177,9 +339,9 @@ contexts:
177339 - match: r'''
178340 push:
179341 - meta_scope: string.quoted.triple.single.dart
180− - match: '''''''(?!'')'
342+ - match: "'''(?!')"
181343 pop: true
182− - match: (?<!\|r)"
344+ - match: (?<!\\|r)"
183345 push:
184346 - meta_scope: string.interpolated.double.dart
185347 - match: '"'
@@ -192,20 +354,16 @@ contexts:
192354 - meta_scope: string.quoted.double.dart
193355 - match: '"'
194356 pop: true
195− - match: \n
196− scope: invalid.string.newline
357+ - include: regexp
197358 - match: (?<!\|r)'
198359 push:
199360 - meta_scope: string.interpolated.single.dart
200361 - match: "'"
201362 pop: true
202− - match: \n
203− scope: invalid.string.newline
204363 - include: string-interp
205364 - match: r'
206365 push:
207366 - meta_scope: string.quoted.single.dart
208367 - match: "'"
209368 pop: true
210− - match: \n
211− scope: invalid.string.newline
369+ - include: regexp
assets/syntaxes/02_Extra/DotENV+1−1

Submodule changed.

assets/syntaxes/02_Extra/DotENV.sublime-syntax+2−4
@@ -4,6 +4,7 @@
44name: DotENV
55file_extensions:
66 - .env
7+ - .envrc
78 - .env.dist
89 - .env.local
910 - .env.sample
@@ -18,11 +19,8 @@ file_extensions:
1819 - .env.production
1920 - .env.production.local
2021 - .env.dusk.local
21− - .env.staging
22− - .env.default
23− - .env.defaults
24− - .envrc
2522 - .flaskenv
23+ - .env.staging
2624scope: source.env
2725contexts:
2826 main:
assets/syntaxes/02_Extra/Elixir+1−1

Submodule changed.

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

Submodule changed.

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

Submodule changed.

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

Submodule changed.

assets/syntaxes/02_Extra/Fstab.sublime-syntax−2
@@ -4,8 +4,6 @@
44name: fstab
55file_extensions:
66 - fstab
7− - crypttab
8− - mtab
97scope: source.fstab
108
119contexts:
assets/syntaxes/02_Extra/GLSLdeleted−1

Submodule changed.

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

Submodule changed.

assets/syntaxes/02_Extra/Groffdeleted−1

Submodule changed.

assets/syntaxes/02_Extra/INI.sublime-syntax+3−4
@@ -5,8 +5,8 @@ name: INI
55file_extensions:
66 - ini
77 - INI
8− - "inf"
9− - "INF"
8+ - inf
9+ - INF
1010 - reg
1111 - REG
1212 - lng
@@ -25,13 +25,12 @@ contexts:
2525 scope: comment.line.semicolon.ini
2626 captures:
2727 1: punctuation.definition.comment.ini
28− - match: '^\s*(\[)(.*?)(\])\s*(;.*)?$\n?'
28+ - match: '^\s*(\[)(.*?)(\])'
2929 scope: meta.tag.section.ini
3030 captures:
3131 1: punctuation.definition.section.ini
3232 2: entity.section.ini
3333 3: punctuation.definition.section.ini
34− 4: comment.definition.section.ini
3534 - match: '^(\s*(["'']?)(.+?)(\2)\s*(=))?\s*((["'']?)(.*?)(\7))\s*(;.*)?$\n?'
3635 scope: meta.declaration.ini
3736 captures:
assets/syntaxes/02_Extra/Julia+1−1

Submodule changed.

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

Submodule changed.

assets/syntaxes/02_Extra/LLVMdeleted−1

Submodule changed.

assets/syntaxes/02_Extra/Leandeleted−1

Submodule changed.

assets/syntaxes/02_Extra/Lean.sublime-syntaxdeleted−125
@@ -1,125 +0,0 @@
1−%YAML 1.2
2−---
3−# http://www.sublimetext.com/docs/3/syntax.html
4−name: Lean
5−file_extensions:
6− - lean
7−scope: source.lean
8−contexts:
9− main:
10− - include: comments
11− - match: '\b(?<!\.)(inductive|coinductive|structure|theorem|axiom|axioms|abbreviation|lemma|definition|def|instance|class|constant)\b\s+(\{[^}]*\})?'
12− captures:
13− 1: keyword.other.definitioncommand.lean
14− push:
15− - meta_scope: meta.definitioncommand.lean
16− - match: '(?=\bwith\b|\bextends\b|[:\|\(\[\{⦃<>])'
17− pop: true
18− - include: comments
19− - include: definitionName
20− - match: ","
21− - match: \b(Prop|Type|Sort)\b
22− scope: storage.type.lean
23− - match: '\battribute\b\s*\[[^\]]*\]'
24− scope: storage.modifier.lean
25− - match: '@\[[^\]]*\]'
26− scope: storage.modifier.lean
27− - match: \b(?<!\.)(private|meta|mutual|protected|noncomputable)\b
28− scope: keyword.control.definition.modifier.lean
29− - match: \b(sorry)\b
30− scope: invalid.illegal.lean
31− - match: '#print\s+(def|definition|inductive|instance|structure|axiom|axioms|class)\b'
32− scope: keyword.other.command.lean
33− - match: '#(print|eval|reduce|check|help|exit|find|where)\b'
34− scope: keyword.other.command.lean
35− - match: \b(?<!\.)(import|export|prelude|theory|definition|def|abbreviation|instance|renaming|hiding|exposing|parameter|parameters|begin|constant|constants|lemma|variable|variables|theorem|example|open|axiom|inductive|coinductive|with|structure|universe|universes|alias|precedence|reserve|postfix|prefix|infix|infixl|infixr|notation|end|using|namespace|section|local|set_option|extends|include|omit|class|classes|instances|raw|run_cmd|restate_axiom)(?!\.)\b
36− scope: keyword.other.lean
37− - match: \b(?<!\.)(calc|have|this|match|do|suffices|show|by|in|at|let|forall|fun|exists|assume|from|obtain|haveI|λ)(?!\.)\b
38− scope: keyword.other.lean
39− - match: «
40− push:
41− - meta_content_scope: entity.name.lean
42− - match: »
43− pop: true
44− - match: \b(?<!\.)(if|then|else)\b
45− scope: keyword.control.lean
46− - match: '"'
47− captures:
48− 0: punctuation.definition.string.begin.lean
49− push:
50− - meta_scope: string.quoted.double.lean
51− - match: '"'
52− captures:
53− 0: punctuation.definition.string.end.lean
54− pop: true
55− - match: '\\[\\"nt'']'
56− scope: constant.character.escape.lean
57− - match: '\\x[0-9A-Fa-f][0-9A-Fa-f]'
58− scope: constant.character.escape.lean
59− - match: '\\u[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]'
60− scope: constant.character.escape.lean
61− - match: '''[^\\'']'''
62− scope: string.quoted.single.lean
63− - match: '''(\\(x..|u....|.))'''
64− scope: string.quoted.single.lean
65− captures:
66− 1: constant.character.escape.lean
67− - match: '`+[^\[(]\S+'
68− scope: entity.name.lean
69− - match: '\b([0-9]+|0([xX][0-9a-fA-F]+))\b'
70− scope: constant.numeric.lean
71− blockComment:
72− - match: /-
73− push:
74− - meta_scope: comment.block.lean
75− - match: "-/"
76− pop: true
77− - include: scope:source.lean.markdown
78− - include: blockComment
79− comments:
80− - include: dashComment
81− - include: docComment
82− - include: stringBlock
83− - include: modDocComment
84− - include: blockComment
85− dashComment:
86− - match: (--)
87− captures:
88− 0: punctuation.definition.comment.lean
89− push:
90− - meta_scope: comment.line.double-dash.lean
91− - match: $
92− pop: true
93− - include: scope:source.lean.markdown
94− definitionName:
95− - match: '\b[^:«»\(\)\{\}[:space:]=→λ∀?][^:«»\(\)\{\}[:space:]]*'
96− scope: entity.name.function.lean
97− - match: «
98− push:
99− - meta_content_scope: entity.name.function.lean
100− - match: »
101− pop: true
102− docComment:
103− - match: /--
104− push:
105− - meta_scope: comment.block.documentation.lean
106− - match: "-/"
107− pop: true
108− - include: scope:source.lean.markdown
109− - include: blockComment
110− modDocComment:
111− - match: /-!
112− push:
113− - meta_scope: comment.block.documentation.lean
114− - match: "-/"
115− pop: true
116− - include: scope:source.lean.markdown
117− - include: blockComment
118− stringBlock:
119− - match: /-"
120− push:
121− - meta_scope: comment.block.string.lean
122− - match: '"-/'
123− pop: true
124− - include: scope:source.lean.markdown
125− - include: blockComment
assets/syntaxes/02_Extra/LiveScriptdeleted−1

Submodule changed.

assets/syntaxes/02_Extra/LiveScript.sublime-syntaxdeleted−400
@@ -1,400 +0,0 @@
1−%YAML 1.2
2−---
3−# http://www.sublimetext.com/docs/3/syntax.html
4−name: LiveScript
5−comment: "LiveScript Syntax: version 1"
6−file_extensions:
7− - ls
8− - Slakefile
9− - ls.erb
10−first_line_match: ^#!.*\bls
11−scope: source.livescript
12−contexts:
13− main:
14− - match: |-
15− (?x)
16− !?[~-]{1,2}>\*?
17− |<[~-]{1,2}!?
18− |\(\s* (?= instanceof[\s)]|and[\s)]|or[\s)]|is[\s)]|isnt[\s)]|in[\s)]|import[\s)]|import\ all[\s)] |\.|[-+/*%^&<>=|][\b\s)\w$]|\*\*|\%\%)
19− | (?<=[\s(]instanceof|[\s(]and|[\s(]or|[\s(]is|[\s(]isnt|[\s(]in|[\s(]import|[\s(]import\ all|[\s(]do|\.|\*\*|\%\%|[\b\s(\w$][-+/*%^&<>=|]) \s*\)
20− scope: storage.type.function.livescript
21− - match: \/\*
22− captures:
23− 0: punctuation.definition.comment.livescript
24− push:
25− - meta_scope: comment.block.livescript
26− - match: \*\/
27− captures:
28− 0: punctuation.definition.comment.livescript
29− pop: true
30− - match: '@\w*'
31− scope: storage.type.annotation.livescriptscript
32− - match: '(#)(?!\{).*$\n?'
33− scope: comment.line.number-sign.livescript
34− captures:
35− 1: punctuation.definition.comment.livescript
36− - match: '((?:!|~|!~|~!)?function\*?)\s+([$\w\-]*[$\w]+)'
37− captures:
38− 1: storage.type.function.livescript
39− 2: entity.name.function.livescript
40− - match: (new)\s+(\w+(?:\.\w*)*)
41− captures:
42− 1: keyword.operator.new.livescript
43− 2: entity.name.type.instance.livescript
44− - match: \b(package|private|protected|public|interface|enum|static)(?!-)\b
45− scope: keyword.illegal.livescript
46− - match: "'''"
47− captures:
48− 0: punctuation.definition.string.begin.livescript
49− push:
50− - meta_scope: string.quoted.heredoc.livescript
51− - match: "'''"
52− captures:
53− 0: punctuation.definition.string.end.livescript
54− pop: true
55− - match: '"""'
56− captures:
57− 0: punctuation.definition.string.begin.livescript
58− push:
59− - meta_scope: string.quoted.double.heredoc.livescript
60− - match: '"""'
61− captures:
62− 0: punctuation.definition.string.end.livescript
63− pop: true
64− - match: \\.
65− scope: constant.character.escape.livescript
66− - include: interpolated_livescript
67− - match: "``"
68− captures:
69− 0: punctuation.definition.string.begin.livescript
70− push:
71− - meta_scope: string.quoted.script.livescript
72− - match: "``"
73− captures:
74− 0: punctuation.definition.string.end.livescript
75− pop: true
76− - match: '\\(x[0-9A-Fa-f]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)'
77− scope: constant.character.escape.livescript
78− - match: '<\['
79− push:
80− - meta_scope: string.array-literal.livescript
81− - match: '\]>'
82− pop: true
83− - match: '/{2}(?![\s=/*+{}?]).*?[^\\]/[igmy]{0,4}(?![a-zA-Z0-9])/{2}'
84− scope: string.regexp.livescript
85− - match: '/{2}\n'
86− push:
87− - meta_scope: string.regexp.livescript
88− - match: "/{2}[imgy]{0,4}"
89− pop: true
90− - include: embedded_spaced_comment
91− - include: interpolated_livescript
92− - match: "/{2}"
93− push:
94− - meta_scope: string.regexp.livescript
95− - match: "/{2}[imgy]{0,4}"
96− pop: true
97− - match: '\\(x[0-9A-Fa-f]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)'
98− scope: constant.character.escape.livescript
99− - include: interpolated_livescript
100− - match: '/(?![\s=/*+{}?]).*?[^\\]/[igmy]{0,4}(?![a-zA-Z0-9])'
101− scope: string.regexp.livescript
102− - match: |-
103− (?x)
104− \b(?<![\.\$\-@])(
105− instanceof|new|delete|typeof|and|or|is|isnt|not
106− )(?!\-|\s*:)\b
107− scope: keyword.operator.livescript
108− - match: <\||\|>
109− scope: keyword.operator.livescript
110− - match: "=>"
111− scope: keyword.control.livescript
112− - match: |-
113− (?x)
114− \b(?<![\.\$\-@])(?:
115− return|break|continue|throw
116− |try|if|while|for|for\s+own|switch|unless|until
117− |catch|finally|else|nobreak|case|default|fallthrough|when|otherwise|then
118− |yield
119− )(?!\-|\s*:)\b
120− scope: keyword.control.livescript
121− - match: |-
122− (?x)
123− and=|or=|%|&|\^|\*|\/|(?<![a-zA-Z$_])(\-)?\-(?!\-?>)|\+\+|\+|
124− ~(?!~?>)|==|=|!=|<=|>=|<<=|>>=|
125− >>>=|<>|<(?!\[)|(?<!\])>|(?<!\w)!(?!([~\-]+)?>)|&&|\.\.(\.)?|\s\.\s|\?|\|\||\:|\*=|(?<!\()/=|%=|\+=|\-=|\.=|&=
126− |\^=
127− scope: keyword.operator.livescript
128− - match: |-
129− (?x)
130− \b(?<![\.\$\-@])(?:
131− function
132− )(?!\-|\s*:)\b
133− scope: storage.type.function.livescript
134− - match: |-
135− (?x)
136− \b(?<![\.\$\-@])(?:
137− this|throw|then|try|typeof!?|til|to
138− |continue|const|case|catch|class
139− |in|instanceof|import|import\s+all|implements|if|is
140− |default|delete|debugger|do
141− |for|for\s+own|finally|function|from|fallthrough
142− |super|switch
143− |else|nobreak|extends|export|eval
144− |and|arguments
145− |new|not
146− |unless|until
147− |while|with|when
148− |of|or|otherwise
149− |let|var|loop
150− |match
151− |by|yield
152− )(?!\-|\s*:)\b
153− scope: keyword.other.livescript
154− - match: '([a-zA-Z\$_](?:[\w$.-])*)\s*(?!\::)((:)|(=(?!>)))\s*(?!(\s*!?\s*\(.*\))?\s*(!?[~-]{1,2}>\*?))'
155− captures:
156− 1: variable.assignment.livescript
157− 3: punctuation.separator.key-value, keyword.operator.livescript
158− 4: keyword.operator.livescript
159− - match: '(?<=\s|^)([\[\{])(?=.*?[\]\}]\s+[:=])'
160− captures:
161− 0: keyword.operator.livescript
162− push:
163− - meta_scope: meta.variable.assignment.destructured.livescript
164− - match: '([\]\}]\s*[:=])'
165− captures:
166− 0: keyword.operator.livescript
167− pop: true
168− - include: variable_name
169− - include: instance_variable
170− - include: single_quoted_string
171− - include: double_quoted_string
172− - include: numeric
173− - match: |-
174− (?x)
175− (\s*)
176− (?=[a-zA-Z\$_])
177− ([a-zA-Z\$_]([\w$.:-])*)\s*
178− (?=[:=](\s*!?\s*\(.*\))?\s*(!?[~-]{1,2}>\*?))
179− scope: meta.function.livescript
180− captures:
181− 2: entity.name.function.livescript
182− 3: entity.name.function.livescript
183− 4: variable.parameter.function.livescript
184− 5: storage.type.function.livescript
185− - match: \b(?<!\.)(true|on|yes)(?!\s*:)\b
186− scope: constant.language.boolean.true.livescript
187− - match: \b(?<!\.)(false|off|no)(?!\s*:)\b
188− scope: constant.language.boolean.false.livescript
189− - match: \b(?<!\.)(null|void)(?!\s*:)\b
190− scope: constant.language.null.livescript
191− - match: \b(?<!\.)(super|this|extends)(?!\s*:)\b
192− scope: variable.language.livescript
193− - match: '(class\b)\s+(@?[a-zA-Z$_][\w$.-]*)?(?:\s+(extends)\s+(@?[a-zA-Z$_][\w$.-]*))?'
194− scope: meta.class.livescript
195− captures:
196− 1: storage.type.class.livescript
197− 2: entity.name.type.class.livescript
198− 3: keyword.control.inheritance.livescript
199− 4: entity.other.inherited-class.livescript
200− - match: \b(debugger|\\)\b
201− scope: keyword.other.livescript
202− - match: |-
203− (?x)\b(
204− Array|ArrayBuffer|Blob|Boolean|Date|document|event|Function|
205− Int(8|16|32|64)Array|Math|Map|Number|
206− Object|Proxy|RegExp|Set|String|WeakMap|
207− window|Uint(8|16|32|64)Array|XMLHttpRequest
208− )\b
209− scope: support.class.livescript
210− - match: \b(console)\b
211− scope: entity.name.type.object.livescript
212− - match: \b(Infinity|NaN|undefined)\b
213− scope: constant.language.livescript
214− - match: \;
215− scope: punctuation.terminator.statement.livescript
216− - match: ',[ |\t]*'
217− scope: meta.delimiter.object.comma.livescript
218− - match: \.
219− scope: meta.delimiter.method.period.livescript
220− - match: '\{|\}'
221− scope: meta.brace.curly.livescript
222− - match: \(|\)
223− scope: meta.brace.round.livescript
224− - match: '\[|\]\s*'
225− scope: meta.brace.square.livescript
226− - include: instance_variable
227− - include: backslash_string
228− - include: single_quoted_string
229− - include: double_quoted_string
230− - include: numeric
231− - match: '()(@|@@|[$\w\-]*[$\w]+)\s*(`)'
232− captures:
233− 1: keyword.operator.livescript
234− 2: meta.function-call.livescript
235− 3: keyword.operator.livescript
236− - match: "`"
237− scope: keyword.operator.livescript
238− - match: '()(@|@@|[$\w\-]*[$\w]+)(?:(\??\!)|[(])'
239− captures:
240− 1: keyword.operator.livescript
241− 2: meta.function-call.livescript
242− 3: keyword.operator.livescript
243− - match: '(@|@@|[$\w\-]*[$\w]+)(\?)? (?!\s*(((by|of|and|or|with|when|unless|if|is|isnt|else|nobreak|for|from|not in|in|catch|til|to|then|import|extends|implements|instanceof)\b)|[=:.*\/+\-%\^<>][ =)]|[`}%*)]|/(?!.*?/)|&&|[.][^.]|=>|\/ +|\||\|\||\-\-|\+\+|\|>|<|\||$|\n|\#|/\*))'
244− captures:
245− 1: meta.function-call.livescript
246− 2: keyword.operator.livescript
247− - match: \| _
248− scope: keyword.control.livescript
249− - match: '\|(?![.])'
250− scope: keyword.control.livescript
251− - match: \|
252− scope: keyword.operator.livescript
253− - match: ((?<=console\.)(debug|warn|info|log|error|time(End|-end)|assert))\b
254− scope: support.function.console.livescript
255− - match: |-
256− (?x)\b(
257− decodeURI(Component)?|encodeURI(Component)?|eval|parse(Float|Int)|require
258− )\b
259− scope: support.function.livescript
260− - match: |-
261− (?x)(?<![.-])\b(
262− map|filter|reject|partition|find|each|head|tail|last|initial|empty|
263− values|keys|length|cons|append|join|reverse|fold(l|r)?1?|unfoldr|
264− and(List|-list)|or(List|-list)|any|all|unique|sum|product|mean|compact|
265− concat(Map|-map)?|maximum|minimum|scan(l|r)?1?|replicate|slice|apply|
266− split(At|-at)?|take(While|-while)?|drop(While|-while)?|span|first|
267− break(It|-it)|list(ToObj|-to-obj)|obj(ToFunc|-to-func)|
268− pairs(ToObj|-to-obj)|obj(ToPairs|-to-pairs|ToLists|-to-lists)|
269− zip(All|-all)?(With|-with)?|compose|curry|partial|flip|fix|
270− sort(With|-with|By|-by)?|group(By|-by)|break(List|-list|Str|-str)|
271− difference|intersection|union|average|flatten|chars|unchars|repeat|
272− lines|unlines|words|unwords|max|min|negate|abs|signum|quot|rem|div|mod|
273− recip|pi|tau|exp|sqrt|ln|pow|sin|cos|tan|asin|acos|atan|atan2|truncate|
274− round|ceiling|floor|is(It|-it)NaN|even|odd|gcd|lcm|disabled__id
275− )\b(?![.-])
276− comment: |
277− Generated by DOM query from http://gkz.github.com/prelude-ls/:
278− [].slice
279− .call(document.querySelectorAll(".nav-pills li a"))
280− .map(function(_) {return _.innerText})
281− .filter(function(_) {return _.trim() !== '})
282− .slice(2)
283− .join("|")
284− scope: support.function.prelude.livescript
285− - match: '(?x)(?<![.-])\b(that|it|e|_)\b'
286− scope: support.function.semireserved.livescript
287− - match: |-
288− (?x)((?<=(\.|\]|\)))(
289− apply|call|concat|every|filter|for(Each|-each)|
290− from|has(Own|-own)(Property|-property)|index(Of|-of)|
291− is(Prototype|-prototype)(Of|-of)|join|last(Index|-index)(Of|-of)|
292− map|of|pop|property(Is|-is)(Enumerable|-enumerable)|push|
293− reduce(Right|-right)?|reverse|shift|slice|some|sort|
294− splice|to(Locale|-locale)?(String|-string)|unshift|valueOf
295− ))\b(?!-)
296− scope: support.function.method.array.livescript
297− - match: |-
298− (?x)((?<=Array\.)(
299− isArray
300− ))\b
301− scope: support.function.static.array.livescript
302− - match: |-
303− (?x)((?<=Object\.)(
304− create|define(Propert|-propert)(ies|y)|freeze|
305− get(Own|-own)(Property|-property)(Descriptors?|Names)|
306− get(Property|-property)(Descriptor|Names)|getPrototypeOf|
307− is((Extensible|-extensible)|(Frozen|-frozen)|(Sealed|-sealed))?|
308− keys|prevent(Extensions|-extensions)|seal
309− ))\b
310− scope: support.function.static.object.livescript
311− - match: |-
312− (?x)((?<=Math\.)(
313− abs|acos|acosh|asin|asinh|atan|atan2|atanh|ceil|cos|cosh|exp|expm1|floor|
314− hypot|log|log10|log1p|log2|max|min|pow|random|round|sign|sin|sinh|sqrt|
315− tan|tanh|trunc
316− ))\b
317− scope: support.function.static.math.livescript
318− - match: |-
319− (?x)((?<=Number\.)(
320− is(Finite|Integer|NaN)|to(Integer|-integer)
321− ))\b
322− scope: support.function.static.number.livescript
323− - match: '[\$\w][\w-]*'
324− scope: variable.other.livescript
325− backslash_string:
326− - match: '\\([\\)\s,\};\]])?'
327− captures:
328− 0: string.quoted.single.livescript
329− push:
330− - meta_content_scope: string.quoted.single.livescript
331− - match: '([\\)\s,\};\]])'
332− captures:
333− 0: punctuation.definition.string.end.livescript
334− pop: true
335− constructor_variable:
336− - match: '([a-zA-Z$_][\w$-]*)(@{2})([a-zA-Z$_][\w$-]*)?'
337− scope: variable.other.readwrite.constructor.livescript
338− double_quoted_string:
339− - match: '"'
340− captures:
341− 0: punctuation.definition.string.begin.livescript
342− push:
343− - meta_scope: string.quoted.double.livescript
344− - match: '"'
345− captures:
346− 0: punctuation.definition.string.end.livescript
347− pop: true
348− - match: '\\(x[0-9A-Fa-f]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)'
349− scope: constant.character.escape.livescript
350− - include: interpolated_livescript
351− embedded_comment:
352− - match: (?<!\\)(#).*$\n
353− scope: comment.line.number-sign.livescript
354− captures:
355− 1: punctuation.definition.comment.livescript
356− embedded_spaced_comment:
357− - match: (?<!\\)(#\s).*$\n
358− scope: comment.line.number-sign.livescript
359− captures:
360− 1: punctuation.definition.comment.livescript
361− instance_variable:
362− - match: '(?<![$\w\-])(@)'
363− scope: variable.other.readwrite.instance.livescript
364− interpolated_livescript:
365− - match: '\#\{'
366− captures:
367− 0: punctuation.section.embedded.livescript
368− push:
369− - meta_scope: source.livescript.embedded.source
370− - match: '\}'
371− captures:
372− 0: punctuation.section.embedded.livescript
373− pop: true
374− - include: main
375− - match: '\#'
376− push:
377− - meta_scope: source.livescript.embedded.source.simple
378− - match: ""
379− pop: true
380− - include: main
381− numeric:
382− - match: '(?<![\$@a-zA-Z_])(([0-9]+r[0-9_]+)|((16r|0[xX])[0-9a-fA-F_]+)|([0-9]+(\.[0-9]+[0-9_]*)?(e[+\-]?[0-9_]+)?)[_a-zA-Z0-9]*)'
383− scope: constant.numeric.livescript
384− single_quoted_string:
385− - match: "'"
386− captures:
387− 0: punctuation.definition.string.begin.livescript
388− push:
389− - meta_scope: string.quoted.single.livescript
390− - match: "'"
391− captures:
392− 0: punctuation.definition.string.end.livescript
393− pop: true
394− - match: '\\(x[0-9A-Fa-f]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)'
395− scope: constant.character.escape.livescript
396− variable_name:
397− - match: '([a-zA-Z\$_][\w$-]*(\.\w+)*)(?!\-)'
398− scope: variable.assignment.livescript
399− captures:
400− 1: variable.assignment.livescript
assets/syntaxes/02_Extra/Manpage.sublime-syntax+26−144
@@ -7,165 +7,47 @@ file_extensions:
77scope: source.man
88
99variables:
10− section_heading: '^(?!#)\S.*$'
11− command_line_option: '(--?[A-Za-z0-9][_A-Za-z0-9-]*)'
10+ section_heading: '^\S.*$'
1211
1312contexts:
14− prototype:
15− # ignore syntax test lines
16− - match: '^#'
17− push:
18− - meta_scope: comment.syntax-test.man
19− - match: $\n?
20− pop: true
2113 main:
2214 - match: ^
2315 push: first_line
2416
2517 first_line:
26− - match: '([A-Z0-9_\-]+)(\()([^)]+)(\))\s*'
18+ - match: '([A-Z0-9_\-]+)(\()([^)]+)(\))'
2719 captures:
28− 1: meta.preprocessor.man
29− 2: keyword.operator.man
30− 3: string.quoted.other.man
31− 4: keyword.operator.man
32− push:
33− - match: (?:[\w'-]+|\s(?!\s))
34− scope: markup.heading.title.man
35− - match: \s\s
36− pop: true
37− - match: '(?=\S|$)'
38− pop: true
20+ 1: meta.preprocessor
21+ 2: keyword.operator
22+ 3: string.quoted.other
23+ 4: keyword.operator
3924
4025 - match: '$'
41− set: body
26+ push: body
4227
4328 body:
44− # English, ..., ..., ..., Russian, ...
45−
46− - match: '^(?:SYNOPSIS|SYNTAX|SINTASSI|SKŁADNIA|СИНТАКСИС|書式)'
47− scope: markup.heading.synopsis.man
48− embed: synopsis
49− escape: '(?={{section_heading}})'
50−
51− - match: '^(?:USAGE)'
52− scope: markup.heading.synopsis.man
53− embed: synopsis
54− escape: '(?={{section_heading}})'
55−
56− - match: '{{section_heading}}'
57− scope: markup.heading.other.man
58− embed: options # some man pages put command line options under the description heading
59− escape: '(?={{section_heading}})'
29+ - match: '^(SYNOPSIS|SYNTAX|SINTASSI|SKŁADNIA|СИНТАКСИС|書式)'
30+ push: Packages/C/C.sublime-syntax
31+ scope: markup.heading
32+ with_prototype:
33+ - match: '(?={{section_heading}})'
34+ pop: true
6035
61− function-call:
62− - match: '\b([A-Za-z0-9_\-]+\.)?([A-Za-z0-9_\-]+)(\()([^)]*)(\))'
63− captures:
64− 1: entity.name.function.man
65− 2: entity.name.function.man
66− 3: keyword.operator.man
67− 4: constant.numeric.man
68− 5: keyword.operator.man
36+ - match: '^\S.*$'
37+ scope: markup.heading
6938
70− env-var:
71− - match: '(\$)(?!\d)(\w+)\b'
39+ - match: '\b([A-Za-z0-9_\-]+)(\()([^)]*)(\))'
7240 captures:
73− 1: punctuation.definition.variable.man
74− 2: constant.other.man
41+ 1: entity.name.function
42+ 2: keyword.operator
43+ 3: constant.numeric
44+ 4: keyword.operator
7545
76− options:
7746 # command-line options like --option=value, --some-flag, or -x
78− - match: '^[ ]{7}(?=-)'
79− push: expect-command-line-option
80− - match: '(?:[^a-zA-Z0-9_-]|^|\s){{command_line_option}}'
81− captures:
82− 1: entity.name.command-line-option
83− push:
84− - match: '='
85− scope: keyword.operator.man
86− set:
87− - match: '[^],.() ]+'
88− scope: variable.parameter.man
89− pop: true
90− - match: $
91− pop: true
92− - match: ''
93− pop: true
94− - include: function-call
95− - include: c-code
96− - include: env-var
97−
98− expect-command-line-option:
99− - match: '[A-Za-z0-9-]+'
100− scope: entity.name.command-line-option.man
101− - match: '(\[)(=)'
102− captures:
103− 1: punctuation.section.brackets.begin.man
104− 2: keyword.operator.man
105− push: [command-line-option-or-pipe, expect-parameter]
106− - match: '\['
107− push:
108− - meta_scope: entity.name.command-line-option.man
109− - match: '\]'
110− pop: true
111− - match: '='
112− scope: keyword.operator.man
113− push: expect-parameter
114− - match: (?=.*\.)
115− pop: true
116− - match: '\s'
117− push: expect-parameter
118− - match: '(,)\s*'
119− captures:
120− 1: punctuation.separator.man
121− - match: $|(?=\])
122− pop: true
123−
124− expect-parameter:
125− - match: '[A-Za-z0-9-]+'
126− scope: variable.parameter.man
127− - match: (?=\s+\|)
128− pop: true
129− - match: \|
130− scope: keyword.operator.logical.man
131− - match: '\['
132− scope: punctuation.section.brackets.begin.man
133− push:
134− - match: '\]'
135− scope: punctuation.section.brackets.end.man
136− pop: true
137− - include: expect-parameter
138− - match: '$|(?=[],]|{{command_line_option}})'
139− pop: true
140−
141− c-code:
142− - match: '^(?=\s+(?:#include\b|#define\b|/\*|struct\s+(\w+\s*)?\{))'
143− embed: scope:source.c
144− #embed_scope: source.c.embedded.man
145− #escape: ^(?!#|\1|\s*(?:$|/\*|#include\b|#define\b))
146− escape: ^(?=\s*(?:\(.*\.\)\s*$|[A-Z](?![A-Z])))
147−
148− synopsis:
149− - include: c-code
150− - match: \[
151− scope: punctuation.section.brackets.begin.man
152− push: command-line-option-or-pipe
153− - include: options
154−
155− command-line-option-or-pipe:
156− - match: (\|)\s*
47+ - match: '(?:[^a-zA-Z0-9_-]|^|\s)(--?[A-Za-z0-9][A-Za-z0-9-]*)(?:(=)?("?)([A-Za-z0-9]+)("?))?'
15748 captures:
158− 1: keyword.operator.logical.man
159− #- match: (?={{command_line_option}})
160− - match: \w+-\w+
161− - match: (?=-)
162− push:
163− - match: (?=\s*\|)
164− pop: true
165− - include: expect-command-line-option
166− - match: \]
167− scope: punctuation.section.brackets.end.man
168− pop: true
169− - match: \[
170− scope: punctuation.section.brackets.begin.man
171− push: command-line-option-or-pipe
49+ 1: entity.name
50+ 2: keyword.operator
51+ 3: punctuation.definition.string.begin
52+ 4: variable.parameter
53+ 3: punctuation.definition.string.end
assets/syntaxes/02_Extra/MediaWikideleted−1

Submodule changed.

assets/syntaxes/02_Extra/Nginxdeleted−1

Submodule changed.

assets/syntaxes/02_Extra/Nim.sublime-syntax−1
@@ -5,7 +5,6 @@ name: Nim
55file_extensions:
66 - nim
77 - nims
8− - nimble
98scope: source.nim
109contexts:
1110 main:
assets/syntaxes/02_Extra/Ninjadeleted−1

Submodule changed.

assets/syntaxes/02_Extra/Ninja.sublime-syntaxdeleted−52
@@ -1,52 +0,0 @@
1−%YAML 1.2
2−---
3−# http://www.sublimetext.com/docs/3/syntax.html
4−name: Ninja
5−file_extensions:
6− - ninja
7−scope: source.ninja
8−contexts:
9− main:
10− - match: (#).*$\n?
11− comment: Comment line.
12− scope: comment.line.number-sign.ninja
13− captures:
14− 1: punctuation.definition.comment.ninja
15− - match: ^(rule)\b
16− comment: Rule keyword and keywords for a rule.
17− captures:
18− 1: keyword.other.ninja
19− push:
20− - match: ^(?=\S)
21− pop: true
22− - include: main
23− - match: \b(?:command|deps|depfile|description|generator|pool|restat|rspfile|rspfile_content)\b
24− scope: keyword.other.ninja
25− - match: ^(pool)\b
26− comment: Pool keyword and keywords for a pool.
27− captures:
28− 1: keyword.other.ninja
29− push:
30− - match: ^(?=\S)
31− pop: true
32− - include: main
33− - match: \b(?:depth)\b
34− scope: keyword.other.ninja
35− - match: ^(?:build|rule|default|include|subninja)\b
36− comment: Other Keywords.
37− scope: keyword.other.ninja
38− - match: '(?:[=:]|\|{1,2})(?=\s)'
39− comment: Operators for variable assignment (=), rule definition (:), implicit (|) and order only (||) dependencies.
40− scope: keyword.operator.ninja
41− - match: \$$
42− comment: Line wrap.
43− scope: keyword.operator.ninja
44− - match: \$\$
45− comment: Dollar literal.
46− scope: keyword.operator.ninja
47− - match: '\$[[:alnum:]_-]+'
48− comment: Simple variables, e.g. $var.
49− scope: variable.other.ninja
50− - match: '\${[[:alnum:]_.-]+}'
51− comment: "Variables, e.g. ${some.var.name}."
52− scope: variable.other.ninja
assets/syntaxes/02_Extra/PowerShell+1−1

Submodule changed.

assets/syntaxes/02_Extra/PowerShell.sublime-syntax+48−58
@@ -24,7 +24,7 @@ contexts:
2424 - include: commands
2525 - include: commentLine
2626 - include: variable
27− - include: subexpression
27+ - include: interpolatedStringContent
2828 - include: function
2929 - include: attribute
3030 - include: UsingDirective
@@ -33,38 +33,32 @@ contexts:
3333 - include: doubleQuotedString
3434 - include: scriptblock
3535 - include: doubleQuotedStringEscapes
36− - match: '[''\x{2018}-\x{201B}]'
36+ - match: (?<!')'
3737 captures:
3838 0: punctuation.definition.string.begin.powershell
3939 push:
4040 - meta_scope: string.quoted.single.powershell
41− - match: '[''\x{2018}-\x{201B}]{2}'
42− scope: constant.character.escape.powershell
43− - match: '[''\x{2018}-\x{201B}]'
41+ - match: "'(?!')"
4442 captures:
4543 0: punctuation.definition.string.end.powershell
4644 pop: true
47− - match: '(@["\x{201C}-\x{201E}])\s*$'
48− captures:
49− 1: punctuation.definition.string.begin.powershell
45+ - match: "''"
46+ scope: constant.character.escape.powershell
47+ - match: \@"(?=$)
5048 push:
5149 - meta_scope: string.quoted.double.heredoc.powershell
52− - match: '^["\x{201C}-\x{201E}]@'
53− captures:
54− 0: punctuation.definition.string.end.powershell
50+ - match: ^"@
5551 pop: true
5652 - include: variableNoProperty
5753 - include: doubleQuotedStringEscapes
5854 - include: interpolation
59− - match: '(@[''\x{2018}-\x{201B}])\s*$'
60− captures:
61− 1: punctuation.definition.string.begin.powershell
55+ - match: \@'(?=$)
6256 push:
6357 - meta_scope: string.quoted.single.heredoc.powershell
64− - match: '^[''\x{2018}-\x{201B}]@'
65− captures:
66− 0: punctuation.definition.string.end.powershell
58+ - match: ^'@
6759 pop: true
60+ - match: "''"
61+ scope: constant.character.escape.powershell
6862 - include: numericConstant
6963 - match: (@)(\()
7064 captures:
@@ -77,12 +71,11 @@ contexts:
7771 0: punctuation.section.group.end.powershell
7872 pop: true
7973 - include: main
80− - match: ((\$))(\()
74+ - match: (\$)(\()
8175 comment: "TODO: move to repo; make recursive."
8276 captures:
83− 1: keyword.other.substatement.powershell
84− 2: punctuation.definition.subexpression.powershell
85− 3: punctuation.section.group.begin.powershell
77+ 1: punctuation.definition.variable.powershell
78+ 2: punctuation.section.group.begin.powershell
8679 push:
8780 - meta_scope: meta.group.complex.subexpression.powershell
8881 - match: \)
@@ -92,7 +85,7 @@ contexts:
9285 - include: main
9386 - match: '(\b(([A-Za-z0-9\-_\.]+)\.(?i:exe|com|cmd|bat))\b)'
9487 scope: support.function.powershell
95− - match: (?<!\w|-|\.)((?i:begin|break|catch|clean|continue|data|default|define|do|dynamicparam|else|elseif|end|exit|finally|for|from|if|in|inlinescript|parallel|param|process|return|sequence|switch|throw|trap|try|until|var|while)|%|\?)(?!\w)
88+ - match: (?<!\w|-|\.)((?i:begin|break|catch|continue|data|default|define|do|dynamicparam|else|elseif|end|exit|finally|for|from|if|in|inlinescript|parallel|param|process|return|sequence|switch|throw|trap|try|until|var|while)|%|\?)(?!\w)
9689 scope: keyword.control.powershell
9790 - match: '(?<!\w|-|[^\)]\.)((?i:(foreach|where)(?!-object))|%|\?)(?!\w)'
9891 scope: keyword.control.powershell
@@ -142,7 +135,7 @@ contexts:
142135 - meta_scope: meta.requires.powershell
143136 - match: $
144137 pop: true
145− - match: \-(?i:Modules|PSSnapin|RunAsAdministrator|ShellId|Version|Assembly|PSEdition)
138+ - match: \-(?i:Modules|PSSnapin|RunAsAdministrator|ShellId|Version)
146139 scope: keyword.other.powershell
147140 - match: '(?<!-)\b\p{L}+|\d+(?:\.\d+)*'
148141 scope: variable.parameter.powershell
@@ -194,53 +187,51 @@ contexts:
194187 comment: Builtin cmdlets with reserved verbs
195188 scope: support.function.powershell
196189 commentEmbeddedDocs:
197− - match: (?:^|\G)(?i:\s*(\.)(COMPONENT|DESCRIPTION|EXAMPLE|FUNCTIONALITY|INPUTS|LINK|NOTES|OUTPUTS|ROLE|SYNOPSIS))\s*$
198− comment: these embedded doc keywords do not support arguments, must be the only thing on the line
190+ - match: ^(?i:(?:\s?|#)+(\.)(COMPONENT|DESCRIPTION|EXAMPLE|EXTERNALHELP|FORWARDHELPCATEGORY|FORWARDHELPTARGETNAME|FUNCTIONALITY|INPUTS|LINK|NOTES|OUTPUTS|REMOTEHELPRUNSPACE|ROLE|SYNOPSIS))
199191 scope: comment.documentation.embedded.powershell
200192 captures:
201193 1: constant.string.documentation.powershell
202194 2: keyword.operator.documentation.powershell
203− - match: (?:^|\G)(?i:\s*(\.)(EXTERNALHELP|FORWARDHELP(?:CATEGORY|TARGETNAME)|PARAMETER|REMOTEHELPRUNSPACE))\s+(.+?)\s*$
204− comment: these embedded doc keywords require arguments though the type required may be inconsistent, they may not all be able to use the same argument match
195+ - match: '(?i:\s?(\.)(PARAMETER|FORWARDHELPTARGETNAME|FORWARDHELPCATEGORY|REMOTEHELPRUNSPACE|EXTERNALHELP)\s+([a-z0-9-_]+))'
205196 scope: comment.documentation.embedded.powershell
206197 captures:
207198 1: constant.string.documentation.powershell
208199 2: keyword.operator.documentation.powershell
209200 3: keyword.operator.documentation.powershell
210201 commentLine:
211− - match: '(?<![`\\-])(#)#*'
202+ - match: '(?<![`\\-])#'
212203 captures:
213− 1: punctuation.definition.comment.powershell
204+ 0: punctuation.definition.comment.powershell
214205 push:
215206 - meta_scope: comment.line.powershell
216207 - match: $\n?
217208 captures:
218− 1: punctuation.definition.comment.powershell
209+ 0: punctuation.definition.comment.powershell
219210 pop: true
220211 - include: commentEmbeddedDocs
221212 - include: RequiresDirective
222213 doubleQuotedString:
223− - match: '["\x{201C}-\x{201E}]'
214+ - match: (?<!(?<!`)")"
224215 captures:
225216 0: punctuation.definition.string.begin.powershell
226217 push:
227218 - meta_scope: string.quoted.double.powershell
219+ - match: '"(?!")'
220+ captures:
221+ 0: punctuation.definition.string.end.powershell
222+ pop: true
228223 - match: '(?i)\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,64}\b'
229224 - include: variableNoProperty
230225 - include: doubleQuotedStringEscapes
231− - match: '["\x{201C}-\x{201E}]{2}'
232− scope: constant.character.escape.powershell
233226 - include: interpolation
234227 - match: '`\s*$'
235228 scope: keyword.other.powershell
236− - match: '["\x{201C}-\x{201E}]'
237− captures:
238− 0: punctuation.definition.string.end.powershell
239− pop: true
240229 doubleQuotedStringEscapes:
241− - match: '`[`0abefnrtv''"\x{2018}-\x{201E}$]'
230+ - match: '`[`0abefnrtv"''$]'
242231 scope: constant.character.escape.powershell
243232 - include: unicodeEscape
233+ - match: '""'
234+ scope: constant.character.escape.powershell
244235 function:
245236 - match: '^(?:\s*+)(?i)(function|filter|configuration|workflow)\s+(?:(global|local|script|private):)?((?:\p{L}|\d|_|-|\.)+)'
246237 captures:
@@ -272,23 +263,33 @@ contexts:
272263 4: keyword.operator.assignment.powershell
273264 - include: scriptblock
274265 - include: main
266+ interpolatedStringContent:
267+ - match: \(
268+ captures:
269+ 0: punctuation.section.group.begin.powershell
270+ push:
271+ - meta_content_scope: interpolated.simple.source.powershell
272+ - match: \)
273+ captures:
274+ 0: punctuation.section.group.end.powershell
275+ pop: true
276+ - include: main
277+ - include: interpolation
278+ - include: interpolatedStringContent
275279 interpolation:
276− - match: (((\$)))((\())
280+ - match: (\$)(\()
277281 captures:
278− 1: keyword.other.substatement.powershell
279− 2: punctuation.definition.substatement.powershell
280− 3: punctuation.section.embedded.substatement.begin.powershell
281− 4: punctuation.section.group.begin.powershell
282− 5: punctuation.section.embedded.substatement.begin.powershell
282+ 1: punctuation.definition.variable.powershell
283+ 2: punctuation.section.group.begin.powershell
283284 push:
284− - meta_scope: meta.embedded.substatement.powershell
285285 - meta_content_scope: interpolated.complex.source.powershell
286− - match: (\))
286+ - match: \)
287287 captures:
288288 0: punctuation.section.group.end.powershell
289− 1: punctuation.section.embedded.substatement.end.powershell
290289 pop: true
291290 - include: main
291+ - include: interpolation
292+ - include: interpolatedStringContent
292293 numericConstant:
293294 - match: '(?<!\w)([-+]?0(?:x|X)[0-9a-fA-F_]+(?:U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?)((?i:[kmgtp]b)?)\b'
294295 captures:
@@ -329,17 +330,6 @@ contexts:
329330 0: punctuation.section.braces.end.powershell
330331 pop: true
331332 - include: main
332− subexpression:
333− - match: \(
334− captures:
335− 0: punctuation.section.group.begin.powershell
336− push:
337− - meta_scope: meta.group.simple.subexpression.powershell
338− - match: \)
339− captures:
340− 0: punctuation.section.group.end.powershell
341− pop: true
342− - include: main
343333 type:
344334 - match: '\['
345335 captures:
assets/syntaxes/02_Extra/Racketdeleted−1

Submodule changed.

assets/syntaxes/02_Extra/Racket.sublime-syntaxdeleted−52
@@ -1,52 +0,0 @@
1−%YAML 1.2
2−---
3−# http://www.sublimetext.com/docs/3/syntax.html
4−name: Racket
5−file_extensions:
6− - rkt
7−scope: source.racket
8−contexts:
9− main:
10− - match: '[^\\](\"[^\"]*\")'
11− captures:
12− 1: string.quoted.double.source.racket
13− - match: '\((define)\s+([a-zA-Z0-9_\-?\+^]+)\s*'
14− scope: meta.variable.source.racket
15− captures:
16− 1: keyword.source.racket
17− 2: entity.name.variable.source.racket
18− - match: '\((define)\s+\(([a-zA-Z0-9_\-?\+^]+)\s*'
19− scope: meta.function.source.racket
20− captures:
21− 1: keyword.source.racket
22− 2: entity.name.function
23− - match: '\((struct)\s+([a-zA-Z0-9_\-?\+^]+)\s+'
24− scope: meta.struct.source.racket
25− captures:
26− 1: keyword.source.racket
27− 2: entity.name.type
28− - match: '[\s\(](if|lambda|cond|define|type-case|let|letrec|let!|\#lang|require|test|else|first|rest|define-type|define-type-alias|define-struct|not|local|error|lang)[\s\)]'
29− scope: meta.keywords.source.racket
30− captures:
31− 1: keyword.source.racket
32− - match: '[\s\(](true|false|empty|null)[\s\)]'
33− captures:
34− 1: constant.language.source.racket
35− - match: '[\s\(\[\{](#t|#true|#f|#false)[\s\)\]\}]'
36− captures:
37− 1: constant.language.source.racket
38− - match: '(#\\[a-zA-Z0-9_\-?\+\.\!\"]+)'
39− captures:
40− 1: constant.language.source.racket
41− - match: '\b(0|([1-9][0-9_]*))\b'
42− scope: constant.numeric.integer.source.racket
43− - match: ;
44− push:
45− - meta_scope: comment.line.documentation.source.racket
46− - match: $\n
47− pop: true
48− - match: '#\|'
49− push:
50− - meta_scope: comment.block.source.racket
51− - match: '\|#'
52− pop: true
assets/syntaxes/02_Extra/Robot.sublime-syntax+1−2
@@ -1,10 +1,9 @@
11%YAML 1.2
22---
33# http://www.sublimetext.com/docs/3/syntax.html
4−name: Robot Framework
4+name: Robot Framework syntax highlighting.
55file_extensions:
66 - robot
7− - resource
87scope: source.robot
98contexts:
109 main:
assets/syntaxes/02_Extra/SCSS_Sass+1−1

Submodule changed.

assets/syntaxes/02_Extra/Slimdeleted−1

Submodule changed.

assets/syntaxes/02_Extra/Slim.sublime-syntaxdeleted−306
@@ -1,306 +0,0 @@
1−%YAML 1.2
2−---
3−# http://www.sublimetext.com/docs/syntax.html
4−name: Ruby Slim
5−file_extensions:
6− - slim
7− - skim
8−scope: text.slim
9−contexts:
10− main:
11− - match: ^(\s*)(ruby):$
12− captures:
13− 2: constant.language.name.ruby.filter.slim
14− push:
15− - meta_scope: text.ruby.filter.slim
16− - match: ^(?!(\1\s)|\s*$)
17− pop: true
18− - include: scope:source.ruby
19− - match: ^(\s*)(javascript):$
20− captures:
21− 2: constant.language.name.javascript.filter.slim
22− push:
23− - meta_scope: source.js.filter.slim
24− - match: ^(?!(\1\s)|\s*$)
25− pop: true
26− - include: scope:source.js
27− - match: ^(---)\s*\n
28− captures:
29− 1: storage.frontmatter.slim
30− push:
31− - meta_scope: source.yaml.meta.slim
32− - match: ^(---)\s*\n
33− captures:
34− 1: storage.frontmatter.slim
35− pop: true
36− - include: scope:source.yaml
37− - match: ^(\s*)(coffee):$
38− captures:
39− 2: constant.language.name.coffeescript.filter.slim
40− push:
41− - meta_scope: text.coffeescript.filter.slim
42− - match: ^(?!(\1\s)|\s*$)
43− pop: true
44− - include: scope:source.coffee
45− - match: ^(\s*)(markdown):$
46− captures:
47− 2: constant.language.name.markdown.filter.slim
48− push:
49− - meta_scope: text.markdown.filter.slim
50− - match: ^(?!(\1\s)|\s*$)
51− pop: true
52− - include: scope:text.html.markdown
53− - match: ^(\s*)(css):$
54− captures:
55− 2: constant.language.name.css.filter.slim
56− push:
57− - meta_scope: text.css.filter.slim
58− - match: ^(?!(\1\s)|\s*$)
59− pop: true
60− - include: scope:source.css
61− - match: ^(\s*)(sass):$
62− captures:
63− 2: constant.language.name.sass.filter.slim
64− push:
65− - meta_scope: text.sass.filter.slim
66− - match: ^(?!(\1\s)|\s*$)
67− pop: true
68− - include: scope:source.sass
69− - match: ^(\s*)(scss):$
70− captures:
71− 2: constant.language.name.scss.filter.slim
72− push:
73− - meta_scope: text.scss.filter.slim
74− - match: ^(?!(\1\s)|\s*$)
75− pop: true
76− - include: scope:source.scss
77− - match: ^(\s*)(less):$
78− captures:
79− 2: constant.language.name.less.filter.slim
80− push:
81− - meta_scope: text.less.filter.slim
82− - match: ^(?!(\1\s)|\s*$)
83− pop: true
84− - include: scope:source.less
85− - match: ^(\s*)(erb):$
86− captures:
87− 2: constant.language.name.erb.filter.slim
88− push:
89− - meta_scope: text.erb.filter.slim
90− - match: ^(?!(\1\s)|\s*$)
91− pop: true
92− - include: scope:source.erb
93− - match: ^(! )($|\s.*)
94− scope: meta.prolog.slim
95− captures:
96− 1: punctuation.definition.prolog.slim
97− - match: ^(\s*)(/)\s*.*$
98− captures:
99− 2: comment.line.slash.slim
100− push:
101− - meta_scope: comment.block.slim
102− - match: ^(?!(\1\s)|\s*$)
103− pop: true
104− - match: ^\s*(?=-)
105− push:
106− - match: $
107− pop: true
108− - include: rubyline
109− - match: (?==+|~)
110− push:
111− - match: $
112− pop: true
113− - include: rubyline
114− - include: tag-attribute
115− - include: embedded-ruby
116− - match: ^(\s*)(\||')\s*
117− comment: Verbatim text (can include HTML tags and copied lines)
118− push:
119− - match: ^(?!(\1\s)|\s*$)
120− pop: true
121− - include: scope:text.html.basic
122− - include: embedded-ruby
123− - match: '^\s*(\.|#|[-a-zA-Z0-9]+)([\w-]+)?'
124− comment: '1 - dot OR hash OR any combination of word, number; 2 - OPTIONAL any combination of word, number, dash or underscore (following a . or'
125− captures:
126− 1: entity.name.tag.slim
127− 2: entity.other.attribute-name.event.slim
128− push:
129− - meta_scope: meta.tag
130− - match: '$|(?!\.|#|:|-|~|/|\}|\]|\*|\s?[\*\{])'
131− captures:
132− 1: entity.name.tag.slim
133− 2: entity.other.attribute-name.event.slim
134− pop: true
135− - match: '(:[\w\d]+)+'
136− comment: XML
137− push:
138− - meta_scope: entity.name.tag.slim
139− - match: $|\s
140− pop: true
141− - match: '(:\s)(\.|#|[a-zA-Z0-9]+)([\w-]+)?'
142− comment: Inline HTML / 1 - colon; 2 - dot OR hash OR any combination of word, number; 3 - OPTIONAL any combination of word, number, dash or underscore (following a . or
143− captures:
144− 1: punctuation.definition.tag.end.slim
145− 2: entity.name.tag.slim
146− 3: entity.other.attribute-name.event.slim
147− push:
148− - match: '$|(?!\.|#|=|-|~|/|\}|\]|\*|\s?[\*\{])'
149− captures:
150− 1: punctuation.definition.tag.end.slim
151− 2: entity.name.tag.slim
152− 3: entity.other.attribute-name.event.slim
153− pop: true
154− - include: root-class-id-tag
155− - include: tag-attribute
156− - match: '(\*\{)(?=.*\}|.*\|\s*$)'
157− comment: Splat attributes
158− captures:
159− 1: punctuation.section.embedded.ruby
160− push:
161− - meta_scope: source.ruby.embedded.slim
162− - match: '(\})|$|^(?!.*\|\s*$)'
163− captures:
164− 1: punctuation.section.embedded.ruby
165− pop: true
166− - include: embedded-ruby
167− - include: root-class-id-tag
168− - include: rubyline
169− - match: /
170− scope: punctuation.terminator.tag.slim
171− - match: ^\s*(\\.)
172− captures:
173− 1: meta.escape.slim
174− - match: ^\s*(?=\||')
175− push:
176− - match: $
177− pop: true
178− - include: embedded-ruby
179− - include: scope:text.html.basic
180− - match: '(?=<[\w\d\:]+)'
181− comment: Inline and root-level HTML tags
182− push:
183− - match: $|\/\>
184− pop: true
185− - include: scope:text.html.basic
186− continuation:
187− - match: '([\\,])\s*\n'
188− captures:
189− 1: punctuation.separator.continuation.slim
190− delimited-ruby-a:
191− - match: '=\('
192− push:
193− - meta_scope: source.ruby.embedded.slim
194− - match: \)(?=( \w|$))
195− pop: true
196− - include: scope:source.ruby.rails
197− delimited-ruby-b:
198− - match: '=\['
199− push:
200− - meta_scope: source.ruby.embedded.slim
201− - match: '\](?=( \w|$))'
202− pop: true
203− - include: scope:source.ruby.rails
204− delimited-ruby-c:
205− - match: '=\{'
206− push:
207− - meta_scope: source.ruby.embedded.slim
208− - match: '\}(?=( \w|$))'
209− pop: true
210− - include: scope:source.ruby.rails
211− embedded-ruby:
212− - match: '(?<!\\)#\{{1,2}'
213− captures:
214− 0: punctuation.section.embedded.ruby
215− push:
216− - meta_scope: source.ruby.embedded.html
217− - match: '\}{1,2}'
218− captures:
219− 0: punctuation.section.embedded.ruby
220− pop: true
221− - include: scope:source.ruby.rails
222− entities:
223− - match: '(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)'
224− scope: constant.character.entity.html
225− captures:
226− 1: punctuation.definition.entity.html
227− 3: punctuation.definition.entity.html
228− - match: '&'
229− scope: invalid.illegal.bad-ampersand.html
230− interpolated-ruby:
231− - match: '=(?=\b)'
232− push:
233− - meta_scope: source.ruby.embedded.html
234− - match: \s|\w$
235− pop: true
236− root-class-id-tag:
237− - match: '(\.|#)([\w\d\-]+)'
238− captures:
239− 1: punctuation.separator.key-value.html
240− 2: entity.other.attribute-name.html
241− rubyline:
242− - match: (==|=)(<>|><|<'|'<|<|>)?|-
243− comment: Hack to thwart Sublime's Ruby highlighter. It thinks do without a variable continues the next line (this can be muted with a / at the end of the line). For things like yields, do is unnecessary without an argument, so this hack will suffice
244− push:
245− - meta_scope: meta.line.ruby.slim
246− - meta_content_scope: source.ruby.embedded.slim
247− - match: (do\s*\n$)|(?<!\\|,|,\n|\\\n)$
248− captures:
249− 1: keyword.control.start-block.ruby
250− pop: true
251− - match: '#.*$'
252− comment: Hack to let ruby comments work in this context properly
253− scope: comment.line.number-sign.ruby
254− - include: continuation
255− - include: scope:source.ruby.rails
256− string-double-quoted:
257− - match: (")(?=.*")
258− captures:
259− 0: punctuation.definition.string.begin.html
260− push:
261− - meta_scope: string.quoted.double.html
262− - meta_content_scope: meta.toc-list.id.html
263− - match: '"'
264− captures:
265− 0: punctuation.definition.string.end.html
266− pop: true
267− - include: embedded-ruby
268− - include: entities
269− string-single-quoted:
270− - match: (')(?=.*')
271− captures:
272− 0: punctuation.definition.string.begin.html
273− push:
274− - meta_scope: string.quoted.single.html
275− - meta_content_scope: meta.toc-list.id.html
276− - match: "'"
277− captures:
278− 0: punctuation.definition.string.end.html
279− pop: true
280− - include: embedded-ruby
281− - include: entities
282− tag-attribute:
283− - match: '([\w.#_-]+)(=)(?!\s)(true|false|nil)?(\s*\(|\{)?'
284− captures:
285− 1: entity.other.attribute-name.event.slim
286− 2: punctuation.separator.key-value.html
287− 3: constant.language.slim
288− push:
289− - meta_scope: meta.attribute-with-value.slim
290− - match: '\}|\)|$'
291− captures:
292− 1: entity.other.attribute-name.event.slim
293− 2: punctuation.separator.key-value.html
294− 3: constant.language.slim
295− pop: true
296− - include: tag-stuff
297− - include: string-double-quoted
298− - include: string-single-quoted
299− tag-stuff:
300− - include: tag-attribute
301− - include: interpolated-ruby
302− - include: delimited-ruby-a
303− - include: delimited-ruby-b
304− - include: delimited-ruby-c
305− - include: rubyline
306− - include: embedded-ruby
assets/syntaxes/02_Extra/Stylus.sublime-syntax+2−2
@@ -197,7 +197,7 @@ contexts:
197197 scope: entity.other.attribute-name.stylus
198198 - match: |-
199199 (?x) # multi-line regex definition mode
200− (?<=^|;|{)\s* # starts after beginning of line, '{' or ';''
200+ (?<=^|;|{)\s* # starts after begining of line, '{' or ';''
201201 (?= # lookahead for
202202 (
203203 [a-zA-Z0-9_-] # then a letter
@@ -207,7 +207,7 @@ contexts:
207207 (/\*.*?\*/) # comment
208208 )+
209209
210− \s*[:\s]\s* # value is separated by colon or space
210+ \s*[:\s]\s* # value is separted by colon or space
211211
212212 (?!(\s*\{)) # if there are only spaces afterwards
213213
assets/syntaxes/02_Extra/SublimeEthereumdeleted−1

Submodule changed.

assets/syntaxes/02_Extra/SublimeJQdeleted−1

Submodule changed.

assets/syntaxes/02_Extra/Sveltedeleted−1

Submodule changed.

assets/syntaxes/02_Extra/Syslognew file+1

Submodule changed.

assets/syntaxes/02_Extra/SystemVerilogdeleted−1

Submodule changed.

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

Submodule changed.

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

Submodule changed.

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

Submodule changed.

assets/syntaxes/02_Extra/TypeScript.sublime-syntax+148−213
@@ -44,7 +44,7 @@ contexts:
4444 - match: (?=$)
4545 pop: true
4646 access-modifier:
47− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(abstract|declare|override|public|protected|private|readonly|static)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
47+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(abstract|public|protected|private|readonly|static|declare)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
4848 scope: storage.modifier.ts
4949 after-operator-block-as-object-literal:
5050 - match: '(?<!\+\+|--)(?<=[:=(,\[?+!>]|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^yield|[^\._$[:alnum:]]yield|^throw|[^\._$[:alnum:]]throw|^in|[^\._$[:alnum:]]in|^of|[^\._$[:alnum:]]of|^typeof|[^\._$[:alnum:]]typeof|&&|\|\||\*)\s*(\{)'
@@ -106,7 +106,7 @@ contexts:
106106 (?=
107107 # sure shot arrow functions even if => is on new line
108108 (
109− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
109+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
110110 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
111111 (
112112 ([)]\s*:) | # ():
@@ -116,9 +116,9 @@ contexts:
116116
117117 # arrow function possible to detect only with => on same line
118118 (
119− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
120− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
121− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
119+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
120+ \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
121+ (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
122122 \s*=> # arrow operator
123123 )
124124 )
@@ -268,7 +268,7 @@ contexts:
268268 - include: decorator
269269 - match: (?<=:)\s*
270270 push:
271− - match: '(?=\s|[;),}\]:\-\+]|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
271+ - match: '(?=\s|[;),}\]:\-\+]|;|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
272272 pop: true
273273 - include: expression
274274 - include: method-declaration
@@ -317,12 +317,7 @@ contexts:
317317 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(break|continue|do|goto|while)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
318318 scope: keyword.control.loop.ts
319319 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(return)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
320− captures:
321− 0: keyword.control.flow.ts
322− push:
323− - match: '(?=[;}]|$|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
324− pop: true
325− - include: expression
320+ scope: keyword.control.flow.ts
326321 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(case|default|switch)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
327322 scope: keyword.control.switch.ts
328323 - include: if-statement
@@ -767,7 +762,7 @@ contexts:
767762 4: keyword.control.default.ts
768763 push:
769764 - meta_scope: meta.export.default.ts
770− - match: (?=$|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))
765+ - match: (?=$|;|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))
771766 pop: true
772767 - include: interface-declaration
773768 - include: expression
@@ -777,7 +772,7 @@ contexts:
777772 2: keyword.control.type.ts
778773 push:
779774 - meta_scope: meta.export.ts
780− - match: (?=$|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))
775+ - match: (?=$|;|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))
781776 pop: true
782777 - include: import-export-declaration
783778 expression:
@@ -790,11 +785,11 @@ contexts:
790785 - include: string
791786 - include: decorator
792787 - include: destructuring-parameter
793− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|protected|private|readonly)\s+(?=(override|public|protected|private|readonly)\s+)'
788+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|protected|private|readonly)\s+(?=(public|protected|private|readonly)\s+)'
794789 captures:
795790 1: storage.modifier.ts
796791 - match: |-
797− (?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*
792+ (?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*
798793 # function assignment |
799794 (=\s*(
800795 ((async\s+)?(
@@ -803,10 +798,10 @@ contexts:
803798 ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
804799 )) |
805800 ((async\s*)?(
806− ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
801+ ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
807802 # sure shot arrow functions even if => is on new line
808803 (
809− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
804+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
810805 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
811806 (
812807 ([)]\s*:) | # ():
@@ -816,9 +811,9 @@ contexts:
816811
817812 # arrow function possible to detect only with => on same line
818813 (
819− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
820− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
821− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
814+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
815+ \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
816+ (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
822817 \s*=> # arrow operator
823818 )
824819 ))
@@ -836,18 +831,18 @@ contexts:
836831 ))
837832 )) |
838833 (:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
839− (:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
840− (:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
834+ (:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
835+ (:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
841836 ((async\s+)?(
842837 (function\s*[(<*]) |
843838 (function\s+) |
844839 ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
845840 )) |
846841 ((async\s*)?(
847− ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
842+ ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
848843 # sure shot arrow functions even if => is on new line
849844 (
850− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
845+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
851846 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
852847 (
853848 ([)]\s*:) | # ():
@@ -857,9 +852,9 @@ contexts:
857852
858853 # arrow function possible to detect only with => on same line
859854 (
860− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
861− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
862− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
855+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
856+ \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
857+ (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
863858 \s*=> # arrow operator
864859 )
865860 ))
@@ -870,7 +865,7 @@ contexts:
870865 3: entity.name.function.ts variable.language.this.ts
871866 4: entity.name.function.ts
872867 5: keyword.operator.optional.ts
873− - match: '(?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*[:,]|$)'
868+ - match: '(?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*[:,]|$)'
874869 captures:
875870 1: storage.modifier.ts
876871 2: keyword.operator.rest.ts
@@ -935,11 +930,10 @@ contexts:
935930 scope: keyword.operator.comparison.ts
936931 - match: <=|>=|<>|<|>
937932 scope: keyword.operator.relational.ts
938− - match: '(?<=[_$[:alnum:]])(\!)\s*(?:(/=)|(?:(/)(?![/*])))'
933+ - match: '(?<=[_$[:alnum:]])(\!)\s*(/)(?![/*])'
939934 captures:
940935 1: keyword.operator.logical.ts
941− 2: keyword.operator.assignment.compound.ts
942− 3: keyword.operator.arithmetic.ts
936+ 2: keyword.operator.arithmetic.ts
943937 - match: \!|&&|\|\||\?\?
944938 scope: keyword.operator.logical.ts
945939 - match: \&|~|\^|\|
@@ -952,18 +946,16 @@ contexts:
952946 scope: keyword.operator.increment.ts
953947 - match: '%|\*|/|-|\+'
954948 scope: keyword.operator.arithmetic.ts
955− - match: '(?<=[_$[:alnum:])\]])\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)+(?:(/=)|(?:(/)(?![/*]))))'
949+ - match: '(?<=[_$[:alnum:])\]])\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)+(/)(?![/*]))'
956950 push:
957− - match: '(?:(/=)|(?:(/)(?!\*([^\*]|(\*[^\/]))*\*\/)))'
951+ - match: '(/)(?!\*([^\*]|(\*[^\/]))*\*\/)'
958952 captures:
959− 1: keyword.operator.assignment.compound.ts
960− 2: keyword.operator.arithmetic.ts
953+ 1: keyword.operator.arithmetic.ts
961954 pop: true
962955 - include: comment
963− - match: '(?<=[_$[:alnum:])\]])\s*(?:(/=)|(?:(/)(?![/*])))'
956+ - match: '(?<=[_$[:alnum:])\]])\s*(/)(?![/*])'
964957 captures:
965− 1: keyword.operator.assignment.compound.ts
966− 2: keyword.operator.arithmetic.ts
958+ 1: keyword.operator.arithmetic.ts
967959 expressionPunctuations:
968960 - include: punctuation-comma
969961 - include: punctuation-accessor
@@ -1029,10 +1021,10 @@ contexts:
10291021 ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
10301022 )) |
10311023 ((async\s*)?(
1032− ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
1024+ ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
10331025 # sure shot arrow functions even if => is on new line
10341026 (
1035− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
1027+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
10361028 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
10371029 (
10381030 ([)]\s*:) | # ():
@@ -1042,9 +1034,9 @@ contexts:
10421034
10431035 # arrow function possible to detect only with => on same line
10441036 (
1045− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
1046− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
1047− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
1037+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
1038+ \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
1039+ (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
10481040 \s*=> # arrow operator
10491041 )
10501042 ))
@@ -1062,18 +1054,18 @@ contexts:
10621054 ))
10631055 )) |
10641056 (:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
1065− (:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
1066− (:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
1057+ (:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
1058+ (:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
10671059 ((async\s+)?(
10681060 (function\s*[(<*]) |
10691061 (function\s+) |
10701062 ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
10711063 )) |
10721064 ((async\s*)?(
1073− ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
1065+ ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
10741066 # sure shot arrow functions even if => is on new line
10751067 (
1076− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
1068+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
10771069 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
10781070 (
10791071 ([)]\s*:) | # ():
@@ -1083,9 +1075,9 @@ contexts:
10831075
10841076 # arrow function possible to detect only with => on same line
10851077 (
1086− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
1087− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
1088− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
1078+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
1079+ \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
1080+ (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
10891081 \s*=> # arrow operator
10901082 )
10911083 ))
@@ -1126,19 +1118,18 @@ contexts:
11261118 - include: type-parameters
11271119 - include: function-parameters
11281120 - include: return-type
1129− - include: type-function-return-type
11301121 - include: decl-block
11311122 - match: \*
11321123 scope: keyword.generator.asterisk.ts
11331124 function-call:
1134− - match: '(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\)]))\s*(?:(\?\.\s*)|(\!))?((<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?\())'
1125+ - match: '(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\)]))\s*(?:(\?\.\s*)|(\!))?((<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?\())'
11351126 push:
1136− - match: '(?<=\))(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\)]))\s*(?:(\?\.\s*)|(\!))?((<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?\())'
1127+ - match: '(?<=\))(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\)]))\s*(?:(\?\.\s*)|(\!))?((<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?\())'
11371128 pop: true
11381129 - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))'
11391130 push:
11401131 - meta_scope: meta.function-call.ts
1141− - match: '(?=\s*(?:(\?\.\s*)|(\!))?((<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?\())'
1132+ - match: '(?=\s*(?:(\?\.\s*)|(\!))?((<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?\())'
11421133 pop: true
11431134 - include: function-call-target
11441135 - include: comment
@@ -1178,7 +1169,7 @@ contexts:
11781169 6: meta.definition.function.ts entity.name.function.ts
11791170 push:
11801171 - meta_scope: meta.function.ts
1181− - match: '(?=;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))|(?<=\})'
1172+ - match: '(?=;|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))|(?<=\})'
11821173 pop: true
11831174 - include: function-name
11841175 - include: function-body
@@ -1230,10 +1221,10 @@ contexts:
12301221 ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
12311222 )) |
12321223 ((async\s*)?(
1233− ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
1224+ ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
12341225 # sure shot arrow functions even if => is on new line
12351226 (
1236− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
1227+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
12371228 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
12381229 (
12391230 ([)]\s*:) | # ():
@@ -1243,9 +1234,9 @@ contexts:
12431234
12441235 # arrow function possible to detect only with => on same line
12451236 (
1246− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
1247− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
1248− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
1237+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
1238+ \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
1239+ (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
12491240 \s*=> # arrow operator
12501241 )
12511242 ))
@@ -1269,7 +1260,7 @@ contexts:
12691260 - match: "[_$[:alpha:]][_$[:alnum:]]*"
12701261 scope: variable.other.readwrite.ts
12711262 if-statement:
1272− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?=\bif\s*(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))\s*(?!\{))'
1263+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?=\bif\s*(\(([^\(\)]|(\([^\(\)]*\)))*\))\s*(?!\{))'
12731264 push:
12741265 - match: '(?=;|$|\})'
12751266 pop: true
@@ -1284,12 +1275,12 @@ contexts:
12841275 0: meta.brace.round.ts
12851276 pop: true
12861277 - include: expression
1287− - match: '(?<=\))\s*\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([dgimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))'
1278+ - match: '(?<=\))\s*\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/([gimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))'
12881279 captures:
12891280 0: punctuation.definition.string.begin.ts
12901281 push:
12911282 - meta_scope: string.regexp.ts
1292− - match: "(/)([dgimsuy]*)"
1283+ - match: "(/)([gimsuy]*)"
12931284 captures:
12941285 1: punctuation.definition.string.end.ts
12951286 2: keyword.other.ts
@@ -1423,9 +1414,6 @@ contexts:
14231414 2: keyword.operator.type.modifier.ts
14241415 3: keyword.operator.optional.ts
14251416 pop: true
1426− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as)\s+'
1427− captures:
1428− 1: keyword.control.as.ts
14291417 - include: type
14301418 inline-tags:
14311419 - match: '(\[)[^\]]+(\])(?={@(?:link|linkcode|linkplain|tutorial))'
@@ -1516,27 +1504,25 @@ contexts:
15161504 - include: this-literal
15171505 - include: super-literal
15181506 method-declaration:
1519− - match: '(?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?\s*\b(constructor)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
1507+ - match: '(?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?\s*\b(constructor)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
15201508 captures:
15211509 1: storage.modifier.ts
15221510 2: storage.modifier.ts
1523− 3: storage.modifier.ts
1524− 4: storage.modifier.async.ts
1525− 5: storage.type.ts
1511+ 3: storage.modifier.async.ts
1512+ 4: storage.type.ts
15261513 push:
15271514 - meta_scope: meta.method.declaration.ts
15281515 - match: '(?=\}|;|,|$)|(?<=\})'
15291516 pop: true
15301517 - include: method-declaration-name
15311518 - include: function-body
1532− - match: '(?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:(?:\s*\b(new)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|(?:(\*)\s*)?)(?=\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(])'
1519+ - match: '(?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:(?:\s*\b(new)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|(?:(\*)\s*)?)(?=\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(])'
15331520 captures:
15341521 1: storage.modifier.ts
15351522 2: storage.modifier.ts
1536− 3: storage.modifier.ts
1537− 4: storage.modifier.async.ts
1538− 5: keyword.operator.new.ts
1539− 6: keyword.generator.asterisk.ts
1523+ 3: storage.modifier.async.ts
1524+ 4: keyword.operator.new.ts
1525+ 5: keyword.generator.asterisk.ts
15401526 push:
15411527 - meta_scope: meta.method.declaration.ts
15421528 - match: '(?=\}|;|,|$)|(?<=\})'
@@ -1544,7 +1530,7 @@ contexts:
15441530 - include: method-declaration-name
15451531 - include: function-body
15461532 - match: |-
1547− (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?:
1533+ (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?:
15481534 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
15491535 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
15501536 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
@@ -1553,14 +1539,13 @@ contexts:
15531539 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
15541540 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
15551541 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1556− )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(])
1542+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(])
15571543 captures:
15581544 1: storage.modifier.ts
15591545 2: storage.modifier.ts
1560− 3: storage.modifier.ts
1561− 4: storage.modifier.async.ts
1562− 5: storage.type.property.ts
1563− 6: keyword.generator.asterisk.ts
1546+ 3: storage.modifier.async.ts
1547+ 4: storage.type.property.ts
1548+ 5: keyword.generator.asterisk.ts
15641549 push:
15651550 - meta_scope: meta.method.declaration.ts
15661551 - match: '(?=\}|;|,|$)|(?<=\})'
@@ -1597,7 +1582,7 @@ contexts:
15971582 3: storage.type.namespace.ts
15981583 push:
15991584 - meta_scope: meta.namespace.declaration.ts
1600− - match: '(?<=\})|(?=;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
1585+ - match: '(?<=\})|(?=;|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
16011586 pop: true
16021587 - include: comment
16031588 - include: string
@@ -1613,7 +1598,9 @@ contexts:
16131598 - meta_scope: new.expr.ts
16141599 - match: '(?<=\))|(?=[;),}\]:?\-\+\>]|\|\||\&\&|\!\=\=|$|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))new(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))'
16151600 pop: true
1616− - include: expression
1601+ - include: paren-expression
1602+ - include: class-declaration
1603+ - include: type
16171604 null-literal:
16181605 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))null(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
16191606 scope: constant.language.null.ts
@@ -1794,7 +1781,7 @@ contexts:
17941781 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
17951782 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
17961783 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1797− )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(])
1784+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(])
17981785 captures:
17991786 1: storage.modifier.async.ts
18001787 2: storage.type.property.ts
@@ -1815,7 +1802,7 @@ contexts:
18151802 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
18161803 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
18171804 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1818− )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(])
1805+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(])
18191806 captures:
18201807 1: storage.modifier.async.ts
18211808 2: storage.type.property.ts
@@ -1877,10 +1864,10 @@ contexts:
18771864 ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
18781865 )) |
18791866 ((async\s*)?(
1880− ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
1867+ ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
18811868 # sure shot arrow functions even if => is on new line
18821869 (
1883− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
1870+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
18841871 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
18851872 (
18861873 ([)]\s*:) | # ():
@@ -1890,9 +1877,9 @@ contexts:
18901877
18911878 # arrow function possible to detect only with => on same line
18921879 (
1893− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
1894− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
1895− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
1880+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
1881+ \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
1882+ (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
18961883 \s*=> # arrow operator
18971884 )
18981885 ))
@@ -1943,7 +1930,7 @@ contexts:
19431930 - meta_scope: meta.object.member.ts
19441931 - match: '(?=,|\})'
19451932 pop: true
1946− - match: '(?<=:)\s*(async)?(?=\s*(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))'
1933+ - match: '(?<=:)\s*(async)?(?=\s*(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))'
19471934 captures:
19481935 1: storage.modifier.async.ts
19491936 push:
@@ -1959,7 +1946,7 @@ contexts:
19591946 0: meta.brace.round.ts
19601947 pop: true
19611948 - include: expression-inside-possibly-arrow-parens
1962− - match: '(?<=:)\s*(async)?\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))'
1949+ - match: '(?<=:)\s*(async)?\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))'
19631950 captures:
19641951 1: storage.modifier.async.ts
19651952 2: meta.brace.round.ts
@@ -1976,7 +1963,7 @@ contexts:
19761963 - match: (?<=\>)
19771964 pop: true
19781965 - include: type-parameters
1979− - match: '(?<=\>)\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))'
1966+ - match: '(?<=\>)\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))'
19801967 captures:
19811968 1: meta.brace.round.ts
19821969 push:
@@ -2010,11 +1997,11 @@ contexts:
20101997 - include: destructuring-parameter-rest
20111998 - include: variable-initializer
20121999 parameter-name:
2013− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|protected|private|readonly)\s+(?=(override|public|protected|private|readonly)\s+)'
2000+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|protected|private|readonly)\s+(?=(public|protected|private|readonly)\s+)'
20142001 captures:
20152002 1: storage.modifier.ts
20162003 - match: |-
2017− (?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*
2004+ (?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*
20182005 # function assignment |
20192006 (=\s*(
20202007 ((async\s+)?(
@@ -2023,10 +2010,10 @@ contexts:
20232010 ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
20242011 )) |
20252012 ((async\s*)?(
2026− ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
2013+ ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
20272014 # sure shot arrow functions even if => is on new line
20282015 (
2029− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
2016+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
20302017 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
20312018 (
20322019 ([)]\s*:) | # ():
@@ -2036,9 +2023,9 @@ contexts:
20362023
20372024 # arrow function possible to detect only with => on same line
20382025 (
2039− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
2040− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
2041− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
2026+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
2027+ \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
2028+ (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
20422029 \s*=> # arrow operator
20432030 )
20442031 ))
@@ -2056,18 +2043,18 @@ contexts:
20562043 ))
20572044 )) |
20582045 (:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
2059− (:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
2060− (:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
2046+ (:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
2047+ (:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
20612048 ((async\s+)?(
20622049 (function\s*[(<*]) |
20632050 (function\s+) |
20642051 ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
20652052 )) |
20662053 ((async\s*)?(
2067− ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
2054+ ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
20682055 # sure shot arrow functions even if => is on new line
20692056 (
2070− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
2057+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
20712058 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
20722059 (
20732060 ([)]\s*:) | # ():
@@ -2077,9 +2064,9 @@ contexts:
20772064
20782065 # arrow function possible to detect only with => on same line
20792066 (
2080− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
2081− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
2082− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
2067+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
2068+ \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
2069+ (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
20832070 \s*=> # arrow operator
20842071 )
20852072 ))
@@ -2090,7 +2077,7 @@ contexts:
20902077 3: entity.name.function.ts variable.language.this.ts
20912078 4: entity.name.function.ts
20922079 5: keyword.operator.optional.ts
2093− - match: '(?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)'
2080+ - match: '(?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)'
20942081 captures:
20952082 1: storage.modifier.ts
20962083 2: keyword.operator.rest.ts
@@ -2150,14 +2137,14 @@ contexts:
21502137 pop: true
21512138 - include: expression
21522139 paren-expression-possibly-arrow:
2153− - match: '(?<=[(=,])\s*(async)?(?=\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))'
2140+ - match: '(?<=[(=,])\s*(async)?(?=\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))'
21542141 captures:
21552142 1: storage.modifier.async.ts
21562143 push:
21572144 - match: (?<=\))
21582145 pop: true
21592146 - include: paren-expression-possibly-arrow-with-typeparameters
2160− - match: '(?<=[(=,]|=>|^return|[^\._$[:alnum:]]return)\s*(async)?(?=\s*((((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?\()|(<))\s*$)'
2147+ - match: '(?<=[(=,]|=>|^return|[^\._$[:alnum:]]return)\s*(async)?(?=\s*((((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?\()|(<))\s*$)'
21612148 captures:
21622149 1: storage.modifier.async.ts
21632150 push:
@@ -2177,7 +2164,7 @@ contexts:
21772164 pop: true
21782165 - include: expression-inside-possibly-arrow-parens
21792166 possibly-arrow-return-type:
2180− - match: '(?<=\)|^)\s*(:)(?=\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*=>)'
2167+ - match: '(?<=\)|^)\s*(:)(?=\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*=>)'
21812168 captures:
21822169 1: meta.arrow.ts meta.return.type.arrow.ts keyword.operator.type.annotation.ts
21832170 push:
@@ -2224,23 +2211,23 @@ contexts:
22242211 pop: true
22252212 - include: string-character-escape
22262213 regex:
2227− - match: '(?<!\+\+|--|})(?<=[=(:,\[?+!]|^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case|=>|&&|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[\()]|\\.|\[([^\]\\]|\\.)+\]|\(([^\)\\]|\\.)+\))+\/([dgimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))'
2214+ - match: '(?<!\+\+|--|})(?<=[=(:,\[?+!]|^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case|=>|&&|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[\()]|\\.|\[([^\]\\]|\\.)+\]|\(([^\)\\]|\\.)+\))+\/([gimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))'
22282215 captures:
22292216 1: punctuation.definition.string.begin.ts
22302217 push:
22312218 - meta_scope: string.regexp.ts
2232− - match: "(/)([dgimsuy]*)"
2219+ - match: "(/)([gimsuy]*)"
22332220 captures:
22342221 1: punctuation.definition.string.end.ts
22352222 2: keyword.other.ts
22362223 pop: true
22372224 - include: regexp
2238− - match: '((?<![_$[:alnum:])\]]|\+\+|--|}|\*\/)|((?<=^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case))\s*)\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([dgimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))'
2225+ - match: '((?<![_$[:alnum:])\]]|\+\+|--|}|\*\/)|((?<=^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case))\s*)\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/([gimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))'
22392226 captures:
22402227 0: punctuation.definition.string.begin.ts
22412228 push:
22422229 - meta_scope: string.regexp.ts
2243− - match: "(/)([dgimsuy]*)"
2230+ - match: "(/)([gimsuy]*)"
22442231 captures:
22452232 1: punctuation.definition.string.end.ts
22462233 2: keyword.other.ts
@@ -2443,7 +2430,7 @@ contexts:
24432430 4: support.variable.property.target.ts
24442431 - match: |-
24452432 (?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s* (?:
2446− (?:(constructor|length|prototype|__proto__)\b(?!\$|\s*(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?\())
2433+ (?:(constructor|length|prototype|__proto__)\b(?!\$|\s*(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?\())
24472434 |
24482435 (?:(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\b(?!\$)))
24492436 captures:
@@ -2549,7 +2536,7 @@ contexts:
25492536 |siblingBelow|size|source|specified|standby|start|status|statusbar|statusText|style|styleSheets|suffixes|summary
25502537 |systemId|systemLanguage|tagName|tags|target|tBodies|text|textAlign|textDecoration|textIndent|textTransform|tFoot|tHead
25512538 |title|toolbar|top|type|undefined|uniqueID|updateInterval|URL|URLUnencoded|useMap|userAgent|userLanguage|userProfile
2552− |vAlign|value|valueType|vendor|vendorSub|version|visibility|vspace|whiteSpace|width|X[MS]LDocument|zIndex))\b(?!\$|\s*(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?\()
2539+ |vAlign|value|valueType|vendor|vendorSub|version|visibility|vspace|whiteSpace|width|X[MS]LDocument|zIndex))\b(?!\$|\s*(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?\()
25532540 captures:
25542541 1: punctuation.accessor.ts
25552542 2: punctuation.accessor.optional.ts
@@ -2716,34 +2703,20 @@ contexts:
27162703 0: case-clause.expr.ts punctuation.definition.section.case-statement.ts
27172704 - include: statements
27182705 template:
2719− - include: template-call
2720− - match: "([_$[:alpha:]][_$[:alnum:]]*)?(`)"
2721− captures:
2722− 1: entity.name.function.tagged-template.ts
2723− 2: punctuation.definition.string.template.begin.ts
2724− push:
2725− - meta_scope: string.template.ts
2726− - match: "`"
2727− captures:
2728− 0: punctuation.definition.string.template.end.ts
2729− pop: true
2730− - include: template-substitution-element
2731− - include: string-character-escape
2732− template-call:
2733− - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)(<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?`)'
2706+ - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)(<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?`)'
27342707 push:
27352708 - meta_scope: string.template.ts
27362709 - match: (?=`)
27372710 pop: true
27382711 - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*))'
27392712 push:
2740− - match: '(?=(<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?`)'
2713+ - match: '(?=(<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?`)'
27412714 pop: true
27422715 - include: support-function-call-identifiers
27432716 - match: "([_$[:alpha:]][_$[:alnum:]]*)"
27442717 scope: entity.name.function.tagged-template.ts
27452718 - include: type-arguments
2746− - match: '([_$[:alpha:]][_$[:alnum:]]*)?\s*(?=(<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)`)'
2719+ - match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(?=(<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)`)'
27472720 captures:
27482721 1: entity.name.function.tagged-template.ts
27492722 push:
@@ -2751,20 +2724,6 @@ contexts:
27512724 - match: (?=`)
27522725 pop: true
27532726 - include: type-arguments
2754− template-substitution-element:
2755− - match: '\$\{'
2756− captures:
2757− 0: punctuation.definition.template-expression.begin.ts
2758− push:
2759− - meta_scope: meta.template.expression.ts
2760− - meta_content_scope: meta.embedded.line.ts
2761− - match: '\}'
2762− captures:
2763− 0: punctuation.definition.template-expression.end.ts
2764− pop: true
2765− - include: expression
2766− template-type:
2767− - include: template-call
27682727 - match: "([_$[:alpha:]][_$[:alnum:]]*)?(`)"
27692728 captures:
27702729 1: entity.name.function.tagged-template.ts
@@ -2775,9 +2734,9 @@ contexts:
27752734 captures:
27762735 0: punctuation.definition.string.template.end.ts
27772736 pop: true
2778− - include: template-type-substitution-element
2737+ - include: template-substitution-element
27792738 - include: string-character-escape
2780− template-type-substitution-element:
2739+ template-substitution-element:
27812740 - match: '\$\{'
27822741 captures:
27832742 0: punctuation.definition.template-expression.begin.ts
@@ -2788,7 +2747,7 @@ contexts:
27882747 captures:
27892748 0: punctuation.definition.template-expression.end.ts
27902749 pop: true
2791− - include: type
2750+ - include: expression
27922751 ternary-expression:
27932752 - match: '(?!\?\.\s*[^[:digit:]])(\?)(?!\?)'
27942753 captures:
@@ -2804,7 +2763,7 @@ contexts:
28042763 scope: variable.language.this.ts
28052764 type:
28062765 - include: comment
2807− - include: type-string
2766+ - include: string
28082767 - include: numeric-literal
28092768 - include: type-primitive
28102769 - include: type-builtin-literals
@@ -2829,23 +2788,15 @@ contexts:
28292788 4: entity.name.type.alias.ts
28302789 push:
28312790 - meta_scope: meta.type.declaration.ts
2832− - match: '(?=\}|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
2791+ - match: '(?=\}|;|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
28332792 pop: true
28342793 - include: comment
28352794 - include: type-parameters
2836− - match: '(=)\s*(intrinsic)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
2837− captures:
2838− 1: keyword.operator.assignment.ts
2839− 2: keyword.control.intrinsic.ts
2840− push:
2841− - match: '(?=\}|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
2842− pop: true
2843− - include: type
28442795 - match: (=)\s*
28452796 captures:
28462797 1: keyword.operator.assignment.ts
28472798 push:
2848− - match: '(?=\}|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
2799+ - match: '(?=\}|;|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
28492800 pop: true
28502801 - include: type
28512802 type-annotation:
@@ -2903,19 +2854,17 @@ contexts:
29032854 - include: type
29042855 - include: type
29052856 type-fn-type-parameters:
2906− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(abstract)\s+)?(new)\b(?=\s*\<)'
2857+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(new)\b(?=\s*\<)'
29072858 captures:
2908− 1: meta.type.constructor.ts storage.modifier.ts
2909− 2: meta.type.constructor.ts keyword.control.new.ts
2859+ 1: meta.type.constructor.ts keyword.control.new.ts
29102860 push:
29112861 - match: (?<=>)
29122862 pop: true
29132863 - include: comment
29142864 - include: type-parameters
2915− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(abstract)\s+)?(new)\b\s*(?=\()'
2865+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(new)\b\s*(?=\()'
29162866 captures:
2917− 1: storage.modifier.ts
2918− 2: keyword.control.new.ts
2867+ 1: keyword.control.new.ts
29192868 push:
29202869 - meta_scope: meta.type.constructor.ts
29212870 - match: (?<=\))
@@ -3044,6 +2993,8 @@ contexts:
30442993 scope: keyword.operator.ternary.ts
30452994 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))infer(?=\s+[_$[:alpha:]])'
30462995 scope: keyword.operator.expression.infer.ts
2996+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))awaited(?=\s+[_$[:alpha:]])'
2997+ scope: keyword.operator.expression.awaited.ts
30472998 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))import(?=\s*\()'
30482999 scope: keyword.operator.expression.import.ts
30493000 type-parameters:
@@ -3086,7 +3037,7 @@ contexts:
30863037 ))
30873038 )) |
30883039 (:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
3089− (:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))))
3040+ (:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))))
30903041 captures:
30913042 1: storage.modifier.ts
30923043 2: keyword.operator.rest.ts
@@ -3123,10 +3074,6 @@ contexts:
31233074 type-primitive:
31243075 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(string|number|bigint|boolean|symbol|any|void|never|unknown)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
31253076 scope: support.type.primitive.ts
3126− type-string:
3127− - include: qstring-single
3128− - include: qstring-double
3129− - include: template-type
31303077 type-tuple:
31313078 - match: '\['
31323079 captures:
@@ -3137,23 +3084,11 @@ contexts:
31373084 captures:
31383085 0: meta.brace.square.ts
31393086 pop: true
3140− - match: \.\.\.
3141− scope: keyword.operator.rest.ts
3142− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))([_$[:alpha:]][_$[:alnum:]]*)\s*(\?)?\s*(:)'
3143− captures:
3144− 1: entity.name.label.ts
3145− 2: keyword.operator.optional.ts
3146− 3: punctuation.separator.label.ts
31473087 - include: type
31483088 - include: punctuation-comma
31493089 typeof-operator:
31503090 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))typeof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
3151− captures:
3152− 0: keyword.operator.expression.typeof.ts
3153− push:
3154− - match: '(?=[,);}\]=>:&|{\?]|$|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
3155− pop: true
3156− - include: expression
3091+ scope: keyword.operator.expression.typeof.ts
31573092 undefined-literal:
31583093 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))undefined(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
31593094 scope: constant.language.undefined.ts
@@ -3161,7 +3096,7 @@ contexts:
31613096 - match: '(?=(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))'
31623097 push:
31633098 - meta_scope: meta.var.expr.ts
3164− - match: '(?!(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))|((?<!^let|[^\._$[:alnum:]]let|^var|[^\._$[:alnum:]]var)(?=\s*$)))'
3099+ - match: '(?!(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)|^\s*$|;|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))|((?<!^let|[^\._$[:alnum:]]let|^var|[^\._$[:alnum:]]var)(?=\s*$)))'
31653100 pop: true
31663101 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*'
31673102 captures:
@@ -3194,7 +3129,7 @@ contexts:
31943129 3: storage.type.ts
31953130 push:
31963131 - meta_scope: meta.var.expr.ts
3197− - match: '(?!(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))|((?<!^const|[^\._$[:alnum:]]const)(?=\s*$)))'
3132+ - match: '(?!(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)|^\s*$|;|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))|((?<!^const|[^\._$[:alnum:]]const)(?=\s*$)))'
31983133 pop: true
31993134 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*'
32003135 captures:
@@ -3231,10 +3166,10 @@ contexts:
32313166 ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
32323167 )) |
32333168 ((async\s*)?(
3234− ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
3169+ ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
32353170 # sure shot arrow functions even if => is on new line
32363171 (
3237− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
3172+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
32383173 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
32393174 (
32403175 ([)]\s*:) | # ():
@@ -3244,9 +3179,9 @@ contexts:
32443179
32453180 # arrow function possible to detect only with => on same line
32463181 (
3247− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
3248− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
3249− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
3182+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
3183+ \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
3184+ (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
32503185 \s*=> # arrow operator
32513186 )
32523187 ))
@@ -3264,18 +3199,18 @@ contexts:
32643199 ))
32653200 )) |
32663201 (:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
3267− (:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
3268− (:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
3202+ (:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
3203+ (:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
32693204 ((async\s+)?(
32703205 (function\s*[(<*]) |
32713206 (function\s+) |
32723207 ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
32733208 )) |
32743209 ((async\s*)?(
3275− ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
3210+ ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
32763211 # sure shot arrow functions even if => is on new line
32773212 (
3278− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
3213+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
32793214 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
32803215 (
32813216 ([)]\s*:) | # ():
@@ -3285,9 +3220,9 @@ contexts:
32853220
32863221 # arrow function possible to detect only with => on same line
32873222 (
3288− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
3289− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
3290− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
3223+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
3224+ \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
3225+ (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
32913226 \s*=> # arrow operator
32923227 )
32933228 ))
@@ -3318,10 +3253,10 @@ contexts:
33183253 ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
33193254 )) |
33203255 ((async\s*)?(
3321− ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
3256+ ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
33223257 # sure shot arrow functions even if => is on new line
33233258 (
3324− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
3259+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
33253260 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
33263261 (
33273262 ([)]\s*:) | # ():
@@ -3331,9 +3266,9 @@ contexts:
33313266
33323267 # arrow function possible to detect only with => on same line
33333268 (
3334− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
3335− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
3336− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
3269+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
3270+ \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
3271+ (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
33373272 \s*=> # arrow operator
33383273 )
33393274 ))
@@ -3351,18 +3286,18 @@ contexts:
33513286 ))
33523287 )) |
33533288 (:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
3354− (:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
3355− (:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
3289+ (:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
3290+ (:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
33563291 ((async\s+)?(
33573292 (function\s*[(<*]) |
33583293 (function\s+) |
33593294 ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
33603295 )) |
33613296 ((async\s*)?(
3362− ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
3297+ ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
33633298 # sure shot arrow functions even if => is on new line
33643299 (
3365− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
3300+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
33663301 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
33673302 (
33683303 ([)]\s*:) | # ():
@@ -3372,9 +3307,9 @@ contexts:
33723307
33733308 # arrow function possible to detect only with => on same line
33743309 (
3375− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
3376− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
3377− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
3310+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
3311+ \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
3312+ (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
33783313 \s*=> # arrow operator
33793314 )
33803315 ))
assets/syntaxes/02_Extra/TypsecriptReact.sublime-syntax+477−896
@@ -9,7 +9,10 @@ contexts:
99 main:
1010 - include: directives
1111 - include: statements
12− - include: shebang
12+ - match: \A(#!).*(?=$)
13+ scope: comment.line.shebang.ts
14+ captures:
15+ 1: punctuation.definition.comment.ts
1316 comment:
1417 - match: /\*\*(?!/)
1518 captures:
@@ -41,10 +44,10 @@ contexts:
4144 5: punctuation.decorator.internaldeclaration.tsx
4245 push:
4346 - meta_content_scope: comment.line.double-slash.tsx
44− - match: (?=$)
47+ - match: (?=^)
4548 pop: true
4649 access-modifier:
47− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(abstract|declare|override|public|protected|private|readonly|static)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
50+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(abstract|public|protected|private|readonly|static)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
4851 scope: storage.modifier.tsx
4952 after-operator-block-as-object-literal:
5053 - match: '(?<!\+\+|--)(?<=[:=(,\[?+!>]|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^yield|[^\._$[:alnum:]]yield|^throw|[^\._$[:alnum:]]throw|^in|[^\._$[:alnum:]]in|^of|[^\._$[:alnum:]]of|^typeof|[^\._$[:alnum:]]typeof|&&|\|\||\*)\s*(\{)'
@@ -106,8 +109,8 @@ contexts:
106109 (?=
107110 # sure shot arrow functions even if => is on new line
108111 (
109− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
110− [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
112+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?
113+ [(]\s*
111114 (
112115 ([)]\s*:) | # ():
113116 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
@@ -118,9 +121,9 @@ contexts:
118121 ) |
119122 # arrow function possible to detect only with => on same line
120123 (
121− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
122− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
123− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
124+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters
125+ \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters
126+ (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type
124127 \s*=> # arrow operator
125128 )
126129 )
@@ -135,15 +138,13 @@ contexts:
135138 - include: type-parameters
136139 - include: function-parameters
137140 - include: arrow-return-type
138− - include: possibly-arrow-return-type
139141 - match: "=>"
140142 captures:
141143 0: storage.type.function.arrow.tsx
142144 push:
143145 - meta_scope: meta.arrow.tsx
144− - match: '((?<=\}|\S)(?<!=>)|((?!\{)(?=\S)))(?!\/[\/\*])'
146+ - match: '(?<=\}|\S)(?<!=>)|((?!\{)(?=\S))'
145147 pop: true
146− - include: single-line-comment-consuming-line-ending
147148 - include: decl-block
148149 - include: expression
149150 arrow-return-type:
@@ -169,8 +170,6 @@ contexts:
169170 binding-element:
170171 - include: comment
171172 - include: string
172− - include: numeric-literal
173− - include: regex
174173 - include: object-binding-pattern
175174 - include: array-binding-pattern
176175 - include: destructuring-variable-rest
@@ -178,8 +177,6 @@ contexts:
178177 binding-element-const:
179178 - include: comment
180179 - include: string
181− - include: numeric-literal
182− - include: regex
183180 - include: object-binding-pattern-const
184181 - include: array-binding-pattern-const
185182 - include: destructuring-variable-rest-const
@@ -203,12 +200,11 @@ contexts:
203200 cast:
204201 - include: jsx
205202 class-declaration:
206− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(?:(abstract)\s+)?\b(class)\b(?=\s+|/[/*])'
203+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(export)\s+)?\b(?:(abstract)\s+)?\b(class)\b(?=\s+|/[/*])'
207204 captures:
208205 1: keyword.control.export.tsx
209206 2: storage.modifier.tsx
210− 3: storage.modifier.tsx
211− 4: storage.type.class.tsx
207+ 3: storage.type.class.tsx
212208 push:
213209 - meta_scope: meta.class.tsx
214210 - match: '(?<=\})'
@@ -223,10 +219,9 @@ contexts:
223219 - include: type-parameters
224220 - include: class-or-interface-body
225221 class-expression:
226− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(abstract)\s+)?(class)\b(?=\s+|[<{]|\/[\/*])'
222+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(class)\b(?=\s+|[<{]|\/[\/*])'
227223 captures:
228− 1: storage.modifier.tsx
229− 2: storage.type.class.tsx
224+ 1: storage.type.class.tsx
230225 push:
231226 - meta_scope: meta.class.tsx
232227 - match: '(?<=\})'
@@ -243,11 +238,6 @@ contexts:
243238 pop: true
244239 - include: comment
245240 - include: decorator
246− - match: (?<=:)\s*
247− push:
248− - match: '(?=\s|[;),}\]:\-\+]|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
249− pop: true
250− - include: expression
251241 - include: method-declaration
252242 - include: indexer-declaration
253243 - include: field-declaration
@@ -294,15 +284,9 @@ contexts:
294284 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(break|continue|do|goto|while)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
295285 scope: keyword.control.loop.tsx
296286 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(return)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
297− captures:
298− 0: keyword.control.flow.tsx
299− push:
300− - match: '(?=[;}]|$|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
301− pop: true
302− - include: expression
287+ scope: keyword.control.flow.tsx
303288 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(case|default|switch)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
304289 scope: keyword.control.switch.tsx
305− - include: if-statement
306290 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(else|if)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
307291 scope: keyword.control.conditional.tsx
308292 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(with)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
@@ -311,6 +295,8 @@ contexts:
311295 scope: keyword.control.tsx
312296 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(debugger)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
313297 scope: keyword.other.debugger.tsx
298+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(declare)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
299+ scope: storage.modifier.tsx
314300 decl-block:
315301 - match: '\{'
316302 captures:
@@ -334,8 +320,6 @@ contexts:
334320 - include: import-equals-declaration
335321 - include: import-declaration
336322 - include: export-declaration
337− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(declare|export)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
338− scope: storage.modifier.tsx
339323 decorator:
340324 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))\@'
341325 captures:
@@ -349,7 +333,7 @@ contexts:
349333 - match: '(?<!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\{)'
350334 push:
351335 - meta_scope: meta.object-binding-pattern-variable.tsx
352− - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+))'
336+ - match: '(?=$|^|[;,=}]|(\s+(of|in)\s+))'
353337 pop: true
354338 - include: object-binding-pattern-const
355339 - include: type-annotation
@@ -357,16 +341,15 @@ contexts:
357341 - match: '(?<!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\[)'
358342 push:
359343 - meta_scope: meta.array-binding-pattern-variable.tsx
360− - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+))'
344+ - match: '(?=$|^|[;,=}]|(\s+(of|in)\s+))'
361345 pop: true
362346 - include: array-binding-pattern-const
363347 - include: type-annotation
364348 - include: comment
365349 destructuring-parameter:
366− - match: '(?<!=|:)\s*(?:(\.\.\.)\s*)?(\{)'
350+ - match: '(?<!=|:)\s*(\{)'
367351 captures:
368− 1: keyword.operator.rest.tsx
369− 2: punctuation.definition.binding-pattern.object.tsx
352+ 1: punctuation.definition.binding-pattern.object.tsx
370353 push:
371354 - meta_scope: meta.parameter.object-binding-pattern.tsx
372355 - match: '\}'
@@ -374,10 +357,9 @@ contexts:
374357 0: punctuation.definition.binding-pattern.object.tsx
375358 pop: true
376359 - include: parameter-object-binding-element
377− - match: '(?<!=|:)\s*(?:(\.\.\.)\s*)?(\[)'
360+ - match: '(?<!=|:)\s*(\[)'
378361 captures:
379− 1: keyword.operator.rest.tsx
380− 2: punctuation.definition.binding-pattern.array.tsx
362+ 1: punctuation.definition.binding-pattern.array.tsx
381363 push:
382364 - meta_scope: meta.paramter.array-binding-pattern.tsx
383365 - match: '\]'
@@ -395,7 +377,7 @@ contexts:
395377 - match: '(?<!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\{)'
396378 push:
397379 - meta_scope: meta.object-binding-pattern-variable.tsx
398− - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+))'
380+ - match: '(?=$|^|[;,=}]|(\s+(of|in)\s+))'
399381 pop: true
400382 - include: object-binding-pattern
401383 - include: type-annotation
@@ -403,7 +385,7 @@ contexts:
403385 - match: '(?<!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\[)'
404386 push:
405387 - meta_scope: meta.array-binding-pattern-variable.tsx
406− - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+))'
388+ - match: '(?=$|^|[;,=}]|(\s+(of|in)\s+))'
407389 pop: true
408390 - include: array-binding-pattern
409391 - include: type-annotation
@@ -419,12 +401,12 @@ contexts:
419401 1: keyword.operator.rest.tsx
420402 2: meta.definition.variable.tsx variable.other.constant.tsx
421403 directives:
422− - match: '^(///)\s*(?=<(reference|amd-dependency|amd-module)(\s+(path|types|no-default-lib|lib|name)\s*=\s*((\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)))+\s*/>\s*$)'
404+ - match: '^(///)\s*(?=<(reference|amd-dependency|amd-module)(\s+(path|types|no-default-lib|lib|name)\s*=\s*((\''([^\''\\]|\\\''|\\)*\'')|(\"([^\"\\]|\\\"|\\)*\")))+\s*/>\s*$)'
423405 captures:
424406 1: punctuation.definition.comment.tsx
425407 push:
426408 - meta_scope: comment.line.triple-slash.directive.tsx
427− - match: (?=$)
409+ - match: (?=^)
428410 pop: true
429411 - match: (<)(reference|amd-dependency|amd-module)
430412 captures:
@@ -686,18 +668,13 @@ contexts:
686668 captures:
687669 1: punctuation.definition.block.tag.jsdoc
688670 - include: inline-tags
689− - match: '((@)(?:[_$[:alpha:]][_$[:alnum:]]*))(?=\s+)'
690− captures:
691− 1: storage.type.class.jsdoc
692− 2: punctuation.definition.block.tag.jsdoc
693671 enum-declaration:
694− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?(?:\b(const)\s+)?\b(enum)\s+([_$[:alpha:]][_$[:alnum:]]*)'
672+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:\b(const)\s+)?\b(enum)\s+([_$[:alpha:]][_$[:alnum:]]*)'
695673 captures:
696674 1: keyword.control.export.tsx
697675 2: storage.modifier.tsx
698− 3: storage.modifier.tsx
699− 4: storage.type.enum.tsx
700− 5: entity.name.type.enum.tsx
676+ 3: storage.type.enum.tsx
677+ 4: entity.name.type.enum.tsx
701678 push:
702679 - meta_scope: meta.enum.declaration.tsx
703680 - match: '(?<=\})'
@@ -720,7 +697,7 @@ contexts:
720697 pop: true
721698 - include: comment
722699 - include: variable-initializer
723− - match: '(?=((\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\])))'
700+ - match: '(?=((\''([^\''\\]|\\\''|\\)*\'')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\])))'
724701 push:
725702 - match: '(?=,|\}|$)'
726703 pop: true
@@ -736,25 +713,22 @@ contexts:
736713 2: keyword.control.as.tsx
737714 3: storage.type.namespace.tsx
738715 4: entity.name.type.module.tsx
739− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(export)(?:\s+(type))?(?:(?:\s*(=))|(?:\s+(default)(?=\s+)))'
716+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(export)(?:(?:\s*(=))|(?:\s+(default)(?=\s+)))'
740717 captures:
741718 1: keyword.control.export.tsx
742− 2: keyword.control.type.tsx
743− 3: keyword.operator.assignment.tsx
744− 4: keyword.control.default.tsx
719+ 2: keyword.operator.assignment.tsx
720+ 3: keyword.control.default.tsx
745721 push:
746722 - meta_scope: meta.export.default.tsx
747− - match: (?=$|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))
723+ - match: (?=$|;|^\s*abstract\b|^\s*async\b|^\s*class\b|^\s*const\b|^\s*declare\b|^\s*enum\b|^\s*export\b|^\s*function\b|^\s*import\b|^\s*interface\b|^\s*let\b|^\s*module\b|^\s*namespace\b|^\s*return\b|^\s*type\b|^\s*var\b)
748724 pop: true
749− - include: interface-declaration
750725 - include: expression
751− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(export)(?:\s+(type))?\b(?!(\$)|(\s*:))((?=\s*[\{*])|((?=\s*[_$[:alpha:]][_$[:alnum:]]*(\s|,))(?!\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b)))'
726+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(export)(?!\s*:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
752727 captures:
753− 1: keyword.control.export.tsx
754− 2: keyword.control.type.tsx
728+ 0: keyword.control.export.tsx
755729 push:
756730 - meta_scope: meta.export.tsx
757− - match: (?=$|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))
731+ - match: (?=$|;|^\s*abstract\b|^\s*async\b|^\s*class\b|^\s*const\b|^\s*declare\b|^\s*enum\b|^\s*export\b|^\s*function\b|^\s*import\b|^\s*interface\b|^\s*let\b|^\s*module\b|^\s*namespace\b|^\s*return\b|^\s*type\b|^\s*var\b)
758732 pop: true
759733 - include: import-export-declaration
760734 expression:
@@ -763,105 +737,7 @@ contexts:
763737 - include: expressionPunctuations
764738 expression-inside-possibly-arrow-parens:
765739 - include: expressionWithoutIdentifiers
766− - include: comment
767− - include: string
768− - include: decorator
769− - include: destructuring-parameter
770− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|protected|private|readonly)\s+(?=(override|public|protected|private|readonly)\s+)'
771− captures:
772− 1: storage.modifier.tsx
773− - match: |-
774− (?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*
775− # function assignment |
776− (=\s*(
777− ((async\s+)?(
778− (function\s*[(<*]) |
779− (function\s+) |
780− ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
781− )) |
782− ((async\s*)?(
783− ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
784− # sure shot arrow functions even if => is on new line
785− (
786− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
787− [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
788− (
789− ([)]\s*:) | # ():
790− ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
791− )
792− ) |
793− (
794− [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends
795− ) |
796− # arrow function possible to detect only with => on same line
797− (
798− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
799− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
800− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
801− \s*=> # arrow operator
802− )
803− ))
804− )) |
805− # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>
806− (:\s*(
807− (<) |
808− ([(]\s*(
809− ([)]) |
810− (\.\.\.) |
811− ([_$[:alnum:]]+\s*(
812− ([:,?=])|
813− ([)]\s*=>)
814− ))
815− ))
816− )) |
817− (:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
818− (:\s*((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
819− (:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
820− ((async\s+)?(
821− (function\s*[(<*]) |
822− (function\s+) |
823− ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
824− )) |
825− ((async\s*)?(
826− ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
827− # sure shot arrow functions even if => is on new line
828− (
829− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
830− [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
831− (
832− ([)]\s*:) | # ():
833− ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
834− )
835− ) |
836− (
837− [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends
838− ) |
839− # arrow function possible to detect only with => on same line
840− (
841− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
842− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
843− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
844− \s*=> # arrow operator
845− )
846− ))
847− )))
848− captures:
849− 1: storage.modifier.tsx
850− 2: keyword.operator.rest.tsx
851− 3: entity.name.function.tsx variable.language.this.tsx
852− 4: entity.name.function.tsx
853− 5: keyword.operator.optional.tsx
854− - match: '(?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*[:,]|$)'
855− captures:
856− 1: storage.modifier.tsx
857− 2: keyword.operator.rest.tsx
858− 3: variable.parameter.tsx variable.language.this.tsx
859− 4: variable.parameter.tsx
860− 5: keyword.operator.optional.tsx
861− - include: type-annotation
862− - include: variable-initializer
863− - match: ","
864− scope: punctuation.separator.parameter.tsx
740+ - include: function-parameters-body
865741 - include: identifiers
866742 - include: expressionPunctuations
867743 expression-operators:
@@ -893,15 +769,11 @@ contexts:
893769 - include: typeof-operator
894770 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))void(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
895771 scope: keyword.operator.expression.void.tsx
896− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as)\s+(const)(?=\s*($|[;,:})\]]))'
897− captures:
898− 1: keyword.control.as.tsx
899− 2: storage.modifier.tsx
900772 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as)\s+'
901773 captures:
902774 1: keyword.control.as.tsx
903775 push:
904− - match: '(?=^|[;),}\]:?\-\+\>]|\|\||\&\&|\!\=\=|$|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as)\s+)|(\s+\<))'
776+ - match: '(?=$|^|[;,:})\]]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as)\s+))'
905777 pop: true
906778 - include: type
907779 - match: \.\.\.
@@ -916,12 +788,7 @@ contexts:
916788 scope: keyword.operator.comparison.tsx
917789 - match: <=|>=|<>|<|>
918790 scope: keyword.operator.relational.tsx
919− - match: '(?<=[_$[:alnum:]])(\!)\s*(?:(/=)|(?:(/)(?![/*])))'
920− captures:
921− 1: keyword.operator.logical.tsx
922− 2: keyword.operator.assignment.compound.tsx
923− 3: keyword.operator.arithmetic.tsx
924− - match: \!|&&|\|\||\?\?
791+ - match: \!|&&|\|\|
925792 scope: keyword.operator.logical.tsx
926793 - match: \&|~|\^|\|
927794 scope: keyword.operator.bitwise.tsx
@@ -933,18 +800,9 @@ contexts:
933800 scope: keyword.operator.increment.tsx
934801 - match: '%|\*|/|-|\+'
935802 scope: keyword.operator.arithmetic.tsx
936− - match: '(?<=[_$[:alnum:])\]])\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)+(?:(/=)|(?:(/)(?![/*]))))'
937− push:
938− - match: '(?:(/=)|(?:(/)(?!\*([^\*]|(\*[^\/]))*\*\/)))'
939− captures:
940− 1: keyword.operator.assignment.compound.tsx
941− 2: keyword.operator.arithmetic.tsx
942− pop: true
943− - include: comment
944− - match: '(?<=[_$[:alnum:])\]])\s*(?:(/=)|(?:(/)(?![/*])))'
803+ - match: '(?<=[_$[:alnum:])\]])\s*(/)(?![/*])'
945804 captures:
946− 1: keyword.operator.assignment.compound.tsx
947− 2: keyword.operator.arithmetic.tsx
805+ 1: keyword.operator.arithmetic.tsx
948806 expressionPunctuations:
949807 - include: punctuation-comma
950808 - include: punctuation-accessor
@@ -952,6 +810,7 @@ contexts:
952810 - include: jsx
953811 - include: string
954812 - include: regex
813+ - include: template
955814 - include: comment
956815 - include: function-expression
957816 - include: class-expression
@@ -969,123 +828,143 @@ contexts:
969828 - include: paren-expression
970829 field-declaration:
971830 - match: |-
972− (?x)(?<!\()(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(readonly)\s+)?(?=\s*((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?:
973− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
974− (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
975− (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
976− (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
977− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
978− (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
979− (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
980− (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
981− )(?!\$))|(\#?[_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(?:(?:(\?)|(\!))\s*)?(=|:|;|,|\}|$))
831+ (?x)(?<!\()(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(readonly)\s+)?(?=\s*((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
832+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
833+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
834+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
835+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
836+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
837+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
838+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
839+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
840+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\?\s*)?(=|:))
982841 captures:
983842 1: storage.modifier.tsx
984843 push:
985844 - meta_scope: meta.field.declaration.tsx
986845 - match: |-
987− (?x)(?=\}|;|,|$|(^(?!\s*((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?:
988− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
989− (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
990− (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
991− (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
992− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
993− (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
994− (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
995− (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
996− )(?!\$))|(\#?[_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(?:(?:(\?)|(\!))\s*)?(=|:|;|,|$))))|(?<=\})
846+ (?x)(?=\}|;|,|$|(^(?!\s*((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
847+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
848+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
849+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
850+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
851+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
852+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
853+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
854+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
855+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\?\s*)?(=|:))))|(?<=\})
997856 pop: true
998857 - include: variable-initializer
999− - include: type-annotation
1000− - include: string
1001− - include: array-literal
1002− - include: numeric-literal
1003− - include: comment
1004858 - match: |-
1005− (?x)(\#?[_$[:alpha:]][_$[:alnum:]]*)(?:(\?)|(\!))?(?=\s*\s*
1006− # function assignment |
1007− (=\s*(
1008− ((async\s+)?(
1009− (function\s*[(<*]) |
1010− (function\s+) |
1011− ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
1012− )) |
1013− ((async\s*)?(
1014− ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
1015− # sure shot arrow functions even if => is on new line
1016− (
1017− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
1018− [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
1019− (
1020− ([)]\s*:) | # ():
1021− ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
1022− )
1023− ) |
1024− (
1025− [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends
1026− ) |
1027− # arrow function possible to detect only with => on same line
1028− (
1029− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
1030− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
1031− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
1032− \s*=> # arrow operator
1033− )
1034− ))
1035− )) |
1036− # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>
1037− (:\s*(
1038− (<) |
1039− ([(]\s*(
1040− ([)]) |
1041− (\.\.\.) |
1042− ([_$[:alnum:]]+\s*(
1043− ([:,?=])|
1044− ([)]\s*=>)
1045− ))
1046− ))
1047− )) |
1048− (:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
1049− (:\s*((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
1050− (:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
1051− ((async\s+)?(
1052− (function\s*[(<*]) |
1053− (function\s+) |
1054− ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
1055− )) |
1056− ((async\s*)?(
1057− ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
1058− # sure shot arrow functions even if => is on new line
1059− (
1060− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
1061− [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
1062− (
1063− ([)]\s*:) | # ():
1064− ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
1065− )
1066− ) |
1067− (
1068− [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends
1069− ) |
1070− # arrow function possible to detect only with => on same line
1071− (
1072− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
1073− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
1074− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
1075− \s*=> # arrow operator
1076− )
1077− ))
1078− )))
1079− captures:
1080− 1: meta.definition.property.tsx entity.name.function.tsx
1081− 2: keyword.operator.optional.tsx
1082− 3: keyword.operator.definiteassignment.tsx
1083− - match: '\#?[_$[:alpha:]][_$[:alnum:]]*'
1084− scope: meta.definition.property.tsx variable.object.property.tsx
1085− - match: \?
1086− scope: keyword.operator.optional.tsx
1087− - match: \!
1088− scope: keyword.operator.definiteassignment.tsx
859+ (?x)(?=((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
860+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
861+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
862+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
863+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
864+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
865+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
866+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
867+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
868+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\?\s*)?(=|:))
869+ push:
870+ - match: |-
871+ (?x)(?=[};,=]|$|(^(?!\s*((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
872+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
873+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
874+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
875+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
876+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
877+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
878+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
879+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
880+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\?\s*)?(=|:))))|(?<=\})
881+ pop: true
882+ - include: type-annotation
883+ - include: string
884+ - include: array-literal
885+ - include: numeric-literal
886+ - include: comment
887+ - match: |-
888+ (?x)([_$[:alpha:]][_$[:alnum:]]*)(\?)?(?=(\?\s*)?\s*
889+ # function assignment |
890+ (=\s*(
891+ ((async\s+)?(
892+ (function\s*[(<*]) |
893+ (function\s+) |
894+ ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
895+ )) |
896+ ((async\s*)?(
897+ ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) |
898+ # sure shot arrow functions even if => is on new line
899+ (
900+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?
901+ [(]\s*
902+ (
903+ ([)]\s*:) | # ():
904+ ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
905+ )
906+ ) |
907+ (
908+ [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends
909+ ) |
910+ # arrow function possible to detect only with => on same line
911+ (
912+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters
913+ \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters
914+ (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type
915+ \s*=> # arrow operator
916+ )
917+ ))
918+ )) |
919+ # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>
920+ (:\s*(
921+ (<) |
922+ ([(]\s*(
923+ ([)]) |
924+ (\.\.\.) |
925+ ([_$[:alnum:]]+\s*(
926+ ([:,?=])|
927+ ([)]\s*=>)
928+ ))
929+ ))
930+ )) |
931+ (:\s*((<\s*$)|([\(]\s*([\{\[]\s*)?$))) |
932+ (:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
933+ ((async\s+)?(
934+ (function\s*[(<*]) |
935+ (function\s+) |
936+ ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
937+ )) |
938+ ((async\s*)?(
939+ ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) |
940+ # sure shot arrow functions even if => is on new line
941+ (
942+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?
943+ [(]\s*
944+ (
945+ ([)]\s*:) | # ():
946+ ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
947+ )
948+ ) |
949+ (
950+ [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends
951+ ) |
952+ # arrow function possible to detect only with => on same line
953+ (
954+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters
955+ \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters
956+ (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type
957+ \s*=> # arrow operator
958+ )
959+ ))
960+ )))
961+ captures:
962+ 1: meta.definition.property.tsx entity.name.function.tsx
963+ 2: keyword.operator.optional.tsx
964+ - match: "[_$[:alpha:]][_$[:alnum:]]*"
965+ scope: meta.definition.property.tsx variable.object.property.tsx
966+ - match: \?
967+ scope: keyword.operator.optional.tsx
1089968 for-loop:
1090969 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))for(?=((\s+|(\s*\/\*([^\*]|(\*[^\/]))*\*\/\s*))await)?\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)?(\())'
1091970 captures:
@@ -1112,59 +991,43 @@ contexts:
1112991 - include: type-parameters
1113992 - include: function-parameters
1114993 - include: return-type
1115− - include: type-function-return-type
1116994 - include: decl-block
1117995 - match: \*
1118996 scope: keyword.generator.asterisk.tsx
1119997 function-call:
1120− - match: '(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\)]))\s*(?:(\?\.\s*)|(\!))?((<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?\())'
998+ - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\s*(\?\.\s*)?(<\s*(((keyof|infer)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\<\>\,\.\[=]|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\<\>\,\.\[=]|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?!=)\>)*(?!=)>\s*)?\()'
1121999 push:
1122− - match: '(?<=\))(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\)]))\s*(?:(\?\.\s*)|(\!))?((<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?\())'
1000+ - match: '(?<=\))(?!(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\s*(\?\.\s*)?(<\s*(((keyof|infer)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\<\>\,\.\[=]|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\<\>\,\.\[=]|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?!=)\>)*(?!=)>\s*)?\()'
11231001 pop: true
1124− - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))'
1002+ - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*))'
11251003 push:
11261004 - meta_scope: meta.function-call.tsx
1127− - match: '(?=\s*(?:(\?\.\s*)|(\!))?((<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?\())'
1005+ - match: '(?=\s*(\?\.\s*)?(<\s*(((keyof|infer)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\<\>\,\.\[=]|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\<\>\,\.\[=]|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?!=)\>)*(?!=)>\s*)?\()'
11281006 pop: true
1129− - include: function-call-target
1007+ - include: literal
1008+ - include: support-objects
1009+ - include: object-identifiers
1010+ - include: punctuation-accessor
1011+ - match: '(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))import(?=\s*[\(]\s*[\"\''\`]))'
1012+ scope: keyword.operator.expression.import.tsx
1013+ - match: "([_$[:alpha:]][_$[:alnum:]]*)"
1014+ scope: entity.name.function.tsx
11301015 - include: comment
1131− - include: function-call-optionals
1016+ - match: \?\.
1017+ scope: meta.function-call.tsx punctuation.accessor.optional.tsx
11321018 - include: type-arguments
11331019 - include: paren-expression
1134− - match: '(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\)]))(<\s*[\{\[\(]\s*$))'
1135− push:
1136− - match: '(?<=\>)(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\)]))(<\s*[\{\[\(]\s*$))'
1137− pop: true
1138− - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))'
1139− push:
1140− - meta_scope: meta.function-call.tsx
1141− - match: '(?=(<\s*[\{\[\(]\s*$))'
1142− pop: true
1143− - include: function-call-target
1144− - include: comment
1145− - include: function-call-optionals
1146− - include: type-arguments
1147− function-call-optionals:
1148− - match: \?\.
1149− scope: meta.function-call.tsx punctuation.accessor.optional.tsx
1150− - match: \!
1151− scope: meta.function-call.tsx keyword.operator.definiteassignment.tsx
1152− function-call-target:
1153− - include: support-function-call-identifiers
1154− - match: '(\#?[_$[:alpha:]][_$[:alnum:]]*)'
1155− scope: entity.name.function.tsx
11561020 function-declaration:
1157− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?<=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s*'
1021+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(export)\s+)?(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?<=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s*'
11581022 captures:
11591023 1: keyword.control.export.tsx
1160− 2: storage.modifier.tsx
1161− 3: storage.modifier.async.tsx
1162− 4: storage.type.function.tsx
1163− 5: keyword.generator.asterisk.tsx
1164− 6: meta.definition.function.tsx entity.name.function.tsx
1024+ 2: storage.modifier.async.tsx
1025+ 3: storage.type.function.tsx
1026+ 4: keyword.generator.asterisk.tsx
1027+ 5: meta.definition.function.tsx entity.name.function.tsx
11651028 push:
11661029 - meta_scope: meta.function.tsx
1167− - match: '(?=;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))|(?<=\})'
1030+ - match: '(?=$|^|;)|(?<=\})'
11681031 pop: true
11691032 - include: function-name
11701033 - include: function-body
@@ -1177,10 +1040,9 @@ contexts:
11771040 4: meta.definition.function.tsx entity.name.function.tsx
11781041 push:
11791042 - meta_scope: meta.function.expression.tsx
1180− - match: '(?=;)|(?<=\})'
1043+ - match: '(?<=\})'
11811044 pop: true
11821045 - include: function-name
1183− - include: single-line-comment-consuming-line-ending
11841046 - include: function-body
11851047 function-name:
11861048 - match: "[_$[:alpha:]][_$[:alnum:]]*"
@@ -1198,11 +1060,10 @@ contexts:
11981060 - include: function-parameters-body
11991061 function-parameters-body:
12001062 - include: comment
1201− - include: string
12021063 - include: decorator
12031064 - include: destructuring-parameter
12041065 - include: parameter-name
1205− - include: parameter-type-annotation
1066+ - include: type-annotation
12061067 - include: variable-initializer
12071068 - match: ","
12081069 scope: punctuation.separator.parameter.tsx
@@ -1216,11 +1077,11 @@ contexts:
12161077 ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
12171078 )) |
12181079 ((async\s*)?(
1219− ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
1080+ ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) |
12201081 # sure shot arrow functions even if => is on new line
12211082 (
1222− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
1223− [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
1083+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?
1084+ [(]\s*
12241085 (
12251086 ([)]\s*:) | # ():
12261087 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
@@ -1231,9 +1092,9 @@ contexts:
12311092 ) |
12321093 # arrow function possible to detect only with => on same line
12331094 (
1234− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
1235− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
1236− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
1095+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters
1096+ \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters
1097+ (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type
12371098 \s*=> # arrow operator
12381099 )
12391100 ))
@@ -1242,12 +1103,12 @@ contexts:
12421103 1: punctuation.accessor.tsx
12431104 2: punctuation.accessor.optional.tsx
12441105 3: entity.name.function.tsx
1245− - match: '(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(\#?[[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])'
1106+ - match: '(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])'
12461107 captures:
12471108 1: punctuation.accessor.tsx
12481109 2: punctuation.accessor.optional.tsx
12491110 3: variable.other.constant.property.tsx
1250− - match: '(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(\#?[_$[:alpha:]][_$[:alnum:]]*)'
1111+ - match: '(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*([_$[:alpha:]][_$[:alnum:]]*)'
12511112 captures:
12521113 1: punctuation.accessor.tsx
12531114 2: punctuation.accessor.optional.tsx
@@ -1256,46 +1117,15 @@ contexts:
12561117 scope: variable.other.constant.tsx
12571118 - match: "[_$[:alpha:]][_$[:alnum:]]*"
12581119 scope: variable.other.readwrite.tsx
1259− if-statement:
1260− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?=\bif\s*(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))\s*(?!\{))'
1261− push:
1262− - match: '(?=;|$|\})'
1263− pop: true
1264− - include: comment
1265− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(if)\s*(\()'
1266− captures:
1267− 1: keyword.control.conditional.tsx
1268− 2: meta.brace.round.tsx
1269− push:
1270− - match: \)
1271− captures:
1272− 0: meta.brace.round.tsx
1273− pop: true
1274− - include: expression
1275− - match: '(?<=\))\s*\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([dgimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))'
1276− captures:
1277− 0: punctuation.definition.string.begin.tsx
1278− push:
1279− - meta_scope: string.regexp.tsx
1280− - match: "(/)([dgimsuy]*)"
1281− captures:
1282− 1: punctuation.definition.string.end.tsx
1283− 2: keyword.other.tsx
1284− pop: true
1285− - include: regexp
1286− - include: statements
12871120 import-declaration:
1288− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(import)(?:\s+(type)(?!\s+from))?(?!\s*[:\(])(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
1121+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?\b(import)(?!\s*[:\(])(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
12891122 captures:
12901123 1: keyword.control.export.tsx
1291− 2: storage.modifier.tsx
1292− 3: keyword.control.import.tsx
1293− 4: keyword.control.type.tsx
1124+ 2: keyword.control.import.tsx
12941125 push:
12951126 - meta_scope: meta.import.tsx
12961127 - match: '(?<!^import|[^\._$[:alnum:]]import)(?=;|$|^)'
12971128 pop: true
1298− - include: single-line-comment-consuming-line-ending
12991129 - include: comment
13001130 - include: string
13011131 - match: '(?<=^import|[^\._$[:alnum:]]import)(?!\s*["''])'
@@ -1307,16 +1137,14 @@ contexts:
13071137 - include: import-export-declaration
13081138 - include: import-export-declaration
13091139 import-equals-declaration:
1310− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(import)(?:\s+(type))?\s+([_$[:alpha:]][_$[:alnum:]]*)\s*(=)\s*(require)\s*(\()'
1140+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?\b(import)\s+([_$[:alpha:]][_$[:alnum:]]*)\s*(=)\s*(require)\s*(\()'
13111141 captures:
13121142 1: keyword.control.export.tsx
1313− 2: storage.modifier.tsx
1314− 3: keyword.control.import.tsx
1315− 4: keyword.control.type.tsx
1316− 5: variable.other.readwrite.alias.tsx
1317− 6: keyword.operator.assignment.tsx
1318− 7: keyword.control.require.tsx
1319− 8: meta.brace.round.tsx
1143+ 2: keyword.control.import.tsx
1144+ 3: variable.other.readwrite.alias.tsx
1145+ 4: keyword.operator.assignment.tsx
1146+ 5: keyword.control.require.tsx
1147+ 6: meta.brace.round.tsx
13201148 push:
13211149 - meta_scope: meta.import-equals.external.tsx
13221150 - match: \)
@@ -1325,19 +1153,16 @@ contexts:
13251153 pop: true
13261154 - include: comment
13271155 - include: string
1328− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(import)(?:\s+(type))?\s+([_$[:alpha:]][_$[:alnum:]]*)\s*(=)\s*(?!require\b)'
1156+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?\b(import)\s+([_$[:alpha:]][_$[:alnum:]]*)\s*(=)\s*(?!require\b)'
13291157 captures:
13301158 1: keyword.control.export.tsx
1331− 2: storage.modifier.tsx
1332− 3: keyword.control.import.tsx
1333− 4: keyword.control.type.tsx
1334− 5: variable.other.readwrite.alias.tsx
1335− 6: keyword.operator.assignment.tsx
1159+ 2: keyword.control.import.tsx
1160+ 3: variable.other.readwrite.alias.tsx
1161+ 4: keyword.operator.assignment.tsx
13361162 push:
13371163 - meta_scope: meta.import-equals.internal.tsx
13381164 - match: (?=;|$|^)
13391165 pop: true
1340− - include: single-line-comment-consuming-line-ending
13411166 - include: comment
13421167 - match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))'
13431168 captures:
@@ -1359,7 +1184,7 @@ contexts:
13591184 - include: import-export-clause
13601185 import-export-clause:
13611186 - include: comment
1362− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bdefault)|(\*)|(\b[_$[:alpha:]][_$[:alnum:]]*))\s+(as)\s+(?:(default(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|([_$[:alpha:]][_$[:alnum:]]*))'
1187+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bdefault)|(\*)|(\b[_$[:alpha:]][_$[:alnum:]]*))\s+(as)\s+(?:(\bdefault(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|(\b[_$[:alpha:]][_$[:alnum:]]*))'
13631188 captures:
13641189 1: keyword.control.default.tsx
13651190 2: constant.language.import-export-all.tsx
@@ -1411,9 +1236,6 @@ contexts:
14111236 2: keyword.operator.type.modifier.tsx
14121237 3: keyword.operator.optional.tsx
14131238 pop: true
1414− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as)\s+'
1415− captures:
1416− 1: keyword.control.as.tsx
14171239 - include: type
14181240 inline-tags:
14191241 - match: '(\[)[^\]]+(\])(?={@(?:link|linkcode|linkplain|tutorial))'
@@ -1445,16 +1267,15 @@ contexts:
14451267 captures:
14461268 1: keyword.operator.expression.instanceof.tsx
14471269 push:
1448− - match: '(?<=\))|(?=[;),}\]:?\-\+\>]|\|\||\&\&|\!\=\=|$|(([\&\~\^\|]\s*)?[_$[:alpha:]][_$[:alnum:]]*\s+instanceof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))'
1270+ - match: '(?<=\))|(?=[;),}\]:?]|\|\||\&\&|$|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))'
14491271 pop: true
14501272 - include: type
14511273 interface-declaration:
1452− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(?:(abstract)\s+)?\b(interface)\b(?=\s+|/[/*])'
1274+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(export)\s+)?\b(?:(abstract)\s+)?\b(interface)\b(?=\s+|/[/*])'
14531275 captures:
14541276 1: keyword.control.export.tsx
14551277 2: storage.modifier.tsx
1456− 3: storage.modifier.tsx
1457− 4: storage.type.interface.tsx
1278+ 3: storage.type.interface.tsx
14581279 push:
14591280 - meta_scope: meta.interface.tsx
14601281 - match: '(?<=\})'
@@ -1502,7 +1323,7 @@ contexts:
15021323 captures:
15031324 0: punctuation.section.embedded.begin.tsx
15041325 push:
1505− - meta_content_scope: meta.embedded.expression.tsx
1326+ - meta_scope: meta.embedded.expression.tsx
15061327 - match: '\}'
15071328 captures:
15081329 0: punctuation.section.embedded.end.tsx
@@ -1531,10 +1352,10 @@ contexts:
15311352 pop: true
15321353 - include: jsx-entities
15331354 jsx-tag:
1534− - match: '(?=(<)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>))'
1355+ - match: '(?=(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>))'
15351356 push:
15361357 - meta_scope: meta.tag.tsx
1537− - match: '(/>)|(?:(</)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))?\s*(>))'
1358+ - match: '(/>)|(?:(</)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))?\s*(>))'
15381359 captures:
15391360 1: punctuation.definition.tag.end.tsx
15401361 2: punctuation.definition.tag.begin.tsx
@@ -1544,7 +1365,7 @@ contexts:
15441365 6: support.class.component.tsx
15451366 7: punctuation.definition.tag.end.tsx
15461367 pop: true
1547− - match: '(<)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>)'
1368+ - match: '(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>)'
15481369 captures:
15491370 1: punctuation.definition.tag.begin.tsx
15501371 2: entity.name.tag.namespace.tsx
@@ -1572,8 +1393,8 @@ contexts:
15721393 - match: |-
15731394 (?x)
15741395 \s*
1575− (?:([_$[:alpha:]][-_$[:alnum:].]*)(:))?
1576− ([_$[:alpha:]][-_$[:alnum:]]*)
1396+ (?:([_$[:alpha:]][-$[:alnum:].]*)(:))?
1397+ ([_$[:alpha:]][-$[:alnum:]]*)
15771398 (?=\s|=|/?>|/\*|//)
15781399 captures:
15791400 1: entity.other.attribute-name.namespace.tsx
@@ -1598,15 +1419,15 @@ contexts:
15981419 jsx-tag-in-expression:
15991420 - match: |-
16001421 (?x)
1601− (?<!\+\+|--)(?<=[({\[,?=>:*]|&&|\|\||\?|\*\/|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^yield|[^\._$[:alnum:]]yield|^)\s*
1422+ (?<!\+\+|--)(?<=[({\[,?=>:*]|&&|\|\||\?|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^yield|[^\._$[:alnum:]]yield|^)\s*
16021423 (?!<\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s+[^=>])|,)) # look ahead is not type parameter of arrow
1603− (?=(<)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>))
1424+ (?=(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>))
16041425 push:
1605− - match: '(?!(<)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>))'
1426+ - match: '(?!(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>))'
16061427 pop: true
16071428 - include: jsx-tag
16081429 jsx-tag-without-attributes:
1609− - match: '(<)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))?\s*(>)'
1430+ - match: '(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))?\s*(>)'
16101431 captures:
16111432 1: punctuation.definition.tag.begin.tsx
16121433 2: entity.name.tag.namespace.tsx
@@ -1617,7 +1438,7 @@ contexts:
16171438 push:
16181439 - meta_scope: meta.tag.without-attributes.tsx
16191440 - meta_content_scope: meta.jsx.children.tsx
1620− - match: '(</)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))?\s*(>)'
1441+ - match: '(</)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))?\s*(>)'
16211442 captures:
16221443 1: punctuation.definition.tag.begin.tsx
16231444 2: entity.name.tag.namespace.tsx
@@ -1628,9 +1449,9 @@ contexts:
16281449 pop: true
16291450 - include: jsx-children
16301451 jsx-tag-without-attributes-in-expression:
1631− - match: '(?<!\+\+|--)(?<=[({\[,?=>:*]|&&|\|\||\?|\*\/|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^yield|[^\._$[:alnum:]]yield|^)\s*(?=(<)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))?\s*(>))'
1452+ - match: '(?<!\+\+|--)(?<=[({\[,?=>:*]|&&|\|\||\?|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^yield|[^\._$[:alnum:]]yield|^)\s*(?=(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))?\s*(>))'
16321453 push:
1633− - match: '(?!(<)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))?\s*(>))'
1454+ - match: '(?!(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))?\s*(>))'
16341455 pop: true
16351456 - include: jsx-tag-without-attributes
16361457 label:
@@ -1656,27 +1477,25 @@ contexts:
16561477 - include: this-literal
16571478 - include: super-literal
16581479 method-declaration:
1659− - match: '(?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?\s*\b(constructor)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
1480+ - match: '(?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?\s*\b(constructor)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
16601481 captures:
16611482 1: storage.modifier.tsx
16621483 2: storage.modifier.tsx
1663− 3: storage.modifier.tsx
1664− 4: storage.modifier.async.tsx
1665− 5: storage.type.tsx
1484+ 3: storage.modifier.async.tsx
1485+ 4: storage.type.tsx
16661486 push:
16671487 - meta_scope: meta.method.declaration.tsx
16681488 - match: '(?=\}|;|,|$)|(?<=\})'
16691489 pop: true
16701490 - include: method-declaration-name
16711491 - include: function-body
1672− - match: '(?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:(?:\s*\b(new)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|(?:(\*)\s*)?)(?=\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(])'
1492+ - match: '(?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:(?:\s*\b(new)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|(?:(\*)\s*)?)(?=\s*[\(\<])'
16731493 captures:
16741494 1: storage.modifier.tsx
16751495 2: storage.modifier.tsx
1676− 3: storage.modifier.tsx
1677− 4: storage.modifier.async.tsx
1678− 5: keyword.operator.new.tsx
1679− 6: keyword.generator.asterisk.tsx
1496+ 3: storage.modifier.async.tsx
1497+ 4: keyword.operator.new.tsx
1498+ 5: keyword.generator.asterisk.tsx
16801499 push:
16811500 - meta_scope: meta.method.declaration.tsx
16821501 - match: '(?=\}|;|,|$)|(?<=\})'
@@ -1684,23 +1503,22 @@ contexts:
16841503 - include: method-declaration-name
16851504 - include: function-body
16861505 - match: |-
1687− (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?:
1688− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1689− (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1690− (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1691− (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1692− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1693− (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1694− (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1695− (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1696− )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(])
1506+ (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
1507+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
1508+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
1509+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
1510+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
1511+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
1512+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
1513+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
1514+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
1515+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*[\(\<])
16971516 captures:
16981517 1: storage.modifier.tsx
16991518 2: storage.modifier.tsx
1700− 3: storage.modifier.tsx
1701− 4: storage.modifier.async.tsx
1702− 5: storage.type.property.tsx
1703− 6: keyword.generator.asterisk.tsx
1519+ 3: storage.modifier.async.tsx
1520+ 4: storage.type.property.tsx
1521+ 5: keyword.generator.asterisk.tsx
17041522 push:
17051523 - meta_scope: meta.method.declaration.tsx
17061524 - match: '(?=\}|;|,|$)|(?<=\})'
@@ -1709,16 +1527,16 @@ contexts:
17091527 - include: function-body
17101528 method-declaration-name:
17111529 - match: |-
1712− (?x)(?=((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?:
1713− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1714− (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1715− (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1716− (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1717− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1718− (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1719− (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1720− (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1721− )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??)\s*[\(\<])
1530+ (?x)(?=((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
1531+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
1532+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
1533+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
1534+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
1535+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
1536+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
1537+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
1538+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
1539+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??)\s*[\(\<])
17221540 push:
17231541 - match: (?=\(|\<)
17241542 pop: true
@@ -1730,14 +1548,13 @@ contexts:
17301548 - match: \?
17311549 scope: keyword.operator.optional.tsx
17321550 namespace-declaration:
1733− - match: '(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(namespace|module)\s+(?=[_$[:alpha:]"''`]))'
1551+ - match: '(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?\b(namespace|module)\s+(?=[_$[:alpha:]"''`]))'
17341552 captures:
17351553 1: keyword.control.export.tsx
1736− 2: storage.modifier.tsx
1737− 3: storage.type.namespace.tsx
1554+ 2: storage.type.namespace.tsx
17381555 push:
17391556 - meta_scope: meta.namespace.declaration.tsx
1740− - match: '(?<=\})|(?=;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
1557+ - match: '(?<=\})|(?=;|^\s*abstract\b|^\s*async\b|^\s*class\b|^\s*const\b|^\s*declare\b|^\s*enum\b|^\s*export\b|^\s*function\b|^\s*import\b|^\s*interface\b|^\s*let\b|^\s*module\b|^\s*namespace\b|^\s*return\b|^\s*type\b|^\s*var\b)'
17411558 pop: true
17421559 - include: comment
17431560 - include: string
@@ -1751,53 +1568,41 @@ contexts:
17511568 1: keyword.operator.new.tsx
17521569 push:
17531570 - meta_scope: new.expr.tsx
1754− - match: '(?<=\))|(?=[;),}\]:?\-\+\>]|\|\||\&\&|\!\=\=|$|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))new(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))'
1571+ - match: '(?<=\))|(?=[;),}\]:]|\|\||\&\&|$|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))new(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))'
17551572 pop: true
1756− - include: expression
1573+ - include: paren-expression
1574+ - include: class-declaration
1575+ - include: type
17571576 null-literal:
17581577 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))null(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
17591578 scope: constant.language.null.tsx
17601579 numeric-literal:
1761− - match: '\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$)'
1580+ - match: '\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$)'
17621581 scope: constant.numeric.hex.tsx
1763− captures:
1764− 1: storage.type.numeric.bigint.tsx
1765− - match: '\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$)'
1582+ - match: '\b(?<!\$)0(b|B)[01][01_]*\b(?!\$)'
17661583 scope: constant.numeric.binary.tsx
1767− captures:
1768− 1: storage.type.numeric.bigint.tsx
1769− - match: '\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$)'
1584+ - match: '\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$)'
17701585 scope: constant.numeric.octal.tsx
1771− captures:
1772− 1: storage.type.numeric.bigint.tsx
17731586 - match: |-
17741587 (?x)
17751588 (?<!\$)(?:
1776− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1777− (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1778− (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1779− (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1780− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1781− (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1782− (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1783− (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1589+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
1590+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
1591+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
1592+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
1593+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
1594+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
1595+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
1596+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
17841597 )(?!\$)
17851598 captures:
17861599 0: constant.numeric.decimal.tsx
17871600 1: meta.delimiter.decimal.period.tsx
1788− 2: storage.type.numeric.bigint.tsx
1601+ 2: meta.delimiter.decimal.period.tsx
17891602 3: meta.delimiter.decimal.period.tsx
1790− 4: storage.type.numeric.bigint.tsx
1603+ 4: meta.delimiter.decimal.period.tsx
17911604 5: meta.delimiter.decimal.period.tsx
1792− 6: storage.type.numeric.bigint.tsx
1793− 7: storage.type.numeric.bigint.tsx
1794− 8: meta.delimiter.decimal.period.tsx
1795− 9: storage.type.numeric.bigint.tsx
1796− 10: meta.delimiter.decimal.period.tsx
1797− 11: storage.type.numeric.bigint.tsx
1798− 12: meta.delimiter.decimal.period.tsx
1799− 13: storage.type.numeric.bigint.tsx
1800− 14: storage.type.numeric.bigint.tsx
1605+ 6: meta.delimiter.decimal.period.tsx
18011606 numericConstant-literal:
18021607 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))NaN(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
18031608 scope: constant.language.nan.tsx
@@ -1806,16 +1611,16 @@ contexts:
18061611 object-binding-element:
18071612 - include: comment
18081613 - match: |-
1809− (?x)(?=((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?:
1810− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1811− (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1812− (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1813− (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1814− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1815− (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1816− (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1817− (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1818− )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))
1614+ (?x)(?=((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
1615+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
1616+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
1617+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
1618+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
1619+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
1620+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
1621+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
1622+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
1623+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))
18191624 push:
18201625 - match: '(?=,|\})'
18211626 pop: true
@@ -1828,16 +1633,16 @@ contexts:
18281633 object-binding-element-const:
18291634 - include: comment
18301635 - match: |-
1831− (?x)(?=((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?:
1832− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1833− (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1834− (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1835− (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1836− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1837− (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1838− (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1839− (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1840− )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))
1636+ (?x)(?=((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
1637+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
1638+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
1639+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
1640+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
1641+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
1642+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
1643+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
1644+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
1645+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))
18411646 push:
18421647 - match: '(?=,|\})'
18431648 pop: true
@@ -1849,16 +1654,16 @@ contexts:
18491654 - include: punctuation-comma
18501655 object-binding-element-propertyName:
18511656 - match: |-
1852− (?x)(?=((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?:
1853− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1854− (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1855− (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1856− (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1857− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1858− (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1859− (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1860− (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1861− )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))
1657+ (?x)(?=((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
1658+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
1659+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
1660+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
1661+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
1662+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
1663+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
1664+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
1665+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
1666+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))
18621667 push:
18631668 - match: (:)
18641669 captures:
@@ -1896,9 +1701,9 @@ contexts:
18961701 scope: support.class.tsx
18971702 - match: |-
18981703 (?x)(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(?:
1899− (\#?[[:upper:]][_$[:digit:][:upper:]]*) |
1900− (\#?[_$[:alpha:]][_$[:alnum:]]*)
1901− )(?=\s*\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*)
1704+ ([[:upper:]][_$[:digit:][:upper:]]*) |
1705+ ([_$[:alpha:]][_$[:alnum:]]*)
1706+ )(?=\s*\??\.\s*[_$[:alpha:]][_$[:alnum:]]*)
19021707 captures:
19031708 1: punctuation.accessor.tsx
19041709 2: punctuation.accessor.optional.tsx
@@ -1908,7 +1713,7 @@ contexts:
19081713 (?x)(?:
19091714 ([[:upper:]][_$[:digit:][:upper:]]*) |
19101715 ([_$[:alpha:]][_$[:alnum:]]*)
1911− )(?=\s*\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*)
1716+ )(?=\s*\??\.\s*[_$[:alpha:]][_$[:alnum:]]*)
19121717 captures:
19131718 1: variable.other.constant.object.tsx
19141719 2: variable.other.object.tsx
@@ -1925,16 +1730,16 @@ contexts:
19251730 - include: object-member
19261731 object-literal-method-declaration:
19271732 - match: |-
1928− (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?:
1929− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1930− (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1931− (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1932− (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1933− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1934− (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1935− (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1936− (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1937− )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(])
1733+ (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
1734+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
1735+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
1736+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
1737+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
1738+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
1739+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
1740+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
1741+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
1742+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*[\(\<])
19381743 captures:
19391744 1: storage.modifier.async.tsx
19401745 2: storage.type.property.tsx
@@ -1946,16 +1751,16 @@ contexts:
19461751 - include: method-declaration-name
19471752 - include: function-body
19481753 - match: |-
1949− (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?:
1950− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1951− (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1952− (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1953− (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1954− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1955− (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1956− (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1957− (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1958− )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(])
1754+ (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
1755+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
1756+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
1757+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
1758+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
1759+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
1760+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
1761+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
1762+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
1763+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*[\(\<])
19591764 captures:
19601765 1: storage.modifier.async.tsx
19611766 2: storage.type.property.tsx
@@ -1972,56 +1777,37 @@ contexts:
19721777 - meta_scope: meta.object.member.tsx meta.object-literal.key.tsx
19731778 - match: '(?=:)|((?<=[\]])(?=\s*[\(\<]))'
19741779 pop: true
1975− - include: comment
19761780 - include: array-literal
1977− - match: '(?=[\''\"\`])'
1781+ - match: '(?=[\''\"])'
19781782 push:
19791783 - meta_scope: meta.object.member.tsx meta.object-literal.key.tsx
1980− - match: '(?=:)|((?<=[\''\"\`])(?=((\s*[\(\<,}])|(\s+(as)\s+))))'
1784+ - match: '(?=:)|((?<=[\''\"])(?=\s*[\(\<]))'
19811785 pop: true
1982− - include: comment
19831786 - include: string
1984− - match: |-
1985− (?x)(?=(\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?:
1986− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1987− (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1988− (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1989− (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1990− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1991− (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1992− (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1993− (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1994− )(?!\$)))
1995− push:
1996− - meta_scope: meta.object.member.tsx meta.object-literal.key.tsx
1997− - match: '(?=:)|(?=\s*([\(\<,}])|(\s+as\s+))'
1998− pop: true
1999− - include: comment
2000− - include: numeric-literal
2001− - match: '(?<=[\]\''\"\`])(?=\s*[\(\<])'
1787+ - match: '(?<=[\]\''\"])(?=\s*[\(\<])'
20021788 push:
20031789 - meta_scope: meta.method.declaration.tsx
20041790 - match: '(?=\}|;|,)|(?<=\})'
20051791 pop: true
20061792 - include: function-body
2007− - match: '(?![_$[:alpha:]])([[:digit:]]+)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:)'
1793+ - match: '(?![_$[:alpha:]])([[:digit:]]+)\s*(?=:)'
20081794 scope: meta.object.member.tsx
20091795 captures:
20101796 0: meta.object-literal.key.tsx
20111797 1: constant.numeric.decimal.tsx
20121798 - match: |-
2013− (?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:(\s*\/\*([^\*]|(\*[^\/]))*\*\/)*\s*(
1799+ (?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\s*(?=:\s*(
20141800 ((async\s+)?(
20151801 (function\s*[(<*]) |
20161802 (function\s+) |
20171803 ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
20181804 )) |
20191805 ((async\s*)?(
2020− ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
1806+ ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) |
20211807 # sure shot arrow functions even if => is on new line
20221808 (
2023− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
2024− [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
1809+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?
1810+ [(]\s*
20251811 (
20261812 ([)]\s*:) | # ():
20271813 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
@@ -2032,9 +1818,9 @@ contexts:
20321818 ) |
20331819 # arrow function possible to detect only with => on same line
20341820 (
2035− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
2036− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
2037− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
1821+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters
1822+ \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters
1823+ (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type
20381824 \s*=> # arrow operator
20391825 )
20401826 ))
@@ -2043,7 +1829,7 @@ contexts:
20431829 captures:
20441830 0: meta.object-literal.key.tsx
20451831 1: entity.name.function.tsx
2046− - match: '(?:[_$[:alpha:]][_$[:alnum:]]*)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:)'
1832+ - match: '(?:[_$[:alpha:]][_$[:alnum:]]*)\s*(?=:)'
20471833 scope: meta.object.member.tsx
20481834 captures:
20491835 0: meta.object-literal.key.tsx
@@ -2055,27 +1841,14 @@ contexts:
20551841 - match: '(?=,|\})'
20561842 pop: true
20571843 - include: expression
2058− - match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(?=,|\}|$|\/\/|\/\*)'
1844+ - match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(?=,|\}|$)'
20591845 scope: meta.object.member.tsx
20601846 captures:
20611847 1: variable.other.readwrite.tsx
2062− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as)\s+(const)(?=\s*([,}]|$))'
2063− scope: meta.object.member.tsx
2064− captures:
2065− 1: keyword.control.as.tsx
2066− 2: storage.modifier.tsx
2067− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as)\s+'
2068− captures:
2069− 1: keyword.control.as.tsx
2070− push:
2071− - meta_scope: meta.object.member.tsx
2072− - match: '(?=[;),}\]:?\-\+\>]|\|\||\&\&|\!\=\=|$|^|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as)\s+))'
2073− pop: true
2074− - include: type
20751848 - match: '(?=[_$[:alpha:]][_$[:alnum:]]*\s*=)'
20761849 push:
20771850 - meta_scope: meta.object.member.tsx
2078− - match: '(?=,|\}|$|\/\/|\/\*)'
1851+ - match: '(?=,|\}|$)'
20791852 pop: true
20801853 - include: expression
20811854 - match: ":"
@@ -2085,7 +1858,7 @@ contexts:
20851858 - meta_scope: meta.object.member.tsx
20861859 - match: '(?=,|\})'
20871860 pop: true
2088− - match: '(?<=:)\s*(async)?(?=\s*(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))'
1861+ - match: '(?<=:)\s*(async)?(?=\s*(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)\(\s*([\{\[]\s*)?$)'
20891862 captures:
20901863 1: storage.modifier.async.tsx
20911864 push:
@@ -2101,7 +1874,7 @@ contexts:
21011874 0: meta.brace.round.tsx
21021875 pop: true
21031876 - include: expression-inside-possibly-arrow-parens
2104− - match: '(?<=:)\s*(async)?\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))'
1877+ - match: '(?<=:)\s*(async)?\s*(\()(?=\s*([\{\[]\s*)?$)'
21051878 captures:
21061879 1: storage.modifier.async.tsx
21071880 2: meta.brace.round.tsx
@@ -2111,23 +1884,6 @@ contexts:
21111884 0: meta.brace.round.tsx
21121885 pop: true
21131886 - include: expression-inside-possibly-arrow-parens
2114− - match: (?<=:)\s*(async)?\s*(?=\<\s*$)
2115− captures:
2116− 1: storage.modifier.async.tsx
2117− push:
2118− - match: (?<=\>)
2119− pop: true
2120− - include: type-parameters
2121− - match: '(?<=\>)\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))'
2122− captures:
2123− 1: meta.brace.round.tsx
2124− push:
2125− - match: \)
2126− captures:
2127− 0: meta.brace.round.tsx
2128− pop: true
2129− - include: expression-inside-possibly-arrow-parens
2130− - include: possibly-arrow-return-type
21311887 - include: expression
21321888 - include: punctuation-comma
21331889 parameter-array-binding-pattern:
@@ -2145,18 +1901,16 @@ contexts:
21451901 parameter-binding-element:
21461902 - include: comment
21471903 - include: string
2148− - include: numeric-literal
2149− - include: regex
21501904 - include: parameter-object-binding-pattern
21511905 - include: parameter-array-binding-pattern
21521906 - include: destructuring-parameter-rest
21531907 - include: variable-initializer
21541908 parameter-name:
2155− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|protected|private|readonly)\s+(?=(override|public|protected|private|readonly)\s+)'
1909+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|protected|private|readonly)\s+(?=(public|protected|private|readonly)\s+)'
21561910 captures:
21571911 1: storage.modifier.tsx
21581912 - match: |-
2159− (?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*
1913+ (?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*
21601914 # function assignment |
21611915 (=\s*(
21621916 ((async\s+)?(
@@ -2165,11 +1919,11 @@ contexts:
21651919 ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
21661920 )) |
21671921 ((async\s*)?(
2168− ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
1922+ ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) |
21691923 # sure shot arrow functions even if => is on new line
21701924 (
2171− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
2172− [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
1925+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?
1926+ [(]\s*
21731927 (
21741928 ([)]\s*:) | # ():
21751929 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
@@ -2180,9 +1934,9 @@ contexts:
21801934 ) |
21811935 # arrow function possible to detect only with => on same line
21821936 (
2183− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
2184− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
2185− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
1937+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters
1938+ \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters
1939+ (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type
21861940 \s*=> # arrow operator
21871941 )
21881942 ))
@@ -2199,20 +1953,19 @@ contexts:
21991953 ))
22001954 ))
22011955 )) |
2202− (:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
2203− (:\s*((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
2204− (:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
1956+ (:\s*((<\s*$)|([\(]\s*([\{\[]\s*)?$))) |
1957+ (:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
22051958 ((async\s+)?(
22061959 (function\s*[(<*]) |
22071960 (function\s+) |
22081961 ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
22091962 )) |
22101963 ((async\s*)?(
2211− ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
1964+ ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) |
22121965 # sure shot arrow functions even if => is on new line
22131966 (
2214− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
2215− [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
1967+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?
1968+ [(]\s*
22161969 (
22171970 ([)]\s*:) | # ():
22181971 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
@@ -2223,9 +1976,9 @@ contexts:
22231976 ) |
22241977 # arrow function possible to detect only with => on same line
22251978 (
2226− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
2227− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
2228− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
1979+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters
1980+ \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters
1981+ (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type
22291982 \s*=> # arrow operator
22301983 )
22311984 ))
@@ -2236,7 +1989,7 @@ contexts:
22361989 3: entity.name.function.tsx variable.language.this.tsx
22371990 4: entity.name.function.tsx
22381991 5: keyword.operator.optional.tsx
2239− - match: '(?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)'
1992+ - match: '(?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)'
22401993 captures:
22411994 1: storage.modifier.tsx
22421995 2: keyword.operator.rest.tsx
@@ -2246,16 +1999,16 @@ contexts:
22461999 parameter-object-binding-element:
22472000 - include: comment
22482001 - match: |-
2249− (?x)(?=((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?:
2250− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
2251− (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
2252− (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
2253− (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
2254− (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
2255− (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
2256− (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
2257− (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
2258− )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))
2002+ (?x)(?=((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
2003+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
2004+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
2005+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
2006+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
2007+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
2008+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
2009+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
2010+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
2011+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))
22592012 push:
22602013 - match: '(?=,|\})'
22612014 pop: true
@@ -2276,15 +2029,6 @@ contexts:
22762029 0: punctuation.definition.binding-pattern.object.tsx
22772030 pop: true
22782031 - include: parameter-object-binding-element
2279− parameter-type-annotation:
2280− - match: (:)
2281− captures:
2282− 1: keyword.operator.type.annotation.tsx
2283− push:
2284− - meta_scope: meta.type.annotation.tsx
2285− - match: "(?=[,)])|(?==[^>])"
2286− pop: true
2287− - include: type
22882032 paren-expression:
22892033 - match: \(
22902034 captures:
@@ -2296,14 +2040,14 @@ contexts:
22962040 pop: true
22972041 - include: expression
22982042 paren-expression-possibly-arrow:
2299− - match: '(?<=[(=,])\s*(async)?(?=\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))'
2043+ - match: '(?<=[(=,])\s*(async)?(?=\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*))?\(\s*[\{\[]\s*$)'
23002044 captures:
23012045 1: storage.modifier.async.tsx
23022046 push:
23032047 - match: (?<=\))
23042048 pop: true
23052049 - include: paren-expression-possibly-arrow-with-typeparameters
2306− - match: '(?<=[(=,]|=>|^return|[^\._$[:alnum:]]return)\s*(async)?(?=\s*((((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?\()|(<))\s*$)'
2050+ - match: '(?<=[(=,]|=>)\s*(async)?(?=\s*((((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*))?\()|(<))\s*$)'
23072051 captures:
23082052 1: storage.modifier.async.tsx
23092053 push:
@@ -2323,7 +2067,7 @@ contexts:
23232067 pop: true
23242068 - include: expression-inside-possibly-arrow-parens
23252069 possibly-arrow-return-type:
2326− - match: '(?<=\)|^)\s*(:)(?=\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*=>)'
2070+ - match: '(?<=\))\s*(:)(?=\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+\s*=>)'
23272071 captures:
23282072 1: meta.arrow.tsx meta.return.type.arrow.tsx keyword.operator.type.annotation.tsx
23292073 push:
@@ -2370,23 +2114,23 @@ contexts:
23702114 pop: true
23712115 - include: string-character-escape
23722116 regex:
2373− - match: '(?<!\+\+|--|})(?<=[=(:,\[?+!]|^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case|=>|&&|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[\()]|\\.|\[([^\]\\]|\\.)+\]|\(([^\)\\]|\\.)+\))+\/([dgimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))'
2117+ - match: '(?<!\+\+|--|})(?<=[=(:,\[?+!]|^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case|=>|&&|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/[gimsuy]*(?!\s*[a-zA-Z0-9_$]))'
23742118 captures:
23752119 1: punctuation.definition.string.begin.tsx
23762120 push:
23772121 - meta_scope: string.regexp.tsx
2378− - match: "(/)([dgimsuy]*)"
2122+ - match: "(/)([gimsuy]*)"
23792123 captures:
23802124 1: punctuation.definition.string.end.tsx
23812125 2: keyword.other.tsx
23822126 pop: true
23832127 - include: regexp
2384− - match: '((?<![_$[:alnum:])\]]|\+\+|--|}|\*\/)|((?<=^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case))\s*)\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([dgimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))'
2128+ - match: '(?<![_$[:alnum:])\]]|\+\+|--|})\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/[gimsuy]*(?!\s*[a-zA-Z0-9_$]))'
23852129 captures:
23862130 0: punctuation.definition.string.begin.tsx
23872131 push:
23882132 - meta_scope: string.regexp.tsx
2389− - match: "(/)([dgimsuy]*)"
2133+ - match: "(/)([gimsuy]*)"
23902134 captures:
23912135 1: punctuation.definition.string.end.tsx
23922136 2: keyword.other.tsx
@@ -2486,24 +2230,10 @@ contexts:
24862230 - include: type-object
24872231 - include: type-predicate-operator
24882232 - include: type
2489− shebang:
2490− - match: \A(#!).*(?=$)
2491− scope: comment.line.shebang.tsx
2492− captures:
2493− 1: punctuation.definition.comment.tsx
2494− single-line-comment-consuming-line-ending:
2495− - match: '(^[ \t]+)?((//)(?:\s*((@)internal)(?=\s|$))?)'
2496− captures:
2497− 1: punctuation.whitespace.comment.leading.tsx
2498− 2: comment.line.double-slash.tsx
2499− 3: punctuation.definition.comment.tsx
2500− 4: storage.type.internaldeclaration.tsx
2501− 5: punctuation.decorator.internaldeclaration.tsx
2502− push:
2503− - meta_content_scope: comment.line.double-slash.tsx
2504− - match: (?=^)
2505− pop: true
25062233 statements:
2234+ - include: string
2235+ - include: template
2236+ - include: comment
25072237 - include: declaration
25082238 - include: control-statement
25092239 - include: after-operator-block-as-object-literal
@@ -2511,31 +2241,21 @@ contexts:
25112241 - include: label
25122242 - include: expression
25132243 - include: punctuation-semicolon
2514− - include: string
2515− - include: comment
25162244 string:
25172245 - include: qstring-single
25182246 - include: qstring-double
2519− - include: template
25202247 string-character-escape:
2521− - match: '\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\{[0-9A-Fa-f]+\}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)'
2248+ - match: '\\(x[0-9A-Fa-f]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)'
25222249 scope: constant.character.escape.tsx
25232250 super-literal:
25242251 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))super\b(?!\$)'
25252252 scope: variable.language.super.tsx
2526− support-function-call-identifiers:
2527− - include: literal
2528− - include: support-objects
2529− - include: object-identifiers
2530− - include: punctuation-accessor
2531− - match: '(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))import(?=\s*[\(]\s*[\"\''\`]))'
2532− scope: keyword.operator.expression.import.tsx
25332253 support-objects:
25342254 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(arguments)\b(?!\$)'
25352255 scope: variable.language.arguments.tsx
25362256 - match: |-
2537− (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(Array|ArrayBuffer|Atomics|BigInt|BigInt64Array|BigUint64Array|Boolean|DataView|Date|Float32Array
2538− |Float64Array|Function|Generator|GeneratorFunction|Int8Array|Int16Array|Int32Array|Intl|Map|Number|Object|Proxy
2257+ (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(Array|ArrayBuffer|Atomics|Boolean|DataView|Date|Float32Array|Float64Array|Function|Generator
2258+ |GeneratorFunction|Int8Array|Int16Array|Int32Array|Intl|Map|Number|Object|Proxy
25392259 |Reflect|RegExp|Set|SharedArrayBuffer|SIMD|String|Symbol|TypedArray
25402260 |Uint8Array|Uint16Array|Uint32Array|Uint8ClampedArray|WeakMap|WeakSet)\b(?!\$)
25412261 scope: support.class.builtin.tsx
@@ -2589,9 +2309,9 @@ contexts:
25892309 4: support.variable.property.target.tsx
25902310 - match: |-
25912311 (?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s* (?:
2592− (?:(constructor|length|prototype|__proto__)\b(?!\$|\s*(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?\())
2312+ (constructor|length|prototype|__proto__)
25932313 |
2594− (?:(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\b(?!\$)))
2314+ (EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY))\b(?!\$)
25952315 captures:
25962316 1: punctuation.accessor.tsx
25972317 2: punctuation.accessor.optional.tsx
@@ -2695,7 +2415,7 @@ contexts:
26952415 |siblingBelow|size|source|specified|standby|start|status|statusbar|statusText|style|styleSheets|suffixes|summary
26962416 |systemId|systemLanguage|tagName|tags|target|tBodies|text|textAlign|textDecoration|textIndent|textTransform|tFoot|tHead
26972417 |title|toolbar|top|type|undefined|uniqueID|updateInterval|URL|URLUnencoded|useMap|userAgent|userLanguage|userProfile
2698− |vAlign|value|valueType|vendor|vendorSub|version|visibility|vspace|whiteSpace|width|X[MS]LDocument|zIndex))\b(?!\$|\s*(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?\()
2418+ |vAlign|value|valueType|vendor|vendorSub|version|visibility|vspace|whiteSpace|width|X[MS]LDocument|zIndex))\b(?!\$|\s*(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?\()
26992419 captures:
27002420 1: punctuation.accessor.tsx
27012421 2: punctuation.accessor.optional.tsx
@@ -2819,7 +2539,6 @@ contexts:
28192539 captures:
28202540 0: punctuation.definition.block.tsx
28212541 pop: true
2822− - include: comment
28232542 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(switch)\s*(\()'
28242543 captures:
28252544 1: keyword.control.switch.tsx
@@ -2862,34 +2581,7 @@ contexts:
28622581 0: case-clause.expr.tsx punctuation.definition.section.case-statement.tsx
28632582 - include: statements
28642583 template:
2865− - include: template-call
2866− - match: "([_$[:alpha:]][_$[:alnum:]]*)?(`)"
2867− captures:
2868− 1: entity.name.function.tagged-template.tsx
2869− 2: punctuation.definition.string.template.begin.tsx
2870− push:
2871− - meta_scope: string.template.tsx
2872− - match: "`"
2873− captures:
2874− 0: punctuation.definition.string.template.end.tsx
2875− pop: true
2876− - include: template-substitution-element
2877− - include: string-character-escape
2878− template-call:
2879− - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)(<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?`)'
2880− push:
2881− - meta_scope: string.template.tsx
2882− - match: (?=`)
2883− pop: true
2884− - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*))'
2885− push:
2886− - match: '(?=(<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?`)'
2887− pop: true
2888− - include: support-function-call-identifiers
2889− - match: "([_$[:alpha:]][_$[:alnum:]]*)"
2890− scope: entity.name.function.tagged-template.tsx
2891− - include: type-arguments
2892− - match: '([_$[:alpha:]][_$[:alnum:]]*)?\s*(?=(<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)`)'
2584+ - match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(?=(<\s*(((keyof|infer)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\<\>\,\.\[=]|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\<\>\,\.\[=]|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?!=)\>)*(?!=)>\s*)`)'
28932585 captures:
28942586 1: entity.name.function.tagged-template.tsx
28952587 push:
@@ -2897,20 +2589,6 @@ contexts:
28972589 - match: (?=`)
28982590 pop: true
28992591 - include: type-arguments
2900− template-substitution-element:
2901− - match: '\$\{'
2902− captures:
2903− 0: punctuation.definition.template-expression.begin.tsx
2904− push:
2905− - meta_scope: meta.template.expression.tsx
2906− - meta_content_scope: meta.embedded.line.tsx
2907− - match: '\}'
2908− captures:
2909− 0: punctuation.definition.template-expression.end.tsx
2910− pop: true
2911− - include: expression
2912− template-type:
2913− - include: template-call
29142592 - match: "([_$[:alpha:]][_$[:alnum:]]*)?(`)"
29152593 captures:
29162594 1: entity.name.function.tagged-template.tsx
@@ -2921,9 +2599,9 @@ contexts:
29212599 captures:
29222600 0: punctuation.definition.string.template.end.tsx
29232601 pop: true
2924− - include: template-type-substitution-element
2602+ - include: template-substitution-element
29252603 - include: string-character-escape
2926− template-type-substitution-element:
2604+ template-substitution-element:
29272605 - match: '\$\{'
29282606 captures:
29292607 0: punctuation.definition.template-expression.begin.tsx
@@ -2934,9 +2612,9 @@ contexts:
29342612 captures:
29352613 0: punctuation.definition.template-expression.end.tsx
29362614 pop: true
2937− - include: type
2615+ - include: expression
29382616 ternary-expression:
2939− - match: '(?!\?\.\s*[^[:digit:]])(\?)(?!\?)'
2617+ - match: '(?!\?\.\s*[^[:digit:]])(\?)'
29402618 captures:
29412619 1: keyword.operator.ternary.tsx
29422620 push:
@@ -2950,7 +2628,7 @@ contexts:
29502628 scope: variable.language.this.tsx
29512629 type:
29522630 - include: comment
2953− - include: type-string
2631+ - include: string
29542632 - include: numeric-literal
29552633 - include: type-primitive
29562634 - include: type-builtin-literals
@@ -2962,36 +2640,24 @@ contexts:
29622640 - include: type-fn-type-parameters
29632641 - include: type-paren-or-function-parameters
29642642 - include: type-function-return-type
2965− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(readonly)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*'
2966− captures:
2967− 1: storage.modifier.tsx
29682643 - include: type-name
29692644 type-alias-declaration:
2970− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(type)\b\s+([_$[:alpha:]][_$[:alnum:]]*)\s*'
2645+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?\b(type)\b\s+([_$[:alpha:]][_$[:alnum:]]*)\s*'
29712646 captures:
29722647 1: keyword.control.export.tsx
2973− 2: storage.modifier.tsx
2974− 3: storage.type.type.tsx
2975− 4: entity.name.type.alias.tsx
2648+ 2: storage.type.type.tsx
2649+ 3: entity.name.type.alias.tsx
29762650 push:
29772651 - meta_scope: meta.type.declaration.tsx
2978− - match: '(?=\}|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
2652+ - match: '(?=\}|;|^\s*abstract\b|^\s*async\b|^\s*class\b|^\s*const\b|^\s*declare\b|^\s*enum\b|^\s*export\b|^\s*function\b|^\s*import\b|^\s*interface\b|^\s*let\b|^\s*module\b|^\s*namespace\b|^\s*return\b|^\s*type\b|^\s*var\b)'
29792653 pop: true
29802654 - include: comment
29812655 - include: type-parameters
2982− - match: '(=)\s*(intrinsic)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
2983− captures:
2984− 1: keyword.operator.assignment.tsx
2985− 2: keyword.control.intrinsic.tsx
2986− push:
2987− - match: '(?=\}|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
2988− pop: true
2989− - include: type
29902656 - match: (=)\s*
29912657 captures:
29922658 1: keyword.operator.assignment.tsx
29932659 push:
2994− - match: '(?=\}|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
2660+ - match: '(?=\}|;|^\s*abstract\b|^\s*async\b|^\s*class\b|^\s*const\b|^\s*declare\b|^\s*enum\b|^\s*export\b|^\s*function\b|^\s*import\b|^\s*interface\b|^\s*let\b|^\s*module\b|^\s*namespace\b|^\s*return\b|^\s*type\b|^\s*var\b)'
29952661 pop: true
29962662 - include: type
29972663 type-annotation:
@@ -3021,13 +2687,8 @@ contexts:
30212687 captures:
30222688 0: punctuation.definition.typeparameters.end.tsx
30232689 pop: true
3024− - include: type-arguments-body
3025− type-arguments-body:
3026− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(_)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
3027− captures:
3028− 0: keyword.operator.type.tsx
3029− - include: type
3030− - include: punctuation-comma
2690+ - include: type
2691+ - include: punctuation-comma
30312692 type-builtin-literals:
30322693 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(this|true|false|undefined|null|object)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
30332694 scope: support.type.builtin.tsx
@@ -3049,19 +2710,13 @@ contexts:
30492710 - include: type
30502711 - include: type
30512712 type-fn-type-parameters:
3052− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(abstract)\s+)?(new)\b(?=\s*\<)'
2713+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(new)\b(?=\s*\<)'
2714+ scope: meta.type.constructor.tsx
30532715 captures:
3054− 1: meta.type.constructor.tsx storage.modifier.tsx
3055− 2: meta.type.constructor.tsx keyword.control.new.tsx
3056− push:
3057− - match: (?<=>)
3058− pop: true
3059− - include: comment
3060− - include: type-parameters
3061− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(abstract)\s+)?(new)\b\s*(?=\()'
2716+ 1: keyword.control.new.tsx
2717+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(new)\b\s*(?=\()'
30622718 captures:
3063− 1: storage.modifier.tsx
3064− 2: keyword.control.new.tsx
2719+ 1: keyword.control.new.tsx
30652720 push:
30662721 - meta_scope: meta.type.constructor.tsx
30672722 - match: (?<=\))
@@ -3112,30 +2767,6 @@ contexts:
31122767 - include: type-predicate-operator
31132768 - include: type
31142769 type-name:
3115− - match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(<)'
3116− captures:
3117− 1: entity.name.type.module.tsx
3118− 2: punctuation.accessor.tsx
3119− 3: punctuation.accessor.optional.tsx
3120− 4: meta.type.parameters.tsx punctuation.definition.typeparameters.begin.tsx
3121− push:
3122− - meta_content_scope: meta.type.parameters.tsx
3123− - match: (>)
3124− captures:
3125− 1: meta.type.parameters.tsx punctuation.definition.typeparameters.end.tsx
3126− pop: true
3127− - include: type-arguments-body
3128− - match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(<)'
3129− captures:
3130− 1: entity.name.type.tsx
3131− 2: meta.type.parameters.tsx punctuation.definition.typeparameters.begin.tsx
3132− push:
3133− - meta_content_scope: meta.type.parameters.tsx
3134− - match: (>)
3135− captures:
3136− 1: meta.type.parameters.tsx punctuation.definition.typeparameters.end.tsx
3137− pop: true
3138− - include: type-arguments-body
31392770 - match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))'
31402771 captures:
31412772 1: entity.name.type.module.tsx
@@ -3171,16 +2802,18 @@ contexts:
31712802 - include: type
31722803 type-operators:
31732804 - include: typeof-operator
3174− - match: '([&|])(?=\s*\{)'
2805+ - match: '(?:([&|])|(=(?!>)))(?=\s*\{)'
31752806 captures:
3176− 0: keyword.operator.type.tsx
2807+ 1: keyword.operator.type.tsx
2808+ 2: keyword.operator.assignment.tsx
31772809 push:
31782810 - match: '(?<=\})'
31792811 pop: true
31802812 - include: type-object
3181− - match: "[&|]"
2813+ - match: "([&|])|(=(?!>))"
31822814 captures:
3183− 0: keyword.operator.type.tsx
2815+ 1: keyword.operator.type.tsx
2816+ 2: keyword.operator.assignment.tsx
31842817 push:
31852818 - match: (?=\S)
31862819 pop: true
@@ -3207,8 +2840,6 @@ contexts:
32072840 scope: storage.modifier.tsx
32082841 - include: type
32092842 - include: punctuation-comma
3210− - match: (=)(?!>)
3211− scope: keyword.operator.assignment.tsx
32122843 type-paren-or-function-parameters:
32132844 - match: \(
32142845 captures:
@@ -3219,6 +2850,7 @@ contexts:
32192850 captures:
32202851 0: meta.brace.round.tsx
32212852 pop: true
2853+ - include: destructuring-parameter
32222854 - match: |-
32232855 (?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\s*(\??)(?=\s*(:\s*(
32242856 (<) |
@@ -3231,8 +2863,7 @@ contexts:
32312863 ))
32322864 ))
32332865 )) |
3234− (:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
3235− (:\s*((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))))
2866+ (:\s*((<\s*$)|([\(]\s*([\{\[]\s*)?$))))
32362867 captures:
32372868 1: storage.modifier.tsx
32382869 2: keyword.operator.rest.tsx
@@ -3251,28 +2882,11 @@ contexts:
32512882 scope: punctuation.separator.parameter.tsx
32522883 - include: type
32532884 type-predicate-operator:
3254− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(asserts)\s+)?(?!asserts)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\s(is)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
3255− captures:
3256− 1: keyword.operator.type.asserts.tsx
3257− 2: variable.parameter.tsx variable.language.this.tsx
3258− 3: variable.parameter.tsx
3259− 4: keyword.operator.expression.is.tsx
3260− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(asserts)\s+(?!is)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
3261− captures:
3262− 1: keyword.operator.type.asserts.tsx
3263− 2: variable.parameter.tsx variable.language.this.tsx
3264− 3: variable.parameter.tsx
3265− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))asserts(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
3266− scope: keyword.operator.type.asserts.tsx
32672885 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))is(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
32682886 scope: keyword.operator.expression.is.tsx
32692887 type-primitive:
3270− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(string|number|bigint|boolean|symbol|any|void|never|unknown)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
2888+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(string|number|boolean|symbol|any|void|never)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
32712889 scope: support.type.primitive.tsx
3272− type-string:
3273− - include: qstring-single
3274− - include: qstring-double
3275− - include: template-type
32762890 type-tuple:
32772891 - match: '\['
32782892 captures:
@@ -3283,84 +2897,56 @@ contexts:
32832897 captures:
32842898 0: meta.brace.square.tsx
32852899 pop: true
3286− - match: \.\.\.
3287− scope: keyword.operator.rest.tsx
3288− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))([_$[:alpha:]][_$[:alnum:]]*)\s*(\?)?\s*(:)'
3289− captures:
3290− 1: entity.name.label.tsx
3291− 2: keyword.operator.optional.tsx
3292− 3: punctuation.separator.label.tsx
32932900 - include: type
32942901 - include: punctuation-comma
32952902 typeof-operator:
32962903 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))typeof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
3297− captures:
3298− 0: keyword.operator.expression.typeof.tsx
3299− push:
3300− - match: '(?=[,);}\]=>:&|{\?]|$|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
3301− pop: true
3302− - include: expression
2904+ scope: keyword.operator.expression.typeof.tsx
33032905 undefined-literal:
33042906 - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))undefined(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
33052907 scope: constant.language.undefined.tsx
33062908 var-expr:
3307− - match: '(?=(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))'
2909+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
2910+ captures:
2911+ 1: keyword.control.export.tsx
2912+ 2: storage.type.tsx
33082913 push:
33092914 - meta_scope: meta.var.expr.tsx
3310− - match: '(?!(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))|((?<!^let|[^\._$[:alnum:]]let|^var|[^\._$[:alnum:]]var)(?=\s*$)))'
2915+ - match: '((?=;|}|(\s+(of|in)\s+)|^\s*$|;|^\s*abstract\b|^\s*async\b|^\s*class\b|^\s*const\b|^\s*declare\b|^\s*enum\b|^\s*export\b|^\s*function\b|^\s*import\b|^\s*interface\b|^\s*let\b|^\s*module\b|^\s*namespace\b|^\s*return\b|^\s*type\b|^\s*var\b)|((?<=\S)(?<!^let|[^\._$[:alnum:]]let|^var|[^\._$[:alnum:]]var)(?=\s*$)))'
33112916 pop: true
3312− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*'
3313− captures:
3314− 1: keyword.control.export.tsx
3315− 2: storage.modifier.tsx
3316− 3: storage.type.tsx
3317− push:
3318− - match: (?=\S)
3319− pop: true
33202917 - include: destructuring-variable
33212918 - include: var-single-variable
33222919 - include: variable-initializer
33232920 - include: comment
3324− - match: (,)\s*((?!\S)|(?=\/\/))
2921+ - match: (,)\s*(?!\S)
33252922 captures:
33262923 1: punctuation.separator.comma.tsx
33272924 push:
3328− - match: '(?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)|^\s*$))|((?<=\S)(?=\s*$)))'
2925+ - match: '(?<!,)(((?==|;|}|(\s+(of|in)\s+)|^\s*$))|((?<=\S)(?=\s*$)))'
33292926 pop: true
3330− - include: single-line-comment-consuming-line-ending
33312927 - include: comment
33322928 - include: destructuring-variable
33332929 - include: var-single-variable
33342930 - include: punctuation-comma
33352931 - include: punctuation-comma
3336− - match: '(?=(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))'
2932+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
33372933 captures:
33382934 1: keyword.control.export.tsx
3339− 2: storage.modifier.tsx
3340− 3: storage.type.tsx
2935+ 2: storage.type.tsx
33412936 push:
33422937 - meta_scope: meta.var.expr.tsx
3343− - match: '(?!(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))|((?<!^const|[^\._$[:alnum:]]const)(?=\s*$)))'
2938+ - match: '((?=;|}|(\s+(of|in)\s+)|^\s*$|;|^\s*abstract\b|^\s*async\b|^\s*class\b|^\s*const\b|^\s*declare\b|^\s*enum\b|^\s*export\b|^\s*function\b|^\s*import\b|^\s*interface\b|^\s*let\b|^\s*module\b|^\s*namespace\b|^\s*return\b|^\s*type\b|^\s*var\b)|((?<=\S)(?<!^const|[^\._$[:alnum:]]const)(?=\s*$)))'
33442939 pop: true
3345− - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*'
3346− captures:
3347− 1: keyword.control.export.tsx
3348− 2: storage.modifier.tsx
3349− 3: storage.type.tsx
3350− push:
3351− - match: (?=\S)
3352− pop: true
33532940 - include: destructuring-const
33542941 - include: var-single-const
33552942 - include: variable-initializer
33562943 - include: comment
3357− - match: (,)\s*((?!\S)|(?=\/\/))
2944+ - match: (,)\s*(?!\S)
33582945 captures:
33592946 1: punctuation.separator.comma.tsx
33602947 push:
3361− - match: '(?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)|^\s*$))|((?<=\S)(?=\s*$)))'
2948+ - match: '(?<!,)(((?==|;|}|(\s+(of|in)\s+)|^\s*$))|((?<=\S)(?=\s*$)))'
33622949 pop: true
3363− - include: single-line-comment-consuming-line-ending
33642950 - include: comment
33652951 - include: destructuring-const
33662952 - include: var-single-const
@@ -3377,11 +2963,11 @@ contexts:
33772963 ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
33782964 )) |
33792965 ((async\s*)?(
3380− ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
2966+ ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) |
33812967 # sure shot arrow functions even if => is on new line
33822968 (
3383− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
3384− [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
2969+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?
2970+ [(]\s*
33852971 (
33862972 ([)]\s*:) | # ():
33872973 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
@@ -3392,9 +2978,9 @@ contexts:
33922978 ) |
33932979 # arrow function possible to detect only with => on same line
33942980 (
3395− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
3396− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
3397− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
2981+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters
2982+ \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters
2983+ (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type
33982984 \s*=> # arrow operator
33992985 )
34002986 ))
@@ -3411,20 +2997,19 @@ contexts:
34112997 ))
34122998 ))
34132999 )) |
3414− (:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
3415− (:\s*((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
3416− (:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
3000+ (:\s*((<\s*$)|([\(]\s*([\{\[]\s*)?$))) |
3001+ (:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
34173002 ((async\s+)?(
34183003 (function\s*[(<*]) |
34193004 (function\s+) |
34203005 ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
34213006 )) |
34223007 ((async\s*)?(
3423− ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
3008+ ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) |
34243009 # sure shot arrow functions even if => is on new line
34253010 (
3426− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
3427− [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
3011+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?
3012+ [(]\s*
34283013 (
34293014 ([)]\s*:) | # ():
34303015 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
@@ -3435,9 +3020,9 @@ contexts:
34353020 ) |
34363021 # arrow function possible to detect only with => on same line
34373022 (
3438− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
3439− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
3440− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
3023+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters
3024+ \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters
3025+ (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type
34413026 \s*=> # arrow operator
34423027 )
34433028 ))
@@ -3446,7 +3031,7 @@ contexts:
34463031 1: meta.definition.variable.tsx variable.other.constant.tsx entity.name.function.tsx
34473032 push:
34483033 - meta_scope: meta.var-single-variable.expr.tsx
3449− - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+))'
3034+ - match: '(?=$|^|[;,=}]|(\s+(of|in)\s+))'
34503035 pop: true
34513036 - include: var-single-variable-type-annotation
34523037 - match: "([_$[:alpha:]][_$[:alnum:]]*)"
@@ -3454,12 +3039,12 @@ contexts:
34543039 1: meta.definition.variable.tsx variable.other.constant.tsx
34553040 push:
34563041 - meta_scope: meta.var-single-variable.expr.tsx
3457− - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+))'
3042+ - match: '(?=$|^|[;,=}]|(\s+(of|in)\s+))'
34583043 pop: true
34593044 - include: var-single-variable-type-annotation
34603045 var-single-variable:
34613046 - match: |-
3462− (?x)([_$[:alpha:]][_$[:alnum:]]*)(\!)?(?=\s*
3047+ (?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\s*
34633048 # function assignment |
34643049 (=\s*(
34653050 ((async\s+)?(
@@ -3468,11 +3053,11 @@ contexts:
34683053 ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
34693054 )) |
34703055 ((async\s*)?(
3471− ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
3056+ ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) |
34723057 # sure shot arrow functions even if => is on new line
34733058 (
3474− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
3475− [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
3059+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?
3060+ [(]\s*
34763061 (
34773062 ([)]\s*:) | # ():
34783063 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
@@ -3483,9 +3068,9 @@ contexts:
34833068 ) |
34843069 # arrow function possible to detect only with => on same line
34853070 (
3486− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
3487− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
3488− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
3071+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters
3072+ \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters
3073+ (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type
34893074 \s*=> # arrow operator
34903075 )
34913076 ))
@@ -3502,20 +3087,19 @@ contexts:
35023087 ))
35033088 ))
35043089 )) |
3505− (:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
3506− (:\s*((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
3507− (:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
3090+ (:\s*((<\s*$)|([\(]\s*([\{\[]\s*)?$))) |
3091+ (:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
35083092 ((async\s+)?(
35093093 (function\s*[(<*]) |
35103094 (function\s+) |
35113095 ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
35123096 )) |
35133097 ((async\s*)?(
3514− ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
3098+ ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) |
35153099 # sure shot arrow functions even if => is on new line
35163100 (
3517− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
3518− [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
3101+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?
3102+ [(]\s*
35193103 (
35203104 ([)]\s*:) | # ():
35213105 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
@@ -3526,37 +3110,34 @@ contexts:
35263110 ) |
35273111 # arrow function possible to detect only with => on same line
35283112 (
3529− (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
3530− \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
3531− (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
3113+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters
3114+ \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters
3115+ (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type
35323116 \s*=> # arrow operator
35333117 )
35343118 ))
35353119 )))
35363120 captures:
35373121 1: meta.definition.variable.tsx entity.name.function.tsx
3538− 2: keyword.operator.definiteassignment.tsx
35393122 push:
35403123 - meta_scope: meta.var-single-variable.expr.tsx
3541− - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+))'
3124+ - match: '(?=$|^|[;,=}]|(\s+(of|in)\s+))'
35423125 pop: true
35433126 - include: var-single-variable-type-annotation
3544− - match: '([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])(\!)?'
3127+ - match: "([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])"
35453128 captures:
35463129 1: meta.definition.variable.tsx variable.other.constant.tsx
3547− 2: keyword.operator.definiteassignment.tsx
35483130 push:
35493131 - meta_scope: meta.var-single-variable.expr.tsx
3550− - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+))'
3132+ - match: '(?=$|^|[;,=}]|(\s+(of|in)\s+))'
35513133 pop: true
35523134 - include: var-single-variable-type-annotation
3553− - match: '([_$[:alpha:]][_$[:alnum:]]*)(\!)?'
3135+ - match: "([_$[:alpha:]][_$[:alnum:]]*)"
35543136 captures:
35553137 1: meta.definition.variable.tsx variable.other.readwrite.tsx
3556− 2: keyword.operator.definiteassignment.tsx
35573138 push:
35583139 - meta_scope: meta.var-single-variable.expr.tsx
3559− - match: '(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+))'
3140+ - match: '(?=$|^|[;,=}]|(\s+(of|in)\s+))'
35603141 pop: true
35613142 - include: var-single-variable-type-annotation
35623143 var-single-variable-type-annotation:
@@ -3564,17 +3145,17 @@ contexts:
35643145 - include: string
35653146 - include: comment
35663147 variable-initializer:
3567− - match: (?<!=|!)(=)(?!=)(?=\s*\S)(?!\s*.*=>\s*$)
3148+ - match: (?<!=|!)(=)(?!=)(?=\s*\S)
35683149 captures:
35693150 1: keyword.operator.assignment.tsx
35703151 push:
3571− - match: '(?=$|^|[,);}\]]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+))'
3152+ - match: '(?=$|^|[,);}\]])'
35723153 pop: true
35733154 - include: expression
35743155 - match: (?<!=|!)(=)(?!=)
35753156 captures:
35763157 1: keyword.operator.assignment.tsx
35773158 push:
3578− - match: '(?=[,);}\]]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+))|(?=^\s*$)|(?<=\S)(?<!=)(?=\s*$)'
3159+ - match: '(?=[,);}\]])|(?=^\s*$)|(?<=\S)(?<!=)(?=\s*$)'
35793160 pop: true
35803161 - include: expression
assets/syntaxes/02_Extra/VimL+1−1

Submodule changed.

assets/syntaxes/02_Extra/VimL.sublime-syntaxnew file+91
@@ -0,0 +1,91 @@
1+%YAML 1.2
2+---
3+# http://www.sublimetext.com/docs/3/syntax.html
4+name: VimL
5+file_extensions:
6+ - vim
7+ - .vimrc
8+scope: source.viml
9+contexts:
10+ main:
11+ - include: comment
12+ - include: string_quoted_double
13+ - include: string_quoted_single
14+ - include: string_regex
15+ - include: inline_comment
16+ - include: number_int
17+ - include: number_hex
18+ - include: keyword
19+ - include: support_function
20+ - include: support_variable
21+ - include: support_type
22+ - include: function_params
23+ - include: function_definition
24+ - include: function_call
25+ - include: function
26+ - include: variable
27+ - include: expr
28+ comment:
29+ - match: ^\s*".*$
30+ scope: comment.line.quotes.viml
31+ captures:
32+ 1: punctuation.definition.comment.vim
33+ expr:
34+ - match: (\|\||&&|==(\?|#)?|(!|>|<)=(#|\?)?|(=|!)~(#|\?)?|(>|<)(#|\?)is|isnot|\.|\*|\\|%)
35+ scope: storage.function.viml
36+ function:
37+ - match: \b(fu(n|nction)?|end(f|fu|fun|function)?)\b
38+ scope: storage.function.viml
39+ function_call:
40+ - match: '(([sgbwtl]|)?:?[0-9a-zA-Z_#]+)(?=\()'
41+ scope: support.function.any-method
42+ function_definition:
43+ - match: '^\s*(function)\s*!?\s+(?=(s:)?[0-9a-zA-Z_#]+\s*\()'
44+ captures:
45+ 1: storage.function.viml
46+ push:
47+ - meta_scope: meta.function.viml
48+ - match: (\()
49+ captures:
50+ 1: punctuation.definition.parameters.begin.viml
51+ pop: true
52+ - match: "(s:)?[0-9a-zA-Z_#]+"
53+ scope: entity.name.function.viml
54+ function_params:
55+ - match: '-\w+='
56+ scope: support.type.viml
57+ inline_comment:
58+ - match: '(?!\$)(")(?!\{).*$\n?'
59+ scope: comment.line.quotes.viml
60+ captures:
61+ 1: punctuation.definition.comment.vim
62+ keyword:
63+ - match: \b(if|while|for|try|return|throw|end(if|for|while|try)?|au(g|group)|else(if|)?|do|in|catch|finally|:)\b
64+ scope: keyword.control.viml
65+ number_hex:
66+ - match: "0x[0-9a-f]+"
67+ scope: constant.numeric.hex
68+ number_int:
69+ - match: '-?\d+'
70+ scope: constant.numeric.integer
71+ string_quoted_double:
72+ - match: '"(\\\\|\\"|\n[^\S\n]*\\|[^\n"])*"'
73+ scope: string.quoted.double.viml
74+ string_quoted_single:
75+ - match: '''(''''|\n[^\S\n]*\\|[^\n''])*'''
76+ scope: string.quoted.single.viml
77+ string_regex:
78+ - match: '/(\\\\|\\/|\n[^\S\n]*\\|[^\n/])*/'
79+ scope: string.regexp.viml
80+ support_function:
81+ - match: \b(set(local|global)?|let|command|filetype|colorscheme|\w*map|\w*a(b|brev)?|syn|exe(c|cute)?|ec(ho|)?|au(tocmd|)?)\b
82+ scope: support.function.viml
83+ support_type:
84+ - match: <.*?>
85+ scope: support.type.viml
86+ support_variable:
87+ - match: '\b(am(enu|)?|(hl|inc)?search|[Bb]uf([Nn]ew[Ff]ile|[Rr]ead)?|[Ff]ile[Tt]ype)\b'
88+ scope: support.variable.viml
89+ variable:
90+ - match: '([sSgGbBwWlLaAvV]:|@|$|&(?!&))\w*'
91+ scope: variable.other.viml
assets/syntaxes/02_Extra/Zigdeleted−1

Submodule changed.

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

Submodule changed.

assets/syntaxes/02_Extra/gnuplotdeleted−1

Submodule changed.

assets/syntaxes/02_Extra/gnuplot.sublime-syntaxdeleted−182
@@ -1,182 +0,0 @@
1−%YAML 1.2
2−---
3−# http://www.sublimetext.com/docs/3/syntax.html
4−name: gnuplot
5−file_extensions:
6− - gp
7− - gpl
8− - gnuplot
9− - gnu
10− - plot
11− - plt
12−scope: source.gnuplot
13−contexts:
14− main:
15− - include: number
16− - include: string_single
17− - include: string_double
18− - match: '\b(for)\b\s*(\[)'
19− comment: |
20− gnuplot iteration statement.
21− There are two forms:
22− numeric [n = 1:2{:inc}]
23− string based [str in "x y z"]
24− but both can also iterate over lists etc, so this is kept loose.
25− captures:
26− 1: keyword.other.iteration.gnuplot
27− 2: punctuation.definition.range.begin.gnuplot
28− push:
29− - meta_scope: meta.structure.iteration.gnuplot
30− - match: '\]'
31− captures:
32− 0: punctuation.definition.range.end.gnuplot
33− pop: true
34− - include: number
35− - include: operator
36− - include: string_double
37− - include: string_single
38− - match: ":"
39− scope: punctuation.separator.range.gnuplot
40− - match: '\b([a-zA-Z]\w*)\b\s*(=|in)'
41− scope: variable-assignment.range.gnuplot
42− - match: '(?i:[^\s(pi|e)\]])'
43− scope: invalid.illegal.expected-range-separator.gnuplot
44− - match: '\['
45− comment: "gnuplot range statement [a:b]. Lots of things are legal, still more make no sense!"
46− captures:
47− 0: punctuation.definition.range.begin.gnuplot
48− push:
49− - meta_scope: meta.structure.range.gnuplot
50− - match: '\]'
51− captures:
52− 0: punctuation.definition.range.end.gnuplot
53− pop: true
54− - include: number
55− - include: operator
56− - match: ":"
57− scope: punctuation.separator.range.gnuplot
58− - match: '(?i:[^\s(pi|e)\]])'
59− scope: invalid.illegal.expected-range-separator.gnuplot
60− - match: \\.
61− scope: constant.character.escape.gnuplot
62− - match: '(?<!\$)(#)(?!\{).*$\n?'
63− scope: comment.line.number-sign.gnuplot
64− captures:
65− 1: punctuation.definition.comment.gnuplot
66− - match: for
67− comment: introduce in gnuplot 4.3.
68− scope: keyword.other.iteration.gnuplot
69− - match: \b(angles|arrow|autoscale|bars|border|boxwidth|clabel|clip|cntrparam|colorbox|contour|decimalsign|dgrid3d|dummy|encoding|fit|format|grid|hidden3d|historysize|isosamples|key|label|locale|logscale|macros|bmargin|lmargin|rmargin|tmargin|mapping|mouse|multiplot|offsets|origin|output|palette|parametric|pm3d|pointsize|polar|print|rrange|trange|urange|vrange|samples|size|style|surface|tics|ticscale|ticslevel|timestamp|timefmt|title|view|xyplane|x2data|xdata|y2data|ydata|z2data|zdata|x2label|xlabel|y2label|ylabel|z2label|zlabel|x2range|xrange|y2range|yrange|z2range|zrange|mx2tics|mxtics|my2tics|mytics|mz2tics|mztics|nomx2tics|nomxtics|nomy2tics|nomytics|nomz2tics|nomztics|nox2tics|noxtics|noy2tics|noytics|noz2tics|noztics|x2tics|xtics|y2tics|ytics|z2tics|ztics|x2dtics|x2mtics|xdtics|xmtics|y2dtics|y2mtics|ydtics|ymtics|z2dtics|z2mtics|zdtics|zmtics|x2zeroaxis|xzeroaxis|y2zeroaxis|yzeroaxis|z2zeroaxis|zeroaxis|zzeroaxis|zero|)\b
70− scope: keyword.other.setting.gnuplot
71− - match: \b(cd|call|clear|exit|plot|splot|help|load|pause|quit|fit|replot|if|FIT_LIMIT|FIT_MAXITER|FIT_START_LAMBDA|FIT_LAMBDA_FACTOR|FIT_LOG|FIT_SCRIPT|print|pwd|reread|reset|save|show|test|!|functions|var)\b
72− comment: missuse of scopes alert! Just for pretty colours
73− scope: keyword.other.command.gnuplot
74− - match: \b(abs|acos|acosh|arg|asin|asinh|atan|atan2|atanh|besj0|besj1|besy0|besy1|ceil|cos|cosh|erf|erfc|exp|floor|gamma|ibeta|igamma|imag|int|inverf|invnorm|lambertw|lgamma|log|log10|norm|rand|real|sgn|sin|sinh|sqrt|tan|tanh)\b
75− scope: support.function.gnuplot
76− - match: \b(gprintf|sprintf|strlen|strstrt|substr|system|word|words)\b
77− scope: support.function.string.gnuplot
78− - match: \b(on|off|default|inside|outside|lmargin|rmargin|tmargin|bmargin|at|left|right|center|top|bottom|center|vertical|horizontal|Left|Right|noreverse|noinvert|samplen|spacing|width|height|noautotitle|columnheader|title|noenhanced|nobox|linestyle|ls|linetype|lt|linewidth|lw)\b
79− scope: constant.other.type.gnuplot
80− - match: \b(aed512|aed767|aifm|aqua|bitgraph|cgm|corel|dumb|dxf|eepic|emf|emtex|epslatex|epson_180dpi|epson_60dpi|epson_lx800|fig|gif|gpic|hp2623A|hp2648|hp500c|hpdj|hpgl|hpljii|hppj|imagen|jpeg|kc_tek40xx|km_tek40xx|latex|mf|mif|mp|nec_cp6|okidata|pbm|pcl5|pdf|png|postscript|pslatex|pstex|pstricks|qms|regis|selanar|starc|svg|tandy_60dpi|tek40xx|tek410x|texdraw|tgif|tkcanvas|tpic|unknown|vttek)\b
81− scope: constant.other.terminal.gnuplot
82− - match: \b(u(sing)?|t(it(le)?)?|notit(le)?|w(i(th)?)?|steps|fs(teps)?|notitle|l(i(nes)?)?|linespoints|via)\b
83− scope: keyword.modifier.gnuplot
84− - match: |-
85− (?x:
86− \b # Start with a word boundary
87− (?=\b[\w$]*(\(|.*=)) # Look-ahead for a bracket or equals
88− (?![^(]*\)) # negative look ahead for a closing bracket without an opening one. This stops a from matching in f(a)
89− ( # Group variable name
90− [A-Za-z] # A letter
91− [\w$]* # Any word chars or $
92− ) # That is it for the name.
93− )
94− comment: user defined function / variable
95− scope: variable.other.gnuplot
96− - match: \b(if)\b
97− scope: keyword.control.gnuplot
98− - match: \b(show)\b
99− captures:
100− 0: keyword.other.command.gnuplot
101− push:
102− - meta_scope: keyword.line.show.gnuplot
103− - meta_content_scope: keyword.line.show.gnuplot
104− - match: (?!\#)($\n?)
105− pop: true
106− - include: main
107− - match: \b(set)\b\s*\b(terminal|term)\b
108− captures:
109− 1: keyword.other.command.gnuplot
110− 2: keyword.other.setting.gnuplot
111− push:
112− - meta_scope: keyword.line.set.terminal.gnuplot
113− - match: (?!\#)($\n?)
114− pop: true
115− - include: main
116− - match: \b(set)\b\s*\b(key)\b
117− captures:
118− 1: keyword.other.command.gnuplot
119− 2: keyword.other.setting.gnuplot
120− push:
121− - meta_scope: keyword.line.set.key.gnuplot
122− - match: (?!\#)($\n?)
123− pop: true
124− - include: main
125− - match: \b(set|unset)\b\s*(?!\b(terminal|key|for)\b)
126− captures:
127− 1: keyword.other.command.gnuplot
128− 2: keyword.other.setting.gnuplot
129− push:
130− - meta_scope: keyword.line.set.gnuplot
131− - meta_content_scope: keyword.line.set.gnuplot
132− - match: (?!\#)($\n?)
133− pop: true
134− - include: main
135− number:
136− - match: |-
137− (?x: # turn on extended mode
138− -? # an optional minus
139− (?:
140− 0 # a zero
141− | # ...or...
142− [1-9] # a 1-9 character
143− \d* # followed by zero or more digits
144− )
145− (?:
146− \. # a period
147− \d+ # followed by one or more digits
148− (?:
149− [eE] # an e character
150− [+-]? # followed by an option +/-
151− \d+ # followed by one or more digits
152− )? # make exponent optional
153− )? # make decimal portion optional
154− )
155− comment: borrowed from textmate book
156− scope: constant.numeric.gnuplot
157− operator:
158− - match: \s*(==|~=|>|>=|<|<=|&|&&|:|\||\|\||\+|-|\*|\.\*|/|\./|\\|\.\\|\^|\.\^)\s*
159− comment: Operator symbols
160− scope: keyword.operator.symbols.matlab
161− string_double:
162− - match: '"'
163− captures:
164− 0: punctuation.definition.string.begin.gnuplot
165− push:
166− - meta_scope: string.quoted.double.gnuplot
167− - match: '"'
168− captures:
169− 0: punctuation.definition.string.end.gnuplot
170− pop: true
171− - match: '\\[\$`"\\\n]'
172− scope: constant.character.escape.gnuplot
173− string_single:
174− - match: "'"
175− captures:
176− 0: punctuation.definition.string.begin.gnuplot
177− push:
178− - meta_scope: string.quoted.single.gnuplot
179− - match: "'"
180− captures:
181− 0: punctuation.definition.string.end.gnuplot
182− pop: true
assets/syntaxes/02_Extra/http-request-responsedeleted−1

Submodule changed.

assets/syntaxes/02_Extra/log.sublime-syntaxdeleted−140
@@ -1,140 +0,0 @@
1−%YAML 1.2
2−---
3−# See http://www.sublimetext.com/docs/3/syntax.html
4−file_extensions:
5− - log
6−scope: text.log
7−variables:
8− ipv4_part: (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
9− hours_minutes_seconds: (?:[01]\d|2[0-3]):(?:[0-5]\d):(?:[0-5]\d)
10−contexts:
11− main:
12− - match: (\w+)(=)
13− captures:
14− 1: variable.parameter.log
15− 2: keyword.operator.assignment.log
16− - match: (')([^']*)(')
17− scope: string.quoted.single.log
18− captures:
19− 1: punctuation.definition.string.begin.log
20− 3: punctuation.definition.string.end.log
21− - match: \"
22− captures:
23− 1: punctuation.definition.string.begin.log
24− push: double_quoted_string
25− - include: dates
26− - include: ip_addresses
27− - include: numbers
28− - match: \b(?i:fail(?:ure|ed)?|error|exception)\b
29− scope: markup.error.log
30− - match: \b(?i:warn(?:ing)?)\b
31− scope: markup.warning.log
32− - match: \b(?i:debug)\b
33− scope: markup.info.log
34− #- include: scope:text.html.markdown#autolink-inet
35− - match: \b\w+:/{2,3}
36− scope: markup.underline.link.scheme.log
37− push: url-host
38− dates:
39− - match: \b\d{4}-\d{2}-\d{2}(?=\b|T)
40− scope: meta.date.log meta.number.integer.decimal.log constant.numeric.value.log
41− push: maybe_date_time_separator
42− - match: \b\d{4}/\d{2}/\d{2}(?=\b|T)
43− scope: meta.date.log meta.number.integer.decimal.log constant.numeric.value.log
44− push: maybe_date_time_separator
45− - match: \b(?={{hours_minutes_seconds}})
46− push: time
47− time:
48− - match: (?:{{hours_minutes_seconds}})(?:(\.)\d{3})?\b
49− scope: meta.time.log meta.number.integer.decimal.log constant.numeric.value.log
50− captures:
51− 1: punctuation.separator.decimal.log
52− - match: ''
53− pop: true
54− maybe_date_time_separator:
55− - match: T(?={{hours_minutes_seconds}})
56− scope: meta.date.log meta.time.log keyword.other.log
57− set: time
58− - match: ''
59− pop: true
60− ip_addresses:
61− - match: \b(?=(?:{{ipv4_part}}\.){3}{{ipv4_part}}\b)
62− push:
63− - meta_scope: meta.ipaddress.v4.log meta.number.integer.decimal.log
64− - match: \d+
65− scope: constant.numeric.value.log
66− - match: \.
67− scope: punctuation.separator.sequence.log
68− - match: ''
69− pop: true
70− - match: (?=(?:\h{0,4}:){2,6}\h{1,4}\b)
71− push:
72− - meta_scope: meta.ipaddress.v6.log meta.number.integer.hexadecimal.log
73− - match: \h{1,4}
74− scope: constant.numeric.value.log
75− - match: ':'
76− scope: punctuation.separator.sequence.log
77− - match: ''
78− pop: true
79− numbers:
80− - match: \b(0x)(\h+)(?:(\.)(\h+))?\b
81− scope: meta.number.float.hexadecimal.log
82− captures:
83− 1: constant.numeric.base.log
84− 2: constant.numeric.value.log
85− 3: constant.numeric.value.log punctuation.separator.decimal.log
86− 4: constant.numeric.value.log
87− - match: \b\d+(\.)\d+\b
88− scope: meta.number.float.log constant.numeric.value.log
89− captures:
90− 1: punctuation.separator.decimal.log
91− - match: \b\d+\b
92− scope: meta.number.integer.log constant.numeric.value.log
93− url-host:
94− - meta_content_scope: markup.underline.link.host.log
95− - match: \[
96− scope: punctuation.section.brackets.begin.log
97− push:
98− - match: \]
99− scope: punctuation.section.brackets.end.log
100− pop: true
101− - include: ip_addresses
102− - match: '[^:/\s]+'
103− - match: ''
104− set: url-after-host
105− url-after-host:
106− - match: (:)(\d+)
107− scope: markup.underline.link.port.log
108− captures:
109− 1: punctuation.separator.mapping.port.log
110− 2: constant.numeric.value.log
111− #- include: scope:text.html.markdown#url-escaped-chars
112− - match: (%)\h{2}
113− scope: markup.underline.link.path.log constant.character.escape.url.log
114− captures:
115− 1: punctuation.definition.escape.log
116− # After a valid domain, zero or more non-space non-< characters may follow
117− - match: (?=[?!.,:*_~]*[\s<]) # Trailing punctuation (specifically, ?, !, ., ,, :, *, _, and ~) will not be considered part of the autolink, though they may be included in the interior of the link
118− pop: true
119− - match: \( # When an autolink ends in ), we scan the entire autolink for the total number of parentheses. If there is a greater number of closing parentheses than opening ones, we don’t consider the last character part of the autolink, in order to facilitate including an autolink inside a parenthesis
120− push:
121− - meta_scope: markup.underline.link.path.log
122− - match: (?=[?!.,:*_~]*[\s<])
123− pop: true
124− - match: \)
125− pop: true
126− - match: (?=\)[?!.,:*_~]*[\s<])
127− pop: true
128− - match: '[^?!.,:*_~\s<&()%]+|\S'
129− scope: markup.underline.link.path.log
130− - match: ''
131− pop: true
132− double_quoted_string:
133− - meta_scope: string.quoted.double.log
134− - match: \\"
135− scope: constant.character.escape.log
136− - match: \\n
137− scope: constant.character.escape.log
138− - match: \"
139− scope: punctuation.definition.string.end.log
140− pop: true
assets/syntaxes/02_Extra/requirementstxtnew file+1

Submodule changed.

assets/syntaxes/02_Extra/requirementstxt.sublime-syntaxnew file+19
@@ -0,0 +1,19 @@
1+%YAML 1.2
2+---
3+# http://www.sublimetext.com/docs/3/syntax.html
4+name: requirements.txt
5+file_extensions:
6+ - requirements.txt
7+scope: source.requirementstxt
8+contexts:
9+ main:
10+ - match: (#).*$\n?
11+ scope: comment.line.requirementstxt
12+ captures:
13+ 1: punctuation.definition.comment.requirementstxt
14+ - match: '(?i)^[a-z0-9_\-\.]+'
15+ scope: string.package_name.requirementstxt
16+ - match: (?i)==|<|<=|>=|>
17+ scope: keyword.operator.logical.punctuation.requirementstxt
18+ - match: '(?i)\d+\.[\da-z\-_\.]*'
19+ scope: constant.numeric.verions.requirementstxt
assets/syntaxes/02_Extra/show-nonprintable.sublime-syntax+1−1
@@ -7,7 +7,7 @@ file_extensions:
77scope: whitespace
88contexts:
99 main:
10− - match: "·"
10+ - match: "•"
1111 scope: support.function.show-nonprintable.space
1212 - match: "├─*┤"
1313 scope: constant.character.escape.show-nonprintable.tab
assets/syntaxes/02_Extra/ssh-config+1−1

Submodule changed.

assets/syntaxes/02_Extra/syntax_test_csv.csvdeleted−60
@@ -1,60 +0,0 @@
1−# SYNTAX TEST "CSV.sublime-syntax"
2−Forename,Surname,House No.,Street,City,Postcode
3−#^^^^^^^ meta.field-1
4−# ^ punctuation.separator.sequence
5−# ^^^^^^^ meta.field-2
6−# ^ punctuation.separator.sequence
7−# ^^^^^^^^^ meta.field-3
8−# ^ punctuation.separator.sequence
9−# ^^^^^^ meta.field-4
10−# ^ punctuation.separator.sequence
11−# ^^^^ meta.field-1
12−# ^ punctuation.separator.sequence
13−# ^^^^^^^^ meta.field-2
14−John,Doe,87,Logon Road,Citiville,TU43 6GH
15−#^^^ meta.field-1
16−# ^ punctuation.separator.sequence
17−# ^^^ meta.field-2
18−# ^ punctuation.separator.sequence
19−# ^^ meta.field-3
20−# ^ punctuation.separator.sequence
21−# ^^^^^^^^^^ meta.field-4
22−# ^ punctuation.separator.sequence
23−# ^^^^^^^^^ meta.field-1
24−# ^ punctuation.separator.sequence
25−# ^^^^^^^^ meta.field-2
26−Jane,Doe,22,"""Fun"" Street","The City, County",FA90 1XA
27−#^^^ meta.field-1
28−# ^ punctuation.separator.sequence
29−# ^^^ meta.field-2
30−# ^ punctuation.separator.sequence
31−# ^^ meta.field-3
32−# ^ punctuation.separator.sequence
33−# ^^^^^^^^^^^^^^^^ meta.field-4 string.quoted.double
34−# ^^ constant.character.escape
35−# ^^ constant.character.escape
36−# ^ punctuation.separator.sequence
37−# ^ meta.field-1 string.quoted.double punctuation.definition.string.begin
38−# ^^^^^^^^^^^^^^^^^ meta.field-1 string.quoted.double
39−# ^ meta.field-1 string.quoted.double punctuation.definition.string.end
40−# ^ punctuation.separator.sequence
41−# ^^^^^^^^ meta.field-2
42−Fred,Bloggs,"19","Street
43−#^^^ meta.field-1
44−# ^ punctuation.separator.sequence
45−# ^^^^^^ meta.field-2
46−# ^ punctuation.separator.sequence
47−# ^^^ meta.field-3 string.quoted.double
48−# ^ punctuation.separator.sequence
49−# ^ meta.field-4 punctuation.definition.string.begin
50−# ^^^^^^^^ meta.field-4 string.quoted.double
51−Spanning Multiple ""
52−#^^^^^^^^^^^^^^^^^^^^ meta.field-4 string.quoted.double
53−# ^^ constant.character.escape
54−Lines",Citee,P0stc0d3
55−#^^^^^ meta.field-4 string.quoted.double
56−# ^ meta.field-4 punctuation.definition.string.end
57−# ^ punctuation.separator.sequence
58−# ^^^^^ meta.field-1
59−# ^ punctuation.separator.sequence
60−# ^^^^^^^^ meta.field-2
assets/syntaxes/02_Extra/syntax_test_man.mandeleted−162
@@ -1,162 +0,0 @@
1−# SYNTAX TEST "Manpage.sublime-syntax"
2−SOMETHING(8) System Manager's Manual SOMETHING(8)
3−# ^^^^^ meta.preprocessor
4−# ^^^^^^^^^^^^^^^^^^^^^^^ markup.heading.title
5−# ^^^^^^^ meta.preprocessor
6−
7−NAME
8−#^^^ markup.heading.other
9− example - do something useful
10−
11−SYNOPSIS
12− example [options] [--home DIR] [--shell SHELL] [--no-create-home]
13−# ^ punctuation.section.brackets.begin
14−# ^^^^^^ entity.name.command-line-option
15−# ^^^ variable.parameter
16−# ^ punctuation.section.brackets.end
17−# ^ punctuation.section.brackets.begin
18−# ^^^^^^^ entity.name.command-line-option
19−# ^^^^^ variable.parameter
20−# ^ punctuation.section.brackets.end
21−# ^ punctuation.section.brackets.begin
22−# ^^^^^^^^^^^^^^^^ entity.name.command-line-option
23−# ^ punctuation.section.brackets.end
24− [-u | --set-upstream] [-o <string> | --push-option=<string>]
25−# ^ punctuation.section.brackets.begin
26−# ^^ entity.name.command-line-option
27−# ^ keyword.operator.logical
28−# ^^^^^^^^^^^^^^ entity.name.command-line-option
29−# ^ punctuation.section.brackets.end
30−# ^^^^^^^^^^^^^ entity.name.command-line-option
31− [--force-with-lease[=<refname>[:<expect>]]]
32−# ^ punctuation.section.brackets.begin
33−# ^^^^^^^^^^^^^^^^^^ entity.name.command-line-option
34−# ^ punctuation.section.brackets.begin
35−# ^ keyword.operator
36−# ^^^^^^^ variable.parameter
37−# ^ punctuation.section.brackets.begin
38−# ^^^^^^ variable.parameter
39−# ^^^ punctuation.section.brackets.end
40−
41− example --system [options]
42−# ^^^^^^^^ entity.name
43−
44− COMMON OPTIONS
45− [--quiet] [--debug] [--help|-h] [--version] [--conf FILE]
46−
47− /* According to POSIX.1-2001, POSIX.1-2008 */
48−# ^^ source.c comment.block punctuation.definition.comment
49− #include <sys/select.h>
50−# ^^^^^^^^ source.c meta.preprocessor.include keyword.control.import.include
51− struct timeval {
52−# ^^^^^^ source.c storage.type
53−
54− time_t tv_sec; /* seconds */
55− suseconds_t tv_usec; /* microseconds */
56− };
57−
58−
59−
60−DESCRIPTION
61− example does something useful in relation to the command line options
62− and configuration information in /etc/example.conf.
63−
64−OPTIONS
65− --conf FILE
66−# ^^^^^^ entity.name.command-line-option
67−#^^^^^^ - variable - entity - markup
68−# ^^^^ variable.parameter
69− Use FILE instead of /etc/example.conf.
70−# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - variable - entity
71−
72− --disabled-login
73− Do not run passwd to set the password. The user won't be able
74− to use her account until the password is set.
75−
76− --disabled-password
77− Like --disabled-login, but logins are still possible (for exam-
78−# ^^^^^^^^^^^^^^^^ entity.name
79−#^^^^^^^^^^^^^^^^^^ - entity - variable - markup
80−# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - entity - variable - markup
81− ple using SSH RSA keys) but not using password authentication.
82−
83− --help Display brief instructions.
84−# ^^^^^^ entity.name.command-line-option
85−# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - variable.parameter
86−
87− --home DIR
88−# ^^^^^^ entity.name.command-line-option
89−# ^^^ variable.parameter
90−# ^ - variable - entity - markup
91− Use DIR as the user's home directory, rather than the default
92− specified by the configuration file. If the directory does not
93− exist, it is created and skeleton files are copied.
94−
95− --[no-]signed, --signed=(true|false|if-asked)
96−# ^^^^^^^^^^^^^ entity.name.command-line-option
97−# ^ punctuation.separator
98−# ^^^^^^^^ entity.name.command-line-option
99−# ^ keyword.operator
100−# ^ - variable
101−# ^^^^ variable.parameter
102−# ^ keyword.operator.logical
103−# ^^^^^ variable.parameter
104−# ^ keyword.operator.logical
105−# ^^^^^^^^ variable.parameter
106−# ^ - variable
107− --no-recurse-submodules, --recurse-submodules=check|on-demand|only|no
108−# ^^^^^^^^^^^^^^^^^^^^^^^ entity.name.command-line-option
109−# ^ punctuation.separator
110−# ^^^^^^^^^^^^^^^^^^^^ entity.name.command-line-option
111−# ^ keyword.operator
112−# ^^^^^ variable.parameter
113−# ^ keyword.operator.logical
114−# ^^^^^^^^^ variable.parameter
115−# ^ keyword.operator.logical
116−# ^^^^ variable.parameter
117−# ^ keyword.operator.logical
118−# ^^ variable.parameter
119− May be used to make sure all submodule commits used by the
120−
121− -c, -C NUM, --context[=NUM]
122−# ^^ entity.name.command-line-option
123−# ^ punctuation.separator
124−# ^^ entity.name.command-line-option
125−# ^^^ variable.parameter
126−# ^ punctuation.separator
127−# ^^^^^^^^^ entity.name.command-line-option
128−# ^^^^^^^ - entity.name
129−# ^ keyword.operator
130−# ^^^ variable.parameter
131−# ^^ - variable
132− output NUM (default 3) lines of copied context
133−
134−EXAMPLE
135− #include <stdio.h>
136−# ^^^^^^^^ source.c meta.preprocessor.include keyword.control.import.include
137−
138− (This is not C code.)
139−# ^^^^^^^^^^^^^^^^^^^^^^ - source.c
140−
141− struct timeval {
142− time_t tv_sec; /* seconds */
143− suseconds_t tv_usec; /* microseconds */
144− };
145−# ^ source.c punctuation.terminator
146−
147− The corresponding argument for pselect() has the following type:
148−#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - source.c
149− #define POLLIN_SET (EPOLLRDNORM | EPOLLRDBAND | EPOLLIN |
150− EPOLLHUP | EPOLLERR)
151−# ^ source.c meta.preprocessor.macro meta.group punctuation.section.group.end
152−
153−ENVIRONMENT
154− $SYSTEMD_LOG_LEVEL
155−# ^ punctuation.definition.variable
156−# ^^^^^^^^^^^^^^^^^ constant.other
157− systemd reads the log level from this environment variable. This
158− can be overridden with --log-level=.
159−
160−SEE ALSO
161− The systemd Homepage[11], systemd-system.conf(5), locale.conf(5)
162−# ^^^^^^^^^^^^^^^^^^^ entity.name.function
assets/syntaxes/02_Extra/syntax_test_tsv.tsvdeleted−60
@@ -1,60 +0,0 @@
1−# SYNTAX TEST "CSV.sublime-syntax"
2−Forename Surname House No. Street City Postcode
3−#^^^^^^^ meta.field-1
4−# ^ punctuation.separator.sequence
5−# ^^^^^^^ meta.field-2
6−# ^ punctuation.separator.sequence
7−# ^^^^^^^^^ meta.field-3
8−# ^ punctuation.separator.sequence
9−# ^^^^^^ meta.field-4
10−# ^ punctuation.separator.sequence
11−# ^^^^ meta.field-1
12−# ^ punctuation.separator.sequence
13−# ^^^^^^^^ meta.field-2
14−John Doe 87 Logon Road Citiville TU43 6GH
15−#^^^ meta.field-1
16−# ^ punctuation.separator.sequence
17−# ^^^ meta.field-2
18−# ^ punctuation.separator.sequence
19−# ^^ meta.field-3
20−# ^ punctuation.separator.sequence
21−# ^^^^^^^^^^ meta.field-4
22−# ^ punctuation.separator.sequence
23−# ^^^^^^^^^ meta.field-1
24−# ^ punctuation.separator.sequence
25−# ^^^^^^^^ meta.field-2
26−Jane Doe 22 """Fun"" Street" "The City County" FA90 1XA
27−#^^^ meta.field-1
28−# ^ punctuation.separator.sequence
29−# ^^^ meta.field-2
30−# ^ punctuation.separator.sequence
31−# ^^ meta.field-3
32−# ^ punctuation.separator.sequence
33−# ^^^^^^^^^^^^^^^^ meta.field-4 string.quoted.double
34−# ^^ constant.character.escape
35−# ^^ constant.character.escape
36−# ^ punctuation.separator.sequence
37−# ^ meta.field-1 string.quoted.double punctuation.definition.string.begin
38−# ^^^^^^^^^^^^^^^^^ meta.field-1 string.quoted.double
39−# ^ meta.field-1 string.quoted.double punctuation.definition.string.end
40−# ^ punctuation.separator.sequence
41−# ^^^^^^^^ meta.field-2
42−Fred Bloggs "19" "Street
43−#^^^ meta.field-1
44−# ^ punctuation.separator.sequence
45−# ^^^^^^ meta.field-2
46−# ^ punctuation.separator.sequence
47−# ^^^ meta.field-3 string.quoted.double
48−# ^ punctuation.separator.sequence
49−# ^ meta.field-4 punctuation.definition.string.begin
50−# ^^^^^^^^ meta.field-4 string.quoted.double
51−Spanning Multiple ""
52−#^^^^^^^^^^^^^^^^^^^^ meta.field-4 string.quoted.double
53−# ^^ constant.character.escape
54−Lines" Citee P0stc0d3
55−#^^^^^ meta.field-4 string.quoted.double
56−# ^ meta.field-4 punctuation.definition.string.end
57−# ^ punctuation.separator.sequence
58−# ^^^^^ meta.field-1
59−# ^ punctuation.separator.sequence
60−# ^^^^^^^^ meta.field-2
assets/syntaxes/02_Extra/syslog.sublime-syntaxdeleted−63
@@ -1,63 +0,0 @@
1−%YAML 1.2
2−---
3−# http://www.sublimetext.com/docs/3/syntax.html
4−name: syslog
5−file_extensions:
6− - syslog
7−scope: text.log.syslog
8−contexts:
9− main:
10− - match: ^(\w+\s+\d+)\s+(\d{2}:\d{2}:\d{2})
11− scope: meta.datetime.syslog constant.numeric.syslog
12− captures:
13− 1: meta.date.syslog
14− 2: meta.time.syslog
15− push: loghost
16− - match: ^
17− push: text
18− loghost:
19− - match: '[\w:.-]+'
20− scope: entity.other.attribute-name.loghost.syslog
21− set: process
22− process:
23− - match: ([\w.-]+)(?:(\[)(\d+)(\]))?([ :])
24− captures:
25− 1: support.function.process.syslog
26− 2: punctuation.separator.pid.begin.syslog
27− 3: meta.pid.syslog meta.number.integer.syslog constant.numeric.value.syslog
28− 4: punctuation.separator.pid.end.syslog
29− 5: punctuation.separator.mapping.syslog
30− set: structured-data
31− structured-data:
32− - match: '\['
33− scope: punctuation.section.mapping.begin.syslog
34− push:
35− - match: \]
36− scope: punctuation.section.mapping.end.syslog
37− pop: true
38− - match: \w+
39− scope: variable.parameter.syslog
40− - match: =
41− scope: keyword.operator.assignment.syslog
42− push:
43− - match: '[^\s\]]+'
44− scope: constant.other.syslog
45− pop: true
46− - match: (?=\])
47− pop: true
48− - match: (?=\S)
49− set: text
50− text:
51− - match: $
52− pop: true
53− - match: '<\w+>'
54− scope: constant.language.syslog
55− - match: \b(CMD)\b\s+(\()
56− captures:
57− 1: entity.name.label.syslog
58− 2: punctuation.section.block.begin.syslog
59− embed: scope:source.shell.bash
60− escape: \)$
61− escape_captures:
62− 0: punctuation.section.block.end.syslog
63− - include: scope:text.log
assets/themes.bin

Binary file not shown.

assets/themes/Coldarkdeleted−1

Submodule changed.

assets/themes/base16-256.tmTheme → assets/themes/ansi-dark.tmThemerenamed+22−69
@@ -3,22 +3,14 @@
33<plist version="1.0">
44 <dict>
55 <!--
6− Most base16 users should use the base16 theme. This theme, base16-256,
7− is for users who configure their terminal with a 256-color variant of a
8− base16 theme, and who use base16-shell. DO NOT use this theme simply
9− because your terminal supports 256 colors.
10−
11− base16: https://github.com/chriskempson/base16
12− base16-shell: https://github.com/chriskempson/base16-shell
13−
146 The colors in this theme are encoded as #RRGGBBAA where RR is an ANSI
15− palette number from 00 to ff (the 256 terminal colors), and AA is the
16− special value 00 to indicate this encoding is being used.
7+ palette number from 00 to 0f, and AA is the special value 00 to indicate
8+ that this encoding is being used.
179 -->
1810 <key>author</key>
1911 <string>Template: Chris Kempson, Scheme: Mitchell Kember</string>
2012 <key>name</key>
21− <string>Base16 256</string>
13+ <string>ANSI Dark</string>
2214 <key>colorSpaceName</key>
2315 <string>sRGB</string>
2416 <key>settings</key>
@@ -33,15 +25,15 @@
3325 <key>foreground</key>
3426 <string>#07000000</string>
3527 <key>invisibles</key>
36− <string>#08000000</string>
28+ <string>#07000000</string>
3729 <key>lineHighlight</key>
38− <string>#08000000</string>
30+ <string>#07000000</string>
3931 <key>selection</key>
40− <string>#13000000</string>
32+ <string>#07000000</string>
4133 <key>gutter</key>
42− <string>#12000000</string>
34+ <string>#00000000</string>
4335 <key>gutterForeground</key>
44− <string>#08000000</string>
36+ <string>#07000000</string>
4537 </dict>
4638 </dict>
4739 <dict>
@@ -63,7 +55,7 @@
6355 <key>settings</key>
6456 <dict>
6557 <key>foreground</key>
66− <string>#08000000</string>
58+ <string>#02000000</string>
6759 </dict>
6860 </dict>
6961 <dict>
@@ -140,7 +132,7 @@
140132 <key>settings</key>
141133 <dict>
142134 <key>foreground</key>
143− <string>#11000000</string>
135+ <string>#06000000</string>
144136 </dict>
145137 </dict>
146138 <dict>
@@ -162,7 +154,7 @@
162154 <key>settings</key>
163155 <dict>
164156 <key>foreground</key>
165− <string>#0f000000</string>
157+ <string>#07000000</string>
166158 </dict>
167159 </dict>
168160 <dict>
@@ -217,7 +209,7 @@
217209 <key>settings</key>
218210 <dict>
219211 <key>foreground</key>
220− <string>#10000000</string>
212+ <string>#03000000</string>
221213 </dict>
222214 </dict>
223215 <dict>
@@ -228,7 +220,7 @@
228220 <key>settings</key>
229221 <dict>
230222 <key>foreground</key>
231− <string>#10000000</string>
223+ <string>#03000000</string>
232224 </dict>
233225 </dict>
234226 <dict>
@@ -239,7 +231,7 @@
239231 <key>settings</key>
240232 <dict>
241233 <key>foreground</key>
242− <string>#10000000</string>
234+ <string>#03000000</string>
243235 </dict>
244236 </dict>
245237 <dict>
@@ -250,7 +242,7 @@
250242 <key>settings</key>
251243 <dict>
252244 <key>foreground</key>
253− <string>#10000000</string>
245+ <string>#03000000</string>
254246 </dict>
255247 </dict>
256248 <dict>
@@ -272,7 +264,7 @@
272264 <key>settings</key>
273265 <dict>
274266 <key>foreground</key>
275− <string>#10000000</string>
267+ <string>#03000000</string>
276268 </dict>
277269 </dict>
278270 <dict>
@@ -305,7 +297,7 @@
305297 <key>settings</key>
306298 <dict>
307299 <key>foreground</key>
308− <string>#10000000</string>
300+ <string>#03000000</string>
309301 </dict>
310302 </dict>
311303 <dict>
@@ -329,7 +321,7 @@
329321 <key>settings</key>
330322 <dict>
331323 <key>foreground</key>
332− <string>#10000000</string>
324+ <string>#03000000</string>
333325 </dict>
334326 </dict>
335327 <dict>
@@ -388,7 +380,7 @@
388380 <key>settings</key>
389381 <dict>
390382 <key>foreground</key>
391− <string>#10000000</string>
383+ <string>#03000000</string>
392384 </dict>
393385 </dict>
394386 <dict>
@@ -399,20 +391,7 @@
399391 <key>settings</key>
400392 <dict>
401393 <key>foreground</key>
402− <string>#10000000</string>
403− </dict>
404− </dict>
405− <dict>
406− <key>name</key>
407− <string>Separator</string>
408− <key>scope</key>
409− <string>meta.separator</string>
410− <key>settings</key>
411− <dict>
412− <key>background</key>
413− <string>#13000000</string>
414− <key>foreground</key>
415− <string>#07000000</string>
394+ <string>#03000000</string>
416395 </dict>
417396 </dict>
418397 <dict>
@@ -502,7 +481,7 @@
502481 <key>background</key>
503482 <string>#01000000</string>
504483 <key>foreground</key>
505− <string>#0f000000</string>
484+ <string>#07000000</string>
506485 </dict>
507486 </dict>
508487 <dict>
@@ -513,37 +492,11 @@
513492 <key>settings</key>
514493 <dict>
515494 <key>background</key>
516− <string>#10000000</string>
495+ <string>#03000000</string>
517496 <key>foreground</key>
518497 <string>#00000000</string>
519498 </dict>
520499 </dict>
521− <dict>
522− <key>name</key>
523− <string>Deprecated</string>
524− <key>scope</key>
525− <string>invalid.deprecated</string>
526− <key>settings</key>
527− <dict>
528− <key>background</key>
529− <string>#11000000</string>
530− <key>foreground</key>
531− <string>#0f000000</string>
532− </dict>
533− </dict>
534− <dict>
535− <key>name</key>
536− <string>Unimplemented</string>
537− <key>scope</key>
538− <string>invalid.unimplemented</string>
539− <key>settings</key>
540− <dict>
541− <key>background</key>
542− <string>#08000000</string>
543− <key>foreground</key>
544− <string>#0f000000</string>
545− </dict>
546− </dict>
547500 </array>
548501 <key>uuid</key>
549502 <string>uuid</string>
assets/themes/ansi.tmTheme → assets/themes/ansi-light.tmThemerenamed+87−13
@@ -3,14 +3,14 @@
33<plist version="1.0">
44 <dict>
55 <!--
6− The colors in this theme are encoded as #RRGGBBAA where:
7− * If AA is 00, then RR is an ANSI palette number from 00 to 07.
8− * If AA is 01, the terminal's default fg/bg color is used.
6+ The colors in this theme are encoded as #RRGGBBAA where RR is an ANSI
7+ palette number from 00 to 0f, and AA is the special value 00 to indicate
8+ that this encoding is being used.
99 -->
1010 <key>author</key>
1111 <string>Template: Chris Kempson, Scheme: Mitchell Kember</string>
1212 <key>name</key>
13− <string>ANSI</string>
13+ <string>ANSI Light</string>
1414 <key>colorSpaceName</key>
1515 <string>sRGB</string>
1616 <key>settings</key>
@@ -19,17 +19,32 @@
1919 <key>settings</key>
2020 <dict>
2121 <key>background</key>
22− <string>#00000001</string>
23− <key>foreground</key>
24− <string>#00000001</string>
25− <!--
26− Explicitly set the gutter color since bat falls back to a
27− hardcoded DEFAULT_GUTTER_COLOR otherwise.
28− -->
22+ <string>#07000000</string>
23+ <key>caret</key>
24+ <string>#00000000</string>
25+ <key>foreground</key>
26+ <string>#00000000</string>
27+ <key>invisibles</key>
28+ <string>#00000000</string>
29+ <key>lineHighlight</key>
30+ <string>#00000000</string>
31+ <key>selection</key>
32+ <string>#00000000</string>
2933 <key>gutter</key>
30− <string>#00000001</string>
34+ <string>#07000000</string>
3135 <key>gutterForeground</key>
32− <string>#00000001</string>
36+ <string>#00000000</string>
37+ </dict>
38+ </dict>
39+ <dict>
40+ <key>name</key>
41+ <string>Text</string>
42+ <key>scope</key>
43+ <string>variable.parameter.function</string>
44+ <key>settings</key>
45+ <dict>
46+ <key>foreground</key>
47+ <string>#00000000</string>
3348 </dict>
3449 </dict>
3550 <dict>
@@ -43,6 +58,39 @@
4358 <string>#02000000</string>
4459 </dict>
4560 </dict>
61+ <dict>
62+ <key>name</key>
63+ <string>Punctuation</string>
64+ <key>scope</key>
65+ <string>punctuation.definition.string, punctuation.definition.variable, punctuation.definition.string, punctuation.definition.parameters, punctuation.definition.string, punctuation.definition.array</string>
66+ <key>settings</key>
67+ <dict>
68+ <key>foreground</key>
69+ <string>#00000000</string>
70+ </dict>
71+ </dict>
72+ <dict>
73+ <key>name</key>
74+ <string>Delimiters</string>
75+ <key>scope</key>
76+ <string>none</string>
77+ <key>settings</key>
78+ <dict>
79+ <key>foreground</key>
80+ <string>#00000000</string>
81+ </dict>
82+ </dict>
83+ <dict>
84+ <key>name</key>
85+ <string>Operators</string>
86+ <key>scope</key>
87+ <string>keyword.operator</string>
88+ <key>settings</key>
89+ <dict>
90+ <key>foreground</key>
91+ <string>#00000000</string>
92+ </dict>
93+ </dict>
4694 <dict>
4795 <key>name</key>
4896 <string>Keywords</string>
@@ -54,6 +102,17 @@
54102 <string>#05000000</string>
55103 </dict>
56104 </dict>
105+ <dict>
106+ <key>name</key>
107+ <string>Variables</string>
108+ <key>scope</key>
109+ <string>variable</string>
110+ <key>settings</key>
111+ <dict>
112+ <key>foreground</key>
113+ <string>#00000000</string>
114+ </dict>
115+ </dict>
57116 <dict>
58117 <key>name</key>
59118 <string>Functions</string>
@@ -87,6 +146,17 @@
87146 <string>#03000000</string>
88147 </dict>
89148 </dict>
149+ <dict>
150+ <key>name</key>
151+ <string>Classes</string>
152+ <key>scope</key>
153+ <string>meta.class</string>
154+ <key>settings</key>
155+ <dict>
156+ <key>foreground</key>
157+ <string>#00000000</string>
158+ </dict>
159+ </dict>
90160 <dict>
91161 <key>name</key>
92162 <string>Methods</string>
@@ -410,6 +480,8 @@
410480 <dict>
411481 <key>background</key>
412482 <string>#01000000</string>
483+ <key>foreground</key>
484+ <string>#00000000</string>
413485 </dict>
414486 </dict>
415487 <dict>
@@ -421,6 +493,8 @@
421493 <dict>
422494 <key>background</key>
423495 <string>#03000000</string>
496+ <key>foreground</key>
497+ <string>#07000000</string>
424498 </dict>
425499 </dict>
426500 </array>
assets/themes/base16.tmTheme+2−9
@@ -3,16 +3,9 @@
33<plist version="1.0">
44 <dict>
55 <!--
6− This theme is meant for users who configure their terminal with a base16
7− color theme. If you use a 256-color variant along with base16-shell, use
8− the bat theme base16-256 instead.
9−
10− base16: https://github.com/chriskempson/base16
11− base16-shell: https://github.com/chriskempson/base16-shell
12−
136 The colors in this theme are encoded as #RRGGBBAA where RR is an ANSI
14− palette number from 00 to 0f (the 8 colors and their bright versions),
15− and AA is the special value 00 to indicate this encoding is being used.
7+ palette number from 00 to 0f, and AA is the special value 00 to indicate
8+ that this encoding is being used.
169 -->
1710 <key>author</key>
1811 <string>Template: Chris Kempson, Scheme: Mitchell Kember</string>
assets/themes/dracula-sublime+1−1

Submodule changed.

assets/themes/gruvboxdeleted−1

Submodule changed.

assets/themes/onehalf+1−1

Submodule changed.

assets/themes/visual-studio-dark-plusdeleted−1

Submodule changed.

assets/themes/zenburn+1−1

Submodule changed.

build.rs+11−32
@@ -8,7 +8,6 @@ fn main() {}
88
99#[cfg(feature = "application")]
1010fn main() -> Result<(), Box<dyn std::error::Error>> {
11− use std::collections::HashMap;
1211 use std::error::Error;
1312 use std::fs;
1413 use std::path::Path;
@@ -16,32 +15,27 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
1615 // Read environment variables.
1716 let project_name = option_env!("PROJECT_NAME").unwrap_or("bat");
1817 let executable_name = option_env!("PROJECT_EXECUTABLE").unwrap_or(project_name);
19− let executable_name_uppercase = executable_name.to_uppercase();
2018 static PROJECT_VERSION: &str = env!("CARGO_PKG_VERSION");
2119
22− /// Generates a file from a template.
20+ /// Generates a file from a liquid template.
2321 fn template(
24− variables: &HashMap<&str, &str>,
22+ variables: &liquid::Object,
2523 in_file: &str,
2624 out_file: impl AsRef<Path>,
2725 ) -> Result<(), Box<dyn Error>> {
28− let mut content = fs::read_to_string(in_file)?;
26+ let template = liquid::ParserBuilder::with_stdlib()
27+ .build()?
28+ .parse(&fs::read_to_string(in_file)?)?;
2929
30− for (variable_name, value) in variables {
31− // Replace {{variable_name}} by the value
32− let pattern = format!("{{{{{variable_name}}}}}", variable_name = variable_name);
33− content = content.replace(&pattern, value);
34− }
35−
36− fs::write(out_file, content)?;
30+ fs::write(out_file, template.render(variables)?)?;
3731 Ok(())
3832 }
3933
40− let mut variables = HashMap::new();
41− variables.insert("PROJECT_NAME", project_name);
42− variables.insert("PROJECT_EXECUTABLE", executable_name);
43− variables.insert("PROJECT_EXECUTABLE_UPPERCASE", &executable_name_uppercase);
44− variables.insert("PROJECT_VERSION", PROJECT_VERSION);
34+ let variables = liquid::object!({
35+ "PROJECT_NAME": project_name,
36+ "PROJECT_EXECUTABLE": executable_name,
37+ "PROJECT_VERSION": PROJECT_VERSION,
38+ });
4539
4640 let out_dir_env = std::env::var_os("OUT_DIR").expect("OUT_DIR to be set in build.rs");
4741 let out_dir = Path::new(&out_dir_env);
@@ -54,26 +48,11 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
5448 "assets/manual/bat.1.in",
5549 out_dir.join("assets/manual/bat.1"),
5650 )?;
57− template(
58− &variables,
59− "assets/completions/bat.bash.in",
60− out_dir.join("assets/completions/bat.bash"),
61− )?;
6251 template(
6352 &variables,
6453 "assets/completions/bat.fish.in",
6554 out_dir.join("assets/completions/bat.fish"),
6655 )?;
67− template(
68− &variables,
69− "assets/completions/_bat.ps1.in",
70− out_dir.join("assets/completions/_bat.ps1"),
71− )?;
72− template(
73− &variables,
74− "assets/completions/bat.zsh.in",
75− out_dir.join("assets/completions/bat.zsh"),
76− )?;
7756
7857 Ok(())
7958}
ci/.gitattributesnew file+1
@@ -0,0 +1 @@
1+* linguist-vendored
ci/before_deploy.bashnew file+188
@@ -0,0 +1,188 @@
1+#!/usr/bin/env bash
2+# Building and packaging for release
3+set -ex
4+
5+# Ensure environment variables exist.
6+if [[ -z "$PROJECT_NAME" ]]; then
7+ export PROJECT_NAME="bat"
8+fi
9+
10+build() {
11+ cargo build --bins --target "$TARGET" --release --verbose
12+}
13+
14+pack() {
15+ local tempdir
16+ local out_dir
17+ local package_name
18+ local gcc_prefix
19+
20+ tempdir=$(mktemp -d 2>/dev/null || mktemp -d -t tmp)
21+ out_dir=$(pwd)
22+ package_name="$PROJECT_NAME-$TRAVIS_TAG-$TARGET"
23+
24+ if [[ $TARGET == "arm-unknown-linux-gnueabihf" ]]; then
25+ gcc_prefix="arm-linux-gnueabihf-"
26+ elif [[ $TARGET == "aarch64-unknown-linux-gnu" ]]; then
27+ gcc_prefix="aarch64-linux-gnu-"
28+ else
29+ gcc_prefix=""
30+ fi
31+
32+ # create a "staging" directory
33+ mkdir "$tempdir/$package_name"
34+ mkdir "$tempdir/$package_name/autocomplete"
35+
36+ # copying the main binary
37+ cp "target/$TARGET/release/$PROJECT_NAME" "$tempdir/$package_name/"
38+ "${gcc_prefix}"strip "$tempdir/$package_name/$PROJECT_NAME"
39+
40+ # manpage, readme and license
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"
43+ cp LICENSE-MIT "$tempdir/$package_name"
44+ cp LICENSE-APACHE "$tempdir/$package_name"
45+
46+ # various autocomplete
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"
49+ # cp target/"$TARGET"/release/build/"$PROJECT_NAME"-*/out/"$PROJECT_NAME".fish "$tempdir/$package_name/autocomplete"
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"
52+
53+ # archiving
54+ pushd "$tempdir"
55+ tar czf "$out_dir/$package_name.tar.gz" "$package_name"/*
56+ popd
57+ rm -r "$tempdir"
58+}
59+
60+make_deb() {
61+ local tempdir
62+ local architecture
63+ local version
64+ local dpkgname
65+ local conflictname
66+ local gcc_prefix
67+ local homepage
68+ local maintainer
69+
70+ homepage="https://github.com/sharkdp/bat"
71+ maintainer="David Peter <mail@david-peter.de>"
72+
73+ case $TARGET in
74+ x86_64*)
75+ architecture=amd64
76+ gcc_prefix=""
77+ ;;
78+ i686*)
79+ architecture=i386
80+ gcc_prefix=""
81+ ;;
82+ aarch64*)
83+ architecture=arm64
84+ gcc_prefix="aarch64-linux-gnu-"
85+ ;;
86+ arm*hf)
87+ architecture=armhf
88+ gcc_prefix="arm-linux-gnueabihf-"
89+ ;;
90+ *)
91+ echo "make_deb: skipping target '${TARGET}'" >&2
92+ return 0
93+ ;;
94+ esac
95+ version=${TRAVIS_TAG#v}
96+ if [[ $TARGET = *musl* ]]; then
97+ dpkgname=$PROJECT_NAME-musl
98+ conflictname=$PROJECT_NAME
99+ else
100+ dpkgname=$PROJECT_NAME
101+ conflictname=$PROJECT_NAME-musl
102+ fi
103+
104+ tempdir=$(mktemp -d 2>/dev/null || mktemp -d -t tmp)
105+
106+ # copy the main binary
107+ install -Dm755 "target/$TARGET/release/$PROJECT_NAME" "$tempdir/usr/bin/$PROJECT_NAME"
108+ "${gcc_prefix}"strip "$tempdir/usr/bin/$PROJECT_NAME"
109+
110+ # manpage
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"
113+
114+ # completions
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+
117+ # readme and license
118+ install -Dm644 README.md "$tempdir/usr/share/doc/$PROJECT_NAME/README.md"
119+ install -Dm644 LICENSE-MIT "$tempdir/usr/share/doc/$PROJECT_NAME/LICENSE-MIT"
120+ install -Dm644 LICENSE-APACHE "$tempdir/usr/share/doc/$PROJECT_NAME/LICENSE-APACHE"
121+ cat > "$tempdir/usr/share/doc/$PROJECT_NAME/copyright" <<EOF
122+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
123+Upstream-Name: $PROJECT_NAME
124+Source: $homepage
125+
126+Files: *
127+Copyright: $maintainer
128+License: Apache-2.0 or MIT
129+
130+License: Apache-2.0
131+ On Debian systems, the complete text of the Apache-2.0 can be found in the
132+ file /usr/share/common-licenses/Apache-2.0.
133+
134+License: MIT
135+ Permission is hereby granted, free of charge, to any
136+ person obtaining a copy of this software and associated
137+ documentation files (the "Software"), to deal in the
138+ Software without restriction, including without
139+ limitation the rights to use, copy, modify, merge,
140+ publish, distribute, sublicense, and/or sell copies of
141+ the Software, and to permit persons to whom the Software
142+ is furnished to do so, subject to the following
143+ conditions:
144+ .
145+ The above copyright notice and this permission notice
146+ shall be included in all copies or substantial portions
147+ of the Software.
148+ .
149+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
150+ ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
151+ TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
152+ PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
153+ SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
154+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
155+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
156+ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
157+ DEALINGS IN THE SOFTWARE.
158+EOF
159+
160+ # Control file
161+ mkdir "$tempdir/DEBIAN"
162+ cat > "$tempdir/DEBIAN/control" <<EOF
163+Package: $dpkgname
164+Version: $version
165+Section: utils
166+Priority: optional
167+Maintainer: $maintainer
168+Homepage: $homepage
169+Architecture: $architecture
170+Provides: $PROJECT_NAME
171+Conflicts: $conflictname
172+Description: A cat(1) clone with wings.
173+ A cat(1) clone with syntax highlighting and Git integration.
174+EOF
175+
176+ fakeroot dpkg-deb --build "$tempdir" "${dpkgname}_${version}_${architecture}.deb"
177+}
178+
179+
180+main() {
181+ build
182+ pack
183+ if [[ $TARGET = *linux* ]]; then
184+ make_deb
185+ fi
186+}
187+
188+main
ci/before_deploy.ps1new file+28
@@ -0,0 +1,28 @@
1+# This script takes care of packaging the build artifacts that will go in the
2+# release zipfile
3+
4+$SRC_DIR = $PWD.Path
5+$STAGE = [System.Guid]::NewGuid().ToString()
6+
7+Set-Location $ENV:Temp
8+New-Item -Type Directory -Name $STAGE
9+Set-Location $STAGE
10+
11+$ZIP = "$SRC_DIR\$($Env:CRATE_NAME)-$($Env:APPVEYOR_REPO_TAG_NAME)-$($Env:TARGET).zip"
12+
13+Copy-Item "$SRC_DIR\target\release\bat.exe" '.\'
14+# TODO: disabled for now, see issue #372
15+# Copy-Item $SRC_DIR\target\release\build\bat-*\out\_bat.ps1 '.\'
16+
17+# readme and license
18+Copy-Item $SRC_DIR\README.md '.\'
19+Copy-Item $SRC_DIR\LICENSE-MIT '.\'
20+Copy-Item $SRC_DIR\LICENSE-APACHE '.\'
21+
22+7z a "$ZIP" *
23+
24+Push-AppveyorArtifact "$ZIP"
25+
26+Set-Location ..
27+Remove-Item $STAGE -Force -Recurse
28+Set-Location $SRC_DIR
ci/before_install.bashnew file+38
@@ -0,0 +1,38 @@
1+#!/usr/bin/env bash
2+
3+set -ex
4+
5+if [ "$TRAVIS_OS_NAME" != linux ]; then
6+ exit 0
7+fi
8+
9+sudo apt-get update
10+
11+# needed for musl targets
12+sudo apt-get install -y musl-tools
13+
14+# needed to build deb packages
15+sudo apt-get install -y fakeroot
16+
17+# needed for i686 linux gnu target
18+if [[ $TARGET == i686-unknown-linux-gnu ]]; then
19+ sudo apt-get install -y gcc-multilib
20+fi
21+
22+# needed for cross-compiling for arm
23+if [[ $TARGET == arm-unknown-linux-gnueabihf ]]; then
24+ sudo apt-get install -y \
25+ gcc-4.8-arm-linux-gnueabihf \
26+ binutils-arm-linux-gnueabihf \
27+ libc6-armhf-cross \
28+ libc6-dev-armhf-cross
29+fi
30+
31+# needed for cross-compiling for arm64
32+if [[ $TARGET == aarch64-unknown-linux-gnu ]]; then
33+ sudo apt-get install -y \
34+ gcc-4.8-aarch64-linux-gnu \
35+ binutils-aarch64-linux-gnu \
36+ gcc-aarch64-linux-gnu \
37+ libc6-dev-arm64-cross
38+fi
ci/script.bashnew file+20
@@ -0,0 +1,20 @@
1+#!/usr/bin/env bash
2+
3+set -ex
4+
5+# Incorporate TARGET env var to the build and test process
6+cargo build --target "$TARGET" --verbose
7+
8+# We cannot run arm executables on linux
9+if [[ $TARGET != arm-unknown-linux-gnueabihf ]] && [[ $TARGET != aarch64-unknown-linux-gnu ]]; then
10+ cargo test --target "$TARGET" --verbose
11+
12+ # Run 'bat' on its own source code and the README
13+ cargo run --target "$TARGET" -- src/bin/bat/main.rs README.md --paging=never
14+fi
15+
16+# Check bat-as-a-library, which has a smaller set of dependencies
17+cargo check --target "$TARGET" --verbose --lib --no-default-features --features regex-onig
18+cargo check --target "$TARGET" --verbose --lib --no-default-features --features regex-onig,git
19+cargo check --target "$TARGET" --verbose --lib --no-default-features --features regex-onig,paging
20+cargo check --target "$TARGET" --verbose --lib --no-default-features --features regex-onig,git,paging
diagnostics/info.sh+4−6
@@ -58,8 +58,7 @@ _bat_:run() {
5858 _out "$BAT" --version
5959 _out env | grep '^BAT_\|^PAGER='
6060
61− local cache_dir
62− cache_dir="$($BAT --cache-dir)"
61+ local cache_dir="$(bat --cache-dir)"
6362 if [[ -f "${cache_dir}/syntaxes.bin" ]]; then
6463 _print_command "$BAT" "--list-languages"
6564 echo "Found custom syntax set."
@@ -80,8 +79,8 @@ _bat_config_:run() {
8079_bat_wrapper_:run() {
8180 _bat_wrapper_:detect_wrapper() {
8281 local bat="$1"
83− if file "$(command -v "${bat}")" | grep "text executable" &> /dev/null; then
84− _out_fence cat "$(command -v "${bat}")"
82+ if file "$(which "${bat}")" | grep "text executable" &> /dev/null; then
83+ _out_fence cat "$(which "${bat}")"
8584 return
8685 fi
8786
@@ -105,8 +104,7 @@ _bat_wrapper_function_:run() {
105104 fi ;;
106105
107106 *bash* | *zsh*)
108− local type
109− type="$("$SHELL" --login -i -c "type ${command}" 2>&1)"
107+ local type="$("$SHELL" --login -i -c "type ${command}" 2>&1)"
110108 if grep 'function' <<< "$type" &> /dev/null; then
111109 _out_fence "$SHELL" --login -i -c "declare -f ${command}"
112110 return
doc/README-ja.md+29−54
@@ -1,6 +1,7 @@
11<p align="center">
22 <img src="logo-header.svg" alt="bat - a cat clone with wings"><br>
3− <a href="https://github.com/sharkdp/bat/actions?query=workflow%3ACICD"><img src="https://github.com/sharkdp/bat/workflows/CICD/badge.svg" alt="Build Status"></a>
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?svg=true"></a>
45 <img src="https://img.shields.io/crates/l/bat.svg" alt="license">
56 <a href="https://crates.io/crates/bat"><img src="https://img.shields.io/crates/v/bat.svg?colorB=319e8c" alt="Version info"></a><br>
67 シンタックスハイライトとGitとの連携機能付きの <i>cat(1)</i> クローン。
@@ -11,12 +12,8 @@
1112 <a href="#使い方">使い方</a> •
1213 <a href="#インストール">インストール</a> •
1314 <a href="#カスタマイズ">カスタマイズ</a> •
14− <a href="#プロジェクトの目標と既存の類似したOSS">プロジェクトの目標と既存の類似したOSS</a><br>
15− [<a href="../README.md">English</a>]
16− [<a href="README-zh.md">中文</a>]
17− [日本語]
18− [<a href="README-ko.md">한국어</a>]
19− [<a href="README-ru.md">Русский</a>]
15+ <a href="#プロジェクトの目標と既存の類似したOSS">プロジェクトの目標と既存の類似したOSS</a> •
16+ 翻訳 [<a href="https://github.com/chinanf-boy/bat-zh">中文</a>][<a href="README-ja.md">日本語</a>][<a href="README-ko.md">한국어</a>]
2017</p>
2118
2219### シンタックスハイライト
@@ -42,13 +39,13 @@
4239
4340### 自動ページング
4441
45−出力が1つの画面に対して大きすぎる場合、`bat` は自身の出力をページャー(例えば `less`) にパイプで繋げます。
42+出力が1つの画面に対して大きすぎる場合、`bat` は自身の出力を `less` にパイプで繋げることが可能です。
4643
4744### ファイルの連結
4845
4946あなたはさらにファイルを連結させるために使うことも可能です:wink:。
50−`bat` は非対話型のターミナルを検出すると(すなわち他のプロセスにパイプしたりファイル出力していると)、
51−`bat` は `cat` の完全互換として振る舞い、
47+`bat` は非対話型のターミナルを検出すると、
48+いつでも `cat` の完全互換として振る舞い、
5249プレーンなファイルを表示します。
5350
5451## 使い方
@@ -65,9 +62,7 @@
6562> bat src/*.rs
6663```
6764
68−標準入力から自動的に構文を決定させたい場合(ハイライトされるのは、
69−たいていは `#!/bin/sh` のようなシバンを利用して、
70−ファイルの一行目から構文を決定できる場合のみです)
65+標準入力から自動的に構文を決定させたい場合
7166
7267```bash
7368> curl -s https://sh.rustup.rs | bat
@@ -98,17 +93,6 @@ bat f - g # output 'f', then stdin, then 'g'.
9893
9994### 他のツールとの統合
10095
101−#### `fzf`
102−
103−[`fzf`](https://github.com/junegunn/fzf) のプレビューウィンドウに `bat` を使用できます。
104−その場合、`bat` の `--color=always` オプションを用いてカラー出力を強制しなければなりません。
105−また、`--line-range` オプションを用いることで巨大なファイルの読み込み時間を制限できます:
106−```bash
107−fzf --preview 'bat --color=always --style=numbers --line-range=:500 {}'
108−```
109−
110−詳しくは [`fzf` の `README`](https://github.com/junegunn/fzf#preview-window) を参照してください。
111−
11296#### `find` or `fd`
11397
11498`find` の `-exec` オプションを使用して、`bat` ですべての検索結果をプレビューできます:
@@ -135,7 +119,8 @@ batgrep needle src/
135119```bash
136120tail -f /var/log/pacman.log | bat --paging=never -l log
137121```
138−注意事項:`tail -f`と組み合わせるには、ページングをオフにしなければなりません。また、この場合は構文が自動検出されないため、明示的に指定(`-l log`)しています。
122+Note that we have to switch off paging in order for this to work. We have also specified the syntax
123+explicitly (`-l log`), as it can not be auto-detected in this case.
139124
140125#### `git`
141126
@@ -168,7 +153,7 @@ man 2 select
168153```
169154
170155フォーマットの問題が発生した場合は
171−`MANROFFOPT="-c"` を設定する必要もあります。
156+`MANROFFOPT = "-c"` を設定する必要もあります。
172157
173158これを新しいコマンドにバンドルしたい場合は [`batman`](https://github.com/eth-p/bat-extras/blob/master/doc/batman.md) も使用できます。
174159
@@ -181,31 +166,21 @@ man 2 select
181166
182167## インストール
183168
184−[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg)](https://repology.org/project/bat-cat/versions)
169+[![Packaging status](https://repology.org/badge/vertical-allrepos/bat.svg)](https://repology.org/project/bat/versions)
185170
186−### On Ubuntu (`apt` を使用)
171+### On Ubuntu
187172*... や他のDebianベースのLinuxディストリビューション*
188173
189−Ubuntu Eoan 19.10 または Debian 不安定版 sid 以降の [the Ubuntu `bat` package](https://packages.ubuntu.com/eoan/bat) または [the Debian `bat` package](https://packages.debian.org/sid/bat) からインストールできます:
174+Ubuntu Eoan 19.10 または Debian 不安定版 sid 以降の [the Ubuntu `bat` package](https://packages.ubuntu.com/eoan/bat) または [the Debian `bat` package](https://packages.debian.org/sid/bat) をインストールできます:
190175
191176```bash
192177apt install bat
193178```
194179
195−`apt` を使用して `bat` をインストールした場合、実行可能ファイルの名前が `bat` ではなく `batcat` になることがあります([他のパッケージとの名前衝突のため](https://github.com/sharkdp/bat/issues/982))。`bat -> batcat` のシンボリックリンクまたはエイリアスを設定することで、実行可能ファイル名が異なることによる問題の発生を防ぎ、他のディストリビューションと一貫性を保てます。
196−
197−``` bash
198−mkdir -p ~/.local/bin
199−ln -s /usr/bin/batcat ~/.local/bin/bat
200−```
201−
202−### On Ubuntu (最新の `.deb` パッケージを使用)
203−*... や他のDebianベースのLinuxディストリビューション
204−
205180batの最新リリースを実行する場合、または Ubuntu/Debian の古いバージョンを使用している場合は、[release page](https://github.com/sharkdp/bat/releases) から最新の `.deb` パッケージをダウンロードし、
206181次の方法でインストールします:
207182```bash
208−sudo dpkg -i bat_0.18.3_amd64.deb # adapt version number and architecture
183+sudo dpkg -i bat_0.15.4_amd64.deb # adapt version number and architecture
209184```
210185
211186### On Alpine Linux
@@ -258,7 +233,7 @@ pkg を使用してプリコンパイルされた [`bat` package](https://www.fr
258233pkg install bat
259234```
260235
261−または FreeBSD ポートから自分でビルドすることもできます:
236+または FreeBSD ポートから自分でビルドする:
262237
263238```bash
264239cd /usr/ports/textproc/bat
@@ -361,13 +336,13 @@ ansible-galaxy install aeimer.install_bat
361336### From binaries
362337
363338
364−多くの異なるアーキテクチャのためのプレビルドバージョンを[リリースページ](https://github.com/sharkdp/bat/releases)からチェックしてみてください。静的にリンクされている多くのバイナリも利用できます: ファイル名に `musl` を含むアーカイブを探してみてください。
339+多くの異なるアーキテクチャのためのプレビルドバージョンを[リリースページ](https://github.com/sharkdp/bat/releases)からチェックしてみてください。静的にリンクされている多くのバイナリも利用できます: ファイル名に `musl` を含むアーカイブを探します。
365340
366341### From source
367342
368343
369−`bat` をソースからビルドしたいならば、Rust 1.51 以上の環境が必要です。
370−`cargo` を使用してビルドすることができます:
344+`bat` をソースからビルドしたいならば、Rust 1.36 以上の環境が必要です。
345+そして `cargo` をビルドに対して使用します:
371346
372347```bash
373348cargo install --locked bat
@@ -407,12 +382,12 @@ bat --list-themes | fzf --preview="bat --theme={} --color=always /path/to/file"
407382
408383### 新しい構文の追加 / 言語の定義
409384
410−`bat` はシンタックスハイライトのための [`syntect`](https://github.com/trishume/syntect/)
385+`bat` はシンタックスハイライトのための [`syntext`](https://github.com/trishume/syntect/)
411386という素晴らしいライブラリを使用しています。`syntect` は、
412387[Sublime Text の `.sublime-syntax` ファイル](https://www.sublimetext.com/docs/3/syntax.html)
413388とテーマを読み取ることができます。新しい構文を定義するために以下の手順を行います。
414389
415−構文定義ファイルを入れておくためのフォルダを作ります:
390+構文定義ファイルを入れておくためのフォルダを作る:
416391
417392```bash
418393mkdir -p "$(bat --config-dir)/syntaxes"
@@ -453,13 +428,13 @@ git clone https://github.com/greggb/sublime-snazzy
453428bat cache --build
454429```
455430
456−最後に、 `bat --list-themes` で新しいテーマが利用可能かチェックします
431+最後に、 `bat --list-themes` で新しいテーマが利用可能がチェックします
457432
458433### 異なるページャーの使用
459434
460435`bat` は環境変数 `PAGER` に使用するページャーを明記します。
461436この環境変数が定義されていない場合、デフォルトで `less` が使用されます。
462−もし、異なるページャーを使用したい場合は、`PAGER` を修正してください。
437+もし、異なるページャーが使用したい場合は、`PAGER` を修正してください。
463438または、`PAGER` を上書きする環境変数として `BAT_PAGER` を定義することも可能です。
464439
465440もし、ページャーにコマンドライン引数を渡したい場合は、
@@ -525,7 +500,7 @@ export BAT_CONFIG_PATH="/path/to/bat.conf"
525500# Use italic text on the terminal (not supported on all terminals)
526501--italic-text=always
527502
528−# Use C++ syntax for Arduino .ino files
503+# Use C++ syntax for .ino files
529504--map-syntax "*.ino:C++"
530505
531506# Use ".gitignore"-style highlighting for ".ignore" files
@@ -558,7 +533,7 @@ Windows 10では、`conhost.exe` (コマンドプロンプト)と
558533
559534Windows上の `bat` は Cygwin のunix風のpath(`/cygdrive/*`)をネイティブサポートしていません。絶対的なcygwinパスを引数として受けたときに、 `bat` は以下のエラーを返すでしょう: `The system cannot find the path specified. (os error 3)`
560535
561−wrapperを作成するか、以下の関数を `.bash_profile` に追記することで、この問題を解決することができます:
536+wrapperを作成するまたは以下の関数を `.bash_profile` に追記することでこの問題を解決することができます:
562537
563538```bash
564539bat() {
@@ -578,7 +553,7 @@ bat() {
578553
579554### ターミナルと色
580555
581−`bat` はターミナルがトゥルーカラーをサポートしている/していないに関係なくサポートします。
556+`bat` はターミナルがトゥルーカラーをサポートしている/していない関係なくサポートします。
582557しかし、シンタックスハイライトのテーマの色が8-bitカラーに最適化されていない場合、
58355824-bitであるトゥルーカラーをサポートしているターミナルを使用することを強く推奨します(`terminator`, `konsole`, `iTerm2`, ...)。
584559この [記事](https://gist.github.com/XVilka/8346728) には
@@ -635,16 +610,16 @@ cargo install --locked --force
635610
636611`bat` は以下の目標を達成しようと試みています:
637612
638−- 美しく高度なシンタックスハイライトの提供
613+- 美しい高度なシンタックスハイライトの提供
639614- ファイルの差分を表示するためのGitとの連携
640615- (POSIX) `cat` との完全互換
641−- ユーザーフレンドリーなコマンドラインインターフェースの提供
616+- ユーザーフレンドリーがコマンドラインインターフェースの提供
642617
643618あなたが同様のプログラムを探しているなら、多くの選択肢があります。
644619比較については [このドキュメント](alternatives.md) を参照してください。
645620
646621## ライセンス
647−Copyright (c) 2018-2021 [bat-developers](https://github.com/sharkdp/bat).
622+Copyright (c) 2018-2020 [bat-developers](https://github.com/sharkdp/bat).
648623
649624`bat` は MIT License 及び Apache License 2.0 の両方の条件の下で配布されています。
650625
doc/README-ko.md+191−466
@@ -1,90 +1,75 @@
11<p align="center">
2− <img src="logo-header.svg" alt="bat - a cat clone with wings"><br>
3− <a href="https://github.com/sharkdp/bat/actions?query=workflow%3ACICD"><img src="https://github.com/sharkdp/bat/workflows/CICD/badge.svg" alt="Build Status"></a>
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>
45 <img src="https://img.shields.io/crates/l/bat.svg" alt="license">
56 <a href="https://crates.io/crates/bat"><img src="https://img.shields.io/crates/v/bat.svg?colorB=319e8c" alt="Version info"></a><br>
6− 문법 강조와 Git 통합 기능의 <i>cat(1)</i> 클론
7+
8+ 문법 강조와 깃 통합 기능의 <i>cat(1)</i> 클론
79</p>
810
911<p align="center">
1012 <a href="#문법-강조">주요 기능들</a> •
1113 <a href="#사용법">사용법</a> •
1214 <a href="#설치">설치</a> •
13− <a href="#사용자화">사용자화</a> •
14− <a href="#프로젝트-목표와-대안들">프로젝트 목표와 대안들</a><br>
15− [<a href="../README.md">English</a>]
16− [<a href="README-zh.md">中文</a>]
17− [<a href="README-ja.md">日本語</a>]
18− [한국어]
19− [<a href="README-ru.md">Русский</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>]
2018</p>
2119
2220### 문법 강조
2321
24−`bat`은 다양한 프로그래밍 및 마크업 언어의 문법 강조(syntax highlighting) 기능을
25−지원합니다:
22+`bat`은 다양한 프로그래밍 언어와 마크업 언어에 대해 문법 강조(Syntax highlighting)기능을 지원하고 있습니다:
2623
2724![Syntax highlighting example](https://imgur.com/rGsdnDe.png)
2825
2926### Git 통합
3027
31−`bat`은 `git`을 통해 인덱스와 함께 변경분을 표시합니다
32−(왼쪽 사이드바를 확인하세요):
28+`bat`은 `git`을 통해 인덱스와 함께 변경분을 표시합니다 (왼쪽 바를 확인하세요):
3329
3430![Git integration example](https://i.imgur.com/2lSW4RE.png)
3531
36−### 비인쇄 문자 처리
32+### 표시할 수 없는 문자 처리
3733
38−`-A`/`--show-all` 옵션을 사용하여 비인쇄 문자를 표시 및 강조할 수 있습니다:
34+`-A`/`--show-all` 옵션을 사용하여 표시할수 없는 문자를 시각화 해줍니다:
3935
4036![Non-printable character example](https://i.imgur.com/WndGp9H.png)
4137
42−### 자동 페이징
38+### 자동 페이징
4339
44−`bat`은 기본적으로 한 화면에 비해 출력이 큰 경우 `less`와 같은 페이저(pager)로
45−출력을 연결(pipe)합니다.
46−만약 `bat`을 언제나 `cat`처럼 작동하게 하려면 (출력을 페이지하지 않기),
47−`--paging=never` 옵션을 커맨드 라인이나 설정 파일에 넣을 수 있습니다.
48−셸(shell) 설정에서 `cat`을 `bat`의 alias로 사용하려면,
49−`alias cat='bat --paging=never'`를 써서 기본 행동을 유지할 수 있습니다.
40+하나의 화면에 비해 출력이 너무 큰 경우, `less` 를 이용해 출력들을 연결할 수 있습니다.
5041
51−### 파일 연결(concatenation)
42+### 파일 연결
5243
53−페이저(pager)를 사용하더라도 `bat`은 파일들을 연결(concatenate)할 수 있습니다
54−:wink:.
55−`bat`이 비대화형(non-interactive) 터미널(예를 들어, 다른 프로세스나 파일에
56−연결(pipe)한 경우)을 감지하면, `bat`은 `--pager` 옵션의 값과 상관없이 `cat`과
57−동일하게 파일 내용을 그대로 출력합니다.
44+이 뿐만 아니라 파일을 연결할 때도 사용 할 수 있습니다. :wink: `bat`가 인터렉티브 하지 않은(non-interactive)가 감지하면 (예를 들어,다른 프로세스 혹은 파일과 파이프라인을 연결 한 경우) `bat`은 `cat`을 대신하여 동작하며 일반 파일 내용을 표기해줍니다.
5845
5946## 사용법
6047
61−터미널에 하나의 파일 표시하기
48+터미널에서 하나의 파일 표시하기
6249
6350```bash
6451> bat README.md
6552```
6653
67−여러 파일 한 번에 보여주기
54+여러 파일 한번에 보여주기
6855
6956```bash
7057> bat src/*.rs
7158```
7259
73−stdin에서 읽고, 자동으로 맞는 문법 결정하기 (참고로, 문법 강조는 파일의 첫
74−줄만으로 문법이 결정될 수 있을 때만 작동합니다.
75−이는 보통 `#!/bin/sh`와 같은 셔뱅(shebang)으로 판단합니다.)
60+stdin에서 읽고, 자동으로 맞는 문법 강조 적용하기
7661
7762```bash
7863> curl -s https://sh.rustup.rs | bat
7964```
8065
81−stdin에서 읽고, 명시적으로 언어 지정하기
66+stdin에서 읽고, 명시적으로 언어 지정하여 적용하기
8267
8368```bash
8469> yaml2json .travis.yml | json_pp | bat -l json
8570```
8671
87−비인쇄 문자 표시 및 강조하기
72+표시할 수 없는 문자 처리하기
8873```bash
8974> bat -A /etc/hosts
9075```
@@ -101,38 +86,23 @@ bat -n main.rs # show line numbers (only)
10186bat f - g # output 'f', then stdin, then 'g'.
10287```
10388
104−### 다른 도구들과 통합하기
105−
106−#### `fzf`
107−
108−`bat`을 [`fzf`](https://github.com/junegunn/fzf)의 프리뷰로 쓸 수 있습니다.
109−이를 위해서는 `bat`의 `--color=always` 옵션으로 항상 컬러 출력이 나오게 해야
110−합니다.
111−또한 `--line-range` 옵션으로 긴 파일의 로드 시간을 제한할 수 있습니다:
112−```bash
113−fzf --preview 'bat --color=always --style=numbers --line-range=:500 {}'
114−```
115−더 많은 정보는
116−[`fzf`의 `README`](https://github.com/junegunn/fzf#preview-window)를 참고하세요.
89+### 다른 툴과의 통합
11790
118−#### `find`와 `fd`
91+#### `find` 와 `fd`
11992
120−`find`의 `-exec` 옵션을 사용하여 모든 검색 결과를 `bat`로 미리 볼 수 있습니다:
93+`find`의 `-exec` 옵션을 사용하여 `bat`의 모든 검색 결과를 미리 볼 수 있습니다:
12194```bash
12295find … -exec bat {} +
12396```
12497
125−[`fd`](https://github.com/sharkdp/fd)를 사용하는 경우, `-X`/`--exec-batch`
126−옵션을 이용하여 동일하게 사용할 수 있습니다:
98+[`fd`](https://github.com/sharkdp/fd)를 사용하고 있는 경우, `-X`/`--exec-batch` 옵션을 이용하여 동일하게 사용할 수 있습니다:
12799```bash
128100fd … -X bat
129101```
130102
131103#### `ripgrep`
132104
133−[`batgrep`](https://github.com/eth-p/bat-extras/blob/master/doc/batgrep.md)을
134−통해 `bat`로 [`ripgrep`](https://github.com/BurntSushi/ripgrep)의 검색 결과를
135−출력할 수 있습니다.
105+[`batgrep`](https://github.com/eth-p/bat-extras/blob/master/doc/batgrep.md)과 함께, [`ripgrep`](https://github.com/BurntSushi/ripgrep)의 검색 결과를 `bat`을 이용하여 볼 수 있습니다.
136106
137107```bash
138108batgrep needle src/
@@ -140,401 +110,279 @@ batgrep needle src/
140110
141111#### `tail -f`
142112
143−`bat`와 `tail -f`를 함께 사용하여 주어진 파일을 문법 강조하며 지속적으로
144−모니터할 수 있습니다.
113+`bat` 과 `tail -f`를 함께 사용하여, 특정 파일을 문법 강조하며 지속적으로 모니터링 할 수 있습니다.
145114```bash
146115tail -f /var/log/pacman.log | bat --paging=never -l log
147116```
148−참고로 이 작업을 하려면 페이징 기능을 꺼야 합니다.
149−또한 이 경우 문법을 자동 감지할 수 없기 때문에, 적용할 문법을 직접 지정해야
150−합니다 (`-l log`).
117+이 작업을 하려면 페이징 기능을 꺼야합니다. 또, 자동 감지가 되지 않기 때문에, 적용되어야할 문법을 명시적(`-l log`)으로 지정해야 합니다.
151118
152119#### `git`
153120
154−`bat`과 `git show`를 함께 사용하여 주어진 파일의 이전 버전을 올바른 문법 강조로
155−볼 수 있습니다:
121+`bat`과 `git show`를 함께 사용하여 주어진 파일의 이전 기록을 문법 강조와 함께 볼 수 있습니다:
156122```bash
157123git show v0.6.0:src/main.rs | bat -l rs
158124```
159125
160−#### `git diff`
161−
162−`bat`과 `git diff`를 함께 사용하여 수정된 코드 주위의 줄들을 올바른 문법 강조로
163−볼 수 있습니다:
164−```bash
165−batdiff() {
166− git diff --name-only --diff-filter=d | xargs bat --diff
167−}
168−```
169−이것을 별도의 도구로 쓰고 싶다면
170−[`bat-extras`](https://github.com/eth-p/bat-extras)의 `batdiff`를 확인해 보세요.
171−
172−Git과 diff의 더 많은 지원을 원한다면
173−[`delta`](https://github.com/dandavison/delta)를 확인해 보세요.
126+diffs 내에서 문법 강조 표시는 현재 지원되지 않습니다. 이 기능은 [`delta`](https://github.com/dandavison/delta)에서 찾아 볼 수 있습니다.
174127
175128#### `xclip`
176129
177−`bat` 출력에 줄 번호와 Git 수정 내역이 포함되어서 파일의 내용을 복사하기
178−어려울 수 있습니다.
179−이 경우에는 `bat`의 `-p`/`--plain` 옵션을 사용하거나 간단히 `xclip`으로 출력을
180−연결(pipe)하면 됩니다:
130+`bat` 출력에서 라인 넘버와 Git 수정 내역이 같이 있어 파일 내용을 복사하기가 어려울 수도 있습니다. 이 경우에는 `-p`/`--plain` 옵션을 사용 하거나 출력 시 파이프라인으로 `xclip`을 사용하면 됩니다:
181131```bash
182132bat main.cpp | xclip
183133```
184−`bat`는 출력이 우회되고 있다는 것을 감지하여 파일 내용 그대로를 출력합니다.
134+`bat` 에서는 리다이렉트된 것으로 감지하여, 파일 내용만 출력합니다.
185135
186136#### `man`
187137
188−`MANPAGER` 환경 변수 설정을 통해 `bat`을 `man`의 컬러 페이저(pager)로 쓸 수
189−있습니다.
138+`bat`은 `MANPAGER` 환경 변수 설정을 통해 `man`에 대하여 컬러 페이져를 사용할 수 있습니다:
190139
191140```bash
192141export MANPAGER="sh -c 'col -bx | bat -l man -p'"
193142man 2 select
194143```
195−(Debian이나 Ubuntu를 사용한다면 `bat`을 `batcat`으로 치환하세요.)
196144
197−포팻 문제가 발생한다면, `MANROFFOPT="-c"`을 써야 할 수 있습니다.
145+포매팅 문제가 발생한다면, `MANROFFOPT="-c"` 설정 해야 할 수도 있습니다 .
198146
199−이 기능을 포함한 새로운 명령어를 선호한다면,
200−[`batman`](https://github.com/eth-p/bat-extras/blob/master/doc/batman.md)을 쓸
201−수도 있습니다.
147+새 커맨드에서 이 번들을 사용하려면, [`batman`](https://github.com/eth-p/bat-extras/blob/master/doc/batman.md)을 이용 할 수 있습니다.
202148
203−참고로 [Manpage 문법](../assets/syntaxes/Manpage.sublime-syntax)은 본 저장소에서
204−개발 중에 있으며, 아직 더 손봐야 합니다.
205149
206−또한, 이는 Mandoc의 `man` 구현에서
207−[작동하지 않습니다](https://github.com/sharkdp/bat/issues/1145).
150+참고 : [Manpage syntax](../assets/syntaxes/Manpage.sublime-syntax)는 이 저장소에서 개발되고 있으며, 아직 작업 중 입니다.
208151
209152#### `prettier` / `shfmt` / `rustfmt`
210153
211−[`prettybat`](https://github.com/eth-p/bat-extras/blob/master/doc/prettybat.md)
212−스크립트는 코드를 포맷하고 `bat`으로 출력하는 래퍼(wrapper)입니다.
154+[`prettybat`](https://github.com/eth-p/bat-extras/blob/master/doc/prettybat.md) 스크립트는 코드를 포맷팅하고 `bat`으로 출력해주는 랩퍼(wrapper) 입니다.
213155
214156
215157## 설치
216158
217−[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg)](https://repology.org/project/bat-cat/versions)
159+[![Packaging status](https://repology.org/badge/vertical-allrepos/bat.svg)](https://repology.org/project/bat/versions)
218160
219−### Ubuntu에서 (`apt` 사용)
220−*... 그리고 다른 Debian 기반의 Linux 배포판들에서.*
161+### On Ubuntu
162+*... 그리고 기타 Debian 기반의 Linux 배포판들.*
221163
222−`bat`은 [Ubuntu](https://packages.ubuntu.com/eoan/bat)와
223−[Debian](https://packages.debian.org/sid/bat) 패키지 배포 과정에 도입되는 중이며,
224−Eoan 19.10 버전의 Ubuntu에서부터 제공됩니다.
225−현재 Debian에서는 불안정한 "Sid" 브랜치에서만 `bat`이 제공됩니다.
226−
227−만약 충분히 최신 버전의 Ubuntu/Debian이 설치되어 있다면 간단히 다음을 실행하세요:
164+Ubuntu Eoan 19.10 혹은 Debian unstable sid 이후 버전 부터는 [Ubuntu용 `bat` 패키지](https://packages.ubuntu.com/eoan/bat)나 [Debian용 `bat` 패키지](https://packages.debian.org/sid/bat) 를 설치 할 수 있습니다.
228165
229166```bash
230167apt install bat
231168```
232169
233−**중요**: 만약 `bat`을 이와 같이 설치한다면, ([다른 패키지와의 이름
234−충돌](https://github.com/sharkdp/bat/issues/982)로 인하여) `bat` 대신에
235−`batcat`이라는 이름의 실행 파일로 설치될 수 있음을 참고하세요.
236−이에 따른 문제들과 다른 배포판들과의 일관성을 위하여 `bat -> batcat` symlink
237−혹은 alias를 설정할 수 있습니다:
238−``` bash
239−mkdir -p ~/.local/bin
240−ln -s /usr/bin/batcat ~/.local/bin/bat
241−```
242−
243−### Ubuntu에서 (가장 최신 `.deb` 패키지들 사용)
244−*... 그리고 다른 Debian 기반의 Linux 배포판들에서.*
245−
246−만약 여러분이 설치한 Ubuntu/Debian에 패키지가 배포되지 않거나 가장 최신 릴리즈된
247−`bat`을 원한다면, [릴리즈 페이지](https://github.com/sharkdp/bat/releases)에서
248−다음과 같이 `.deb` 패키지를 받아 설치하세요:
170+만약 최근 릴리즈된 bat을 사용을 원하거나 buntu/Debian 예전 버전을 사용하는 경우, [릴리즈 페이지](https://github.com/sharkdp/bat/releases)에서 다음과 같이 `.deb` 패키지를 받아 설치 할 수도 있습니다:
249171
250172```bash
251−sudo dpkg -i bat_0.18.3_amd64.deb # adapt version number and architecture
173+sudo dpkg -i bat_0.15.4_amd64.deb # adapt version number and architecture
252174```
253175
254−### Alpine Linux에서
176+### On Alpine Linux
255177
256−적절한 저장소가 활성화되어 있다면, 공식 소스를 통해
257−[`bat` 패키지](https://pkgs.alpinelinux.org/packages?name=bat)를 설치할 수
258−있습니다:
178+공식 소스를 통해 [`bat` 패키지](https://pkgs.alpinelinux.org/packages?name=bat) 를 설치 할 수 있습니다:
259179
260180```bash
261181apk add bat
262182```
263183
264−### Arch Linux에서
184+### On Arch Linux
265185
266−공식 소스를 통해
267−[`bat` 패키지](https://www.archlinux.org/packages/community/x86_64/bat/)를
268−설치할 수 있습니다:
186+공식 소스를 통해 [`bat` 패키지](https://www.archlinux.org/packages/community/x86_64/bat/)를 설치할 수 있습니다:
269187
270188```bash
271189pacman -S bat
272190```
273191
274−### Fedora에서
192+### On Fedora
275193
276−공식
277−[Fedora 모듈](https://docs.fedoraproject.org/en-US/modularity/using-modules/)
278−저장소에서
279−[`bat` 패키지](https://koji.fedoraproject.org/koji/packageinfo?packageID=27506)를
280−설치할 수 있습니다:
194+[공식 Fedora 모듈 저장소](https://docs.fedoraproject.org/en-US/modularity/using-modules/)에서 [`bat` 패키지](https://koji.fedoraproject.org/koji/packageinfo?packageID=27506)을 설치할 수 있습니다:
281195
282196```bash
283197dnf install bat
284198```
285199
286−### Funtoo Linux에서
287−
288−dev-kit을 통해 [`bat` 패키지](https://github.com/funtoo/dev-kit/tree/1.4-release/sys-apps/bat)를 설치할 수 있습니다:
289−
290−```bash
291−emerge sys-apps/bat
292−```
293−
294−### Gentoo Linux에서
200+### On Gentoo Linux
295201
296−공식 소스를 통해
297−[`bat` 패키지](https://packages.gentoo.org/packages/sys-apps/bat)를 설치할 수
298−있습니다:
202+공식 소스를 통해 [`bat` 패키지](https://packages.gentoo.org/packages/sys-apps/bat)를 설치할 수 있습니다.
299203
300204```bash
301205emerge sys-apps/bat
302206```
303207
304−### Void Linux에서
208+### On Void Linux
305209
306−xbps-install을 이용해 `bat`을 설치할 수 있습니다:
210+xbps-install를 이용해 `bat`을 설치할 수 있습니다:
307211```bash
308212xbps-install -S bat
309213```
310214
311−### Termux에서
312−
313−pkg를 이용해 `bat`을 설치할 수 있습니다:
314−```bash
315−pkg install bat
316−```
317−
318−### FreeBSD에서
215+### On FreeBSD
319216
320−pkg를 이용하여 미리 컴파일된
321−[`bat` 패키지](https://www.freshports.org/textproc/bat)를 설치할 수 있습니다:
217+pkg를 이용하여 미리 컴파일된 [`bat` 패키지](https://www.freshports.org/textproc/bat)를 설치할 수 있습니다:
322218
323219```bash
324220pkg install bat
325221```
326222
327−또는 FreeBSD 포트에서 직접 빌드할 수도 있습니다:
223+또는 FreeBSD 포트에서 직접 빌드할 수도 있습니다:
328224
329225```bash
330226cd /usr/ports/textproc/bat
331227make install
332228```
333229
334−### nix를 써서
230+### Via nix
335231
336−[nix package manager](https://nixos.org/nix)를 이용해 `bat`을 설치할 수
337−있습니다:
232+[nix package manager](https://nixos.org/nix)를 이용해 `bat`을 설치할 수 있습니다:
338233
339234```bash
340235nix-env -i bat
341236```
342237
343−### openSUSE에서
238+### On openSUSE
344239
345−zypper를 이용해 `bat`을 설치할 수 있습니다:
240+zypper을 이용해 `bat`을 설치할 수 있습니다:
346241
347242```bash
348243zypper install bat
349244```
350245
351−### snap 패키지를 써서
352−
353−지금으로서는 추천하는 snap 패키지가 없습니다.
354−제공되는 패키지들이 존재할 수는 있지만, 공식적으로 지원되지 않으며
355−[문제](https://github.com/sharkdp/bat/issues/1519)가 있을 수 있습니다.
356−
246+### On macOS
357247
358−### macOS (또는 Linux)에서 Homebrew를 써서
359−
360−[macOS의 Homebrew](https://formulae.brew.sh/formula/bat) 또는
361−[Linux의 Homebrew](https://formulae.brew.sh/formula-linux/bat)를 이용하여
362−`bat`을 설치할 수 있습니다.
248+[Homebrew](http://braumeister.org/formula/bat)를 이용해 `bat`을 설치할 수 있습니다:
363249
364250```bash
365251brew install bat
366252```
367253
368−### macOS에서 MacPorts를 써서
369−
370−[MacPorts](https://ports.macports.org/port/bat/summary)를 이용하여 `bat`을
371−설치할 수 있습니다:
254+또는 [MacPorts](https://ports.macports.org/port/bat/summary)를 사용할 수도 있습니다:
372255
373256```bash
374257port install bat
375258```
376259
377−### Windows에서
260+### On Windows
378261
379−Windows에서 `bat`을 설치할 수 있는 몇 가지 옵션들이 있습니다.
380−먼저 `bat`을 설치한 후,
381−["Windows에서 `bat` 사용하기"](#windows에서-bat-사용하기) 섹션을 살펴보세요.
262+Windows에서 `bat`을 설치할 수 있는 몇 가지 옵션들이 있습니다. 먼저 `bat`을 설치 한 후, ["Windows에서 사용하기"](#Windows에서-사용하기) 참고하시기 바랍니다.
382263
383−#### 전제 조건
264+#### With Chocolatey
384265
385−[Visual C++ 재배포 가능](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads)
386−패키지를 설치해야 합니다.
387−
388−#### Chocolatey를 써서
389−
390−[Chocolatey](https://chocolatey.org/packages/Bat)를 이용해 `bat`을 설치할 수
391−있습니다:
266+[Chocolatey](https://chocolatey.org/packages/Bat)를 이용해 `bat`을 설치할 수 있습니다:
392267```bash
393268choco install bat
394269```
395270
396−#### Scoop을 써서
271+#### With Scoop
397272
398273[scoop](https://scoop.sh/)을 이용해 `bat`을 설치할 수 있습니다:
399274```bash
400275scoop install bat
401276```
277+[Visual C++ Redistributable 패키지](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads)를 같이 설치해 주어야 합니다.
402278
403−#### 사전 빌드된 바이너리들로
279+#### From prebuilt binaries:
404280
405−[릴리즈 페이지](https://github.com/sharkdp/bat/releases)에서 사전 빌드된
406−바이너리를 다운받을 수 있습니다.
281+[릴리즈 페이지](https://github.com/sharkdp/bat/releases)에서 빌드된 바이너리를 다운받을 수 있습니다.
407282
408−[Visual C++ 재배포 가능](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads)
409−패키지를 설치해야 합니다.
283+[Visual C++ Redistributable 패키지](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads)를 같이 설치해 주어야 합니다.
410284
411−### 바이너리들로
285+### Via Docker
412286
413−[릴리즈 페이지](https://github.com/sharkdp/bat/releases)에서 다양한 아키텍처를
414−위해 사전 빌드된 버전들을 확인할 수 있습니다.
415−정적 링크 바이너리들은 파일 이름에 `musl` 이 포함된 아카이브들을 확인하세요.
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+```
416292
417−### 소스에서
293+### Via Ansible
418294
419−`bat`의 소스를 빌드하기 위해서는, Rust 1.51 이상이 필요합니다.
420−`cargo`를 이용해 전부 빌드할 수 있습니다:
295+[Ansible](https://www.ansible.com/)을 사용해 `bat`을 설치할 수 있습니다:
421296
422297```bash
423−cargo install --locked bat
298+# Install role on local machine
299+ansible-galaxy install aeimer.install_bat
424300```
425301
426−참고로 man 페이지나 셸 자동 완성 파일과 같은 부가 파일들은 이 방법으로 설치될 수
427−없습니다.
428−이것들은 `cargo`에 의해 생성이 되고 (`build` 밑의) cargo 타켓 폴더에서 찾을 수
429−있습니다.
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
430320
431−## 사용자화
321+### From binaries
432322
433−### 문법 강조 테마
323+[릴리즈 페이지](https://github.com/sharkdp/bat/releases)에서 다양한 환경을 위해 빌드된 버전들을 확인 할 수 있습니다. 정적 링크 바이너리들은 아카이브에서 파일 이름에 `musl` 이 포함 파일로 확인 할 수 있습니다.
434324
435−`bat --list-themes`을 사용하여 사용 가능한 문법 강조 테마들의 목록을 확인할 수
436−있습니다.
437−`TwoDark` 테마를 선택하려면, `--theme=TwoDark` 옵션과 함께 `bat`을 사용하거나
438−`BAT_THEME` 환경 변수를 `TwoDark`로 설정하세요.
439−셸 시작 파일에 `export BAT_THEME="TwoDark"` 를 정의해 영구적으로 설정할 수
440−있습니다.
441−이 밖에 `bat`의 [설정 파일](#설정-파일)을 이용할 수 있습니다.
325+### From source
442326
443−만약 다른 테마들을 사용하여 특정 파일을 보고 싶다면, 다음 명령어를 쓸 수
444−있습니다(이 경우 [`fzf`](https://github.com/junegunn/fzf)가 필요합니다.)
327+`bat`의 소스를 직접 빌드하기 위해서는, Rust 1.36 이상이 필요하며 `cargo`를 이용해 빌드할 수 있습니다.
445328
446329```bash
447−bat --list-themes | fzf --preview="bat --theme={} --color=always /path/to/file"
330+cargo install --locked bat
448331```
449332
450−`bat`은 기본적으로 어두운 배경에 적합합니다.
451−그러나 밝은 배경의 터미널을 사용한다면 `GitHub`이나 `OneHalfLight`과 같은 테마가
452−더 잘 어울립니다.
453−아래 [새로운 테마 추가하기](#새로운-테마-추가하기) 섹션에 따라 커스텀 테마를
454−사용할 수도 있습니다.
333+일부 플랫폼에서는 `llvm` 그리고/또는 `libclang-dev` 설치가 필요할 수도 있습니다.
455334
456−### 8비트 테마
335+## 커스터마이즈
457336
458−`bat`은 트루컬러 지원이 되더라도 항상
459−[8비트 색상](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors)을 사용하는
460−세 개의 테마가 있습니다.
337+### 문법 강조 테마
461338
462−- `ansi`는 어떤 터미널에서도 무난하게 보입니다. 이는 3비트 색상을 사용합니다:
463− 검정, 빨강, 녹색, 노랑, 파랑, 마젠타, 시안, 하양.
464−- `base16`은 [base16](https://github.com/chriskempson/base16) 터미널 테마를 위해
465− 디자인되었습니다.
466− 이는 [base16 스타일 가이드라인](https://github.com/chriskempson/base16/blob/master/styling.md)에
467− 따라 4비트 색상(3비트 색상에 밝은 변형 추가)을 사용합니다.
468−- `base16-256`는 [base16-shell](https://github.com/chriskempson/base16-shell)을
469− 위해 디자인되었습니다.
470− 이는 16부터 21의 일부 밝은 색상을 8비트 색상으로 대치합니다.
471− 단지 256-색상 터미널을 쓰지만 base16-shell을 쓰지 않는다고 해서 이것을
472− 사용하지 **마십시오**.
339+`bat --list-themes`을 사용하면, 현재 사용 가능한 문법 강조 테마들을 확인할 수 있습니다. `TwoDark` 테마 선택하는 경우, `--theme=TwoDark` 옵션과 함께 `bat`을 사용하거나 환경변수에서 `BAT_THEME`를 `TwoDark`로 세팅해주면 됩니다. 쉘 시작 파일에 `export BAT_THEME="TwoDark"` 를 정의해 계속 사용도 가능합니다. 이 밖에 `bat`의 [설정 파일](#설정-파일)을 이용할 수도 있습니다.
473340
474−이들 테마는 더 제한적이지만, 트루컬러 테마에 비해 두 장점이 있습니다:
341+다른 테마를 미리 보고 싶은경우 다음 명령어와 같이 사용할 수 있습니다.(이 경우 [`fzf`](https://github.com/junegunn/fzf)가 필요합니다.)
475342
476−- 이들은 3비트 혹은 4비트 색상을 쓰는 다른 터미널 소프트웨어와 더 잘
477− 어울립니다.
478−- 만약 터미널 테마를 바꾼다면, 이미 화면 상의 `bat`의 출력도 이에 맞추어
479− 업데이트됩니다.
343+```bash
344+bat --list-themes | fzf --preview="bat --theme={} --color=always /path/to/file"
345+```
346+`bat`의 기본 테마는 어두운 배경색 터미널에 적합합니다. 만일 밝은 배경색을 사용할 경우에는 `GitHub` 이나 `OneHalfLight` 과 같은 테마가 더 잘 어울립니다. 아래 [새로운 테마 추가하기](#새로운-테마-추가하기)에 따라 커스텀 테마를 사용할수도 있습니다.
480347
481348### 출력 스타일
482349
483−`--style` 옵션을 이용하면 `bat`의 출력 모양을 조절할 수 있습니다.
484−예를 들어, `--style=numbers,changes`를 통해 Git 변경분과 줄 번호는 출력하지만
485−격자와 파일 헤더는 출력하지 않을 수 있습니다.
486−`BAT_STYLE` 환경 변수를 정의하여 이러한 수정을 영구적으로 하거나 `bat`의
487−[설정 파일](#설정-파일)을 사용하세요.
488−
489−### 새로운 문법 / 언어 정의 추가하기
490−
491−만약 `bat`에서 특정 문법이 지원되지 않을 경우, 다음의 절차를 통해 현재 `bat`
492−설치본에 새로운 문법을 쉽게 추가할 수 있습니다.
350+`--style` 옵션을 이용하여 `bat`의 출력 스타일을 변경 할 수 있습니다. 예를 들어, `--style=numbers,changes`는 Git 변경분과 라인 넘버에 대해서만 출력하며 눈금과 파일 헤더가 표시되지 않습니다. `BAT_STYLE` 환경 변수로 정의하여 계속해서 사용하거나`bat`의 [설정 파일](#설정-파일)을 사용할 수도 있습니다.
493351
494−`bat`은 문법 강조를 위해 훌륭한
495−[`syntect`](https://github.com/trishume/syntect/) 라이브러리를 사용합니다.
496−`syntect`는 임의의 [Sublime Text의 `.sublime-syntax`
497−파일](https://www.sublimetext.com/docs/3/syntax.html)과 테마를 읽을 수 있습니다.
352+### 새로운 문법 강조 / 언어 추가하기
498353
499−[Package Control](https://packagecontrol.io/)에 Sublime 문법 패키지를 찾는
500−방법이 잘 정리되어 있습니다.
501−일단 문법을 찾았다면:
354+`bat`은 문법 강조를 위해 [`syntect`](https://github.com/trishume/syntect/) 라이브러리를 사용하고 있습니다. `syntect`는 [Sublime Text의 `.sublime-syntax` 파일](https://www.sublimetext.com/docs/3/syntax.html)과 테마를 읽을 수 있습니다. 새로운 문법 강조를 추가하는 방법은 다음과 같습니다.
502355
503−1. 문법 정의 파일들을 넣을 폴더를 만듭니다:
356+우선 문법 정의 파일을 넣을 폴더를 만듭니다:
504357
505− ```bash
506− mkdir -p "$(bat --config-dir)/syntaxes"
507− cd "$(bat --config-dir)/syntaxes"
508−
509− # Put new '.sublime-syntax' language definition files
510− # in this folder (or its subdirectories), for example:
511− git clone https://github.com/tellnobody1/sublime-purescript-syntax
512− ```
358+```bash
359+mkdir -p "$(bat --config-dir)/syntaxes"
360+cd "$(bat --config-dir)/syntaxes"
513361
514−2. 이제 다음 명령어를 통해 파일들을 파싱(parse)하여 바이너리 캐시를 만듭니다.
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+```
515366
516− ```bash
517− bat cache --build
518− ```
367+다음 명령어를 통해 파일을 바이너리 캐시로 파싱합니다.
519368
520−3. 마지막으로, `bat --list-languages`로 새로 추가한 언어가 사용 가능한지
521− 확인합니다.
369+```bash
370+bat cache --build
371+```
522372
523− 만약 기본 설정으로 돌아갈 일이 생긴다면, 다음 명령어를 이용합니다:
373+마지막으로 `bat --list-languages`을 통해 새로운 언어가 사용 가능한지 확인합니다.
524374
525− ```bash
526− bat cache --clear
527− ```
375+기본 설정으로 돌아가려면, 다음 명령어를 이용합니다.:
528376
529−4. 만약 특정 문법이 `bat`에 기본적으로 포함되어 있어야 한다고 생각한다면, 방침과
530− 절차를 [여기](../doc/assets.md)서 읽은 후 "문법 요청(syntax request)"을 열어
531− 주세요: [문법 요청하기](https://github.com/sharkdp/bat/issues/new?labels=syntax-request&template=syntax_request.md).
377+```bash
378+bat cache --clear
379+```
532380
533381### 새로운 테마 추가하기
534382
535−이 과정은 새로운 문법 정의 추가 방식과 매우 비슷합니다.
383+새로운 문법 정의 추가와 매우 유사합니다.
536384
537−먼저, 새로운 문법 강조 테마 폴더를 만듭니다.
385+먼저, 새로운 문법 강조 테마 폴더를 만듭니다.
538386```bash
539387mkdir -p "$(bat --config-dir)/themes"
540388cd "$(bat --config-dir)/themes"
@@ -546,93 +394,32 @@ git clone https://github.com/greggb/sublime-snazzy
546394bat cache --build
547395```
548396
549−마지막으로 `bat --list-themes`을 통해 새로 추가한 테마들이 사용 가능한지
550−확인합니다.
551−
552−### 파일 타입 설정을 추가하거나 변경하기
553−
554−새로운 파일 이름 패턴을 추가하려면 (혹은 이미 존재하는 것을 변경하려면)
555−`--map-syntax` 커맨드 라인 옵션을 사용하세요.
556−이 옵션은 `pattern:syntax` 꼴의 인자를 받습니다.
557−이때 `pattern`은 파일 이름과 절대 파일 경로를 매치할 글로브(glob) 패턴입니다.
558−`syntax` 부분은 지원되는 언어의 전체 이름입니다
559−(`bat --list-languages`를 통해 개요를 확인하세요).
560−
561−참고: 이 옵션은 커맨드 라인에 넘겨 주는 것보다는 `bat`의 설정 파일에 넣는 것이
562−좋을 것입니다 (아래를 보세요).
563−
564−예시: "INI" 문법 강조를 `.conf` 파일 확장자의 모든 파일에 적용하려면, 다음을
565−사용하세요:
566−```bash
567−--map-syntax='*.conf:INI'
568−```
569−
570−예시: `.ignore`(완전 일치)이라는 이름의 모든 파일을 "Git Ignore" 문법으로
571−열려면, 다음을 사용하세요:
572−```bash
573−--map-syntax='.ignore:Git Ignore'
574−```
575−
576−예시: `/etc/apache2`의 하위 폴더들에 있는 모든 `.conf` 파일들을 "Apache Conf"
577−문법으로 열려면, 다음을 사용하세요 (이 대응(mapping)은 이미 내장되어 있습니다):
578−```bash
579−--map-syntax='/etc/apache2/**/*.conf:Apache Conf'
580−```
397+마지막으로 `bat --list-themes`을 통해 새로운 테마가 사용 가능한지 확인합니다.
581398
582−### 다른 페이저 사용하기
399+### 다른 페이져 사용하기
583400
584−`bat`은 환경 변수 `PAGER`에 명시된 페이저를 사용합니다.
585−이 변수가 정의되어 있지 않다면, `less`가 기본으로 사용됩니다.
586−만약 다른 페이저를 사용하고 싶다면, `PAGER` 변수를 수정하거나 `BAT_PAGER` 환경
587−변수를 설정하여 `PAGER`의 설정을 오버라이드(override)할 수 있습니다.
401+`bat`은 환경변수 `PAGER`로 사용할 페이져를 명시합니다. 만약 이 변수가 정의되어있지 않다면 `less`가 기본입니다. 만약 다른 페이져를 사용하고 싶다면 `PAGER` 변수를 수정하거나 `BAT_PAGER` 환경 변수로 `PAGER` 대신 정의 할 수도 있습니다.
588402
589−만약 커맨드라인 인수들을 페이저에게 넘겨 주려면, `PAGER`/`BAT_PAGER` 변수로
590−설정할 수 있습니다:
403+만약 커맨드라인 인수로 넘기려면, `PAGER`/`BAT_PAGER` 변수를 정의를 통해 사용 할 수 있습니다. :
591404
592405```bash
593406export BAT_PAGER="less -RF"
594407```
595408
596−환경 변수를 사용하는 대신, `bat`의 [설정 파일](#설정-파일)로 페이저를 설정할
597−수도 있습니다 (`--pager` 옵션).
409+환경 변수 대신, `bat`의 [설정 파일](#설정-파일)에서 페이져를 설정 할 수도 있습니다.(`--pager` 옵션)
598410
599−**참고**: 기본적으로, 페이저가 `less`로 설정되어 있다면 (그리고 커맨드 라인
600−옵션이 지정되어 있지 않다면), `bat`은 다음 옵션들을 페이저로 넘겨줍니다:
601−`-R`/`--RAW-CONTROL-CHARS`, `-F`/`--quit-if-one-screen` 그리고 `-X`/`--no-init`.
602−마지막 옵션(`-X`)은 530 이전 버전의 `less`에만 사용됩니다.
411+**참고**: 기본적으로 페이져가 `less`로 설정 되어있다면, `bat`은 다음 옵션들을 받을 수 있습니다: `-R`/`--RAW-CONTROL-CHARS`,
412+`-F`/`--quit-if-one-screen` 그리고 `-X`/`--no-init`. 마지막 옵션(`-X`)은 530 이전 버전에서만 사용됩니다.
603413
604−`-R` 옵션은 ANSI 색상을 올바르게 해석하기 위해 필요합니다.
605−두 번째 옵션(`-F`)은 출력 크기가 터미널의 세로 크기보다 작을 경우 less가 즉시
606−종료되도록 합니다.
607−이는 작은 파일을 다룰 때 페이저를 종료하기 위해 `q`를 누를 필요 없어서
608−편리합니다.
609−세 번째 옵션(`-X`)는 예전 버전의 `less`에 있는 `--quit-if-one-screen` 기능의
610−버그를 고치기 위해 필요합니다.
611−안타깝게도, 이는 `less`의 마우스 휠 지원과 호환되지 않습니다.
414+`-R` 옵션은 ANSI 컬러를 올바르게 해석하기 위해 필요합니다. 두번째 옵션 (`-F`)은 출력 크기가 터미널의 세로 크기보다 작을 경우 즉시 종료되도록 합니다.
415+페이져를 종료하기 위해 `q`를 누를 필요 없기 때문에 작은 파일을 다룰 때 용이합니다. 세번째 옵션(`-X`)는 `less` 이전 버전의 `--quit-if-one-screen` 기능과 함께 버그를 잡을 때 필요합니다. 안타깝게도, `less`의 마우스 휠 지원은 종료합니다.
612416
613−`less`의 예전 버전에서 마우스 휠 기능을 활성화하려면, `-R` 옵션을 넘겨주세요
614−(위의 예제처럼, 이 옵션은 quit-if-one-screen 기능을 비활성화합니다).
615−less 530과 이후 버전에서는 그대로 사용할 수 있습니다.
616−
617−### 들여쓰기
618−
619−`bat`은 페이저에 의존하지 않고 탭을 4 스페이스로 확장합니다.
620−이를 변경하려면 간단히 `--tabs` 인자에 표시되기를 원하는 스페이스 개수를
621−추가하세요.
622−
623−**참고**: (`bat`의 `--pager` 인자 혹은 `less`의 `LESS` 환경 변수를 통해)
624−페이저의 탭 길이를 지정하는 것은 효과가 없을 것인데, 이는 페이저가 이미
625−스페이스로 확장된 탭을 받기 때문입니다.
626−이 기능은 사이드바에 의한 들여쓰기 문제를 회피하기 위해 추가되었습니다.
627−`bat`을 `--tabs=0`과 함께 호출하면 이를 오버라이드하여 페이저가 탭을 처리하게
628−합니다.
417+`less` 예전 버전에서 마우스 휠 기능을 활성화 시키려면, `-R` 옵션을 사용하면 됩니다. (위의 예제처럼, 이 옵션은 quit-if-one-screen 기능을 비활성화 시킵니다.)
418+530 이하 버전에서는 그대로 사용할 수 있습니다.
629419
630420### 다크 모드
631421
632−macOS에서 다크 모드를 사용하고 있다면, `bat`가 OS 테마에 따라 다른 테마를
633−사용하도록 구성할 수 있습니다.
634−아래 스니펫은 _다크 모드_에서는 `default` 테마를, _라이트 모드_에서는 `GitHub`
635−테마를 사용하는 방법입니다.
422+macOS에서 다크 모드를 사용하고 있다면, OS 테마에 따라 다른 테마를 사용하도록 `bat`의 구성할 수 있습니다. 아래 코드는 라이트 모드에서는 `default` 테마를 다크모드에서는 `Github` 테마를 사용하는 방법입니다.
636423
637424```bash
638425alias cat="bat --theme=\$(defaults read -globalDomain AppleInterfaceStyle &> /dev/null && echo default || echo GitHub)"
@@ -640,89 +427,57 @@ alias cat="bat --theme=\$(defaults read -globalDomain AppleInterfaceStyle &> /de
640427
641428## 설정 파일
642429
643−`bat`는 설정 파일로도 사용자화 할 수 있습니다.
644−설정 파일의 위치는 운영 체제에 따라 다릅니다.
645−아래 커맨드를 통해 시스템의 기본 경로를 확인할 수 있습니다.
430+`bat` 설정 파일로 커스터마이즈 할 수 있습니다. 파일의 위치는 운영 체제에 따라 다릅니다. 아래 커맨드를 통해 시스템의 기본 경로를 알 수 있습니다.
646431```
647432bat --config-file
648433```
649434
650−또는, `BAT_CONFIG_PATH` 환경 변수를 사용하여 `bat`가 설정 파일의 기본 경로
651−이외의 위치를 사용하도록 할 수 있습니다.
435+또는, `BAT_CONFIG_PATH` 환경 변수를 사용하여 `bat`의 설정 파일 위치를 지정할 수 있습니다.
652436```bash
653437export BAT_CONFIG_PATH="/path/to/bat.conf"
654438```
655439
656−기본 설정 파일은 `--generate-config-file` 옵션으로 생성할 수 있습니다.
657−```bash
658−bat --generate-config-file
659−```
660−
661440### 포맷
662441
663−설정 파일은 단순히 커맨드 라인 인자들의 리스트입니다.
664−`bat --help`로 가능한 모든 옵션과 값들을 확인하세요.
665−추가적으로, 줄 앞에 `#` 문자를 추가해 주석을 넣을 수 있습니다.
442+설정 파일은 명령어 인수들의 리스트 입니다. `bat --help`를 이용하여 가능한 옵션들과 값들을 확인해 볼 수 있습니다. 또, `#` 으로 주석을 추가할수도 있습니다.
666443
667−설정 파일 예시:
444+설정 파일의 예:
668445```bash
669−# "TwoDark" 테마 설정하기
446+# Set the theme to "TwoDark"
670447--theme="TwoDark"
671448
672−# 줄 번호, Git 변경 내용, 파일 헤더 보이기 (격자 없이)
449+# Show line numbers, Git modifications and file header (but no grid)
673450--style="numbers,changes,header"
674451
675−# 터미널에서 이탤릭체 쓰기 (일부 터미널에서 미지원)
452+# Use italic text on the terminal (not supported on all terminals)
676453--italic-text=always
677454
678−# Arduino .ino 파일에 C++ 문법 쓰기
455+# Use C++ syntax for .ino files
679456--map-syntax "*.ino:C++"
680−```
681−
682−## Windows에서 `bat` 사용하기
683457
684−`bat`는 대부분의 경우 Windows에서 기본적으로 잘 작동하지만, 일부 기능은 추가적인
685−구성이 필요할 수 있습니다.
458+# Use ".gitignore"-style highlighting for ".ignore" files
459+--map-syntax ".ignore:Git Ignore"
460+```
686461
687−#### 전제 조건
462+## Windows에서 사용하기
688463
689−[Visual C++ 재배포 가능](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads)
690−패키지를 설치해야 합니다.
464+`bat` 대부분의 경우 Windows에서 기본적으로 잘 작동하지만, 일부 기능에는 추가 적인 구성이 필요할 수 있습니다.
691465
692−### 페이징
466+### 페이징
693467
694−Windows는 `more` 형식의 매우 제한된 페이저만 포함합니다.
695−Windows용 `less` 바이너리는
696−[공식 홈페이지](http://www.greenwoodsoftware.com/less/download.html)나
697−[Chocolatey](https://chocolatey.org/packages/Less)를 통해 다운로드 받을 수
698−있습니다.
699−이를 사용하려면 디렉터리 안의 바이너리를 `PATH`에 넣거나
700−[환경 변수로 정의](#using-a-different-pager)하세요.
701−[Chocolatey 패키지](#on-windows)는 `less`를 자동으로 설치합니다.
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`를 자동으로 설치할 수 있습니다.
702469
703470### 색상
704471
705−Windows 10은
706−[v1511](https://en.wikipedia.org/wiki/Windows_10_version_history#Version_1511_(November_Update))부터
707−기본적으로 `conhost.exe`(Command Prompt)와 PowerShell에서 색상을 지원하며,
708−최신 버전의 bash에서도 색상을 지원합니다.
709−이전 버전의 Windows에서는, [ConEmu](https://conemu.github.io/)가 포함된
710−[Cmder](http://cmder.net/)를 사용할 수 있습니다.
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/)를 사용할 수 있습니다 .
711473
712−**참고:** Git과 MSYS 버전의 `less`는 Windows에서 색상을 올바르게 해석하지
713−않습니다.
714−다른 페이저가 설치되어 있지 않은 경우, `--paging=never`을 넘겨주거나
715−`BAT_PAGER`을 빈 문자열로 설정하여 페이징을 완전히 비활성화 할 수 있습니다.
474+**참고:** `less`의 Git과 MSYS 버전은 Windows에서 색상을 올바르게 해석하지 않습니다. 다른 페이져가 설치되어 있지 않은 경우, `--paging=never` 하거나 `BAT_PAGER`를 빈 문자열로 설정하여 페이징을 완전히 비활성화 할 수 있습니다 .
716475
717476### Cygwin
718477
719−Windows에서의 `bat`은 기본적으로 Cygwin의 unix 스타일 경로(`/cygdrive/*`)를
720−지원하지 않습니다.
721−Cygwin 절대 경로를 인자로 받았을 때, `bat`은 다음과 같은 오류를 반환합니다:
722−`The system cannot find the path specified. (os error 3)`
478+Windows에서의 `bat`은 기본적으로 Cygwin의 unix 스타일의 경로(`/cygdrive/*`)를 지원하지 않습니다. cygwin 절대경로를 인자로 받았을 때, `bat`은 다음과 같이 오류를 반환합니다. `:The system cannot find the path specified. (os error 3)`
723479
724−이는 wrapper를 만들거나 다음 함수를 `.bash_profile`에 추가하여 해결할 수
725−있습니다:
480+이 경우, wrapper를 만들거나 다음 함수를 `.bash_profile`추가하여 문제를 해결하실 수 있습니다 :
726481
727482```bash
728483bat() {
@@ -738,98 +493,68 @@ bat() {
738493}
739494```
740495
741−## 문제 해결
496+## 트러블슈팅
742497
743498### 터미널과 색상
744499
745−`bat`은 터미널의 트루컬러 지원 여부와 상관 없이 동작합니다.
746−그러나 대부분 문법 강조 테마의 색상은 8비트 색상에 최적화되어 있지 않습니다.
747−따라서 24비트 트루컬러 지원이 되는 터미널(`terminator`, `konsole`, `iTerm2`,
748−...)을 사용하는 것을 적극 권장합니다.
749−트루컬러를 지원하는 터미널들과 더 자세한 정보는
750−[이 글](https://gist.github.com/XVilka/8346728)에서 찾아보실 수 있습니다.
500+`bat`은 터미널 트루컬러 지원 여부와 상관없이 동작합니다. 하지만, 문법 강조 테마의 색상이 8-bit 컬러에는 최적화 되어 있지 않고 있으며, 24-bit 트루컬러 지원하는 터미널 사용하는 것을 적극 권장합니다.(`terminator`, `konsole`, `iTerm2`, ...). [이 글](https://gist.github.com/XVilka/8346728)에서 24-bit 트루컬러 지원하는 터미널들을 찾아보실 수 있습니다.
751501
752−사용하고 있는 트루컬러 터미널에서 `COLORTERM` 변수를 `truecolor` 혹은
753−`24bit`로 설정되어 있는지 확인하세요.
754−그렇지 않을 경우, `bat`은 24비트 확장열(escape sequence)이 지원되는지 여부를
755−판단할 수 없습니다 (그리고 8비트 색상을 사용합니다).
502+사용하고 있는 터미널에서 `COLORTERM`을 `truecolor` 혹은
503+`24bit`으로 설정 되어있는지 확인하세요. 만약 아니라면, `bat`은 24-bit escape sequence를 지원되는지 여부를 판단 할 수 없습니다. (그리고 8-bit 색상으로 돌아갑니다.)
756504
757−### 줄 번호와 격자가 잘 보이지 않는 경우
505+### 라인 숫자와 눈금이 잘 보이지 않는 경우
758506
759−다른 테마를 사용해 보세요 (`bat --list-themes`에서 목록을 볼 수 있습니다).
760−`OneHalfDark`와 `OneHalfLight` 테마는 더 밝은 눈금과 선의 색상을 사용합니다.
507+다른 테마를 사용해 보세요. (`bat --list-themes`에서 테마들을 확인해 볼 수 있습니다.) `OneHalfDark` 과 `OneHalfLight` 테마는 눈금과 선의 색을 밝게 합니다.
761508
762509### 파일 인코딩
763510
764−`bat`은 기본적으로 UTF-8과 UTF-16을 지원합니다.
765−다른 모든 종류의 파일 인코딩에 대해서는, 일반적으로 인코딩을 자동으로 판별하는
766−방법이 없기 때문에 먼저 UTF-8으로 변환해야 할 수 있습니다.
767−이를 위해 `iconv`를 사용할 수 있습니다.
768−예시: Latin-1(ISO-8859-1)로 인코딩된 PHP 파일은 다음과 같이 처리할 수 있습니다:
511+`bat`은 기본적으로 UTF-8과 UTF-8을 제공합니다. 다른 파일 인코딩의 경우, 자동 감지 되지 않으므로 UTF-8로 먼저 변환해 주어야 합니다. 이렇게 할 때, `iconv`를 사용 할 수 있습니다. 예를 들어, Latin-1 (ISO-8859-1)로 인코딩된 PHP파일이라면 다음과 같이 사용할 수 있습니다.:
769512``` bash
770513iconv -f ISO-8859-1 -t UTF-8 my-file.php | bat
771514```
772−참고: `bat`으로 문법 자동 감지가 되지 않는 경우에는 `-l`/`--language` 옵션을
773−사용할 수 있습니다.
515+참고: `bat`으로 자동 감지가 되지 않는 경우에는 `-l`/`--language` 옵션을 사용할 수도 있습니다.
774516
775−## 개발
517+## 배포
776518
777519```bash
778−# 모든 서브모듈을 받기 위해 재귀적으로 복제하기
520+# Recursive clone to retrieve all submodules
779521git clone --recursive https://github.com/sharkdp/bat
780522
781−# (디버그 버전) 빌드
523+# Build (debug version)
782524cd bat
783525cargo build --bins
784526
785−# 단위 테스트와 통합 테스트 실행
527+# Run unit tests and integration tests
786528cargo test
787529
788−# (배포 버전) 설치
530+# Install (release version)
789531cargo install --locked
790532
791−# 수정된 문법과 테마가 적용된 bat 바이너리 빌드
533+# Build a bat binary with modified syntaxes and themes
792534bash assets/create.sh
793535cargo install --locked --force
794536```
795537
796−`bat`의 pretty-printing 기능을 라이브러리로 사용하는 애플리케이션을 만들고
797−싶다면, [API 문서](https://docs.rs/bat/)를 살펴보세요.
798−참고로 `bat`에 라이브러리로써 의존한다면, `regex-onig`나 `regex-fancy`를
799−기능으로 사용해야 합니다.
800−
801−## 기여하기
802−
803−[`CONTRIBUTING.md`](../CONTRIBUTING.md) 가이드를 살펴보세요.
804−
805538## 메인테이너들
806539
807540- [sharkdp](https://github.com/sharkdp)
808541- [eth-p](https://github.com/eth-p)
809−- [keith-hall](https://github.com/keith-hall)
810−- [Enselic](https://github.com/Enselic)
811−
812−## 보안 취약점
813−
814−만약 `bat`의 취약점을 발견하였다면, [David Peter](https://david-peter.de/)에게 메일로 연락주시기 바랍니다.
815542
816543## 프로젝트 목표와 대안들
817544
818−`bat`은 다음과 같은 목표를 달성하려고 합니다:
545+`bat`은 아래와 같은 목표를 달성하려고 합니다:
546+
547+- 아름답고 발전된 문법 강조 기능
548+- Git 연동을 통한 파일 수정 내역 확인
549+- (POSIX)`cat`의 대체제
550+- 사용자 친화적인 CLI 제공
819551
820−- 아름답고 발전된 문법 강조 기능 제공
821−- Git과의 연동을 통한 파일 변경 내용 확인
822−- (POSIX) `cat`의 대체제
823−- 사용자 친화적인 커맨드 라인 인터페이스 제공
824552
825−비슷한 프로그램들을 찾고 있다면 많은 대안들이 있습니다.
826−비교는 [이 문서](../doc/alternatives.md)를 참조해 주세요.
553+비슷한 프로그램들을 찾고 있다면, 많은 대안들이 있습니다. 비교는 [이 문서]((doc/alternatives.md))를 참조해주세요.
827554
828555## 라이센스
829−Copyright (c) 2018-2021 [bat-developers](https://github.com/sharkdp/bat).
556+Copyright (c) 2018-2020 [bat-developers](https://github.com/sharkdp/bat).
830557
831−`bat`는 여러분의 선택에 따라 MIT 라이센스 또는 Apache 라이센스 2.0의 조건에 따라
832−배포됩니다.
558+`bat`는 MIT 라이센스 및 Apache 라이센스 2.0의 조건에 따라 배포됩니다.
833559
834−라이센스의 세부사항은 [LICENSE-APACHE](../LICENSE-APACHE)와
835−[LICENSE-MIT](../LICENSE-MIT)를 참조하세요.
560+라이센스 세부사항은 [LICENSE-APACHE](LICENSE-APACHE)와 [LICENSE-MIT](LICENSE-MIT)를 참조하세요.
doc/README-ru.md+98−102
@@ -1,6 +1,7 @@
11<p align="center">
2− <img src="logo-header.svg" alt="bat - a cat clone with wings"><br>
3− <a href="https://github.com/sharkdp/bat/actions?query=workflow%3ACICD"><img src="https://github.com/sharkdp/bat/workflows/CICD/badge.svg" alt="Build Status"></a>
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>
45 <img src="https://img.shields.io/crates/l/bat.svg" alt="license">
56 <a href="https://crates.io/crates/bat"><img src="https://img.shields.io/crates/v/bat.svg?colorB=319e8c" alt="Version info"></a><br>
67 Клон утилиты <i>cat(1)</i> с поддержкой выделения синтаксиса и Git
@@ -11,12 +12,8 @@
1112 <a href="#как-использовать">Использование</a> •
1213 <a href="#установка">Установка</a> •
1314 <a href="#кастомизация">Кастомизация</a> •
14− <a href="#цели-и-альтернативы">Цели и альтернативы </a><br>
15− [<a href="../README.md">English]
16− [<a href="README-zh.md">中文</a>]
17− [<a href="README-ja.md">日本語</a>]
18− [<a href="README-ko.md">한국어</a>]
19− [Русский]
15+ <a href="#цели-и-альтернативы">Цели и альтернативы </a> •
16+ Перевод [<a href="https://github.com/chinanf-boy/bat-zh">中文</a>][<a href="doc/README-ja.md">日本語</a>][<a href="doc/README-ko.md">한국어</a>][<a href="doc/README-ru.md">Русский</a>]
2017</p>
2118
2219### Выделение синтаксиса
@@ -26,25 +23,25 @@
2623![Пример выделения синтаксиса](https://i.imgur.com/3FGy5tW.png)
2724
2825### Интеграция с Git
29−`bat` использует `git`, чтобы показать изменения в коде
26+`bat` использует `git` чтобы показать изменения в коде
3027(смотрите на левый сайдбар):
3128
3229![Пример интеграции с Git](https://i.imgur.com/azUAzdx.png)
3330
34−### Показать непечатаемые символы
31+### Показать символы, которые не возможно отобразить
3532
36−Вы можете использовать `-A` / `--show-all` флаг, чтобы показать символы, которые невозможно напечатать:
33+Вы можете использовать `-A` / `--show-all` флаг чтобы показать символы, которые невозможно напечатать:
3734
3835![Строка с неотображемыми символами](https://i.imgur.com/X0orYY9.png)
3936
4037### Автоматическое разделение текста
4138
42−`bat` умеет перенаправлять вывод в `less`, если вывод не помещается на экране полностью.
39+`bat` умеет траслировать вывод в `less` если вывод слишком большой, чтобы уместится на экране целиком
4340
4441### Объединение файлов
4542
46−О... Вы также можете объединять файлы :wink:. Когда
47−`bat` обнаружит неинтерактивный терминал (например, когда вы перенаправляете вывод в файл или процесс), он будет работать как утилита `cat` и выведет содержимое файлов как обычный текст (без подсветки синтаксиса).
43+О..вы так же можете объединять файлы :wink:. Всегда когда
44+`bat` обнаруживает неинтерактивный терминал (например когда вы направляете вывод в файл или процесс), `bat` будет работать как вставная замена `cat` и откатится к выводу это файла как обычного текста
4845
4946## Как использовать
5047
@@ -60,13 +57,13 @@
6057> bat src/*.rs
6158```
6259
63−Читаем из stdin и определяем синтаксис автоматически (внимание: это делается по заглавной строке файла, например, `#!/bin/sh`)
60+Читаем из stdin и определяем синтаксис автоматически (внимание, это работает, читая заглавную строку файла, например `#!/bin/sh` )
6461
6562```bash
6663> curl -s https://sh.rustup.rs | bat
6764```
6865
69−Прочитать из stdin с явным указанием языка
66+Читает из stdin и указываем что это за язык
7067
7168```bash
7269> yaml2json .travis.yml | json_pp | bat -l json
@@ -77,7 +74,7 @@
7774> bat -A /etc/hosts
7875```
7976
80−Использование в качестве замены `cat`
77+Использование как замена `cat`
8178
8279```bash
8380bat > note.md # мгновенно создаем новый файл
@@ -93,12 +90,12 @@ bat f - g # выводит 'f' в stdin, а потом 'g'.
9390
9491#### `find` или `fd`
9592
96−Вы можете использовать флаг `-exec` в `find`, чтобы посмотреть превью всех файлов в `bat`
93+Вы можете использовать флаг `-exec` в `find` чтобы посмотреть превью всех файлов в `bat`
9794```bash
9895find … -exec bat {} +
9996```
10097
101−Если вы используете [`fd`](https://github.com/sharkdp/fd), применяйте для этого флаг `-X`/`--exec-batch`:
98+Если вы используете [`fd`](https://github.com/sharkdp/fd), вы вполне можете использоваль флаг `-X`/`--exec-batch` чтобы сделать тоже самое:
10299```bash
103100fd … -X bat
104101```
@@ -113,15 +110,15 @@ batgrep needle src/
113110
114111#### `tail -f`
115112
116−`bat` может быть использован вместе с `tail -f`, чтобы выводить содержимое файла с подсветкой синтаксиса в реальном времени.
113+`bat` может быть использован с `tail -f` чтобы просматривать файл вместе с выделением синтаксиса
117114```bash
118115tail -f /var/log/pacman.log | bat --paging=never -l log
119116```
120−Заметьте, что мы должны отключить пэйджинг, чтобы это заработало. Мы также явно указали синтаксис (`-l log`), так как он не может быть автоматически определен в данном случае.
117+Заметье, что мы отключаем пэйджинг чтобы это заработало. Мы так-же указываем синтаксис (`-l log`), так как он не может быть определен в данном случае.
121118
122119#### `git`
123120
124−Вы можете использовать `bat` с `git show`, чтобы просмотреть старую версию файла с выделением синтаксиса:
121+Вы можете использовать `bat` с `git show` чтобы просмотреть старую версию файла с выделением синтаксиса:
125122```bash
126123git show v0.6.0:src/main.rs | bat -l rs
127124```
@@ -130,12 +127,11 @@ git show v0.6.0:src/main.rs | bat -l rs
130127
131128#### `xclip`
132129
133−Нумерация стро и отображение изменений затрудняет копирование содержимого файлов в буфер обмена.
134−Чтобы спроваиться с этим, используйте флаг `-p`/`--plain` или просто перенаправьте стандартный вывод в `xclip`:
130+Количество строк и просмотр изменений в `bat` может сделать копирование содержания файла немного сложной. Чтобы предотвратить это, используйте флаг `-p`/`--plain` или просто перевести вывод в `xclip`:
135131```bash
136132bat main.cpp | xclip
137133```
138−`bat` обнаружит перенаправление вывода и выведет обычный текст без выделения синтаксиса.
134+`bat` обнаружит, что вывод будет переведен, и выведет обычный текст без выделения синтаксиса.
139135
140136#### `man`
141137
@@ -147,26 +143,26 @@ export MANPAGER="sh -c 'col -bx | bat -l man -p'"
147143man 2 select
148144```
149145
150−Возможно вам понадобится также установить `MANROFFOPT="-c"`, если у вас есть проблемы с форматированием.
146+Возможно вам понадобится также установить `MANROFFOPT="-c"` если у вас есть проблемы с форматированием.
151147
152−Если вы хотите сделать этой одной командой, вы можете использовать [`batman`](https://github.com/eth-p/bat-extras/blob/master/doc/batman.md).
148+Если вы хотите сделать этой одной командной, вы можете использовать `batman`](https://github.com/eth-p/bat-extras/blob/master/doc/batman.md).
153149
154−Обратите внимание, что [синтаксис manpage](assets/syntaxes/02_Extra/Manpage.sublime-syntax) разрабатывается в этом репозитории и все еще находится в разработке.
150+Обратите внимание, что [синтаксис manpage](assets/syntaxes/02_Extra/Manpage.sublime-syntax) разрабатывается в этом репозитории, и все еще находится в разработке.
155151
156152#### `prettier` / `shfmt` / `rustfmt`
157153
158−[`Prettybat`](https://github.com/eth-p/bat-extras/blob/master/doc/prettybat.md) — скрипт, который форматирует код и выводит его с помощью `bat`.
154+[`Prettybat`](https://github.com/eth-p/bat-extras/blob/master/doc/prettybat.md) это скрипт, который форматирует код и выводит его с помощью `bat`.
159155
160156
161157## Установка
162158
163−[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg)](https://repology.org/project/bat-cat/versions)
159+[![Packaging status](https://repology.org/badge/vertical-allrepos/bat.svg)](https://repology.org/project/bat/versions)
164160
165161### Ubuntu (с помощью `apt`)
166162*... и другие дистрибутивы основанные на Debian.*
167163
168164`bat` есть в репозиториях [Ubuntu](https://packages.ubuntu.com/eoan/bat) и
169−[Debian](https://packages.debian.org/sid/bat) и доступен начиная с Ubuntu Eoan 19.10. На Debian `bat` пока что доступен только с нестабильной веткой "Sid".
165+[Debian](https://packages.debian.org/sid/bat), и доступен начиная с Ubuntu Eoan 19.10. На Debian `bat` пока-что доступен только с нестабильной веткой "Sid"
170166
171167Если ваша версия Ubuntu/Debian достаточно новая, вы можете установить `bat` так:
172168
@@ -174,26 +170,26 @@ man 2 select
174170apt install bat
175171```
176172
177−Если вы установили `bat` таким образом, то бинарный файл может быть установлен как `batcat` вместо `bat` (из-за [конфликта имени с другим пакетом](https://github.com/sharkdp/bat/issues/982)). Вы можете сделать симлинк или алиас `bat -> batcat`, чтобы предотвратить подобные проблемы и в других дистрибутивах.
173+Если вы установили `bat` таким образом, то бинарный файл может быть установлен как `batcat` заместо `bat` (из-за [имя конфлиует с другим пакетом](https://github.com/sharkdp/bat/issues/982)). Вы можете сделать симлинк или алиас `bat -> batcat` чтобы предотвратить проблемы которые могут произойти с другими дистрибутивами.
178174
179175``` bash
180176mkdir -p ~/.local/bin
181177ln -s /usr/bin/batcat ~/.local/bin/bat
182178```
183179
184−### Ubuntu (С помощью самого нового `.deb` пакета)
180+### Ubuntu (С помощью самоно нового `.deb` пакета)
185181*... и другие дистрибутивы Linux основанные на Debian*
186182
187−Если пакет еще недоступен в вашем Ubuntu/Debian дистрибутиве или вы хотите установить самую последнюю версию `bat`, то вы можете скачать самый последний `deb`-пакет отсюда:
183+Если пакет еще не был предоставлен в вашем Ubuntu/Debian или вы хотите самую последнюю версия `bat`, вы можете скачать самый последний `deb` пакет отсюда:
188184[release page](https://github.com/sharkdp/bat/releases) и установить так:
189185
190186```bash
191−sudo dpkg -i bat_0.18.3_amd64.deb # измените архитектуру и версию
187+sudo dpkg -i bat_0.15.4_amd64.deb # измените архитектуру и версию
192188```
193189
194190### Alpine Linux
195191
196−Вы можете установить [`bat`](https://pkgs.alpinelinux.org/packages?name=bat) из официальных источников:
192+Вы можете установить [`bat`](https://pkgs.alpinelinux.org/packages?name=bat) из оффициальных источников:
197193
198194```bash
199195apk add bat
@@ -201,7 +197,7 @@ apk add bat
201197
202198### Arch Linux
203199
204−Вы можете установить [`bat`](https://www.archlinux.org/packages/community/x86_64/bat/) из официального источника:
200+Вы можете установить [`bat`](https://www.archlinux.org/packages/community/x86_64/bat/) из оффициального источника:
205201
206202```bash
207203pacman -S bat
@@ -209,7 +205,7 @@ pacman -S bat
209205
210206### Fedora
211207
212−Вы можете установить [`bat`](https://koji.fedoraproject.org/koji/packageinfo?packageID=27506) из официального репозитория [Fedora Modular](https://docs.fedoraproject.org/en-US/modularity/using-modules/).
208+Вы можете установить [`bat`](https://koji.fedoraproject.org/koji/packageinfo?packageID=27506) из оффициального репозитория [Fedora Modular](https://docs.fedoraproject.org/en-US/modularity/using-modules/).
213209
214210```bash
215211dnf install bat
@@ -217,7 +213,7 @@ dnf install bat
217213
218214### Gentoo Linux
219215
220−Вы можете установить [`bat`](https://packages.gentoo.org/packages/sys-apps/bat) из официальных источников:
216+Вы можете установить [`bat`](https://packages.gentoo.org/packages/sys-apps/bat) из оффициальных источников:
221217
222218```bash
223219emerge sys-apps/bat
@@ -225,14 +221,14 @@ emerge sys-apps/bat
225221
226222### Void Linux
227223
228−Вы можете установить `bat` с помощью `xbps-install`:
224+Вы можете установить `bat` с помощью xbps-install:
229225```bash
230226xbps-install -S bat
231227```
232228
233229### FreeBSD
234230
235−Вы можете установить [`bat`](https://www.freshports.org/textproc/bat) с помощью `pkg`:
231+Вы можете установить [`bat`](https://www.freshports.org/textproc/bat) с помощью pkg:
236232
237233```bash
238234pkg install bat
@@ -247,7 +243,7 @@ make install
247243
248244### С помощью nix
249245
250−Вы можете установить `bat`, используя [nix package manager](https://nixos.org/nix):
246+Вы можете установить `bat` используя [nix package manager](https://nixos.org/nix):
251247
252248```bash
253249nix-env -i bat
@@ -255,21 +251,21 @@ nix-env -i bat
255251
256252### openSUSE
257253
258−Вы можете установить `bat` с помощью `zypper`:
254+Вы можете установить`bat` с помощью zypper:
259255
260256```bash
261257zypper install bat
262258```
263259
264−### macOS
260+### On macOS
265261
266−Вы можете установить `bat` с помощью [Homebrew](http://braumeister.org/formula/bat):
262+Вы можете установить`bat` с помощью [Homebrew](http://braumeister.org/formula/bat):
267263
268264```bash
269265brew install bat
270266```
271267
272−Или же установить его с помощью [MacPorts](https://ports.macports.org/port/bat/summary):
268+Или-же установить его с помощью [MacPorts](https://ports.macports.org/port/bat/summary):
273269
274270```bash
275271port install bat
@@ -277,7 +273,7 @@ port install bat
277273
278274### Windows
279275
280−Есть несколько способов установить `bat`. Как только вы установили его, посмотрите на секцию ["Использование `bat` в Windows"](#using-bat-on-windows).
276+Есть несколько способов установить `bat`. Как только вы установили его, посмотрите на секцию ["Using `bat` on Windows"](#using-bat-on-windows).
281277
282278#### С помощью Chocolatey
283279
@@ -297,13 +293,13 @@ scoop install bat
297293
298294#### Из заранее скомпилированных файлов:
299295
300−Их вы можете скачать на [странице релизов](https://github.com/sharkdp/bat/releases).
296+Их вы можете скачать на [странице релизов](https://github.com/sharkdp/bat/releases),
301297
302298Для этого у вас должен быть установлен [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads).
303299
304300### С помощью Docker
305301
306−Вы можете использовать [Docker image](https://hub.docker.com/r/danlynn/bat/), чтобы запустить `bat` в контейнере:
302+Вы можете использовать [Docker image](https://hub.docker.com/r/danlynn/bat/) чтобы запустить `bat` в контейнере:
307303```bash
308304docker pull danlynn/bat
309305alias bat='docker run -it --rm -e BAT_THEME -e BAT_STYLE -e BAT_TABS -v "$(pwd):/myapp" danlynn/bat'
@@ -335,16 +331,16 @@ ansible-galaxy install aeimer.install_bat
335331- Arch Linux
336332- Void Linux
337333- FreeBSD
338−- macOS
334+- MacOS
339335
340−### Из скомпилированных файлов
336+### С помощью бинарников
341337
342338Перейдите на [страницу релизов](https://github.com/sharkdp/bat/releases) для
343−скомпилированных файлов `bat` для различных платформ. Бинарные файлы со статической связкой так же доступны: выбирайте архив с `musl` в имени.
339+скомпилированных файлов `bat` для различных платформ. Бинарные файлы со статической связкой так-же доступны - выбирайте архив с `musl` в имени.
344340
345341### Из исходников
346342
347−Если вы желаете установить `bat` из исходников, вам понадобится Rust 1.51 или выше. После этого используйте `cargo`, чтобы все скомпилировать:
343+Если вы желаете установить `bat` из исходников, вам понадобится Rust 1.40 или выше. Далее, вы должны использовать `cargo` чтобы все скомпилировать:
348344
349345```bash
350346cargo install --locked bat
@@ -354,20 +350,20 @@ cargo install --locked bat
354350
355351### Темы для выделения текста
356352
357−Используйте `bat --list-themes`, чтобы вывести список всех доступных тем. Для выбора темы `TwoDark` используйте `bat` с флагом
358−`--theme=TwoDark` или выставьте переменную окружения `BAT_THEME` в `TwoDark`. Используйте `export BAT_THEME="TwoDark"` в конфигурационном файле вашей оболочки, чтобы изменить ее навсегда. Или же используйте [конфигурационный файл](https://github.com/sharkdp/bat#configuration-file) `bat`.
353+Используйте `bat --list-themes` чтобы вывести список всех доступных тем. Для выбора темы `TwoDark`, используйте `bat` с флагом
354+`--theme=TwoDark` или поставьте переменную окружения `BAT_THEME` равной `TwoDark`. Используйте `export BAT_THEME="TwoDark"` в стартап файле вашей оболочки, чтобы изменить ее навсегда. Или же, используйте [конфиг файл](https://github.com/sharkdp/bat#configuration-file) `bat`.
359355
360−Если вы хотите просто просмотреть темы, используйте следующую команду (для этого вам понадобится [`fzf`](https://github.com/junegunn/fzf)):
356+Если вы хотите просто просмотреть темы, используйте следующую команду (вам понадобится [`fzf`](https://github.com/junegunn/fzf) для этого):
361357```bash
362358bat --list-themes | fzf --preview="bat --theme={} --color=always /путь/к/файлу"
363359```
364360
365−`bat` отлично смотрится на темном фоне. Однако если ваш терминал использует светлую тему, то такие темы как `GitHub` или `OneHalfLight` будут смотреться куда лучше!
366−Вы также можете использовать новую тему, для этого перейдите [в раздел добавления тем](https://github.com/sharkdp/bat#добавление-новых-тем).
361+`bat` отлично смотрится на темном фоне. Однако, если ваш терминал использует светлую тему, такие темы как `GitHub` или `OneHalfLight` будут смотрется куда лучше!
362+Вы так-же можете использовать новую тему, для этого перейдите [в раздел добавления тем](https://github.com/sharkdp/bat#adding-new-themes).
367363
368364### Изменение внешнего вывода
369365
370−Вы можете использовать флаг `--style`, чтобы изменять внешний вид вывода в `bat`.
366+Вы можете использовать флаг `--style` чтобы изменять внешний вид вывода в `bat`.
371367Например, вы можете использовать `--style=numbers,changes`, чтобы показать только количество строк и изменений в Git. Установите переменную окружения `BAT_STYLE` чтобы изменить это навсегда, или используйте [конфиг файл](https://github.com/sharkdp/bat#configuration-file) `bat`.
372368
373369### Добавление новых синтаксисов
@@ -387,15 +383,15 @@ cd "$(bat --config-dir)/syntaxes"
387383git clone https://github.com/tellnobody1/sublime-purescript-syntax
388384```
389385
390−Теперь используйте следующую команду, чтобы превратить эти файлы в бинарный кеш:
386+Теперь, используйте следующую команду, чтобы превратить эти файлы в бинарный кеш:
391387
392388```bash
393389bat cache --build
394390```
395391
396−Теперь вы можете использовать `bat --list-languages`, чтобы проверить, доступны ли новые языки.
392+Наконец, используйте `bat --list-languages` чтобы проверить, доступны ли новые языки.
397393
398−Если когда-нибудь вы заходите вернуться к настройкам по умолчанию, введите
394+Если когда-нибудь вы заходите вернутся к настройкам по умолчанию, введите
399395
400396```bash
401397bat cache --clear
@@ -403,7 +399,7 @@ bat cache --clear
403399
404400### Добавление новых тем
405401
406−Это работает похожим образом, так же как и добавление новых тем выделения синтаксиса
402+Это работает похожим образом, так-же как и добавление новых тем выделения синтаксиса
407403
408404Во-первых, создайте каталог с новыми темами для синтаксиса:
409405```bash
@@ -417,32 +413,32 @@ git clone https://github.com/greggb/sublime-snazzy
417413bat cache --build
418414```
419415
420−Теперь используйте `bat --list-themes`, чтобы проверить доступность новых тем.
416+Теперь, используйте `bat --list-themes` чтобы проверить доступность новых тем.
421417
422418### Использование другого пейджера.
423419
424420`bat` использует пейджер, указанный в переменной окружения `PAGER`. Если она не задана, то используется `less`.
425421Если вы желаете использовать другой пейджер, вы можете либо изменить переменную `PAGER`, либо `BAT_PAGER` чтобы перезаписать то, что указано в `PAGER`.
426422
427−Чтобы передать дополнительные аргументы вашему пейджеру, перечислите их в этой переменной:
423+Чтобы передать какие-то аргументы в ваш пейджер, вы так-же можете их поставить в этих переменных:
428424
429425```bash
430426export BAT_PAGER="less -RF"
431427```
432428
433−Так же вы можете использовать [файл конфигурации](https://github.com/sharkdp/bat#configuration-file) `bat` (флаг `--pager`).
429+Так-же вы можете использовать [файл конфигурации](https://github.com/sharkdp/bat#configuration-file) `bat` для изменения. (флаг `--pager`).
434430
435−**Внимание**: По умолчанию пейджером является`less` (без каких-либо аргументов),
431+**Внимание**: По умолчанию, `less` является пейджером (без каких либо аргументов),
436432`bat` задаст следующие флаги для пейджера:
437433 `-R`/`--RAW-CONTROL-CHARS`,
438434`-F`/`--quit-if-one-screen` и `-X`/`--no-init`. Последний флаг(`-X`) используется только для `less`, чья версия раньше 530.
439435
440−Флаг `-R` нужен чтобы корректно воспроизвести ANSI цвета. Второй флаг (`-F`) говорит
441−`less` чтобы тот сразу же завершился, если размер вывода меньше чем вертикальный размер терминала.
442−Это удобно для небольших файлов, так как вам не надо каждый раз нажимать `q`, чтобы выйти из пейджера. Третий флаг (`-X`) нужен для того, чтобы исправить баг с `--quit-if-one-screen` в старых версиях `less`. К сожалению, это блокирует возможность использования колеса мышки.
436+Флаг `-R` нужен чтобы корректно воспроизвести ANSI цвета. Второй флаг (`-F`) говорит
437+`less` чтобы тот сразу-же завершился, если размер вывода меньше чем вертикальный размер терминала.
438+Это удобно для небольших файлов, т.к вам не надо каждый раз нажимать `q` чтобы выйти из пейджера. Третий флаг (`-X`) нужен чтобы исправить баг с `--quit-if-one-screen` в старых версиях `less`. К сожалению, это так-же блокирует возможность использования там колеса мышки.
443439
444−Если вы хотите все же его включить, вы можете добавить флаг `-R`.
445−Для `less` новее чем 530 оно должно работать из коробки.
440+Если вы хотите все же его включить, вы можете добавить флаг `-R`.
441+Для `less` новее чем 530, оно должно работать из коробки.
446442
447443### Темная тема
448444
@@ -454,65 +450,65 @@ alias cat="bat --theme=\$(defaults read -globalDomain AppleInterfaceStyle &> /de
454450
455451## Файл конфигурации
456452
457−`bat` также может быть кастомизирован с помощью файла конфигурации. Его местоположение зависит от вашей ОС: чтобы посмотреть его путь, введите
453+`bat` так-же может быть кастомизирован с помощью файла конфигурации. Его местоположение зависит от вашей ОС, чтобы посмотреть его путь, введите
458454```
459455bat --config-file
460456```
461457
462−Также вы можете установить переменную окружения `BAT_CONFIG_PATH`, чтобы изменить путь к файлу конфигурации.
458+Так-же вы можете установить переменную окружения `BAT_CONFIG_PATH` чтобы изменить путь к файлу конфигурации.
463459```bash
464460export BAT_CONFIG_PATH="/path/to/bat.conf"
465461```
466462
467−Файл конфигурации «по умолчанию» может быть создан с помощью флага `--generate-config-file`.
463+Файл конфигурации по-умолчанию может быть создан с помощью флага `--generate-config-file`.
468464```bash
469465bat --generate-config-file
470466```
471467
472468### Формат
473469
474−Файл конфигурации - это всего лишь набор аргументов. Введите `bat --help`, чтобы просмотреть список всех возможных флагов и аргументов. Также вы можете закомментировать строку с помощью `#`.
470+Файл конфигурации - это всего лишь набор аргументов. Введите `bat --help` чтобы просмотреть список всех возможных флагов и аргументов. Так-же, вы можете заккоментировать строчку с помощью `#`.
475471
476472Пример файла конфигурации:
477473```bash
478−# Установить тему "TwoDark"
474+# Устанавливает тему "TwoDark"
479475--theme="TwoDark"
480476
481−# Показывать количество строк, изменений в Git и заголовок файла
477+# Показывает количество строк, изменений в Git и заголовок файла
482478--style="numbers,changes,header"
483479
484−# Использовать курсив (поддерживается не всеми терминалами)
480+# Использует наклонный текст (не все терминалы поддерживаеются)
485481--italic-text=always
486482
487−# Использовать синтаксис C++ для всех Arduino .ino файлов
483+# Использует синтаксис C++ для всех .ino файлов
488484--map-syntax "*.ino:C++"
489485
490−# Использовать синтаксик Git Ignore для всех файлов .ignore
486+# Использует синтаксик Git Ignore для всех файлов .ignore
491487--map-syntax ".ignore:Git Ignore"
492488```
493489
494490## Использование `bat` в Windows
495491
496−`bat` полностью работоспособен "из коробки", но для некоторых возможностей могут понадобиться дополнительные настройки.
492+`bat` в основном работает полностью из коробки, но несколько возможностей нуждаются в настройке.
497493
498494### Пейджинг
499495
500−Windows поддерживает только очень простой пейджер `more`. Вы можете скачать установщик для `less` [с его сайта](http://www.greenwoodsoftware.com/less/download.html) или [через Chocolatey](https://chocolatey.org/packages/Less). Чтобы его использовать, скопируйте исполняемый файл в ваш `PATH` или [используйте переменную окружения](#Использование-другого-пейджера). [Пакет из Chocolatey](#windows) установит все автоматически.
496+Windows поддерживает только очень простой пейджер `more`. Вы можете скачать установщик для `less` [с его сайта](http://www.greenwoodsoftware.com/less/download.html) или [через Chocolatey](https://chocolatey.org/packages/Less). Чтобы его использовать, скопируйте исполняемый файл в ваш `PATH` или [используйте переменную окружения](#using-a-different-pager). [Пакет из Chocolatey](#on-windows) установит все автоматически.
501497
502498### Цвета
503499
504−Windows 10 поддерживает цвета и в `conhost.exe` (Command Prompt), и в PowerShell начиная с версии Windows
505−[v1511](https://ru.wikipedia.org/wiki/Windows_10#Обновления и поддержка), так же как и в bash. На ранних версиях Windows вы можете использовать
500+Windows 10 поддерживает цвета и в`conhost.exe` (Command Prompt) и в PowerShell начиная с версии Windows
501+[v1511](https://ru.wikipedia.org/wiki/Windows_10#Обновления и поддержка), так-же как и в bash. На ранних версиях Windows, вы можете использовать
506502[Cmder](http://cmder.net/), в котором есть [ConEmu](https://conemu.github.io/).
507503
508−**Внимание:** Версия `less` в Git и MSYS2 воспроизводит цвета некорректно. Если у вас нет других пейджеров, мы можете отключить использование пейджеров с помощью флага `--paging=never`
504+**Внимание:** Версия `less` в Git и MSYS2 воспроизводит цвета неккоректно. Если у вас нет других пейджеров, мы можете отключить испольщование пейджеров с помощью флага `--paging=never`
509505или установить `BAT_PAGER` равным пустой строке.
510506
511507### Cygwin
512508
513−Из коробки `bat` не поддерживает пути в стиле Unix (`/cygdrive/*`). Когда указан абсолютный путь cygwin, `bat` выдаст следующую ошибку: `The system cannot find the path specified. (os error 3)`
509+`bat` не поддерижвает нативно пути в стиле Unix (`/cygdrive/*`). Когда указан абсолютный путь cygwin, `bat` выдаст следующую ошибку: `The system cannot find the path specified. (os error 3)`
514510
515−Она может быть решена добавлением следующей функции в `.bash_profile`:
511+Она может быть решена, добавлением следующей функции в `.bash_profile`:
516512
517513```bash
518514bat() {
@@ -532,25 +528,25 @@ bat() {
532528
533529### Терминалы и цвета
534530
535−`bat` поддерживает терминалы *с* и *без* поддержки truecolor. Однако подсветка синтаксиса не оптимизирована для терминалов с 8-битными цветами, и рекомендуется использовать терминалы с поддержкой 24-битных цветов (`terminator`, `konsole`, `iTerm2`, ...).
531+`bat` поддерживает терминалы *с* и *без* поддержки truecolor. Однако,цвета в выделении синтаксиса не оптимизированы к 8-ми битным цветам и рекоментуется использовать терминалы с поддержкой 24-ых битных цветов (`terminator`, `konsole`, `iTerm2`, ...).
536532Смотрите [эту статью](https://gist.github.com/XVilka/8346728) для полного списка терминалов.
537533
538−Удостовертесь, что переменная `COLORTERM` равна `truecolor` или
539−`24bit`. Иначе `bat` не сможет определить поддержку 24-битных цветов (и будет использовать 8-битные).
534+Удостовертесь, что переменная `COLORTERM` равна`truecolor` или
535+`24bit`. Иначе, `bat` не сможет определить поддержку 24 битных цветов(и будет использовать 8 битные).
540536
541537### Текст и номера строк плохо видны
542538
543−Используйте другую тему (`bat --list-themes` выведет список всех установленных тем). Темы `OneHalfDark` и
539+Используйте другую тему (смотрите `bat --list-themes` чтобы увидеть все тмы). Темы `OneHalfDark` и
544540`OneHalfLight` имеют более яркие номера строк и тексты.
545541
546542### Кодировки файлов
547543
548−`bat` поддерживает UTF-8 и UTF-16. Файлы в других кодировках, возможно, придётся перекодировать, так как кодировка может быть распознана неверно. Используйте `iconv`.
544+`bat` поддерживает UTF-8 и UTF-16. Для другой кодировки, вам возможно будет нужно перекодировать их, так как кодировка может быть распознана не верно. Используйте `iconv`.
549545Пример: у вас есть PHP файл в кодировке Latin-1 (ISO-8859-1):
550546``` bash
551547iconv -f ISO-8859-1 -t UTF-8 my-file.php | bat
552548```
553−Внимание: вам может понадобится флаг `-l`/`--language`, если `bat` не сможет автоматически определить синтаксис.
549+Внимание: вам может понадобится флаг `-l`/`--language` если синтаксис не смог быть авто-определен `bat`.
554550
555551## Разработка
556552
@@ -568,7 +564,7 @@ cargo test
568564# Установка (релизная версия)
569565cargo install --locked
570566
571−# Компилирование исполняего файла bat с другим синтаксисом и темами
567+#Компилирование исполняего файла bat с другим синтаксисом и темами
572568bash assets/create.sh
573569cargo install --locked --force
574570```
@@ -580,18 +576,18 @@ cargo install --locked --force
580576
581577## Цели и альтернативы
582578
583−Цели проекта `bat`:
579+`bat` старается добится:
584580
585−- Красивая и продвинутая подсветка синтаксиса.
586−- Интеграция с Git.
587−- Полноценная замена `cat`.
588−- Дружелюбный интерфейс и аргументы.
581+- Красивый, продвинутый синтаксис.
582+- Интеграция с Git
583+- Быть заменой `cat`
584+- Предлагать дружелюбный интерфейс и аргументы.
589585
590586Есть очень много альтернатив `bat`. Смотрите [этот документ](doc/alternatives.md) для сравнения.
591587
592588## Лицензия
593−Copyright (c) 2018-2021 [Разработчики bat](https://github.com/sharkdp/bat).
589+Copyright (c) 2018-2020 [Разработчики bat](https://github.com/sharkdp/bat).
594590
595−`bat` распостраняется под лицензями MIT License и Apache License 2.0 (на выбор пользователя).
591+`bat` распостраняется под лицензями MIT License и Apache License 2.0.
596592
597593Смотрите [LICENSE-APACHE](LICENSE-APACHE) и [LICENSE-MIT](LICENSE-MIT) для более подробного ознакомления.
doc/README-zh.mddeleted−678
@@ -1,678 +0,0 @@
1−<p align="center">
2− <img src="logo-header.svg" alt="bat - a cat clone with wings"><br>
3− <a href="https://github.com/sharkdp/bat/actions?query=workflow%3ACICD"><img src="https://github.com/sharkdp/bat/workflows/CICD/badge.svg" alt="Build Status"></a>
4− <img src="https://img.shields.io/crates/l/bat.svg" alt="license">
5− <a href="https://crates.io/crates/bat"><img src="https://img.shields.io/crates/v/bat.svg?colorB=319e8c" alt="Version info"></a><br>
6− 类似 <i>cat(1)</i>,但带有 git 集成和语法高亮.
7−</p>
8−
9−<p align="center">
10− <a href="#语法高亮">主要功能</a> •
11− <a href="#如何使用">使用方法</a> •
12− <a href="#安装">安装</a> •
13− <a href="#自定义">自定义</a> •
14− <a href="#project-goals-and-alternatives">项目目标和替代方案</a><br>
15− [<a href="../README.md">English</a>]
16− [中文]
17− [<a href="README-ja.md">日本語</a>]
18− [<a href="README-ko.md">한국어</a>]
19− [<a href="README-ru.md">Русский</a>]
20−</p>
21−
22−### 语法高亮
23−
24−`bat` 对大部分编程语言和标记语言提供语法高亮:
25−
26−![Syntax highlighting example](https://imgur.com/rGsdnDe.png)
27−
28−### Git 集成
29−
30−`bat` 能从 git 中获取文件的修改并展示在边栏(见下图):
31−
32−![Git integration example](https://i.imgur.com/2lSW4RE.png)
33−
34−### 不可打印(non-printable)字符可视化
35−
36−添加`-A`/`--show-all`参数可以文件文件中的不可打印字符:
37−
38−![Non-printable character example](https://i.imgur.com/WndGp9H.png)
39−
40−### 自动分页
41−
42−`bat`会在一般情况下将大于屏幕可显示范围的内容输出到分页器(pager, e.g. `less`)。
43−
44−你可以在调用时添加`--paging=never`参数来使`bat`不使用分页器(就像`cat`一样)。如果你想要用为`cat`使用`bat`别名,可以在 shell 配置文件(shell configuration)中添加`alias cat='bat --paging=never'`。
45−
46−#### 智能输出
47−
48−`bat`能够在设置了分页器选项的同时进行管道:wink:。
49−当`bat`检测到当前环境为非可交互终端或管道时(例如使用`bat`并将内容用管道输出到文件),`bat`会像`cat`一样,一次输出文件内容为纯文本且无视`--paging`参数。
50−
51−## 如何使用
52−
53−在终端中查看一个文件
54−
55−```bash
56−> bat README.md
57−```
58−
59−一次性展示多个文件
60−
61−```bash
62−> bat src/*.rs
63−```
64−
65−从`stdin`读入流,自动为内容添加语法高亮(前提是输入内容的语言可以被正确识别,通常根据内容第一行的 shebang 标记,形如`#!bin/sh`)
66−
67−```bash
68−> curl -s https://sh.rustup.rs | bat
69−```
70−
71−显式指定`stdin`输入的语言
72−
73−```bash
74−> yaml2json .travis.yml | json_pp | bat -l json
75−```
76−
77−显示不可打印字符
78−
79−```bash
80−> bat -A /etc/hosts
81−```
82−
83−与`cat`的兼容性
84−
85−```bash
86−bat > note.md # 创建一个空文件
87−
88−bat header.md content.md footer.md > document.md
89−
90−bat -n main.rs # 只显示行号
91−
92−bat f - g # 输出 f,接着是标准输入流,最后 g
93−```
94−
95−### 第三方工具交互
96−
97−#### `fzf`
98−
99−你可以使用`bat`作为`fzf`的预览器。这需要在`bat`后添加`--color=always`选项,以及`--line-range` 选项来限制大文件的加载次数。
100−
101−```bash
102−fzf --preview 'bat --color=always --style=numbers --line-range=:500 {}'
103−```
104−
105−更多信息请参阅[`fzf`的说明](https://github.com/junegunn/fzf#preview-window)。
106−
107−#### `find` 或 `fd`
108−
109−你可以使用`find`的`-exec`选项来用`bat`预览搜索结果:
110−
111−```bash
112−find … -exec bat {} +
113−```
114−
115−亦或者在用`fd`时添加`-X`/`--exec-batch`选项:
116−
117−```bash
118−fd … -X bat
119−```
120−
121−#### `ripgrep`
122−
123−`bat`也能用`batgrep`来显示`ripgrep`的搜索结果。
124−
125−```bash
126−batgrep needle src/
127−```
128−
129−#### `tail -f`
130−
131−当与`tail -f`一起使用,`bat`可以持续监视文件内容并为其添加语法高亮。
132−
133−```bash
134−tail -f /var/log/pacman.log | bat --paging=never -l log
135−```
136−
137−注意:这项功能需要在关闭分页时使用,同时要手动指定输入的内容语法(通过`-l log`)。
138−
139−#### `git`
140−
141−`bat`也能直接接受来自`git show`的输出并为其添加语法高亮(当然也需要手动指定语法):
142−
143−```bash
144−git show v0.6.0:src/main.rs | bat -l rs
145−```
146−
147−#### `git diff`
148−
149−`bat`也可以和`git diff`一起使用:
150−
151−```bash
152−batdiff() {
153− git diff --name-only --diff-filter=d | xargs bat --diff
154−}
155−```
156−
157−该功能也作为一个独立工具提供,你可以在[`bat-extras`](https://github.com/eth-p/bat-extras)中找到`batdiff`。
158−
159−如果你想了解更多 git 和 diff 的信息,参阅[`delta`](https://github.com/dandavison/delta)。
160−
161−#### `xclip`
162−
163−当需要拷贝文件内容时,行号以及 git 标记会影响输出,此时可以使用`-p`/`--plain`参数来把纯文本传递给`xclip`。
164−
165−```bash
166−bat main.cpp | xclip
167−```
168−
169−`bat`会检测输出是否是管道重定向来决定是否使用纯文本输出。
170−
171−#### `man`
172−
173−`bat`也能给`man`的输出上色。这需要设置`MANPAGER`环境变量:
174−
175−```bash
176−export MANPAGER="sh -c 'col -bx | bat -l man -p'"
177−man 2 select
178−```
179−
180−(如果你使用的是 Debian 或者 Ubuntu,使用`batcat`替换`bat`)
181−
182−如果你遇到格式化问题,设置`MANROFFOPT="-c"`也许会有帮助。
183−
184−`batman`能提供类似功能——作为一个独立的命令。
185−
186−注意:[man page 语法](assets/syntaxes/02_Extra/Manpage.sublime-syntax) 还需要完善。在使用特定的`man`实现时该功能[无法正常工作](https://github.com/sharkdp/bat/issues/1145)。
187−
188−#### `prettier` / `shfmt` / `rustfmt`
189−
190−`prettybat`脚本能够格式化代码并用`bat`输出。
191−
192−## 安装
193−
194−[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg)](https://repology.org/project/bat-cat/versions)
195−
196−### Ubuntu (使用 `apt`)
197−
198−*... 以及其他基于 Debian的发行版.*
199−
200−`bat` 要求的版本: [Ubuntu 高于 20.04 ("Focal")](https://packages.ubuntu.com/search?keywords=bat&exact=1) 和 [Debian 高于 August 2021 (Debian 11 - "Bullseye")](https://packages.debian.org/bullseye/bat).
201−
202−当你的发行版满足条件那么直接在终端运执行:
203−
204−```bash
205−sudo apt install bat
206−```
207−
208−重要:如果你通过这种方法安装`bat`,请留意你所安装的可执行文件是否为`batcat`(由[其他包的可执行文件名冲突](https://github.com/sharkdp/bat/issues/982)造成)。你可以创建一个`bat -> batcat`的符号链接(symlink)或别名来避免因为可执行文件不同带来的问题并与其他发行版保持一致性。
209−
210−```bash
211−mkdir -p ~/.local/bin
212−ln -s /usr/bin/batcat ~/.local/bin/bat
213−```
214−
215−### Ubuntu (使用`.deb`包)
216−
217−*... 以及其他基于 Debian的发行版.*
218−
219−如果你无法使用上一种方法安装,或需要用最新版的`bat`,你可以从[release 页面](https://github.com/sharkdp/bat/releases)下载最新的`.deb`包并通过下述方法安装:
220−
221−```bash
222−sudo dpkg -i bat_0.18.3_amd64.deb # adapt version number and architecture
223−```
224−
225−### Alpine Linux
226−
227−你可以用下面下列命令从官方源中安装[`bat 包`](https://pkgs.alpinelinux.org/packages?name=bat):
228−
229−```bash
230−apk add bat
231−```
232−
233−### Arch Linux
234−
235−你可以用下面下列命令从官方源中安装[`bat`包](https://www.archlinux.org/packages/community/x86_64/bat/):
236−
237−```bash
238−pacman -S bat
239−```
240−
241−### Fedora
242−
243−你可以使用下列命令从官方[Fedora Modular](https://docs.fedoraproject.org/en-US/modularity/using-modules/)仓库安装[`bat` 包](https://koji.fedoraproject.org/koji/packageinfo?packageID=27506):
244−
245−```bash
246−dnf install bat
247−```
248−
249−### Funtoo Linux
250−
251−你可以从 dev-kit 中安装[`bat` 包](https://github.com/funtoo/dev-kit/tree/1.4-release/sys-apps/bat):
252−
253−```bash
254−emerge sys-apps/bat
255−```
256−
257−### Gentoo Linux
258−
259−你可以使用下列命令从官方源中安装 [`bat` 包](https://packages.gentoo.org/packages/sys-apps/bat):
260−
261−
262−```bash
263−emerge sys-apps/bat
264−```
265−
266−### Void Linux
267−
268−你可以用 xbps-install 安装`bat`:
269−
270−```bash
271−xbps-install -S bat
272−```
273−
274−### Termux:
275−
276−你可以用 pkg 安装`bat:
277−
278−```bash
279−pkg install bat
280−```
281−
282−### FreeBSD
283−
284−你可以用 pkg 来安装一份预编译的[`bat` 包](https://www.freshports.org/textproc/bat):
285−
286−```bash
287−pkg install bat
288−```
289−
290−或从 FreeBSD ports 自己编译一份:
291−
292−```bash
293−cd /usr/ports/textproc/bat
294−make install
295−```
296−
297−### OpenBSD
298−
299−你可以用`pkg——add`安装`bat`包
300−
301−```bash
302−pkg_add bat
303−```
304−
305−### 通过 nix
306−
307−你可以用[nix 包管理器](https://nixos.org/nix)安装`bat`:
308−
309−```bash
310−nix-env -i bat
311−```
312−
313−### openSUSE
314−
315−你可以用 zypper 安装`bat`:
316−
317−```bash
318−zypper install bat
319−```
320−
321−### 通过 snap
322−
323−目前还没有推荐的 snap 包可用。可以使用其他现存的包但不会受到官方支持且可能会遇到[问题](https://github.com/sharkdp/bat/issues/1519)。
324−
325−### macOS (或 Linux) 通过 Homebrew
326−
327−你可以用 [Homebrew on MacOS](https://formulae.brew.sh/formula/bat) 或者 [Homebrew on Linux](https://formulae.brew.sh/formula-linux/bat) 安装`bat`:
328−
329−```bash
330−brew install bat
331−```
332−
333−### macOS 通过 MacPorts
334−
335−或用 [MacPorts](https://ports.macports.org/port/bat/summary) 安装`bat`:
336−
337−```bash
338−port install bat
339−```
340−
341−### Windows
342−
343−在 Windows 上具有多种安装`bat`的方法。若你已完成安装,记得看看 ["在 Windows 上使用`bat`"](#在-Windows-中使用-bat) 。
344−
345−#### 前置条件
346−
347−你必须已安装 [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) 包。
348−
349−#### 使用 Chocolatey
350−
351−你可以用[Chocolatey](https://chocolatey.org/packages/Bat) 安装`bat`:
352−
353−```bash
354−choco install bat
355−```
356−
357−#### 使用 Scoop
358−
359−你可以用 [scoop](https://scoop.sh/) 安装`bat`:
360−
361−```bash
362−scoop install bat
363−```
364−
365−#### 使用预编译二进制版本
366−
367−直接从 [Release 发布页](https://github.com/sharkdp/bat/releases) 下载已经编译好的二进制包,前提是你安装了 [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) 包。
368−
369−### 使用二进制版本
370−
371−在 [Release 发布页](https://github.com/sharkdp/bat/releases) 中可以找到为多种架构构建的`bat`版本和静态编译的二进制文件(文件名带有`musl`)。
372−
373−### 从源码编译
374−
375−如果你想要自己构建`bat`,那么你需要安装有高于1.51版本的 Rust。
376−
377−使用以下命令编译。
378−
379−```bash
380−cargo install --locked bat
381−```
382−
383−注意:man page或 shell 自动补全所需要的额外文件无法通过该方法安装。但你可以在`cargo`的生成目录找到这些文件(`build`目录下)。
384−
385−## 自定义
386−
387−### 语法高亮主题
388−
389−使用 `bat --list-themes` 一份语法高亮主题的清单,然后用`--theme=TwoDark`来指定主题为`TwoDark`,也可以通过设置`BAT_THEME`环境变量来选定主题。把`export BAT_THEME="TwoDark"`添加到 shell 的启动脚本(shell startup file)来取得永久效果。或者使用`bat`的[配置文件](#c配置文件)
390−
391−若想要查看所有主题在一个文件上的显示效果可以用一下命令(需要安装`fzf`):
392−
393−```bash
394−bat --list-themes | fzf --preview="bat --theme={} --color=always /path/to/file"
395−```
396−
397−`bat`在默认情况下能够在黑色主题背景下获得较好的效果,如果你的终端使用亮色背景,可以试试`GitHub`或`OneHalfLight`。想要添加自定义主题可以参考[添加主题](#添加主题)。
398−
399−### 8-bit 主题
400−
401−`bat` 自带三个 [8-bit 色彩](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) 主题:
402−
403−- `ansi` 适应于大部分终端。它使用 3-bit 色彩:黑红绿黄蓝洋红靛青白。
404−- `base16`专为 [base16](https://github.com/chriskempson/base16) 终端设计。它使用 4-bit 色彩(带有亮度的 3-bit 色彩)。根据 [base16 styling guidelines](https://github.com/chriskempson/base16/blob/master/styling.md) 制作。
405−- `base16-25`专为 [base16-shell](https://github.com/chriskempson/base16-shell) 设计。它把部分亮色替换为 8-bit 色彩。请不要直接使用该主题,除非你清楚你的256色终端是否使用 base16-shell。
406−
407−尽管这些主题具有诸多限制,但具有一些 truecolor 主题不具有的三个优点:
408−
409−- 享有最佳兼容性。并不是所有终端工具都支持高于 3-bit 的色彩。
410−- 适应终端主题。
411−- 视觉上和其他的终端工具更协调。
412−
413−### 输出样式
414−
415−你可以用`--style`参数来控制`bat`输出的样式。使用`--style=numbers,chanegs`可以只开启 Git 修改和行号显示而不添加其他内容。`BAT_STYLE`环境变量具有相同功能。
416−
417−### 添加新的语言和语法
418−
419−当现有的`bat`不支持某个语言或语法时你可以自己添加。
420−
421−`bat`使用`syntect`库来支持语法高亮,该库使用 [Sublime Text `.sublime-syntax` 语法文件](https://www.sublimetext.com/docs/3/syntax.html)和主题。而后者中的大部分可以在 [Package Control](https://packagecontrol.io/) 找到。
422−
423−当你找到一份语法文件,按照下列方法:
424−
425−1. 创建包含语法描述文件的目录:
426−
427− ```bash
428− mkdir -p "$(bat --config-dir)/syntaxes"
429− cd "$(bat --config-dir)/syntaxes"
430−
431− # Put new '.sublime-syntax' language definition files
432− # in this folder (or its subdirectories), for example:
433− git clone https://github.com/tellnobody1/sublime-purescript-syntax
434− ```
435−
436−2. 调用下面指令把文件转换为二进制缓存:
437−
438− ```bash
439− bat cache --build
440− ```
441−
442−3. 最后用`bat --list-languages`来检查新的语法是否被成功导入。如果想要回滚到最初状态,执行:
443−
444− ```bash
445− bat cache --clear
446− ```
447−
448−4. 如果你觉得`bat`有必要自带该语法支持,请在阅读[指导](doc/assets.md)后向仓库提交 [Syntax Request](https://github.com/sharkdp/bat/issues/new?labels=syntax-request&template=syntax_request.md)。
449−
450−### 添加主题
451−
452−类似添加语法支持,第一步也是创建一个带有语法高亮的目录
453−
454−```bash
455−mkdir -p "$(bat --config-dir)/themes"
456−cd "$(bat --config-dir)/themes"
457−
458−# 下载一个主题
459−git clone https://github.com/greggb/sublime-snazzy
460−
461−# 更新二进制缓存
462−bat cache --build
463−```
464−
465−然后用`bat --list-themes`检查添加是否成功。
466−
467−### 添加或修改文件关联
468−
469−你可以用`--map-syntax`参数添加或修改文件名模板。它需要一个类似`pattern:syntax`的参数来指定,其中`pattern`是 glob 文件匹配模板,`syntax`则是支持的语法的完整名(使用`bat --list-languages`来查看获取一份清单)。
470−
471−注意:方便起见,你可能需要把参数添加到配置文件,而不是每次都在命令行中传递该参数。
472−
473−以下展示了把“INI”关联到具有`.conf`扩展名的文件
474−
475−```bash
476−--map-syntax='*.conf:INI'
477−```
478−
479−把`.ignore`文件与“Git Ignore”关联
480−
481−```bash
482−--map-syntax='.ignore:Git Ignore'
483−```
484−
485−把`/etc/apache2`内的`.conf`文件关联到“Apache Conf”语法(`bat`已默认绑定)
486−
487−```bash
488−--map-syntax='/etc/apache2/**/*.conf:Apache Conf'
489−```
490−
491−### 使用自定义分页器
492−
493−`bat`默认使用`PAGER`环境变量定义的分页器,如果没有定义则使用`less`。`bat`提供了`BAT_PAGER`环境变量来专为`bat`选择分页器(优先级高于`PAGER`)。
494−
495−注意:当`PAGER`设置为`more`或`most`时,`bat`会使用`less`来代替以确保能提供色彩支持。
496−
497−```bash
498−export BAT_PAGER="less -RF"
499−```
500−
501−除了使用环境变量来改变`bat`使用的的分页器,也可以在配置文件中提供`--pager`参数。
502−
503−注意:`bat`会把部分命令行参数直接传递给分页器:`-R`/`--RAW-CONTROL-CHARS`,`-F`/`--quit-if-one-screen`以及`-X`/`--no-init`(该参数仅适用于高于530版本的`less`)。其中`-R` 参数需要在解释 ANSI 标准颜色时起作用。`-F`则指示`less`在输出内容的垂直尺寸小于终端尺寸时立即退出。当文件内容可以在一个屏幕里完全显示时,就不需要按`q`键退出阅读模式,很方便就是了。`-X`则能修复`-F`在`less`的老版本中的一些bug(代价是不支持鼠标滚轮,但可以用`-R`来取消`quit-if-one-screen`功能。)。
504−
505−### 缩进
506−
507−`bat` 使用四个空格宽的制表符,而不受分页器影响,同时也可以用`--tabs`参数来自定义。
508−
509−注意:通过其他方法针对分页器的制表符设置不会生效(例如通过`bat`的`--pager`参数传递或`less`使用的`LESS`环境变量)。因为在输出提交给分页器之前,内容中的制表符就已经被`bat`替换为了特定长度的空格以避免由于边栏导致的缩进问题。你可以用给`bat`传递`--tabs=0`参数来取消该设定并让分页器自己处理制表符。
510−
511−### 暗色模式
512−
513−如果你用的 macOS 处于暗色模式,你可以为`bat`启用基于系统主题的主题。如下所示操作会让`bat`在系统处于亮色模式时加载`GitHub`主题和暗色模式时加载`default`主题。
514−
515−```bash
516−alias cat="bat --theme=\$(defaults read -globalDomain AppleInterfaceStyle &> /dev/null && echo default || echo GitHub)"
517−```
518−
519−## 配置文件
520−
521−```bash
522−bat --config-file
523−```
524−
525−你也可以用`BAT_CONFIG_PATH`来为`bat`指定自定义位置的配置文件:
526−
527−```bash
528−export BAT_CONFIG_PATH="/path/to/bat.conf"
529−```
530−
531−使用`--generate-config-file`参数调用`bat`会在指定位置生成一份默认的`bat`配置文件:
532−
533−```bash
534−bat --generate-config-file
535−```
536−
537−### 格式
538−
539−配置文件其实是一份按行分割的命令行参数列表。你可以用`bat --help`来查看所有可用的参数和适用的值。配置文件中`#`打头的行会被视为注释而不生效。
540−
541−以下是一份示例:
542−
543−```bash
544−# 设置主题为 TwoDark
545−--theme="TwoDark"
546−
547−# 显示行号和 Git 修改信息, 但没有边框
548−--style="numbers,changes,header"
549−
550−# 在终端中以斜体输出文本(不是所有终端都支持)
551−--italic-text=always
552−
553−# 使用 C++ 语法来给 Ardiuno 的 .ino 文件提供高亮
554−--map-syntax "*.ino:C++"
555−```
556−
557−## 在 Windows 中使用 `bat`
558−
559−`bat` 在 Windows 上开箱即用,除了部分功能需要额外配置。
560−
561−### 前置条件
562−
563−你需要先安装 [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) 包。
564−
565−### 分页
566−
567−Windows 只有一个提供有限功能的分页器,你可以从[这里下载](http://www.greenwoodsoftware.com/less/download.html)或用 [Chocolatey 安装](https://chocolatey.org/packages/Less) Windows 版本的`less`。第一种方法需要你把它所在目录加入`PATH`环境变量或[定义分页器变量](#使用自定义分页器)
568−
569−### 色彩
570−
571−Windows 10 从 [v1511](https://en.wikipedia.org/wiki/Windows_10_version_history#Version_1511_(November_Update)) 开始 shell(`conhost.exe`,命令提示符或 Powershell)原生支持色彩。在早些版本的 Windows 中你可以用第三方终端如 [Cmder](http://cmder.net/) (使用[ConEmu](https://conemu.github.io/))。
572−
573−注意:Git 和 MSYS 版本的 `less` 没法正确在 Windows 表达色彩。如果你没有安装其他分页器,你可以直接用`--paging=never`或设置`BAT_PAGER`为空字符串来关闭分页功能。
574−
575−### Cygwin
576−
577−Windows 上的`bat`原生不支持 Cygwin' unix-style 路径(`/cygdrive/*`)。当传递一个绝对 cygwin 路径作为参数值时,`bat`会产生`The system cannot find the path specified. (os error 3)`的错误。你可以`.bash_profile`文件中添加以下函数来解决这个问题。
578−
579−```bash
580−bat() {
581− local index
582− local args=("$@")
583− for index in $(seq 0 ${#args[@]}) ; do
584− case "${args[index]}" in
585− -*) continue;;
586− *) [ -e "${args[index]}" ] && args[index]="$(cygpath --windows "${args[index]}")";;
587− esac
588− done
589− command bat "${args[@]}"
590−}
591−```
592−
593−## 疑难解答
594−
595−### 输出内容含糊不清
596−
597−当输入文件包含颜色代码和其他 ANSI 转义符号时,`bat`会产生错误的语法高亮和文本,导致输出看起来令人无法理解。当你需要输出该文件时,请使用`--color=never --wrap=never`参数来关闭上色和文字包裹。
598−
599−### 终端与色彩
600−
601−`bat`会区分支持 truecolor 和不支持 truecolor 的终端。但是大部分语法高亮主题都是用了没有为 8-bit 色彩支持的颜色,因此强烈推荐使用一个支持 24-bit 色彩的终端(`terminator`,`konsole`,`iTerm2`...),或使用一个 [8-bit 主题](#8-bit-主题)来限制一些颜色。查看[这篇文章使用自定义分页器](https://gist.github.com/XVilka/8346728)了解更多支持 truecolor 的终端。你需要定义`COLORTERM`变量为`truecolor`或`24bit`来确保`bat`能够识别终端的对颜色的支持,否则会使用 8 bit 模式。
602−
603−### 行号和边框很难看清
604−
605−试试其他主题,说不定能有所改善(用`bat --list-themes`查看主题列表)。
606−
607−### 文件编码
608−
609−`bat`原生支持 UTF-8 和 UTF-16。至于其他文件你可能需要在使用`bat`之前先把编码转换到UTF-8。
610−
611−这里展示了使用`iconv`来把 Latin-1(ISO-8859-1) 编码的 PHP 文件转换到 UTF-8:
612−
613−```bash
614−iconv -f ISO-8859-1 -t UTF-8 my-file.php | bat
615−```
616−
617−注意: 当`bat`无法识别语言时你可能会需要`-l`/`--language`参数。
618−
619−## Development
620−
621−```bash
622−# Recursive clone to retrieve all submodules
623−git clone --recursive https://github.com/sharkdp/bat
624−
625−# Build (debug version)
626−cd bat
627−cargo build --bins
628−
629−# Run unit tests and integration tests
630−cargo test
631−
632−# Install (release version)
633−cargo install --path . --locked
634−
635−# Build a bat binary with modified syntaxes and themes
636−bash assets/create.sh
637−cargo install --path . --locked --force
638−```
639−
640−If you want to build an application that uses `bat`s pretty-printing
641−features as a library, check out the [the API documentation](https://docs.rs/bat/).
642−Note that you have to use either `regex-onig` or `regex-fancy` as a feature
643−when you depend on `bat` as a library.
644−
645−## Contributing
646−
647−Take a look at the [`CONTRIBUTING.md`](CONTRIBUTING.md) guide.
648−
649−## Maintainers
650−
651−- [sharkdp](https://github.com/sharkdp)
652−- [eth-p](https://github.com/eth-p)
653−- [keith-hall](https://github.com/keith-hall)
654−- [Enselic](https://github.com/Enselic)
655−
656−## Security vulnerabilities
657−
658−Please contact [David Peter](https://david-peter.de/) via email if you want to report a vulnerability in `bat`.
659−
660−## Project goals and alternatives
661−
662−`bat` tries to achieve the following goals:
663−
664−- Provide beautiful, advanced syntax highlighting
665−- Integrate with Git to show file modifications
666−- Be a drop-in replacement for (POSIX) `cat`
667−- Offer a user-friendly command-line interface
668−
669−There are a lot of alternatives, if you are looking for similar programs. See
670−[this document](doc/alternatives.md) for a comparison.
671−
672−## License
673−
674−Copyright (c) 2018-2021 [bat-developers](https://github.com/sharkdp/bat).
675−
676−`bat` is made available under the terms of either the MIT License or the Apache License 2.0, at your option.
677−
678−See the [LICENSE-APACHE](LICENSE-APACHE) and [LICENSE-MIT](LICENSE-MIT) files for license details.
doc/alternatives.md+1−40
@@ -9,7 +9,7 @@ if you are not looking for a program like `bat`, this comparison might not be fo
99| Drop-in `cat` replacement | :heavy_check_mark: [*](https://github.com/sharkdp/bat/issues/134) | :x: | :x: | (:heavy_check_mark:) | :x: | :x: [*](https://github.com/rstacruz/hicat/issues/6) | :x: | :x: |
1010| Git integration | :heavy_check_mark: | :x: | :x: | :x: | :x: | :x: | :x: | :x: |
1111| Automatic paging | :heavy_check_mark: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: |
12−| Languages (circa) | 150 | 300 | 200 | 7 | 80 | 130 | 30 | 130 |
12+| Languages (circa) | 110 | 300 | 200 | 7 | 80 | 130 | 30 | 130 |
1313| Extensible (languages, themes) | :heavy_check_mark: | (:heavy_check_mark:) | (:heavy_check_mark:) | :x: | (:heavy_check_mark:) | :x: | :x: | :x: |
1414| Advanced highlighting (e.g. nested syntaxes) | :heavy_check_mark: | :heavy_check_mark: | (:heavy_check_mark:) ? | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
1515| Execution time [ms] (`jquery-3.3.1.js`) | 624 | 789 | 400 | 80 | 300 | 316 | 157 | 695 |
@@ -22,42 +22,3 @@ request.
2222Some other alternatives that are also related, but not yet included in the table:
2323- [lesspipe](https://github.com/wofr06/lesspipe)
2424- [vimpager](https://github.com/rkitover/vimpager)
25−
26−## Benchmarks
27−
28−The benchmarks above have been created with this script:
29−```bash
30−#!/usr/bin/env bash
31−
32−cd "$(dirname "${BASH_SOURCE[0]}")" || exit
33−
34−if ! command -v hyperfine > /dev/null 2>&1; then
35− echo "'hyperfine' does not seem to be installed."
36− echo "You can get it here: https://github.com/sharkdp/hyperfine"
37− exit 1
38−fi
39−
40−SRC="test-src/jquery-3.3.1.js"
41−
42−
43−cmd_bat="bat --style=full --color=always --paging=never '$SRC'"
44−cmd_bat_simple="bat --plain --wrap=never --tabs=0 --color=always --paging=never '$SRC'"
45−cmd_pygmentize="pygmentize -g '$SRC'"
46−cmd_highlight="highlight -O truecolor '$SRC'"
47−cmd_ccat="ccat --color=always '$SRC'"
48−cmd_source_highlight="source-highlight --failsafe --infer-lang -f esc -i '$SRC'"
49−cmd_hicat="hicat '$SRC'"
50−cmd_coderay="coderay '$SRC'"
51−cmd_rouge="rougify '$SRC'"
52−
53−hyperfine --warmup 3 \
54− "$cmd_bat" \
55− "$cmd_bat_simple" \
56− "$cmd_pygmentize" \
57− "$cmd_highlight" \
58− "$cmd_ccat" \
59− "$cmd_source_highlight" \
60− "$cmd_hicat" \
61− "$cmd_coderay" \
62− "$cmd_rouge" \
63−```
doc/assets.mddeleted−100
@@ -1,100 +0,0 @@
1−## Adding new builtin languages for syntax highlighting
2−
3−Should you find that a particular syntax is not available within `bat` and think it should be included in `bat` by default, you can follow the instructions outlined below.
4−
5−`bat` uses the excellent [syntect](https://github.com/trishume/syntect) library to highlight source
6−code. As a basis, syntect uses [Sublime Text](https://www.sublimetext.com/) syntax definitions
7−in the `.sublime-syntax` format.
8−
9−**Important:** Before proceeding, verify that the syntax you wish to add meets the [criteria for inclusion](#Criteria-for-inclusion-of-new-syntaxes).
10−
11−1. Find a Sublime Text syntax for the given language, preferably in a separate Git repository
12− which can be included as a submodule (under `assets/syntaxes`) using
13− `git submodule add <https github link> ./assets/syntaxes/02_Extra/<repo name>`, replacing
14− the contents of the angle brackets as appropriate.
15−
16−2. If the Sublime Text syntax is only available as a `.tmLanguage` file, open the file in
17− Sublime Text and convert it to a `.sublime-syntax` file via *Tools* -> *Developer* ->
18− *New Syntax from XXX.tmLanguage...*. Save the new file in the `assets/syntaxes` folder.
19−
20−3. Run the `assets/create.sh` script. It calls `bat cache --build` to parse all available
21− `.sublime-syntax` files and serialize them to a `syntaxes.bin` file.
22−
23−4. Re-compile `bat`. At compilation time, the `syntaxes.bin` file will be stored inside the
24− `bat` binary.
25−
26−5. Use `bat --list-languages` to check if the new languages are available.
27−
28−6. Add a syntax test for the new language. See [below](#Syntax-tests) for details.
29−
30−7. If you send a pull request with your changes, please do *not* include the changed `syntaxes.bin`
31− file. A new binary cache file will be created once before every new release of `bat`. This
32− avoids bloating the repository size unnecessarily.
33−
34−### Syntax tests
35−
36−`bat` has a set of syntax highlighting regression tests in `tests/syntax-tests`. The main idea is
37−make sure that we do not run into issues we had in the past where either (1) syntax highlighting
38−for some language is suddenly not working anymore or (2) `bat` suddenly crashes for some input (due
39−to `regex` incompatibilities between `syntect` and Sublime Text).
40−
41−In order to add a new test file, please follow these steps (let's take "Ruby" as an example):
42−
43−1. Make sure that you are running the **latest version of `bat`** and that `bat` is available on
44− the path. If you are creating a syntax test for a new builtin syntax (see above), make sure that
45− your version of `bat` already has the new syntax builtin.
46−2. Find an example Ruby source file or write one yourself. If possible, the file should aim to be
47− "comprehensive" (i.e. include a lot of the possible syntax), but this is not strictly necessary.
48− A simple file is better than none at all. Also, the files shouldn't be gigantic.
49−3. Save the file in `tests/syntax-tests/source/Ruby` (adapt for your language). The file name could
50− be `test.rb` (adapt extension) but can also be adapted if that is necessary in order for `bat` to
51− highlight it correctly (e.g. `Makefile`).
52−4. If you have copied the file from somewhere else, please make sure that the file *may* be copied
53− under the respective license and that the license is compatible with `bat`s license. If it
54− requires attribution, please add a `LICENSE.md` in the same folder with a text like this:
55− ```
56− The `test.rb` file has been added from [enter source here] under the following license:
57−
58− [add license text here]
59− ```
60−5. Go to `tests/syntax-tests` and run the `update.sh` Bash script. A new file should be generated
61− in the `highlighted` folder (e.g. `highlighted/Ruby/test.rb`).
62−6. Use `cat` or `bat --language=txt` to display the content of this file and make sure that the
63− syntax highlighting looks correct.
64−7. `git add` the new files in the `source` folder as well as the autogenerated files in the
65− `highlighted` folder.
66−
67−### Troubleshooting
68−
69−Make sure that the local cache does not interfere with the internally stored syntaxes and
70−themes (`bat cache --clear`).
71−
72−## Criteria for inclusion of new syntaxes
73−
74−* More than 10,000 downloads at [Package Control](https://packagecontrol.io)
75−
76−### Manual modifications
77−
78−The following files have been manually modified after converting from a `.tmLanguage` file:
79−
80−* `Apache.sublime_syntax`=> removed `.conf` and `.CONF` file types.
81−* `Dart.sublime-syntax` => removed `#regex.dart` include.
82−* `INI.sublime-syntax` => added `.hgrc`, `hgrc`, and `desktop` file types and support for comments after section headers
83−* `Org mode.sublime-syntax` => removed `task` file type.
84−* `SML.sublime_syntax` => removed `ml` file type.
85−* `Robot.sublime_syntax` => changed name to "Robot Framework", added `.resource` extension
86−
87−### Non-submodule additions
88−
89−* `Assembly (x86_64)` has been manually added from https://github.com/13xforever/x86-assembly-textmate-bundle due to `git clone` recursion problems
90−* `Nim.sublime-syntax` has been added manually from https://github.com/getzola/zola/blob/master/sublime_syntaxes/Nim.sublime-syntax as there was no suitable Git repository for it. The original syntax seems to originate from https://github.com/Varriount/NimLime
91−* `Rego.sublime-syntax` has been added manually from https://github.com/open-policy-agent/opa/blob/master/misc/syntax/sublime/rego.sublime-syntax
92− as it is not kept in a standalone repository. The file is generated from
93− https://github.com/open-policy-agent/opa/blob/master/misc/syntax/textmate/Rego.tmLanguage
94−* `SML.sublime_syntax` has been added manually from
95− https://github.com/seanjames777/SML-Language-Definitiona as it is not
96− kept in a standalone repository. The file generated is from
97− https://github.com/seanjames777/SML-Language-Definition/blob/master/sml.tmLanguage
98−* `Cabal.sublime_syntax` has been added manually from
99− https://github.com/SublimeHaskell/SublimeHaskell/ - we don't want to include the whole submodule because it includes other syntaxes ("Haskell improved") as well.
100−* `Lean.sublime-syntax` has been added manually from https://github.com/leanprover/vscode-lean/blob/master/syntaxes/lean.json via conversion.
doc/logo-header.svg+1−1
@@ -45,7 +45,7 @@
4545 showguides="true"
4646 inkscape:guide-bbox="true" />
4747 <rect
48− style="opacity:0.5;fill:#e5e5e5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.14294769px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
48+ style="opacity:1;fill:#f2f2f2;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.14294769px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
4949 id="rect1929"
5050 width="1000"
5151 height="286.64285"
doc/release-checklist.mddeleted−73
@@ -1,73 +0,0 @@
1−# Release checklist
2−
3−## Version bump
4−
5−- [ ] Update version in `Cargo.toml`. Run `cargo build` to update `Cargo.lock`.
6− Make sure to `git add` the `Cargo.lock` changes as well.
7−- [ ] Find the current min. supported Rust version by running
8− `grep '^\s*MIN_SUPPORTED_RUST_VERSION' .github/workflows/CICD.yml`.
9−- [ ] Update the version and the min. supported Rust version in `README.md` and
10− `doc/README-*.md`. Check with
11− `git grep -i -e 'rust.*1\.' -e '1\..*rust' | grep README | grep -v tests/`.
12−- [ ] Update `CHANGELOG.md`. Introduce a section for the new release.
13−
14−## Update syntaxes and themes (build assets)
15−
16−- [ ] Install the latest master version (`cargo clean && cargo install --locked -f --path .`) and make
17− sure that it is available on the `PATH` (`bat --version` should show the
18− new version).
19−- [ ] Run `assets/create.sh` and check in the binary asset files.
20−
21−## Documentation
22−
23−- [ ] Review `-h`, `--help`, and the `man` page. All of these are shown in
24− the output of the CI job called *Documentation*, so look there.
25− The CI workflow corresponding to the tip of the master branch is a good place to look.
26−
27−## Pre-release checks
28−
29−- [ ] Push all changes and wait for CI to succeed (before continuing with the
30− next section).
31−- [ ] Optional: manually test the new features and command-line options. To do
32− this, install the latest `bat` version again (to include the new syntaxes
33− and themes).
34−- [ ] Run `cargo publish --dry-run` to make sure that it will
35− succeed later (after creating the GitHub release).
36−
37−## Release
38−
39−- [ ] Create a tag and push it: `git tag vX.Y.Z; git push origin tag vX.Y.Z`.
40− This will trigger the deployment via GitHub Actions.
41− REMINDER: If your `origin` is a fork, don't forget to push to e.g. `upstream` instead!
42−- [ ] Go to https://github.com/sharkdp/bat/releases/new to create the new
43− release. Select the new tag and also use it as the release title. For the
44− release notes, copy the corresponding section from `CHANGELOG.md` and
45− possibly add additional remarks for package maintainers.
46− Publish the release.
47−- [ ] Check if the binary deployment works (archives and Debian packages should
48− appear when the CI run for the Git tag has finished).
49−- [ ] Publish to crates.io by running `cargo publish` in a *clean* repository.
50− The safest way to do this is to clone a fresh copy.
51−
52−## Post-release
53−
54−- [ ] Prepare a new "unreleased" section at the top of `CHANGELOG.md`.
55− Put this at the top:
56−
57−```
58−# unreleased
59−
60−## Features
61−
62−## Bugfixes
63−
64−## Other
65−
66−## Syntaxes
67−
68−## Themes
69−
70−## `bat` as a library
71−
72−
73−```
doc/sponsors.mddeleted−14
@@ -1,14 +0,0 @@
1−## Sponsors
2−
3−`bat` development is sponsored by many individuals and companies. Thank you very much!
4−
5−Please note, that being sponsored does not affect the individuality of the `bat`
6−project or affect the maintainers' actions in any way.
7−We remain impartial and continue to assess pull requests solely on merit - the
8−features added, bugs solved, and effect on the overall complexity of the code.
9−No issue will have a different priority based on sponsorship status of the
10−reporter.
11−
12−Contributions from anybody are most welcomed, please see our [`CONTRIBUTING.md`](../CONTRIBUTING.md) guide.
13−
14−If you want to see our biggest sponsors, check the top of [`README.md`](../README.md#sponsors).
doc/sponsors/workos-logo-white-bg.svgdeleted−11
@@ -1,11 +0,0 @@
1−<svg width="1354" height="420" viewBox="0 0 1354 420" fill="none" xmlns="http://www.w3.org/2000/svg">
2−<rect width="1354" height="420" rx="20" fill="white"/>
3−<path d="M434.751 133.122H466.637L489.595 227.729C493.852 245.585 494.697 256.219 494.697 256.219H495.128C495.128 256.219 496.61 245.808 500.867 227.729L522.757 133.122H558.9L582.066 227.729C586.53 246.223 587.598 256.219 587.598 256.219H588.236C588.236 256.219 588.666 246.223 592.907 227.729L615.02 133.122H646.907L606.523 288.313H571.017L546.576 194.344C541.474 173.936 541.044 164.801 541.044 164.801H540.614C540.614 164.801 540.183 173.936 535.512 194.344L512.553 288.313H475.996L434.751 133.122Z" fill="black"/>
4−<path d="M641.583 231.934C641.583 196.428 664.541 173.47 699.202 173.47C733.639 173.47 756.597 196.428 756.597 231.934C756.597 267.647 733.639 290.828 699.202 290.828C664.557 290.812 641.583 267.647 641.583 231.934ZM726.832 231.934C726.832 208.976 715.783 195.998 699.202 195.998C681.346 195.998 671.349 210.458 671.349 231.934C671.349 255.323 682.398 268.284 699.202 268.284C717.058 268.284 726.832 253.824 726.832 231.934Z" fill="black"/>
5−<path d="M770.836 175.21H799.103V196.048H799.741C804.635 185.207 816.322 174.365 836.299 174.365C839.695 174.365 841.831 174.796 843.314 175.21V203.478H842.469C842.469 203.478 839.918 202.633 832.903 202.633C811.013 202.633 799.103 215.594 799.103 239.828V288.295H770.836V175.21Z" fill="black"/>
6−<path d="M856.5 133.122H884.767V182.865C884.767 212.2 884.336 217.509 884.336 217.509H884.767L926.857 175.212H962.139L912.843 224.11L970.031 288.313H936.646L895.401 241.536L884.767 251.946V288.297H856.5V133.122Z" fill="black"/>
7−<path d="M970.444 211.285C970.444 163.455 1000.21 131.569 1044.85 131.569C1089.49 131.569 1119.26 163.455 1119.26 211.285C1119.26 259.114 1089.49 291.001 1044.85 291.001C1000.21 291.001 970.444 259.114 970.444 211.285ZM1088.42 211.285C1088.42 178.761 1071 156.855 1044.84 156.855C1018.67 156.855 1001.26 178.761 1001.26 211.285C1001.26 243.809 1018.69 265.715 1044.84 265.715C1070.98 265.715 1088.42 243.809 1088.42 211.285Z" fill="black"/>
8−<path d="M1130.08 236.656H1162.4C1162.4 254.943 1174.95 265.146 1194.08 265.146C1210.23 265.146 1221.29 257.063 1221.29 245.584C1221.29 232.622 1212.79 229.21 1185.79 223.901C1161.12 219.007 1134.98 210.716 1134.98 178.399C1134.98 151.408 1157.93 131 1193.01 131C1229.57 131 1252.11 150.132 1252.11 179.037H1219.79C1219.79 165.007 1208.95 156.286 1193.01 156.286C1176.86 156.286 1166.86 164.146 1166.86 175.625C1166.86 187.742 1173.88 192.413 1195.56 196.878C1227.65 203.685 1254.02 207.288 1254.02 243.001C1254.02 271.3 1229.36 290.432 1193.01 290.432C1156.02 290.432 1130.08 268.957 1130.08 236.656Z" fill="black"/>
9−<path d="M100 210C100 214.824 101.269 219.647 103.723 223.793L148.231 300.878C152.8 308.747 159.739 315.178 168.369 318.055C185.377 323.724 202.977 316.447 211.354 301.893L222.1 283.278L179.708 210L224.47 132.408L235.216 113.792C238.431 108.208 242.747 103.638 247.824 100H243.17H178.777C166.677 100 155.508 106.431 149.5 116.923L103.723 196.208C101.269 200.354 100 205.177 100 210Z" fill="#6363F1"/>
10−<path d="M353.847 210C353.847 205.177 352.578 200.353 350.124 196.207L305.024 118.107C296.647 103.638 279.047 96.3608 262.039 101.945C253.409 104.822 246.47 111.253 241.901 119.122L231.747 136.638L274.139 210L229.378 287.592L218.632 306.208C215.416 311.708 211.101 316.362 206.024 320H210.678H275.07C287.17 320 298.34 313.569 304.347 303.077L350.124 223.792C352.578 219.646 353.847 214.823 353.847 210Z" fill="#6363F1"/>
11−</svg>
rustfmt.tomldeleted−1
@@ -1 +0,0 @@
1−# Defaults are used
src/assets.rs+234−419
@@ -1,255 +1,188 @@
1+use std::collections::BTreeMap;
12use std::ffi::OsStr;
2−use std::fs;
3+use std::fs::{self, File};
4+use std::io::BufReader;
35use std::path::Path;
46
5−use once_cell::unsync::OnceCell;
6−
7−use syntect::highlighting::Theme;
8−use syntect::parsing::{SyntaxReference, SyntaxSet};
7+use syntect::dumps::{dump_to_file, from_binary, from_reader};
8+use syntect::highlighting::{Theme, ThemeSet};
9+use syntect::parsing::{SyntaxReference, SyntaxSet, SyntaxSetBuilder};
910
1011use path_abs::PathAbs;
1112
13+use crate::assets_metadata::AssetsMetadata;
1214use crate::error::*;
13−use crate::input::{InputReader, OpenedInput};
14−use crate::syntax_mapping::ignored_suffixes::IgnoredSuffixes;
15−use crate::syntax_mapping::MappingTarget;
16−use crate::{bat_warning, SyntaxMapping};
17−
18−use lazy_theme_set::LazyThemeSet;
19−
20−use serialized_syntax_set::*;
21−
22−#[cfg(feature = "build-assets")]
23−pub use crate::assets::build_assets::*;
24−
25−pub(crate) mod assets_metadata;
26−#[cfg(feature = "build-assets")]
27−mod build_assets;
28−mod lazy_theme_set;
29−mod serialized_syntax_set;
15+use crate::input::{InputReader, OpenedInput, OpenedInputKind};
16+use crate::syntax_mapping::{MappingTarget, SyntaxMapping};
3017
3118#[derive(Debug)]
3219pub struct HighlightingAssets {
33− syntax_set_cell: OnceCell<SyntaxSet>,
34− serialized_syntax_set: SerializedSyntaxSet,
35−
36− theme_set: LazyThemeSet,
20+ pub(crate) syntax_set: SyntaxSet,
21+ pub(crate) theme_set: ThemeSet,
3722 fallback_theme: Option<&'static str>,
3823}
3924
40−#[derive(Debug)]
41−pub struct SyntaxReferenceInSet<'a> {
42− pub syntax: &'a SyntaxReference,
43− pub syntax_set: &'a SyntaxSet,
44−}
25+impl HighlightingAssets {
26+ pub fn default_theme() -> &'static str {
27+ "Monokai Extended"
28+ }
4529
46−/// Lazy-loaded syntaxes are already compressed, and we don't want to compress
47−/// already compressed data.
48−pub(crate) const COMPRESS_SYNTAXES: bool = false;
30+ pub fn from_files(source_dir: &Path, include_integrated_assets: bool) -> Result<Self> {
31+ let mut theme_set = if include_integrated_assets {
32+ Self::get_integrated_themeset()
33+ } else {
34+ ThemeSet {
35+ themes: BTreeMap::new(),
36+ }
37+ };
4938
50−/// We don't want to compress our [LazyThemeSet] since the lazy-loaded themes
51−/// within it are already compressed, and compressing another time just makes
52−/// performance suffer
53−pub(crate) const COMPRESS_THEMES: bool = false;
39+ let theme_dir = source_dir.join("themes");
5440
55−/// Compress for size of ~40 kB instead of ~200 kB without much difference in
56−/// performance due to lazy-loading
57−pub(crate) const COMPRESS_LAZY_THEMES: bool = true;
41+ let res = theme_set.add_from_folder(&theme_dir);
42+ if res.is_err() {
43+ println!(
44+ "No themes were found in '{}', using the default set",
45+ theme_dir.to_string_lossy()
46+ );
47+ }
5848
59−/// Compress for size of ~10 kB instead of ~120 kB
60−pub(crate) const COMPRESS_ACKNOWLEDGEMENTS: bool = true;
49+ let mut syntax_set_builder = if !include_integrated_assets {
50+ let mut builder = SyntaxSetBuilder::new();
51+ builder.add_plain_text_syntax();
52+ builder
53+ } else {
54+ Self::get_integrated_syntaxset().into_builder()
55+ };
6156
62−impl HighlightingAssets {
63− fn new(serialized_syntax_set: SerializedSyntaxSet, theme_set: LazyThemeSet) -> Self {
64− HighlightingAssets {
65− syntax_set_cell: OnceCell::new(),
66− serialized_syntax_set,
57+ let syntax_dir = source_dir.join("syntaxes");
58+ if syntax_dir.exists() {
59+ syntax_set_builder.add_from_folder(syntax_dir, true)?;
60+ } else {
61+ println!(
62+ "No syntaxes were found in '{}', using the default set.",
63+ syntax_dir.to_string_lossy()
64+ );
65+ }
66+
67+ Ok(HighlightingAssets {
68+ syntax_set: syntax_set_builder.build(),
6769 theme_set,
6870 fallback_theme: None,
69− }
71+ })
7072 }
7173
72− /// The default theme.
73− ///
74− /// ### Windows and Linux
75− ///
76− /// Windows and most Linux distributions has a dark terminal theme by
77− /// default. On these platforms, this function always returns a theme that
78− /// looks good on a dark background.
79− ///
80− /// ### macOS
81− ///
82− /// On macOS the default terminal background is light, but it is common that
83− /// Dark Mode is active, which makes the terminal background dark. On this
84− /// platform, the default theme depends on
85− /// ```bash
86− /// defaults read -globalDomain AppleInterfaceStyle
87− /// ````
88− /// To avoid the overhead of the check on macOS, simply specify a theme
89− /// explicitly via `--theme`, `BAT_THEME`, or `~/.config/bat`.
90− ///
91− /// See <https://github.com/sharkdp/bat/issues/1746> and
92− /// <https://github.com/sharkdp/bat/issues/1928> for more context.
93− pub fn default_theme() -> &'static str {
94− #[cfg(not(target_os = "macos"))]
95− {
96− Self::default_dark_theme()
97− }
98− #[cfg(target_os = "macos")]
99− {
100− if macos_dark_mode_active() {
101− Self::default_dark_theme()
102− } else {
103− Self::default_light_theme()
104− }
105− }
106− }
74+ pub fn from_cache(cache_path: &Path) -> Result<Self> {
75+ let syntax_set_path = cache_path.join("syntaxes.bin");
76+ let theme_set_path = cache_path.join("themes.bin");
10777
108− /**
109− * The default theme that looks good on a dark background.
110− */
111− fn default_dark_theme() -> &'static str {
112− "Monokai Extended"
78+ let syntax_set_file = File::open(&syntax_set_path).chain_err(|| {
79+ format!(
80+ "Could not load cached syntax set '{}'",
81+ syntax_set_path.to_string_lossy()
82+ )
83+ })?;
84+ let syntax_set: SyntaxSet = from_reader(BufReader::new(syntax_set_file))
85+ .chain_err(|| "Could not parse cached syntax set")?;
86+
87+ let theme_set_file = File::open(&theme_set_path).chain_err(|| {
88+ format!(
89+ "Could not load cached theme set '{}'",
90+ theme_set_path.to_string_lossy()
91+ )
92+ })?;
93+ let theme_set: ThemeSet = from_reader(BufReader::new(theme_set_file))
94+ .chain_err(|| "Could not parse cached theme set")?;
95+
96+ Ok(HighlightingAssets {
97+ syntax_set,
98+ theme_set,
99+ fallback_theme: None,
100+ })
113101 }
114102
115− /**
116− * The default theme that looks good on a light background.
117− */
118− #[cfg(target_os = "macos")]
119− fn default_light_theme() -> &'static str {
120− "Monokai Extended Light"
103+ fn get_integrated_syntaxset() -> SyntaxSet {
104+ from_binary(include_bytes!("../assets/syntaxes.bin"))
121105 }
122106
123− pub fn from_cache(cache_path: &Path) -> Result<Self> {
124− Ok(HighlightingAssets::new(
125− SerializedSyntaxSet::FromFile(cache_path.join("syntaxes.bin")),
126− asset_from_cache(&cache_path.join("themes.bin"), "theme set", COMPRESS_THEMES)?,
127− ))
107+ fn get_integrated_themeset() -> ThemeSet {
108+ from_binary(include_bytes!("../assets/themes.bin"))
128109 }
129110
130111 pub fn from_binary() -> Self {
131− HighlightingAssets::new(
132− SerializedSyntaxSet::FromBinary(get_serialized_integrated_syntaxset()),
133− get_integrated_themeset(),
134− )
135− }
112+ let syntax_set = Self::get_integrated_syntaxset();
113+ let theme_set = Self::get_integrated_themeset();
136114
137− pub fn set_fallback_theme(&mut self, theme: &'static str) {
138− self.fallback_theme = Some(theme);
115+ HighlightingAssets {
116+ syntax_set,
117+ theme_set,
118+ fallback_theme: None,
119+ }
139120 }
140121
141− /// Return the collection of syntect syntax definitions.
142− pub fn get_syntax_set(&self) -> Result<&SyntaxSet> {
143− self.syntax_set_cell
144− .get_or_try_init(|| self.serialized_syntax_set.deserialize())
145− }
122+ pub fn save_to_cache(&self, target_dir: &Path, current_version: &str) -> Result<()> {
123+ let _ = fs::create_dir_all(target_dir);
124+ let theme_set_path = target_dir.join("themes.bin");
125+ let syntax_set_path = target_dir.join("syntaxes.bin");
146126
147− /// Use [Self::get_syntaxes] instead
148− #[deprecated]
149− pub fn syntaxes(&self) -> &[SyntaxReference] {
150− self.get_syntax_set()
151− .expect(".syntaxes() is deprecated, use .get_syntaxes() instead")
152− .syntaxes()
153− }
127+ print!(
128+ "Writing theme set to {} ... ",
129+ theme_set_path.to_string_lossy()
130+ );
131+ dump_to_file(&self.theme_set, &theme_set_path).chain_err(|| {
132+ format!(
133+ "Could not save theme set to {}",
134+ theme_set_path.to_string_lossy()
135+ )
136+ })?;
137+ println!("okay");
154138
155− pub fn get_syntaxes(&self) -> Result<&[SyntaxReference]> {
156− Ok(self.get_syntax_set()?.syntaxes())
157− }
139+ print!(
140+ "Writing syntax set to {} ... ",
141+ syntax_set_path.to_string_lossy()
142+ );
143+ dump_to_file(&self.syntax_set, &syntax_set_path).chain_err(|| {
144+ format!(
145+ "Could not save syntax set to {}",
146+ syntax_set_path.to_string_lossy()
147+ )
148+ })?;
149+ println!("okay");
158150
159− fn get_theme_set(&self) -> &LazyThemeSet {
160− &self.theme_set
161− }
151+ print!(
152+ "Writing metadata to folder {} ... ",
153+ target_dir.to_string_lossy()
154+ );
155+ AssetsMetadata::new(current_version).save_to_folder(target_dir)?;
156+ println!("okay");
162157
163− pub fn themes(&self) -> impl Iterator<Item = &str> {
164− self.get_theme_set().themes()
158+ Ok(())
165159 }
166160
167− /// Use [Self::get_syntax_for_path] instead
168− #[deprecated]
169− pub fn syntax_for_file_name(
170− &self,
171− file_name: impl AsRef<Path>,
172− mapping: &SyntaxMapping,
173− ) -> Option<&SyntaxReference> {
174− self.get_syntax_for_path(file_name, mapping)
175− .ok()
176− .map(|syntax_in_set| syntax_in_set.syntax)
161+ pub fn set_fallback_theme(&mut self, theme: &'static str) {
162+ self.fallback_theme = Some(theme);
177163 }
178164
179− /// Detect the syntax based on, in order:
180− /// 1. Syntax mappings with [MappingTarget::MapTo] and [MappingTarget::MapToUnknown]
181− /// (e.g. `/etc/profile` -> `Bourne Again Shell (bash)`)
182− /// 2. The file name (e.g. `Dockerfile`)
183− /// 3. Syntax mappings with [MappingTarget::MapExtensionToUnknown]
184− /// (e.g. `*.conf`)
185− /// 4. The file name extension (e.g. `.rs`)
186− ///
187− /// When detecting syntax based on syntax mappings, the full path is taken
188− /// into account. When detecting syntax based on file name, no regard is
189− /// taken to the path of the file. Only the file name itself matters. When
190− /// detecting syntax based on file name extension, only the file name
191− /// extension itself matters.
192− ///
193− /// Returns [Error::UndetectedSyntax] if it was not possible detect syntax
194− /// based on path/file name/extension (or if the path was mapped to
195− /// [MappingTarget::MapToUnknown] or [MappingTarget::MapExtensionToUnknown]).
196− /// In this case it is appropriate to fall back to other methods to detect
197− /// syntax. Such as using the contents of the first line of the file.
198− ///
199− /// Returns [Error::UnknownSyntax] if a syntax mapping exist, but the mapped
200− /// syntax does not exist.
201− pub fn get_syntax_for_path(
202− &self,
203− path: impl AsRef<Path>,
204− mapping: &SyntaxMapping,
205− ) -> Result<SyntaxReferenceInSet> {
206− let path = path.as_ref();
207−
208− let syntax_match = mapping.get_syntax_for(path);
209−
210− if let Some(MappingTarget::MapToUnknown) = syntax_match {
211− return Err(Error::UndetectedSyntax(path.to_string_lossy().into()));
212− }
213−
214− if let Some(MappingTarget::MapTo(syntax_name)) = syntax_match {
215− return self
216− .find_syntax_by_name(syntax_name)?
217− .ok_or_else(|| Error::UnknownSyntax(syntax_name.to_owned()));
218− }
219−
220− let file_name = path.file_name().unwrap_or_default();
221−
222− match (
223− self.get_syntax_for_file_name(file_name, &mapping.ignored_suffixes)?,
224− syntax_match,
225− ) {
226− (Some(syntax), _) => Ok(syntax),
227−
228− (_, Some(MappingTarget::MapExtensionToUnknown)) => {
229− Err(Error::UndetectedSyntax(path.to_string_lossy().into()))
230− }
165+ pub fn syntaxes(&self) -> &[SyntaxReference] {
166+ self.syntax_set.syntaxes()
167+ }
231168
232− _ => self
233− .get_syntax_for_file_extension(file_name, &mapping.ignored_suffixes)?
234− .ok_or_else(|| Error::UndetectedSyntax(path.to_string_lossy().into())),
235− }
169+ pub fn themes(&self) -> impl Iterator<Item = &str> {
170+ self.theme_set.themes.keys().map(|s| s.as_ref())
236171 }
237172
238− /// Look up a syntect theme by name.
239− pub fn get_theme(&self, theme: &str) -> &Theme {
240− match self.get_theme_set().get(theme) {
173+ pub(crate) fn get_theme(&self, theme: &str) -> &Theme {
174+ match self.theme_set.themes.get(theme) {
241175 Some(theme) => theme,
242176 None => {
243− if theme == "ansi-light" || theme == "ansi-dark" {
244− bat_warning!("Theme '{}' is deprecated, using 'ansi' instead.", theme);
245− return self.get_theme("ansi");
177+ if theme != "" {
178+ use ansi_term::Colour::Yellow;
179+ eprintln!(
180+ "{}: Unknown theme '{}', using default.",
181+ Yellow.paint("[bat warning]"),
182+ theme
183+ );
246184 }
247− if !theme.is_empty() {
248− bat_warning!("Unknown theme '{}', using default.", theme)
249− }
250− self.get_theme_set()
251− .get(self.fallback_theme.unwrap_or_else(Self::default_theme))
252− .expect("something is very wrong if the default theme is missing")
185+ &self.theme_set.themes[self.fallback_theme.unwrap_or_else(|| Self::default_theme())]
253186 }
254187 }
255188 }
@@ -259,153 +192,78 @@ impl HighlightingAssets {
259192 language: Option<&str>,
260193 input: &mut OpenedInput,
261194 mapping: &SyntaxMapping,
262− ) -> Result<SyntaxReferenceInSet> {
195+ ) -> Result<&SyntaxReference> {
263196 if let Some(language) = language {
264− let syntax_set = self.get_syntax_set()?;
265− return syntax_set
197+ self.syntax_set
266198 .find_syntax_by_token(language)
267− .map(|syntax| SyntaxReferenceInSet { syntax, syntax_set })
268− .ok_or_else(|| Error::UnknownSyntax(language.to_owned()));
269− }
270−
271− let path = input.path();
272− let path_syntax = if let Some(path) = path {
273− self.get_syntax_for_path(
274− PathAbs::new(path).map_or_else(|_| path.to_owned(), |p| p.as_path().to_path_buf()),
275− mapping,
276− )
199+ .ok_or_else(|| ErrorKind::UnknownSyntax(language.to_owned()).into())
277200 } else {
278− Err(Error::UndetectedSyntax("[unknown]".into()))
279− };
280−
281− match path_syntax {
282− // If a path wasn't provided, or if path based syntax detection
283− // above failed, we fall back to first-line syntax detection.
284− Err(Error::UndetectedSyntax(path)) => self
285− .get_first_line_syntax(&mut input.reader)?
286− .ok_or(Error::UndetectedSyntax(path)),
287− _ => path_syntax,
288− }
289− }
290−
291− pub(crate) fn find_syntax_by_name(
292− &self,
293− syntax_name: &str,
294− ) -> Result<Option<SyntaxReferenceInSet>> {
295− let syntax_set = self.get_syntax_set()?;
296− Ok(syntax_set
297− .find_syntax_by_name(syntax_name)
298− .map(|syntax| SyntaxReferenceInSet { syntax, syntax_set }))
299− }
300−
301− fn find_syntax_by_extension(&self, e: Option<&OsStr>) -> Result<Option<SyntaxReferenceInSet>> {
302− let syntax_set = self.get_syntax_set()?;
303− let extension = e.and_then(|x| x.to_str()).unwrap_or_default();
304− Ok(syntax_set
305− .find_syntax_by_extension(extension)
306− .map(|syntax| SyntaxReferenceInSet { syntax, syntax_set }))
307− }
308−
309− fn get_syntax_for_file_name(
310− &self,
311− file_name: &OsStr,
312− ignored_suffixes: &IgnoredSuffixes,
313− ) -> Result<Option<SyntaxReferenceInSet>> {
314− let mut syntax = self.find_syntax_by_extension(Some(file_name))?;
315− if syntax.is_none() {
316− syntax =
317− ignored_suffixes.try_with_stripped_suffix(file_name, |stripped_file_name| {
318− // Note: recursion
319− self.get_syntax_for_file_name(stripped_file_name, ignored_suffixes)
320− })?;
201+ let line_syntax = self.get_first_line_syntax(&mut input.reader);
202+
203+ // Get the path of the file:
204+ // If this was set by the metadata, that will take priority.
205+ // If it wasn't, it will use the real file path (if available).
206+ let path_str =
207+ input
208+ .metadata
209+ .user_provided_name
210+ .as_ref()
211+ .or_else(|| match input.kind {
212+ OpenedInputKind::OrdinaryFile(ref path) => Some(path),
213+ _ => None,
214+ });
215+
216+ if let Some(path_str) = path_str {
217+ // If a path was provided, we try and detect the syntax based on extension mappings.
218+ let path = Path::new(path_str);
219+ let absolute_path = PathAbs::new(path)
220+ .ok()
221+ .map(|p| p.as_path().to_path_buf())
222+ .unwrap_or_else(|| path.to_owned());
223+
224+ match mapping.get_syntax_for(absolute_path) {
225+ Some(MappingTarget::MapToUnknown) => line_syntax.ok_or_else(|| {
226+ ErrorKind::UndetectedSyntax(path.to_string_lossy().into()).into()
227+ }),
228+
229+ Some(MappingTarget::MapTo(syntax_name)) => self
230+ .syntax_set
231+ .find_syntax_by_name(syntax_name)
232+ .ok_or_else(|| ErrorKind::UnknownSyntax(syntax_name.to_owned()).into()),
233+
234+ None => {
235+ let file_name = path.file_name().unwrap_or_default();
236+ self.get_extension_syntax(file_name)
237+ .or(line_syntax)
238+ .ok_or_else(|| {
239+ ErrorKind::UndetectedSyntax(path.to_string_lossy().into()).into()
240+ })
241+ }
242+ }
243+ } else {
244+ // If a path wasn't provided, we fall back to the detect first-line syntax.
245+ line_syntax.ok_or_else(|| ErrorKind::UndetectedSyntax("[unknown]".into()).into())
246+ }
321247 }
322− Ok(syntax)
323248 }
324249
325− fn get_syntax_for_file_extension(
326− &self,
327− file_name: &OsStr,
328− ignored_suffixes: &IgnoredSuffixes,
329− ) -> Result<Option<SyntaxReferenceInSet>> {
330− let mut syntax = self.find_syntax_by_extension(Path::new(file_name).extension())?;
331− if syntax.is_none() {
332− syntax =
333− ignored_suffixes.try_with_stripped_suffix(file_name, |stripped_file_name| {
334− // Note: recursion
335− self.get_syntax_for_file_extension(stripped_file_name, ignored_suffixes)
336− })?;
337− }
338− Ok(syntax)
250+ fn get_extension_syntax(&self, file_name: &OsStr) -> Option<&SyntaxReference> {
251+ self.syntax_set
252+ .find_syntax_by_extension(file_name.to_str().unwrap_or_default())
253+ .or_else(|| {
254+ self.syntax_set.find_syntax_by_extension(
255+ Path::new(file_name)
256+ .extension()
257+ .and_then(|x| x.to_str())
258+ .unwrap_or_default(),
259+ )
260+ })
339261 }
340262
341− fn get_first_line_syntax(
342− &self,
343− reader: &mut InputReader,
344− ) -> Result<Option<SyntaxReferenceInSet>> {
345− let syntax_set = self.get_syntax_set()?;
346− Ok(String::from_utf8(reader.first_line.clone())
263+ fn get_first_line_syntax(&self, reader: &mut InputReader) -> Option<&SyntaxReference> {
264+ String::from_utf8(reader.first_line.clone())
347265 .ok()
348− .and_then(|l| syntax_set.find_syntax_by_first_line(&l))
349− .map(|syntax| SyntaxReferenceInSet { syntax, syntax_set }))
350− }
351−}
352−
353−pub(crate) fn get_serialized_integrated_syntaxset() -> &'static [u8] {
354− include_bytes!("../assets/syntaxes.bin")
355−}
356−
357−pub(crate) fn get_integrated_themeset() -> LazyThemeSet {
358− from_binary(include_bytes!("../assets/themes.bin"), COMPRESS_THEMES)
359−}
360−
361−pub fn get_acknowledgements() -> String {
362− from_binary(
363− include_bytes!("../assets/acknowledgements.bin"),
364− COMPRESS_ACKNOWLEDGEMENTS,
365− )
366−}
367−
368−pub(crate) fn from_binary<T: serde::de::DeserializeOwned>(v: &[u8], compressed: bool) -> T {
369− asset_from_contents(v, "n/a", compressed)
370− .expect("data integrated in binary is never faulty, but make sure `compressed` is in sync!")
371−}
372−
373−fn asset_from_contents<T: serde::de::DeserializeOwned>(
374− contents: &[u8],
375− description: &str,
376− compressed: bool,
377−) -> Result<T> {
378− if compressed {
379− bincode::deserialize_from(flate2::read::ZlibDecoder::new(contents))
380− } else {
381− bincode::deserialize_from(contents)
382− }
383− .map_err(|_| format!("Could not parse {}", description).into())
384−}
385−
386−fn asset_from_cache<T: serde::de::DeserializeOwned>(
387− path: &Path,
388− description: &str,
389− compressed: bool,
390−) -> Result<T> {
391− let contents = fs::read(path).map_err(|_| {
392− format!(
393− "Could not load cached {} '{}'",
394− description,
395− path.to_string_lossy()
396− )
397− })?;
398− asset_from_contents(&contents[..], description, compressed)
399− .map_err(|_| format!("Could not parse cached {}", description).into())
400−}
401−
402−#[cfg(target_os = "macos")]
403−fn macos_dark_mode_active() -> bool {
404− let mut defaults_cmd = std::process::Command::new("defaults");
405− defaults_cmd.args(&["read", "-globalDomain", "AppleInterfaceStyle"]);
406− match defaults_cmd.output() {
407− Ok(output) => output.stdout == b"Dark\n",
408− Err(_) => true,
266+ .and_then(|l| self.syntax_set.find_syntax_by_first_line(&l))
409267 }
410268}
411269
@@ -416,8 +274,8 @@ mod tests {
416274 use std::ffi::OsStr;
417275
418276 use std::fs::File;
419− use std::io::{BufReader, Write};
420− use tempfile::TempDir;
277+ use std::io::Write;
278+ use tempdir::TempDir;
421279
422280 use crate::input::Input;
423281
@@ -432,22 +290,11 @@ mod tests {
432290 SyntaxDetectionTest {
433291 assets: HighlightingAssets::from_binary(),
434292 syntax_mapping: SyntaxMapping::builtin(),
435− temp_dir: TempDir::new().expect("creation of temporary directory"),
293+ temp_dir: TempDir::new("bat_syntax_detection_tests")
294+ .expect("creation of temporary directory"),
436295 }
437296 }
438297
439− fn get_syntax_name(
440− &self,
441− language: Option<&str>,
442− input: &mut OpenedInput,
443− mapping: &SyntaxMapping,
444− ) -> String {
445− self.assets
446− .get_syntax(language, input, mapping)
447− .map(|syntax_in_set| syntax_in_set.syntax.name.clone())
448− .unwrap_or_else(|_| "!no syntax!".to_owned())
449− }
450−
451298 fn syntax_for_real_file_with_content_os(
452299 &self,
453300 file_name: &OsStr,
@@ -459,21 +306,29 @@ mod tests {
459306 writeln!(temp_file, "{}", first_line).unwrap();
460307 }
461308
462− let input = Input::ordinary_file(&file_path);
309+ let input = Input::ordinary_file(file_path.as_os_str());
463310 let dummy_stdin: &[u8] = &[];
464− let mut opened_input = input.open(dummy_stdin, None).unwrap();
311+ let mut opened_input = input.open(dummy_stdin).unwrap();
465312
466− self.get_syntax_name(None, &mut opened_input, &self.syntax_mapping)
313+ self.assets
314+ .get_syntax(None, &mut opened_input, &self.syntax_mapping)
315+ .unwrap_or_else(|_| self.assets.syntax_set.find_syntax_plain_text())
316+ .name
317+ .clone()
467318 }
468319
469320 fn syntax_for_file_with_content_os(&self, file_name: &OsStr, first_line: &str) -> String {
470321 let file_path = self.temp_dir.path().join(file_name);
471322 let input = Input::from_reader(Box::new(BufReader::new(first_line.as_bytes())))
472− .with_name(Some(&file_path));
323+ .with_name(Some(file_path.as_os_str()));
473324 let dummy_stdin: &[u8] = &[];
474− let mut opened_input = input.open(dummy_stdin, None).unwrap();
325+ let mut opened_input = input.open(dummy_stdin).unwrap();
475326
476− self.get_syntax_name(None, &mut opened_input, &self.syntax_mapping)
327+ self.assets
328+ .get_syntax(None, &mut opened_input, &self.syntax_mapping)
329+ .unwrap_or_else(|_| self.assets.syntax_set.find_syntax_plain_text())
330+ .name
331+ .clone()
477332 }
478333
479334 #[cfg(unix)]
@@ -490,10 +345,14 @@ mod tests {
490345 }
491346
492347 fn syntax_for_stdin_with_content(&self, file_name: &str, content: &[u8]) -> String {
493− let input = Input::stdin().with_name(Some(file_name));
494− let mut opened_input = input.open(content, None).unwrap();
348+ let input = Input::stdin().with_name(Some(OsStr::new(file_name)));
349+ let mut opened_input = input.open(content).unwrap();
495350
496− self.get_syntax_name(None, &mut opened_input, &self.syntax_mapping)
351+ self.assets
352+ .get_syntax(None, &mut opened_input, &self.syntax_mapping)
353+ .unwrap_or_else(|_| self.assets.syntax_set.find_syntax_plain_text())
354+ .name
355+ .clone()
497356 }
498357
499358 fn syntax_is_same_for_inputkinds(&self, file_name: &str, content: &str) -> bool {
@@ -569,8 +428,6 @@ mod tests {
569428 assert_eq!(test.syntax_for_file("test.h"), "C++");
570429 assert_eq!(test.syntax_for_file("test.sass"), "Sass");
571430 assert_eq!(test.syntax_for_file("test.js"), "JavaScript (Babel)");
572− assert_eq!(test.syntax_for_file("test.fs"), "F#");
573− assert_eq!(test.syntax_for_file("test.v"), "Verilog");
574431 }
575432
576433 #[test]
@@ -603,58 +460,13 @@ mod tests {
603460 }
604461
605462 #[test]
606− fn syntax_detection_with_extension_mapping_to_unknown() {
607− let mut test = SyntaxDetectionTest::new();
608−
609− // Normally, a CMakeLists.txt file shall use the CMake syntax, even if it is
610− // a bash script in disguise
611− assert_eq!(
612− test.syntax_for_file_with_content("CMakeLists.txt", "#!/bin/bash"),
613− "CMake"
614− );
615−
616− // Other .txt files shall use the Plain Text syntax
617− assert_eq!(
618− test.syntax_for_file_with_content("some-other.txt", "#!/bin/bash"),
619− "Plain Text"
620− );
621−
622− // If we setup MapExtensionToUnknown on *.txt, the match on the full
623− // file name of "CMakeLists.txt" shall have higher prio, and CMake shall
624− // still be used for it
625− test.syntax_mapping
626− .insert("*.txt", MappingTarget::MapExtensionToUnknown)
627− .ok();
628− assert_eq!(
629− test.syntax_for_file_with_content("CMakeLists.txt", "#!/bin/bash"),
630− "CMake"
631− );
632−
633− // However, for *other* files with a .txt extension, first-line fallback
634− // shall now be used
635− assert_eq!(
636− test.syntax_for_file_with_content("some-other.txt", "#!/bin/bash"),
637− "Bourne Again Shell (bash)"
638− );
639− }
640−
641− #[test]
642− fn syntax_detection_is_case_insensitive() {
463+ fn syntax_detection_is_case_sensitive() {
643464 let mut test = SyntaxDetectionTest::new();
644465
645− assert_eq!(test.syntax_for_file("README.md"), "Markdown");
646− assert_eq!(test.syntax_for_file("README.mD"), "Markdown");
647− assert_eq!(test.syntax_for_file("README.Md"), "Markdown");
648− assert_eq!(test.syntax_for_file("README.MD"), "Markdown");
649−
650− // Adding a mapping for "MD" in addition to "md" should not break the mapping
466+ assert_ne!(test.syntax_for_file("README.MD"), "Markdown");
651467 test.syntax_mapping
652468 .insert("*.MD", MappingTarget::MapTo("Markdown"))
653469 .ok();
654−
655− assert_eq!(test.syntax_for_file("README.md"), "Markdown");
656− assert_eq!(test.syntax_for_file("README.mD"), "Markdown");
657− assert_eq!(test.syntax_for_file("README.Md"), "Markdown");
658470 assert_eq!(test.syntax_for_file("README.MD"), "Markdown");
659471 }
660472
@@ -687,12 +499,15 @@ mod tests {
687499 .expect("creation of directory succeeds");
688500 symlink(&file_path, &file_path_symlink).expect("creation of symbolic link succeeds");
689501
690− let input = Input::ordinary_file(&file_path_symlink);
502+ let input = Input::ordinary_file(file_path_symlink.as_os_str());
691503 let dummy_stdin: &[u8] = &[];
692− let mut opened_input = input.open(dummy_stdin, None).unwrap();
504+ let mut opened_input = input.open(dummy_stdin).unwrap();
693505
694506 assert_eq!(
695− test.get_syntax_name(None, &mut opened_input, &test.syntax_mapping),
507+ test.assets
508+ .get_syntax(None, &mut opened_input, &test.syntax_mapping)
509+ .unwrap_or_else(|_| test.assets.syntax_set.find_syntax_plain_text())
510+ .name,
696511 "SSH Config"
697512 );
698513 }
src/assets/build_assets.rsdeleted−176
@@ -1,176 +0,0 @@
1−use std::convert::TryInto;
2−use std::path::Path;
3−
4−use syntect::highlighting::ThemeSet;
5−use syntect::parsing::{SyntaxSet, SyntaxSetBuilder};
6−
7−use crate::assets::*;
8−use acknowledgements::build_acknowledgements;
9−
10−mod acknowledgements;
11−
12−pub fn build(
13− source_dir: &Path,
14− include_integrated_assets: bool,
15− include_acknowledgements: bool,
16− target_dir: &Path,
17− current_version: &str,
18−) -> Result<()> {
19− let theme_set = build_theme_set(source_dir, include_integrated_assets)?;
20−
21− let syntax_set_builder = build_syntax_set_builder(source_dir, include_integrated_assets)?;
22−
23− let syntax_set = syntax_set_builder.build();
24−
25− let acknowledgements = build_acknowledgements(source_dir, include_acknowledgements)?;
26−
27− print_unlinked_contexts(&syntax_set);
28−
29− write_assets(
30− &theme_set,
31− &syntax_set,
32− &acknowledgements,
33− target_dir,
34− current_version,
35− )
36−}
37−
38−fn build_theme_set(source_dir: &Path, include_integrated_assets: bool) -> Result<LazyThemeSet> {
39− let mut theme_set = if include_integrated_assets {
40− crate::assets::get_integrated_themeset().try_into()?
41− } else {
42− ThemeSet::new()
43− };
44−
45− let theme_dir = source_dir.join("themes");
46− if theme_dir.exists() {
47− let res = theme_set.add_from_folder(&theme_dir);
48− if let Err(err) = res {
49− println!(
50− "Failed to load one or more themes from '{}' (reason: '{}')",
51− theme_dir.to_string_lossy(),
52− err,
53− );
54− }
55− } else {
56− println!(
57− "No themes were found in '{}', using the default set",
58− theme_dir.to_string_lossy()
59− );
60− }
61−
62− theme_set.try_into()
63−}
64−
65−fn build_syntax_set_builder(
66− source_dir: &Path,
67− include_integrated_assets: bool,
68−) -> Result<SyntaxSetBuilder> {
69− let mut syntax_set_builder = if !include_integrated_assets {
70− let mut builder = syntect::parsing::SyntaxSetBuilder::new();
71− builder.add_plain_text_syntax();
72− builder
73− } else {
74− from_binary::<SyntaxSet>(get_serialized_integrated_syntaxset(), COMPRESS_SYNTAXES)
75− .into_builder()
76− };
77−
78− let syntax_dir = source_dir.join("syntaxes");
79− if syntax_dir.exists() {
80− syntax_set_builder.add_from_folder(syntax_dir, true)?;
81− } else {
82− println!(
83− "No syntaxes were found in '{}', using the default set.",
84− syntax_dir.to_string_lossy()
85− );
86− }
87−
88− Ok(syntax_set_builder)
89−}
90−
91−fn print_unlinked_contexts(syntax_set: &SyntaxSet) {
92− let missing_contexts = syntax_set.find_unlinked_contexts();
93− if !missing_contexts.is_empty() {
94− println!("Some referenced contexts could not be found!");
95− for context in missing_contexts {
96− println!("- {}", context);
97− }
98− }
99−}
100−
101−fn write_assets(
102− theme_set: &LazyThemeSet,
103− syntax_set: &SyntaxSet,
104− acknowledgements: &Option<String>,
105− target_dir: &Path,
106− current_version: &str,
107−) -> Result<()> {
108− let _ = std::fs::create_dir_all(target_dir);
109− asset_to_cache(
110− theme_set,
111− &target_dir.join("themes.bin"),
112− "theme set",
113− COMPRESS_THEMES,
114− )?;
115− asset_to_cache(
116− syntax_set,
117− &target_dir.join("syntaxes.bin"),
118− "syntax set",
119− COMPRESS_SYNTAXES,
120− )?;
121−
122− if let Some(acknowledgements) = acknowledgements {
123− asset_to_cache(
124− acknowledgements,
125− &target_dir.join("acknowledgements.bin"),
126− "acknowledgements",
127− COMPRESS_ACKNOWLEDGEMENTS,
128− )?;
129− }
130−
131− print!(
132− "Writing metadata to folder {} ... ",
133− target_dir.to_string_lossy()
134− );
135− crate::assets_metadata::AssetsMetadata::new(current_version).save_to_folder(target_dir)?;
136− println!("okay");
137−
138− Ok(())
139−}
140−
141−pub(crate) fn asset_to_contents<T: serde::Serialize>(
142− asset: &T,
143− description: &str,
144− compressed: bool,
145−) -> Result<Vec<u8>> {
146− let mut contents = vec![];
147− if compressed {
148− bincode::serialize_into(
149− flate2::write::ZlibEncoder::new(&mut contents, flate2::Compression::best()),
150− asset,
151− )
152− } else {
153− bincode::serialize_into(&mut contents, asset)
154− }
155− .map_err(|_| format!("Could not serialize {}", description))?;
156− Ok(contents)
157−}
158−
159−fn asset_to_cache<T: serde::Serialize>(
160− asset: &T,
161− path: &Path,
162− description: &str,
163− compressed: bool,
164−) -> Result<()> {
165− print!("Writing {} to {} ... ", description, path.to_string_lossy());
166− let contents = asset_to_contents(asset, description, compressed)?;
167− std::fs::write(path, &contents[..]).map_err(|_| {
168− format!(
169− "Could not save {} to {}",
170− description,
171− path.to_string_lossy()
172− )
173− })?;
174− println!("okay");
175− Ok(())
176−}
src/assets/build_assets/acknowledgements.rsdeleted−222
@@ -1,222 +0,0 @@
1−use std::fs::read_to_string;
2−use std::path::{Path, PathBuf};
3−
4−use walkdir::DirEntry;
5−
6−use crate::error::*;
7−
8−struct PathAndStem {
9− path: PathBuf,
10− stem: String,
11− relative_path: String,
12−}
13−
14−/// Looks for LICENSE and NOTICE files in `source_dir`, does some rudimentary
15−/// analysis, and compiles them together in a single string that is meant to be
16−/// used in the output to `--acknowledgements`
17−pub fn build_acknowledgements(
18− source_dir: &Path,
19− include_acknowledgements: bool,
20−) -> Result<Option<String>> {
21− if !include_acknowledgements {
22− return Ok(None);
23− }
24−
25− let mut acknowledgements = format!("{}\n\n", include_str!("../../../NOTICE"));
26−
27− // Sort entries so the order is stable over time
28− let entries = walkdir::WalkDir::new(source_dir).sort_by(|a, b| a.path().cmp(b.path()));
29− for path_and_stem in entries
30− .into_iter()
31− .flatten()
32− .flat_map(|entry| to_path_and_stem(source_dir, entry))
33− {
34− if let Some(license_text) = handle_file(&path_and_stem)? {
35− append_to_acknowledgements(
36− &mut acknowledgements,
37− &path_and_stem.relative_path,
38− &license_text,
39− )
40− }
41− }
42−
43− Ok(Some(acknowledgements))
44−}
45−
46−fn to_path_and_stem(source_dir: &Path, entry: DirEntry) -> Option<PathAndStem> {
47− let path = entry.path();
48−
49− Some(PathAndStem {
50− path: path.to_owned(),
51− stem: path.file_stem().map(|s| s.to_string_lossy().to_string())?,
52− relative_path: path
53− .strip_prefix(source_dir)
54− .map(|p| p.to_string_lossy().to_string())
55− .ok()?,
56− })
57−}
58−
59−fn handle_file(path_and_stem: &PathAndStem) -> Result<Option<String>> {
60− if path_and_stem.stem == "NOTICE" {
61− handle_notice(&path_and_stem.path)
62− } else if path_and_stem.stem.to_ascii_uppercase() == "LICENSE" {
63− handle_license(&path_and_stem.path)
64− } else {
65− Ok(None)
66− }
67−}
68−
69−fn handle_notice(path: &Path) -> Result<Option<String>> {
70− // Assume NOTICE as defined by Apache License 2.0. These must be part of acknowledgements.
71− Ok(Some(read_to_string(path)?))
72−}
73−
74−fn handle_license(path: &Path) -> Result<Option<String>> {
75− let license_text = read_to_string(path)?;
76−
77− if include_license_in_acknowledgments(&license_text) {
78− Ok(Some(license_text))
79− } else if license_not_needed_in_acknowledgements(&license_text) {
80− Ok(None)
81− } else {
82− Err(format!("ERROR: License is of unknown type: {:?}", path).into())
83− }
84−}
85−
86−fn include_license_in_acknowledgments(license_text: &str) -> bool {
87− let markers = vec![
88− // MIT
89− "The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.",
90−
91− // BSD
92− "Redistributions in binary form must reproduce the above copyright notice,",
93−
94− // Apache 2.0
95− "Apache License Version 2.0, January 2004 http://www.apache.org/licenses/",
96− "Licensed under the Apache License, Version 2.0 (the \"License\");",
97− ];
98−
99− license_contains_marker(license_text, &markers)
100−}
101−
102−fn license_not_needed_in_acknowledgements(license_text: &str) -> bool {
103− let markers = vec![
104− // Public domain
105− "This is free and unencumbered software released into the public domain.",
106−
107− // Public domain with stronger wording than above
108− "DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE",
109−
110− // Special license of assets/syntaxes/01_Packages/LICENSE
111− "Permission to copy, use, modify, sell and distribute this software is granted. This software is provided \"as is\" without express or implied warranty, and with no claim as to its suitability for any purpose."
112− ];
113−
114− license_contains_marker(license_text, &markers)
115−}
116−
117−fn license_contains_marker(license_text: &str, markers: &[&str]) -> bool {
118− let normalized_license_text = normalize_license_text(license_text);
119− markers.iter().any(|m| normalized_license_text.contains(m))
120−}
121−
122−fn append_to_acknowledgements(
123− acknowledgements: &mut String,
124− relative_path: &str,
125− license_text: &str,
126−) {
127− acknowledgements.push_str(&format!("## {}\n\n{}", relative_path, license_text));
128−
129− // Make sure the last char is a newline to not mess up formatting later
130− if acknowledgements
131− .chars()
132− .last()
133− .expect("acknowledgements is not the empty string")
134− != '\n'
135− {
136− acknowledgements.push('\n');
137− }
138−
139− // Add two more newlines to make it easy to distinguish where this text ends
140− // and the next starts
141− acknowledgements.push_str("\n\n");
142−}
143−
144−/// Replaces newlines with a space character, and replaces multiple spaces with one space.
145−/// This makes the text easier to analyze.
146−fn normalize_license_text(license_text: &str) -> String {
147− use regex::Regex;
148−
149− let whitespace_and_newlines = Regex::new(r"\s").unwrap();
150− let as_single_line = whitespace_and_newlines.replace_all(license_text, " ");
151−
152− let many_spaces = Regex::new(" +").unwrap();
153− many_spaces.replace_all(&as_single_line, " ").to_string()
154−}
155−
156−#[cfg(test)]
157−mod tests {
158− #[cfg(test)]
159− use super::*;
160−
161− #[test]
162− fn test_normalize_license_text() {
163− let license_text = "This is a license text with these terms:
164− * Complicated multi-line
165− term with indentation";
166−
167− assert_eq!(
168− "This is a license text with these terms: * Complicated multi-line term with indentation".to_owned(),
169− normalize_license_text(license_text),
170− );
171− }
172−
173− #[test]
174− fn test_normalize_license_text_with_windows_line_endings() {
175− let license_text = "This license text includes windows line endings\r
176−and we need to handle that.";
177−
178− assert_eq!(
179− "This license text includes windows line endings and we need to handle that."
180− .to_owned(),
181− normalize_license_text(license_text),
182− );
183− }
184−
185− #[test]
186− fn test_append_to_acknowledgements_adds_newline_if_missing() {
187− let mut acknowledgements = "preamble\n\n\n".to_owned();
188−
189− append_to_acknowledgements(&mut acknowledgements, "some/path", "line without newline");
190− assert_eq!(
191− "preamble
192−
193−
194−## some/path
195−
196−line without newline
197−
198−
199−",
200− acknowledgements
201− );
202−
203− append_to_acknowledgements(&mut acknowledgements, "another/path", "line with newline\n");
204− assert_eq!(
205− "preamble
206−
207−
208−## some/path
209−
210−line without newline
211−
212−
213−## another/path
214−
215−line with newline
216−
217−
218−",
219− acknowledgements
220− );
221− }
222−}
src/assets/lazy_theme_set.rsdeleted−104
@@ -1,104 +0,0 @@
1−use super::*;
2−
3−use std::collections::BTreeMap;
4−use std::convert::TryFrom;
5−
6−use serde::Deserialize;
7−use serde::Serialize;
8−
9−use once_cell::unsync::OnceCell;
10−
11−use syntect::highlighting::{Theme, ThemeSet};
12−
13−/// Same structure as a [`syntect::highlighting::ThemeSet`] but with themes
14−/// stored in raw serialized form, and deserialized on demand.
15−#[derive(Debug, Default, Serialize, Deserialize)]
16−pub struct LazyThemeSet {
17− /// This is a [`BTreeMap`] because that's what [`syntect::highlighting::ThemeSet`] uses
18− themes: BTreeMap<String, LazyTheme>,
19−}
20−
21−/// Stores raw serialized data for a theme with methods to lazily deserialize
22−/// (load) the theme.
23−#[derive(Debug, Serialize, Deserialize)]
24−struct LazyTheme {
25− serialized: Vec<u8>,
26−
27− #[serde(skip, default = "OnceCell::new")]
28− deserialized: OnceCell<syntect::highlighting::Theme>,
29−}
30−
31−impl LazyThemeSet {
32− /// Lazily load the given theme
33− pub fn get(&self, name: &str) -> Option<&Theme> {
34− self.themes.get(name).and_then(|lazy_theme| {
35− lazy_theme
36− .deserialized
37− .get_or_try_init(|| lazy_theme.deserialize())
38− .ok()
39− })
40− }
41−
42− /// Returns the name of all themes.
43− pub fn themes(&self) -> impl Iterator<Item = &str> {
44− self.themes.keys().map(|name| name.as_ref())
45− }
46−}
47−
48−impl LazyTheme {
49− fn deserialize(&self) -> Result<Theme> {
50− asset_from_contents(
51− &self.serialized[..],
52− "lazy-loaded theme",
53− COMPRESS_LAZY_THEMES,
54− )
55− }
56−}
57−
58−impl TryFrom<LazyThemeSet> for ThemeSet {
59− type Error = Error;
60−
61− /// Since the user might want to add custom themes to bat, we need a way to
62− /// convert from a `LazyThemeSet` to a regular [`ThemeSet`] so that more
63− /// themes can be added. This function does that pretty straight-forward
64− /// conversion.
65− fn try_from(lazy_theme_set: LazyThemeSet) -> Result<Self> {
66− let mut theme_set = ThemeSet::default();
67−
68− for (name, lazy_theme) in lazy_theme_set.themes {
69− theme_set.themes.insert(name, lazy_theme.deserialize()?);
70− }
71−
72− Ok(theme_set)
73− }
74−}
75−
76−#[cfg(feature = "build-assets")]
77−impl TryFrom<ThemeSet> for LazyThemeSet {
78− type Error = Error;
79−
80− /// To collect themes, a [`ThemeSet`] is needed. Once all desired themes
81− /// have been added, we need a way to convert that into [`LazyThemeSet`] so
82− /// that themes can be lazy-loaded later. This function does that
83− /// conversion.
84− fn try_from(theme_set: ThemeSet) -> Result<Self> {
85− let mut lazy_theme_set = LazyThemeSet::default();
86−
87− for (name, theme) in theme_set.themes {
88− // All we have to do is to serialize the theme
89− let lazy_theme = LazyTheme {
90− serialized: crate::assets::build_assets::asset_to_contents(
91− &theme,
92− &format!("theme {}", name),
93− COMPRESS_LAZY_THEMES,
94− )?,
95− deserialized: OnceCell::new(),
96− };
97−
98− // Ok done, now we can add it
99− lazy_theme_set.themes.insert(name, lazy_theme);
100− }
101−
102− Ok(lazy_theme_set)
103− }
104−}
src/assets/serialized_syntax_set.rsdeleted−27
@@ -1,27 +0,0 @@
1−use std::path::PathBuf;
2−
3−use syntect::parsing::SyntaxSet;
4−
5−use super::*;
6−
7−/// A SyntaxSet in serialized form, i.e. bincoded and flate2 compressed.
8−/// We keep it in this format since we want to load it lazily.
9−#[derive(Debug)]
10−pub enum SerializedSyntaxSet {
11− /// The data comes from a user-generated cache file.
12− FromFile(PathBuf),
13−
14− /// The data to use is embedded into the bat binary.
15− FromBinary(&'static [u8]),
16−}
17−
18−impl SerializedSyntaxSet {
19− pub fn deserialize(&self) -> Result<SyntaxSet> {
20− match self {
21− SerializedSyntaxSet::FromBinary(data) => Ok(from_binary(data, COMPRESS_SYNTAXES)),
22− SerializedSyntaxSet::FromFile(ref path) => {
23− asset_from_cache(path, "syntax set", COMPRESS_SYNTAXES)
24− }
25− }
26− }
27−}
src/assets/assets_metadata.rs → src/assets_metadata.rsrenamed+9−10
@@ -16,7 +16,6 @@ pub struct AssetsMetadata {
1616const FILENAME: &str = "metadata.yaml";
1717
1818impl AssetsMetadata {
19− #[cfg(feature = "build-assets")]
2019 pub(crate) fn new(current_version: &str) -> AssetsMetadata {
2120 AssetsMetadata {
2221 bat_version: Some(current_version.to_owned()),
@@ -24,7 +23,6 @@ impl AssetsMetadata {
2423 }
2524 }
2625
27− #[cfg(feature = "build-assets")]
2826 pub(crate) fn save_to_folder(&self, path: &Path) -> Result<()> {
2927 let file = File::create(path.join(FILENAME))?;
3028 serde_yaml::to_writer(file, self)?;
@@ -52,15 +50,16 @@ impl AssetsMetadata {
5250 pub fn load_from_folder(path: &Path) -> Result<Option<Self>> {
5351 match Self::try_load_from_folder(path) {
5452 Ok(metadata) => Ok(Some(metadata)),
55− Err(e) => {
56− if let Error::SerdeYamlError(_) = e {
57− Err(e)
58− } else if path.join("syntaxes.bin").exists() || path.join("themes.bin").exists() {
59− Ok(Some(Self::default()))
60− } else {
61− Ok(None)
53+ Err(e) => match e.kind() {
54+ ErrorKind::SerdeYamlError(_) => Err(e),
55+ _ => {
56+ if path.join("syntaxes.bin").exists() || path.join("themes.bin").exists() {
57+ Ok(Some(Self::default()))
58+ } else {
59+ Ok(None)
60+ }
6261 }
63− }
62+ },
6463 }
6564 }
6665
src/bin/bat/app.rs+31−49
@@ -1,6 +1,6 @@
11use std::collections::HashSet;
22use std::env;
3−use std::path::Path;
3+use std::ffi::OsStr;
44use std::str::FromStr;
55
66use atty::{self, Stream};
@@ -16,7 +16,6 @@ use console::Term;
1616use crate::input::{new_file_input, new_stdin_input};
1717use bat::{
1818 assets::HighlightingAssets,
19− bat_warning,
2019 config::{Config, VisibleLines},
2120 error::*,
2221 input::Input,
@@ -62,7 +61,7 @@ impl App {
6261 // Read arguments from bats config file
6362 let mut args = get_args_from_env_var()
6463 .unwrap_or_else(get_args_from_config_file)
65− .map_err(|_| "Could not parse configuration file")?;
64+ .chain_err(|| "Could not parse configuration file")?;
6665
6766 // Put the zero-th CLI argument (program name) first
6867 args.insert(0, cli_args.next().unwrap());
@@ -83,9 +82,8 @@ impl App {
8382 Some("always") => PagingMode::Always,
8483 Some("never") => PagingMode::Never,
8584 Some("auto") | None => {
86− // If we have -pp as an option when in auto mode, the pager should be disabled.
87− let extra_plain = self.matches.occurrences_of("plain") > 1;
88− if extra_plain || self.matches.is_present("no-paging") {
85+ if self.matches.occurrences_of("plain") > 1 {
86+ // If we have -pp as an option when in auto mode, the pager should be disabled.
8987 PagingMode::Never
9088 } else if inputs.iter().any(Input::is_stdin) {
9189 // If we are reading from stdin, only enable paging if we write to an
@@ -107,12 +105,6 @@ impl App {
107105
108106 let mut syntax_mapping = SyntaxMapping::builtin();
109107
110− if let Some(values) = self.matches.values_of("ignored-suffix") {
111− for suffix in values {
112− syntax_mapping.insert_ignored_suffix(suffix);
113− }
114− }
115−
116108 if let Some(values) = self.matches.values_of("map-syntax") {
117109 for from_to in values {
118110 let parts: Vec<_> = from_to.split(':').collect();
@@ -156,34 +148,31 @@ impl App {
156148 wrapping_mode: if self.interactive_output || maybe_term_width.is_some() {
157149 match self.matches.value_of("wrap") {
158150 Some("character") => WrappingMode::Character,
159− Some("never") => WrappingMode::NoWrapping(true),
151+ Some("never") => WrappingMode::NoWrapping,
160152 Some("auto") | None => {
161153 if style_components.plain() {
162− WrappingMode::NoWrapping(false)
154+ WrappingMode::NoWrapping
163155 } else {
164156 WrappingMode::Character
165157 }
166158 }
167− _ => unreachable!("other values for --wrap are not allowed"),
159+ _ => unreachable!("other values for --paging are not allowed"),
168160 }
169161 } else {
170162 // We don't have the tty width when piping to another program.
171163 // There's no point in wrapping when this is the case.
172− WrappingMode::NoWrapping(false)
164+ WrappingMode::NoWrapping
165+ },
166+ colored_output: match self.matches.value_of("color") {
167+ Some("always") => true,
168+ Some("never") => false,
169+ Some("auto") | _ => env::var_os("NO_COLOR").is_none() && self.interactive_output,
173170 },
174− colored_output: self.matches.is_present("force-colorization")
175− || match self.matches.value_of("color") {
176− Some("always") => true,
177− Some("never") => false,
178− Some("auto") => env::var_os("NO_COLOR").is_none() && self.interactive_output,
179− _ => unreachable!("other values for --color are not allowed"),
180− },
181171 paging_mode,
182172 term_width: maybe_term_width.unwrap_or(Term::stdout().size().1 as usize),
183173 loop_through: !(self.interactive_output
184174 || self.matches.value_of("color") == Some("always")
185− || self.matches.value_of("decorations") == Some("always")
186− || self.matches.is_present("force-colorization")),
175+ || self.matches.value_of("decorations") == Some("always")),
187176 tab_width: self
188177 .matches
189178 .value_of("tabs")
@@ -231,16 +220,18 @@ impl App {
231220 style_components,
232221 syntax_mapping,
233222 pager: self.matches.value_of("pager"),
234− use_italic_text: self.matches.value_of("italic-text") == Some("always"),
223+ use_italic_text: match self.matches.value_of("italic-text") {
224+ Some("always") => true,
225+ _ => false,
226+ },
235227 highlighted_lines: self
236228 .matches
237229 .values_of("highlight-line")
238230 .map(|ws| ws.map(LineRange::from).collect())
239231 .transpose()?
240232 .map(LineRanges::from)
241− .map(HighlightedLineRanges)
233+ .map(|lr| HighlightedLineRanges(lr))
242234 .unwrap_or_default(),
243− use_custom_assets: !self.matches.is_present("no-custom-assets"),
244235 })
245236 }
246237
@@ -255,19 +246,16 @@ impl App {
255246 }
256247 _ => {}
257248 }
258− let filenames: Option<Vec<&Path>> = self
249+ let filenames: Option<Vec<&str>> = self
259250 .matches
260− .values_of_os("file-name")
261− .map(|values| values.map(Path::new).collect());
251+ .values_of("file-name")
252+ .map(|values| values.collect());
262253
263− let mut filenames_or_none: Box<dyn Iterator<Item = Option<&Path>>> = match filenames {
264− Some(filenames) => Box::new(filenames.into_iter().map(Some)),
254+ let mut filenames_or_none: Box<dyn Iterator<Item = _>> = match filenames {
255+ Some(ref filenames) => Box::new(filenames.iter().map(|name| Some(OsStr::new(*name)))),
265256 None => Box::new(std::iter::repeat(None)),
266257 };
267− let files: Option<Vec<&Path>> = self
268− .matches
269− .values_of_os("FILE")
270− .map(|vs| vs.map(Path::new).collect());
258+ let files: Option<Vec<&OsStr>> = self.matches.values_of_os("FILE").map(|vs| vs.collect());
271259
272260 if files.is_none() {
273261 return Ok(vec![new_stdin_input(
@@ -294,8 +282,8 @@ impl App {
294282
295283 fn style_components(&self) -> Result<StyleComponents> {
296284 let matches = &self.matches;
297− let mut styled_components =
298− StyleComponents(if matches.value_of("decorations") == Some("never") {
285+ Ok(StyleComponents(
286+ if matches.value_of("decorations") == Some("never") {
299287 HashSet::new()
300288 } else if matches.is_present("number") {
301289 [StyleComponent::LineNumbers].iter().cloned().collect()
@@ -307,7 +295,7 @@ impl App {
307295 .map(|style_str| {
308296 style_str
309297 .split(',')
310− .map(StyleComponent::from_str)
298+ .map(|x| StyleComponent::from_str(&x))
311299 .collect::<Result<Vec<StyleComponent>>>()
312300 })
313301 .transpose()?;
@@ -322,20 +310,14 @@ impl App {
322310 .collect::<Vec<_>>()
323311 })
324312 .or(env_style_components)
325− .unwrap_or_else(|| vec![StyleComponent::Default])
313+ .unwrap_or_else(|| vec![StyleComponent::Full])
326314 .into_iter()
327315 .map(|style| style.components(self.interactive_output))
328316 .fold(HashSet::new(), |mut acc, components| {
329317 acc.extend(components.iter().cloned());
330318 acc
331319 })
332− });
333−
334− // If `grid` is set, remove `rule` as it is a subset of `grid`, and print a warning.
335− if styled_components.grid() && styled_components.0.remove(&StyleComponent::Rule) {
336− bat_warning!("Style 'rule' is a subset of style 'grid', 'rule' will not be visible.");
337− }
338−
339− Ok(styled_components)
320+ },
321+ ))
340322 }
341323}
src/bin/bat/assets.rs+19−26
@@ -1,6 +1,5 @@
11use std::borrow::Cow;
22use std::fs;
3−use std::io;
43
54use clap::crate_version;
65
@@ -19,14 +18,26 @@ pub fn cache_dir() -> Cow<'static, str> {
1918}
2019
2120pub fn clear_assets() {
22− clear_asset("themes.bin", "theme set cache");
23− clear_asset("syntaxes.bin", "syntax set cache");
24− clear_asset("metadata.yaml", "metadata file");
21+ let theme_set_path = PROJECT_DIRS.cache_dir().join("themes.bin");
22+ let syntax_set_path = PROJECT_DIRS.cache_dir().join("syntaxes.bin");
23+ let metadata_file = PROJECT_DIRS.cache_dir().join("metadata.yaml");
24+
25+ print!("Clearing theme set cache ... ");
26+ fs::remove_file(theme_set_path).ok();
27+ println!("okay");
28+
29+ print!("Clearing syntax set cache ... ");
30+ fs::remove_file(syntax_set_path).ok();
31+ println!("okay");
32+
33+ print!("Clearing metadata file ... ");
34+ fs::remove_file(metadata_file).ok();
35+ println!("okay");
2536}
2637
27−pub fn assets_from_cache_or_binary(use_custom_assets: bool) -> Result<HighlightingAssets> {
38+pub fn assets_from_cache_or_binary() -> Result<HighlightingAssets> {
2839 let cache_dir = PROJECT_DIRS.cache_dir();
29− if let Some(metadata) = AssetsMetadata::load_from_folder(cache_dir)? {
40+ if let Some(metadata) = AssetsMetadata::load_from_folder(&cache_dir)? {
3041 if !metadata.is_compatible_with(crate_version!()) {
3142 return Err(format!(
3243 "The binary caches for the user-customized syntaxes and themes \
@@ -42,24 +53,6 @@ pub fn assets_from_cache_or_binary(use_custom_assets: bool) -> Result<Highlighti
4253 }
4354 }
4455
45− let custom_assets = if use_custom_assets {
46− HighlightingAssets::from_cache(cache_dir).ok()
47− } else {
48− None
49− };
50− Ok(custom_assets.unwrap_or_else(HighlightingAssets::from_binary))
51−}
52−
53−fn clear_asset(filename: &str, description: &str) {
54− print!("Clearing {} ... ", description);
55− let path = PROJECT_DIRS.cache_dir().join(filename);
56− match fs::remove_file(&path) {
57− Err(err) if err.kind() == io::ErrorKind::NotFound => {
58− println!("skipped (not present)");
59− }
60− Err(err) => {
61− println!("could not remove the cache file {:?}: {}", &path, err);
62− }
63− Ok(_) => println!("okay"),
64− }
56+ Ok(HighlightingAssets::from_cache(&cache_dir)
57+ .unwrap_or_else(|_| HighlightingAssets::from_binary()))
6558}
src/bin/bat/clap_app.rs+27−128
@@ -1,21 +1,7 @@
11use clap::{crate_name, crate_version, App as ClapApp, AppSettings, Arg, ArgGroup, SubCommand};
2−use once_cell::sync::Lazy;
32use std::env;
43use std::path::Path;
54
6−static VERSION: Lazy<String> = Lazy::new(|| {
7− #[cfg(feature = "bugreport")]
8− let git_version = bugreport::git_version!(fallback = "");
9− #[cfg(not(feature = "bugreport"))]
10− let git_version = "";
11−
12− if git_version.is_empty() {
13− crate_version!().to_string()
14− } else {
15− format!("{} ({})", crate_version!(), git_version)
16− }
17−});
18−
195pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
206 let clap_color_setting = if interactive_output && env::var_os("NO_COLOR").is_none() {
217 AppSettings::ColoredHelp
@@ -24,7 +10,7 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
2410 };
2511
2612 let mut app = ClapApp::new(crate_name!())
27− .version(VERSION.as_str())
13+ .version(crate_version!())
2814 .global_setting(clap_color_setting)
2915 .global_setting(AppSettings::DeriveDisplayOrder)
3016 .global_setting(AppSettings::UnifiedHelpMessage)
@@ -38,10 +24,6 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
3824 "A cat(1) clone with wings.\n\n\
3925 Use '--help' instead of '-h' to see a more detailed version of the help text.",
4026 )
41− .after_help(
42− "Note: `bat -h` prints a short and concise overview while `bat --help` gives all \
43− details.",
44− )
4527 .long_about("A cat(1) clone with syntax highlighting and Git integration.")
4628 .arg(
4729 Arg::with_name("FILE")
@@ -109,8 +91,7 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
10991 '--highlight-line 40' highlights line 40\n \
11092 '--highlight-line 30:40' highlights lines 30 to 40\n \
11193 '--highlight-line :40' highlights lines 1 to 40\n \
112− '--highlight-line 40:' highlights lines 40 to the end of the file\n \
113− '--highlight-line 30:+10' highlights lines 30 to 40",
94+ '--highlight-line 40:' highlights lines 40 to the end of the file",
11495 ),
11596 )
11697 .arg(
@@ -123,9 +104,8 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
123104 .help("Specify the name to display for a file.")
124105 .long_help(
125106 "Specify the name to display for a file. Useful when piping \
126− data to bat from STDIN when bat does not otherwise know \
127− the filename. Note that the provided file name is also \
128− used for syntax detection.",
107+ data to bat from STDIN when bat does not otherwise know \
108+ the filename.",
129109 ),
130110 );
131111
@@ -245,8 +225,7 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
245225 .help("When to use colors (*auto*, never, always).")
246226 .long_help(
247227 "Specify when to use colored output. The automatic mode \
248− only enables colors if an interactive terminal is detected - \
249− colors are automatically disabled if the output goes to a pipe.\n\
228+ only enables colors if an interactive terminal is detected. \
250229 Possible values: *auto*, never, always.",
251230 ),
252231 )
@@ -277,18 +256,6 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
277256 an interactive terminal is detected. Possible values: *auto*, never, always.",
278257 ),
279258 )
280− .arg(
281− Arg::with_name("force-colorization")
282− .long("force-colorization")
283− .short("f")
284− .conflicts_with("color")
285− .conflicts_with("decorations")
286− .overrides_with("force-colorization")
287− .hidden_short_help(true)
288− .long_help("Alias for '--decorations=always --color=always'. This is useful \
289− if the output of bat is piped to another program, but you want \
290− to keep the colorization/decorations.")
291− )
292259 .arg(
293260 Arg::with_name("paging")
294261 .long("paging")
@@ -298,24 +265,16 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
298265 .possible_values(&["auto", "never", "always"])
299266 .default_value("auto")
300267 .hide_default_value(true)
301− .help("Specify when to use the pager, or use `-P` to disable (*auto*, never, always).")
268+ .help("Specify when to use the pager (*auto*, never, always).")
302269 .long_help(
303− "Specify when to use the pager. To disable the pager, use \
304− --paging=never' or its alias,'-P'. To disable the pager permanently, \
305− set BAT_PAGER to an empty string. To control which pager is used, see the \
306− '--pager' option. Possible values: *auto*, never, always."
270+ "Specify when to use the pager. To control which pager \
271+ is used, set the PAGER or BAT_PAGER environment \
272+ variables (the latter takes precedence) or use the '--pager' option. \
273+ To disable the pager permanently, set BAT_PAGER to an empty string \
274+ or set '--paging=never' in the configuration file. \
275+ Possible values: *auto*, never, always.",
307276 ),
308277 )
309− .arg(
310− Arg::with_name("no-paging")
311− .short("P")
312− .long("no-paging")
313− .alias("no-pager")
314− .overrides_with("no-paging")
315− .hidden(true)
316− .hidden_short_help(true)
317− .help("Alias for '--paging=never'")
318− )
319278 .arg(
320279 Arg::with_name("pager")
321280 .long("pager")
@@ -325,10 +284,11 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
325284 .hidden_short_help(true)
326285 .help("Determine which pager to use.")
327286 .long_help(
328− "Determine which pager is used. This option will override the \
329− PAGER and BAT_PAGER environment variables. The default pager is 'less'. \
330− To control when the pager is used, see the '--paging' option. \
331− Example: '--pager \"less -RF\"'."
287+ "Determine which pager is used. This option will overwrite \
288+ the PAGER and BAT_PAGER environment variables. The default \
289+ pager is 'less'. To disable the pager completely, use the \
290+ '--paging' option. \
291+ Example: '--pager \"less -RF\"'.",
332292 ),
333293 )
334294 .arg(
@@ -344,23 +304,10 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
344304 "Map a glob pattern to an existing syntax name. The glob pattern is matched \
345305 on the full path and the filename. For example, to highlight *.build files \
346306 with the Python syntax, use -m '*.build:Python'. To highlight files named \
347− '.myignore' with the Git Ignore syntax, use -m '.myignore:Git Ignore'. Note \
348− that the right-hand side is the *name* of the syntax, not a file extension.",
307+ '.myignore' with the Git Ignore syntax, use -m '.myignore:Git Ignore'.",
349308 )
350309 .takes_value(true),
351310 )
352− .arg(
353− Arg::with_name("ignored-suffix")
354− .number_of_values(1)
355− .multiple(true)
356− .takes_value(true)
357− .long("ignored-suffix")
358− .hidden_short_help(true)
359− .help(
360− "Ignore extension. For example:\n \
361− 'bat --ignored-suffix \".dev\" my_file.json.dev' will use JSON syntax, and ignore '.dev'"
362− )
363− )
364311 .arg(
365312 Arg::with_name("theme")
366313 .long("theme")
@@ -392,24 +339,15 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
392339 .overrides_with("style")
393340 .overrides_with("plain")
394341 .overrides_with("number")
395− // Cannot use claps built in validation because we have to turn off clap's delimiters
342+ // Cannot use clap's built in validation because we have to turn off clap's delimiters
396343 .validator(|val| {
397344 let mut invalid_vals = val.split(',').filter(|style| {
398345 !&[
399− "auto",
400− "full",
401− "default",
402− "plain",
403− "header",
404− "header-filename",
405− "header-filesize",
406− "grid",
407− "rule",
408− "numbers",
409− "snip",
346+ "auto", "full", "plain", "header", "grid", "numbers", "snip",
410347 #[cfg(feature = "git")]
411− "changes",
412− ].contains(style)
348+ "changes",
349+ ]
350+ .contains(style)
413351 });
414352
415353 if let Some(invalid) = invalid_vals.next() {
@@ -420,7 +358,7 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
420358 })
421359 .help(
422360 "Comma-separated list of style elements to display \
423− (*default*, auto, full, plain, changes, header, header-filename, header-filesize, grid, rule, numbers, snip).",
361+ (*auto*, full, plain, changes, header, grid, numbers, snip).",
424362 )
425363 .long_help(
426364 "Configure which elements (line numbers, file headers, grid \
@@ -429,21 +367,8 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
429367 components to display (e.g. 'numbers,changes,grid') or a \
430368 pre-defined style ('full'). To set a default style, add the \
431369 '--style=\"..\"' option to the configuration file or export the \
432− BAT_STYLE environment variable (e.g.: export BAT_STYLE=\"..\").\n\n\
433− Possible values:\n\n \
434− * default: enables recommended style components (default).\n \
435− * full: enables all available components.\n \
436− * auto: same as 'default', unless the output is piped.\n \
437− * plain: disables all available components.\n \
438− * changes: show Git modification markers.\n \
439− * header: alias for 'header-filename'.\n \
440− * header-filename: show filenames before the content.\n \
441− * header-filesize: show file sizes before the content.\n \
442− * grid: vertical/horizontal lines to separate side bar\n \
443− and the header from the content.\n \
444− * rule: horizontal lines to delimit files.\n \
445− * numbers: show line numbers in the side bar.\n \
446− * snip: draw separation lines between distinct line ranges.",
370+ BAT_STYLE environment variable (e.g.: export BAT_STYLE=\"..\"). \
371+ Possible values: *auto*, full, plain, changes, header, grid, numbers, snip.",
447372 ),
448373 )
449374 .arg(
@@ -462,8 +387,7 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
462387 '--line-range 30:40' prints lines 30 to 40\n \
463388 '--line-range :40' prints lines 1 to 40\n \
464389 '--line-range 40:' prints lines 40 to the end of the file\n \
465− '--line-range 40' only prints line 40\n \
466− '--line-range 30:+10' prints lines 30 to 40",
390+ '--line-range 40' only prints line 40",
467391 ),
468392 )
469393 .arg(
@@ -491,12 +415,6 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
491415 .hidden(true)
492416 .help("Do not use the configuration file"),
493417 )
494− .arg(
495− Arg::with_name("no-custom-assets")
496− .long("no-custom-assets")
497− .hidden(true)
498− .help("Do not load custom assets"),
499− )
500418 .arg(
501419 Arg::with_name("config-file")
502420 .long("config-file")
@@ -525,19 +443,6 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
525443 .hidden(true)
526444 .help("Show bat's cache directory."),
527445 )
528− .arg(
529− Arg::with_name("diagnostic")
530− .long("diagnostic")
531− .alias("diagnostics")
532− .hidden_short_help(true)
533− .help("Show diagnostic information for bug reports.")
534− )
535− .arg(
536− Arg::with_name("acknowledgements")
537− .long("acknowledgements")
538− .hidden_short_help(true)
539− .help("Show acknowledgements."),
540− )
541446 .help_message("Print this help message.")
542447 .version_message("Show version information.");
543448
@@ -596,12 +501,6 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
596501 "Create completely new syntax and theme sets \
597502 (instead of appending to the default sets).",
598503 ),
599− )
600− .arg(
601− Arg::with_name("acknowledgements")
602− .long("acknowledgements")
603− .requires("build")
604− .help("Build acknowledgements.bin."),
605504 ),
606505 )
607506 }
src/bin/bat/config.rs+9−14
@@ -10,12 +10,13 @@ pub fn config_file() -> PathBuf {
1010 env::var("BAT_CONFIG_PATH")
1111 .ok()
1212 .map(PathBuf::from)
13+ .filter(|config_path| config_path.is_file())
1314 .unwrap_or_else(|| PROJECT_DIRS.config_dir().join("config"))
1415}
1516
1617pub fn generate_config_file() -> bat::error::Result<()> {
1718 let config_file = config_file();
18− if config_file.is_file() {
19+ if config_file.exists() {
1920 println!(
2021 "A config file already exists at: {}",
2122 config_file.to_string_lossy()
@@ -43,7 +44,8 @@ pub fn generate_config_file() -> bat::error::Result<()> {
4344 }
4445 }
4546
46− let default_config = r#"# This is `bat`s configuration file. Each line either contains a comment or
47+ let default_config =
48+ r#"# This is `bat`s configuration file. Each line either contains a comment or
4749# a command-line option that you want to pass to `bat` by default. You can
4850# run `bat --help` to get a list of all possible configuration options.
4951
@@ -61,23 +63,16 @@ pub fn generate_config_file() -> bat::error::Result<()> {
6163# Uncomment the following line if you are using less version >= 551 and want to
6264# enable mouse scrolling support in `bat` when running inside tmux. This might
6365# disable text selection, unless you press shift.
64−#--pager="less --RAW-CONTROL-CHARS --quit-if-one-screen --mouse"
66+#--pager="--RAW-CONTROL-CHARS --quit-if-one-screen --mouse"
6567
6668# Syntax mappings: map a certain filename pattern to a language.
67−# Example 1: use the C++ syntax for Arduino .ino files
69+# Example 1: use the C++ syntax for .ino files
6870# Example 2: Use ".gitignore"-style highlighting for ".ignore" files
6971#--map-syntax "*.ino:C++"
7072#--map-syntax ".ignore:Git Ignore"
7173"#;
7274
73− fs::write(&config_file, default_config).map_err(|e| {
74− format!(
75− "Failed to create config file at '{}': {}",
76− config_file.to_string_lossy(),
77− e
78− )
79− })?;
80−
75+ fs::write(&config_file, default_config)?;
8176 println!(
8277 "Success! Config file written to {}",
8378 config_file.to_string_lossy()
@@ -91,7 +86,7 @@ pub fn get_args_from_config_file() -> Result<Vec<OsString>, shell_words::ParseEr
9186 .ok()
9287 .map(|content| get_args_from_str(&content))
9388 .transpose()?
94− .unwrap_or_default())
89+ .unwrap_or_else(|| vec![]))
9590}
9691
9792pub fn get_args_from_env_var() -> Option<Result<Vec<OsString>, shell_words::ParseError>> {
@@ -104,7 +99,7 @@ fn get_args_from_str(content: &str) -> Result<Vec<OsString>, shell_words::ParseE
10499 .map(|line| line.trim())
105100 .filter(|line| !line.is_empty())
106101 .filter(|line| !line.starts_with('#'))
107− .map(shell_words::split)
102+ .map(|line| shell_words::split(line))
108103 .collect::<Result<Vec<_>, _>>()?;
109104
110105 Ok(args_per_line
src/bin/bat/directories.rs+17−23
@@ -1,12 +1,11 @@
11use std::env;
22use std::path::{Path, PathBuf};
33
4−use once_cell::sync::Lazy;
4+use lazy_static::lazy_static;
55
66/// Wrapper for 'dirs' that treats MacOS more like Linux, by following the XDG specification.
7−/// The `XDG_CACHE_HOME` environment variable is checked first. `BAT_CONFIG_DIR`
8−/// is then checked before the `XDG_CONFIG_HOME` environment variable.
9−/// The fallback directories are `~/.cache/bat` and `~/.config/bat`, respectively.
7+/// This means that the `XDG_CACHE_HOME` and `XDG_CONFIG_HOME` environment variables are
8+/// checked first. The fallback directories are `~/.cache/bat` and `~/.config/bat`, respectively.
109pub struct BatProjectDirs {
1110 cache_dir: PathBuf,
1211 config_dir: PathBuf,
@@ -16,23 +15,16 @@ impl BatProjectDirs {
1615 fn new() -> Option<BatProjectDirs> {
1716 let cache_dir = BatProjectDirs::get_cache_dir()?;
1817
19− // Checks whether or not $BAT_CONFIG_DIR exists. If it doesn't, set our config dir
20− // to our system's default configuration home.
21− let config_dir =
22− if let Some(config_dir_op) = env::var_os("BAT_CONFIG_DIR").map(PathBuf::from) {
23− config_dir_op
24− } else {
25− #[cfg(target_os = "macos")]
26− let config_dir_op = env::var_os("XDG_CONFIG_HOME")
27− .map(PathBuf::from)
28− .filter(|p| p.is_absolute())
29− .or_else(|| dirs_next::home_dir().map(|d| d.join(".config")));
18+ #[cfg(target_os = "macos")]
19+ let config_dir_op = env::var_os("XDG_CONFIG_HOME")
20+ .map(PathBuf::from)
21+ .filter(|p| p.is_absolute())
22+ .or_else(|| dirs::home_dir().map(|d| d.join(".config")));
3023
31− #[cfg(not(target_os = "macos"))]
32− let config_dir_op = dirs_next::config_dir();
24+ #[cfg(not(target_os = "macos"))]
25+ let config_dir_op = dirs::config_dir();
3326
34− config_dir_op.map(|d| d.join("bat"))?
35− };
27+ let config_dir = config_dir_op.map(|d| d.join("bat"))?;
3628
3729 Some(BatProjectDirs {
3830 cache_dir,
@@ -51,10 +43,10 @@ impl BatProjectDirs {
5143 let cache_dir_op = env::var_os("XDG_CACHE_HOME")
5244 .map(PathBuf::from)
5345 .filter(|p| p.is_absolute())
54− .or_else(|| dirs_next::home_dir().map(|d| d.join(".cache")));
46+ .or_else(|| dirs::home_dir().map(|d| d.join(".cache")));
5547
5648 #[cfg(not(target_os = "macos"))]
57− let cache_dir_op = dirs_next::cache_dir();
49+ let cache_dir_op = dirs::cache_dir();
5850
5951 cache_dir_op.map(|d| d.join("bat"))
6052 }
@@ -68,5 +60,7 @@ impl BatProjectDirs {
6860 }
6961}
7062
71−pub static PROJECT_DIRS: Lazy<BatProjectDirs> =
72− Lazy::new(|| BatProjectDirs::new().expect("Could not get home directory"));
63+lazy_static! {
64+ pub static ref PROJECT_DIRS: BatProjectDirs =
65+ BatProjectDirs::new().expect("Could not get home directory");
66+}
src/bin/bat/input.rs+5−5
@@ -1,15 +1,15 @@
11use bat::input::Input;
2−use std::path::Path;
2+use std::ffi::OsStr;
33
4−pub fn new_file_input<'a>(file: &'a Path, name: Option<&'a Path>) -> Input<'a> {
5− named(Input::ordinary_file(file), name.or(Some(file)))
4+pub fn new_file_input<'a>(file: &'a OsStr, name: Option<&'a OsStr>) -> Input<'a> {
5+ named(Input::ordinary_file(file), name.or_else(|| Some(file)))
66}
77
8−pub fn new_stdin_input(name: Option<&Path>) -> Input {
8+pub fn new_stdin_input(name: Option<&OsStr>) -> Input {
99 named(Input::stdin(), name)
1010}
1111
12−fn named<'a>(input: Input<'a>, name: Option<&Path>) -> Input<'a> {
12+fn named<'a>(input: Input<'a>, name: Option<&OsStr>) -> Input<'a> {
1313 if let Some(provided_name) = name {
1414 let mut input = input.with_name(Some(provided_name));
1515 input.description_mut().set_kind(Some("File".to_owned()));
src/bin/bat/main.rs+45−148
@@ -1,4 +1,5 @@
1−#![deny(unsafe_code)]
1+// `error_chain!` can recurse deeply
2+#![recursion_limit = "1024"]
23
34mod app;
45mod assets;
@@ -8,6 +9,7 @@ mod directories;
89mod input;
910
1011use std::collections::{HashMap, HashSet};
12+use std::ffi::OsStr;
1113use std::io;
1214use std::io::{BufReader, Write};
1315use std::path::Path;
@@ -22,46 +24,37 @@ use crate::{
2224};
2325
2426use assets::{assets_from_cache_or_binary, cache_dir, clear_assets, config_dir};
27+use clap::crate_version;
2528use directories::PROJECT_DIRS;
2629use globset::GlobMatcher;
2730
2831use bat::{
32+ assets::HighlightingAssets,
2933 config::Config,
3034 controller::Controller,
3135 error::*,
3236 input::Input,
3337 style::{StyleComponent, StyleComponents},
34− MappingTarget, PagingMode,
38+ MappingTarget,
3539};
3640
3741const THEME_PREVIEW_DATA: &[u8] = include_bytes!("../../../assets/theme_preview.rs");
3842
39−#[cfg(feature = "build-assets")]
40−fn build_assets(matches: &clap::ArgMatches) -> Result<()> {
41− let source_dir = matches
42− .value_of("source")
43− .map(Path::new)
44− .unwrap_or_else(|| PROJECT_DIRS.config_dir());
45− let target_dir = matches
46− .value_of("target")
47− .map(Path::new)
48− .unwrap_or_else(|| PROJECT_DIRS.cache_dir());
49−
50− bat::assets::build(
51− source_dir,
52− !matches.is_present("blank"),
53− matches.is_present("acknowledgements"),
54− target_dir,
55− clap::crate_version!(),
56− )
57−}
58−
5943fn run_cache_subcommand(matches: &clap::ArgMatches) -> Result<()> {
6044 if matches.is_present("build") {
61− #[cfg(feature = "build-assets")]
62− build_assets(matches)?;
63− #[cfg(not(feature = "build-assets"))]
64− println!("bat has been built without the 'build-assets' feature. The 'cache --build' option is not available.");
45+ let source_dir = matches
46+ .value_of("source")
47+ .map(Path::new)
48+ .unwrap_or_else(|| PROJECT_DIRS.config_dir());
49+ let target_dir = matches
50+ .value_of("target")
51+ .map(Path::new)
52+ .unwrap_or_else(|| PROJECT_DIRS.cache_dir());
53+
54+ let blank = matches.is_present("blank");
55+
56+ let assets = HighlightingAssets::from_files(source_dir, !blank)?;
57+ assets.save_to_cache(target_dir, crate_version!())?;
6558 } else if matches.is_present("clear") {
6659 clear_assets();
6760 }
@@ -74,58 +67,42 @@ fn get_syntax_mapping_to_paths<'a>(
7467) -> HashMap<&'a str, Vec<String>> {
7568 let mut map = HashMap::new();
7669 for mapping in mappings {
77− if let (matcher, MappingTarget::MapTo(s)) = mapping {
78− let globs = map.entry(*s).or_insert_with(Vec::new);
79− globs.push(matcher.glob().glob().into());
70+ match mapping {
71+ (_, MappingTarget::MapToUnknown) => {}
72+ (matcher, MappingTarget::MapTo(s)) => {
73+ let globs = map.entry(*s).or_insert_with(Vec::new);
74+ globs.push(matcher.glob().glob().into());
75+ }
8076 }
8177 }
8278 map
8379}
8480
85−pub fn get_languages(config: &Config) -> Result<String> {
86− let mut result: String = String::new();
87−
88− let assets = assets_from_cache_or_binary(config.use_custom_assets)?;
81+pub fn list_languages(config: &Config) -> Result<()> {
82+ let assets = assets_from_cache_or_binary()?;
8983 let mut languages = assets
90− .get_syntaxes()?
84+ .syntaxes()
9185 .iter()
9286 .filter(|syntax| !syntax.hidden && !syntax.file_extensions.is_empty())
9387 .cloned()
9488 .collect::<Vec<_>>();
95−
96− // Handling of file-extension conflicts, see issue #1076
97− for lang in &mut languages {
98− let lang_name = lang.name.clone();
99− lang.file_extensions.retain(|extension| {
100− // The 'extension' variable is not certainly a real extension.
101− //
102− // Skip if 'extension' starts with '.', likely a hidden file like '.vimrc'
103− // Also skip if the 'extension' contains another real extension, likely
104− // that is a full match file name like 'CMakeLists.txt' and 'Cargo.lock'
105− if extension.starts_with('.') || Path::new(extension).extension().is_some() {
106− return true;
107− }
108−
109− let test_file = Path::new("test").with_extension(extension);
110− let syntax_in_set = assets.get_syntax_for_path(test_file, &config.syntax_mapping);
111− matches!(syntax_in_set, Ok(syntax_in_set) if syntax_in_set.syntax.name == lang_name)
112− });
113− }
114−
11589 languages.sort_by_key(|lang| lang.name.to_uppercase());
11690
11791 let configured_languages = get_syntax_mapping_to_paths(config.syntax_mapping.mappings());
11892
119− for lang in &mut languages {
93+ for lang in languages.iter_mut() {
12094 if let Some(additional_paths) = configured_languages.get(lang.name.as_str()) {
12195 lang.file_extensions
12296 .extend(additional_paths.iter().cloned());
12397 }
12498 }
12599
100+ let stdout = io::stdout();
101+ let mut stdout = stdout.lock();
102+
126103 if config.loop_through {
127104 for lang in languages {
128− result += &format!("{}:{}\n", lang.name, lang.file_extensions.join(","));
105+ writeln!(stdout, "{}:{}", lang.name, lang.file_extensions.join(","))?;
129106 }
130107 } else {
131108 let longest = languages
@@ -146,7 +123,7 @@ pub fn get_languages(config: &Config) -> Result<String> {
146123 };
147124
148125 for lang in languages {
149− result += &format!("{:width$}{}", lang.name, separator, width = longest);
126+ write!(stdout, "{:width$}{}", lang.name, separator, width = longest)?;
150127
151128 // Number of characters on this line so far, wrap before `desired_width`
152129 let mut num_chars = 0;
@@ -157,20 +134,20 @@ pub fn get_languages(config: &Config) -> Result<String> {
157134 let new_chars = word.len() + comma_separator.len();
158135 if num_chars + new_chars >= desired_width {
159136 num_chars = 0;
160− result += &format!("\n{:width$}{}", "", separator, width = longest);
137+ write!(stdout, "\n{:width$}{}", "", separator, width = longest)?;
161138 }
162139
163140 num_chars += new_chars;
164− result += &format!("{}", style.paint(&word[..]));
141+ write!(stdout, "{}", style.paint(&word[..]))?;
165142 if extension.peek().is_some() {
166− result += comma_separator;
143+ write!(stdout, "{}", comma_separator)?;
167144 }
168145 }
169− result += "\n";
146+ writeln!(stdout)?;
170147 }
171148 }
172149
173− Ok(result)
150+ Ok(())
174151}
175152
176153fn theme_preview_file<'a>() -> Input<'a> {
@@ -178,7 +155,7 @@ fn theme_preview_file<'a>() -> Input<'a> {
178155}
179156
180157pub fn list_themes(cfg: &Config) -> Result<()> {
181− let assets = assets_from_cache_or_binary(cfg.use_custom_assets)?;
158+ let assets = assets_from_cache_or_binary()?;
182159 let mut config = cfg.clone();
183160 let mut style = HashSet::new();
184161 style.insert(StyleComponent::Plain);
@@ -201,14 +178,6 @@ pub fn list_themes(cfg: &Config) -> Result<()> {
201178 .ok();
202179 writeln!(stdout)?;
203180 }
204− writeln!(
205− stdout,
206− "Further themes can be installed to '{}', \
207− and are added to the cache with `bat cache --build`. \
208− For more information, see:\n\n \
209− https://github.com/sharkdp/bat#adding-new-themes",
210− PROJECT_DIRS.config_dir().join("themes").to_string_lossy()
211− )?;
212181 } else {
213182 for theme in assets.themes() {
214183 writeln!(stdout, "{}", theme)?;
@@ -219,79 +188,16 @@ pub fn list_themes(cfg: &Config) -> Result<()> {
219188}
220189
221190fn run_controller(inputs: Vec<Input>, config: &Config) -> Result<bool> {
222− let assets = assets_from_cache_or_binary(config.use_custom_assets)?;
223− let controller = Controller::new(config, &assets);
191+ let assets = assets_from_cache_or_binary()?;
192+ let controller = Controller::new(&config, &assets);
224193 controller.run(inputs)
225194}
226195
227−#[cfg(feature = "bugreport")]
228−fn invoke_bugreport(app: &App) {
229− use bugreport::{bugreport, collector::*, format::Markdown};
230− let pager = bat::config::get_pager_executable(app.matches.value_of("pager"))
231− .unwrap_or_else(|| "less".to_owned()); // FIXME: Avoid non-canonical path to "less".
232−
233− let mut custom_assets_metadata = PROJECT_DIRS.cache_dir().to_path_buf();
234− custom_assets_metadata.push("metadata.yaml");
235−
236− let mut report = bugreport!()
237− .info(SoftwareVersion::default())
238− .info(OperatingSystem::default())
239− .info(CommandLine::default())
240− .info(EnvironmentVariables::list(&[
241− "SHELL",
242− "PAGER",
243− "LESS",
244− "LANG",
245− "LC_ALL",
246− "BAT_PAGER",
247− "BAT_CACHE_PATH",
248− "BAT_CONFIG_PATH",
249− "BAT_OPTS",
250− "BAT_STYLE",
251− "BAT_TABS",
252− "BAT_THEME",
253− "XDG_CONFIG_HOME",
254− "XDG_CACHE_HOME",
255− "COLORTERM",
256− "NO_COLOR",
257− "MANPAGER",
258− ]))
259− .info(FileContent::new("Config file", config_file()))
260− .info(FileContent::new(
261− "Custom assets metadata",
262− custom_assets_metadata,
263− ))
264− .info(DirectoryEntries::new(
265− "Custom assets",
266− PROJECT_DIRS.cache_dir(),
267− ))
268− .info(CompileTimeInformation::default());
269−
270− #[cfg(feature = "paging")]
271− if let Ok(resolved_path) = grep_cli::resolve_binary(pager) {
272− report = report.info(CommandOutput::new(
273− "Less version",
274− resolved_path,
275− &["--version"],
276− ))
277− };
278−
279− report.print::<Markdown>();
280−}
281−
282196/// Returns `Err(..)` upon fatal errors. Otherwise, returns `Ok(true)` on full success and
283197/// `Ok(false)` if any intermediate errors occurred (were printed).
284198fn run() -> Result<bool> {
285199 let app = App::new()?;
286200
287− if app.matches.is_present("diagnostic") {
288− #[cfg(feature = "bugreport")]
289− invoke_bugreport(&app);
290− #[cfg(not(feature = "bugreport"))]
291− println!("bat has been built without the 'bugreport' feature. The '--diagnostic' option is not available.");
292− return Ok(true);
293− }
294−
295201 match app.matches.subcommand() {
296202 ("cache", Some(cache_matches)) => {
297203 // If there is a file named 'cache' in the current working directory,
@@ -301,7 +207,7 @@ fn run() -> Result<bool> {
301207 run_cache_subcommand(cache_matches)?;
302208 Ok(true)
303209 } else {
304− let inputs = vec![Input::ordinary_file("cache")];
210+ let inputs = vec![Input::ordinary_file(OsStr::new("cache"))];
305211 let config = app.config(&inputs)?;
306212
307213 run_controller(inputs, &config)
@@ -312,14 +218,8 @@ fn run() -> Result<bool> {
312218 let config = app.config(&inputs)?;
313219
314220 if app.matches.is_present("list-languages") {
315− let languages: String = get_languages(&config)?;
316− let inputs: Vec<Input> = vec![Input::from_reader(Box::new(languages.as_bytes()))];
317− let plain_config = Config {
318− style_components: StyleComponents::new(StyleComponent::Plain.components(false)),
319− paging_mode: PagingMode::QuitIfOneScreen,
320− ..Default::default()
321− };
322− run_controller(inputs, &plain_config)
221+ list_languages(&config)?;
222+ Ok(true)
323223 } else if app.matches.is_present("list-themes") {
324224 list_themes(&config)?;
325225 Ok(true)
@@ -335,9 +235,6 @@ fn run() -> Result<bool> {
335235 } else if app.matches.is_present("cache-dir") {
336236 writeln!(io::stdout(), "{}", cache_dir())?;
337237 Ok(true)
338− } else if app.matches.is_present("acknowledgements") {
339− writeln!(io::stdout(), "{}", bat::assets::get_acknowledgements())?;
340− Ok(true)
341238 } else {
342239 run_controller(inputs, &config)
343240 }
src/config.rs−12
@@ -82,18 +82,6 @@ pub struct Config<'a> {
8282
8383 /// Ranges of lines which should be highlighted with a special background color
8484 pub highlighted_lines: HighlightedLineRanges,
85−
86− /// Whether or not to allow custom assets. If this is false or if custom assets (a.k.a.
87− /// cached assets) are not available, assets from the binary will be used instead.
88− pub use_custom_assets: bool,
89−}
90−
91−#[cfg(all(feature = "minimal-application", feature = "paging"))]
92−pub fn get_pager_executable(config_pager: Option<&str>) -> Option<String> {
93− crate::pager::get_pager(config_pager)
94− .ok()
95− .flatten()
96− .map(|pager| pager.bin)
9785}
9886
9987#[test]
src/controller.rs+76−96
@@ -1,4 +1,4 @@
1−use std::io::{self, BufRead, Write};
1+use std::io::{self, Write};
22
33use crate::assets::HighlightingAssets;
44use crate::config::{Config, VisibleLines};
@@ -14,8 +14,6 @@ use crate::output::OutputType;
1414use crate::paging::PagingMode;
1515use crate::printer::{InteractivePrinter, Printer, SimplePrinter};
1616
17−use clircle::{Clircle, Identifier};
18−
1917pub struct Controller<'a> {
2018 config: &'a Config<'a>,
2119 assets: &'a HighlightingAssets,
@@ -45,7 +43,7 @@ impl<'b> Controller<'b> {
4543 // Do not launch the pager if NONE of the input files exist
4644 let mut paging_mode = self.config.paging_mode;
4745 if self.config.paging_mode != PagingMode::Never {
48− let call_pager = inputs.iter().any(|input| {
46+ let call_pager = inputs.iter().any(|ref input| {
4947 if let InputKind::OrdinaryFile(ref path) = input.kind {
5048 Path::new(path).exists()
5149 } else {
@@ -56,10 +54,7 @@ impl<'b> Controller<'b> {
5654 paging_mode = PagingMode::Never;
5755 }
5856 }
59−
60− let wrapping_mode = self.config.wrapping_mode;
61−
62− output_type = OutputType::from_mode(paging_mode, wrapping_mode, self.config.pager)?;
57+ output_type = OutputType::from_mode(paging_mode, self.config.pager)?;
6358 }
6459
6560 #[cfg(not(feature = "paging"))]
@@ -68,100 +63,88 @@ impl<'b> Controller<'b> {
6863 }
6964
7065 let attached_to_pager = output_type.is_pager();
71− let stdout_identifier = if cfg!(windows) || attached_to_pager {
72− None
73− } else {
74− clircle::Identifier::stdout()
75− };
76−
7766 let writer = output_type.handle()?;
7867 let mut no_errors: bool = true;
79− let stderr = io::stderr();
8068
81− for (index, input) in inputs.into_iter().enumerate() {
82− let identifier = stdout_identifier.as_ref();
83− let is_first = index == 0;
84− let result = if input.is_stdin() {
85− self.print_input(input, writer, io::stdin().lock(), identifier, is_first)
69+ let stderr = io::stderr();
70+ let print_error = |error: &Error, write: &mut dyn Write| {
71+ if attached_to_pager {
72+ handle_error(error, write);
8673 } else {
87− // Use dummy stdin since stdin is actually not used (#1902)
88− self.print_input(input, writer, io::empty(), identifier, is_first)
89− };
90− if let Err(error) = result {
91− if attached_to_pager {
92− handle_error(&error, writer);
93− } else {
94− handle_error(&error, &mut stderr.lock());
95− }
96− no_errors = false;
74+ handle_error(error, &mut stderr.lock());
9775 }
98− }
99−
100− Ok(no_errors)
101− }
76+ };
10277
103− fn print_input<R: BufRead>(
104− &self,
105− input: Input,
106− writer: &mut dyn Write,
107− stdin: R,
108− stdout_identifier: Option<&Identifier>,
109− is_first: bool,
110− ) -> Result<()> {
111− let mut opened_input = input.open(stdin, stdout_identifier)?;
112− #[cfg(feature = "git")]
113− let line_changes = if self.config.visible_lines.diff_mode()
114− || (!self.config.loop_through && self.config.style_components.changes())
115− {
116− match opened_input.kind {
117− crate::input::OpenedInputKind::OrdinaryFile(ref path) => {
118− let diff = get_git_diff(path);
119−
120− // Skip files without Git modifications
121− if self.config.visible_lines.diff_mode()
122− && diff
123− .as_ref()
124− .map(|changes| changes.is_empty())
125− .unwrap_or(false)
78+ for (index, input) in inputs.into_iter().enumerate() {
79+ match input.open(io::stdin().lock()) {
80+ Err(error) => {
81+ print_error(&error, writer);
82+ no_errors = false;
83+ }
84+ Ok(mut opened_input) => {
85+ #[cfg(feature = "git")]
86+ let line_changes = if self.config.visible_lines.diff_mode()
87+ || (!self.config.loop_through && self.config.style_components.changes())
12688 {
127− return Ok(());
128− }
89+ match opened_input.kind {
90+ crate::input::OpenedInputKind::OrdinaryFile(ref path) => {
91+ let diff = get_git_diff(path);
92+
93+ // Skip files without Git modifications
94+ if self.config.visible_lines.diff_mode()
95+ && diff
96+ .as_ref()
97+ .map(|changes| changes.is_empty())
98+ .unwrap_or(false)
99+ {
100+ continue;
101+ }
102+
103+ diff
104+ }
105+ _ if self.config.visible_lines.diff_mode() => {
106+ // Skip non-file inputs in diff mode
107+ continue;
108+ }
109+ _ => None,
110+ }
111+ } else {
112+ None
113+ };
129114
130− diff
131− }
132− _ if self.config.visible_lines.diff_mode() => {
133− // Skip non-file inputs in diff mode
134− return Ok(());
115+ let mut printer: Box<dyn Printer> = if self.config.loop_through {
116+ Box::new(SimplePrinter::new())
117+ } else {
118+ Box::new(InteractivePrinter::new(
119+ &self.config,
120+ &self.assets,
121+ &mut opened_input,
122+ #[cfg(feature = "git")]
123+ &line_changes,
124+ )?)
125+ };
126+
127+ let result = self.print_file(
128+ &mut *printer,
129+ writer,
130+ &mut opened_input,
131+ index != 0,
132+ #[cfg(feature = "git")]
133+ &line_changes,
134+ );
135+
136+ if let Err(error) = result {
137+ print_error(&error, writer);
138+ no_errors = false;
139+ }
135140 }
136− _ => None,
137141 }
138− } else {
139− None
140− };
141−
142− let mut printer: Box<dyn Printer> = if self.config.loop_through {
143− Box::new(SimplePrinter::new(self.config))
144− } else {
145− Box::new(InteractivePrinter::new(
146− self.config,
147− self.assets,
148− &mut opened_input,
149− #[cfg(feature = "git")]
150− &line_changes,
151− )?)
152− };
142+ }
153143
154− self.print_file(
155− &mut *printer,
156− writer,
157− &mut opened_input,
158− !is_first,
159− #[cfg(feature = "git")]
160− &line_changes,
161− )
144+ Ok(no_errors)
162145 }
163146
164− fn print_file(
147+ fn print_file<'a>(
165148 &self,
166149 printer: &mut dyn Printer,
167150 writer: &mut dyn Write,
@@ -181,10 +164,9 @@ impl<'b> Controller<'b> {
181164 let mut line_ranges: Vec<LineRange> = vec![];
182165
183166 if let Some(line_changes) = line_changes {
184− for &line in line_changes.keys() {
185− let line = line as usize;
186− line_ranges
187− .push(LineRange::new(line.saturating_sub(context), line + context));
167+ for line in line_changes.keys() {
168+ let line = *line as usize;
169+ line_ranges.push(LineRange::new(line - context, line + context));
188170 }
189171 }
190172
@@ -212,8 +194,6 @@ impl<'b> Controller<'b> {
212194 let mut first_range: bool = true;
213195 let mut mid_range: bool = false;
214196
215− let style_snip = self.config.style_components.snip();
216−
217197 while reader.read_line(&mut line_buffer)? {
218198 match line_ranges.check(line_number) {
219199 RangeCheckResult::BeforeOrBetweenRanges => {
@@ -224,7 +204,7 @@ impl<'b> Controller<'b> {
224204 }
225205
226206 RangeCheckResult::InRange => {
227− if style_snip {
207+ if self.config.style_components.snip() {
228208 if first_range {
229209 first_range = false;
230210 mid_range = true;
src/diff.rs+2−1
@@ -1,6 +1,7 @@
11#![cfg(feature = "git")]
22
33use std::collections::HashMap;
4+use std::ffi::OsStr;
45use std::fs;
56use std::path::Path;
67
@@ -16,7 +17,7 @@ pub enum LineChange {
1617
1718pub type LineChanges = HashMap<u32, LineChange>;
1819
19−pub fn get_git_diff(filename: &Path) -> Option<LineChanges> {
20+pub fn get_git_diff(filename: &OsStr) -> Option<LineChanges> {
2021 let repo = Repository::discover(&filename).ok()?;
2122
2223 let repo_path_absolute = fs::canonicalize(repo.workdir()?).ok()?;
src/error.rs+22−39
@@ -1,55 +1,38 @@
1+use error_chain::error_chain;
12use std::io::Write;
2−use thiserror::Error;
33
4−#[derive(Error, Debug)]
5−#[non_exhaustive]
6−pub enum Error {
7− #[error(transparent)]
8− Io(#[from] ::std::io::Error),
9− #[error(transparent)]
10− SyntectError(#[from] ::syntect::Error),
11− #[error(transparent)]
12− SyntectLoadingError(#[from] ::syntect::LoadingError),
13− #[error(transparent)]
14− ParseIntError(#[from] ::std::num::ParseIntError),
15− #[error(transparent)]
16− GlobParsingError(#[from] ::globset::Error),
17− #[error(transparent)]
18− SerdeYamlError(#[from] ::serde_yaml::Error),
19− #[error("unable to detect syntax for {0}")]
20− UndetectedSyntax(String),
21− #[error("unknown syntax: '{0}'")]
22− UnknownSyntax(String),
23− #[error("Unknown style '{0}'")]
24− UnknownStyle(String),
25− #[error("Use of bat as a pager is disallowed in order to avoid infinite recursion problems")]
26− InvalidPagerValueBat,
27− #[error("{0}")]
28− Msg(String),
29−}
30−
31−impl From<&'static str> for Error {
32− fn from(s: &'static str) -> Self {
33− Error::Msg(s.to_owned())
4+error_chain! {
5+ foreign_links {
6+ Clap(::clap::Error) #[cfg(feature = "application")];
7+ Io(::std::io::Error);
8+ SyntectError(::syntect::LoadingError);
9+ ParseIntError(::std::num::ParseIntError);
10+ GlobParsingError(::globset::Error);
11+ SerdeYamlError(::serde_yaml::Error);
3412 }
35−}
3613
37−impl From<String> for Error {
38− fn from(s: String) -> Self {
39− Error::Msg(s)
14+ errors {
15+ UndetectedSyntax(input: String) {
16+ description("unable to detect syntax"),
17+ display("unable to detect syntax for {}", input)
18+ }
19+ UnknownSyntax(name: String) {
20+ description("unknown syntax"),
21+ display("unknown syntax: '{}'", name)
22+ }
4023 }
4124}
4225
43−pub type Result<T> = std::result::Result<T, Error>;
44−
4526pub fn default_error_handler(error: &Error, output: &mut dyn Write) {
4627 use ansi_term::Colour::Red;
4728
4829 match error {
49− Error::Io(ref io_error) if io_error.kind() == ::std::io::ErrorKind::BrokenPipe => {
30+ Error(ErrorKind::Io(ref io_error), _)
31+ if io_error.kind() == ::std::io::ErrorKind::BrokenPipe =>
32+ {
5033 ::std::process::exit(0);
5134 }
52− Error::SerdeYamlError(_) => {
35+ Error(ErrorKind::SerdeYamlError(_), _) => {
5336 writeln!(
5437 output,
5538 "{}: Error while parsing metadata.yaml file: {}",
src/input.rs+41−98
@@ -1,10 +1,7 @@
1−use std::convert::TryFrom;
2−use std::fs;
1+use std::ffi::{OsStr, OsString};
32use std::fs::File;
43use std::io::{self, BufRead, BufReader, Read};
5−use std::path::{Path, PathBuf};
64
7−use clircle::{Clircle, Identifier};
85use content_inspector::{self, ContentType};
96
107use crate::error::*;
@@ -51,8 +48,8 @@ impl InputDescription {
5148 }
5249
5350 pub fn title(&self) -> &String {
54− match &self.title {
55− Some(title) => title,
51+ match self.title.as_ref() {
52+ Some(ref title) => title,
5653 None => &self.name,
5754 }
5855 }
@@ -70,7 +67,7 @@ impl InputDescription {
7067}
7168
7269pub(crate) enum InputKind<'a> {
73− OrdinaryFile(PathBuf),
70+ OrdinaryFile(OsString),
7471 StdIn,
7572 CustomReader(Box<dyn Read + 'a>),
7673}
@@ -87,8 +84,7 @@ impl<'a> InputKind<'a> {
8784
8885#[derive(Clone, Default)]
8986pub(crate) struct InputMetadata {
90− pub(crate) user_provided_name: Option<PathBuf>,
91− pub(crate) size: Option<u64>,
87+ pub(crate) user_provided_name: Option<OsString>,
9288}
9389
9490pub struct Input<'a> {
@@ -98,7 +94,7 @@ pub struct Input<'a> {
9894}
9995
10096pub(crate) enum OpenedInputKind {
101− OrdinaryFile(PathBuf),
97+ OrdinaryFile(OsString),
10298 StdIn,
10399 CustomReader,
104100}
@@ -110,36 +106,12 @@ pub(crate) struct OpenedInput<'a> {
110106 pub(crate) description: InputDescription,
111107}
112108
113−impl OpenedInput<'_> {
114− /// Get the path of the file:
115− /// If this was set by the metadata, that will take priority.
116− /// If it wasn't, it will use the real file path (if available).
117− pub(crate) fn path(&self) -> Option<&PathBuf> {
118− self.metadata
119− .user_provided_name
120− .as_ref()
121− .or(match self.kind {
122− OpenedInputKind::OrdinaryFile(ref path) => Some(path),
123− _ => None,
124− })
125− }
126−}
127−
128109impl<'a> Input<'a> {
129− pub fn ordinary_file(path: impl AsRef<Path>) -> Self {
130− Self::_ordinary_file(path.as_ref())
131− }
132−
133− fn _ordinary_file(path: &Path) -> Self {
134− let kind = InputKind::OrdinaryFile(path.to_path_buf());
135− let metadata = InputMetadata {
136− size: fs::metadata(path).map(|m| m.len()).ok(),
137− ..InputMetadata::default()
138− };
139−
110+ pub fn ordinary_file(path: &OsStr) -> Self {
111+ let kind = InputKind::OrdinaryFile(path.to_os_string());
140112 Input {
141113 description: kind.description(),
142− metadata,
114+ metadata: InputMetadata::default(),
143115 kind,
144116 }
145117 }
@@ -163,16 +135,17 @@ impl<'a> Input<'a> {
163135 }
164136
165137 pub fn is_stdin(&self) -> bool {
166− matches!(self.kind, InputKind::StdIn)
167− }
168−
169− pub fn with_name(self, provided_name: Option<impl AsRef<Path>>) -> Self {
170− self._with_name(provided_name.as_ref().map(|it| it.as_ref()))
138+ if let InputKind::StdIn = self.kind {
139+ true
140+ } else {
141+ false
142+ }
171143 }
172144
173− fn _with_name(mut self, provided_name: Option<&Path>) -> Self {
174− if let Some(name) = provided_name {
175− self.description.name = name.to_string_lossy().to_string()
145+ pub fn with_name(mut self, provided_name: Option<&OsStr>) -> Self {
146+ match provided_name {
147+ Some(name) => self.description.name = name.to_string_lossy().to_string(),
148+ None => {}
176149 }
177150
178151 self.metadata.user_provided_name = provided_name.map(|n| n.to_owned());
@@ -187,55 +160,25 @@ impl<'a> Input<'a> {
187160 &mut self.description
188161 }
189162
190− pub(crate) fn open<R: BufRead + 'a>(
191− self,
192− stdin: R,
193− stdout_identifier: Option<&Identifier>,
194− ) -> Result<OpenedInput<'a>> {
163+ pub(crate) fn open<R: BufRead + 'a>(self, stdin: R) -> Result<OpenedInput<'a>> {
195164 let description = self.description().clone();
196165 match self.kind {
197− InputKind::StdIn => {
198− if let Some(stdout) = stdout_identifier {
199− let input_identifier = Identifier::try_from(clircle::Stdio::Stdin)
200− .map_err(|e| format!("Stdin: Error identifying file: {}", e))?;
201− if stdout.surely_conflicts_with(&input_identifier) {
202− return Err("IO circle detected. The input from stdin is also an output. Aborting to avoid infinite loop.".into());
203− }
204− }
205−
206− Ok(OpenedInput {
207− kind: OpenedInputKind::StdIn,
208− description,
209− metadata: self.metadata,
210− reader: InputReader::new(stdin),
211− })
212− }
213−
166+ InputKind::StdIn => Ok(OpenedInput {
167+ kind: OpenedInputKind::StdIn,
168+ description,
169+ metadata: self.metadata,
170+ reader: InputReader::new(stdin),
171+ }),
214172 InputKind::OrdinaryFile(path) => Ok(OpenedInput {
215173 kind: OpenedInputKind::OrdinaryFile(path.clone()),
216174 description,
217175 metadata: self.metadata,
218176 reader: {
219− let mut file = File::open(&path)
177+ let file = File::open(&path)
220178 .map_err(|e| format!("'{}': {}", path.to_string_lossy(), e))?;
221179 if file.metadata()?.is_dir() {
222180 return Err(format!("'{}' is a directory.", path.to_string_lossy()).into());
223181 }
224−
225− if let Some(stdout) = stdout_identifier {
226− let input_identifier = Identifier::try_from(file).map_err(|e| {
227− format!("{}: Error identifying file: {}", path.to_string_lossy(), e)
228− })?;
229− if stdout.surely_conflicts_with(&input_identifier) {
230− return Err(format!(
231− "IO circle detected. The input from '{}' is also an output. Aborting to avoid infinite loop.",
232− path.to_string_lossy()
233− )
234− .into());
235− }
236− file = input_identifier.into_inner().expect("The file was lost in the clircle::Identifier, this should not have happened...");
237− }
238−
239182 InputReader::new(BufReader::new(file))
240183 },
241184 }),
@@ -278,18 +221,18 @@ impl<'a> InputReader<'a> {
278221 }
279222
280223 pub(crate) fn read_line(&mut self, buf: &mut Vec<u8>) -> io::Result<bool> {
281− if !self.first_line.is_empty() {
282− buf.append(&mut self.first_line);
283− return Ok(true);
284− }
224+ if self.first_line.is_empty() {
225+ let res = self.inner.read_until(b'\n', buf).map(|size| size > 0)?;
285226
286− let res = self.inner.read_until(b'\n', buf).map(|size| size > 0)?;
227+ if self.content_type == Some(ContentType::UTF_16LE) {
228+ self.inner.read_until(0x00, buf).ok();
229+ }
287230
288− if self.content_type == Some(ContentType::UTF_16LE) {
289− let _ = self.inner.read_until(0x00, buf);
231+ Ok(res)
232+ } else {
233+ buf.append(&mut self.first_line);
234+ Ok(true)
290235 }
291−
292− Ok(res)
293236 }
294237}
295238
@@ -304,21 +247,21 @@ fn basic() {
304247
305248 let res = reader.read_line(&mut buffer);
306249 assert!(res.is_ok());
307− assert!(res.unwrap());
250+ assert_eq!(true, res.unwrap());
308251 assert_eq!(b"#!/bin/bash\n", &buffer[..]);
309252
310253 buffer.clear();
311254
312255 let res = reader.read_line(&mut buffer);
313256 assert!(res.is_ok());
314− assert!(res.unwrap());
257+ assert_eq!(true, res.unwrap());
315258 assert_eq!(b"echo hello", &buffer[..]);
316259
317260 buffer.clear();
318261
319262 let res = reader.read_line(&mut buffer);
320263 assert!(res.is_ok());
321− assert!(!res.unwrap());
264+ assert_eq!(false, res.unwrap());
322265 assert!(buffer.is_empty());
323266}
324267
@@ -333,20 +276,20 @@ fn utf16le() {
333276
334277 let res = reader.read_line(&mut buffer);
335278 assert!(res.is_ok());
336− assert!(res.unwrap());
279+ assert_eq!(true, res.unwrap());
337280 assert_eq!(b"\xFF\xFE\x73\x00\x0A\x00", &buffer[..]);
338281
339282 buffer.clear();
340283
341284 let res = reader.read_line(&mut buffer);
342285 assert!(res.is_ok());
343− assert!(res.unwrap());
286+ assert_eq!(true, res.unwrap());
344287 assert_eq!(b"\x64\x00", &buffer[..]);
345288
346289 buffer.clear();
347290
348291 let res = reader.read_line(&mut buffer);
349292 assert!(res.is_ok());
350− assert!(!res.unwrap());
293+ assert_eq!(false, res.unwrap());
351294 assert!(buffer.is_empty());
352295}
src/less.rs+12−79
@@ -1,39 +1,19 @@
11#![cfg(feature = "paging")]
22
3−use std::ffi::OsStr;
43use std::process::Command;
54
6−#[derive(Debug, PartialEq)]
7−pub enum LessVersion {
8− Less(usize),
9− BusyBox,
5+pub fn retrieve_less_version() -> Option<usize> {
6+ let cmd = Command::new("less").arg("--version").output().ok()?;
7+ parse_less_version(&cmd.stdout)
108}
119
12−pub fn retrieve_less_version(less_path: &dyn AsRef<OsStr>) -> Option<LessVersion> {
13− let resolved_path = grep_cli::resolve_binary(less_path.as_ref()).ok()?;
14−
15− let cmd = Command::new(resolved_path).arg("--version").output().ok()?;
16− if cmd.status.success() {
17− parse_less_version(&cmd.stdout)
10+fn parse_less_version(output: &[u8]) -> Option<usize> {
11+ if output.starts_with(b"less ") {
12+ let version = std::str::from_utf8(&output[5..]).ok()?;
13+ let end = version.find(' ')?;
14+ version[..end].parse::<usize>().ok()
1815 } else {
19− parse_less_version_busybox(&cmd.stderr)
20− }
21−}
22−
23−fn parse_less_version(output: &[u8]) -> Option<LessVersion> {
24− if !output.starts_with(b"less ") {
25− return None;
26− }
27−
28− let version = std::str::from_utf8(&output[5..]).ok()?;
29− let end = version.find(|c: char| !c.is_ascii_digit())?;
30− Some(LessVersion::Less(version[..end].parse::<usize>().ok()?))
31−}
32−
33−fn parse_less_version_busybox(output: &[u8]) -> Option<LessVersion> {
34− match std::str::from_utf8(output) {
35− Ok(version) if version.contains("BusyBox ") => Some(LessVersion::BusyBox),
36− _ => None,
16+ None
3717 }
3818}
3919
@@ -47,7 +27,7 @@ For information about the terms of redistribution,
4727see the file named README in the less distribution.
4828Homepage: http://www.greenwoodsoftware.com/less";
4929
50− assert_eq!(Some(LessVersion::Less(487)), parse_less_version(output));
30+ assert_eq!(Some(487), parse_less_version(output));
5131}
5232
5333#[test]
@@ -60,7 +40,7 @@ For information about the terms of redistribution,
6040see the file named README in the less distribution.
6141Homepage: http://www.greenwoodsoftware.com/less";
6242
63− assert_eq!(Some(LessVersion::Less(529)), parse_less_version(output));
43+ assert_eq!(Some(529), parse_less_version(output));
6444}
6545
6646#[test]
@@ -73,20 +53,7 @@ For information about the terms of redistribution,
7353see the file named README in the less distribution.
7454Home page: http://www.greenwoodsoftware.com/less";
7555
76− assert_eq!(Some(LessVersion::Less(551)), parse_less_version(output));
77−}
78−
79−#[test]
80−fn test_parse_less_version_581_2() {
81− let output = b"less 581.2 (PCRE2 regular expressions)
82−Copyright (C) 1984-2021 Mark Nudelman
83−
84−less comes with NO WARRANTY, to the extent permitted by law.
85−For information about the terms of redistribution,
86−see the file named README in the less distribution.
87−Home page: https://greenwoodsoftware.com/less";
88−
89− assert_eq!(Some(LessVersion::Less(581)), parse_less_version(output));
56+ assert_eq!(Some(551), parse_less_version(output));
9057}
9158
9259#[test]
@@ -94,38 +61,4 @@ fn test_parse_less_version_wrong_program() {
9461 let output = b"more from util-linux 2.34";
9562
9663 assert_eq!(None, parse_less_version(output));
97− assert_eq!(None, parse_less_version_busybox(output));
98−}
99−
100−#[test]
101−fn test_parse_less_version_busybox() {
102− let output = b"pkg/less: unrecognized option '--version'
103−BusyBox v1.35.0 (2022-04-21 10:38:11 EDT) multi-call binary.
104−
105−Usage: less [-EFIMmNSRh~] [FILE]...
106−
107−View FILE (or stdin) one screenful at a time
108−
109− -E Quit once the end of a file is reached
110− -F Quit if entire file fits on first screen
111− -I Ignore case in all searches
112− -M,-m Display status line with line numbers
113− and percentage through the file
114− -N Prefix line number to each line
115− -S Truncate long lines
116− -R Remove color escape codes in input
117− -~ Suppress ~s displayed past EOF";
118−
119− assert_eq!(
120− Some(LessVersion::BusyBox),
121− parse_less_version_busybox(output)
122− );
123−}
124−
125−#[test]
126−fn test_parse_less_version_invalid_utf_8() {
127− let output = b"\xff";
128−
129− assert_eq!(None, parse_less_version(output));
130− assert_eq!(None, parse_less_version_busybox(output));
13164}
src/lib.rs+1−10
@@ -19,14 +19,8 @@
1919//! .unwrap();
2020//! ```
2121
22−#![deny(unsafe_code)]
23−
24−mod macros;
25−
2622pub mod assets;
27−pub mod assets_metadata {
28− pub use super::assets::assets_metadata::*;
29−}
23+pub mod assets_metadata;
3024pub mod config;
3125pub mod controller;
3226mod decorations;
@@ -37,8 +31,6 @@ mod less;
3731pub mod line_range;
3832mod output;
3933#[cfg(feature = "paging")]
40−mod pager;
41−#[cfg(feature = "paging")]
4234pub(crate) mod paging;
4335mod preprocessor;
4436mod pretty_printer;
@@ -46,7 +38,6 @@ pub(crate) mod printer;
4638pub mod style;
4739pub(crate) mod syntax_mapping;
4840mod terminal;
49−mod vscreen;
5041pub(crate) mod wrapping;
5142
5243pub use pretty_printer::{Input, PrettyPrinter};
src/line_range.rs+1−69
@@ -47,28 +47,7 @@ impl LineRange {
4747 }
4848 2 => {
4949 new_range.lower = line_numbers[0].parse()?;
50− let first_byte = line_numbers[1].bytes().next();
51−
52− new_range.upper = if first_byte == Some(b'+') {
53− let more_lines = &line_numbers[1][1..]
54− .parse()
55− .map_err(|_| "Invalid character after +")?;
56− new_range.lower + more_lines
57− } else if first_byte == Some(b'-') {
58− // this will prevent values like "-+5" even though "+5" is valid integer
59− if line_numbers[1][1..].bytes().next() == Some(b'+') {
60− return Err("Invalid character after -".into());
61− }
62− let prior_lines = &line_numbers[1][1..]
63− .parse()
64− .map_err(|_| "Invalid character after -")?;
65− let prev_lower = new_range.lower;
66− new_range.lower = new_range.lower.saturating_sub(*prior_lines);
67− prev_lower
68− } else {
69− line_numbers[1].parse()?
70− };
71−
50+ new_range.upper = line_numbers[1].parse()?;
7251 Ok(new_range)
7352 }
7453 _ => Err(
@@ -121,53 +100,6 @@ fn test_parse_fail() {
121100 assert!(range.is_err());
122101}
123102
124−#[test]
125−fn test_parse_plus() {
126− let range = LineRange::from("40:+10").expect("Shouldn't fail on test!");
127− assert_eq!(40, range.lower);
128− assert_eq!(50, range.upper);
129−}
130−
131−#[test]
132−fn test_parse_plus_fail() {
133− let range = LineRange::from("40:+z");
134− assert!(range.is_err());
135− let range = LineRange::from("40:+-10");
136− assert!(range.is_err());
137− let range = LineRange::from("40:+");
138− assert!(range.is_err());
139−}
140−
141−#[test]
142−fn test_parse_minus_success() {
143− let range = LineRange::from("40:-10").expect("Shouldn't fail on test!");
144− assert_eq!(30, range.lower);
145− assert_eq!(40, range.upper);
146−}
147−
148−#[test]
149−fn test_parse_minus_edge_cases_success() {
150− let range = LineRange::from("5:-4").expect("Shouldn't fail on test!");
151− assert_eq!(1, range.lower);
152− assert_eq!(5, range.upper);
153− let range = LineRange::from("5:-5").expect("Shouldn't fail on test!");
154− assert_eq!(0, range.lower);
155− assert_eq!(5, range.upper);
156− let range = LineRange::from("5:-100").expect("Shouldn't fail on test!");
157− assert_eq!(0, range.lower);
158− assert_eq!(5, range.upper);
159−}
160−
161−#[test]
162−fn test_parse_minus_fail() {
163− let range = LineRange::from("40:-z");
164− assert!(range.is_err());
165− let range = LineRange::from("40:-+10");
166− assert!(range.is_err());
167− let range = LineRange::from("40:-");
168− assert!(range.is_err());
169−}
170−
171103#[derive(Copy, Clone, Debug, PartialEq)]
172104pub enum RangeCheckResult {
173105 // Within one of the given ranges
src/macros.rsdeleted−7
@@ -1,7 +0,0 @@
1−#[macro_export]
2−macro_rules! bat_warning {
3− ($($arg:tt)*) => ({
4− use ansi_term::Colour::Yellow;
5− eprintln!("{}: {}", Yellow.paint("[bat warning]"), format!($($arg)*));
6− })
7−}
src/output.rs+89−88
@@ -4,18 +4,9 @@ use std::process::Child;
44
55use crate::error::*;
66#[cfg(feature = "paging")]
7−use crate::less::{retrieve_less_version, LessVersion};
7+use crate::less::retrieve_less_version;
88#[cfg(feature = "paging")]
99use crate::paging::PagingMode;
10−#[cfg(feature = "paging")]
11−use crate::wrapping::WrappingMode;
12−
13−#[cfg(feature = "paging")]
14−#[derive(Debug, PartialEq)]
15−enum SingleScreenAction {
16− Quit,
17− Nothing,
18−}
1910
2011#[derive(Debug)]
2112pub enum OutputType {
@@ -26,102 +17,108 @@ pub enum OutputType {
2617
2718impl OutputType {
2819 #[cfg(feature = "paging")]
29− pub fn from_mode(
30− paging_mode: PagingMode,
31− wrapping_mode: WrappingMode,
32− pager: Option<&str>,
33− ) -> Result<Self> {
20+ pub fn from_mode(mode: PagingMode, pager: Option<&str>) -> Result<Self> {
3421 use self::PagingMode::*;
35− Ok(match paging_mode {
36− Always => OutputType::try_pager(SingleScreenAction::Nothing, wrapping_mode, pager)?,
37− QuitIfOneScreen => {
38− OutputType::try_pager(SingleScreenAction::Quit, wrapping_mode, pager)?
39− }
22+ Ok(match mode {
23+ Always => OutputType::try_pager(false, pager)?,
24+ QuitIfOneScreen => OutputType::try_pager(true, pager)?,
4025 _ => OutputType::stdout(),
4126 })
4227 }
4328
4429 /// Try to launch the pager. Fall back to stdout in case of errors.
4530 #[cfg(feature = "paging")]
46− fn try_pager(
47− single_screen_action: SingleScreenAction,
48− wrapping_mode: WrappingMode,
49− pager_from_config: Option<&str>,
50− ) -> Result<Self> {
51− use crate::pager::{self, PagerKind, PagerSource};
31+ fn try_pager(quit_if_one_screen: bool, pager_from_config: Option<&str>) -> Result<Self> {
32+ use std::env;
33+ use std::ffi::OsString;
34+ use std::path::PathBuf;
5235 use std::process::{Command, Stdio};
5336
54− let pager_opt =
55− pager::get_pager(pager_from_config).map_err(|_| "Could not parse pager command.")?;
37+ let mut replace_arguments_to_less = false;
5638
57− let pager = match pager_opt {
58− Some(pager) => pager,
59− None => return Ok(OutputType::stdout()),
39+ let pager_from_env = match (env::var("BAT_PAGER"), env::var("PAGER")) {
40+ (Ok(bat_pager), _) => Some(bat_pager),
41+ (_, Ok(pager)) => {
42+ // less needs to be called with the '-R' option in order to properly interpret the
43+ // ANSI color sequences printed by bat. If someone has set PAGER="less -F", we
44+ // therefore need to overwrite the arguments and add '-R'.
45+ //
46+ // We only do this for PAGER (as it is not specific to 'bat'), not for BAT_PAGER
47+ // or bats '--pager' command line option.
48+ replace_arguments_to_less = true;
49+ Some(pager)
50+ }
51+ _ => None,
6052 };
6153
62− if pager.kind == PagerKind::Bat {
63− return Err(Error::InvalidPagerValueBat);
54+ let pager_from_config = pager_from_config.map(|p| p.to_string());
55+
56+ if pager_from_config.is_some() {
57+ replace_arguments_to_less = false;
6458 }
6559
66− let resolved_path = match grep_cli::resolve_binary(&pager.bin) {
67− Ok(path) => path,
68− Err(_) => {
69− return Ok(OutputType::stdout());
70− }
71− };
60+ let pager = pager_from_config
61+ .or(pager_from_env)
62+ .unwrap_or_else(|| String::from("less"));
7263
73− let mut p = Command::new(resolved_path);
74− let args = pager.args;
75−
76− if pager.kind == PagerKind::Less {
77− // less needs to be called with the '-R' option in order to properly interpret the
78− // ANSI color sequences printed by bat. If someone has set PAGER="less -F", we
79− // therefore need to overwrite the arguments and add '-R'.
80− //
81− // We only do this for PAGER (as it is not specific to 'bat'), not for BAT_PAGER
82− // or bats '--pager' command line option.
83− let replace_arguments_to_less = pager.source == PagerSource::EnvVarPager;
84−
85− if args.is_empty() || replace_arguments_to_less {
86− p.arg("-R"); // Short version of --RAW-CONTROL-CHARS for maximum compatibility
87− if single_screen_action == SingleScreenAction::Quit {
88− p.arg("-F"); // Short version of --quit-if-one-screen for compatibility
89− }
64+ let pagerflags =
65+ shell_words::split(&pager).chain_err(|| "Could not parse pager command.")?;
9066
91− if wrapping_mode == WrappingMode::NoWrapping(true) {
92− p.arg("-S"); // Short version of --chop-long-lines for compatibility
67+ match pagerflags.split_first() {
68+ Some((pager_name, args)) => {
69+ let mut pager_path = PathBuf::from(pager_name);
70+
71+ if pager_path.file_stem() == Some(&OsString::from("bat")) {
72+ pager_path = PathBuf::from("less");
9373 }
9474
95− // Passing '--no-init' fixes a bug with '--quit-if-one-screen' in older
96− // versions of 'less'. Unfortunately, it also breaks mouse-wheel support.
97− //
98− // See: http://www.greenwoodsoftware.com/less/news.530.html
99− //
100− // For newer versions (530 or 558 on Windows), we omit '--no-init' as it
101− // is not needed anymore.
102− match retrieve_less_version(&pager.bin) {
103− None => {
104− p.arg("--no-init");
75+ let is_less = pager_path.file_stem() == Some(&OsString::from("less"));
76+
77+ let mut process = if is_less {
78+ let mut p = Command::new(&pager_path);
79+ if args.is_empty() || replace_arguments_to_less {
80+ p.arg("--RAW-CONTROL-CHARS");
81+ if quit_if_one_screen {
82+ p.arg("--quit-if-one-screen");
83+ }
84+
85+ // Passing '--no-init' fixes a bug with '--quit-if-one-screen' in older
86+ // versions of 'less'. Unfortunately, it also breaks mouse-wheel support.
87+ //
88+ // See: http://www.greenwoodsoftware.com/less/news.530.html
89+ //
90+ // For newer versions (530 or 558 on Windows), we omit '--no-init' as it
91+ // is not needed anymore.
92+ match retrieve_less_version() {
93+ None => {
94+ p.arg("--no-init");
95+ }
96+ Some(version)
97+ if (version < 530 || (cfg!(windows) && version < 558)) =>
98+ {
99+ p.arg("--no-init");
100+ }
101+ _ => {}
102+ }
103+ } else {
104+ p.args(args);
105105 }
106− Some(LessVersion::Less(version))
107− if (version < 530 || (cfg!(windows) && version < 558)) =>
108− {
109− p.arg("--no-init");
110− }
111− _ => {}
112− }
113− } else {
114− p.args(args);
106+ p.env("LESSCHARSET", "UTF-8");
107+ p
108+ } else {
109+ let mut p = Command::new(&pager_path);
110+ p.args(args);
111+ p
112+ };
113+
114+ Ok(process
115+ .stdin(Stdio::piped())
116+ .spawn()
117+ .map(OutputType::Pager)
118+ .unwrap_or_else(|_| OutputType::stdout()))
115119 }
116− p.env("LESSCHARSET", "UTF-8");
117− } else {
118− p.args(args);
119− };
120−
121− Ok(p.stdin(Stdio::piped())
122− .spawn()
123− .map(OutputType::Pager)
124− .unwrap_or_else(|_| OutputType::stdout()))
120+ None => Ok(OutputType::stdout()),
121+ }
125122 }
126123
127124 pub(crate) fn stdout() -> Self {
@@ -130,7 +127,11 @@ impl OutputType {
130127
131128 #[cfg(feature = "paging")]
132129 pub(crate) fn is_pager(&self) -> bool {
133− matches!(self, OutputType::Pager(_))
130+ if let OutputType::Pager(_) = self {
131+ true
132+ } else {
133+ false
134+ }
134135 }
135136
136137 #[cfg(not(feature = "paging"))]
@@ -144,7 +145,7 @@ impl OutputType {
144145 OutputType::Pager(ref mut command) => command
145146 .stdin
146147 .as_mut()
147− .ok_or("Could not open stdin for pager")?,
148+ .chain_err(|| "Could not open stdin for pager")?,
148149 OutputType::Stdout(ref mut handle) => handle,
149150 })
150151 }
src/pager.rsdeleted−123
@@ -1,123 +0,0 @@
1−use shell_words::ParseError;
2−use std::env;
3−
4−/// If we use a pager, this enum tells us from where we were told to use it.
5−#[derive(Debug, PartialEq)]
6−pub(crate) enum PagerSource {
7− /// From --config
8− Config,
9−
10− /// From the env var BAT_PAGER
11− EnvVarBatPager,
12−
13− /// From the env var PAGER
14− EnvVarPager,
15−
16− /// No pager was specified, default is used
17− Default,
18−}
19−
20−/// We know about some pagers, for example 'less'. This is a list of all pagers we know about
21−#[derive(Debug, PartialEq)]
22−pub(crate) enum PagerKind {
23− /// bat
24− Bat,
25−
26− /// less
27− Less,
28−
29− /// more
30− More,
31−
32− /// most
33− Most,
34−
35− /// A pager we don't know about
36− Unknown,
37−}
38−
39−impl PagerKind {
40− fn from_bin(bin: &str) -> PagerKind {
41− use std::path::Path;
42−
43− match Path::new(bin)
44− .file_stem()
45− .map(|s| s.to_string_lossy())
46− .as_deref()
47− {
48− Some("bat") => PagerKind::Bat,
49− Some("less") => PagerKind::Less,
50− Some("more") => PagerKind::More,
51− Some("most") => PagerKind::Most,
52− _ => PagerKind::Unknown,
53− }
54− }
55−}
56−
57−/// A pager such as 'less', and from where we got it.
58−#[derive(Debug)]
59−pub(crate) struct Pager {
60− /// The pager binary
61− pub bin: String,
62−
63− /// The pager binary arguments (that we might tweak)
64− pub args: Vec<String>,
65−
66− /// What pager this is
67− pub kind: PagerKind,
68−
69− /// From where this pager comes
70− pub source: PagerSource,
71−}
72−
73−impl Pager {
74− fn new(bin: &str, args: &[String], kind: PagerKind, source: PagerSource) -> Pager {
75− Pager {
76− bin: String::from(bin),
77− args: args.to_vec(),
78− kind,
79− source,
80− }
81− }
82−}
83−
84−/// Returns what pager to use, after looking at both config and environment variables.
85−pub(crate) fn get_pager(config_pager: Option<&str>) -> Result<Option<Pager>, ParseError> {
86− let bat_pager = env::var("BAT_PAGER");
87− let pager = env::var("PAGER");
88−
89− let (cmd, source) = match (config_pager, &bat_pager, &pager) {
90− (Some(config_pager), _, _) => (config_pager, PagerSource::Config),
91− (_, Ok(bat_pager), _) => (bat_pager.as_str(), PagerSource::EnvVarBatPager),
92− (_, _, Ok(pager)) => (pager.as_str(), PagerSource::EnvVarPager),
93− _ => ("less", PagerSource::Default),
94− };
95−
96− let parts = shell_words::split(cmd)?;
97− match parts.split_first() {
98− Some((bin, args)) => {
99− let kind = PagerKind::from_bin(bin);
100−
101− let use_less_instead = if source == PagerSource::EnvVarPager {
102− // 'more' and 'most' do not supports colors; automatically use
103− // 'less' instead if the problematic pager came from the
104− // generic PAGER env var.
105− // If PAGER=bat, silently use 'less' instead to prevent
106− // recursion.
107− // Never silently use 'less' if BAT_PAGER or --pager has been
108− // specified.
109− matches!(kind, PagerKind::More | PagerKind::Most | PagerKind::Bat)
110− } else {
111− false
112− };
113−
114− Ok(Some(if use_less_instead {
115− let no_args = vec![];
116− Pager::new("less", &no_args, PagerKind::Less, PagerSource::EnvVarPager)
117− } else {
118− Pager::new(bin, args, kind, source)
119− }))
120− }
121− None => Ok(None),
122− }
123−}
src/preprocessor.rs+4−11
@@ -53,33 +53,26 @@ pub fn replace_nonprintable(input: &[u8], tab_width: usize) -> String {
5353 let tab_width = if tab_width == 0 { 4 } else { tab_width };
5454
5555 let mut idx = 0;
56− let mut line_idx = 0;
5756 let len = input.len();
5857 while idx < len {
5958 if let Some((chr, skip_ahead)) = try_parse_utf8_char(&input[idx..]) {
6059 idx += skip_ahead;
61− line_idx += 1;
6260
6361 match chr {
6462 // space
65− ' ' => output.push('·'),
63+ ' ' => output.push('•'),
6664 // tab
6765 '\t' => {
68− let tab_stop = tab_width - ((line_idx - 1) % tab_width);
69− line_idx = 0;
70− if tab_stop == 1 {
66+ if tab_width == 1 {
7167 output.push('↹');
7268 } else {
7369 output.push('├');
74− output.push_str(&"─".repeat(tab_stop - 2));
70+ output.push_str(&"─".repeat(tab_width - 2));
7571 output.push('┤');
7672 }
7773 }
7874 // line feed
79− '\x0A' => {
80− output.push_str("␊\x0A");
81− line_idx = 0;
82− }
75+ '\x0A' => output.push('␊'),
8376 // carriage return
8477 '\x0D' => output.push('␍'),
8578 // null
src/pretty_printer.rs+63−47
@@ -1,5 +1,5 @@
1+use std::ffi::OsStr;
12use std::io::Read;
2−use std::path::Path;
33
44use console::Term;
55use syntect::parsing::SyntaxReference;
@@ -23,7 +23,6 @@ struct ActiveStyleComponents {
2323 header: bool,
2424 vcs_modification_markers: bool,
2525 grid: bool,
26− rule: bool,
2726 line_numbers: bool,
2827 snip: bool,
2928}
@@ -40,11 +39,10 @@ pub struct PrettyPrinter<'a> {
4039
4140impl<'a> PrettyPrinter<'a> {
4241 pub fn new() -> Self {
43− let config = Config {
44− colored_output: true,
45− true_color: true,
46− ..Default::default()
47− };
42+ let mut config = Config::default();
43+
44+ config.colored_output = true;
45+ config.true_color = true;
4846
4947 PrettyPrinter {
5048 inputs: vec![],
@@ -72,7 +70,7 @@ impl<'a> PrettyPrinter<'a> {
7270 }
7371
7472 /// Add a file which should be pretty-printed
75− pub fn input_file(&mut self, path: impl AsRef<Path>) -> &mut Self {
73+ pub fn input_file(&mut self, path: impl AsRef<OsStr>) -> &mut Self {
7674 self.input(Input::from_file(path).kind("File"))
7775 }
7876
@@ -80,7 +78,7 @@ impl<'a> PrettyPrinter<'a> {
8078 pub fn input_files<I, P>(&mut self, paths: I) -> &mut Self
8179 where
8280 I: IntoIterator<Item = P>,
83− P: AsRef<Path>,
81+ P: AsRef<OsStr>,
8482 {
8583 self.inputs(paths.into_iter().map(Input::from_file))
8684 }
@@ -91,17 +89,48 @@ impl<'a> PrettyPrinter<'a> {
9189 self
9290 }
9391
92+ /// Add STDIN as an input (with customized name)
93+ #[deprecated]
94+ pub fn input_stdin_with_name(&mut self, name: impl AsRef<OsStr>) -> &mut Self {
95+ self.inputs
96+ .push(Input::from_stdin().name(name).kind("File"));
97+ self
98+ }
99+
94100 /// Add a byte string as an input
95101 pub fn input_from_bytes(&mut self, content: &'a [u8]) -> &mut Self {
96102 self.input_from_reader(content)
97103 }
98104
105+ /// Add a byte string as an input (with customized name)
106+ #[deprecated]
107+ #[allow(deprecated)]
108+ pub fn input_from_bytes_with_name(
109+ &mut self,
110+ content: &'a [u8],
111+ name: impl AsRef<OsStr>,
112+ ) -> &mut Self {
113+ self.input_from_reader_with_name(content, name)
114+ }
115+
99116 /// Add a custom reader as an input
100117 pub fn input_from_reader<R: Read + 'a>(&mut self, reader: R) -> &mut Self {
101118 self.inputs.push(Input::from_reader(reader));
102119 self
103120 }
104121
122+ /// Add a custom reader as an input (with customized name)
123+ #[deprecated]
124+ pub fn input_from_reader_with_name<R: Read + 'a>(
125+ &mut self,
126+ reader: R,
127+ name: impl AsRef<OsStr>,
128+ ) -> &mut Self {
129+ self.inputs
130+ .push(Input::from_reader(reader).name(name).kind("File"));
131+ self
132+ }
133+
105134 /// Specify the syntax file which should be used (default: auto-detect)
106135 pub fn language(&mut self, language: &'a str) -> &mut Self {
107136 self.config.language = Some(language);
@@ -150,23 +179,21 @@ impl<'a> PrettyPrinter<'a> {
150179 self
151180 }
152181
153− /// Whether to paint a horizontal rule to delimit files
154− pub fn rule(&mut self, yes: bool) -> &mut Self {
155− self.active_style_components.rule = yes;
156− self
157− }
158−
159182 /// Whether to show modification markers for VCS changes. This has no effect if
160183 /// the `git` feature is not activated.
161− #[cfg(feature = "git")]
184+ #[cfg_attr(
185+ not(feature = "git"),
186+ deprecated(
187+ note = "Using vcs_modification_markers without the 'git' feature has no effect. \
188+ The function will be removed (for non-'git' use cases) in the future."
189+ )
190+ )]
191+ #[allow(unused_variables)]
162192 pub fn vcs_modification_markers(&mut self, yes: bool) -> &mut Self {
163− self.active_style_components.vcs_modification_markers = yes;
164− self
165− }
166−
167− /// Whether to print binary content or nonprintable characters (default: no)
168− pub fn show_nonprintable(&mut self, yes: bool) -> &mut Self {
169− self.config.show_nonprintable = yes;
193+ #[cfg(feature = "git")]
194+ {
195+ self.active_style_components.vcs_modification_markers = yes;
196+ }
170197 self
171198 }
172199
@@ -241,9 +268,7 @@ impl<'a> PrettyPrinter<'a> {
241268 }
242269
243270 pub fn syntaxes(&self) -> impl Iterator<Item = &SyntaxReference> {
244− // We always use assets from the binary, which are guaranteed to always
245− // be valid, so get_syntaxes() can never fail here
246− self.assets.get_syntaxes().unwrap().iter()
271+ self.assets.syntaxes().iter()
247272 }
248273
249274 /// Pretty-print all specified inputs. This method will "use" all stored inputs.
@@ -260,9 +285,6 @@ impl<'a> PrettyPrinter<'a> {
260285 if self.active_style_components.grid {
261286 style_components.push(StyleComponent::Grid);
262287 }
263− if self.active_style_components.rule {
264− style_components.push(StyleComponent::Rule);
265− }
266288 if self.active_style_components.header {
267289 style_components.push(StyleComponent::Header);
268290 }
@@ -288,12 +310,6 @@ impl<'a> PrettyPrinter<'a> {
288310 }
289311}
290312
291−impl Default for PrettyPrinter<'_> {
292− fn default() -> Self {
293− Self::new()
294− }
295−}
296−
297313/// An input source for the pretty printer.
298314pub struct Input<'a> {
299315 input: input::Input<'a>,
@@ -306,13 +322,13 @@ impl<'a> Input<'a> {
306322 }
307323
308324 /// A new input from a file.
309− pub fn from_file(path: impl AsRef<Path>) -> Self {
310− input::Input::ordinary_file(path).into()
325+ pub fn from_file(path: impl AsRef<OsStr>) -> Self {
326+ input::Input::ordinary_file(path.as_ref()).into()
311327 }
312328
313329 /// A new input from bytes.
314330 pub fn from_bytes(bytes: &'a [u8]) -> Self {
315− Input::from_reader(bytes)
331+ Input::from_reader(bytes).into()
316332 }
317333
318334 /// A new input from STDIN.
@@ -322,8 +338,8 @@ impl<'a> Input<'a> {
322338
323339 /// The filename of the input.
324340 /// This affects syntax detection and changes the default header title.
325− pub fn name(mut self, name: impl AsRef<Path>) -> Self {
326− self.input = self.input.with_name(Some(name));
341+ pub fn name(mut self, name: impl AsRef<OsStr>) -> Self {
342+ self.input = self.input.with_name(Some(name.as_ref()));
327343 self
328344 }
329345
@@ -336,7 +352,7 @@ impl<'a> Input<'a> {
336352 self
337353 }
338354
339− /// The title for the input (e.g. "Descriptive title")
355+ /// The title for the input (e.g. "http://example.com/example.txt")
340356 /// This defaults to the file name.
341357 pub fn title(mut self, title: impl Into<String>) -> Self {
342358 self.input.description_mut().set_title(Some(title.into()));
@@ -344,14 +360,14 @@ impl<'a> Input<'a> {
344360 }
345361}
346362
347−impl<'a> From<input::Input<'a>> for Input<'a> {
348− fn from(input: input::Input<'a>) -> Self {
349− Self { input }
363+impl<'a> Into<Input<'a>> for input::Input<'a> {
364+ fn into(self) -> Input<'a> {
365+ Input { input: self }
350366 }
351367}
352368
353−impl<'a> From<Input<'a>> for input::Input<'a> {
354− fn from(Input { input }: Input<'a>) -> Self {
355− input
369+impl<'a> Into<input::Input<'a>> for Input<'a> {
370+ fn into(self) -> input::Input<'a> {
371+ self.input
356372 }
357373}
src/printer.rs+155−250
@@ -4,8 +4,6 @@ use std::vec::Vec;
44use ansi_term::Colour::{Fixed, Green, Red, Yellow};
55use ansi_term::Style;
66
7−use bytesize::ByteSize;
8−
97use console::AnsiCodeIterator;
108
119use syntect::easy::HighlightLines;
@@ -20,7 +18,7 @@ use encoding::{DecoderTrap, Encoding};
2018
2119use unicode_width::UnicodeWidthChar;
2220
23−use crate::assets::{HighlightingAssets, SyntaxReferenceInSet};
21+use crate::assets::HighlightingAssets;
2422use crate::config::Config;
2523#[cfg(feature = "git")]
2624use crate::decorations::LineChangesDecoration;
@@ -31,9 +29,7 @@ use crate::error::*;
3129use crate::input::OpenedInput;
3230use crate::line_range::RangeCheckResult;
3331use crate::preprocessor::{expand_tabs, replace_nonprintable};
34−use crate::style::StyleComponent;
3532use crate::terminal::{as_terminal_escaped, to_ansi_color};
36−use crate::vscreen::AnsiStyle;
3733use crate::wrapping::WrappingMode;
3834
3935pub(crate) trait Printer {
@@ -56,17 +52,15 @@ pub(crate) trait Printer {
5652 ) -> Result<()>;
5753}
5854
59−pub struct SimplePrinter<'a> {
60− config: &'a Config<'a>,
61−}
55+pub struct SimplePrinter;
6256
63−impl<'a> SimplePrinter<'a> {
64− pub fn new(config: &'a Config) -> Self {
65− SimplePrinter { config }
57+impl SimplePrinter {
58+ pub fn new() -> Self {
59+ SimplePrinter {}
6660 }
6761}
6862
69−impl<'a> Printer for SimplePrinter<'a> {
63+impl Printer for SimplePrinter {
7064 fn print_header(
7165 &mut self,
7266 _handle: &mut dyn Write,
@@ -92,41 +86,23 @@ impl<'a> Printer for SimplePrinter<'a> {
9286 line_buffer: &[u8],
9387 ) -> Result<()> {
9488 if !out_of_range {
95− if self.config.show_nonprintable {
96− let line = replace_nonprintable(line_buffer, self.config.tab_width);
97− write!(handle, "{}", line)?;
98− } else {
99− handle.write_all(line_buffer)?
100− };
89+ handle.write_all(line_buffer)?;
10190 }
10291 Ok(())
10392 }
10493}
10594
106−struct HighlighterFromSet<'a> {
107− highlighter: HighlightLines<'a>,
108− syntax_set: &'a SyntaxSet,
109−}
110−
111−impl<'a> HighlighterFromSet<'a> {
112− fn new(syntax_in_set: SyntaxReferenceInSet<'a>, theme: &'a Theme) -> Self {
113− Self {
114− highlighter: HighlightLines::new(syntax_in_set.syntax, theme),
115− syntax_set: syntax_in_set.syntax_set,
116− }
117− }
118−}
119−
12095pub(crate) struct InteractivePrinter<'a> {
12196 colors: Colors,
12297 config: &'a Config<'a>,
12398 decorations: Vec<Box<dyn Decoration>>,
12499 panel_width: usize,
125− ansi_style: AnsiStyle,
100+ ansi_prefix_sgr: String,
126101 content_type: Option<ContentType>,
127102 #[cfg(feature = "git")]
128103 pub line_changes: &'a Option<LineChanges>,
129− highlighter_from_set: Option<HighlighterFromSet<'a>>,
104+ highlighter: Option<HighlightLines<'a>>,
105+ syntax_set: &'a SyntaxSet,
130106 background_color_highlight: Option<Color>,
131107}
132108
@@ -180,7 +156,7 @@ impl<'a> InteractivePrinter<'a> {
180156 panel_width = 0;
181157 }
182158
183− let highlighter_from_set = if input
159+ let highlighter = if input
184160 .reader
185161 .content_type
186162 .map_or(false, |c| c.is_binary() && !config.show_nonprintable)
@@ -188,16 +164,15 @@ impl<'a> InteractivePrinter<'a> {
188164 None
189165 } else {
190166 // Determine the type of syntax for highlighting
191− let syntax_in_set =
192− match assets.get_syntax(config.language, input, &config.syntax_mapping) {
193− Ok(syntax_in_set) => syntax_in_set,
194− Err(Error::UndetectedSyntax(_)) => assets
195− .find_syntax_by_name("Plain Text")?
196− .expect("A plain text syntax is available"),
197− Err(e) => return Err(e),
198− };
199−
200− Some(HighlighterFromSet::new(syntax_in_set, theme))
167+ let syntax = match assets.get_syntax(config.language, input, &config.syntax_mapping) {
168+ Ok(syntax) => syntax,
169+ Err(Error(ErrorKind::UndetectedSyntax(_), _)) => {
170+ assets.syntax_set.find_syntax_plain_text()
171+ }
172+ Err(e) => return Err(e),
173+ };
174+
175+ Some(HighlightLines::new(syntax, theme))
201176 };
202177
203178 Ok(InteractivePrinter {
@@ -206,26 +181,22 @@ impl<'a> InteractivePrinter<'a> {
206181 config,
207182 decorations,
208183 content_type: input.reader.content_type,
209− ansi_style: AnsiStyle::new(),
184+ ansi_prefix_sgr: String::new(),
210185 #[cfg(feature = "git")]
211186 line_changes,
212− highlighter_from_set,
187+ highlighter,
188+ syntax_set: &assets.syntax_set,
213189 background_color_highlight,
214190 })
215191 }
216192
217− fn print_horizontal_line_term(&mut self, handle: &mut dyn Write, style: Style) -> Result<()> {
218− writeln!(
219− handle,
220− "{}",
221− style.paint("─".repeat(self.config.term_width))
222− )?;
223− Ok(())
224− }
225−
226193 fn print_horizontal_line(&mut self, handle: &mut dyn Write, grid_char: char) -> Result<()> {
227194 if self.panel_width == 0 {
228− self.print_horizontal_line_term(handle, self.colors.grid)?;
195+ writeln!(
196+ handle,
197+ "{}",
198+ self.colors.grid.paint("─".repeat(self.config.term_width))
199+ )?;
229200 } else {
230201 let hline = "─".repeat(self.config.term_width - (self.panel_width + 1));
231202 let hline = format!("{}{}{}", "─".repeat(self.panel_width), grid_char, hline);
@@ -237,44 +208,29 @@ impl<'a> InteractivePrinter<'a> {
237208
238209 fn create_fake_panel(&self, text: &str) -> String {
239210 if self.panel_width == 0 {
240− return "".to_string();
241− }
242−
243− let text_truncated: String = text.chars().take(self.panel_width - 1).collect();
244− let text_filled: String = format!(
245− "{}{}",
246− text_truncated,
247− " ".repeat(self.panel_width - 1 - text_truncated.len())
248− );
249− if self.config.style_components.grid() {
250− format!("{} │ ", text_filled)
211+ "".to_string()
251212 } else {
252− text_filled
253− }
254− }
255−
256− fn print_header_component_indent(&mut self, handle: &mut dyn Write) -> std::io::Result<()> {
257− if self.config.style_components.grid() {
258− write!(
259− handle,
213+ let text_truncated: String = text.chars().take(self.panel_width - 1).collect();
214+ let text_filled: String = format!(
260215 "{}{}",
261− " ".repeat(self.panel_width),
262− self.colors
263− .grid
264− .paint(if self.panel_width > 0 { "│ " } else { "" }),
265− )
266− } else {
267− write!(handle, "{}", " ".repeat(self.panel_width))
216+ text_truncated,
217+ " ".repeat(self.panel_width - 1 - text_truncated.len())
218+ );
219+ if self.config.style_components.grid() {
220+ format!("{} │ ", text_filled)
221+ } else {
222+ text_filled
223+ }
268224 }
269225 }
270226
271227 fn preprocess(&self, text: &str, cursor: &mut usize) -> String {
272228 if self.config.tab_width > 0 {
273− return expand_tabs(text, self.config.tab_width, cursor);
229+ expand_tabs(text, self.config.tab_width, cursor)
230+ } else {
231+ *cursor += text.len();
232+ text.to_string()
274233 }
275−
276− *cursor += text.len();
277− text.to_string()
278234 }
279235}
280236
@@ -285,10 +241,6 @@ impl<'a> Printer for InteractivePrinter<'a> {
285241 input: &OpenedInput,
286242 add_header_padding: bool,
287243 ) -> Result<()> {
288− if add_header_padding && self.config.style_components.rule() {
289− self.print_horizontal_line_term(handle, self.colors.rule)?;
290− }
291−
292244 if !self.config.style_components.header() {
293245 if Some(ContentType::BINARY) == self.content_type && !self.config.show_nonprintable {
294246 writeln!(
@@ -305,6 +257,24 @@ impl<'a> Printer for InteractivePrinter<'a> {
305257 return Ok(());
306258 }
307259
260+ if self.config.style_components.grid() {
261+ self.print_horizontal_line(handle, '┬')?;
262+
263+ write!(
264+ handle,
265+ "{}{}",
266+ " ".repeat(self.panel_width),
267+ self.colors
268+ .grid
269+ .paint(if self.panel_width > 0 { "│ " } else { "" }),
270+ )?;
271+ } else {
272+ if add_header_padding {
273+ writeln!(handle)?;
274+ }
275+ write!(handle, "{}", " ".repeat(self.panel_width))?;
276+ }
277+
308278 let mode = match self.content_type {
309279 Some(ContentType::BINARY) => " <BINARY>",
310280 Some(ContentType::UTF_16LE) => " <UTF-16LE>",
@@ -314,60 +284,17 @@ impl<'a> Printer for InteractivePrinter<'a> {
314284 };
315285
316286 let description = &input.description;
317− let metadata = &input.metadata;
318−
319− // We use this iterator to have a deterministic order for
320− // header components. HashSet has arbitrary order, but Vec is ordered.
321− let header_components: Vec<StyleComponent> = [
322− (
323− StyleComponent::HeaderFilename,
324− self.config.style_components.header_filename(),
325− ),
326− (
327− StyleComponent::HeaderFilesize,
328− self.config.style_components.header_filesize(),
329− ),
330− ]
331− .iter()
332− .filter(|(_, is_enabled)| *is_enabled)
333− .map(|(component, _)| *component)
334− .collect();
335−
336− // Print the cornering grid before the first header component
337− if self.config.style_components.grid() {
338− self.print_horizontal_line(handle, '┬')?;
339− } else {
340− // Only pad space between files, if we haven't already drawn a horizontal rule
341− if add_header_padding && !self.config.style_components.rule() {
342− writeln!(handle)?;
343− }
344− }
345−
346− header_components.iter().try_for_each(|component| {
347− self.print_header_component_indent(handle)?;
348287
349− match component {
350− StyleComponent::HeaderFilename => writeln!(
351− handle,
352− "{}{}{}",
353− description
354− .kind()
355− .map(|kind| format!("{}: ", kind))
356− .unwrap_or_else(|| "".into()),
357− self.colors.header_value.paint(description.title()),
358− mode
359− ),
360−
361− StyleComponent::HeaderFilesize => {
362− let bsize = metadata
363− .size
364− .map(|s| format!("{}", ByteSize(s)))
365− .unwrap_or_else(|| "-".into());
366− writeln!(handle, "Size: {}", self.colors.header_value.paint(bsize))
367− }
368− _ => Ok(()),
369− }
370− })?;
288+ writeln!(
289+ handle,
290+ "{}{}{}",
291+ description
292+ .kind()
293+ .map(|kind| format!("{}: ", kind))
294+ .unwrap_or("".into()),
295+ self.colors.filename.paint(description.title()),
296+ mode
297+ )?;
371298
372299 if self.config.style_components.grid() {
373300 if self.content_type.map_or(false, |c| c.is_text()) || self.config.show_nonprintable {
@@ -422,44 +349,30 @@ impl<'a> Printer for InteractivePrinter<'a> {
422349 line_buffer: &[u8],
423350 ) -> Result<()> {
424351 let line = if self.config.show_nonprintable {
425− replace_nonprintable(line_buffer, self.config.tab_width)
352+ replace_nonprintable(&line_buffer, self.config.tab_width)
426353 } else {
427354 match self.content_type {
428355 Some(ContentType::BINARY) | None => {
429356 return Ok(());
430357 }
431358 Some(ContentType::UTF_16LE) => UTF_16LE
432− .decode(line_buffer, DecoderTrap::Replace)
359+ .decode(&line_buffer, DecoderTrap::Replace)
433360 .map_err(|_| "Invalid UTF-16LE")?,
434361 Some(ContentType::UTF_16BE) => UTF_16BE
435− .decode(line_buffer, DecoderTrap::Replace)
362+ .decode(&line_buffer, DecoderTrap::Replace)
436363 .map_err(|_| "Invalid UTF-16BE")?,
437− _ => String::from_utf8_lossy(line_buffer).to_string(),
364+ _ => String::from_utf8_lossy(&line_buffer).to_string(),
438365 }
439366 };
440367
441368 let regions = {
442− let highlighter_from_set = match self.highlighter_from_set {
443− Some(ref mut highlighter_from_set) => highlighter_from_set,
369+ let highlighter = match self.highlighter {
370+ Some(ref mut highlighter) => highlighter,
444371 _ => {
445372 return Ok(());
446373 }
447374 };
448−
449− // skip syntax highlighting on long lines
450− let too_long = line.len() > 1024 * 16;
451−
452− let for_highlighting: &str = if too_long { "\n" } else { &line };
453−
454− let mut highlighted_line = highlighter_from_set
455− .highlighter
456− .highlight_line(for_highlighting, highlighter_from_set.syntax_set)?;
457−
458− if too_long {
459− highlighted_line[0].1 = &line;
460− }
461−
462− highlighted_line
375+ highlighter.highlight(line.as_ref(), self.syntax_set)
463376 };
464377
465378 if out_of_range {
@@ -475,10 +388,6 @@ impl<'a> Printer for InteractivePrinter<'a> {
475388 let highlight_this_line =
476389 self.config.highlighted_lines.0.check(line_number) == RangeCheckResult::InRange;
477390
478− if highlight_this_line && self.config.theme == "ansi" {
479− self.ansi_style.update("^[4m");
480− }
481−
482391 let background_color = self
483392 .background_color_highlight
484393 .filter(|_| highlight_this_line);
@@ -488,7 +397,8 @@ impl<'a> Printer for InteractivePrinter<'a> {
488397 let decorations = self
489398 .decorations
490399 .iter()
491− .map(|d| d.generate(line_number, false, self));
400+ .map(|ref d| d.generate(line_number, false, self))
401+ .collect::<Vec<_>>();
492402
493403 for deco in decorations {
494404 write!(handle, "{} ", deco.text)?;
@@ -497,72 +407,73 @@ impl<'a> Printer for InteractivePrinter<'a> {
497407 }
498408
499409 // Line contents.
500− if matches!(self.config.wrapping_mode, WrappingMode::NoWrapping(_)) {
410+ if self.config.wrapping_mode == WrappingMode::NoWrapping {
501411 let true_color = self.config.true_color;
502412 let colored_output = self.config.colored_output;
503413 let italics = self.config.use_italic_text;
504414
505− for &(style, region) in &regions {
506− let ansi_iterator = AnsiCodeIterator::new(region);
507− for chunk in ansi_iterator {
508− match chunk {
509− // ANSI escape passthrough.
510− (ansi, true) => {
511− self.ansi_style.update(ansi);
512− write!(handle, "{}", ansi)?;
513− }
514−
515− // Regular text.
516− (text, false) => {
517− let text = &*self.preprocess(text, &mut cursor_total);
518− let text_trimmed = text.trim_end_matches(|c| c == '\r' || c == '\n');
519−
520− write!(
521− handle,
522− "{}",
523− as_terminal_escaped(
524− style,
525− &format!("{}{}", self.ansi_style, text_trimmed),
526− true_color,
527− colored_output,
528− italics,
529− background_color
530− )
531− )?;
415+ for &(style, region) in regions.iter() {
416+ let text = &*self.preprocess(region, &mut cursor_total);
417+ let text_trimmed = text.trim_end_matches(|c| c == '\r' || c == '\n');
418+ write!(
419+ handle,
420+ "{}",
421+ as_terminal_escaped(
422+ style,
423+ text_trimmed,
424+ true_color,
425+ colored_output,
426+ italics,
427+ background_color
428+ )
429+ )?;
532430
533− if text.len() != text_trimmed.len() {
534− if let Some(background_color) = background_color {
535− let ansi_style = Style {
536− background: to_ansi_color(background_color, true_color),
537− ..Default::default()
538− };
539−
540− let width = if cursor_total <= cursor_max {
541− cursor_max - cursor_total + 1
542− } else {
543− 0
544− };
545− write!(handle, "{}", ansi_style.paint(" ".repeat(width)))?;
546− }
547− write!(handle, "{}", &text[text_trimmed.len()..])?;
548− }
549− }
431+ if text.len() != text_trimmed.len() {
432+ if let Some(background_color) = background_color {
433+ let mut ansi_style = Style::default();
434+ ansi_style.background = Some(to_ansi_color(background_color, true_color));
435+ let width = if cursor_total <= cursor_max {
436+ cursor_max - cursor_total + 1
437+ } else {
438+ 0
439+ };
440+ write!(handle, "{}", ansi_style.paint(" ".repeat(width)))?;
550441 }
442+ write!(handle, "{}", &text[text_trimmed.len()..])?;
551443 }
552444 }
553445
554− if !self.config.style_components.plain() && line.bytes().next_back() != Some(b'\n') {
446+ if line.bytes().next_back() != Some(b'\n') {
555447 writeln!(handle)?;
556448 }
557449 } else {
558− for &(style, region) in &regions {
450+ for &(style, region) in regions.iter() {
559451 let ansi_iterator = AnsiCodeIterator::new(region);
452+ let mut ansi_prefix: String = String::new();
560453 for chunk in ansi_iterator {
561454 match chunk {
562455 // ANSI escape passthrough.
563− (ansi, true) => {
564− self.ansi_style.update(ansi);
565− write!(handle, "{}", ansi)?;
456+ (text, true) => {
457+ let is_ansi_csi = text.starts_with("\x1B[");
458+
459+ if is_ansi_csi && text.ends_with('m') {
460+ // It's an ANSI SGR sequence.
461+ // We should be mostly safe to just append these together.
462+ ansi_prefix.push_str(text);
463+ if text == "\x1B[0m" {
464+ self.ansi_prefix_sgr = "\x1B[0m".to_owned();
465+ } else {
466+ self.ansi_prefix_sgr.push_str(text);
467+ }
468+ } else if is_ansi_csi {
469+ // It's a regular CSI sequence.
470+ // We should be mostly safe to just append these together.
471+ ansi_prefix.push_str(text);
472+ } else {
473+ // It's probably a VT100 code.
474+ // Passing it through is the safest bet.
475+ write!(handle, "{}", text)?;
476+ }
566477 }
567478
568479 // Regular text.
@@ -595,7 +506,7 @@ impl<'a> Printer for InteractivePrinter<'a> {
595506 "{} ",
596507 self.decorations
597508 .iter()
598− .map(|d| d
509+ .map(|ref d| d
599510 .generate(line_number, true, self)
600511 .text)
601512 .collect::<Vec<String>>()
@@ -612,7 +523,10 @@ impl<'a> Printer for InteractivePrinter<'a> {
612523 "{}\n{}",
613524 as_terminal_escaped(
614525 style,
615− &*format!("{}{}", self.ansi_style, line_buf),
526+ &*format!(
527+ "{}{}{}",
528+ self.ansi_prefix_sgr, ansi_prefix, line_buf
529+ ),
616530 self.config.true_color,
617531 self.config.colored_output,
618532 self.config.use_italic_text,
@@ -638,23 +552,28 @@ impl<'a> Printer for InteractivePrinter<'a> {
638552 "{}",
639553 as_terminal_escaped(
640554 style,
641− &*format!("{}{}", self.ansi_style, line_buf),
555+ &*format!(
556+ "{}{}{}",
557+ self.ansi_prefix_sgr, ansi_prefix, line_buf
558+ ),
642559 self.config.true_color,
643560 self.config.colored_output,
644561 self.config.use_italic_text,
645562 background_color
646563 )
647564 )?;
565+
566+ // Clear the ANSI prefix buffer.
567+ ansi_prefix.clear();
648568 }
649569 }
650570 }
651571 }
652572
653573 if let Some(background_color) = background_color {
654− let ansi_style = Style {
655− background: to_ansi_color(background_color, self.config.true_color),
656− ..Default::default()
657− };
574+ let mut ansi_style = Style::default();
575+ ansi_style.background =
576+ Some(to_ansi_color(background_color, self.config.true_color));
658577
659578 write!(
660579 handle,
@@ -665,11 +584,6 @@ impl<'a> Printer for InteractivePrinter<'a> {
665584 writeln!(handle)?;
666585 }
667586
668− if highlight_this_line && self.config.theme == "ansi" {
669− self.ansi_style.update("^[24m");
670− write!(handle, "\x1B[24m")?;
671− }
672−
673587 Ok(())
674588 }
675589}
@@ -679,8 +593,7 @@ const DEFAULT_GUTTER_COLOR: u8 = 238;
679593#[derive(Debug, Default)]
680594pub struct Colors {
681595 pub grid: Style,
682− pub rule: Style,
683− pub header_value: Style,
596+ pub filename: Style,
684597 pub git_added: Style,
685598 pub git_removed: Style,
686599 pub git_modified: Style,
@@ -693,27 +606,19 @@ impl Colors {
693606 }
694607
695608 fn colored(theme: &Theme, true_color: bool) -> Self {
696− let gutter_style = Style {
697− foreground: match theme.settings.gutter_foreground {
698− // If the theme provides a gutter foreground color, use it.
699− // Note: It might be the special value #00000001, in which case
700− // to_ansi_color returns None and we use an empty Style
701− // (resulting in the terminal's default foreground color).
702− Some(c) => to_ansi_color(c, true_color),
703− // Otherwise, use a specific fallback color.
704− None => Some(Fixed(DEFAULT_GUTTER_COLOR)),
705− },
706− ..Style::default()
707− };
609+ let gutter_color = theme
610+ .settings
611+ .gutter_foreground
612+ .map(|c| to_ansi_color(c, true_color))
613+ .unwrap_or(Fixed(DEFAULT_GUTTER_COLOR));
708614
709615 Colors {
710− grid: gutter_style,
711− rule: gutter_style,
712− header_value: Style::new().bold(),
616+ grid: gutter_color.normal(),
617+ filename: Style::new().bold(),
713618 git_added: Green.normal(),
714619 git_removed: Red.normal(),
715620 git_modified: Yellow.normal(),
716− line_number: gutter_style,
621+ line_number: gutter_color.normal(),
717622 }
718623 }
719624}
src/style.rs+4−37
@@ -3,21 +3,16 @@ use std::str::FromStr;
33
44use crate::error::*;
55
6−#[non_exhaustive]
76#[derive(Debug, Eq, PartialEq, Copy, Clone, Hash)]
87pub enum StyleComponent {
98 Auto,
109 #[cfg(feature = "git")]
1110 Changes,
1211 Grid,
13− Rule,
1412 Header,
15− HeaderFilename,
16− HeaderFilesize,
1713 LineNumbers,
1814 Snip,
1915 Full,
20− Default,
2116 Plain,
2217}
2318
@@ -26,7 +21,7 @@ impl StyleComponent {
2621 match self {
2722 StyleComponent::Auto => {
2823 if interactive_terminal {
29− StyleComponent::Default.components(interactive_terminal)
24+ StyleComponent::Full.components(interactive_terminal)
3025 } else {
3126 StyleComponent::Plain.components(interactive_terminal)
3227 }
@@ -34,26 +29,14 @@ impl StyleComponent {
3429 #[cfg(feature = "git")]
3530 StyleComponent::Changes => &[StyleComponent::Changes],
3631 StyleComponent::Grid => &[StyleComponent::Grid],
37− StyleComponent::Rule => &[StyleComponent::Rule],
38− StyleComponent::Header => &[StyleComponent::HeaderFilename],
39− StyleComponent::HeaderFilename => &[StyleComponent::HeaderFilename],
40− StyleComponent::HeaderFilesize => &[StyleComponent::HeaderFilesize],
32+ StyleComponent::Header => &[StyleComponent::Header],
4133 StyleComponent::LineNumbers => &[StyleComponent::LineNumbers],
4234 StyleComponent::Snip => &[StyleComponent::Snip],
4335 StyleComponent::Full => &[
4436 #[cfg(feature = "git")]
4537 StyleComponent::Changes,
4638 StyleComponent::Grid,
47− StyleComponent::HeaderFilename,
48− StyleComponent::HeaderFilesize,
49− StyleComponent::LineNumbers,
50− StyleComponent::Snip,
51− ],
52− StyleComponent::Default => &[
53− #[cfg(feature = "git")]
54− StyleComponent::Changes,
55− StyleComponent::Grid,
56− StyleComponent::HeaderFilename,
39+ StyleComponent::Header,
5740 StyleComponent::LineNumbers,
5841 StyleComponent::Snip,
5942 ],
@@ -71,14 +54,10 @@ impl FromStr for StyleComponent {
7154 #[cfg(feature = "git")]
7255 "changes" => Ok(StyleComponent::Changes),
7356 "grid" => Ok(StyleComponent::Grid),
74− "rule" => Ok(StyleComponent::Rule),
7557 "header" => Ok(StyleComponent::Header),
76− "header-filename" => Ok(StyleComponent::HeaderFilename),
77− "header-filesize" => Ok(StyleComponent::HeaderFilesize),
7858 "numbers" => Ok(StyleComponent::LineNumbers),
7959 "snip" => Ok(StyleComponent::Snip),
8060 "full" => Ok(StyleComponent::Full),
81− "default" => Ok(StyleComponent::Default),
8261 "plain" => Ok(StyleComponent::Plain),
8362 _ => Err(format!("Unknown style '{}'", s).into()),
8463 }
@@ -102,20 +81,8 @@ impl StyleComponents {
10281 self.0.contains(&StyleComponent::Grid)
10382 }
10483
105− pub fn rule(&self) -> bool {
106− self.0.contains(&StyleComponent::Rule)
107− }
108−
10984 pub fn header(&self) -> bool {
110− self.header_filename() || self.header_filesize()
111− }
112−
113− pub fn header_filename(&self) -> bool {
114− self.0.contains(&StyleComponent::HeaderFilename)
115− }
116−
117− pub fn header_filesize(&self) -> bool {
118− self.0.contains(&StyleComponent::HeaderFilesize)
85+ self.0.contains(&StyleComponent::Header)
11986 }
12087
12188 pub fn numbers(&self) -> bool {
src/syntax_mapping.rs+3−129
@@ -1,36 +1,18 @@
11use std::path::Path;
22
33use crate::error::Result;
4−use ignored_suffixes::IgnoredSuffixes;
54
65use globset::{Candidate, GlobBuilder, GlobMatcher};
76
8−pub mod ignored_suffixes;
9−
107#[derive(Debug, Clone, Copy, PartialEq)]
11−#[non_exhaustive]
128pub enum MappingTarget<'a> {
13− /// For mapping a path to a specific syntax.
149 MapTo(&'a str),
15−
16− /// For mapping a path (typically an extension-less file name) to an unknown
17− /// syntax. This typically means later using the contents of the first line
18− /// of the file to determine what syntax to use.
1910 MapToUnknown,
20−
21− /// For mapping a file extension (e.g. `*.conf`) to an unknown syntax. This
22− /// typically means later using the contents of the first line of the file
23− /// to determine what syntax to use. However, if a syntax handles a file
24− /// name that happens to have the given file extension (e.g. `resolv.conf`),
25− /// then that association will have higher precedence, and the mapping will
26− /// be ignored.
27− MapExtensionToUnknown,
2811}
2912
3013#[derive(Debug, Clone, Default)]
3114pub struct SyntaxMapping<'a> {
3215 mappings: Vec<(GlobMatcher, MappingTarget<'a>)>,
33− pub(crate) ignored_suffixes: IgnoredSuffixes<'a>,
3416}
3517
3618impl<'a> SyntaxMapping<'a> {
@@ -41,10 +23,6 @@ impl<'a> SyntaxMapping<'a> {
4123 pub fn builtin() -> SyntaxMapping<'a> {
4224 let mut mapping = Self::empty();
4325 mapping.insert("*.h", MappingTarget::MapTo("C++")).unwrap();
44− mapping
45− .insert(".clang-format", MappingTarget::MapTo("YAML"))
46− .unwrap();
47− mapping.insert("*.fs", MappingTarget::MapTo("F#")).unwrap();
4826 mapping
4927 .insert("build", MappingTarget::MapToUnknown)
5028 .unwrap();
@@ -63,112 +41,12 @@ impl<'a> SyntaxMapping<'a> {
6341 MappingTarget::MapTo("Bourne Again Shell (bash)"),
6442 )
6543 .unwrap();
66− mapping
67− .insert("*.pac", MappingTarget::MapTo("JavaScript (Babel)"))
68− .unwrap();
6944
7045 // See #1008
7146 mapping
7247 .insert("rails", MappingTarget::MapToUnknown)
7348 .unwrap();
7449
75− // Nginx and Apache syntax files both want to style all ".conf" files
76− // see #1131 and #1137
77− mapping
78− .insert("*.conf", MappingTarget::MapExtensionToUnknown)
79− .unwrap();
80−
81− for glob in &[
82− "/etc/nginx/**/*.conf",
83− "/etc/nginx/sites-*/**/*",
84− "nginx.conf",
85− "mime.types",
86− ] {
87− mapping.insert(glob, MappingTarget::MapTo("nginx")).unwrap();
88− }
89−
90− for glob in &[
91− "/etc/apache2/**/*.conf",
92− "/etc/apache2/sites-*/**/*",
93− "httpd.conf",
94− ] {
95− mapping
96− .insert(glob, MappingTarget::MapTo("Apache Conf"))
97− .unwrap();
98− }
99−
100− for glob in &[
101− "**/systemd/**/*.conf",
102− "**/systemd/**/*.example",
103− "*.automount",
104− "*.device",
105− "*.dnssd",
106− "*.link",
107− "*.mount",
108− "*.netdev",
109− "*.network",
110− "*.nspawn",
111− "*.path",
112− "*.service",
113− "*.scope",
114− "*.slice",
115− "*.socket",
116− "*.swap",
117− "*.target",
118− "*.timer",
119− ] {
120− mapping.insert(glob, MappingTarget::MapTo("INI")).unwrap();
121− }
122−
123− // unix mail spool
124− for glob in &["/var/spool/mail/*", "/var/mail/*"] {
125− mapping.insert(glob, MappingTarget::MapTo("Email")).unwrap()
126− }
127−
128− // pacman hooks
129− mapping
130− .insert("*.hook", MappingTarget::MapTo("INI"))
131− .unwrap();
132−
133− // Global git config files rooted in `$XDG_CONFIG_HOME/git/` or `$HOME/.config/git/`
134− // See e.g. https://git-scm.com/docs/git-config#FILES
135− if let Some(xdg_config_home) =
136− std::env::var_os("XDG_CONFIG_HOME").filter(|val| !val.is_empty())
137− {
138− insert_git_config_global(&mut mapping, &xdg_config_home);
139− }
140− if let Some(default_config_home) = std::env::var_os("HOME")
141− .filter(|val| !val.is_empty())
142− .map(|home| Path::new(&home).join(".config"))
143− {
144− insert_git_config_global(&mut mapping, &default_config_home);
145− }
146−
147− fn insert_git_config_global(mapping: &mut SyntaxMapping, config_home: impl AsRef<Path>) {
148− let git_config_path = config_home.as_ref().join("git");
149−
150− mapping
151− .insert(
152− &git_config_path.join("config").to_string_lossy(),
153− MappingTarget::MapTo("Git Config"),
154− )
155− .ok();
156−
157− mapping
158− .insert(
159− &git_config_path.join("ignore").to_string_lossy(),
160− MappingTarget::MapTo("Git Ignore"),
161− )
162− .ok();
163−
164− mapping
165− .insert(
166− &git_config_path.join("attributes").to_string_lossy(),
167− MappingTarget::MapTo("Git Attributes"),
168− )
169− .ok();
170− }
171−
17250 mapping
17351 }
17452
@@ -186,11 +64,11 @@ impl<'a> SyntaxMapping<'a> {
18664 }
18765
18866 pub(crate) fn get_syntax_for(&self, path: impl AsRef<Path>) -> Option<MappingTarget<'a>> {
189− let candidate = Candidate::new(&path);
190− let candidate_filename = path.as_ref().file_name().map(Candidate::new);
67+ let candidate = Candidate::new(path.as_ref());
68+ let canddidate_filename = path.as_ref().file_name().map(Candidate::new);
19169 for (ref glob, ref syntax) in self.mappings.iter().rev() {
19270 if glob.is_match_candidate(&candidate)
193− || candidate_filename
71+ || canddidate_filename
19472 .as_ref()
19573 .map_or(false, |filename| glob.is_match_candidate(filename))
19674 {
@@ -199,10 +77,6 @@ impl<'a> SyntaxMapping<'a> {
19977 }
20078 None
20179 }
202−
203− pub fn insert_ignored_suffix(&mut self, suffix: &'a str) {
204− self.ignored_suffixes.add_suffix(suffix);
205− }
20680}
20781
20882#[test]
src/syntax_mapping/ignored_suffixes.rsdeleted−107
@@ -1,107 +0,0 @@
1−use std::ffi::OsStr;
2−use std::fmt::Debug;
3−use std::path::Path;
4−
5−use crate::error::*;
6−
7−#[derive(Debug, Clone)]
8−pub struct IgnoredSuffixes<'a> {
9− values: Vec<&'a str>,
10−}
11−
12−impl Default for IgnoredSuffixes<'_> {
13− fn default() -> Self {
14− Self {
15− values: vec![
16− // Editor etc backups
17− "~",
18− ".bak",
19− ".old",
20− ".orig",
21− // Debian and derivatives apt/dpkg/ucf backups
22− ".dpkg-dist",
23− ".dpkg-old",
24− ".ucf-dist",
25− ".ucf-new",
26− ".ucf-old",
27− // Red Hat and derivatives rpm backups
28− ".rpmnew",
29− ".rpmorig",
30− ".rpmsave",
31− // Build system input/template files
32− ".in",
33− ],
34− }
35− }
36−}
37−
38−impl<'a> IgnoredSuffixes<'a> {
39− pub fn add_suffix(&mut self, suffix: &'a str) {
40− self.values.push(suffix)
41− }
42−
43− pub fn strip_suffix(&self, file_name: &'a str) -> Option<&'a str> {
44− for suffix in self.values.iter() {
45− if let Some(stripped_file_name) = file_name.strip_suffix(suffix) {
46− return Some(stripped_file_name);
47− }
48− }
49− None
50− }
51−
52− /// If we find an ignored suffix on the file name, e.g. '~', we strip it and
53− /// then try again without it.
54− pub fn try_with_stripped_suffix<T, F>(&self, file_name: &'a OsStr, func: F) -> Result<Option<T>>
55− where
56− F: Fn(&'a OsStr) -> Result<Option<T>>,
57− {
58− if let Some(file_str) = Path::new(file_name).to_str() {
59− if let Some(stripped_file_name) = self.strip_suffix(file_str) {
60− return func(OsStr::new(stripped_file_name));
61− }
62− }
63− Ok(None)
64− }
65−}
66−
67−#[test]
68−fn internal_suffixes() {
69− let ignored_suffixes = IgnoredSuffixes::default();
70−
71− let file_names = ignored_suffixes
72− .values
73− .iter()
74− .map(|suffix| format!("test.json{}", suffix));
75− for file_name_str in file_names {
76− let file_name = OsStr::new(&file_name_str);
77− let expected_stripped_file_name = OsStr::new("test.json");
78− let stripped_file_name = ignored_suffixes
79− .try_with_stripped_suffix(file_name, |stripped_file_name| Ok(Some(stripped_file_name)));
80− assert_eq!(
81− expected_stripped_file_name,
82− stripped_file_name.unwrap().unwrap()
83− );
84− }
85−}
86−
87−#[test]
88−fn external_suffixes() {
89− let mut ignored_suffixes = IgnoredSuffixes::default();
90− ignored_suffixes.add_suffix(".development");
91− ignored_suffixes.add_suffix(".production");
92−
93− let file_names = ignored_suffixes
94− .values
95− .iter()
96− .map(|suffix| format!("test.json{}", suffix));
97− for file_name_str in file_names {
98− let file_name = OsStr::new(&file_name_str);
99− let expected_stripped_file_name = OsStr::new("test.json");
100− let stripped_file_name = ignored_suffixes
101− .try_with_stripped_suffix(file_name, |stripped_file_name| Ok(Some(stripped_file_name)));
102− assert_eq!(
103− expected_stripped_file_name,
104− stripped_file_name.unwrap().unwrap()
105− );
106− }
107−}
src/terminal.rs+9−19
@@ -3,13 +3,13 @@ use ansi_term::{self, Style};
33
44use syntect::highlighting::{self, FontStyle};
55
6−pub fn to_ansi_color(color: highlighting::Color, true_color: bool) -> Option<ansi_term::Color> {
6+pub fn to_ansi_color(color: highlighting::Color, true_color: bool) -> ansi_term::Color {
77 if color.a == 0 {
88 // Themes can specify one of the user-configurable terminal colors by
99 // encoding them as #RRGGBBAA with AA set to 00 (transparent) and RR set
10− // to the 8-bit color palette number. The built-in themes ansi, base16,
11− // and base16-256 use this.
12− Some(match color.r {
10+ // to the 8-bit color palette number. The built-in themes ansi-light,
11+ // ansi-dark, and base16 use this.
12+ match color.r {
1313 // For the first 8 colors, use the Color enum to produce ANSI escape
1414 // sequences using codes 30-37 (foreground) and 40-47 (background).
1515 // For example, red foreground is \x1b[31m. This works on terminals
@@ -31,18 +31,11 @@ pub fn to_ansi_color(color: highlighting::Color, true_color: bool) -> Option<ans
3131 // 90-97 (foreground) and 100-107 (background), we should use those
3232 // for values 0x08 to 0x0f and only use Fixed for 0x10 to 0xff.
3333 n => Fixed(n),
34− })
35− } else if color.a == 1 {
36− // Themes can specify the terminal's default foreground/background color
37− // (i.e. no escape sequence) using the encoding #RRGGBBAA with AA set to
38− // 01. The built-in theme ansi uses this.
39− None
34+ }
4035 } else if true_color {
41− Some(RGB(color.r, color.g, color.b))
36+ RGB(color.r, color.g, color.b)
4237 } else {
43− Some(Fixed(ansi_colours::ansi256_from_rgb((
44− color.r, color.g, color.b,
45− ))))
38+ Fixed(ansi_colours::ansi256_from_rgb((color.r, color.g, color.b)))
4639 }
4740}
4841
@@ -61,10 +54,7 @@ pub fn as_terminal_escaped(
6154 let mut style = if !colored {
6255 Style::default()
6356 } else {
64− let mut color = Style {
65− foreground: to_ansi_color(style.foreground, true_color),
66− ..Style::default()
67− };
57+ let mut color = Style::from(to_ansi_color(style.foreground, true_color));
6858 if style.font_style.contains(FontStyle::BOLD) {
6959 color = color.bold();
7060 }
@@ -77,6 +67,6 @@ pub fn as_terminal_escaped(
7767 color
7868 };
7969
80− style.background = background_color.and_then(|c| to_ansi_color(c, true_color));
70+ style.background = background_color.map(|c| to_ansi_color(c, true_color));
8171 style.paint(text).to_string()
8272}
src/vscreen.rsdeleted−212
@@ -1,212 +0,0 @@
1−use std::fmt::{Display, Formatter};
2−
3−// Wrapper to avoid unnecessary branching when input doesn't have ANSI escape sequences.
4−pub struct AnsiStyle {
5− attributes: Option<Attributes>,
6−}
7−
8−impl AnsiStyle {
9− pub fn new() -> Self {
10− AnsiStyle { attributes: None }
11− }
12−
13− pub fn update(&mut self, sequence: &str) -> bool {
14− match &mut self.attributes {
15− Some(a) => a.update(sequence),
16− None => {
17− self.attributes = Some(Attributes::new());
18− self.attributes.as_mut().unwrap().update(sequence)
19− }
20− }
21− }
22−}
23−
24−impl Display for AnsiStyle {
25− fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
26− match self.attributes {
27− Some(ref a) => a.fmt(f),
28− None => Ok(()),
29− }
30− }
31−}
32−
33−struct Attributes {
34− foreground: String,
35− background: String,
36− underlined: String,
37−
38− /// The character set to use.
39− /// REGEX: `\^[()][AB0-3]`
40− charset: String,
41−
42− /// A buffer for unknown sequences.
43− unknown_buffer: String,
44−
45− /// ON: ^[1m
46− /// OFF: ^[22m
47− bold: String,
48−
49− /// ON: ^[2m
50− /// OFF: ^[22m
51− dim: String,
52−
53− /// ON: ^[4m
54− /// OFF: ^[24m
55− underline: String,
56−
57− /// ON: ^[3m
58− /// OFF: ^[23m
59− italic: String,
60−
61− /// ON: ^[9m
62− /// OFF: ^[29m
63− strike: String,
64−}
65−
66−impl Attributes {
67− pub fn new() -> Self {
68− Attributes {
69− foreground: "".to_owned(),
70− background: "".to_owned(),
71− underlined: "".to_owned(),
72− charset: "".to_owned(),
73− unknown_buffer: "".to_owned(),
74− bold: "".to_owned(),
75− dim: "".to_owned(),
76− underline: "".to_owned(),
77− italic: "".to_owned(),
78− strike: "".to_owned(),
79− }
80− }
81−
82− /// Update the attributes with an escape sequence.
83− /// Returns `false` if the sequence is unsupported.
84− pub fn update(&mut self, sequence: &str) -> bool {
85− let mut chars = sequence.char_indices().skip(1);
86−
87− if let Some((_, t)) = chars.next() {
88− match t {
89− '(' => self.update_with_charset('(', chars.map(|(_, c)| c)),
90− ')' => self.update_with_charset(')', chars.map(|(_, c)| c)),
91− '[' => {
92− if let Some((i, last)) = chars.last() {
93− // SAFETY: Always starts with ^[ and ends with m.
94− self.update_with_csi(last, &sequence[2..i])
95− } else {
96− false
97− }
98− }
99− _ => self.update_with_unsupported(sequence),
100− }
101− } else {
102− false
103− }
104− }
105−
106− fn sgr_reset(&mut self) {
107− self.foreground.clear();
108− self.background.clear();
109− self.underlined.clear();
110− self.bold.clear();
111− self.dim.clear();
112− self.underline.clear();
113− self.italic.clear();
114− self.strike.clear();
115− }
116−
117− fn update_with_sgr(&mut self, parameters: &str) -> bool {
118− let mut iter = parameters
119− .split(';')
120− .map(|p| if p.is_empty() { "0" } else { p })
121− .map(|p| p.parse::<u16>())
122− .map(|p| p.unwrap_or(0)); // Treat errors as 0.
123−
124− while let Some(p) = iter.next() {
125− match p {
126− 0 => self.sgr_reset(),
127− 1 => self.bold = format!("\x1B[{}m", parameters),
128− 2 => self.dim = format!("\x1B[{}m", parameters),
129− 3 => self.italic = format!("\x1B[{}m", parameters),
130− 4 => self.underline = format!("\x1B[{}m", parameters),
131− 23 => self.italic.clear(),
132− 24 => self.underline.clear(),
133− 22 => {
134− self.bold.clear();
135− self.dim.clear();
136− }
137− 30..=39 => self.foreground = Self::parse_color(p, &mut iter),
138− 40..=49 => self.background = Self::parse_color(p, &mut iter),
139− 58..=59 => self.underlined = Self::parse_color(p, &mut iter),
140− 90..=97 => self.foreground = Self::parse_color(p, &mut iter),
141− 100..=107 => self.foreground = Self::parse_color(p, &mut iter),
142− _ => {
143− // Unsupported SGR sequence.
144− // Be compatible and pretend one just wasn't was provided.
145− }
146− }
147− }
148−
149− true
150− }
151−
152− fn update_with_csi(&mut self, finalizer: char, sequence: &str) -> bool {
153− if finalizer == 'm' {
154− self.update_with_sgr(sequence)
155− } else {
156− false
157− }
158− }
159−
160− fn update_with_unsupported(&mut self, sequence: &str) -> bool {
161− self.unknown_buffer.push_str(sequence);
162− false
163− }
164−
165− fn update_with_charset(&mut self, kind: char, set: impl Iterator<Item = char>) -> bool {
166− self.charset = format!("\x1B{}{}", kind, set.take(1).collect::<String>());
167− true
168− }
169−
170− fn parse_color(color: u16, parameters: &mut dyn Iterator<Item = u16>) -> String {
171− match color % 10 {
172− 8 => match parameters.next() {
173− Some(5) /* 256-color */ => format!("\x1B[{};5;{}m", color, join(";", 1, parameters)),
174− Some(2) /* 24-bit color */ => format!("\x1B[{};2;{}m", color, join(";", 3, parameters)),
175− Some(c) => format!("\x1B[{};{}m", color, c),
176− _ => "".to_owned(),
177− },
178− 9 => "".to_owned(),
179− _ => format!("\x1B[{}m", color),
180− }
181− }
182−}
183−
184−impl Display for Attributes {
185− fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
186− write!(
187− f,
188− "{}{}{}{}{}{}{}{}{}",
189− self.foreground,
190− self.background,
191− self.underlined,
192− self.charset,
193− self.bold,
194− self.dim,
195− self.underline,
196− self.italic,
197− self.strike,
198− )
199− }
200−}
201−
202−fn join(
203− delimiter: &str,
204− limit: usize,
205− iterator: &mut dyn Iterator<Item = impl ToString>,
206−) -> String {
207− iterator
208− .take(limit)
209− .map(|i| i.to_string())
210− .collect::<Vec<String>>()
211− .join(delimiter)
212−}
src/wrapping.rs+2−3
@@ -1,12 +1,11 @@
11#[derive(Debug, Clone, Copy, PartialEq, Eq)]
22pub enum WrappingMode {
33 Character,
4− // The bool specifies whether wrapping has been explicitly disabled by the user via --wrap=never
5− NoWrapping(bool),
4+ NoWrapping,
65}
76
87impl Default for WrappingMode {
98 fn default() -> Self {
10− WrappingMode::NoWrapping(false)
9+ WrappingMode::NoWrapping
1110 }
1211}
tests/.gitattributes+9−8
@@ -1,12 +1,13 @@
11# force LF EOLs for test fixtures
22examples/** text=auto eol=lf
33snapshots/** text=auto eol=lf
4−syntax-tests/source/** text=auto eol=lf
5−syntax-tests/highlighted/** text=auto eol=lf
64
7−# Linguist overrides
8−benchmarks/** linguist-vendored
9−examples/** linguist-vendored
10−snapshots/** linguist-vendored
11−syntax-tests/highlighted/** linguist-vendored
12−syntax-tests/source/** linguist-vendored
5+# BAT/CMD files always need CRLF EOLs
6+*.[Bb][Aa][Tt] text eol=crlf
7+*.[Cc][Mm][Dd] text eol=crlf
8+
9+examples/* linguist-vendored
10+snapshots/* linguist-vendored
11+benchmarks/* linguist-vendored
12+benchmarks/test-src/* linguist-vendored
13+scripts/* linguist-vendored
tests/assets.rs+3−10
@@ -1,21 +1,17 @@
11use bat::assets::HighlightingAssets;
22
33/// This test ensures that we are not accidentally removing themes due to submodule updates.
4−/// It is 'ignore'd by default because it requires themes.bin to be up-to-date.
54#[test]
6−#[ignore]
75fn all_themes_are_present() {
86 let assets = HighlightingAssets::from_binary();
97
108 let mut themes: Vec<_> = assets.themes().collect();
11− themes.sort_unstable();
9+ themes.sort();
1210
1311 assert_eq!(
1412 themes,
1513 vec![
1614 "1337",
17− "Coldark-Cold",
18− "Coldark-Dark",
1915 "DarkNeon",
2016 "Dracula",
2117 "GitHub",
@@ -30,12 +26,9 @@ fn all_themes_are_present() {
3026 "Solarized (light)",
3127 "Sublime Snazzy",
3228 "TwoDark",
33− "Visual Studio Dark+",
34− "ansi",
29+ "ansi-dark",
30+ "ansi-light",
3531 "base16",
36− "base16-256",
37− "gruvbox-dark",
38− "gruvbox-light",
3932 "zenburn"
4033 ]
4134 );
tests/benchmarks/.gitignoredeleted−1
@@ -1 +0,0 @@
1−/benchmark-results
tests/benchmarks/comparison.shnew file+31
@@ -0,0 +1,31 @@
1+#!/bin/bash
2+
3+if ! which hyperfine > /dev/null 2>&1; then
4+ echo "'hyperfine' does not seem to be installed."
5+ echo "You can get it here: https://github.com/sharkdp/hyperfine"
6+ exit 1
7+fi
8+
9+SRC="test-src/jquery-3.3.1.js"
10+
11+
12+cmd_bat="bat --style=full --color=always --paging=never '$SRC'"
13+cmd_bat_simple="bat --plain --wrap=never --tabs=0 --color=always --paging=never '$SRC'"
14+cmd_pygmentize="pygmentize -g '$SRC'"
15+cmd_highlight="highlight -O truecolor '$SRC'"
16+cmd_ccat="ccat --color=always '$SRC'"
17+cmd_source_highlight="source-highlight --failsafe --infer-lang -f esc -i '$SRC'"
18+cmd_hicat="hicat '$SRC'"
19+cmd_coderay="coderay '$SRC'"
20+cmd_rouge="rougify '$SRC'"
21+
22+hyperfine --warmup 3 \
23+ "$cmd_bat" \
24+ "$cmd_bat_simple" \
25+ "$cmd_pygmentize" \
26+ "$cmd_highlight" \
27+ "$cmd_ccat" \
28+ "$cmd_source_highlight" \
29+ "$cmd_hicat" \
30+ "$cmd_coderay" \
31+ "$cmd_rouge" \
tests/benchmarks/highlighting-speed-src/grep-output-ansi-sequences.txtdeleted−2272

This diff is too big to show here.

tests/benchmarks/highlighting-speed-src/numpy_test_multiarray.pydeleted−8471

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-0.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-1.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-10.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-100.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-11.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-12.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-13.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-14.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-15.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-16.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-17.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-18.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-19.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-2.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-20.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-21.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-22.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-23.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-24.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-25.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-26.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-27.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-28.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-29.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-3.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-30.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-31.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-32.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-33.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-34.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-35.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-36.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-37.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-38.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-39.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-4.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-40.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-41.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-42.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-43.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-44.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-45.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-46.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-47.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-48.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-49.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-5.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-50.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-51.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-52.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-53.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-54.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-55.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-56.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-57.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-58.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-59.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-6.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-60.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-61.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-62.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-63.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-64.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-65.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-66.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-67.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-68.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-69.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-7.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-70.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-71.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-72.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-73.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-74.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-75.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-76.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-77.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-78.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-79.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-8.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-80.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-81.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-82.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-83.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-84.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-85.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-86.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-87.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-88.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-89.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-9.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-90.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-91.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-92.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-93.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-94.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-95.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-96.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-97.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-98.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/many-small-files/small-file-99.txtdeleted−1

This diff is too big to show here.

tests/benchmarks/run-benchmarks.shmode 100755 → 100644+17−139

This diff is too big to show here.

tests/benchmarks/startup-time-src/small-CpuInfo-file.cpuinfodeleted−1

This diff is too big to show here.

tests/benchmarks/startup-time-src/small-Markdown-file.mddeleted−3

This diff is too big to show here.

tests/benchmarks/highlighting-speed-src/jquery.js → tests/benchmarks/test-src/jquery-3.3.1.jsrenamed

The content is the same.

tests/benchmarks/test-src/jquery-3.3.1.min.jsnew file+2

This diff is too big to show here.

tests/benchmarks/highlighting-speed-src/miniz.c → tests/benchmarks/test-src/miniz.crenamed

The content is the same.

tests/examples/git/.config/git/configdeleted−3

This diff is too big to show here.

tests/examples/git/.gitconfigdeleted−3

This diff is too big to show here.

tests/examples/longline.jsondeleted−3

This diff is too big to show here.

tests/examples/nonprintable.txtdeleted

Binary file not shown.

tests/examples/regression_tests/first_line_fallback.invalid-syntaxdeleted−2

This diff is too big to show here.

tests/examples/test.json.suffixdeleted−1

This diff is too big to show here.

tests/examples/test.json~deleted−1

This diff is too big to show here.

tests/integration_tests.rs+13−856

This diff is too big to show here.

tests/mocked-pagers/moredeleted−2

This diff is too big to show here.

tests/mocked-pagers/more.batdeleted−1

This diff is too big to show here.

tests/mocked-pagers/mostdeleted−2

This diff is too big to show here.

tests/mocked-pagers/most.batdeleted−1

This diff is too big to show here.

tests/no_duplicate_extensions.rs+1−7

This diff is too big to show here.

tests/scripts/find-slow-to-highlight-files.py+2−2

This diff is too big to show here.

tests/scripts/license-checks.shdeleted−24

This diff is too big to show here.

tests/snapshot_tests.rs+1−11

This diff is too big to show here.

tests/snapshots/generate_snapshots.py+1−1

This diff is too big to show here.

tests/snapshots/output/changes.snapshot.txt−1

This diff is too big to show here.

tests/snapshots/output/changes_grid.snapshot.txt−1

This diff is too big to show here.

tests/snapshots/output/changes_grid_header.snapshot.txt−1

This diff is too big to show here.

tests/snapshots/output/changes_grid_header_numbers.snapshot.txt+22−23

This diff is too big to show here.

tests/snapshots/output/changes_grid_header_numbers_rule.snapshot.txtdeleted−27

This diff is too big to show here.

tests/snapshots/output/changes_grid_header_rule.snapshot.txtdeleted−27

This diff is too big to show here.

tests/snapshots/output/changes_grid_numbers.snapshot.txt+22−23

This diff is too big to show here.

tests/snapshots/output/changes_grid_numbers_rule.snapshot.txtdeleted−25

This diff is too big to show here.

tests/snapshots/output/changes_grid_rule.snapshot.txtdeleted−25

This diff is too big to show here.

tests/snapshots/output/changes_header.snapshot.txt−1

This diff is too big to show here.

tests/snapshots/output/changes_header_numbers.snapshot.txt+22−23

This diff is too big to show here.

tests/snapshots/output/changes_header_numbers_rule.snapshot.txtdeleted−24

This diff is too big to show here.

tests/snapshots/output/changes_header_rule.snapshot.txtdeleted−24

This diff is too big to show here.

tests/snapshots/output/changes_numbers.snapshot.txt+22−23

This diff is too big to show here.

tests/snapshots/output/changes_numbers_rule.snapshot.txtdeleted−23

This diff is too big to show here.

tests/snapshots/output/changes_rule.snapshot.txtdeleted−23

This diff is too big to show here.

tests/snapshots/output/full.snapshot.txt+22−24

This diff is too big to show here.

tests/snapshots/output/grid.snapshot.txt−1

This diff is too big to show here.

tests/snapshots/output/grid_header.snapshot.txt−1

This diff is too big to show here.

tests/snapshots/output/grid_header_numbers.snapshot.txt+22−23

This diff is too big to show here.

tests/snapshots/output/grid_header_numbers_rule.snapshot.txtdeleted−27

This diff is too big to show here.

tests/snapshots/output/grid_header_rule.snapshot.txtdeleted−27

This diff is too big to show here.

tests/snapshots/output/grid_numbers.snapshot.txt+22−23

This diff is too big to show here.

tests/snapshots/output/grid_numbers_rule.snapshot.txtdeleted−25

This diff is too big to show here.

tests/snapshots/output/grid_rule.snapshot.txtdeleted−25

This diff is too big to show here.

tests/snapshots/output/header.snapshot.txt−1

This diff is too big to show here.

tests/snapshots/output/header_numbers.snapshot.txt+22−23

This diff is too big to show here.

tests/snapshots/output/header_numbers_rule.snapshot.txtdeleted−24

This diff is too big to show here.

tests/snapshots/output/header_rule.snapshot.txtdeleted−24

This diff is too big to show here.

tests/snapshots/output/numbers.snapshot.txt+22−23

This diff is too big to show here.

tests/snapshots/output/numbers_rule.snapshot.txtdeleted−23

This diff is too big to show here.

tests/snapshots/output/plain.snapshot.txt−1

This diff is too big to show here.

tests/snapshots/output/rule.snapshot.txtdeleted−23

This diff is too big to show here.

tests/snapshots/sample.modified.rs−1

This diff is too big to show here.

tests/syntax-tests/BatTestCustomAssets.sublime-syntaxdeleted−21

This diff is too big to show here.

tests/syntax-tests/compare_highlighted_versions.pydeleted−65

This diff is too big to show here.

tests/syntax-tests/create_highlighted_versions.pydeleted−133

This diff is too big to show here.

tests/syntax-tests/highlighted/ARM Assembly/test.Sdeleted−55

This diff is too big to show here.

tests/syntax-tests/highlighted/ASP/test.aspdeleted−36

This diff is too big to show here.

tests/syntax-tests/highlighted/AWK/quicksort.awkdeleted−35

This diff is too big to show here.

tests/syntax-tests/highlighted/ActionScript/test.asdeleted−75

This diff is too big to show here.

tests/syntax-tests/highlighted/Apache/httpd.confdeleted−42

This diff is too big to show here.

tests/syntax-tests/highlighted/AppleScript/test.applescriptdeleted−25

This diff is too big to show here.

tests/syntax-tests/highlighted/AsciiDoc/test.adocdeleted−173

This diff is too big to show here.

tests/syntax-tests/highlighted/Assembly (x86_64)/test.nasmdeleted−86

This diff is too big to show here.

tests/syntax-tests/highlighted/Bash/batgrep.shdeleted−511

This diff is too big to show here.

tests/syntax-tests/highlighted/Bash/simple.shdeleted−72

This diff is too big to show here.

tests/syntax-tests/highlighted/BatTestCustomAssets/NoColorsUnlessCustomAssetsAreUsed.battestcustomassetsdeleted−2

This diff is too big to show here.

tests/syntax-tests/highlighted/Batch/build.batdeleted−59

This diff is too big to show here.

tests/syntax-tests/highlighted/BibTeX/test.bibdeleted−18

This diff is too big to show here.

tests/syntax-tests/highlighted/C-Sharp/Stack.csdeleted−64

This diff is too big to show here.

tests/syntax-tests/highlighted/C/test.cdeleted−62

This diff is too big to show here.

tests/syntax-tests/highlighted/CMake/CMakeLists.txtdeleted−16

This diff is too big to show here.

tests/syntax-tests/highlighted/CSS/style.cssdeleted−115

This diff is too big to show here.

tests/syntax-tests/highlighted/CSV/comma_in_quotes.csvdeleted−7

This diff is too big to show here.

tests/syntax-tests/highlighted/Cabal/semantic.cabaldeleted−247

This diff is too big to show here.

tests/syntax-tests/highlighted/Clojure/test.cljdeleted−58

This diff is too big to show here.

tests/syntax-tests/highlighted/CoffeeScript/coffeescript.coffeedeleted−391

This diff is too big to show here.

tests/syntax-tests/highlighted/Cpp/test.cppdeleted−79

This diff is too big to show here.

tests/syntax-tests/highlighted/CpuInfo/test.cpuinfodeleted−45

This diff is too big to show here.

tests/syntax-tests/highlighted/Crystal/test.crdeleted−117

This diff is too big to show here.

tests/syntax-tests/highlighted/D/test.ddeleted−44

This diff is too big to show here.

tests/syntax-tests/highlighted/Dart/inner_comment.dartdeleted−5

This diff is too big to show here.

tests/syntax-tests/highlighted/Dart/test.dartdeleted−133

This diff is too big to show here.

tests/syntax-tests/highlighted/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diffdeleted−353

This diff is too big to show here.

tests/syntax-tests/highlighted/Dockerfile/Dockerfiledeleted−19

This diff is too big to show here.

tests/syntax-tests/highlighted/DotENV/.envdeleted−57

This diff is too big to show here.

tests/syntax-tests/highlighted/Elixir/command.exdeleted−31

This diff is too big to show here.

tests/syntax-tests/highlighted/Elm/test.elmdeleted−137

This diff is too big to show here.

tests/syntax-tests/highlighted/Email/test.emldeleted−16

This diff is too big to show here.

tests/syntax-tests/highlighted/Erlang/bat_erlang.erldeleted−72

This diff is too big to show here.

tests/syntax-tests/highlighted/EtcGroup/test.groupdeleted−67

This diff is too big to show here.

tests/syntax-tests/highlighted/F#/string.fsdeleted−182

This diff is too big to show here.

tests/syntax-tests/highlighted/Fish/test.fishdeleted−77

This diff is too big to show here.

tests/syntax-tests/highlighted/Fortran (Fixed Form)/quicksort_real_F77.Fdeleted−323

This diff is too big to show here.

tests/syntax-tests/highlighted/Fortran (Modern)/test_savetxt.f90deleted−119

This diff is too big to show here.

tests/syntax-tests/highlighted/Fortran Namelist/test.namelistdeleted−5

This diff is too big to show here.

tests/syntax-tests/highlighted/Fstab/fstabdeleted−7

This diff is too big to show here.

tests/syntax-tests/highlighted/GLSL/test.glsldeleted−42

This diff is too big to show here.

tests/syntax-tests/highlighted/Git Attributes/example.gitattributesdeleted−16

This diff is too big to show here.

tests/syntax-tests/highlighted/Git Config/text.gitconfigdeleted−107

This diff is too big to show here.

tests/syntax-tests/highlighted/Git Ignore/test.gitignoredeleted−43

This diff is too big to show here.

tests/syntax-tests/highlighted/Go/main.godeleted−81

This diff is too big to show here.

tests/syntax-tests/highlighted/GraphQL/test.graphqldeleted−145

This diff is too big to show here.

tests/syntax-tests/highlighted/Graphviz DOT/test_digraph.dotdeleted−41

This diff is too big to show here.

tests/syntax-tests/highlighted/Graphviz DOT/test_graph.dotdeleted−3

This diff is too big to show here.

tests/syntax-tests/highlighted/Groff/rustdoc.1deleted−126

This diff is too big to show here.

tests/syntax-tests/highlighted/Groovy/test.groovydeleted−77

This diff is too big to show here.

tests/syntax-tests/highlighted/HTML/test.htmldeleted−115

This diff is too big to show here.

tests/syntax-tests/highlighted/Haskell/test.hsdeleted−86

This diff is too big to show here.

tests/syntax-tests/highlighted/Hosts/hostsdeleted−8

This diff is too big to show here.

tests/syntax-tests/highlighted/INI/test.infdeleted−5

This diff is too big to show here.

tests/syntax-tests/highlighted/INI/test.inideleted−18

This diff is too big to show here.

tests/syntax-tests/highlighted/Ignored suffixes/test.rs.bakdeleted−1

This diff is too big to show here.

tests/syntax-tests/highlighted/Ignored suffixes/test.rs.dpkg-distdeleted−1

This diff is too big to show here.

tests/syntax-tests/highlighted/Ignored suffixes/test.rs.dpkg-olddeleted−1

This diff is too big to show here.

tests/syntax-tests/highlighted/Ignored suffixes/test.rs.indeleted−1

This diff is too big to show here.

tests/syntax-tests/highlighted/Ignored suffixes/test.rs.in.indeleted−1

This diff is too big to show here.

tests/syntax-tests/highlighted/Ignored suffixes/test.rs.olddeleted−1

This diff is too big to show here.

tests/syntax-tests/highlighted/Ignored suffixes/test.rs.origdeleted−1

This diff is too big to show here.

tests/syntax-tests/highlighted/Ignored suffixes/test.rs.orig~deleted−1

This diff is too big to show here.

tests/syntax-tests/highlighted/Ignored suffixes/test.rs.rpmnewdeleted−1

This diff is too big to show here.

tests/syntax-tests/highlighted/Ignored suffixes/test.rs.rpmorigdeleted−1

This diff is too big to show here.

tests/syntax-tests/highlighted/Ignored suffixes/test.rs.rpmsavedeleted−1

This diff is too big to show here.

tests/syntax-tests/highlighted/Ignored suffixes/test.rs.ucf-distdeleted−1

This diff is too big to show here.

tests/syntax-tests/highlighted/Ignored suffixes/test.rs.ucf-newdeleted−1

This diff is too big to show here.

tests/syntax-tests/highlighted/Ignored suffixes/test.rs.ucf-olddeleted−1

This diff is too big to show here.

tests/syntax-tests/highlighted/Ignored suffixes/test.rs~deleted−1

This diff is too big to show here.

tests/syntax-tests/highlighted/Ignored suffixes/test.unknown~deleted−1

This diff is too big to show here.

tests/syntax-tests/highlighted/JQ/sample.jqdeleted−60

This diff is too big to show here.

tests/syntax-tests/highlighted/JSON/test.jsondeleted−29

This diff is too big to show here.

tests/syntax-tests/highlighted/Java Server Page (JSP)/sessionDetail.jspdeleted−197

This diff is too big to show here.

tests/syntax-tests/highlighted/Java/test.javadeleted−39

This diff is too big to show here.

tests/syntax-tests/highlighted/JavaScript/test.jsdeleted−114

This diff is too big to show here.

tests/syntax-tests/highlighted/Jinja2/template.jinja2deleted−30

This diff is too big to show here.

tests/syntax-tests/highlighted/Julia/test.jldeleted−71

This diff is too big to show here.

tests/syntax-tests/highlighted/Kotlin/test.ktdeleted−85

This diff is too big to show here.

tests/syntax-tests/highlighted/LLVM/test.lldeleted−29

This diff is too big to show here.

tests/syntax-tests/highlighted/Lean/test.leandeleted−68

This diff is too big to show here.

tests/syntax-tests/highlighted/Less/example.lessdeleted−43

This diff is too big to show here.

tests/syntax-tests/highlighted/Lisp/utils.lispdeleted−80

This diff is too big to show here.

tests/syntax-tests/highlighted/Literate Haskell/Main.lhsdeleted−47

This diff is too big to show here.

tests/syntax-tests/highlighted/LiveScript/livescript-demo.lsdeleted−83

This diff is too big to show here.

tests/syntax-tests/highlighted/Log/example.logdeleted−3

This diff is too big to show here.

tests/syntax-tests/highlighted/Lua/test.luadeleted−34

This diff is too big to show here.

tests/syntax-tests/highlighted/MATLAB/test.matlabdeleted−34

This diff is too big to show here.

tests/syntax-tests/highlighted/Makefile/Makefiledeleted−385

This diff is too big to show here.

tests/syntax-tests/highlighted/Manpage/bat-0.16.mandeleted−243

This diff is too big to show here.

tests/syntax-tests/highlighted/Manpage/select-2.mandeleted−330

This diff is too big to show here.

tests/syntax-tests/highlighted/Markdown/example.mddeleted−39

This diff is too big to show here.

tests/syntax-tests/highlighted/MediaWiki/test.mediawikideleted−37

This diff is too big to show here.

tests/syntax-tests/highlighted/MemInfo/test.meminfodeleted−53

This diff is too big to show here.

tests/syntax-tests/highlighted/NAnt Build File/Default.builddeleted−167

This diff is too big to show here.

tests/syntax-tests/highlighted/Ninja/test.ninjadeleted−6

This diff is too big to show here.

tests/syntax-tests/highlighted/OCaml/syntax-test.mldeleted−83

This diff is too big to show here.

tests/syntax-tests/highlighted/Objective-C++/test.mmdeleted−68

This diff is too big to show here.

tests/syntax-tests/highlighted/Objective-C/test.mdeleted−32

This diff is too big to show here.

tests/syntax-tests/highlighted/PHP/test.phpdeleted−111

This diff is too big to show here.

tests/syntax-tests/highlighted/Pascal/test.pasdeleted−42

This diff is too big to show here.

tests/syntax-tests/highlighted/Passwd/passwddeleted−7

This diff is too big to show here.

tests/syntax-tests/highlighted/Perl/test.pldeleted−157

This diff is too big to show here.

tests/syntax-tests/highlighted/Plaintext/plaintext.txtdeleted−178

This diff is too big to show here.

tests/syntax-tests/highlighted/PowerShell/test.ps1deleted−25

This diff is too big to show here.

tests/syntax-tests/highlighted/Protocol Buffer/vyconf.protodeleted−158

This diff is too big to show here.

tests/syntax-tests/highlighted/Puppet/manifest_large_exported_classes_node.ppdeleted−65

This diff is too big to show here.

tests/syntax-tests/highlighted/PureScript/test.pursdeleted−89

This diff is too big to show here.

tests/syntax-tests/highlighted/Python/battest.pydeleted−100

This diff is too big to show here.

tests/syntax-tests/highlighted/QML/BatSyntaxTest.qmldeleted−219

This diff is too big to show here.

tests/syntax-tests/highlighted/R/test.rdeleted−170

This diff is too big to show here.

tests/syntax-tests/highlighted/Racket/test.rktdeleted−56

This diff is too big to show here.

tests/syntax-tests/highlighted/Rego/src_test.regodeleted−181

This diff is too big to show here.

tests/syntax-tests/highlighted/Regular Expression/test.redeleted−1

This diff is too big to show here.

tests/syntax-tests/highlighted/Robot Framework/recipe141_aws_simple_storage_service.robotdeleted−31

This diff is too big to show here.

tests/syntax-tests/highlighted/Ruby Haml/test.html.hamldeleted−15

This diff is too big to show here.

tests/syntax-tests/highlighted/Ruby On Rails/test.rbdeleted−22

This diff is too big to show here.

tests/syntax-tests/highlighted/Ruby/output.rbdeleted−56

This diff is too big to show here.

tests/syntax-tests/highlighted/Rust/output.rsdeleted−161

This diff is too big to show here.

tests/syntax-tests/highlighted/SCSS/example.scssdeleted−82

This diff is too big to show here.

tests/syntax-tests/highlighted/SLS/test.slsdeleted−57

This diff is too big to show here.

tests/syntax-tests/highlighted/SML/sample.smldeleted−47

This diff is too big to show here.

tests/syntax-tests/highlighted/SQL/ims.sqldeleted−266

This diff is too big to show here.

tests/syntax-tests/highlighted/SSH Config/ssh_configdeleted−9

This diff is too big to show here.

tests/syntax-tests/highlighted/SSHD Config/sshd_configdeleted−36

This diff is too big to show here.

tests/syntax-tests/highlighted/Sass/example.sassdeleted−76

This diff is too big to show here.

tests/syntax-tests/highlighted/Scala/ConcurrentEffectLaws.scaladeleted−98

This diff is too big to show here.

tests/syntax-tests/highlighted/Slim/test.slimdeleted−20

This diff is too big to show here.

tests/syntax-tests/highlighted/Solidity/ERC721.soldeleted−376

This diff is too big to show here.

tests/syntax-tests/highlighted/Strace/ls.stracedeleted−94

This diff is too big to show here.

tests/syntax-tests/highlighted/Stylus/gradients.styldeleted−90

This diff is too big to show here.

tests/syntax-tests/highlighted/Svelte/App.sveltedeleted−65

This diff is too big to show here.

tests/syntax-tests/highlighted/Swift/test.swiftdeleted−268

This diff is too big to show here.

tests/syntax-tests/highlighted/Syslog/example.syslogdeleted−16

This diff is too big to show here.

tests/syntax-tests/highlighted/SystemVerilog/output.svdeleted−103

This diff is too big to show here.

tests/syntax-tests/highlighted/TOML/Cargo.tomldeleted−87

This diff is too big to show here.

tests/syntax-tests/highlighted/Tcl/test.tcldeleted−22

This diff is too big to show here.

tests/syntax-tests/highlighted/TeX/main.texdeleted−84

This diff is too big to show here.

tests/syntax-tests/highlighted/Terraform/main.tfdeleted−48

This diff is too big to show here.

tests/syntax-tests/highlighted/Textile/test.textiledeleted−40

This diff is too big to show here.

tests/syntax-tests/highlighted/TypeScript/example.tsdeleted−110

This diff is too big to show here.

tests/syntax-tests/highlighted/TypeScriptReact/app.tsxdeleted−35

This diff is too big to show here.

tests/syntax-tests/highlighted/Verilog/div_pipelined.vdeleted−172

This diff is too big to show here.

tests/syntax-tests/highlighted/VimL/source.vimdeleted−92

This diff is too big to show here.

tests/syntax-tests/highlighted/Vue/example.vuedeleted−60

This diff is too big to show here.

tests/syntax-tests/highlighted/Vyper/crowdsale.vydeleted−89

This diff is too big to show here.

tests/syntax-tests/highlighted/XAML/ItemPage.xamldeleted−264

This diff is too big to show here.

tests/syntax-tests/highlighted/XML/example.xmldeleted−22

This diff is too big to show here.

tests/syntax-tests/highlighted/YAML/example.yamldeleted−34

This diff is too big to show here.

tests/syntax-tests/highlighted/Zig/example.zigdeleted−107

This diff is too big to show here.

tests/syntax-tests/highlighted/cmd-help/test.cmd-helpdeleted−54

This diff is too big to show here.

tests/syntax-tests/highlighted/dash/shfmdeleted−425

This diff is too big to show here.

tests/syntax-tests/highlighted/gnuplot/test.gpdeleted−19

This diff is too big to show here.

tests/syntax-tests/highlighted/http-request-response/example.httpdeleted−44

This diff is too big to show here.

tests/syntax-tests/highlighted/jsonnet/stdlib.jsonnetdeleted−88

This diff is too big to show here.

tests/syntax-tests/highlighted/nginx/nginx.confdeleted−140

This diff is too big to show here.

tests/syntax-tests/highlighted/nim/main.nimdeleted−41

This diff is too big to show here.

tests/syntax-tests/highlighted/nim/test.nimbledeleted−23

This diff is too big to show here.

tests/syntax-tests/highlighted/nix/test.nixdeleted−15

This diff is too big to show here.

tests/syntax-tests/highlighted/orgmode/test.orgdeleted−38

This diff is too big to show here.

tests/syntax-tests/highlighted/reStructuredText/reference.rstdeleted−320

This diff is too big to show here.

tests/syntax-tests/highlighted/resolv.conf/resolv.confdeleted−4

This diff is too big to show here.

tests/syntax-tests/highlighted/varlink/org.varlink.certification.varlinkdeleted−86

This diff is too big to show here.

tests/syntax-tests/regression_test.shdeleted−15

This diff is too big to show here.

tests/syntax-tests/source/ARM Assembly/test.Sdeleted−55

This diff is too big to show here.

tests/syntax-tests/source/ASP/test.aspdeleted−36

This diff is too big to show here.

tests/syntax-tests/source/AWK/quicksort.awkdeleted−35

This diff is too big to show here.

tests/syntax-tests/source/ActionScript/test.asdeleted−75

This diff is too big to show here.

tests/syntax-tests/source/Apache/httpd.confdeleted−42

This diff is too big to show here.

tests/syntax-tests/source/AppleScript/test.applescriptdeleted−25

This diff is too big to show here.

tests/syntax-tests/source/AsciiDoc/test.adocdeleted−173

This diff is too big to show here.

tests/syntax-tests/source/Assembly (x86_64)/test.nasmdeleted−86

This diff is too big to show here.

tests/syntax-tests/source/Bash/batgrep.shdeleted−511

This diff is too big to show here.

tests/syntax-tests/source/Bash/simple.shdeleted−72

This diff is too big to show here.

tests/syntax-tests/source/BatTestCustomAssets/NoColorsUnlessCustomAssetsAreUsed.battestcustomassetsdeleted−2

This diff is too big to show here.

tests/syntax-tests/source/Batch/LICENSE.mddeleted−26

This diff is too big to show here.

tests/syntax-tests/source/Batch/build.batdeleted−59

This diff is too big to show here.

tests/syntax-tests/source/BibTeX/test.bibdeleted−18

This diff is too big to show here.

tests/syntax-tests/source/C-Sharp/Stack.csdeleted−64

This diff is too big to show here.

tests/syntax-tests/source/C/test.cdeleted−62

This diff is too big to show here.

tests/syntax-tests/source/CMake/CMakeLists.txtdeleted−16

This diff is too big to show here.

tests/syntax-tests/source/CSS/style.cssdeleted−115

This diff is too big to show here.

tests/syntax-tests/source/CSV/LICENSE.mddeleted−27

This diff is too big to show here.

tests/syntax-tests/source/CSV/comma_in_quotes.csvdeleted−7

This diff is too big to show here.

tests/syntax-tests/source/Cabal/LICENSE.mddeleted−25

This diff is too big to show here.

tests/syntax-tests/source/Cabal/semantic.cabaldeleted−247

This diff is too big to show here.

tests/syntax-tests/source/Clojure/test.cljdeleted−58

This diff is too big to show here.

tests/syntax-tests/source/CoffeeScript/LICENSE.mddeleted−26

This diff is too big to show here.

tests/syntax-tests/source/CoffeeScript/coffeescript.coffeedeleted−391

This diff is too big to show here.

tests/syntax-tests/source/Cpp/test.cppdeleted−79

This diff is too big to show here.

tests/syntax-tests/source/CpuInfo/test.cpuinfodeleted−45

This diff is too big to show here.

tests/syntax-tests/source/Crystal/test.crdeleted−117

This diff is too big to show here.

tests/syntax-tests/source/D/test.ddeleted−44

This diff is too big to show here.

tests/syntax-tests/source/Dart/inner_comment.dartdeleted−5

This diff is too big to show here.

tests/syntax-tests/source/Dart/test.dartdeleted−133

This diff is too big to show here.

tests/syntax-tests/source/Diff/82e7786e747b1fcfac1f963ae6415a22ec9caae1.diffdeleted−353

This diff is too big to show here.

tests/syntax-tests/source/Dockerfile/Dockerfiledeleted−19

This diff is too big to show here.

tests/syntax-tests/source/DotENV/.envdeleted−57

This diff is too big to show here.

tests/syntax-tests/source/DotENV/LICENSE.mddeleted−23

This diff is too big to show here.

tests/syntax-tests/source/Elixir/LICENSE.mddeleted−21

This diff is too big to show here.

tests/syntax-tests/source/Elixir/command.exdeleted−31

This diff is too big to show here.

tests/syntax-tests/source/Elm/LICENSE.mddeleted−32

This diff is too big to show here.

tests/syntax-tests/source/Elm/test.elmdeleted−137

This diff is too big to show here.

tests/syntax-tests/source/Email/test.emldeleted−16

This diff is too big to show here.

tests/syntax-tests/source/Erlang/bat_erlang.erldeleted−72

This diff is too big to show here.

tests/syntax-tests/source/EtcGroup/test.groupdeleted−67

This diff is too big to show here.

tests/syntax-tests/source/F#/LICENSE.mddeleted−27

This diff is too big to show here.

tests/syntax-tests/source/F#/string.fsdeleted−182

This diff is too big to show here.

tests/syntax-tests/source/Fish/test.fishdeleted−77

This diff is too big to show here.

tests/syntax-tests/source/Fortran (Fixed Form)/LICENSE.mddeleted−25

This diff is too big to show here.

tests/syntax-tests/source/Fortran (Fixed Form)/quicksort_real_F77.Fdeleted−323

This diff is too big to show here.

tests/syntax-tests/source/Fortran (Modern)/LICENSE.mddeleted−25

This diff is too big to show here.

tests/syntax-tests/source/Fortran (Modern)/test_savetxt.f90deleted−119

This diff is too big to show here.

tests/syntax-tests/source/Fortran Namelist/test.namelistdeleted−5

This diff is too big to show here.

tests/syntax-tests/source/Fstab/fstabdeleted−7

This diff is too big to show here.

tests/syntax-tests/source/GLSL/test.glsldeleted−42

This diff is too big to show here.

tests/syntax-tests/source/Git Attributes/example.gitattributesdeleted−16

This diff is too big to show here.

tests/syntax-tests/source/Git Config/LICENSE.mddeleted−1

This diff is too big to show here.

tests/syntax-tests/source/Git Config/text.gitconfigdeleted−107

This diff is too big to show here.

tests/syntax-tests/source/Git Ignore/LICENSE.mddeleted−234

This diff is too big to show here.

tests/syntax-tests/source/Git Ignore/test.gitignoredeleted−43

This diff is too big to show here.

tests/syntax-tests/source/Go/LICENSE.mddeleted−205

This diff is too big to show here.

tests/syntax-tests/source/Go/main.godeleted−81

This diff is too big to show here.

tests/syntax-tests/source/GraphQL/test.graphqldeleted−145

This diff is too big to show here.

tests/syntax-tests/source/Graphviz DOT/LICENSE.mddeleted−22

This diff is too big to show here.

tests/syntax-tests/source/Graphviz DOT/test_digraph.dotdeleted−41

This diff is too big to show here.

tests/syntax-tests/source/Graphviz DOT/test_graph.dotdeleted−3

This diff is too big to show here.

tests/syntax-tests/source/Groff/LICENSE.mddeleted−235

This diff is too big to show here.

tests/syntax-tests/source/Groff/rustdoc.1deleted−126

This diff is too big to show here.

tests/syntax-tests/source/Groovy/test.groovydeleted−77

This diff is too big to show here.

tests/syntax-tests/source/HTML/test.htmldeleted−115

This diff is too big to show here.

tests/syntax-tests/source/Haskell/test.hsdeleted−86

This diff is too big to show here.

tests/syntax-tests/source/Hosts/hostsdeleted−8

This diff is too big to show here.

tests/syntax-tests/source/INI/test.infdeleted−5

This diff is too big to show here.

tests/syntax-tests/source/INI/test.inideleted−18

This diff is too big to show here.

tests/syntax-tests/source/Ignored suffixes/test.rs.bakdeleted−1

This diff is too big to show here.

tests/syntax-tests/source/Ignored suffixes/test.rs.dpkg-distdeleted−1

This diff is too big to show here.

tests/syntax-tests/source/Ignored suffixes/test.rs.dpkg-olddeleted−1

This diff is too big to show here.

tests/syntax-tests/source/Ignored suffixes/test.rs.indeleted−1

This diff is too big to show here.

tests/syntax-tests/source/Ignored suffixes/test.rs.in.indeleted−1

This diff is too big to show here.

tests/syntax-tests/source/Ignored suffixes/test.rs.olddeleted−1

This diff is too big to show here.

tests/syntax-tests/source/Ignored suffixes/test.rs.origdeleted−1

This diff is too big to show here.

tests/syntax-tests/source/Ignored suffixes/test.rs.orig~deleted−1

This diff is too big to show here.

tests/syntax-tests/source/Ignored suffixes/test.rs.rpmnewdeleted−1

This diff is too big to show here.

tests/syntax-tests/source/Ignored suffixes/test.rs.rpmorigdeleted−1

This diff is too big to show here.

tests/syntax-tests/source/Ignored suffixes/test.rs.rpmsavedeleted−1

This diff is too big to show here.

tests/syntax-tests/source/Ignored suffixes/test.rs.ucf-distdeleted−1

This diff is too big to show here.

tests/syntax-tests/source/Ignored suffixes/test.rs.ucf-newdeleted−1

This diff is too big to show here.

tests/syntax-tests/source/Ignored suffixes/test.rs.ucf-olddeleted−1

This diff is too big to show here.

tests/syntax-tests/source/Ignored suffixes/test.rs~deleted−1

This diff is too big to show here.

tests/syntax-tests/source/Ignored suffixes/test.unknown~deleted−1

This diff is too big to show here.

tests/syntax-tests/source/JQ/LICENSE.mddeleted−25

This diff is too big to show here.

tests/syntax-tests/source/JQ/sample.jqdeleted−60

This diff is too big to show here.

tests/syntax-tests/source/JSON/test.jsondeleted−29

This diff is too big to show here.

tests/syntax-tests/source/Java Server Page (JSP)/LICENSE.mddeleted−1141

This diff is too big to show here.

tests/syntax-tests/source/Java Server Page (JSP)/NOTICEdeleted−68

This diff is too big to show here.

tests/syntax-tests/source/Java Server Page (JSP)/sessionDetail.jspdeleted−197

This diff is too big to show here.

tests/syntax-tests/source/Java/test.javadeleted−39

This diff is too big to show here.

tests/syntax-tests/source/JavaScript/test.jsdeleted−114

This diff is too big to show here.

tests/syntax-tests/source/Jinja2/template.jinja2deleted−30

This diff is too big to show here.

tests/syntax-tests/source/Julia/test.jldeleted−71

This diff is too big to show here.

tests/syntax-tests/source/Kotlin/test.ktdeleted−85

This diff is too big to show here.

tests/syntax-tests/source/LLVM/test.lldeleted−29

This diff is too big to show here.

tests/syntax-tests/source/Lean/test.leandeleted−68

This diff is too big to show here.

tests/syntax-tests/source/Less/example.lessdeleted−43

This diff is too big to show here.

tests/syntax-tests/source/Lisp/LICENSE.mddeleted−24

This diff is too big to show here.

tests/syntax-tests/source/Lisp/utils.lispdeleted−80

This diff is too big to show here.

tests/syntax-tests/source/Literate Haskell/Main.lhsdeleted−47

This diff is too big to show here.

tests/syntax-tests/source/LiveScript/LICENSE.mddeleted−23

This diff is too big to show here.

tests/syntax-tests/source/LiveScript/livescript-demo.lsdeleted−83

This diff is too big to show here.

tests/syntax-tests/source/Log/example.logdeleted−3

This diff is too big to show here.

tests/syntax-tests/source/Lua/test.luadeleted−34

This diff is too big to show here.

tests/syntax-tests/source/MATLAB/LICENSE.mddeleted−27

This diff is too big to show here.

tests/syntax-tests/source/MATLAB/test.matlabdeleted−34

This diff is too big to show here.

tests/syntax-tests/source/Makefile/LICENSE.mddeleted−12

This diff is too big to show here.

tests/syntax-tests/source/Makefile/Makefiledeleted−385

This diff is too big to show here.

tests/syntax-tests/source/Manpage/bat-0.16.mandeleted−243

This diff is too big to show here.

tests/syntax-tests/source/Manpage/select-2.mandeleted−330

This diff is too big to show here.

tests/syntax-tests/source/Markdown/example.mddeleted−39

This diff is too big to show here.

tests/syntax-tests/source/MediaWiki/test.mediawikideleted−37

This diff is too big to show here.

tests/syntax-tests/source/MemInfo/test.meminfodeleted−53

This diff is too big to show here.

tests/syntax-tests/source/NAnt Build File/Default.builddeleted−167

This diff is too big to show here.

tests/syntax-tests/source/NAnt Build File/LICENSE.mddeleted−25

This diff is too big to show here.

tests/syntax-tests/source/Ninja/LICENSE.mddeleted−204

This diff is too big to show here.

tests/syntax-tests/source/Ninja/test.ninjadeleted−6

This diff is too big to show here.

tests/syntax-tests/source/OCaml/syntax-test.mldeleted−83

This diff is too big to show here.

tests/syntax-tests/source/Objective-C++/test.mmdeleted−68

This diff is too big to show here.

tests/syntax-tests/source/Objective-C/test.mdeleted−32

This diff is too big to show here.

tests/syntax-tests/source/PHP/test.phpdeleted−111

This diff is too big to show here.

tests/syntax-tests/source/Pascal/test.pasdeleted−42

This diff is too big to show here.

tests/syntax-tests/source/Passwd/passwddeleted−7

This diff is too big to show here.

tests/syntax-tests/source/Perl/test.pldeleted−157

This diff is too big to show here.

tests/syntax-tests/source/Plaintext/README.mddeleted−12

This diff is too big to show here.

tests/syntax-tests/source/Plaintext/bat_optionsdeleted−1

This diff is too big to show here.

tests/syntax-tests/source/Plaintext/plaintext.txtdeleted

Binary file not shown.

tests/syntax-tests/source/PowerShell/test.ps1deleted

Binary file not shown.

tests/syntax-tests/source/Protocol Buffer/vyconf.protodeleted−158

This diff is too big to show here.

tests/syntax-tests/source/Puppet/LICENSE.mddeleted−206

This diff is too big to show here.

tests/syntax-tests/source/Puppet/manifest_large_exported_classes_node.ppdeleted−65

This diff is too big to show here.

tests/syntax-tests/source/PureScript/test.pursdeleted−89

This diff is too big to show here.

tests/syntax-tests/source/Python/battest.pydeleted−100

This diff is too big to show here.

tests/syntax-tests/source/QML/BatSyntaxTest.qmldeleted−219

This diff is too big to show here.

tests/syntax-tests/source/R/test.rdeleted−170

This diff is too big to show here.

tests/syntax-tests/source/Racket/test.rktdeleted−56

This diff is too big to show here.

tests/syntax-tests/source/Rego/LICENSE.mddeleted−25

This diff is too big to show here.

tests/syntax-tests/source/Rego/src_test.regodeleted−181

This diff is too big to show here.

tests/syntax-tests/source/Regular Expression/test.redeleted−1

This diff is too big to show here.

tests/syntax-tests/source/Robot Framework/LICENSE.mddeleted−25

This diff is too big to show here.

tests/syntax-tests/source/Robot Framework/recipe141_aws_simple_storage_service.robotdeleted−31

This diff is too big to show here.

tests/syntax-tests/source/Ruby Haml/test.html.hamldeleted−15

This diff is too big to show here.

tests/syntax-tests/source/Ruby On Rails/test.rbdeleted−22

This diff is too big to show here.

tests/syntax-tests/source/Ruby/output.rbdeleted−56

This diff is too big to show here.

tests/syntax-tests/source/Rust/output.rsdeleted−161

This diff is too big to show here.

tests/syntax-tests/source/SCSS/example.scssdeleted−82

This diff is too big to show here.

tests/syntax-tests/source/SLS/test.slsdeleted−57

This diff is too big to show here.

tests/syntax-tests/source/SML/sample.smldeleted−47

This diff is too big to show here.

tests/syntax-tests/source/SQL/ims.sqldeleted−266

This diff is too big to show here.

tests/syntax-tests/source/SSH Config/ssh_configdeleted−9

This diff is too big to show here.

tests/syntax-tests/source/SSHD Config/sshd_configdeleted−36

This diff is too big to show here.

tests/syntax-tests/source/Sass/example.sassdeleted−76

This diff is too big to show here.

tests/syntax-tests/source/Scala/ConcurrentEffectLaws.scaladeleted−98

This diff is too big to show here.

tests/syntax-tests/source/Scala/LICENSE.mddeleted−179

This diff is too big to show here.

tests/syntax-tests/source/Slim/test.slimdeleted−20

This diff is too big to show here.

tests/syntax-tests/source/Solidity/ERC721.soldeleted−376

This diff is too big to show here.

tests/syntax-tests/source/Solidity/LICENSE.mddeleted−27

This diff is too big to show here.

tests/syntax-tests/source/Strace/ls.stracedeleted−94

This diff is too big to show here.

tests/syntax-tests/source/Stylus/LICENSE.mddeleted−24

This diff is too big to show here.

tests/syntax-tests/source/Stylus/gradients.styldeleted−90

This diff is too big to show here.

tests/syntax-tests/source/Svelte/App.sveltedeleted−65

This diff is too big to show here.

tests/syntax-tests/source/Svelte/LICENSE.mddeleted−14

This diff is too big to show here.

tests/syntax-tests/source/Swift/test.swiftdeleted−268

This diff is too big to show here.

tests/syntax-tests/source/Syslog/example.syslogdeleted−16

This diff is too big to show here.

tests/syntax-tests/source/SystemVerilog/output.svdeleted−103

This diff is too big to show here.

tests/syntax-tests/source/TOML/Cargo.tomldeleted−87

This diff is too big to show here.

tests/syntax-tests/source/Tcl/test.tcldeleted−22

This diff is too big to show here.

tests/syntax-tests/source/TeX/main.texdeleted−84

This diff is too big to show here.

tests/syntax-tests/source/Terraform/main.tfdeleted−48

This diff is too big to show here.

tests/syntax-tests/source/Textile/test.textiledeleted−40

This diff is too big to show here.

tests/syntax-tests/source/TypeScript/LICENSE.mddeleted−19

This diff is too big to show here.

tests/syntax-tests/source/TypeScript/example.tsdeleted−110

This diff is too big to show here.

tests/syntax-tests/source/TypeScriptReact/LICENSE.mddeleted−25

This diff is too big to show here.

tests/syntax-tests/source/TypeScriptReact/app.tsxdeleted−35

This diff is too big to show here.

tests/syntax-tests/source/Verilog/LICENSE.mddeleted−205

This diff is too big to show here.

tests/syntax-tests/source/Verilog/div_pipelined.vdeleted−172

This diff is too big to show here.

tests/syntax-tests/source/VimL/source.vimdeleted−92

This diff is too big to show here.

tests/syntax-tests/source/Vue/example.vuedeleted−60

This diff is too big to show here.

tests/syntax-tests/source/Vyper/LICENSE.mddeleted−205

This diff is too big to show here.

tests/syntax-tests/source/Vyper/crowdsale.vydeleted−89

This diff is too big to show here.

tests/syntax-tests/source/XAML/ItemPage.xamldeleted−264

This diff is too big to show here.

tests/syntax-tests/source/XAML/LICENSE.mddeleted−23

This diff is too big to show here.

tests/syntax-tests/source/XML/example.xmldeleted−22

This diff is too big to show here.

tests/syntax-tests/source/YAML/example.yamldeleted−34

This diff is too big to show here.

tests/syntax-tests/source/Zig/example.zigdeleted−107

This diff is too big to show here.

tests/syntax-tests/source/cmd-help/test.cmd-helpdeleted−54

This diff is too big to show here.

tests/syntax-tests/source/dash/LICENSE.mddeleted−23

This diff is too big to show here.

tests/syntax-tests/source/dash/shfmdeleted−425

This diff is too big to show here.

tests/syntax-tests/source/gnuplot/test.gpdeleted−19

This diff is too big to show here.

tests/syntax-tests/source/http-request-response/example.httpdeleted−44

This diff is too big to show here.

tests/syntax-tests/source/jsonnet/LICENSE.mddeleted−206

This diff is too big to show here.

tests/syntax-tests/source/jsonnet/stdlib.jsonnetdeleted−88

This diff is too big to show here.

tests/syntax-tests/source/nginx/nginx.confdeleted−140

This diff is too big to show here.

tests/syntax-tests/source/nim/main.nimdeleted−41

This diff is too big to show here.

tests/syntax-tests/source/nim/test.nimbledeleted−23

This diff is too big to show here.

tests/syntax-tests/source/nix/test.nixdeleted−15

This diff is too big to show here.

tests/syntax-tests/source/orgmode/test.orgdeleted−38

This diff is too big to show here.

tests/syntax-tests/source/reStructuredText/reference.rstdeleted−320

This diff is too big to show here.

tests/syntax-tests/source/resolv.conf/resolv.confdeleted−4

This diff is too big to show here.

tests/syntax-tests/source/varlink/LICENSE.mddeleted−229

This diff is too big to show here.

tests/syntax-tests/source/varlink/org.varlink.certification.varlinkdeleted−86

This diff is too big to show here.

tests/syntax-tests/test_custom_assets.shdeleted−74

This diff is too big to show here.

tests/syntax-tests/update.shdeleted−7

This diff is too big to show here.

tests/tester.rs+19−21

This diff is too big to show here.

tests/utils/mocked_pagers.rsdeleted−69

This diff is too big to show here.

tests/utils/mod.rsdeleted−1

This diff is too big to show here.