diff --git a/.gitmodules b/.gitmodules index 2407001d..9856f3c5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,39 +1,63 @@ -[submodule "sublime_syntaxes/Packages"] - path = sublime_syntaxes/Packages +[submodule "sublime/syntaxes/Packages"] + path = sublime/syntaxes/Packages url = https://github.com/sublimehq/Packages.git -[submodule "sublime_syntaxes/sublimeassembly"] - path = sublime_syntaxes/sublimeassembly - url = https://github.com/Nessphoro/sublimeassembly.git -[submodule "sublime_syntaxes/LESS-sublime"] - path = sublime_syntaxes/LESS-sublime - url = https://github.com/danro/LESS-sublime.git -[submodule "sublime_syntaxes/Handlebars"] - path = sublime_syntaxes/Handlebars - url = https://github.com/daaain/Handlebars.git -[submodule "sublime_syntaxes/Julia-sublime"] - path = sublime_syntaxes/Julia-sublime - url = https://github.com/JuliaEditorSupport/Julia-sublime.git -[submodule "sublime_syntaxes/sublime_toml_highlighting"] - path = sublime_syntaxes/sublime_toml_highlighting - url = https://github.com/Jayflux/sublime_toml_highlighting.git -[submodule "sublime_syntaxes/SublimeTextLinkerSyntax"] - path = sublime_syntaxes/SublimeTextLinkerSyntax - url = https://github.com/jbw3/SublimeTextLinkerSyntax.git -[submodule "sublime_syntaxes/Sublime-GenericConfig"] - path = sublime_syntaxes/Sublime-GenericConfig - url = https://github.com/skozlovf/Sublime-GenericConfig.git -[submodule "sublime_syntaxes/Sublime-VimL"] - path = sublime_syntaxes/Sublime-VimL +[submodule "sublime/syntaxes/awk-sublime"] + path = sublime/syntaxes/awk-sublime + url = https://github.com/JohnNilsson/awk-sublime.git +[submodule "sublime/syntaxes/AsciiDoc"] + path = sublime/syntaxes/AsciiDoc + url = https://github.com/SublimeText/AsciiDoc.git +[submodule "sublime/syntaxes/Sublime-CMakeLists"] + path = sublime/syntaxes/Sublime-CMakeLists + url = https://github.com/zyxar/Sublime-CMakeLists.git +[submodule "sublime/syntaxes/SublimeTextLinkerSyntax"] + path = sublime/syntaxes/SublimeTextLinkerSyntax + url = https://github.com/jbw3/SublimeTextLinkerSyntax +[submodule "sublime/syntaxes/Docker.tmbundle"] + path = sublime/syntaxes/Docker.tmbundle + url = https://github.com/asbjornenge/Docker.tmbundle.git +[submodule "sublime/syntaxes/Sublime-VimL"] + path = sublime/syntaxes/Sublime-VimL url = https://github.com/SalGnt/Sublime-VimL.git -[submodule "sublime_syntaxes/TypeScript-TmLanguage"] - path = sublime_syntaxes/TypeScript-TmLanguage - url = https://github.com/Microsoft/TypeScript-TmLanguage -[submodule "sublime_syntaxes/SublimeElmLanguageSupport"] - path = sublime_syntaxes/SublimeElmLanguageSupport - url = https://github.com/elm-community/SublimeElmLanguageSupport -[submodule "sublime_syntaxes/Sublime-CMakeLists"] - path = sublime_syntaxes/Sublime-CMakeLists - url = https://github.com/zyxar/Sublime-CMakeLists -[submodule "sublime_syntaxes/Swift-for-f-ing-sublime"] - path = sublime_syntaxes/Swift-for-f-ing-sublime - url = https://github.com/colinta/Swift-for-f-ing-sublime.git +[submodule "sublime/syntaxes/elixir-sublime-syntax"] + path = sublime/syntaxes/elixir-sublime-syntax + url = https://github.com/princemaple/elixir-sublime-syntax.git +[submodule "sublime/syntaxes/SublimeElmLanguageSupport"] + path = sublime/syntaxes/SublimeElmLanguageSupport + url = https://github.com/elm-community/SublimeElmLanguageSupport.git +[submodule "sublime/syntaxes/sublimetext-fsharp"] + path = sublime/syntaxes/sublimetext-fsharp + url = https://github.com/hoest/sublimetext-fsharp.git +[submodule "sublime/syntaxes/sublime-fish"] + path = sublime/syntaxes/sublime-fish + url = https://github.com/Phidica/sublime-fish.git +[submodule "sublime/syntaxes/SublimeFortran"] + path = sublime/syntaxes/SublimeFortran + url = https://github.com/315234/SublimeFortran.git +[submodule "sublime/syntaxes/GraphQL-SublimeText3"] + path = sublime/syntaxes/GraphQL-SublimeText3 + url = https://github.com/dncrews/GraphQL-SublimeText3.git +[submodule "sublime/syntaxes/Sublime-GenericConfig"] + path = sublime/syntaxes/Sublime-GenericConfig + url = https://github.com/skozlovf/Sublime-GenericConfig.git +[submodule "sublime/syntaxes/sublime-jinja2"] + path = sublime/syntaxes/sublime-jinja2 + url = https://github.com/Martin819/sublime-jinja2.git +[submodule "sublime/syntaxes/Julia-sublime"] + path = sublime/syntaxes/Julia-sublime + url = https://github.com/JuliaEditorSupport/Julia-sublime.git +[submodule "sublime/syntaxes/LESS-sublime"] + path = sublime/syntaxes/LESS-sublime + url = https://github.com/danro/LESS-sublime.git +[submodule "sublime/syntaxes/sublime-purescript-syntax"] + path = sublime/syntaxes/sublime-purescript-syntax + url = https://github.com/tellnobody1/sublime-purescript-syntax.git +[submodule "sublime/syntaxes/SublimeSass"] + path = sublime/syntaxes/SublimeSass + url = https://github.com/braver/SublimeSass.git +[submodule "sublime/syntaxes/sublime_toml_highlighting"] + path = sublime/syntaxes/sublime_toml_highlighting + url = https://github.com/jasonwilliams/sublime_toml_highlighting.git +[submodule "sublime/syntaxes/vue-syntax-highlight"] + path = sublime/syntaxes/vue-syntax-highlight + url = https://github.com/vuejs/vue-syntax-highlight.git diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f59486f..bc9c4fb2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,29 @@ # Changelog +## 0.11.0 (2020-05-25) + +### Breaking +- RSS feed support has been altered to allow, *and default to*, Atom feeds, Atom being technically superior and just as widely-supported in normal use cases. + - New config value `feed_filename`, defaulting to `atom.xml` (change to `rss.xml` to reinstate the old behaviour) + - Config value `rss_limit` is renamed to `feed_limit` + - Config value `languages.*.rss` is renamed to `languages.*.feed` + - Config value `generate_rss` is renamed to `generate_feed` + + Users with existing feeds should either set `feed_filename = "rss.xml"` in config.toml to keep things the same, or set up a 3xx redirect from rss.xml to atom.xml so that existing feed consumers aren’t broken. + +- The feed template variable `last_build_date` is renamed to `last_updated` to more accurately reflect its semantics +- The sitemap template’s `SitemapEntry` type’s `date` field has been renamed to `updated` to reflect that it will use the `updated` front-matter field if available, rather than `date` + +### Other +- Add `updated` front-matter field for pages, which sitemap templates will use for the `SitemapEntry.date` field instead of the `date` front-matter field, and which the default Atom feed template will use +- Add `lang` to the feed template context +- Add `taxonomy` and `term` to the feed template context for taxonomy feeds +- Fix link checker not looking for anchor with capital id/name +- Pass missing `lang` template parameter to taxonomy list template +- Fix default index section not having its path set to '/' +- Change cachebust strategy to use SHA256 instead of timestamp +- Fix + ## 0.10.1 (2020-03-12) - Set user agent for HTTP requests @@ -12,8 +36,6 @@ ### Breaking - Remove `toc` variable in section/page context and pass it to `page.toc` and `section.toc` instead so they are accessible everywhere -- [Slugification](https://en.wikipedia.org/wiki/Slug_(web_publishing)#Slug) of paths, taxonomies and anchors is now configurable. By default, everything will still be slugified like in previous versions. -See documentation for information on how to disable it. ### Other - Add zenburn syntax highlighting theme diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f8b66458..988853f7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -35,7 +35,7 @@ Tools > Developer > New Syntax from ... and put it at the root of `sublime_synta You can also add a submodule to the repository of the wanted syntax: ```bash -$ cd sublime_syntaxes +$ cd sublime/syntaxes $ git submodule add https://github.com/elm-community/SublimeElmLanguageSupport ``` @@ -51,7 +51,7 @@ $ git submodule update --remote --merge And finally from the root of the components/config crate run the following command: ```bash -$ cargo run --example generate_sublime synpack ../../sublime_syntaxes ../../sublime_syntaxes/newlines.packdump +$ cargo run --example generate_sublime synpack ../../sublime/syntaxes ../../sublime/syntaxes/newlines.packdump ``` ### Adding a theme @@ -60,7 +60,7 @@ More themes can be easily added to Zola, just make a PR with the wanted theme ad and run the following command from the root of the components/config: ```bash -$ cargo run --example generate_sublime themepack ../../sublime_themes ../../sublime_themes/all.themedump +$ cargo run --example generate_sublime themepack ../../sublime/themes ../../sublime/themes/all.themedump ``` You should see the list of themes being added. diff --git a/Cargo.lock b/Cargo.lock index 17e332ee..df09ae98 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,2941 +4,3168 @@ name = "adler32" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2" + +[[package]] +name = "ahash" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f33b5018f120946c1dcf279194f238a9f146725593ead1c08fa47ff22b0b5d3" +dependencies = [ + "const-random", +] [[package]] name = "aho-corasick" version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8716408b8bc624ed7f65d223ddb9ac2d044c0547b6fa4b0d554f3a9540496ada" dependencies = [ - "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr", ] [[package]] name = "ammonia" version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89eac85170f4b3fb3dc5e442c1cfb036cb8eecf9dbbd431a161ffad15d90ea3b" dependencies = [ - "html5ever 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "markup5ever_rcdom 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "tendril 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever", + "lazy_static", + "maplit", + "markup5ever_rcdom", + "matches", + "tendril", + "url", ] [[package]] name = "ansi_term" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" dependencies = [ - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8", ] [[package]] name = "assert-json-diff" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c356497fd3417158bcb318266ac83c391219ca3a5fa659049f42e0041ab57d6" dependencies = [ - "extend 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", + "extend", + "serde", + "serde_json", ] [[package]] name = "atty" version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "hermit-abi", + "libc", + "winapi 0.3.8", ] +[[package]] +name = "autocfg" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" + [[package]] name = "autocfg" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "base64" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" [[package]] name = "base64" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" [[package]] name = "base64" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d1ccbaf7d9ec9537465a97bf19edc1a4e158ecb49fc16178202238c569cc42" [[package]] name = "bincode" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5753e2a71534719bf3f4e57006c3a4f0d2c672a4b676eec84161f763eca87dbf" dependencies = [ - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder", + "serde", ] [[package]] name = "bitflags" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" [[package]] name = "block-buffer" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" dependencies = [ - "block-padding 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", + "block-padding", + "byte-tools", + "byteorder", + "generic-array", ] [[package]] name = "block-padding" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" dependencies = [ - "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "byte-tools", ] [[package]] name = "bstr" -version = "0.2.11" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31accafdb70df7871592c058eca3985b71104e15ac32f64706022c58867da931" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-automata 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", + "memchr", + "regex-automata", + "serde", ] [[package]] name = "bumpalo" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5356f1d23ee24a1f785a56d1d1a5f0fd5b0f6a0c0fb2412ce11da71649ab78f6" [[package]] name = "byte-tools" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytemuck" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37fa13df2292ecb479ec23aa06f4507928bef07839be9ef15281411076629431" [[package]] name = "byteorder" version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" [[package]] name = "bytes" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" dependencies = [ - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder", + "iovec", ] [[package]] name = "bytes" version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1" [[package]] name = "cc" -version = "1.0.50" +version = "1.0.54" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bbb73db36c1246e9034e307d0fba23f9a2e251faa47ade70c1bd252220c8311" + +[[package]] +name = "cedarwood" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "963e82c7b94163808ca3a452608d260b64ba5bc7b5653b4af1af59887899f48d" +dependencies = [ + "smallvec", +] [[package]] name = "cfg-if" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" [[package]] name = "chrono" version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2" dependencies = [ - "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer", + "num-traits", + "serde", + "time", ] [[package]] name = "chrono-tz" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0e430fad0384e4defc3dc6b1223d1b886087a8bf9b7080e5ae027f73851ea15" dependencies = [ - "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "parse-zoneinfo 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono", + "parse-zoneinfo", ] [[package]] name = "clap" -version = "2.33.0" +version = "2.33.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdfa80d47f954d53a35a64987ca1422f495b8d6483c0fe9f7117b36c2a792129" dependencies = [ - "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "ansi_term", + "atty", + "bitflags", + "strsim", + "textwrap", + "unicode-width", + "vec_map", +] + +[[package]] +name = "cloudabi" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +dependencies = [ + "bitflags", ] [[package]] name = "color_quant" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dbbb57365263e881e805dc77d94697c9118fd94d8da011240555aa7b23445bd" [[package]] name = "colored" version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4ffc801dacf156c5854b9df4f425a626539c3a6ef7893cc0c5084a23f0b6c59" dependencies = [ - "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "atty", + "lazy_static", + "winapi 0.3.8", ] [[package]] name = "config" version = "0.1.0" dependencies = [ - "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "errors 0.1.0", - "globset 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "syntect 3.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "toml 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", - "utils 0.1.0", + "chrono", + "errors", + "globset", + "lazy_static", + "serde", + "serde_derive", + "syntect", + "toml", + "utils", +] + +[[package]] +name = "const-random" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f1af9ac737b2dd2d577701e59fd09ba34822f6f2ebdb30a7647405d9e55e16a" +dependencies = [ + "const-random-macro", + "proc-macro-hack", +] + +[[package]] +name = "const-random-macro" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25e4c606eb459dd29f7c57b2e0879f2b6f14ee130918c2b78ccb58a9624e6c7a" +dependencies = [ + "getrandom", + "proc-macro-hack", ] [[package]] name = "core-foundation" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" dependencies = [ - "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation-sys", + "libc", ] [[package]] name = "core-foundation-sys" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" [[package]] name = "crc32fast" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-channel" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", ] [[package]] name = "crossbeam-deque" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285" dependencies = [ - "crossbeam-epoch 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-epoch", + "crossbeam-utils", + "maybe-uninit", ] [[package]] name = "crossbeam-epoch" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", + "cfg-if", + "crossbeam-utils", + "lazy_static", + "maybe-uninit", + "memoffset", + "scopeguard", ] [[package]] name = "crossbeam-queue" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c695eeca1e7173472a32221542ae469b3e9aac3a4fc81f7696bcad82029493db" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "crossbeam-utils", ] [[package]] name = "crossbeam-utils" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", + "cfg-if", + "lazy_static", ] [[package]] name = "csv" version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00affe7f6ab566df61b4be3ce8cf16bc2576bca0963ceb0955e45d514bf9a279" dependencies = [ - "bstr 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "csv-core 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "bstr", + "csv-core", + "itoa", + "ryu", + "serde", ] [[package]] name = "csv-core" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" dependencies = [ - "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr", ] [[package]] name = "ct-logs" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d3686f5fa27dbc1d76c751300376e167c5a43387f44bb451fd1c24776e49113" dependencies = [ - "sct 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sct", ] [[package]] name = "ctrlc" version = "3.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a4ba686dff9fa4c1c9636ce1010b0cf98ceb421361b0bb3d6faeec43bd217a7" dependencies = [ - "nix 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "nix", + "winapi 0.3.8", ] [[package]] name = "deflate" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7e5d2a2273fed52a7f947ee55b092c4057025d7a3e04e5ecdbd25d6c3fb1bd7" dependencies = [ - "adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "adler32", + "byteorder", ] [[package]] name = "deunicode" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "850878694b7933ca4c9569d30a34b55031b9b139ee1fc7b94a527c4ef960d690" [[package]] name = "difference" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198" [[package]] name = "digest" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" dependencies = [ - "generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", + "generic-array", ] [[package]] name = "dtoa" version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4358a9e11b9a09cf52383b451b49a169e8d797b68aa02301ff586d70d9661ea3" [[package]] name = "either" version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" [[package]] name = "elasticlunr-rs" -version = "2.3.6" +version = "2.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35274f9f9208923544b450b98ef8b018357904261c07a9bc83c536412881263c" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rust-stemmers 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", - "strum 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)", - "strum_macros 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)", + "jieba-rs", + "lazy_static", + "lindera", + "regex", + "rust-stemmers", + "serde", + "serde_derive", + "serde_json", + "strum", + "strum_macros", ] [[package]] -name = "encoding_rs" -version = "0.8.22" +name = "encoding" +version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding-index-japanese", + "encoding-index-korean", + "encoding-index-simpchinese", + "encoding-index-singlebyte", + "encoding-index-tradchinese", +] + +[[package]] +name = "encoding-index-japanese" +version = "1.20141219.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91" +dependencies = [ + "encoding_index_tests", +] + +[[package]] +name = "encoding-index-korean" +version = "1.20141219.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81" +dependencies = [ + "encoding_index_tests", +] + +[[package]] +name = "encoding-index-simpchinese" +version = "1.20141219.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7" +dependencies = [ + "encoding_index_tests", +] + +[[package]] +name = "encoding-index-singlebyte" +version = "1.20141219.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a" +dependencies = [ + "encoding_index_tests", +] + +[[package]] +name = "encoding-index-tradchinese" +version = "1.20141219.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18" +dependencies = [ + "encoding_index_tests", +] + +[[package]] +name = "encoding_index_tests" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" + +[[package]] +name = "encoding_rs" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8ac63f94732332f44fe654443c46f6375d1939684c17b0afb6cb56b0456e171" +dependencies = [ + "cfg-if", ] [[package]] name = "errors" version = "0.1.0" dependencies = [ - "image 0.23.1 (registry+https://github.com/rust-lang/crates.io-index)", - "syntect 3.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tera 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "toml 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", + "image", + "syntect", + "tera", + "toml", ] [[package]] name = "extend" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f47da3a72ec598d9c8937a7ebca8962a5c7a1f28444e38c2b33c771ba3f55f05" dependencies = [ - "proc-macro-error 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", ] [[package]] name = "fake-simd" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" [[package]] name = "filetime" -version = "0.2.8" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "affc17579b132fc2461adf7c575cc6e8b134ebca52c51f5411388965227dc695" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "libc", + "redox_syscall", + "winapi 0.3.8", ] [[package]] name = "flate2" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cfff41391129e0a856d6d822600b8d71179d46879e310417eb9c762eb178b42" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", - "miniz_oxide 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "crc32fast", + "libc", + "miniz_oxide", ] [[package]] name = "fnv" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "front_matter" version = "0.1.0" dependencies = [ - "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "errors 0.1.0", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "tera 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "toml 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", - "utils 0.1.0", + "chrono", + "errors", + "lazy_static", + "regex", + "serde", + "serde_derive", + "tera", + "toml", + "utils", ] [[package]] name = "fs_extra" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f2a4a2034423744d2cc7ca2068453168dcdb82c438419e639a26bd87839c674" [[package]] name = "fsevent" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ab7d1bd1bd33cc98b0889831b72da23c0aa4df9cec7e0702f46ecea04b35db6" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "fsevent-sys 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "fsevent-sys", ] [[package]] name = "fsevent-sys" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f41b048a94555da0f42f1d632e2e19510084fb8e303b0daa2816e733fb3644a0" dependencies = [ - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", ] +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + [[package]] name = "fuchsia-zircon" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "fuchsia-zircon-sys", ] [[package]] name = "fuchsia-zircon-sys" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" [[package]] name = "futf" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c9c1ce3fa9336301af935ab852c437817d14cd33690446569392e65170aac3b" dependencies = [ - "mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "new_debug_unreachable 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "mac", + "new_debug_unreachable", ] [[package]] name = "futures-channel" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f366ad74c28cca6ba456d95e6422883cfb4b252a83bed929c83abfdbbf2967d5" dependencies = [ - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core", ] [[package]] name = "futures-core" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59f5fff90fd5d971f936ad674802482ba441b6f09ba5e15fd8b39145582ca399" [[package]] name = "futures-io" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de27142b013a8e869c14957e6d2edeef89e97c289e69d042ee3a49acd8b51789" [[package]] name = "futures-macro" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0b5a30a4328ab5473878237c447333c093297bded83a4983d10f4deea240d39" dependencies = [ - "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn", ] [[package]] name = "futures-sink" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f2032893cb734c7a05d85ce0cc8b8c4075278e93b24b66f9de99d6eb0fa8acc" [[package]] name = "futures-task" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb66b5f09e22019b1ab0830f7785bcea8e7a42148683f99214f73f8ec21a626" +dependencies = [ + "once_cell", +] [[package]] name = "futures-util" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8764574ff08b701a084482c3c7031349104b07ac897393010494beaa18ce32c6" dependencies = [ - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-io 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-macro 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro-nested 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core", + "futures-io", + "futures-macro", + "futures-task", + "memchr", + "pin-project", + "pin-utils", + "proc-macro-hack", + "proc-macro-nested", + "slab", ] [[package]] name = "generic-array" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" dependencies = [ - "typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)", + "typenum", ] [[package]] name = "getopts" version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" dependencies = [ - "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-width", ] [[package]] name = "getrandom" version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", - "wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "libc", + "wasi", ] [[package]] name = "gif" version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "471d90201b3b223f3451cd4ad53e34295f16a1df17b1edf3736d47761c3981af" dependencies = [ - "color_quant 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "color_quant", + "lzw", ] [[package]] name = "glob" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] name = "globset" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ad1da430bd7281dde2576f44c84cc3f0f7b475e7202cd503042dff01a8c8120" dependencies = [ - "aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", - "bstr 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "aho-corasick", + "bstr", + "fnv", + "log", + "regex", ] [[package]] name = "globwalk" -version = "0.7.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "178270263374052c40502e9f607134947de75302c1348d1a0e31db67c1691446" dependencies = [ - "ignore 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "ignore", + "walkdir", ] [[package]] name = "h2" -version = "0.2.2" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79b7246d7e4b979c03fa093da39cfb3617a96bbeee6310af63991668d7e843ff" dependencies = [ - "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-util 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.5.4", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "log", + "slab", + "tokio", + "tokio-util", +] + +[[package]] +name = "hashbrown" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e6073d0ca812575946eb5f35ff68dbe519907b25c42530389ff946dc84c6ead" +dependencies = [ + "ahash", + "autocfg 0.1.7", ] [[package]] name = "heck" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" dependencies = [ - "unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-segmentation", ] [[package]] name = "hermit-abi" -version = "0.1.8" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91780f809e750b0a89f5544be56617ff6b1227ee485bcb06ebe10cdf89bd3b71" dependencies = [ - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", ] [[package]] name = "html5ever" version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aafcf38a1a36118242d29b92e1b08ef84e67e4a5ed06e0a80be20e6a32bfed6b" dependencies = [ - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "markup5ever 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "log", + "mac", + "markup5ever", + "proc-macro2", + "quote", + "syn", ] [[package]] name = "http" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d569972648b2c512421b5f2a405ad6ac9666547189d0c5477a3f200f3e02f9" dependencies = [ - "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.5.4", + "fnv", + "itoa", ] [[package]] name = "http-body" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b" dependencies = [ - "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.5.4", + "http", ] [[package]] name = "httparse" version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" [[package]] name = "humansize" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "humantime" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "b6cab2627acfc432780848602f3f558f7e9dd427352224b0d9324025796d2a5e" [[package]] name = "hyper" -version = "0.13.3" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96816e1d921eca64d208a85aab4f7798455a8e34229ee5a88c935bdee1b78b14" dependencies = [ - "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "h2 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "http-body 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", - "tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "want 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.5.4", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "itoa", + "log", + "net2", + "pin-project", + "time", + "tokio", + "tower-service", + "want", ] [[package]] name = "hyper-rustls" version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac965ea399ec3a25ac7d13b8affd4b8f39325cca00858ddf5eb29b79e6b14b08" dependencies = [ - "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "ct-logs 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.13.3 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rustls 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rustls-native-certs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-rustls 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)", - "webpki 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.5.4", + "ct-logs", + "futures-util", + "hyper", + "log", + "rustls", + "rustls-native-certs", + "tokio", + "tokio-rustls", + "webpki", ] [[package]] name = "hyper-staticfile" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e576261b14050b48b3a52f652ee7e2b633decc3f54a48364d3726a394f14b8a" dependencies = [ - "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.13.3 (registry+https://github.com/rust-lang/crates.io-index)", - "mime_guess 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", - "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "hyper-tls" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.13.3 (registry+https://github.com/rust-lang/crates.io-index)", - "native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tls 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono", + "futures-util", + "http", + "hyper", + "mime_guess", + "percent-encoding", + "tokio", + "url", + "winapi 0.3.8", ] [[package]] name = "idna" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" dependencies = [ - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "matches", + "unicode-bidi", + "unicode-normalization", ] [[package]] name = "ignore" -version = "0.4.11" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "128b9e89d15a3faa642ee164c998fd4fae3d89d054463cddb2c25a7baad3a352" dependencies = [ - "crossbeam-channel 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "globset 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils", + "globset", + "lazy_static", + "log", + "memchr", + "regex", + "same-file", + "thread_local", + "walkdir", + "winapi-util", ] [[package]] name = "image" -version = "0.23.1" +version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f4167a8f21fa2bb3f17a652a760acd7572645281c98e3b612a26242c96ee" dependencies = [ - "bytemuck 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "gif 0.10.3 (registry+https://github.com/rust-lang/crates.io-index)", - "jpeg-decoder 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", - "num-iter 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", - "num-rational 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "png 0.16.1 (registry+https://github.com/rust-lang/crates.io-index)", - "scoped_threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "tiff 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytemuck", + "byteorder", + "gif", + "jpeg-decoder", + "num-iter", + "num-rational", + "num-traits", + "png", + "scoped_threadpool", + "tiff", ] [[package]] name = "imageproc" version = "0.1.0" dependencies = [ - "errors 0.1.0", - "image 0.23.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tera 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "utils 0.1.0", + "errors", + "image", + "lazy_static", + "rayon", + "regex", + "tera", + "utils", ] [[package]] name = "indexmap" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "076f042c5b7b98f31d205f1249267e12a6518c1481e9dae9764af19b707d2292" dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", ] [[package]] name = "inflate" version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cdb29978cc5797bd8dcc8e5bf7de604891df2a8dc576973d71a281e916db2ff" dependencies = [ - "adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "adler32", ] [[package]] name = "inotify" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24e40d6fd5d64e2082e0c796495c8ef5ad667a96d03e5aaa0becfd9d47bcbfb8" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "inotify-sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "inotify-sys", + "libc", ] [[package]] name = "inotify-sys" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e74a1aa87c59aeff6ef2cc2fa62d41bc43f54952f55652656b18a02fd5e356c0" dependencies = [ - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", ] [[package]] name = "iovec" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" dependencies = [ - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", ] [[package]] name = "itoa" version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e" + +[[package]] +name = "jieba-rs" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99b1f03a6d2ba3069edb9866fa53035096544077abb34dcaa921ca14276887b6" +dependencies = [ + "cedarwood", + "hashbrown", + "lazy_static", + "phf 0.7.24", + "phf_codegen 0.7.24", + "regex", +] [[package]] name = "jpeg-decoder" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b47b4c4e017b01abdc5bcc126d2d1002e5a75bbe3ce73f9f4f311a916363704" dependencies = [ - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder", + "rayon", ] [[package]] name = "js-sys" -version = "0.3.36" +version = "0.3.39" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa5a448de267e7358beaf4a5d849518fe9a0c13fce7afd44b06e68550e5562a7" dependencies = [ - "wasm-bindgen 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen", ] [[package]] name = "kernel32-sys" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8", + "winapi-build", ] [[package]] name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "lazycell" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" + +[[package]] +name = "levenshtein_automata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73a004f877f468548d8d0ac4977456a249d8fabbdb8416c36db163dfc8f2e8ca" [[package]] name = "libc" -version = "0.2.67" +version = "0.2.70" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3baa92041a6fec78c687fa0cc2b3fae8884f743d672cf551bed1d6dac6988d0f" [[package]] name = "library" version = "0.1.0" dependencies = [ - "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "config 0.1.0", - "errors 0.1.0", - "front_matter 0.1.0", - "globset 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rendering 0.1.0", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "slotmap 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tera 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "toml 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", - "utils 0.1.0", + "chrono", + "config", + "errors", + "front_matter", + "globset", + "lazy_static", + "rayon", + "regex", + "rendering", + "serde", + "serde_derive", + "slotmap", + "tempfile", + "tera", + "toml", + "utils", +] + +[[package]] +name = "lindera" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71b867cd68f5fc19a6d8b8361a6aba55ed2485f243044b70da14b6ba5a128c00" +dependencies = [ + "bincode", + "byteorder", + "encoding", + "lindera-core", + "lindera-dictionary", + "lindera-fst", + "lindera-ipadic", + "serde", + "serde_json", +] + +[[package]] +name = "lindera-core" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b7f132a5d361c1236b28434c632097fb8867ebdf4e4c9ab4f793525bb681ff" +dependencies = [ + "bincode", + "byteorder", + "encoding", + "lindera-fst", + "serde", +] + +[[package]] +name = "lindera-dictionary" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78a61a066057d24faab043586633274fa3468c5c54cb8191895659811218a8ec" +dependencies = [ + "bincode", + "byteorder", + "lindera-core", +] + +[[package]] +name = "lindera-fst" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6098a7ca6679296cd2d227efa232f990552c5278394c845bec8a70ab0284ae0" +dependencies = [ + "byteorder", + "levenshtein_automata", + "regex-syntax 0.4.2", + "utf8-ranges", +] + +[[package]] +name = "lindera-ipadic" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f12f44c385a6f4c1ff0863a2f0a91ce5f1ff6c2e0e44c69b37051b56fece112" +dependencies = [ + "bincode", + "byteorder", + "lindera-core", ] [[package]] name = "line-wrap" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" dependencies = [ - "safemem 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "safemem", ] [[package]] name = "link_checker" version = "0.1.0" dependencies = [ - "config 0.1.0", - "errors 0.1.0", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "mockito 0.23.3 (registry+https://github.com/rust-lang/crates.io-index)", - "reqwest 0.10.4 (registry+https://github.com/rust-lang/crates.io-index)", + "config", + "errors", + "lazy_static", + "mockito", + "reqwest", ] [[package]] name = "linked-hash-map" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dd5a6d5999d9907cda8ed67bbd137d3af8085216c2ac62de5be860bd41f304a" [[package]] name = "log" version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", ] [[package]] name = "lzw" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d947cbb889ed21c2a84be6ffbaebf5b4e0f4340638cba0444907e38b56be084" [[package]] name = "mac" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" [[package]] name = "maplit" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" [[package]] name = "markup5ever" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae38d669396ca9b707bfc3db254bc382ddb94f57cc5c235f34623a669a01dab" dependencies = [ - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "phf 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_codegen 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache_codegen 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tendril 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log", + "phf 0.8.0", + "phf_codegen 0.8.0", + "serde", + "serde_derive", + "serde_json", + "string_cache", + "string_cache_codegen", + "tendril", ] [[package]] name = "markup5ever_rcdom" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f015da43bcd8d4f144559a3423f4591d69b8ce0652c905374da7205df336ae2b" dependencies = [ - "html5ever 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", - "markup5ever 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tendril 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "xml5ever 0.16.1 (registry+https://github.com/rust-lang/crates.io-index)", + "html5ever", + "markup5ever", + "tendril", + "xml5ever", ] [[package]] name = "matches" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" [[package]] name = "maybe-uninit" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" [[package]] name = "memchr" version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" [[package]] name = "memoffset" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4fc2c02a7e374099d4ee95a193111f72d2110197fe200272371758f6c3643d8" dependencies = [ - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", ] [[package]] name = "mime" version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "mime_guess" version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" dependencies = [ - "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", - "unicase 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "mime", + "unicase", ] [[package]] name = "miniz_oxide" version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa679ff6578b1cddee93d7e82e263b94a575e0bfced07284eb0c037c1d2416a5" dependencies = [ - "adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "adler32", ] [[package]] name = "mio" -version = "0.6.21" +version = "0.6.22" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fce347092656428bc8eaf6201042cb551b8d67855af7374542a92a0fbfcac430" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "fuchsia-zircon", + "fuchsia-zircon-sys", + "iovec", + "kernel32-sys", + "libc", + "log", + "miow", + "net2", + "slab", + "winapi 0.2.8", ] [[package]] name = "mio-extras" version = "2.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" dependencies = [ - "lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazycell", + "log", + "mio", + "slab", ] [[package]] name = "miow" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" dependencies = [ - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "kernel32-sys", + "net2", + "winapi 0.2.8", + "ws2_32-sys", ] [[package]] name = "mockito" -version = "0.23.3" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03dbb09048f444da040f95049763815e4352c9dcb49e4250f7ff2c6853e595dc" dependencies = [ - "assert-json-diff 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "colored 1.9.3 (registry+https://github.com/rust-lang/crates.io-index)", - "difference 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "native-tls" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl 0.10.28 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.54 (registry+https://github.com/rust-lang/crates.io-index)", - "schannel 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework-sys 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "assert-json-diff", + "colored", + "difference", + "httparse", + "lazy_static", + "log", + "percent-encoding", + "rand 0.7.3", + "regex", + "serde_json", ] [[package]] name = "net2" -version = "0.2.33" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ba7c918ac76704fb42afcbbb43891e72731f3dcca3bef2a19786297baf14af7" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "libc", + "winapi 0.3.8", ] [[package]] name = "new_debug_unreachable" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" [[package]] name = "nix" version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e4785f2c3b7589a0d0c1dd60285e1188adac4006e8abd6dd578e1567027363" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", - "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "cc", + "cfg-if", + "libc", + "void", ] [[package]] name = "notify" version = "4.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80ae4a7688d1fab81c5bf19c64fc8db920be8d519ce6336ed4e7efe024724dbd" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "filetime 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "fsevent 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "fsevent-sys 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "inotify 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "mio-extras 2.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "filetime", + "fsevent", + "fsevent-sys", + "inotify", + "libc", + "mio", + "mio-extras", + "walkdir", + "winapi 0.3.8", ] [[package]] name = "num-integer" version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba" dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", + "num-traits", ] [[package]] name = "num-iter" version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfb0800a0291891dd9f4fe7bd9c19384f98f7fbe0cd0f39a2c6b88b9868bbc00" dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", + "num-integer", + "num-traits", ] [[package]] name = "num-rational" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", + "num-integer", + "num-traits", ] [[package]] name = "num-traits" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096" dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", ] [[package]] name = "num_cpus" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" dependencies = [ - "hermit-abi 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "hermit-abi", + "libc", ] [[package]] -name = "onig" -version = "4.3.3" +name = "once_cell" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b631f7e854af39a1739f401cf34a8a013dfe09eac4fa4dba91e9768bd28168d" + +[[package]] +name = "onig" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd91ccd8a02fce2f7e8a86655aec67bc6c171e6f8e704118a0e8c4b866a05a8a" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", - "onig_sys 69.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "lazy_static", + "libc", + "onig_sys", ] [[package]] name = "onig_sys" -version = "69.1.0" +version = "69.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3814583fad89f3c60ae0701d80e87e1fd3028741723deda72d0d4a0ecf0cb0db" dependencies = [ - "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "cc", + "pkg-config", ] [[package]] name = "opaque-debug" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" [[package]] name = "open" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c283bf0114efea9e42f1a60edea9859e8c47528eae09d01df4b29c1e489cc48" dependencies = [ - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "openssl" -version = "0.10.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.54 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8", ] [[package]] name = "openssl-probe" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "openssl-sys" -version = "0.9.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", - "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" [[package]] name = "parse-zoneinfo" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "feece9d0113b400182a7d00adcff81ccf29158c49c5abd11e2eed8589bf6ff07" dependencies = [ - "regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "regex", ] [[package]] name = "percent-encoding" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] name = "pest" version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" dependencies = [ - "ucd-trie 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "ucd-trie", ] [[package]] name = "pest_derive" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" dependencies = [ - "pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "pest_generator 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "pest", + "pest_generator", ] [[package]] name = "pest_generator" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55" dependencies = [ - "pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "pest_meta 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn", ] [[package]] name = "pest_meta" version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d" dependencies = [ - "maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "sha-1 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", + "maplit", + "pest", + "sha-1", +] + +[[package]] +name = "phf" +version = "0.7.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18" +dependencies = [ + "phf_shared 0.7.24", ] [[package]] name = "phf" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" dependencies = [ - "phf_shared 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_shared 0.8.0", +] + +[[package]] +name = "phf_codegen" +version = "0.7.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e" +dependencies = [ + "phf_generator 0.7.24", + "phf_shared 0.7.24", ] [[package]] name = "phf_codegen" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" dependencies = [ - "phf_generator 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_shared 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_generator 0.8.0", + "phf_shared 0.8.0", +] + +[[package]] +name = "phf_generator" +version = "0.7.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662" +dependencies = [ + "phf_shared 0.7.24", + "rand 0.6.5", ] [[package]] name = "phf_generator" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" dependencies = [ - "phf_shared 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_shared 0.8.0", + "rand 0.7.3", +] + +[[package]] +name = "phf_shared" +version = "0.7.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0" +dependencies = [ + "siphasher 0.2.3", ] [[package]] name = "phf_shared" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" dependencies = [ - "siphasher 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "siphasher 0.3.3", ] [[package]] name = "pin-project" -version = "0.4.8" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edc93aeee735e60ecb40cf740eb319ff23eab1c5748abfdb5c180e4ce49f7791" dependencies = [ - "pin-project-internal 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "0.4.8" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e58db2081ba5b4c93bd6be09c40fd36cb9193a8336c384f3b40012e531aa7e40" dependencies = [ - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "syn", ] [[package]] name = "pin-project-lite" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7505eeebd78492e0f6108f7171c4948dbb120ee8119d9d77d0afa5469bef67f" [[package]] name = "pin-utils" -version = "0.1.0-alpha.4" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" [[package]] name = "plist" -version = "0.4.2" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b336d94e8e4ce29bf15bba393164629764744c567e8ad306cc1fdd0119967fd" dependencies = [ - "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "line-wrap 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.12.1", + "chrono", + "indexmap", + "line-wrap", + "serde", + "xml-rs", ] [[package]] name = "png" -version = "0.16.1" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c68a431ed29933a4eb5709aca9800989758c97759345860fa5db3cfced0b65d" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "deflate 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)", - "inflate 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "crc32fast", + "deflate", + "inflate", ] [[package]] name = "ppv-lite86" -version = "0.2.6" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "237a5ed80e274dbc66f86bd59c1e25edc039660be53194b5fe0a482e0f2612ea" [[package]] name = "precomputed-hash" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "proc-macro-error" -version = "0.4.11" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98e9e4b82e0ef281812565ea4751049f1bdcdfccda7d3f459f2e138a40c08678" dependencies = [ - "proc-macro-error-attr 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", - "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn", + "version_check", ] [[package]] name = "proc-macro-error-attr" -version = "0.4.11" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f5444ead4e9935abd7f27dc51f7e852a0569ac888096d5ec2499470794e2e53" dependencies = [ - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", - "syn-mid 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "syn", + "syn-mid", + "version_check", ] [[package]] name = "proc-macro-hack" -version = "0.5.11" +version = "0.5.16" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "7e0456befd48169b9f13ef0f0ad46d492cf9d2dbb918bcf38e01eed4ce3ec5e4" [[package]] name = "proc-macro-nested" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e946095f9d3ed29ec38de908c22f95d9ac008e424c7bcae54c75a79c527c694" [[package]] name = "proc-macro2" -version = "0.4.30" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1502d12e458c49a4c9cbff560d0fe0060c252bc29799ed94ca2ed4bb665a0101" dependencies = [ - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "proc-macro2" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid", ] [[package]] name = "pulldown-cmark" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e142c3b8f49d2200605ee6ba0b1d757310e9e7a72afe78c36ee2ef67300ee00" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "getopts 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "unicase 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "quote" -version = "0.6.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "getopts", + "memchr", + "unicase", ] [[package]] name = "quote" -version = "1.0.3" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54a21852a652ad6f610c9510194f398ff6f8692e334fd1145fed931f7fbe44ea" dependencies = [ - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" +dependencies = [ + "autocfg 0.1.7", + "libc", + "rand_chacha 0.1.1", + "rand_core 0.4.2", + "rand_hc 0.1.0", + "rand_isaac", + "rand_jitter", + "rand_os", + "rand_pcg 0.1.2", + "rand_xorshift", + "winapi 0.3.8", ] [[package]] name = "rand" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ - "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_pcg 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "getrandom", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc 0.2.0", + "rand_pcg 0.2.1", +] + +[[package]] +name = "rand_chacha" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" +dependencies = [ + "autocfg 0.1.7", + "rand_core 0.3.1", ] [[package]] name = "rand_chacha" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" dependencies = [ - "ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "ppv-lite86", + "rand_core 0.5.1", ] +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + [[package]] name = "rand_core" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" dependencies = [ - "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "getrandom", +] + +[[package]] +name = "rand_hc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" +dependencies = [ + "rand_core 0.3.1", ] [[package]] name = "rand_hc" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" dependencies = [ - "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_isaac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rand_jitter" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" +dependencies = [ + "libc", + "rand_core 0.4.2", + "winapi 0.3.8", +] + +[[package]] +name = "rand_os" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" +dependencies = [ + "cloudabi", + "fuchsia-cprng", + "libc", + "rand_core 0.4.2", + "rdrand", + "winapi 0.3.8", +] + +[[package]] +name = "rand_pcg" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" +dependencies = [ + "autocfg 0.1.7", + "rand_core 0.4.2", ] [[package]] name = "rand_pcg" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" dependencies = [ - "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_xorshift" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" +dependencies = [ + "rand_core 0.3.1", ] [[package]] name = "rayon" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db6ce3297f9c85e16621bb8cca38a06779ffc31bb8184e1be4bed2be4678a098" dependencies = [ - "crossbeam-deque 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "rayon-core 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-deque", + "either", + "rayon-core", ] [[package]] name = "rayon-core" version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08a89b46efaf957e52b18062fb2f4660f8b8a4dde1807ca002690868ef2c85a9" dependencies = [ - "crossbeam-deque 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-queue 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-deque", + "crossbeam-queue", + "crossbeam-utils", + "lazy_static", + "num_cpus", +] + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", ] [[package]] name = "rebuild" version = "0.1.0" dependencies = [ - "errors 0.1.0", - "front_matter 0.1.0", - "fs_extra 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "library 0.1.0", - "site 0.1.0", - "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "errors", + "front_matter", + "fs_extra", + "library", + "site", + "tempfile", ] [[package]] name = "redox_syscall" version = "0.1.56" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" [[package]] name = "regex" -version = "1.3.4" +version = "1.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6020f034922e3194c711b82a627453881bc4682166cabb07134a10c26ba7692" dependencies = [ - "aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "aho-corasick", + "memchr", + "regex-syntax 0.6.17", + "thread_local", ] [[package]] name = "regex-automata" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4" dependencies = [ - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder", ] [[package]] name = "regex-syntax" -version = "0.6.16" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e931c58b93d86f080c734bfd2bce7dd0079ae2331235818133c8be7f422e20e" + +[[package]] +name = "regex-syntax" +version = "0.6.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe5bd57d1d7414c6b5ed48563a2c855d995ff777729dcd91c369ec7fea395ae" [[package]] name = "remove_dir_all" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" dependencies = [ - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8", ] [[package]] name = "rendering" version = "0.1.0" dependencies = [ - "config 0.1.0", - "errors 0.1.0", - "front_matter 0.1.0", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "link_checker 0.1.0", - "pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pulldown-cmark 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "syntect 3.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "templates 0.1.0", - "tera 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "utils 0.1.0", + "config", + "errors", + "front_matter", + "lazy_static", + "link_checker", + "pest", + "pest_derive", + "pulldown-cmark", + "regex", + "serde", + "serde_derive", + "syntect", + "templates", + "tera", + "utils", ] [[package]] name = "reqwest" version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b81e49ddec5109a9dcfc5f2a317ff53377c915e9ae9d4f2fb50914b85614e2" dependencies = [ - "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "encoding_rs 0.8.22 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "http-body 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.13.3 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper-rustls 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper-tls 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "js-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", - "mime_guess 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rustls 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_urlencoded 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-rustls 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tls 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-futures 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "web-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)", - "webpki-roots 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winreg 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.11.0", + "bytes 0.5.4", + "encoding_rs", + "futures-core", + "futures-util", + "http", + "http-body", + "hyper", + "hyper-rustls", + "js-sys", + "lazy_static", + "log", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", + "rustls", + "serde", + "serde_urlencoded", + "time", + "tokio", + "tokio-rustls", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "winreg", ] [[package]] name = "ring" -version = "0.16.11" +version = "0.16.13" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703516ae74571f24b465b4a1431e81e2ad51336cb0ded733a55a1aa3eccac196" dependencies = [ - "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", - "spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "untrusted 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "web-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cc", + "libc", + "once_cell", + "spin", + "untrusted", + "web-sys", + "winapi 0.3.8", ] [[package]] name = "rust-stemmers" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e46a2036019fdb888131db7a4c847a1063a7493f971ed94ea82c67eada63ca54" dependencies = [ - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde", + "serde_derive", ] [[package]] name = "rustls" version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0d4a31f5d68413404705d6982529b0e11a9aacd4839d1d6222ee3b8cb4015e1" dependencies = [ - "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "ring 0.16.11 (registry+https://github.com/rust-lang/crates.io-index)", - "sct 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "webpki 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.11.0", + "log", + "ring", + "sct", + "webpki", ] [[package]] name = "rustls-native-certs" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75ffeb84a6bd9d014713119542ce415db3a3e4748f0bfce1e1416cd224a23a5" dependencies = [ - "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustls 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", - "schannel 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl-probe", + "rustls", + "schannel", + "security-framework", ] [[package]] name = "ryu" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3d612bc64430efeb3f7ee6ef26d590dce0c43249217bddc62112540c7941e1" [[package]] name = "safemem" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" [[package]] name = "same-file" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" dependencies = [ - "winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util", ] [[package]] name = "sass-rs" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cabcf7c6e55053f359911187ac401409aad2dc14338cae972dec266fee486abd" dependencies = [ - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", - "sass-sys 0.4.18 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "sass-sys", ] [[package]] name = "sass-sys" -version = "0.4.18" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0df9ac0fd0b8d62a99b9948094dcd56c441e3e10bf49f9b12da40b2183804908" dependencies = [ - "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "cc", + "libc", + "num_cpus", + "pkg-config", ] [[package]] name = "schannel" -version = "0.1.17" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", + "winapi 0.3.8", ] [[package]] name = "scoped_threadpool" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" [[package]] name = "scopeguard" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "sct" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c" dependencies = [ - "ring 0.16.11 (registry+https://github.com/rust-lang/crates.io-index)", - "untrusted 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "ring", + "untrusted", ] [[package]] name = "search" version = "0.1.0" dependencies = [ - "ammonia 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "elasticlunr-rs 2.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "errors 0.1.0", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "library 0.1.0", + "ammonia", + "elasticlunr-rs", + "errors", + "lazy_static", + "library", ] [[package]] name = "security-framework" -version = "0.4.1" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64808902d7d99f78eaddd2b4e2509713babc3dc3c85ad6f4c447680f3c01e535" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework-sys 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", ] [[package]] name = "security-framework-sys" -version = "0.4.1" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17bf11d99252f512695eb468de5516e5cf75455521e69dfe343f3b74e4748405" dependencies = [ - "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation-sys", + "libc", ] -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "serde" -version = "1.0.104" +version = "1.0.110" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99e7b308464d16b56eba9964e4972a3eee817760ab60d88c3f86e1fecb08204c" +dependencies = [ + "serde_derive", +] [[package]] name = "serde_derive" -version = "1.0.104" +version = "1.0.110" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "818fbf6bfa9a42d3bfcaca148547aa00c7b915bec71d1757aa2d44ca68771984" dependencies = [ - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "syn", ] [[package]] name = "serde_json" -version = "1.0.48" +version = "1.0.53" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "993948e75b189211a9b31a7528f950c6adc21f9720b6438ff80a7fa2f864cea2" dependencies = [ - "indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "indexmap", + "itoa", + "ryu", + "serde", ] [[package]] name = "serde_urlencoded" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97" dependencies = [ - "dtoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "dtoa", + "itoa", + "serde", + "url", ] [[package]] name = "sha-1" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" dependencies = [ - "block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", - "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "block-buffer", + "digest", + "fake-simd", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" +dependencies = [ + "block-buffer", + "digest", + "fake-simd", + "opaque-debug", ] [[package]] name = "siphasher" -version = "0.3.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac" + +[[package]] +name = "siphasher" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa8f3741c7372e75519bd9346068370c9cdaabcc1f9599cbcf2a2719352286b7" [[package]] name = "site" version = "0.1.0" dependencies = [ - "config 0.1.0", - "errors 0.1.0", - "front_matter 0.1.0", - "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "imageproc 0.1.0", - "library 0.1.0", - "link_checker 0.1.0", - "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sass-rs 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "search 0.1.0", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "templates 0.1.0", - "tera 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "utils 0.1.0", + "config", + "errors", + "front_matter", + "glob", + "imageproc", + "library", + "link_checker", + "rayon", + "sass-rs", + "search", + "serde", + "serde_derive", + "tempfile", + "templates", + "tera", + "utils", ] [[package]] name = "slab" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" [[package]] name = "slotmap" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c46a3482db8f247956e464d783693ece164ca056e6e67563ee5505bdb86452cd" [[package]] name = "slug" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3bc762e6a4b6c6fcaade73e77f9ebc6991b676f88bb2358bddb56560f073373" dependencies = [ - "deunicode 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "deunicode", ] [[package]] name = "smallvec" -version = "1.2.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7cb5678e1615754284ec264d9bb5b4c27d2018577fd90ac0ceb578591ed5ee4" [[package]] name = "spin" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "string_cache" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2940c75beb4e3bf3a494cef919a747a2cb81e52571e212bfbd185074add7208a" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "new_debug_unreachable 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_shared 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", + "new_debug_unreachable", + "phf_shared 0.8.0", + "precomputed-hash", + "serde", ] [[package]] name = "string_cache_codegen" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f24c8e5e19d22a726626f1a5e16fe15b132dcf21d10177fa5a45ce7962996b97" dependencies = [ - "phf_generator 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_shared 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_generator 0.8.0", + "phf_shared 0.8.0", + "proc-macro2", + "quote", ] [[package]] name = "strsim" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "strum" -version = "0.15.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6138f8f88a16d90134763314e3fc76fa3ed6a7db4725d6acf9a3ef95a3188d22" [[package]] name = "strum_macros" -version = "0.15.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0054a7df764039a6cd8592b9de84be4bec368ff081d203a7d5371cbfa8e65c81" dependencies = [ - "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", + "heck", + "proc-macro2", + "quote", + "syn", ] [[package]] name = "syn" -version = "0.15.44" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87bc5b2815ebb664de0392fdf1b95b6d10e160f86d9f64ff65e5679841ca06a" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "syn" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "unicode-xid", ] [[package]] name = "syn-mid" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7be3539f6c128a931cf19dcee741c1af532c7fd387baa739c03dd2e96479338a" dependencies = [ - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "syn", ] [[package]] name = "syntect" -version = "3.2.0" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83b43a6ca1829ccb0c933b615c9ea83ffc8793ae240cecbd15119b13d741161d" dependencies = [ - "bincode 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "flate2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "onig 4.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "plist 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", - "walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bincode", + "bitflags", + "flate2", + "fnv", + "lazy_static", + "lazycell", + "onig", + "plist", + "regex-syntax 0.6.17", + "serde", + "serde_derive", + "serde_json", + "walkdir", + "yaml-rust", ] [[package]] name = "tempfile" version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "libc", + "rand 0.7.3", + "redox_syscall", + "remove_dir_all", + "winapi 0.3.8", ] [[package]] name = "templates" version = "0.1.0" dependencies = [ - "base64 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "config 0.1.0", - "csv 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "errors 0.1.0", - "image 0.23.1 (registry+https://github.com/rust-lang/crates.io-index)", - "imageproc 0.1.0", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "library 0.1.0", - "mockito 0.23.3 (registry+https://github.com/rust-lang/crates.io-index)", - "pulldown-cmark 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "reqwest 0.10.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", - "tera 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "toml 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", - "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "utils 0.1.0", + "base64 0.12.1", + "config", + "csv", + "errors", + "image", + "imageproc", + "lazy_static", + "library", + "mockito", + "pulldown-cmark", + "reqwest", + "serde_json", + "sha2", + "tera", + "toml", + "url", + "utils", ] [[package]] name = "tendril" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707feda9f2582d5d680d733e38755547a3e8fb471e7ba11452ecfd9ce93a5d3b" dependencies = [ - "futf 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "utf-8 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futf", + "mac", + "utf-8", ] [[package]] name = "tera" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44567278e3f16c6f888f4a1426d1af33827e6bffbe3911fe24aec2c594f0dfcb" dependencies = [ - "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "chrono-tz 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "globwalk 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "humansize 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", - "slug 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "unic-segment 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono", + "chrono-tz", + "globwalk", + "humansize", + "lazy_static", + "percent-encoding", + "pest", + "pest_derive", + "rand 0.7.3", + "regex", + "serde", + "serde_json", + "slug", + "unic-segment", ] [[package]] name = "termcolor" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f" dependencies = [ - "winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util", ] [[package]] name = "textwrap" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" dependencies = [ - "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-width", ] [[package]] name = "thread_local" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", ] [[package]] name = "tiff" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "002351e428db1eb1d8656d4ca61947c3519ac3191e1c804d4600cd32093b77ad" dependencies = [ - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "miniz_oxide 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder", + "lzw", + "miniz_oxide", ] [[package]] name = "time" -version = "0.1.42" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" dependencies = [ - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "winapi 0.3.8", ] [[package]] name = "tokio" -version = "0.2.13" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d099fa27b9702bed751524694adbe393e18b36b204da91eb1cbbbbb4a5ee2d58" dependencies = [ - "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-macros 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.5.4", + "fnv", + "futures-core", + "iovec", + "lazy_static", + "memchr", + "mio", + "num_cpus", + "pin-project-lite", + "slab", + "tokio-macros", ] [[package]] name = "tokio-macros" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c3acc6aa564495a0f2e1d59fab677cd7f81a19994cfc7f3ad0e64301560389" dependencies = [ - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "syn", ] [[package]] name = "tokio-rustls" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15cb62a0d2770787abc96e99c1cd98fcf17f94959f3af63ca85bdfb203f051b4" dependencies = [ - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rustls 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", - "webpki 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-tls" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core", + "rustls", + "tokio", + "webpki", ] [[package]] name = "tokio-util" -version = "0.2.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499" dependencies = [ - "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.5.4", + "futures-core", + "futures-sink", + "log", + "pin-project-lite", + "tokio", ] [[package]] name = "toml" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a" dependencies = [ - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "serde", ] [[package]] name = "tower-service" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e987b6bf443f4b5b3b6f38704195592cca41c5bb7aedd3c3693c7081f8289860" [[package]] name = "try-lock" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" [[package]] name = "typenum" -version = "1.11.2" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" [[package]] name = "ucd-trie" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" [[package]] name = "unic-char-property" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" dependencies = [ - "unic-char-range 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unic-char-range", ] [[package]] name = "unic-char-range" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" [[package]] name = "unic-common" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" [[package]] name = "unic-segment" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23" dependencies = [ - "unic-ucd-segment 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unic-ucd-segment", ] [[package]] name = "unic-ucd-segment" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700" dependencies = [ - "unic-char-property 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "unic-char-range 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "unic-ucd-version 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unic-char-property", + "unic-char-range", + "unic-ucd-version", ] [[package]] name = "unic-ucd-version" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" dependencies = [ - "unic-common 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unic-common", ] [[package]] name = "unicase" version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" dependencies = [ - "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check", ] [[package]] name = "unicode-bidi" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" dependencies = [ - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "matches", ] [[package]] name = "unicode-normalization" version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4" dependencies = [ - "smallvec 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec", ] [[package]] name = "unicode-segmentation" version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" [[package]] name = "unicode-width" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "unicode-xid" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" [[package]] name = "unicode-xid" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" [[package]] name = "untrusted" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" dependencies = [ - "idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "idna", + "matches", + "percent-encoding", ] [[package]] name = "utf-8" version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05e42f7c18b8f902290b009cde6d651262f956c98bc51bca4cd1d511c9cd85c7" + +[[package]] +name = "utf8-ranges" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ae116fef2b7fea257ed6440d3cfcff7f190865f170cdad00bb6465bf18ecba" [[package]] name = "utils" version = "0.1.0" dependencies = [ - "errors 0.1.0", - "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "slug 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tera 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "toml 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "errors", + "filetime", + "percent-encoding", + "serde", + "serde_derive", + "slug", + "tempfile", + "tera", + "toml", + "unicode-segmentation", + "walkdir", ] -[[package]] -name = "vcpkg" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "vec_map" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" [[package]] name = "void" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" [[package]] name = "walkdir" version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" dependencies = [ - "same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "same-file", + "winapi 0.3.8", + "winapi-util", ] [[package]] name = "want" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" dependencies = [ - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "log", + "try-lock", ] [[package]] name = "wasi" version = "0.9.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "wasm-bindgen" -version = "0.2.59" +version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3c7d40d09cdbf0f4895ae58cf57d92e1e57a9dd8ed2e8390514b54a47cc5551" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-macro 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "serde", + "serde_json", + "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.59" +version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3972e137ebf830900db522d6c8fd74d1900dcfc733462e9a12e942b00b4ac94" dependencies = [ - "bumpalo 3.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-shared 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "bumpalo", + "lazy_static", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.9" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a369c5e1dfb7569e14d62af4da642a3cbc2f9a3652fe586e26ac22222aa4b04" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "js-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", - "web-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.59" +version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cd85aa2c579e8892442954685f0d801f9129de24fa2136b2c6a539c76b65776" dependencies = [ - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-macro-support 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "quote", + "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.59" +version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eb197bd3a47553334907ffd2f16507b4f4f01bbec3ac921a7719e0decdfe72a" dependencies = [ - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-backend 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-shared 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.59" +version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a91c2916119c17a8e316507afaaa2dd94b47646048014bbdf6bef098c1bb58ad" [[package]] name = "web-sys" -version = "0.3.36" +version = "0.3.39" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bc359e5dd3b46cb9687a051d50a2fdd228e4ba7cf6fcf861a5365c3d671a642" dependencies = [ - "js-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "js-sys", + "wasm-bindgen", ] [[package]] name = "webpki" version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f50e1972865d6b1adb54167d1c8ed48606004c2c9d0ea5f1eeb34d95e863ef" dependencies = [ - "ring 0.16.11 (registry+https://github.com/rust-lang/crates.io-index)", - "untrusted 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "ring", + "untrusted", ] [[package]] name = "webpki-roots" version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91cd5736df7f12a964a5067a12c62fa38e1bd8080aff1f80bc29be7c80d19ab4" dependencies = [ - "webpki 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)", + "webpki", ] [[package]] name = "winapi" version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" [[package]] name = "winapi" version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" dependencies = [ - "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", ] [[package]] name = "winapi-build" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" dependencies = [ - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8", ] [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "winreg" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" dependencies = [ - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8", ] [[package]] name = "ws" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c51a2c47b5798ccc774ffb93ff536aec7c4275d722fd9c740c83cdd1af1f2d94" dependencies = [ - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "mio-extras 2.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "sha-1 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder", + "bytes 0.4.12", + "httparse", + "log", + "mio", + "mio-extras", + "rand 0.7.3", + "sha-1", + "slab", + "url", ] [[package]] name = "ws2_32-sys" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8", + "winapi-build", ] [[package]] name = "xml-rs" -version = "0.8.0" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b07db065a5cf61a7e4ba64f29e67db906fb1787316516c4e6e5ff0fea1efcd8a" [[package]] name = "xml5ever" version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b1b52e6e8614d4a58b8e70cf51ec0cc21b256ad8206708bcff8139b5bbd6a59" dependencies = [ - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "markup5ever 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "log", + "mac", + "markup5ever", + "time", ] [[package]] name = "yaml-rust" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65923dd1784f44da1d2c3dbbc5e822045628c590ba72123e1c73d3c230c4434d" dependencies = [ - "linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "linked-hash-map", ] [[package]] name = "zola" -version = "0.10.1" +version = "0.11.0" dependencies = [ - "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", - "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ctrlc 3.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "errors 0.1.0", - "front_matter 0.1.0", - "globset 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.13.3 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper-staticfile 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "notify 4.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "open 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rebuild 0.1.0", - "site 0.1.0", - "termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", - "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "utils 0.1.0", - "ws 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "atty", + "chrono", + "clap", + "ctrlc", + "errors", + "front_matter", + "globset", + "hyper", + "hyper-staticfile", + "lazy_static", + "notify", + "open", + "rebuild", + "site", + "termcolor", + "tokio", + "url", + "utils", + "ws", ] - -[metadata] -"checksum adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2" -"checksum aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)" = "8716408b8bc624ed7f65d223ddb9ac2d044c0547b6fa4b0d554f3a9540496ada" -"checksum ammonia 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "89eac85170f4b3fb3dc5e442c1cfb036cb8eecf9dbbd431a161ffad15d90ea3b" -"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" -"checksum assert-json-diff 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9c356497fd3417158bcb318266ac83c391219ca3a5fa659049f42e0041ab57d6" -"checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -"checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" -"checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" -"checksum base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" -"checksum base64 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7d5ca2cd0adc3f48f9e9ea5a6bbdf9ccc0bfade884847e484d452414c7ccffb3" -"checksum bincode 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5753e2a71534719bf3f4e57006c3a4f0d2c672a4b676eec84161f763eca87dbf" -"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" -"checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" -"checksum block-padding 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" -"checksum bstr 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "502ae1441a0a5adb8fbd38a5955a6416b9493e92b465de5e4a9bde6a539c2c48" -"checksum bumpalo 3.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1f359dc14ff8911330a51ef78022d376f25ed00248912803b58f00cb1c27f742" -"checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" -"checksum bytemuck 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "37fa13df2292ecb479ec23aa06f4507928bef07839be9ef15281411076629431" -"checksum byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" -"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" -"checksum bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1" -"checksum cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)" = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" -"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" -"checksum chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2" -"checksum chrono-tz 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e0e430fad0384e4defc3dc6b1223d1b886087a8bf9b7080e5ae027f73851ea15" -"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" -"checksum color_quant 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0dbbb57365263e881e805dc77d94697c9118fd94d8da011240555aa7b23445bd" -"checksum colored 1.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f4ffc801dacf156c5854b9df4f425a626539c3a6ef7893cc0c5084a23f0b6c59" -"checksum core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" -"checksum core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" -"checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" -"checksum crossbeam-channel 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "cced8691919c02aac3cb0a1bc2e9b73d89e832bf9a06fc579d4e71b68a2da061" -"checksum crossbeam-deque 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285" -"checksum crossbeam-epoch 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" -"checksum crossbeam-queue 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c695eeca1e7173472a32221542ae469b3e9aac3a4fc81f7696bcad82029493db" -"checksum crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" -"checksum csv 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "00affe7f6ab566df61b4be3ce8cf16bc2576bca0963ceb0955e45d514bf9a279" -"checksum csv-core 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" -"checksum ct-logs 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4d3686f5fa27dbc1d76c751300376e167c5a43387f44bb451fd1c24776e49113" -"checksum ctrlc 3.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7a4ba686dff9fa4c1c9636ce1010b0cf98ceb421361b0bb3d6faeec43bd217a7" -"checksum deflate 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)" = "050ef6de42a33903b30a7497b76b40d3d58691d4d3eec355348c122444a388f0" -"checksum deunicode 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "850878694b7933ca4c9569d30a34b55031b9b139ee1fc7b94a527c4ef960d690" -"checksum difference 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198" -"checksum digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" -"checksum dtoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4358a9e11b9a09cf52383b451b49a169e8d797b68aa02301ff586d70d9661ea3" -"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" -"checksum elasticlunr-rs 2.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "f66a620976c38dbbbcd6355910432cef8b0911b3af86332029752379f0ff7924" -"checksum encoding_rs 0.8.22 (registry+https://github.com/rust-lang/crates.io-index)" = "cd8d03faa7fe0c1431609dfad7bbe827af30f82e1e2ae6f7ee4fca6bd764bc28" -"checksum extend 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fe9db393664b0e6c6230a14115e7e798f80b70f54038dc21165db24c6b7f28fc" -"checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" -"checksum filetime 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1ff6d4dab0aa0c8e6346d46052e93b13a16cf847b54ed357087c35011048cc7d" -"checksum flate2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6bd6d6f4752952feb71363cffc9ebac9411b75b87c6ab6058c40c8900cf43c0f" -"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" -"checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -"checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" -"checksum fs_extra 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5f2a4a2034423744d2cc7ca2068453168dcdb82c438419e639a26bd87839c674" -"checksum fsevent 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5ab7d1bd1bd33cc98b0889831b72da23c0aa4df9cec7e0702f46ecea04b35db6" -"checksum fsevent-sys 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f41b048a94555da0f42f1d632e2e19510084fb8e303b0daa2816e733fb3644a0" -"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" -"checksum futf 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7c9c1ce3fa9336301af935ab852c437817d14cd33690446569392e65170aac3b" -"checksum futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0c77d04ce8edd9cb903932b608268b3fffec4163dc053b3b402bf47eac1f1a8" -"checksum futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f25592f769825e89b92358db00d26f965761e094951ac44d3663ef25b7ac464a" -"checksum futures-io 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a638959aa96152c7a4cddf50fcb1e3fede0583b27157c26e67d6f99904090dc6" -"checksum futures-macro 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9a5081aa3de1f7542a794a397cde100ed903b0630152d0973479018fd85423a7" -"checksum futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3466821b4bc114d95b087b850a724c6f83115e929bc88f1fa98a3304a944c8a6" -"checksum futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7b0a34e53cf6cdcd0178aa573aed466b646eb3db769570841fda0c7ede375a27" -"checksum futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "22766cf25d64306bedf0384da004d05c9974ab104fcc4528f1236181c18004c5" -"checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" -"checksum getopts 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)" = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" -"checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" -"checksum gif 0.10.3 (registry+https://github.com/rust-lang/crates.io-index)" = "471d90201b3b223f3451cd4ad53e34295f16a1df17b1edf3736d47761c3981af" -"checksum glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" -"checksum globset 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "925aa2cac82d8834e2b2a4415b6f6879757fb5c0928fc445ae76461a12eed8f2" -"checksum globwalk 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d9db17aec586697a93219b19726b5b68307eba92898c34b170857343fe67c99d" -"checksum h2 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9d5c295d1c0c68e4e42003d75f908f5e16a1edd1cbe0b0d02e4dc2006a384f47" -"checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" -"checksum hermit-abi 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1010591b26bbfe835e9faeabeb11866061cc7dcebffd56ad7d0942d0e61aefd8" -"checksum html5ever 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)" = "aafcf38a1a36118242d29b92e1b08ef84e67e4a5ed06e0a80be20e6a32bfed6b" -"checksum http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b708cc7f06493459026f53b9a61a7a121a5d1ec6238dee58ea4941132b30156b" -"checksum http-body 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b" -"checksum httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" -"checksum humansize 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b6cab2627acfc432780848602f3f558f7e9dd427352224b0d9324025796d2a5e" -"checksum humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" -"checksum hyper 0.13.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e7b15203263d1faa615f9337d79c1d37959439dc46c2b4faab33286fadc2a1c5" -"checksum hyper-rustls 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac965ea399ec3a25ac7d13b8affd4b8f39325cca00858ddf5eb29b79e6b14b08" -"checksum hyper-staticfile 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "241e2c25e6221c5bfaea5034cbf09879e30a443ad7ec674116091bab47207a5b" -"checksum hyper-tls 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3adcd308402b9553630734e9c36b77a7e48b3821251ca2493e8cd596763aafaa" -"checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" -"checksum ignore 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "522daefc3b69036f80c7d2990b28ff9e0471c683bad05ca258e0a01dd22c5a1e" -"checksum image 0.23.1 (registry+https://github.com/rust-lang/crates.io-index)" = "403f0c29211dc50a78eb53eeeae87945d44cb63071881834212f36677fccb2b4" -"checksum indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "076f042c5b7b98f31d205f1249267e12a6518c1481e9dae9764af19b707d2292" -"checksum inflate 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1cdb29978cc5797bd8dcc8e5bf7de604891df2a8dc576973d71a281e916db2ff" -"checksum inotify 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "24e40d6fd5d64e2082e0c796495c8ef5ad667a96d03e5aaa0becfd9d47bcbfb8" -"checksum inotify-sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e74a1aa87c59aeff6ef2cc2fa62d41bc43f54952f55652656b18a02fd5e356c0" -"checksum iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" -"checksum itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e" -"checksum jpeg-decoder 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "0256f0aec7352539102a9efbcb75543227b7ab1117e0f95450023af730128451" -"checksum js-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)" = "1cb931d43e71f560c81badb0191596562bafad2be06a3f9025b845c847c60df5" -"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -"checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" -"checksum libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)" = "eb147597cdf94ed43ab7a9038716637d2d1bf2bc571da995d0028dec06bd3018" -"checksum line-wrap 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" -"checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83" -"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" -"checksum lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7d947cbb889ed21c2a84be6ffbaebf5b4e0f4340638cba0444907e38b56be084" -"checksum mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" -"checksum maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" -"checksum markup5ever 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aae38d669396ca9b707bfc3db254bc382ddb94f57cc5c235f34623a669a01dab" -"checksum markup5ever_rcdom 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f015da43bcd8d4f144559a3423f4591d69b8ce0652c905374da7205df336ae2b" -"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" -"checksum maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" -"checksum memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" -"checksum memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9" -"checksum mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)" = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" -"checksum mime_guess 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" -"checksum miniz_oxide 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "aa679ff6578b1cddee93d7e82e263b94a575e0bfced07284eb0c037c1d2416a5" -"checksum mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)" = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f" -"checksum mio-extras 2.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" -"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" -"checksum mockito 0.23.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ae82e6bad452dd42b0f4437414eae3c8c27b958a55dc6c198e351042c4e3024e" -"checksum native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "2b0d88c06fe90d5ee94048ba40409ef1d9315d86f6f38c2efdaad4fb50c58b2d" -"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" -"checksum new_debug_unreachable 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" -"checksum nix 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)" = "50e4785f2c3b7589a0d0c1dd60285e1188adac4006e8abd6dd578e1567027363" -"checksum notify 4.0.15 (registry+https://github.com/rust-lang/crates.io-index)" = "80ae4a7688d1fab81c5bf19c64fc8db920be8d519ce6336ed4e7efe024724dbd" -"checksum num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba" -"checksum num-iter 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "dfb0800a0291891dd9f4fe7bd9c19384f98f7fbe0cd0f39a2c6b88b9868bbc00" -"checksum num-rational 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "da4dc79f9e6c81bef96148c8f6b8e72ad4541caa4a24373e900a36da07de03a3" -"checksum num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096" -"checksum num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "46203554f085ff89c235cd12f7075f3233af9b11ed7c9e16dfe2560d03313ce6" -"checksum onig 4.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8518fcb2b1b8c2f45f0ad499df4fda6087fc3475ca69a185c173b8315d2fb383" -"checksum onig_sys 69.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388410bf5fa341f10e58e6db3975f4bea1ac30247dd79d37a9e5ced3cb4cc3b0" -"checksum opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" -"checksum open 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7c283bf0114efea9e42f1a60edea9859e8c47528eae09d01df4b29c1e489cc48" -"checksum openssl 0.10.28 (registry+https://github.com/rust-lang/crates.io-index)" = "973293749822d7dd6370d6da1e523b0d1db19f06c459134c658b2a4261378b52" -"checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" -"checksum openssl-sys 0.9.54 (registry+https://github.com/rust-lang/crates.io-index)" = "1024c0a59774200a555087a6da3f253a9095a5f344e353b212ac4c8b8e450986" -"checksum parse-zoneinfo 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "feece9d0113b400182a7d00adcff81ccf29158c49c5abd11e2eed8589bf6ff07" -"checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" -"checksum pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" -"checksum pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" -"checksum pest_generator 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "27e5277315f6b4f27e0e6744feb5d5ba1891e7164871033d3c8344c6783b349a" -"checksum pest_meta 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d" -"checksum phf 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" -"checksum phf_codegen 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" -"checksum phf_generator 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" -"checksum phf_shared 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" -"checksum pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7804a463a8d9572f13453c516a5faea534a2403d7ced2f0c7e100eeff072772c" -"checksum pin-project-internal 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "385322a45f2ecf3410c68d2a549a4a2685e8051d0f278e39743ff4e451cb9b3f" -"checksum pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "237844750cfbb86f67afe27eee600dfbbcb6188d734139b534cbfbf4f96792ae" -"checksum pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587" -"checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" -"checksum plist 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5f2a9f075f6394100e7c105ed1af73fb1859d6fd14e49d4290d578120beb167f" -"checksum png 0.16.1 (registry+https://github.com/rust-lang/crates.io-index)" = "46060468187c21c00ffa2a920690b29997d7fd543f5a4d400461e4a7d4fccde8" -"checksum ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b" -"checksum precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" -"checksum proc-macro-error 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "e7959c6467d962050d639361f7703b2051c43036d03493c36f01d440fdd3138a" -"checksum proc-macro-error-attr 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "e4002d9f55991d5e019fb940a90e1a95eb80c24e77cb2462dd4dc869604d543a" -"checksum proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)" = "ecd45702f76d6d3c75a80564378ae228a85f0b59d2f3ed43c91b4a69eb2ebfc5" -"checksum proc-macro-nested 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "369a6ed065f249a159e06c45752c780bda2fb53c995718f9e484d08daa9eb42e" -"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" -"checksum proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6c09721c6781493a2a492a96b5a5bf19b65917fe6728884e7c44dd0c60ca3435" -"checksum pulldown-cmark 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2c2d7fd131800e0d63df52aff46201acaab70b431a4a1ec6f0343fe8e64f35a4" -"checksum quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" -"checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" -"checksum quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f" -"checksum rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -"checksum rand_chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -"checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -"checksum rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -"checksum rand_pcg 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -"checksum rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "db6ce3297f9c85e16621bb8cca38a06779ffc31bb8184e1be4bed2be4678a098" -"checksum rayon-core 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "08a89b46efaf957e52b18062fb2f4660f8b8a4dde1807ca002690868ef2c85a9" -"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" -"checksum regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "322cf97724bea3ee221b78fe25ac9c46114ebb51747ad5babd51a2fc6a8235a8" -"checksum regex-automata 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4" -"checksum regex-syntax 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)" = "1132f845907680735a84409c3bebc64d1364a5683ffbce899550cd09d5eaefc1" -"checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" -"checksum reqwest 0.10.4 (registry+https://github.com/rust-lang/crates.io-index)" = "02b81e49ddec5109a9dcfc5f2a317ff53377c915e9ae9d4f2fb50914b85614e2" -"checksum ring 0.16.11 (registry+https://github.com/rust-lang/crates.io-index)" = "741ba1704ae21999c00942f9f5944f801e977f54302af346b596287599ad1862" -"checksum rust-stemmers 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e46a2036019fdb888131db7a4c847a1063a7493f971ed94ea82c67eada63ca54" -"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -"checksum rustls 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c0d4a31f5d68413404705d6982529b0e11a9aacd4839d1d6222ee3b8cb4015e1" -"checksum rustls-native-certs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a75ffeb84a6bd9d014713119542ce415db3a3e4748f0bfce1e1416cd224a23a5" -"checksum ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8" -"checksum safemem 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" -"checksum same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -"checksum sass-rs 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "cabcf7c6e55053f359911187ac401409aad2dc14338cae972dec266fee486abd" -"checksum sass-sys 0.4.18 (registry+https://github.com/rust-lang/crates.io-index)" = "36fdf4ec7f28949c660cca573d7bdfda683cf7eef2b59670e6650607bc3108e9" -"checksum schannel 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "507a9e6e8ffe0a4e0ebb9a10293e62fdf7657c06f1b8bb07a8fcf697d2abf295" -"checksum scoped_threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" -"checksum scopeguard 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" -"checksum sct 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c" -"checksum security-framework 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "97bbedbe81904398b6ebb054b3e912f99d55807125790f3198ac990d98def5b0" -"checksum security-framework-sys 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "06fd2f23e31ef68dd2328cc383bd493142e46107a3a0e24f7d734e3f3b80fe4c" -"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -"checksum serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449" -"checksum serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64" -"checksum serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)" = "9371ade75d4c2d6cb154141b9752cf3781ec9c05e0e5cf35060e1e70ee7b9c25" -"checksum serde_urlencoded 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97" -"checksum sha-1 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" -"checksum siphasher 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "83da420ee8d1a89e640d0948c646c1c088758d3a3c538f943bfa97bdac17929d" -"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" -"checksum slotmap 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c46a3482db8f247956e464d783693ece164ca056e6e67563ee5505bdb86452cd" -"checksum slug 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b3bc762e6a4b6c6fcaade73e77f9ebc6991b676f88bb2358bddb56560f073373" -"checksum smallvec 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5c2fb2ec9bcd216a5b0d0ccf31ab17b5ed1d627960edff65bbe95d3ce221cefc" -"checksum spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" -"checksum string_cache 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2940c75beb4e3bf3a494cef919a747a2cb81e52571e212bfbd185074add7208a" -"checksum string_cache_codegen 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f24c8e5e19d22a726626f1a5e16fe15b132dcf21d10177fa5a45ce7962996b97" -"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" -"checksum strum 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e5d1c33039533f051704951680f1adfd468fd37ac46816ded0d9ee068e60f05f" -"checksum strum_macros 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)" = "47cd23f5c7dee395a00fa20135e2ec0fffcdfa151c56182966d7a3261343432e" -"checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" -"checksum syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)" = "123bd9499cfb380418d509322d7a6d52e5315f064fe4b3ad18a53d6b92c07859" -"checksum syn-mid 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7be3539f6c128a931cf19dcee741c1af532c7fd387baa739c03dd2e96479338a" -"checksum syntect 3.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e80b8831c5a543192ffc3727f01cf0e57579c6ac15558e3048bfb5708892167b" -"checksum tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" -"checksum tendril 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "707feda9f2582d5d680d733e38755547a3e8fb471e7ba11452ecfd9ce93a5d3b" -"checksum tera 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5422f81514a243fc63f0c895adba9efcfce24d53ca6e746fc26c12d7a5d7c98d" -"checksum termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f" -"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -"checksum thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" -"checksum tiff 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "002351e428db1eb1d8656d4ca61947c3519ac3191e1c804d4600cd32093b77ad" -"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" -"checksum tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "0fa5e81d6bc4e67fe889d5783bd2a128ab2e0cfa487e0be16b6a8d177b101616" -"checksum tokio-macros 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f0c3acc6aa564495a0f2e1d59fab677cd7f81a19994cfc7f3ad0e64301560389" -"checksum tokio-rustls 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4adb8b3e5f86b707f1b54e7c15b6de52617a823608ccda98a15d3a24222f265a" -"checksum tokio-tls 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7bde02a3a5291395f59b06ec6945a3077602fac2b07eeeaf0dee2122f3619828" -"checksum tokio-util 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "571da51182ec208780505a32528fc5512a8fe1443ab960b3f2f3ef093cd16930" -"checksum toml 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a" -"checksum tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e987b6bf443f4b5b3b6f38704195592cca41c5bb7aedd3c3693c7081f8289860" -"checksum try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" -"checksum typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9" -"checksum ucd-trie 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8f00ed7be0c1ff1e24f46c3d2af4859f7e863672ba3a6e92e7cff702bf9f06c2" -"checksum unic-char-property 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" -"checksum unic-char-range 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" -"checksum unic-common 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" -"checksum unic-segment 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23" -"checksum unic-ucd-segment 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700" -"checksum unic-ucd-version 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" -"checksum unicase 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" -"checksum unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4" -"checksum unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" -"checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" -"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" -"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" -"checksum untrusted 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60369ef7a31de49bcb3f6ca728d4ba7300d9a1658f94c727d4cab8c8d9f4aece" -"checksum url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" -"checksum utf-8 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)" = "05e42f7c18b8f902290b009cde6d651262f956c98bc51bca4cd1d511c9cd85c7" -"checksum vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168" -"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" -"checksum version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce" -"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" -"checksum walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" -"checksum want 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -"checksum wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)" = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" -"checksum wasm-bindgen 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)" = "3557c397ab5a8e347d434782bcd31fc1483d927a6826804cec05cc792ee2519d" -"checksum wasm-bindgen-backend 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)" = "e0da9c9a19850d3af6df1cb9574970b566d617ecfaf36eb0b706b6f3ef9bd2f8" -"checksum wasm-bindgen-futures 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)" = "457414a91863c0ec00090dba537f88ab955d93ca6555862c29b6d860990b8a8a" -"checksum wasm-bindgen-macro 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)" = "0f6fde1d36e75a714b5fe0cffbb78978f222ea6baebb726af13c78869fdb4205" -"checksum wasm-bindgen-macro-support 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)" = "25bda4168030a6412ea8a047e27238cadf56f0e53516e1e83fec0a8b7c786f6d" -"checksum wasm-bindgen-shared 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)" = "fc9f36ad51f25b0219a3d4d13b90eb44cd075dff8b6280cca015775d7acaddd8" -"checksum web-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)" = "721c6263e2c66fd44501cc5efbfa2b7dfa775d13e4ea38c46299646ed1f9c70a" -"checksum webpki 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f1f50e1972865d6b1adb54167d1c8ed48606004c2c9d0ea5f1eeb34d95e863ef" -"checksum webpki-roots 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "91cd5736df7f12a964a5067a12c62fa38e1bd8080aff1f80bc29be7c80d19ab4" -"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" -"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" -"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" -"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -"checksum winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4ccfbf554c6ad11084fb7517daca16cfdcaccbdadba4fc336f032a8b12c2ad80" -"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -"checksum winreg 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" -"checksum ws 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a2c47b5798ccc774ffb93ff536aec7c4275d722fd9c740c83cdd1af1f2d94" -"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" -"checksum xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "541b12c998c5b56aa2b4e6f18f03664eef9a4fd0a246a55594efae6cc2d964b5" -"checksum xml5ever 0.16.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b1b52e6e8614d4a58b8e70cf51ec0cc21b256ad8206708bcff8139b5bbd6a59" -"checksum yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "65923dd1784f44da1d2c3dbbc5e822045628c590ba72123e1c73d3c230c4434d" diff --git a/Cargo.toml b/Cargo.toml index ed6d010f..ea8580d8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zola" -version = "0.10.1" +version = "0.11.0" authors = ["Vincent Prouillet "] edition = "2018" license = "MIT" diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 72273383..8bd2c620 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -19,9 +19,9 @@ stages: linux-stable: imageName: 'ubuntu-16.04' rustup_toolchain: stable - linux-1.39: + linux-pinned: imageName: 'ubuntu-16.04' - rustup_toolchain: 1.39.0 + rustup_toolchain: 1.41.0 pool: vmImage: $(imageName) steps: diff --git a/completions/_zola.ps1 b/completions/_zola.ps1 index 89915d97..977ee071 100644 --- a/completions/_zola.ps1 +++ b/completions/_zola.ps1 @@ -20,8 +20,8 @@ Register-ArgumentCompleter -Native -CommandName 'zola' -ScriptBlock { $completions = @(switch ($command) { 'zola' { - [CompletionResult]::new('-c', 'c', [CompletionResultType]::ParameterName, 'Path to a config file other than config.toml') - [CompletionResult]::new('--config', 'config', [CompletionResultType]::ParameterName, 'Path to a config file other than config.toml') + [CompletionResult]::new('-c', 'c', [CompletionResultType]::ParameterName, 'Path to a config file other than config.toml in the root of project') + [CompletionResult]::new('--config', 'config', [CompletionResultType]::ParameterName, 'Path to a config file other than config.toml in the root of project') [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information') [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information') [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information') diff --git a/completions/zola.fish b/completions/zola.fish index cb3302e5..a0d1bad8 100644 --- a/completions/zola.fish +++ b/completions/zola.fish @@ -1,4 +1,4 @@ -complete -c zola -n "__fish_use_subcommand" -s c -l config -d 'Path to a config file other than config.toml' +complete -c zola -n "__fish_use_subcommand" -s c -l config -d 'Path to a config file other than config.toml in the root of project' complete -c zola -n "__fish_use_subcommand" -s h -l help -d 'Prints help information' complete -c zola -n "__fish_use_subcommand" -s V -l version -d 'Prints version information' complete -c zola -n "__fish_use_subcommand" -f -a "init" -d 'Create a new Zola project' diff --git a/components/config/Cargo.toml b/components/config/Cargo.toml index 588996ff..7fcf6ba7 100644 --- a/components/config/Cargo.toml +++ b/components/config/Cargo.toml @@ -11,7 +11,7 @@ serde_derive = "1" chrono = "0.4" globset = "0.4" lazy_static = "1" -syntect = "=3.2.0" +syntect = "4.1" errors = { path = "../errors" } utils = { path = "../utils" } diff --git a/components/config/examples/generate_sublime.rs b/components/config/examples/generate_sublime.rs index 9bce4528..1854d889 100644 --- a/components/config/examples/generate_sublime.rs +++ b/components/config/examples/generate_sublime.rs @@ -26,7 +26,10 @@ fn main() { (Some(ref cmd), Some(ref package_dir), Some(ref packpath_newlines)) if cmd == "synpack" => { let mut builder = SyntaxSetBuilder::new(); builder.add_plain_text_syntax(); - builder.add_from_folder(package_dir, true).unwrap(); + match builder.add_from_folder(package_dir, true) { + Ok(_) => (), + Err(e) => println!("Loading error: {:?}", e) + }; let ss = builder.build(); dump_to_file(&ss, packpath_newlines).unwrap(); let mut syntaxes: HashMap> = HashMap::new(); diff --git a/components/config/src/config.rs b/components/config/src/config.rs index 210f60ef..393db8de 100644 --- a/components/config/src/config.rs +++ b/components/config/src/config.rs @@ -47,15 +47,15 @@ impl Default for Slugify { pub struct Language { /// The language code pub code: String, - /// Whether to generate a RSS feed for that language, defaults to `false` - pub rss: bool, + /// Whether to generate a feed for that language, defaults to `false` + pub feed: bool, /// Whether to generate search index for that language, defaults to `false` pub search: bool, } impl Default for Language { fn default() -> Self { - Language { code: String::new(), rss: false, search: false } + Language { code: String::new(), feed: false, search: false } } } @@ -68,8 +68,8 @@ pub struct Taxonomy { /// by this much pub paginate_by: Option, pub paginate_path: Option, - /// Whether to generate a RSS feed only for each taxonomy term, defaults to false - pub rss: bool, + /// Whether to generate a feed only for each taxonomy term, defaults to false + pub feed: bool, /// The language for that taxonomy, only used in multilingual sites. /// Defaults to the config `default_language` if not set pub lang: String, @@ -99,7 +99,7 @@ impl Default for Taxonomy { name: String::new(), paginate_by: None, paginate_path: None, - rss: false, + feed: false, lang: String::new(), } } @@ -155,10 +155,13 @@ pub struct Config { /// Defaults to "base16-ocean-dark" pub highlight_theme: String, - /// Whether to generate RSS. Defaults to false - pub generate_rss: bool, - /// The number of articles to include in the RSS feed. Defaults to including all items. - pub rss_limit: Option, + /// Whether to generate a feed. Defaults to false. + pub generate_feed: bool, + /// The number of articles to include in the feed. Defaults to including all items. + pub feed_limit: Option, + /// The filename to use for feeds. Used to find the template, too. + /// Defaults to "atom.xml", with "rss.xml" also having a template provided out of the box. + pub feed_filename: String, /// If set, files from static/ will be hardlinked instead of copied to the output dir. pub hard_link_static: bool, @@ -215,6 +218,10 @@ impl Config { bail!("Highlight theme {} not available", config.highlight_theme) } + if config.languages.iter().any(|l| l.code == config.default_language) { + bail!("Default language `{}` should not appear both in `config.default_language` and `config.languages`", config.default_language) + } + config.build_timestamp = Some(Utc::now().timestamp()); if !config.ignored_content.is_empty() { @@ -272,11 +279,12 @@ impl Config { /// Makes a url, taking into account that the base url might have a trailing slash pub fn make_permalink(&self, path: &str) -> String { - let trailing_bit = if path.ends_with('/') || path.ends_with("rss.xml") || path.is_empty() { - "" - } else { - "/" - }; + let trailing_bit = + if path.ends_with('/') || path.ends_with(&self.feed_filename) || path.is_empty() { + "" + } else { + "/" + }; // Index section with a base url that has a trailing slash if self.base_url.ends_with('/') && path == "/" { @@ -380,8 +388,9 @@ impl Default for Config { highlight_theme: "base16-ocean-dark".to_string(), default_language: "en".to_string(), languages: Vec::new(), - generate_rss: false, - rss_limit: None, + generate_feed: false, + feed_limit: None, + feed_filename: "atom.xml".to_string(), hard_link_static: false, taxonomies: Vec::new(), compile_sass: false, @@ -489,10 +498,10 @@ hello = "world" // https://github.com/Keats/gutenberg/issues/486 #[test] - fn doesnt_add_trailing_slash_to_rss() { + fn doesnt_add_trailing_slash_to_feed() { let mut config = Config::default(); config.base_url = "http://vincent.is/".to_string(); - assert_eq!(config.make_permalink("rss.xml"), "http://vincent.is/rss.xml"); + assert_eq!(config.make_permalink("atom.xml"), "http://vincent.is/atom.xml"); } #[test] @@ -657,4 +666,19 @@ anchors = "off" assert_eq!(config.slugify.taxonomies, SlugifyStrategy::Safe); assert_eq!(config.slugify.anchors, SlugifyStrategy::Off); } + + #[test] + fn error_on_language_set_twice() { + let config_str = r#" +base_url = "https://remplace-par-ton-url.fr" +default_language = "fr" +languages = [ + { code = "fr" }, + { code = "en" }, +] + "#; + let config = Config::parse(config_str); + let err = config.unwrap_err(); + assert_eq!("Default language `fr` should not appear both in `config.default_language` and `config.languages`", format!("{}", err)); + } } diff --git a/components/config/src/highlighting.rs b/components/config/src/highlighting.rs index 33ccc16a..263b5f98 100644 --- a/components/config/src/highlighting.rs +++ b/components/config/src/highlighting.rs @@ -9,11 +9,11 @@ use crate::config::Config; lazy_static! { pub static ref SYNTAX_SET: SyntaxSet = { let ss: SyntaxSet = - from_binary(include_bytes!("../../../sublime_syntaxes/newlines.packdump")); + from_binary(include_bytes!("../../../sublime/syntaxes/newlines.packdump")); ss }; pub static ref THEME_SET: ThemeSet = - from_binary(include_bytes!("../../../sublime_themes/all.themedump")); + from_binary(include_bytes!("../../../sublime/themes/all.themedump")); } /// Returns the highlighter and whether it was found in the extra or not diff --git a/components/config/src/lib.rs b/components/config/src/lib.rs index 07fa104a..50eb9907 100644 --- a/components/config/src/lib.rs +++ b/components/config/src/lib.rs @@ -7,11 +7,11 @@ use std::path::Path; /// Get and parse the config. /// If it doesn't succeed, exit -pub fn get_config(path: &Path, filename: &str) -> Config { - match Config::from_file(path.join(filename)) { +pub fn get_config(filename: &Path) -> Config { + match Config::from_file(filename) { Ok(c) => c, Err(e) => { - println!("Failed to load {}", filename); + println!("Failed to load {}", filename.display()); println!("Error: {}", e); ::std::process::exit(1); } diff --git a/components/config/src/theme.rs b/components/config/src/theme.rs index c25b2c49..6c68401a 100644 --- a/components/config/src/theme.rs +++ b/components/config/src/theme.rs @@ -43,7 +43,7 @@ impl Theme { let content = read_file_with_error( path, "No `theme.toml` file found. \ - Is the `theme` defined in your `config.toml present in the `themes` directory \ + Is the `theme` defined in your `config.toml` present in the `themes` directory \ and does it have a `theme.toml` inside?", )?; Theme::parse(&content) diff --git a/components/errors/Cargo.toml b/components/errors/Cargo.toml index 46d7d256..7932541b 100644 --- a/components/errors/Cargo.toml +++ b/components/errors/Cargo.toml @@ -8,4 +8,4 @@ edition = "2018" tera = "1" toml = "0.5" image = "0.23" -syntect = "=3.2.0" +syntect = "4.1" diff --git a/components/errors/src/lib.rs b/components/errors/src/lib.rs old mode 100755 new mode 100644 diff --git a/components/front_matter/src/page.rs b/components/front_matter/src/page.rs index dba73511..c26371af 100644 --- a/components/front_matter/src/page.rs +++ b/components/front_matter/src/page.rs @@ -16,6 +16,9 @@ pub struct PageFrontMatter { pub title: Option, /// Description in that appears when linked, e.g. on twitter pub description: Option, + /// Updated date + #[serde(default, deserialize_with = "from_toml_datetime")] + pub updated: Option, /// Date if we want to order pages (ie blog post) #[serde(default, deserialize_with = "from_toml_datetime")] pub date: Option, @@ -117,6 +120,7 @@ impl Default for PageFrontMatter { PageFrontMatter { title: None, description: None, + updated: None, date: None, datetime: None, datetime_tuple: None, diff --git a/components/library/src/content/file_info.rs b/components/library/src/content/file_info.rs index 517e1b35..3dc0a537 100644 --- a/components/library/src/content/file_info.rs +++ b/components/library/src/content/file_info.rs @@ -195,7 +195,7 @@ mod tests { #[test] fn can_find_valid_language_in_page() { let mut config = Config::default(); - config.languages.push(Language { code: String::from("fr"), rss: false, search: false }); + config.languages.push(Language { code: String::from("fr"), feed: false, search: false }); let mut file = FileInfo::new_page( &Path::new("/home/vincent/code/site/content/posts/tutorials/python.fr.md"), &PathBuf::new(), @@ -208,7 +208,7 @@ mod tests { #[test] fn can_find_valid_language_in_page_with_assets() { let mut config = Config::default(); - config.languages.push(Language { code: String::from("fr"), rss: false, search: false }); + config.languages.push(Language { code: String::from("fr"), feed: false, search: false }); let mut file = FileInfo::new_page( &Path::new("/home/vincent/code/site/content/posts/tutorials/python/index.fr.md"), &PathBuf::new(), @@ -234,7 +234,7 @@ mod tests { #[test] fn errors_on_unknown_language_in_page_with_i18n_on() { let mut config = Config::default(); - config.languages.push(Language { code: String::from("it"), rss: false, search: false }); + config.languages.push(Language { code: String::from("it"), feed: false, search: false }); let mut file = FileInfo::new_page( &Path::new("/home/vincent/code/site/content/posts/tutorials/python.fr.md"), &PathBuf::new(), @@ -246,7 +246,7 @@ mod tests { #[test] fn can_find_valid_language_in_section() { let mut config = Config::default(); - config.languages.push(Language { code: String::from("fr"), rss: false, search: false }); + config.languages.push(Language { code: String::from("fr"), feed: false, search: false }); let mut file = FileInfo::new_section( &Path::new("/home/vincent/code/site/content/posts/tutorials/_index.fr.md"), &PathBuf::new(), @@ -273,7 +273,7 @@ mod tests { #[test] fn correct_canonical_after_find_language() { let mut config = Config::default(); - config.languages.push(Language { code: String::from("fr"), rss: false, search: false }); + config.languages.push(Language { code: String::from("fr"), feed: false, search: false }); let mut file = FileInfo::new_page( &Path::new("/home/vincent/code/site/content/posts/tutorials/python/index.fr.md"), &PathBuf::new(), diff --git a/components/library/src/content/page.rs b/components/library/src/content/page.rs index 0c653357..dbea1bd9 100644 --- a/components/library/src/content/page.rs +++ b/components/library/src/content/page.rs @@ -770,7 +770,7 @@ Hello world #[test] fn can_specify_language_in_filename() { let mut config = Config::default(); - config.languages.push(Language { code: String::from("fr"), rss: false, search: false }); + config.languages.push(Language { code: String::from("fr"), feed: false, search: false }); let content = r#" +++ +++ @@ -787,7 +787,7 @@ Bonjour le monde"# #[test] fn can_specify_language_in_filename_with_date() { let mut config = Config::default(); - config.languages.push(Language { code: String::from("fr"), rss: false, search: false }); + config.languages.push(Language { code: String::from("fr"), feed: false, search: false }); let content = r#" +++ +++ @@ -806,7 +806,7 @@ Bonjour le monde"# #[test] fn i18n_frontmatter_path_overrides_default_permalink() { let mut config = Config::default(); - config.languages.push(Language { code: String::from("fr"), rss: false, search: false }); + config.languages.push(Language { code: String::from("fr"), feed: false, search: false }); let content = r#" +++ path = "bonjour" diff --git a/components/library/src/content/section.rs b/components/library/src/content/section.rs index a3aff39f..9630a725 100644 --- a/components/library/src/content/section.rs +++ b/components/library/src/content/section.rs @@ -350,7 +350,7 @@ mod tests { #[test] fn can_specify_language_in_filename() { let mut config = Config::default(); - config.languages.push(Language { code: String::from("fr"), rss: false, search: false }); + config.languages.push(Language { code: String::from("fr"), feed: false, search: false }); let content = r#" +++ +++ @@ -372,7 +372,7 @@ Bonjour le monde"# #[test] fn can_make_links_to_translated_sections_without_double_trailing_slash() { let mut config = Config::default(); - config.languages.push(Language { code: String::from("fr"), rss: false, search: false }); + config.languages.push(Language { code: String::from("fr"), feed: false, search: false }); let content = r#" +++ +++ @@ -389,7 +389,7 @@ Bonjour le monde"# #[test] fn can_make_links_to_translated_subsections_with_trailing_slash() { let mut config = Config::default(); - config.languages.push(Language { code: String::from("fr"), rss: false, search: false }); + config.languages.push(Language { code: String::from("fr"), feed: false, search: false }); let content = r#" +++ +++ diff --git a/components/library/src/content/ser.rs b/components/library/src/content/ser.rs index ca794481..39e6439c 100644 --- a/components/library/src/content/ser.rs +++ b/components/library/src/content/ser.rs @@ -63,6 +63,7 @@ pub struct SerializingPage<'a> { ancestors: Vec, title: &'a Option, description: &'a Option, + updated: &'a Option, date: &'a Option, year: Option, month: Option, @@ -126,6 +127,7 @@ impl<'a> SerializingPage<'a> { title: &page.meta.title, description: &page.meta.description, extra: &page.meta.extra, + updated: &page.meta.updated, date: &page.meta.date, year, month, @@ -182,6 +184,7 @@ impl<'a> SerializingPage<'a> { title: &page.meta.title, description: &page.meta.description, extra: &page.meta.extra, + updated: &page.meta.updated, date: &page.meta.date, year, month, diff --git a/components/library/src/sorting.rs b/components/library/src/sorting.rs index b790b111..6213c880 100644 --- a/components/library/src/sorting.rs +++ b/components/library/src/sorting.rs @@ -6,7 +6,7 @@ use slotmap::DefaultKey; use crate::content::Page; -/// Used by the RSS feed +/// Used by the feed /// There to not have to import sorting stuff in the site crate #[allow(clippy::trivially_copy_pass_by_ref)] pub fn sort_actual_pages_by_date(a: &&Page, b: &&Page) -> Ordering { diff --git a/components/library/src/taxonomies/mod.rs b/components/library/src/taxonomies/mod.rs index 036f4b9b..c2f700f1 100644 --- a/components/library/src/taxonomies/mod.rs +++ b/components/library/src/taxonomies/mod.rs @@ -169,6 +169,7 @@ impl Taxonomy { let terms: Vec = self.items.iter().map(|i| SerializedTaxonomyItem::from_item(i, library)).collect(); context.insert("terms", &terms); + context.insert("lang", &self.kind.lang); context.insert("taxonomy", &self.kind); context.insert("current_url", &config.make_permalink(&self.kind.name)); context.insert("current_path", &self.kind.name); @@ -457,7 +458,7 @@ mod tests { #[test] fn can_make_taxonomies_in_multiple_languages() { let mut config = Config::default(); - config.languages.push(Language { rss: false, code: "fr".to_string(), search: false }); + config.languages.push(Language { feed: false, code: "fr".to_string(), search: false }); let mut library = Library::new(2, 0, true); config.taxonomies = vec![ @@ -568,7 +569,7 @@ mod tests { let mut config = Config::default(); config.slugify.taxonomies = SlugifyStrategy::Safe; config.languages.push(Language { - rss: false, + feed: false, code: "fr".to_string(), ..Language::default() }); @@ -601,7 +602,7 @@ mod tests { let mut config = Config::default(); config.slugify.taxonomies = SlugifyStrategy::On; config.languages.push(Language { - rss: false, + feed: false, code: "fr".to_string(), ..Language::default() }); diff --git a/components/link_checker/Cargo.toml b/components/link_checker/Cargo.toml index c9f398eb..3a2c3014 100644 --- a/components/link_checker/Cargo.toml +++ b/components/link_checker/Cargo.toml @@ -5,11 +5,15 @@ authors = ["Vincent Prouillet "] edition = "2018" [dependencies] -reqwest = { version = "0.10", features = ["blocking", "rustls-tls"] } lazy_static = "1" config = { path = "../config" } errors = { path = "../errors" } +[dependencies.reqwest] +version = "0.10" +default-features = false +features = ["blocking", "rustls-tls"] + [dev-dependencies] -mockito = "0.23" +mockito = "0.25" diff --git a/components/link_checker/src/lib.rs b/components/link_checker/src/lib.rs index e9b038bc..811c72d9 100644 --- a/components/link_checker/src/lib.rs +++ b/components/link_checker/src/lib.rs @@ -3,50 +3,33 @@ use reqwest::header::{HeaderMap, ACCEPT}; use reqwest::{blocking::Client, StatusCode}; use config::LinkChecker; -use errors::Result; use std::collections::HashMap; +use std::result; use std::sync::{Arc, RwLock}; -#[derive(Clone, Debug, PartialEq)] -pub struct LinkResult { - pub code: Option, - /// Whether the HTTP request didn't make it to getting a HTTP code - pub error: Option, +pub type Result = result::Result; + +pub fn is_valid(res: &Result) -> bool { + match res { + Ok(ref code) => code.is_success() || *code == StatusCode::NOT_MODIFIED, + Err(_) => false, + } } -impl LinkResult { - pub fn is_valid(&self) -> bool { - if self.error.is_some() { - return false; - } - - if let Some(c) = self.code { - return c.is_success() || c == StatusCode::NOT_MODIFIED; - } - - true - } - - pub fn message(&self) -> String { - if let Some(ref e) = self.error { - return e.clone(); - } - - if let Some(c) = self.code { - return format!("{}", c); - } - - "Unknown error".to_string() +pub fn message(res: &Result) -> String { + match res { + Ok(ref code) => format!("{}", code), + Err(ref error) => error.clone(), } } lazy_static! { // Keep history of link checks so a rebuild doesn't have to check again - static ref LINKS: Arc>> = Arc::new(RwLock::new(HashMap::new())); + static ref LINKS: Arc>> = Arc::new(RwLock::new(HashMap::new())); } -pub fn check_url(url: &str, config: &LinkChecker) -> LinkResult { +pub fn check_url(url: &str, config: &LinkChecker) -> Result { { let guard = LINKS.read().unwrap(); if let Some(res) = guard.get(url) { @@ -75,13 +58,13 @@ pub fn check_url(url: &str, config: &LinkChecker) -> LinkResult { }; match check_page_for_anchor(url, body) { - Ok(_) => LinkResult { code: Some(response.status()), error: None }, - Err(e) => LinkResult { code: None, error: Some(e.to_string()) }, + Ok(_) => Ok(response.status()), + Err(e) => Err(e.to_string()), } } Ok(response) => { if response.status().is_success() || response.status() == StatusCode::NOT_MODIFIED { - LinkResult { code: Some(response.status()), error: None } + Ok(response.status()) } else { let error_string = if response.status().is_informational() { format!("Informational status code ({}) received", response.status()) @@ -95,10 +78,10 @@ pub fn check_url(url: &str, config: &LinkChecker) -> LinkResult { format!("Non-success status code ({}) received", response.status()) }; - LinkResult { code: None, error: Some(error_string) } + Err(error_string) } } - Err(e) => LinkResult { code: None, error: Some(e.to_string()) }, + Err(e) => Err(e.to_string()), }; LINKS.write().unwrap().insert(url.to_string(), res.clone()); @@ -115,14 +98,18 @@ fn has_anchor(url: &str) -> bool { } } -fn check_page_for_anchor(url: &str, body: String) -> Result<()> { +fn check_page_for_anchor(url: &str, body: String) -> errors::Result<()> { let index = url.find('#').unwrap(); let anchor = url.get(index + 1..).unwrap(); - let checks: [String; 4] = [ + let checks: [String; 8] = [ format!(" id='{}'", anchor), + format!(" ID='{}'", anchor), format!(r#" id="{}""#, anchor), + format!(r#" ID="{}""#, anchor), format!(" name='{}'", anchor), + format!(" NAME='{}'", anchor), format!(r#" name="{}""#, anchor), + format!(r#" NAME="{}""#, anchor), ]; if checks.iter().any(|check| body[..].contains(&check[..])) { @@ -134,8 +121,11 @@ fn check_page_for_anchor(url: &str, body: String) -> Result<()> { #[cfg(test)] mod tests { - use super::{check_page_for_anchor, check_url, has_anchor, LinkChecker, LINKS}; + use super::{ + check_page_for_anchor, check_url, has_anchor, is_valid, message, LinkChecker, LINKS, + }; use mockito::mock; + use reqwest::StatusCode; // NOTE: HTTP mock paths below are randomly generated to avoid name // collisions. Mocks with the same path can sometimes bleed between tests @@ -163,7 +153,8 @@ mod tests { .create(); let res = check_url(&url, &LinkChecker::default()); - assert!(res.is_valid()); + assert!(is_valid(&res)); + assert_eq!(message(&res), "200 OK"); assert!(LINKS.read().unwrap().get(&url).is_some()); } @@ -183,9 +174,9 @@ mod tests { let url = format!("{}{}", mockito::server_url(), "/c7qrtrv3zz"); let res = check_url(&url, &LinkChecker::default()); - assert!(res.is_valid()); - assert!(res.code.is_some()); - assert!(res.error.is_none()); + assert!(is_valid(&res)); + assert!(res.is_ok()); + assert_eq!(message(&res), "200 OK"); } #[test] @@ -199,9 +190,8 @@ mod tests { let url = format!("{}{}", mockito::server_url(), "/C4Szbfnvj6M0LoPk"); let res = check_url(&url, &LinkChecker::default()); - assert!(res.is_valid()); - assert!(res.code.is_some()); - assert!(res.error.is_none()); + assert!(is_valid(&res)); + assert_eq!(res.unwrap(), StatusCode::OK); } #[test] @@ -221,9 +211,9 @@ mod tests { let url = format!("{}{}", mockito::server_url(), "/cav9vibhsc"); let res = check_url(&url, &LinkChecker::default()); - assert_eq!(res.is_valid(), false); - assert!(res.code.is_none()); - assert!(res.error.is_some()); + assert!(!is_valid(&res)); + assert!(res.is_err()); + assert_eq!(message(&res), "Client error status code (404 Not Found) received"); } #[test] @@ -236,9 +226,9 @@ mod tests { let url = format!("{}{}", mockito::server_url(), "/nlhab9c1vc"); let res = check_url(&url, &LinkChecker::default()); - assert_eq!(res.is_valid(), false); - assert!(res.code.is_none()); - assert!(res.error.is_some()); + assert!(!is_valid(&res)); + assert!(res.is_err()); + assert_eq!(message(&res), "Client error status code (404 Not Found) received"); } #[test] @@ -251,17 +241,18 @@ mod tests { let url = format!("{}{}", mockito::server_url(), "/qdbrssazes"); let res = check_url(&url, &LinkChecker::default()); - assert_eq!(res.is_valid(), false); - assert!(res.code.is_none()); - assert!(res.error.is_some()); + assert!(!is_valid(&res)); + assert!(res.is_err()); + assert_eq!(message(&res), "Server error status code (500 Internal Server Error) received"); } #[test] fn can_fail_unresolved_links() { let res = check_url("https://t6l5cn9lpm.lxizfnzckd", &LinkChecker::default()); - assert_eq!(res.is_valid(), false); - assert!(res.code.is_none()); - assert!(res.error.is_some()); + assert!(!is_valid(&res)); + assert!(res.is_err()); + assert!(message(&res) + .starts_with("error sending request for url (https://t6l5cn9lpm.lxizfnzckd/)")); } #[test] @@ -272,6 +263,15 @@ mod tests { assert!(res.is_ok()); } + // https://github.com/getzola/zola/issues/948 + #[test] + fn can_validate_anchors_in_capital() { + let url = "https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.collect"; + let body = r#"

collect

"#.to_string(); + let res = check_page_for_anchor(url, body); + assert!(res.is_ok()); + } + #[test] fn can_validate_anchors_with_other_quotes() { let url = "https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.collect"; @@ -299,29 +299,25 @@ mod tests { #[test] fn can_check_url_for_anchor() { let url = "https://doc.rust-lang.org/std/index.html#the-rust-standard-library"; - let res = has_anchor(url); - assert_eq!(res, true); + assert!(has_anchor(url)); } #[test] fn will_return_false_when_no_anchor() { let url = "https://doc.rust-lang.org/std/index.html"; - let res = has_anchor(url); - assert_eq!(res, false); + assert!(!has_anchor(url)); } #[test] fn will_return_false_when_has_router_url() { let url = "https://doc.rust-lang.org/#/std"; - let res = has_anchor(url); - assert_eq!(res, false); + assert!(!has_anchor(url)); } #[test] fn will_return_false_when_has_router_url_alt() { let url = "https://doc.rust-lang.org/#!/std"; - let res = has_anchor(url); - assert_eq!(res, false); + assert!(!has_anchor(url)); } #[test] @@ -347,7 +343,7 @@ mod tests { // anchor check is ignored because the url matches the prefix let ignore = format!("{}{}", mockito::server_url(), "/ignore/i30hobj1cy#nonexistent"); - assert!(check_url(&ignore, &config).is_valid()); + assert!(is_valid(&check_url(&ignore, &config))); let _m2 = mock("GET", "/guvqcqwmth") .with_header("Content-Type", "text/html") @@ -367,9 +363,9 @@ mod tests { // other anchors are checked let existent = format!("{}{}", mockito::server_url(), "/guvqcqwmth#existent"); - assert!(check_url(&existent, &config).is_valid()); + assert!(is_valid(&check_url(&existent, &config))); let nonexistent = format!("{}{}", mockito::server_url(), "/guvqcqwmth#nonexistent"); - assert_eq!(check_url(&nonexistent, &config).is_valid(), false); + assert!(!is_valid(&check_url(&nonexistent, &config))); } } diff --git a/components/rebuild/src/lib.rs b/components/rebuild/src/lib.rs index 694d4cd9..c0918954 100644 --- a/components/rebuild/src/lib.rs +++ b/components/rebuild/src/lib.rs @@ -395,7 +395,17 @@ pub fn after_template_change(site: &mut Site, path: &Path) -> Result<()> { match filename { "sitemap.xml" => site.render_sitemap(), - "rss.xml" => site.render_rss_feed(site.library.read().unwrap().pages_values(), None), + filename if filename == site.config.feed_filename => { + // FIXME: this is insufficient; for multilingual sites, it’s rendering the wrong + // content into the root feed, and it’s not regenerating any of the other feeds (other + // languages or taxonomies with feed enabled). + site.render_feed( + site.library.read().unwrap().pages_values(), + None, + &site.config.default_language, + None, + ) + } "split_sitemap_index.xml" => site.render_sitemap(), "robots.txt" => site.render_robots(), "single.html" | "list.html" => site.render_taxonomies(), diff --git a/components/rebuild/tests/rebuild.rs b/components/rebuild/tests/rebuild.rs index 3069f66d..06a7620e 100644 --- a/components/rebuild/tests/rebuild.rs +++ b/components/rebuild/tests/rebuild.rs @@ -20,7 +20,8 @@ macro_rules! load_and_build_site { dir::copy(&path, &$tmp_dir, &options).unwrap(); let site_path = $tmp_dir.path().join($site); - let mut site = Site::new(&site_path, "config.toml").unwrap(); + let config_file = site_path.join("config.toml"); + let mut site = Site::new(&site_path, &config_file).unwrap(); site.load().unwrap(); let public = &site_path.join("public"); site.set_output_path(&public); diff --git a/components/rendering/Cargo.toml b/components/rendering/Cargo.toml index c5fd3e8f..5e30e0de 100644 --- a/components/rendering/Cargo.toml +++ b/components/rendering/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] tera = { version = "1", features = ["preserve_order"] } -syntect = "=3.2.0" +syntect = "4.1" pulldown-cmark = "0.7" serde = "1" serde_derive = "1" diff --git a/components/rendering/src/markdown.rs b/components/rendering/src/markdown.rs index 36584206..9111e2ce 100644 --- a/components/rendering/src/markdown.rs +++ b/components/rendering/src/markdown.rs @@ -231,7 +231,9 @@ pub fn markdown_to_html(content: &str, context: &RenderContext) -> Result"); + Event::Html(html.into()) } Event::End(Tag::CodeBlock(_)) => { if !context.config.highlight_code { @@ -239,7 +241,7 @@ pub fn markdown_to_html(content: &str, context: &RenderContext) -> Result".into()) + Event::Html("".into()) } Event::Start(Tag::Image(link_type, src, title)) => { if is_colocated_asset_link(&src) { @@ -329,6 +331,7 @@ pub fn markdown_to_html(content: &str, context: &RenderContext) -> Result\n$ gutenberg server\n$ ping\n" + "
\n$ gutenberg server\n$ ping\n
" ); } @@ -53,7 +53,7 @@ fn can_highlight_code_block_with_lang() { let res = render_content("```python\nlist.append(1)\n```", &context).unwrap(); assert_eq!( res.body, - "
\nlist.append(1)\n
" + "
\nlist.append(1)\n
" ); } @@ -68,7 +68,7 @@ fn can_higlight_code_block_with_unknown_lang() { // defaults to plain text assert_eq!( res.body, - "
\nlist.append(1)\n
" + "
\nlist.append(1)\n
" ); } diff --git a/components/site/benches/gen.py b/components/site/benches/gen.py index c30709ba..0fe649a9 100644 --- a/components/site/benches/gen.py +++ b/components/site/benches/gen.py @@ -108,7 +108,7 @@ base_url = "https://replace-this-with-your-url.com" theme = "sample" taxonomies = [ - {name = "tags", rss = true}, + {name = "tags", feed = true}, {name = "categories"} ] diff --git a/components/site/benches/load.rs b/components/site/benches/load.rs index 3cee15f5..65887b75 100644 --- a/components/site/benches/load.rs +++ b/components/site/benches/load.rs @@ -11,7 +11,8 @@ fn bench_loading_small_blog(b: &mut test::Bencher) { let mut path = env::current_dir().unwrap().to_path_buf(); path.push("benches"); path.push("small-blog"); - let mut site = Site::new(&path, "config.toml").unwrap(); + let config_file = path.join("config.toml"); + let mut site = Site::new(&path, &config_file).unwrap(); b.iter(|| site.load().unwrap()); } @@ -21,7 +22,8 @@ fn bench_loading_small_blog_with_syntax_highlighting(b: &mut test::Bencher) { let mut path = env::current_dir().unwrap().to_path_buf(); path.push("benches"); path.push("small-blog"); - let mut site = Site::new(&path, "config.toml").unwrap(); + let config_file = path.join("config.toml"); + let mut site = Site::new(&path, &config_file).unwrap(); site.config.highlight_code = true; b.iter(|| site.load().unwrap()); @@ -32,7 +34,8 @@ fn bench_loading_small_blog_with_syntax_highlighting(b: &mut test::Bencher) { // let mut path = env::current_dir().unwrap().to_path_buf(); // path.push("benches"); // path.push("medium-blog"); -// let mut site = Site::new(&path, "config.toml").unwrap(); +// let config_file = path.join("config.toml"); +// let mut site = Site::new(&path, &config_file).unwrap(); // // b.iter(|| site.load().unwrap()); //} @@ -42,7 +45,8 @@ fn bench_loading_small_blog_with_syntax_highlighting(b: &mut test::Bencher) { // let mut path = env::current_dir().unwrap().to_path_buf(); // path.push("benches"); // path.push("medium-blog"); -// let mut site = Site::new(&path, "config.toml").unwrap(); +// let config_file = path.join("config.toml"); +// let mut site = Site::new(&path, &config_file).unwrap(); // site.config.highlight_code = true; // // b.iter(|| site.load().unwrap()); @@ -53,7 +57,8 @@ fn bench_loading_small_blog_with_syntax_highlighting(b: &mut test::Bencher) { // let mut path = env::current_dir().unwrap().to_path_buf(); // path.push("benches"); // path.push("big-blog"); -// let mut site = Site::new(&path, "config.toml").unwrap(); +// let config_file = path.join("config.toml"); +// let mut site = Site::new(&path, &config_file).unwrap(); // // b.iter(|| site.load().unwrap()); //} @@ -63,7 +68,8 @@ fn bench_loading_small_blog_with_syntax_highlighting(b: &mut test::Bencher) { // let mut path = env::current_dir().unwrap().to_path_buf(); // path.push("benches"); // path.push("big-blog"); -// let mut site = Site::new(&path, "config.toml").unwrap(); +// let config_file = path.join("config.toml"); +// let mut site = Site::new(&path, &config_file).unwrap(); // site.config.highlight_code = true; // // b.iter(|| site.load().unwrap()); @@ -74,7 +80,8 @@ fn bench_loading_small_blog_with_syntax_highlighting(b: &mut test::Bencher) { // let mut path = env::current_dir().unwrap().to_path_buf(); // path.push("benches"); // path.push("huge-blog"); -// let mut site = Site::new(&path, "config.toml").unwrap(); +// let config_file = path.join("config.toml"); +// let mut site = Site::new(&path, &config_file).unwrap(); // // b.iter(|| site.load().unwrap()); //} @@ -84,7 +91,8 @@ fn bench_loading_small_blog_with_syntax_highlighting(b: &mut test::Bencher) { // let mut path = env::current_dir().unwrap().to_path_buf(); // path.push("benches"); // path.push("huge-blog"); -// let mut site = Site::new(&path, "config.toml").unwrap(); +// let config_file = path.join("config.toml"); +// let mut site = Site::new(&path, &config_file).unwrap(); // site.config.highlight_code = true; // // b.iter(|| site.load().unwrap()); @@ -95,7 +103,8 @@ fn bench_loading_small_kb(b: &mut test::Bencher) { let mut path = env::current_dir().unwrap().to_path_buf(); path.push("benches"); path.push("small-kb"); - let mut site = Site::new(&path, "config.toml").unwrap(); + let config_file = path.join("config.toml"); + let mut site = Site::new(&path, &config_file).unwrap(); b.iter(|| site.load().unwrap()); } @@ -105,7 +114,8 @@ fn bench_loading_small_kb_with_syntax_highlighting(b: &mut test::Bencher) { let mut path = env::current_dir().unwrap().to_path_buf(); path.push("benches"); path.push("small-kb"); - let mut site = Site::new(&path, "config.toml").unwrap(); + let config_file = path.join("config.toml"); + let mut site = Site::new(&path, &config_file).unwrap(); site.config.highlight_code = true; b.iter(|| site.load().unwrap()); @@ -116,7 +126,8 @@ fn bench_loading_small_kb_with_syntax_highlighting(b: &mut test::Bencher) { // let mut path = env::current_dir().unwrap().to_path_buf(); // path.push("benches"); // path.push("medium-kb"); -// let mut site = Site::new(&path, "config.toml").unwrap(); +// let config_file = path.join("config.toml"); +// let mut site = Site::new(&path, &config_file).unwrap(); // // b.iter(|| site.load().unwrap()); //} @@ -126,7 +137,8 @@ fn bench_loading_small_kb_with_syntax_highlighting(b: &mut test::Bencher) { // let mut path = env::current_dir().unwrap().to_path_buf(); // path.push("benches"); // path.push("medium-kb"); -// let mut site = Site::new(&path, "config.toml").unwrap(); +// let config_file = path.join("config.toml"); +// let mut site = Site::new(&path, &config_file).unwrap(); // site.config.highlight_code = Some(true); // // b.iter(|| site.load().unwrap()); @@ -137,7 +149,8 @@ fn bench_loading_small_kb_with_syntax_highlighting(b: &mut test::Bencher) { // let mut path = env::current_dir().unwrap().to_path_buf(); // path.push("benches"); // path.push("huge-kb"); -// let mut site = Site::new(&path, "config.toml").unwrap(); +// let config_file = path.join("config.toml"); +// let mut site = Site::new(&path, &config_file).unwrap(); // // b.iter(|| site.load().unwrap()); //} @@ -147,7 +160,8 @@ fn bench_loading_small_kb_with_syntax_highlighting(b: &mut test::Bencher) { // let mut path = env::current_dir().unwrap().to_path_buf(); // path.push("benches"); // path.push("huge-kb"); -// let mut site = Site::new(&path, "config.toml").unwrap(); +// let config_file = path.join("config.toml"); +// let mut site = Site::new(&path, &config_file).unwrap(); // site.config.highlight_code = Some(true); // // b.iter(|| site.load().unwrap()); diff --git a/components/site/benches/site.rs b/components/site/benches/site.rs index 3436f884..754eb413 100644 --- a/components/site/benches/site.rs +++ b/components/site/benches/site.rs @@ -11,7 +11,8 @@ fn setup_site(name: &str) -> Site { let mut path = env::current_dir().unwrap().to_path_buf(); path.push("benches"); path.push(name); - let mut site = Site::new(&path, "config.toml").unwrap(); + let config_file = path.join("config.toml"); + let mut site = Site::new(&path, &config_file).unwrap(); site.load().unwrap(); site } @@ -35,12 +36,20 @@ fn bench_render_sitemap(b: &mut test::Bencher) { } #[bench] -fn bench_render_rss_feed(b: &mut test::Bencher) { +fn bench_render_feed(b: &mut test::Bencher) { let mut site = setup_site("big-blog"); let tmp_dir = tempdir().expect("create temp dir"); let public = &tmp_dir.path().join("public"); site.set_output_path(&public); - b.iter(|| site.render_rss_feed(site.library.read().unwrap().pages_values(), None).unwrap()); + b.iter(|| { + site.render_feed( + site.library.read().unwrap().pages_values(), + None, + &site.config.default_language, + None, + ) + .unwrap(); + }); } #[bench] diff --git a/components/site/src/lib.rs b/components/site/src/lib.rs index eaba38e9..dc6e4331 100644 --- a/components/site/src/lib.rs +++ b/components/site/src/lib.rs @@ -8,15 +8,16 @@ use std::sync::{Arc, Mutex, RwLock}; use glob::glob; use rayon::prelude::*; use sass_rs::{compile_file, Options as SassOptions, OutputStyle}; +use serde_derive::Serialize; use tera::{Context, Tera}; -use config::{get_config, Config}; +use config::{get_config, Config, Taxonomy as TaxonomyConfig}; use errors::{bail, Error, ErrorKind, Result}; use front_matter::InsertAnchor; use library::{ find_taxonomies, sort_actual_pages_by_date, Library, Page, Paginator, Section, Taxonomy, + TaxonomyItem, }; -use link_checker::check_url; use templates::{global_fns, render_redirect_template, ZOLA_TERA}; use utils::fs::{copy_directory, create_directory, create_file, ensure_directory_exists}; use utils::net::get_available_port; @@ -45,12 +46,26 @@ pub struct Site { include_drafts: bool, } +#[derive(Debug, Clone, PartialEq, Serialize)] +struct SerializedTaxonomyItem<'a> { + name: &'a str, + slug: &'a str, + permalink: &'a str, +} + +impl<'a> SerializedTaxonomyItem<'a> { + pub fn from_item(item: &'a TaxonomyItem) -> Self { + SerializedTaxonomyItem { name: &item.name, slug: &item.slug, permalink: &item.permalink } + } +} + impl Site { /// Parse a site at the given path. Defaults to the current dir /// Passing in a path is used in tests and when --root argument is passed - pub fn new>(path: P, config_file: &str) -> Result { + pub fn new, P2: AsRef>(path: P, config_file: P2) -> Result { let path = path.as_ref(); - let mut config = get_config(path, config_file); + let config_file = config_file.as_ref(); + let mut config = get_config(config_file); config.load_extra_syntaxes(path)?; let tpl_glob = @@ -396,8 +411,8 @@ impl Site { { return None; } - let res = check_url(&link, &self.config.link_checker); - if res.is_valid() { + let res = link_checker::check_url(&link, &self.config.link_checker); + if link_checker::is_valid(&res) { None } else { Some((page_path, link, res)) @@ -423,7 +438,7 @@ impl Site { "Dead link in {} to {}: {}", page_path.to_string_lossy(), link, - check_res.message() + link_checker::message(&check_res) ) }) .collect::>() @@ -458,13 +473,14 @@ impl Site { let filename = format!("_index.{}.md", l); index_section.file.path = self.content_path.join(&filename); index_section.file.relative = filename; - index_section.lang = index_section.file.find_language(&self.config)?; } else { index_section.file.name = "_index".to_string(); index_section.permalink = self.config.make_permalink(""); index_section.file.path = self.content_path.join("_index.md"); index_section.file.relative = "_index.md".to_string(); + index_section.path = "/".to_string(); } + index_section.lang = index_section.file.find_language(&self.config)?; library.insert_section(index_section); } } @@ -518,7 +534,7 @@ impl Site { pub fn register_early_global_fns(&mut self) { self.tera.register_function( "get_url", - global_fns::GetUrl::new(self.config.clone(), self.permalinks.clone()), + global_fns::GetUrl::new(self.config.clone(), self.permalinks.clone(), self.content_path.clone()), ); self.tera.register_function( "resize_image", @@ -626,15 +642,15 @@ impl Site { } /// Inject live reload script tag if in live reload mode - fn inject_livereload(&self, html: String) -> String { + fn inject_livereload(&self, mut html: String) -> String { if let Some(port) = self.live_reload { - return html.replace( - "", - &format!( - r#""#, - port - ), - ); + let script = + format!(r#""#, port,); + if let Some(index) = html.rfind("") { + html.insert_str(index, &script); + } else { + html.push_str(&script); + } } html @@ -743,8 +759,9 @@ impl Site { self.render_sitemap()?; let library = self.library.read().unwrap(); - if self.config.generate_rss { - let pages = if self.config.is_multilingual() { + if self.config.generate_feed { + let is_multilingual = self.config.is_multilingual(); + let pages = if is_multilingual { library .pages_values() .iter() @@ -754,16 +771,16 @@ impl Site { } else { library.pages_values() }; - self.render_rss_feed(pages, None)?; + self.render_feed(pages, None, &self.config.default_language, None)?; } for lang in &self.config.languages { - if !lang.rss { + if !lang.feed { continue; } let pages = library.pages_values().iter().filter(|p| p.lang == lang.code).cloned().collect(); - self.render_rss_feed(pages, Some(&PathBuf::from(lang.code.clone())))?; + self.render_feed(pages, Some(&PathBuf::from(lang.code.clone())), &lang.code, None)?; } self.render_404()?; @@ -981,10 +998,16 @@ impl Site { create_file(&path.join("index.html"), &self.inject_livereload(single_output))?; } - if taxonomy.kind.rss { - self.render_rss_feed( + if taxonomy.kind.feed { + self.render_feed( item.pages.iter().map(|p| library.get_page_by_key(*p)).collect(), Some(&PathBuf::from(format!("{}/{}", taxonomy.kind.name, item.slug))), + if self.config.is_multilingual() && !taxonomy.kind.lang.is_empty() { + &taxonomy.kind.lang + } else { + &self.config.default_language + }, + Some((&taxonomy.kind, &item)), ) } else { Ok(()) @@ -1043,30 +1066,40 @@ impl Site { Ok(()) } - /// Renders a RSS feed for the given path and at the given path - /// If both arguments are `None`, it will render only the RSS feed for the whole + /// Renders a feed for the given path and at the given path + /// If both arguments are `None`, it will render only the feed for the whole /// site at the root folder. - pub fn render_rss_feed( + pub fn render_feed( &self, all_pages: Vec<&Page>, base_path: Option<&PathBuf>, + lang: &str, + taxonomy_and_item: Option<(&TaxonomyConfig, &TaxonomyItem)>, ) -> Result<()> { ensure_directory_exists(&self.output_path)?; let mut context = Context::new(); let mut pages = all_pages.into_iter().filter(|p| p.meta.date.is_some()).collect::>(); - // Don't generate a RSS feed if none of the pages has a date + // Don't generate a feed if none of the pages has a date if pages.is_empty() { return Ok(()); } pages.par_sort_unstable_by(sort_actual_pages_by_date); - context.insert("last_build_date", &pages[0].meta.date.clone()); + context.insert( + "last_updated", + pages + .iter() + .filter_map(|page| page.meta.updated.as_ref()) + .chain(pages[0].meta.date.as_ref()) + .max() // I love lexicographically sorted date strings + .unwrap(), // Guaranteed because of pages[0].meta.date + ); let library = self.library.read().unwrap(); // limit to the last n elements if the limit is set; otherwise use all. - let num_entries = self.config.rss_limit.unwrap_or_else(|| pages.len()); + let num_entries = self.config.feed_limit.unwrap_or_else(|| pages.len()); let p = pages .iter() .take(num_entries) @@ -1075,16 +1108,24 @@ impl Site { context.insert("pages", &p); context.insert("config", &self.config); + context.insert("lang", lang); - let rss_feed_url = if let Some(ref base) = base_path { - self.config.make_permalink(&base.join("rss.xml").to_string_lossy().replace('\\', "/")) + let feed_filename = &self.config.feed_filename; + let feed_url = if let Some(ref base) = base_path { + self.config + .make_permalink(&base.join(feed_filename).to_string_lossy().replace('\\', "/")) } else { - self.config.make_permalink("rss.xml") + self.config.make_permalink(feed_filename) }; - context.insert("feed_url", &rss_feed_url); + context.insert("feed_url", &feed_url); - let feed = &render_template("rss.xml", &self.tera, context, &self.config.theme)?; + if let Some((taxonomy, item)) = taxonomy_and_item { + context.insert("taxonomy", taxonomy); + context.insert("term", &SerializedTaxonomyItem::from_item(item)); + } + + let feed = &render_template(feed_filename, &self.tera, context, &self.config.theme)?; if let Some(ref base) = base_path { let mut output_path = self.output_path.clone(); @@ -1094,9 +1135,9 @@ impl Site { create_directory(&output_path)?; } } - create_file(&output_path.join("rss.xml"), feed)?; + create_file(&output_path.join(feed_filename), feed)?; } else { - create_file(&self.output_path.join("rss.xml"), feed)?; + create_file(&self.output_path.join(feed_filename), feed)?; } Ok(()) } diff --git a/components/site/src/sitemap.rs b/components/site/src/sitemap.rs index 51bf43c4..afb20928 100644 --- a/components/site/src/sitemap.rs +++ b/components/site/src/sitemap.rs @@ -14,7 +14,7 @@ use tera::{Map, Value}; #[derive(Debug, Serialize)] pub struct SitemapEntry<'a> { pub permalink: Cow<'a, str>, - pub date: Option, + pub updated: Option, pub extra: Option<&'a Map>, } @@ -33,8 +33,8 @@ impl<'a> PartialEq for SitemapEntry<'a> { impl<'a> Eq for SitemapEntry<'a> {} impl<'a> SitemapEntry<'a> { - pub fn new(permalink: Cow<'a, str>, date: Option) -> Self { - SitemapEntry { permalink, date, extra: None } + pub fn new(permalink: Cow<'a, str>, updated: Option) -> Self { + SitemapEntry { permalink, updated, extra: None } } pub fn add_extra(&mut self, extra: &'a Map) { @@ -65,11 +65,10 @@ pub fn find_entries<'a>( .pages_values() .iter() .map(|p| { - let date = match p.meta.date { - Some(ref d) => Some(d.to_string()), - None => None, - }; - let mut entry = SitemapEntry::new(Cow::Borrowed(&p.permalink), date); + let mut entry = SitemapEntry::new( + Cow::Borrowed(&p.permalink), + p.meta.updated.clone().or_else(|| p.meta.date.clone()), + ); entry.add_extra(&p.meta.extra); entry }) diff --git a/components/site/tests/common.rs b/components/site/tests/common.rs index a5908dae..24431706 100644 --- a/components/site/tests/common.rs +++ b/components/site/tests/common.rs @@ -38,7 +38,8 @@ macro_rules! file_contains { pub fn build_site(name: &str) -> (Site, TempDir, PathBuf) { let mut path = env::current_dir().unwrap().parent().unwrap().parent().unwrap().to_path_buf(); path.push(name); - let mut site = Site::new(&path, "config.toml").unwrap(); + let config_file = path.join("config.toml"); + let mut site = Site::new(&path, &config_file).unwrap(); site.load().unwrap(); let tmp_dir = tempdir().expect("create temp dir"); let public = &tmp_dir.path().join("public"); @@ -54,7 +55,8 @@ where { let mut path = env::current_dir().unwrap().parent().unwrap().parent().unwrap().to_path_buf(); path.push(name); - let site = Site::new(&path, "config.toml").unwrap(); + let config_file = path.join("config.toml"); + let site = Site::new(&path, &config_file).unwrap(); let (mut site, needs_loading) = setup_cb(site); if needs_loading { site.load().unwrap(); diff --git a/components/site/tests/site.rs b/components/site/tests/site.rs index 2c02a683..5dbc7115 100644 --- a/components/site/tests/site.rs +++ b/components/site/tests/site.rs @@ -13,7 +13,8 @@ use site::Site; fn can_parse_site() { let mut path = env::current_dir().unwrap().parent().unwrap().parent().unwrap().to_path_buf(); path.push("test_site"); - let mut site = Site::new(&path, "config.toml").unwrap(); + let config_file = path.join("config.toml"); + let mut site = Site::new(&path, &config_file).unwrap(); site.load().unwrap(); let library = site.library.read().unwrap(); @@ -152,7 +153,7 @@ fn can_build_site_without_live_reload() { // We do have categories assert_eq!(file_exists!(public, "categories/index.html"), true); assert_eq!(file_exists!(public, "categories/a-category/index.html"), true); - assert_eq!(file_exists!(public, "categories/a-category/rss.xml"), true); + assert_eq!(file_exists!(public, "categories/a-category/atom.xml"), true); // But no tags assert_eq!(file_exists!(public, "tags/index.html"), false); @@ -232,7 +233,7 @@ fn can_build_site_with_live_reload_and_drafts() { // We do have categories assert_eq!(file_exists!(public, "categories/index.html"), true); assert_eq!(file_exists!(public, "categories/a-category/index.html"), true); - assert_eq!(file_exists!(public, "categories/a-category/rss.xml"), true); + assert_eq!(file_exists!(public, "categories/a-category/atom.xml"), true); // But no tags assert_eq!(file_exists!(public, "tags/index.html"), false); @@ -294,11 +295,11 @@ fn can_build_site_with_taxonomies() { assert!(file_exists!(public, "categories/index.html")); assert!(file_exists!(public, "categories/a/index.html")); assert!(file_exists!(public, "categories/b/index.html")); - assert!(file_exists!(public, "categories/a/rss.xml")); + assert!(file_exists!(public, "categories/a/atom.xml")); assert!(file_contains!( public, - "categories/a/rss.xml", - "https://replace-this-with-your-url.com/categories/a/rss.xml" + "categories/a/atom.xml", + "https://replace-this-with-your-url.com/categories/a/atom.xml" )); // Extending from a theme works assert!(file_contains!(public, "categories/a/index.html", "EXTENDED")); @@ -513,7 +514,7 @@ fn can_build_site_with_pagination_for_taxonomy() { name: "tags".to_string(), paginate_by: Some(2), paginate_path: None, - rss: true, + feed: true, lang: site.config.default_language.clone(), }); site.load().unwrap(); @@ -547,9 +548,9 @@ fn can_build_site_with_pagination_for_taxonomy() { // Tags assert!(file_exists!(public, "tags/index.html")); - // With RSS - assert!(file_exists!(public, "tags/a/rss.xml")); - assert!(file_exists!(public, "tags/b/rss.xml")); + // With Atom + assert!(file_exists!(public, "tags/a/atom.xml")); + assert!(file_exists!(public, "tags/b/atom.xml")); // And pagination! assert!(file_exists!(public, "tags/a/page/1/index.html")); assert!(file_exists!(public, "tags/b/page/1/index.html")); @@ -588,15 +589,15 @@ fn can_build_site_with_pagination_for_taxonomy() { } #[test] -fn can_build_rss_feed() { +fn can_build_feed() { let (_, _tmp_dir, public) = build_site("test_site"); assert!(&public.exists()); - assert!(file_exists!(public, "rss.xml")); + assert!(file_exists!(public, "atom.xml")); // latest article is posts/extra-syntax.md - assert!(file_contains!(public, "rss.xml", "Extra Syntax")); + assert!(file_contains!(public, "atom.xml", "Extra Syntax")); // Next is posts/simple.md - assert!(file_contains!(public, "rss.xml", "Simple article with shortcodes")); + assert!(file_contains!(public, "atom.xml", "Simple article with shortcodes")); } #[test] @@ -628,7 +629,8 @@ fn can_build_with_extra_syntaxes() { fn can_apply_page_templates() { let mut path = env::current_dir().unwrap().parent().unwrap().parent().unwrap().to_path_buf(); path.push("test_site"); - let mut site = Site::new(&path, "config.toml").unwrap(); + let config_file = path.join("config.toml"); + let mut site = Site::new(&path, &config_file).unwrap(); site.load().unwrap(); let template_path = path.join("content").join("applying_page_template"); diff --git a/components/site/tests/site_i18n.rs b/components/site/tests/site_i18n.rs index 7a5fc983..d4ed0e34 100644 --- a/components/site/tests/site_i18n.rs +++ b/components/site/tests/site_i18n.rs @@ -9,7 +9,8 @@ use site::Site; fn can_parse_multilingual_site() { let mut path = env::current_dir().unwrap().parent().unwrap().parent().unwrap().to_path_buf(); path.push("test_site_i18n"); - let mut site = Site::new(&path, "config.toml").unwrap(); + let config_file = path.join("config.toml"); + let mut site = Site::new(&path, &config_file).unwrap(); site.load().unwrap(); let library = site.library.read().unwrap(); @@ -115,15 +116,25 @@ fn can_build_multilingual_site() { assert!(file_contains!(public, "sitemap.xml", "https://example.com/fr/blog/something-else/")); assert!(file_contains!(public, "sitemap.xml", "https://example.com/it/blog/something-else/")); - // one rss per language - assert!(file_exists!(public, "rss.xml")); - assert!(file_contains!(public, "rss.xml", "https://example.com/blog/something-else/")); - assert!(!file_contains!(public, "rss.xml", "https://example.com/fr/blog/something-else/")); - assert!(file_exists!(public, "fr/rss.xml")); - assert!(!file_contains!(public, "fr/rss.xml", "https://example.com/blog/something-else/")); - assert!(file_contains!(public, "fr/rss.xml", "https://example.com/fr/blog/something-else/")); - // Italian doesn't have RSS enabled - assert!(!file_exists!(public, "it/rss.xml")); + // one feed per language + assert!(file_exists!(public, "atom.xml")); + assert!(file_contains!(public, "atom.xml", "https://example.com/blog/something-else/")); + assert!(!file_contains!(public, "atom.xml", "https://example.com/fr/blog/something-else/")); + assert!(file_contains!( + public, + "atom.xml", + r#""# + )); + assert!(file_exists!(public, "fr/atom.xml")); + assert!(!file_contains!(public, "fr/atom.xml", "https://example.com/blog/something-else/")); + assert!(file_contains!(public, "fr/atom.xml", "https://example.com/fr/blog/something-else/")); + assert!(file_contains!( + public, + "fr/atom.xml", + r#""# + )); + // Italian doesn't have feed enabled + assert!(!file_exists!(public, "it/atom.xml")); // Taxonomies are per-language // English @@ -131,7 +142,17 @@ fn can_build_multilingual_site() { assert!(file_contains!(public, "authors/index.html", "Queen")); assert!(!file_contains!(public, "authors/index.html", "Vincent")); assert!(!file_exists!(public, "auteurs/index.html")); - assert!(file_exists!(public, "authors/queen-elizabeth/rss.xml")); + assert!(file_exists!(public, "authors/queen-elizabeth/atom.xml")); + assert!(file_contains!( + public, + "authors/queen-elizabeth/atom.xml", + r#""# + )); + assert!(file_contains!( + public, + "authors/queen-elizabeth/atom.xml", + r#" - Queen Elizabeth"# + )); assert!(file_exists!(public, "tags/index.html")); assert!(file_contains!(public, "tags/index.html", "hello")); @@ -142,7 +163,7 @@ fn can_build_multilingual_site() { assert!(file_exists!(public, "fr/auteurs/index.html")); assert!(!file_contains!(public, "fr/auteurs/index.html", "Queen")); assert!(file_contains!(public, "fr/auteurs/index.html", "Vincent")); - assert!(!file_exists!(public, "fr/auteurs/vincent-prouillet/rss.xml")); + assert!(!file_exists!(public, "fr/auteurs/vincent-prouillet/atom.xml")); assert!(file_exists!(public, "fr/tags/index.html")); assert!(file_contains!(public, "fr/tags/index.html", "bonjour")); diff --git a/components/templates/Cargo.toml b/components/templates/Cargo.toml index 6c316ad3..24189765 100644 --- a/components/templates/Cargo.toml +++ b/components/templates/Cargo.toml @@ -13,7 +13,7 @@ toml = "0.5" csv = "1" image = "0.23" serde_json = "1.0" -reqwest = { version = "0.10", features = ["blocking"] } +sha2 = "0.8" url = "2" errors = { path = "../errors" } @@ -22,5 +22,10 @@ library = { path = "../library" } config = { path = "../config" } imageproc = { path = "../imageproc" } +[dependencies.reqwest] +version = "0.10" +default-features = false +features = ["blocking", "rustls-tls"] + [dev-dependencies] -mockito = "0.23" +mockito = "0.25" diff --git a/components/templates/src/builtins/404.html b/components/templates/src/builtins/404.html index f7d50b1a..f8414f0e 100644 --- a/components/templates/src/builtins/404.html +++ b/components/templates/src/builtins/404.html @@ -1,10 +1,3 @@ - - - File Not Found: 404. - - -

Oops!

-

File Not Found: 404.

- - +404 Not Found +

404 Not Found

diff --git a/components/templates/src/builtins/atom.xml b/components/templates/src/builtins/atom.xml new file mode 100644 index 00000000..b2c89443 --- /dev/null +++ b/components/templates/src/builtins/atom.xml @@ -0,0 +1,25 @@ + + + {{ config.title }} + {%- if term %} - {{ term.name }} + {%- endif -%} + + {%- if config.description %} + {{ config.description }} + {%- endif %} + + + Zola + {{ last_updated | date(format="%+") }} + {{ feed_url | safe }} + {%- for page in pages %} + + {{ page.title }} + {{ page.date | date(format="%+") }} + {{ page.updated | default(value=page.date) | date(format="%+") }} + + {{ page.permalink | safe }} + {{ page.content }} + + {%- endfor %} + diff --git a/components/templates/src/builtins/internal/alias.html b/components/templates/src/builtins/internal/alias.html index 1759ae78..54f782e2 100644 --- a/components/templates/src/builtins/internal/alias.html +++ b/components/templates/src/builtins/internal/alias.html @@ -1,12 +1,6 @@ - - - - Redirect - - - - - -

Click here to be redirected.

- - + + + + +Redirect +

Click here to be redirected.

diff --git a/components/templates/src/builtins/rss.xml b/components/templates/src/builtins/rss.xml index aecb42bf..a76f6475 100644 --- a/components/templates/src/builtins/rss.xml +++ b/components/templates/src/builtins/rss.xml @@ -7,15 +7,15 @@ Zola {{ config.default_language }} - {{ last_build_date | date(format="%a, %d %b %Y %H:%M:%S %z") }} - {% for page in pages %} - - {{ page.title }} - {{ page.date | date(format="%a, %d %b %Y %H:%M:%S %z") }} - {{ page.permalink | escape_xml | safe }} - {{ page.permalink | escape_xml | safe }} - {% if page.summary %}{{ page.summary }}{% else %}{{ page.content }}{% endif %} - - {% endfor %} + {{ last_updated | date(format="%a, %d %b %Y %H:%M:%S %z") }} + {%- for page in pages %} + + {{ page.title }} + {{ page.date | date(format="%a, %d %b %Y %H:%M:%S %z") }} + {{ page.permalink | escape_xml | safe }} + {{ page.permalink | escape_xml | safe }} + {% if page.summary %}{{ page.summary }}{% else %}{{ page.content }}{% endif %} + + {%- endfor %} diff --git a/components/templates/src/builtins/shortcodes/streamable.html b/components/templates/src/builtins/shortcodes/streamable.html index 0fca7f77..d45fa642 100644 --- a/components/templates/src/builtins/shortcodes/streamable.html +++ b/components/templates/src/builtins/shortcodes/streamable.html @@ -1,7 +1,3 @@
- +
diff --git a/components/templates/src/builtins/shortcodes/vimeo.html b/components/templates/src/builtins/shortcodes/vimeo.html index 99760879..0a4298c7 100644 --- a/components/templates/src/builtins/shortcodes/vimeo.html +++ b/components/templates/src/builtins/shortcodes/vimeo.html @@ -1,4 +1,3 @@
- +
diff --git a/components/templates/src/builtins/shortcodes/youtube.html b/components/templates/src/builtins/shortcodes/youtube.html index 5f10206f..26a7fe54 100644 --- a/components/templates/src/builtins/shortcodes/youtube.html +++ b/components/templates/src/builtins/shortcodes/youtube.html @@ -1,4 +1,3 @@
- +
diff --git a/components/templates/src/builtins/sitemap.xml b/components/templates/src/builtins/sitemap.xml index 0c2608a8..aeb85387 100644 --- a/components/templates/src/builtins/sitemap.xml +++ b/components/templates/src/builtins/sitemap.xml @@ -1,11 +1,11 @@ - {% for sitemap_entry in entries %} - - {{ sitemap_entry.permalink | escape_xml | safe }} - {% if sitemap_entry.date %} - {{ sitemap_entry.date }} - {% endif %} - - {% endfor %} + {%- for sitemap_entry in entries %} + + {{ sitemap_entry.permalink | escape_xml | safe }} + {%- if sitemap_entry.updated %} + {{ sitemap_entry.updated }} + {%- endif %} + + {%- endfor %} diff --git a/components/templates/src/builtins/split_sitemap_index.xml b/components/templates/src/builtins/split_sitemap_index.xml index 740e322a..b44801ce 100644 --- a/components/templates/src/builtins/split_sitemap_index.xml +++ b/components/templates/src/builtins/split_sitemap_index.xml @@ -1,8 +1,8 @@ - {% for sitemap in sitemaps %} - - {{ sitemap }} - - {% endfor %} - \ No newline at end of file + {%- for sitemap in sitemaps %} + + {{ sitemap }} + + {%- endfor %} + diff --git a/components/templates/src/global_fns/load_data.rs b/components/templates/src/global_fns/load_data.rs index 8aa542da..7432a6c0 100644 --- a/components/templates/src/global_fns/load_data.rs +++ b/components/templates/src/global_fns/load_data.rs @@ -210,11 +210,10 @@ impl TeraFn for LoadData { .send() .and_then(|res| res.error_for_status()) .map_err(|e| { - format!( - "Failed to request {}: {}", - url, - e.status().expect("response status") - ) + match e.status() { + Some(status) => format!("Failed to request {}: {}", url, status), + None => format!("Could not get response status for url: {}", url), + } })?; response .text() diff --git a/components/templates/src/global_fns/mod.rs b/components/templates/src/global_fns/mod.rs index dd3b0538..4535d8b7 100644 --- a/components/templates/src/global_fns/mod.rs +++ b/components/templates/src/global_fns/mod.rs @@ -1,7 +1,9 @@ use std::collections::HashMap; use std::path::PathBuf; use std::sync::{Arc, Mutex, RwLock}; +use std::{fs, io, result}; +use sha2::{Digest, Sha256}; use tera::{from_value, to_value, Error, Function as TeraFn, Result, Value}; use config::Config; @@ -47,12 +49,38 @@ impl TeraFn for Trans { pub struct GetUrl { config: Config, permalinks: HashMap, + content_path: PathBuf, } impl GetUrl { - pub fn new(config: Config, permalinks: HashMap) -> Self { - Self { config, permalinks } + pub fn new(config: Config, permalinks: HashMap, content_path: PathBuf) -> Self { + Self { config, permalinks, content_path } } } + +fn make_path_with_lang(path: String, lang: &str, config: &Config) -> Result { + if lang == &config.default_language { + return Ok(path); + } + + if !config.languages.iter().any(|x| x.code == lang) { + return Err( + format!("`{}` is not an authorized language (check config.languages).", lang).into() + ); + } + + let mut splitted_path: Vec = path.split(".").map(String::from).collect(); + let ilast = splitted_path.len() - 1; + splitted_path[ilast] = format!("{}.{}", lang, splitted_path[ilast]); + Ok(splitted_path.join(".")) +} + +fn compute_file_sha256(path: &PathBuf) -> result::Result { + let mut file = fs::File::open(path)?; + let mut hasher = Sha256::new(); + io::copy(&mut file, &mut hasher)?; + Ok(format!("{:x}", hasher.result())) +} + impl TeraFn for GetUrl { fn call(&self, args: &HashMap) -> Result { let cachebust = @@ -67,11 +95,21 @@ impl TeraFn for GetUrl { args.get("path"), "`get_url` requires a `path` argument with a string value" ); + + let lang = optional_arg!(String, args.get("lang"), "`get_url`: `lang` must be a string.") + .unwrap_or_else(|| self.config.default_language.clone()); + if path.starts_with("@/") { - match resolve_internal_link(&path, &self.permalinks) { + let path_with_lang = match make_path_with_lang(path, &lang, &self.config) { + Ok(x) => x, + Err(e) => return Err(e), + }; + + match resolve_internal_link(&path_with_lang, &self.permalinks) { Ok(resolved) => Ok(to_value(resolved.permalink).unwrap()), Err(_) => { - Err(format!("Could not resolve URL for link `{}` not found.", path).into()) + Err(format!("Could not resolve URL for link `{}` not found.", path_with_lang) + .into()) } } } else { @@ -82,7 +120,11 @@ impl TeraFn for GetUrl { } if cachebust { - permalink = format!("{}?t={}", permalink, self.config.build_timestamp.unwrap()); + let full_path = self.content_path.join(&path); + permalink = match compute_file_sha256(&full_path) { + Ok(digest) => format!("{}?h={}", permalink, digest), + Err(_) => return Err(format!("Could not read file `{}`. Expected location: {}", path, full_path.to_str().unwrap()).into()), + }; } Ok(to_value(permalink).unwrap()) } @@ -340,28 +382,56 @@ mod tests { use super::{GetTaxonomy, GetTaxonomyUrl, GetUrl, Trans}; use std::collections::HashMap; + use std::env::temp_dir; + use std::fs::remove_dir_all; + use std::path::PathBuf; use std::sync::{Arc, RwLock}; + use lazy_static::lazy_static; + use tera::{to_value, Function, Value}; use config::{Config, Taxonomy as TaxonomyConfig}; use library::{Library, Taxonomy, TaxonomyItem}; + use utils::fs::{create_directory, create_file}; use utils::slugs::SlugifyStrategy; + struct TestContext { + content_path: PathBuf, + } + impl TestContext { + fn setup() -> Self { + let dir = temp_dir().join("test_global_fns"); + create_directory(&dir).expect("Could not create test directory"); + create_file(&dir.join("app.css"), "// Hello world!") + .expect("Could not create test content (app.css)"); + Self { content_path: dir } + } + } + impl Drop for TestContext { + fn drop(&mut self) { + remove_dir_all(&self.content_path).expect("Could not free test directory"); + } + } + + lazy_static! { + static ref TEST_CONTEXT: TestContext = TestContext::setup(); + } + #[test] fn can_add_cachebust_to_url() { let config = Config::default(); - let static_fn = GetUrl::new(config, HashMap::new()); + let static_fn = GetUrl::new(config, HashMap::new(), TEST_CONTEXT.content_path.clone()); let mut args = HashMap::new(); args.insert("path".to_string(), to_value("app.css").unwrap()); args.insert("cachebust".to_string(), to_value(true).unwrap()); - assert_eq!(static_fn.call(&args).unwrap(), "http://a-website.com/app.css?t=1"); + assert_eq!(static_fn.call(&args).unwrap(), "http://a-website.com/app.css?h=572e691dc68c3fcd653ae463261bdb38f35dc6f01715d9ce68799319dd158840"); } #[test] fn can_add_trailing_slashes() { let config = Config::default(); - let static_fn = GetUrl::new(config, HashMap::new()); + let static_fn = GetUrl::new(config, HashMap::new(), TEST_CONTEXT.content_path.clone()); let mut args = HashMap::new(); args.insert("path".to_string(), to_value("app.css").unwrap()); args.insert("trailing_slash".to_string(), to_value(true).unwrap()); @@ -371,18 +441,18 @@ mod tests { #[test] fn can_add_slashes_and_cachebust() { let config = Config::default(); - let static_fn = GetUrl::new(config, HashMap::new()); + let static_fn = GetUrl::new(config, HashMap::new(), TEST_CONTEXT.content_path.clone()); let mut args = HashMap::new(); args.insert("path".to_string(), to_value("app.css").unwrap()); args.insert("trailing_slash".to_string(), to_value(true).unwrap()); args.insert("cachebust".to_string(), to_value(true).unwrap()); - assert_eq!(static_fn.call(&args).unwrap(), "http://a-website.com/app.css/?t=1"); + assert_eq!(static_fn.call(&args).unwrap(), "http://a-website.com/app.css/?h=572e691dc68c3fcd653ae463261bdb38f35dc6f01715d9ce68799319dd158840"); } #[test] fn can_link_to_some_static_file() { let config = Config::default(); - let static_fn = GetUrl::new(config, HashMap::new()); + let static_fn = GetUrl::new(config, HashMap::new(), TEST_CONTEXT.content_path.clone()); let mut args = HashMap::new(); args.insert("path".to_string(), to_value("app.css").unwrap()); assert_eq!(static_fn.call(&args).unwrap(), "http://a-website.com/app.css"); @@ -516,6 +586,9 @@ mod tests { const TRANS_CONFIG: &str = r#" base_url = "https://remplace-par-ton-url.fr" default_language = "fr" +languages = [ + { code = "en" }, +] [translations] [translations.fr] @@ -562,4 +635,62 @@ title = "A title" let error = Trans::new(config).call(&args).unwrap_err(); assert_eq!("Failed to retreive term translation", format!("{}", error)); } + + #[test] + fn error_when_language_not_available() { + let config = Config::parse(TRANS_CONFIG).unwrap(); + let static_fn = GetUrl::new(config, HashMap::new(), TEST_CONTEXT.content_path.clone()); + let mut args = HashMap::new(); + args.insert("path".to_string(), to_value("@/a_section/a_page.md").unwrap()); + args.insert("lang".to_string(), to_value("it").unwrap()); + let err = static_fn.call(&args).unwrap_err(); + assert_eq!( + "`it` is not an authorized language (check config.languages).", + format!("{}", err) + ); + } + + #[test] + fn can_get_url_with_default_language() { + let config = Config::parse(TRANS_CONFIG).unwrap(); + let mut permalinks = HashMap::new(); + permalinks.insert( + "a_section/a_page.md".to_string(), + "https://remplace-par-ton-url.fr/a_section/a_page/".to_string(), + ); + permalinks.insert( + "a_section/a_page.en.md".to_string(), + "https://remplace-par-ton-url.fr/en/a_section/a_page/".to_string(), + ); + let static_fn = GetUrl::new(config, permalinks, TEST_CONTEXT.content_path.clone()); + let mut args = HashMap::new(); + args.insert("path".to_string(), to_value("@/a_section/a_page.md").unwrap()); + args.insert("lang".to_string(), to_value("fr").unwrap()); + assert_eq!( + static_fn.call(&args).unwrap(), + "https://remplace-par-ton-url.fr/a_section/a_page/" + ); + } + + #[test] + fn can_get_url_with_other_language() { + let config = Config::parse(TRANS_CONFIG).unwrap(); + let mut permalinks = HashMap::new(); + permalinks.insert( + "a_section/a_page.md".to_string(), + "https://remplace-par-ton-url.fr/a_section/a_page/".to_string(), + ); + permalinks.insert( + "a_section/a_page.en.md".to_string(), + "https://remplace-par-ton-url.fr/en/a_section/a_page/".to_string(), + ); + let static_fn = GetUrl::new(config, permalinks, TEST_CONTEXT.content_path.clone()); + let mut args = HashMap::new(); + args.insert("path".to_string(), to_value("@/a_section/a_page.md").unwrap()); + args.insert("lang".to_string(), to_value("en").unwrap()); + assert_eq!( + static_fn.call(&args).unwrap(), + "https://remplace-par-ton-url.fr/en/a_section/a_page/" + ); + } } diff --git a/components/templates/src/lib.rs b/components/templates/src/lib.rs index 9c04651b..a0ca5947 100644 --- a/components/templates/src/lib.rs +++ b/components/templates/src/lib.rs @@ -11,6 +11,7 @@ lazy_static! { let mut tera = Tera::default(); tera.add_raw_templates(vec![ ("__zola_builtins/404.html", include_str!("builtins/404.html")), + ("__zola_builtins/atom.xml", include_str!("builtins/atom.xml")), ("__zola_builtins/rss.xml", include_str!("builtins/rss.xml")), ("__zola_builtins/sitemap.xml", include_str!("builtins/sitemap.xml")), ("__zola_builtins/robots.txt", include_str!("builtins/robots.txt")), diff --git a/components/utils/Cargo.toml b/components/utils/Cargo.toml index e1f88945..4c79f6ff 100644 --- a/components/utils/Cargo.toml +++ b/components/utils/Cargo.toml @@ -13,6 +13,7 @@ serde = "1" serde_derive = "1" slug = "0.1" percent-encoding = "2" +filetime = "0.2.8" errors = { path = "../errors" } diff --git a/components/utils/src/fs.rs b/components/utils/src/fs.rs index 646f0921..5f54f27c 100644 --- a/components/utils/src/fs.rs +++ b/components/utils/src/fs.rs @@ -1,4 +1,5 @@ -use std::fs::{copy, create_dir_all, read_dir, File}; +use filetime::{set_file_mtime, FileTime}; +use std::fs::{copy, create_dir_all, metadata, read_dir, File}; use std::io::prelude::*; use std::path::{Path, PathBuf}; use std::time::SystemTime; @@ -94,7 +95,11 @@ pub fn find_related_assets(path: &Path) -> Vec { } /// Copy a file but takes into account where to start the copy as -/// there might be folders we need to create on the way +/// there might be folders we need to create on the way. +/// No copy occurs if all of the following conditions are satisfied: +/// 1. A file with the same name already exists in the dest path. +/// 2. Its modification timestamp is identical to that of the src file. +/// 3. Its filesize is identical to that of the src file. pub fn copy_file(src: &Path, dest: &PathBuf, base_path: &PathBuf, hard_link: bool) -> Result<()> { let relative_path = src.strip_prefix(base_path).unwrap(); let target_path = dest.join(relative_path); @@ -106,7 +111,19 @@ pub fn copy_file(src: &Path, dest: &PathBuf, base_path: &PathBuf, hard_link: boo if hard_link { std::fs::hard_link(src, target_path)? } else { - copy(src, target_path)?; + let src_metadata = metadata(src)?; + let src_mtime = FileTime::from_last_modification_time(&src_metadata); + if Path::new(&target_path).is_file() { + let target_metadata = metadata(&target_path)?; + let target_mtime = FileTime::from_last_modification_time(&target_metadata); + if !(src_mtime == target_mtime && src_metadata.len() == target_metadata.len()) { + copy(src, &target_path)?; + set_file_mtime(&target_path, src_mtime)?; + } + } else { + copy(src, &target_path)?; + set_file_mtime(&target_path, src_mtime)?; + } } Ok(()) } @@ -160,11 +177,14 @@ where #[cfg(test)] mod tests { - use std::fs::File; + use std::fs::{metadata, read_to_string, File}; + use std::io::Write; + use std::path::PathBuf; + use std::str::FromStr; - use tempfile::tempdir; + use tempfile::{tempdir, tempdir_in}; - use super::find_related_assets; + use super::{copy_file, find_related_assets}; #[test] fn can_find_related_assets() { @@ -181,4 +201,68 @@ mod tests { assert_eq!(assets.iter().filter(|p| p.file_name().unwrap() == "graph.jpg").count(), 1); assert_eq!(assets.iter().filter(|p| p.file_name().unwrap() == "fail.png").count(), 1); } + + #[test] + fn test_copy_file_timestamp_preserved() { + let base_path = PathBuf::from_str(env!("CARGO_MANIFEST_DIR")).unwrap(); + let src_dir = + tempdir_in(&base_path).expect("failed to create a temporary source directory."); + let dest_dir = + tempdir_in(&base_path).expect("failed to create a temporary destination directory."); + let src_file_path = src_dir.path().join("test.txt"); + let dest_file_path = dest_dir.path().join(src_file_path.strip_prefix(&base_path).unwrap()); + File::create(&src_file_path).unwrap(); + copy_file(&src_file_path, &dest_dir.path().to_path_buf(), &base_path, false).unwrap(); + + assert_eq!( + metadata(&src_file_path).and_then(|m| m.modified()).unwrap(), + metadata(&dest_file_path).and_then(|m| m.modified()).unwrap() + ); + } + + #[test] + fn test_copy_file_already_exists() { + let base_path = PathBuf::from_str(env!("CARGO_MANIFEST_DIR")).unwrap(); + let src_dir = + tempdir_in(&base_path).expect("failed to create a temporary source directory."); + let dest_dir = + tempdir_in(&base_path).expect("failed to create a temporary destination directory."); + let src_file_path = src_dir.path().join("test.txt"); + let dest_file_path = dest_dir.path().join(src_file_path.strip_prefix(&base_path).unwrap()); + { + let mut src_file = File::create(&src_file_path).unwrap(); + src_file.write_all(b"file1").unwrap(); + } + copy_file(&src_file_path, &dest_dir.path().to_path_buf(), &base_path, false).unwrap(); + { + let mut dest_file = File::create(&dest_file_path).unwrap(); + dest_file.write_all(b"file2").unwrap(); + } + + // Check copy does not occur when moditication timestamps and filesizes are same. + filetime::set_file_mtime(&src_file_path, filetime::FileTime::from_unix_time(0, 0)).unwrap(); + filetime::set_file_mtime(&dest_file_path, filetime::FileTime::from_unix_time(0, 0)) + .unwrap(); + copy_file(&src_file_path, &dest_dir.path().to_path_buf(), &base_path, false).unwrap(); + assert_eq!(read_to_string(&src_file_path).unwrap(), "file1"); + assert_eq!(read_to_string(&dest_file_path).unwrap(), "file2"); + + // Copy occurs if the timestamps are different while the filesizes are same. + filetime::set_file_mtime(&dest_file_path, filetime::FileTime::from_unix_time(42, 42)) + .unwrap(); + copy_file(&src_file_path, &dest_dir.path().to_path_buf(), &base_path, false).unwrap(); + assert_eq!(read_to_string(&src_file_path).unwrap(), "file1"); + assert_eq!(read_to_string(&dest_file_path).unwrap(), "file1"); + + // Copy occurs if the timestamps are same while the filesizes are different. + { + let mut dest_file = File::create(&dest_file_path).unwrap(); + dest_file.write_all(b"This file has different file size to the source file!").unwrap(); + } + filetime::set_file_mtime(&dest_file_path, filetime::FileTime::from_unix_time(0, 0)) + .unwrap(); + copy_file(&src_file_path, &dest_dir.path().to_path_buf(), &base_path, false).unwrap(); + assert_eq!(read_to_string(&src_file_path).unwrap(), "file1"); + assert_eq!(read_to_string(&dest_file_path).unwrap(), "file1"); + } } diff --git a/docs/content/documentation/content/linking.md b/docs/content/documentation/content/linking.md index 20bc065c..3497fe0a 100644 --- a/docs/content/documentation/content/linking.md +++ b/docs/content/documentation/content/linking.md @@ -5,8 +5,9 @@ weight = 50 ## Heading id and anchor insertion While rendering the Markdown content, a unique id will automatically be assigned to each heading. -This id is created by converting the heading text to a [slug](https://en.wikipedia.org/wiki/Semantic_URL#Slug) if `slugify_paths` is enabled. -if `slugify_paths` is disabled, whitespaces are replaced by `_` and the following characters are stripped: `#`, `%`, `<`, `>`, `[`, `]`, `(`, `)`, \`, `^`, `{`, `|`, `}`. +This id is created by converting the heading text to a [slug](https://en.wikipedia.org/wiki/Semantic_URL#Slug) if `slugify.anchors` is set to `"on"` (the default). +If `slugify.paths` is set to `"safe"`, whitespaces are replaced by `_` and the following characters are stripped: `#`, `%`, `<`, `>`, `[`, `]`, `(`, `)`, \`, `^`, `{`, `|`, `}`. +If `slugify.paths` is set to `"off"`, no modifications are made, and you may be left with nominally illegal ids. A number is appended at the end if the slug already exists for that article For example: @@ -38,7 +39,12 @@ This option is set at the section level: the `insert_anchor_links` variable on t The default template is very basic and will need CSS tweaks in your project to look decent. If you want to change the anchor template, it can be easily overwritten by -creating an `anchor-link.html` file in the `templates` directory, which gets an `id` variable. +creating an `anchor-link.html` file in the `templates` directory. + +The anchor link template has the following variables: + +- `id`: the heading's id after applying the rules defined by `slugify.anchors` +- `level`: the heading level (between 1 and 6) ## Internal links Linking to other pages and their headings is so common that Zola adds a diff --git a/docs/content/documentation/content/multilingual.md b/docs/content/documentation/content/multilingual.md index 9f459708..b9541fa7 100644 --- a/docs/content/documentation/content/multilingual.md +++ b/docs/content/documentation/content/multilingual.md @@ -11,9 +11,9 @@ to your `config.toml`. For example: ```toml languages = [ - {code = "fr", rss = true}, # there will be a RSS feed for French content + {code = "fr", feed = true}, # there will be a feed for French content {code = "fr", search = true}, # there will be a Search Index for French content - {code = "it"}, # there won't be a RSS feed for Italian content + {code = "it"}, # there won't be a feed for Italian content ] ``` diff --git a/docs/content/documentation/content/page.md b/docs/content/documentation/content/page.md index 3ffd166e..d04da579 100644 --- a/docs/content/documentation/content/page.md +++ b/docs/content/documentation/content/page.md @@ -35,12 +35,13 @@ For any page within your content folder, its output path will be defined by eith - its filename Either way, these proposed path will be sanitized before being used. -If `slugify_paths` is enabled in the site's config - the default - paths are [slugified](https://en.wikipedia.org/wiki/Clean_URL#Slug). -Otherwise, a simpler sanitation is performed, outputting only valid NTFS paths. -The following characters are removed: `<`, `>`, `:`, `/`, `|`, `?`, `*`, `#`, `\\`, `(`, `)`, `[`, `]` as well as newlines and tabulations. +If `slugify.paths` is set to `"on"` in the site's config - the default - paths are [slugified](https://en.wikipedia.org/wiki/Clean_URL#Slug). +If it is set to `"safe"`, only sanitation is performed, with the following characters being removed: `<`, `>`, `:`, `/`, `|`, `?`, `*`, `#`, `\\`, `(`, `)`, `[`, `]` as well as newlines and tabulations. This ensures that the path can be represented on all operating systems. Additionally, trailing whitespace and dots are removed and whitespaces are replaced by `_`. -**NOTE:** To produce URLs containing non-English characters (UTF8), `slugify_paths` needs to be set to `false`. +If `slugify.paths` is set to `"off"`, no modifications are made. + +If you want URLs containing non-ASCII characters, `slugify.paths` needs to be set to `"safe"` or `"off"`. ### Path from frontmatter @@ -56,7 +57,7 @@ slug = "femmes-libres-libération-kurde" This is my article. ``` -This frontmatter will output the article to `[base_url]/zines/femmes-libres-libération-kurde` with `slugify_paths` disabled, and to `[base_url]/zines/femmes-libres-liberation-kurde` with `slugify_enabled` enabled. +This frontmatter will output the article to `[base_url]/zines/femmes-libres-libération-kurde` with `slugify.paths` set to `"safe"` or `"off"`, and to `[base_url]/zines/femmes-libres-liberation-kurde` with the default value for `slugify.paths` of `"on"`. ### Path from filename @@ -66,7 +67,7 @@ When the article's output path is not specified in the frontmatter, it is extrac If the path found starts with a datetime string (`YYYY-mm-dd` or [a RFC3339 datetime](https://www.ietf.org/rfc/rfc3339.txt)) followed by an underscore (`_`) or a dash (`-`), this date is removed from the output path and will be used as the page date (unless already set in the front-matter). Note that the full RFC3339 datetime contains colons, which is not a valid character in a filename on Windows. -The output path extracted from the file path is then slugified or not depending on the `slugify_paths` config, as explained previously. +The output path extracted from the file path is then slugified or not, depending on the `slugify.paths` config, as explained previously. **Example:** The file `content/blog/2018-10-10-hello-world.md` will yield a page at `[base_url]/blog/hello-world`. @@ -93,6 +94,10 @@ description = "" # Setting this overrides a date set in the filename. date = +# The last updated date of the post, if different from the date. +# Same format as `date`. +updated = + # The weight as defined on the Section page of the documentation. # If the section variable `sort_by` is set to `weight`, then any page that lacks a `weight` # will not be rendered. diff --git a/docs/content/documentation/content/section.md b/docs/content/documentation/content/section.md index ae1a8bb7..93df4663 100644 --- a/docs/content/documentation/content/section.md +++ b/docs/content/documentation/content/section.md @@ -82,7 +82,7 @@ render = true # Useful for the same reason as `render` but when you don't want a 404 when # landing on the root section page. # Example: redirect_to = "documentation/content/overview" -redirect_to = "" +redirect_to = # If set to "true", the section will pass its pages on to the parent section. Defaults to `false`. # Useful when the section shouldn't split up the parent section, like diff --git a/docs/content/documentation/content/syntax-highlighting.md b/docs/content/documentation/content/syntax-highlighting.md index 553ab669..499f283e 100644 --- a/docs/content/documentation/content/syntax-highlighting.md +++ b/docs/content/documentation/content/syntax-highlighting.md @@ -24,16 +24,18 @@ Here is a full list of supported languages and their short names: ``` - ActionScript -> ["as"] +- Advanced CSV -> ["csv", "tsv"] - AppleScript -> ["applescript", "script editor"] - ASP -> ["asa"] - Assembly x86 (NASM) -> ["asm", "inc", "nasm"] +- AWK -> ["awk"] - Batch File -> ["bat", "cmd"] - BibTeX -> ["bib"] -- Bourne Again Shell (bash) -> [".bash_aliases", ".bash_completions", ".bash_functions", ".bash_login", ".bash_logout", ".bash_profile", ".bash_variables", ".bashrc", ".profile", ".textmate_init", ".zshrc", "bash", "fish", "sh", "zsh"] +- Bourne Again Shell (bash) -> [".bash_aliases", ".bash_completions", ".bash_functions", ".bash_login", ".bash_logout", ".bash_profile", ".bash_variables", ".bashrc", ".ebuild", ".eclass", ".profile", ".textmate_init", ".zlogin", ".zlogout", ".zprofile", ".zshenv", ".zshrc", "PKGBUILD", "ash", "bash", "sh", "zsh"] - C -> ["c", "h"] - C# -> ["cs", "csx"] - C++ -> ["C", "c++", "cc", "cp", "cpp", "cxx", "h", "h++", "hh", "hpp", "hxx", "inl", "ipp"] -- Clojure -> ["clj"] +- Clojure -> ["clj", "cljc", "cljs", "edn"] - CMake -> ["CMakeLists.txt", "cmake"] - CMake C Header -> ["h.in"] - CMake C++ Header -> ["h++.in", "hh.in", "hpp.in", "hxx.in"] @@ -43,10 +45,15 @@ Here is a full list of supported languages and their short names: - D -> ["d", "di"] - Dart -> ["dart"] - Diff -> ["diff", "patch"] +- Dockerfile -> ["Dockerfile", "dockerfile"] - Elixir -> ["ex", "exs"] - Elm -> ["elm"] -- Erlang -> ["Emakefile", "emakefile", "erl", "hrl"] -- fsharp -> ["fs"] +- Erlang -> ["Emakefile", "emakefile", "erl", "escript", "hrl"] +- F# -> ["fs", "fsi", "fsx"] +- Fortran (Fixed Form) -> ["F", "F77", "FOR", "FPP", "f", "f77", "for", "fpp"] +- Fortran (Modern) -> ["F03", "F08", "F90", "F95", "f03", "f08", "f90", "f95"] +- Fortran Namelist -> ["namelist"] +- Friendly Interactive Shell (fish) -> ["fish"] - Generic Config -> [".dircolors", ".gitattributes", ".gitignore", ".gitmodules", ".inputrc", "Doxyfile", "cfg", "conf", "config", "dircolors", "gitattributes", "gitignore", "gitmodules", "ini", "inputrc", "mak", "mk", "pro"] - Git Attributes -> [".gitattributes", "attributes", "gitattributes"] - Git Commit -> ["COMMIT_EDITMSG", "MERGE_MSG", "TAG_EDITMSG"] @@ -54,15 +61,19 @@ Here is a full list of supported languages and their short names: - Git Ignore -> [".gitignore", "exclude", "gitignore"] - Git Link -> [".git"] - Git Log -> ["gitlog"] +- Git Mailmap -> [".mailmap", "mailmap"] - Git Rebase Todo -> ["git-rebase-todo"] - Go -> ["go"] +- GraphQL -> ["gql", "graphql"] - Graphviz (DOT) -> ["DOT", "dot", "gv"] - Groovy -> ["Jenkinsfile", "gradle", "groovy", "gvy"] - Handlebars -> ["handlebars", "handlebars.html", "hbr", "hbrs", "hbs", "hdbs", "hjs", "mu", "mustache", "rac", "stache", "template", "tmpl"] - Haskell -> ["hs"] - HTML -> ["htm", "html", "shtml", "xhtml"] - HTML (ASP) -> ["asp"] +- HTML (EEx) -> ["html.eex", "html.leex"] - HTML (Erlang) -> ["yaws"] +- HTML (Jinja2) -> ["htm.j2", "html.j2", "xhtml.j2", "xml.j2"] - HTML (Rails) -> ["erb", "html.erb", "rails", "rhtml"] - HTML (Tcl) -> ["adp"] - Java -> ["bsh", "java"] @@ -70,8 +81,8 @@ Here is a full list of supported languages and their short names: - Java Server Page (JSP) -> ["jsp"] - JavaScript -> ["htc", "js"] - JavaScript (Rails) -> ["js.erb"] -- Jinja2 -> ["j2", "jinja2"] -- JSON -> ["json", "sublime-build", "sublime-color-scheme", "sublime-commands", "sublime-completions", "sublime-keymap", "sublime-macro", "sublime-menu", "sublime-mousemap", "sublime-project", "sublime-settings", "sublime-theme"] +- Jinja2 -> ["j2", "jinja", "jinja2"] +- JSON -> ["Pipfile.lock", "ipynb", "json", "sublime-build", "sublime-color-scheme", "sublime-commands", "sublime-completions", "sublime-keymap", "sublime-macro", "sublime-menu", "sublime-mousemap", "sublime-project", "sublime-settings", "sublime-theme"] - Julia -> ["jl"] - Kotlin -> ["kt", "kts"] - LaTeX -> ["ltx", "tex"] @@ -94,24 +105,30 @@ Here is a full list of supported languages and their short names: - OCamllex -> ["mll"] - OCamlyacc -> ["mly"] - Pascal -> ["dpr", "p", "pas"] -- Perl -> ["PL", "pl", "pm", "pod", "t"] +- Perl -> ["pc", "pl", "pm", "pmc", "pod", "t"] - PHP -> ["php", "php3", "php4", "php5", "php7", "phps", "phpt", "phtml"] - Plain Text -> ["txt"] - PowerShell -> ["ps1", "psd1", "psm1"] -- Python -> ["SConscript", "SConstruct", "Sconstruct", "Snakefile", "cpy", "gyp", "gypi", "pxd", "pxd.in", "pxi", "pxi.in", "py", "py3", "pyi", "pyw", "pyx", "pyx.in", "rpy", "sconstruct", "wscript"] -- R -> ["R", "Rprofile", "S", "r", "s"] +- PureScript -> ["purs"] +- Python -> ["SConscript", "SConstruct", "Sconstruct", "Snakefile", "bazel", "bzl", "cpy", "gyp", "gypi", "pxd", "pxd.in", "pxi", "pxi.in", "py", "py3", "pyi", "pyw", "pyx", "pyx.in", "rpy", "sconstruct", "vpy", "wscript"] +- R -> ["R", "Rprofile", "r"] +- Racket -> ["rkt"] - Rd (R Documentation) -> ["rd"] - Reason -> ["re", "rei"] - Regular Expression -> ["re"] +- Regular Expressions (Elixir) -> ["ex.re"] - reStructuredText -> ["rest", "rst"] -- Ruby -> ["Appfile", "Appraisals", "Berksfile", "Brewfile", "Cheffile", "Deliverfile", "Fastfile", "Gemfile", "Guardfile", "Rakefile", "Rantfile", "Scanfile", "Snapfile", "Thorfile", "Vagrantfile", "capfile", "cgi", "config.ru", "fcgi", "gemspec", "irbrc", "jbuilder", "podspec", "prawn", "rabl", "rake", "rb", "rbx", "rjs", "ruby.rail", "simplecov", "thor"] +- Ruby -> ["Appfile", "Appraisals", "Berksfile", "Brewfile", "Cheffile", "Deliverfile", "Fastfile", "Gemfile", "Guardfile", "Podfile", "Rakefile", "Rantfile", "Scanfile", "Snapfile", "Thorfile", "Vagrantfile", "capfile", "cgi", "config.ru", "fcgi", "gemspec", "irbrc", "jbuilder", "podspec", "prawn", "rabl", "rake", "rb", "rbx", "rjs", "ruby.rail", "simplecov", "thor"] - Ruby Haml -> ["haml", "sass"] - Ruby on Rails -> ["builder", "rxml"] - Rust -> ["rs"] -- Scala -> ["sbt", "scala"] +- Sass -> ["sass"] +- Scala -> ["sbt", "sc", "scala"] +- SCSS -> ["scss"] - SQL -> ["ddl", "dml", "sql"] - SQL (Rails) -> ["erbsql", "sql.erb"] - srt -> ["srt", "subrip"] +- Stylus -> ["styl", "stylus"] - SWI-Prolog -> ["pro"] - Swift -> ["swift"] - Tcl -> ["tcl"] @@ -121,7 +138,7 @@ Here is a full list of supported languages and their short names: - TypeScript -> ["ts"] - TypeScriptReact -> ["tsx"] - VimL -> ["vim"] -- XML -> ["dtml", "opml", "rss", "svg", "tld", "xml", "xsd", "xslt"] +- XML -> ["dtml", "opml", "rng", "rss", "svg", "tld", "xml", "xsd", "xslt"] - YAML -> ["sublime-syntax", "yaml", "yml"] ``` diff --git a/docs/content/documentation/content/taxonomies.md b/docs/content/documentation/content/taxonomies.md index e312f169..6f35b0f2 100644 --- a/docs/content/documentation/content/taxonomies.md +++ b/docs/content/documentation/content/taxonomies.md @@ -13,7 +13,7 @@ A taxonomy has five variables: - `paginate_by`: if this is set to a number, each term page will be paginated by this much. - `paginate_path`: if set, this path will be used by the paginated page and the page number will be appended after it. For example the default would be page/1. -- `rss`: if set to `true`, an RSS feed will be generated for each term. +- `feed`: if set to `true`, a feed (atom by default) will be generated for each term. - `lang`: only set this if you are making a multilingual site and want to indicate which language this taxonomy is for **Example 1:** (one language) @@ -52,7 +52,7 @@ categories = ["programming"] In a similar manner to how section and pages calculate their output path: - the taxonomy name is never slugified -- the taxonomy entry (eg. as specific tag) is slugified when `slugify_paths` is enabled in the configuration +- the taxonomy term (eg. as specific tag) is slugified when `slugify.taxonomies` is enabled (`"on"`, the default) in the configuration The taxonomy pages are then available at the following paths: diff --git a/docs/content/documentation/getting-started/configuration.md b/docs/content/documentation/getting-started/configuration.md index da4079b8..8c1b79c0 100644 --- a/docs/content/documentation/getting-started/configuration.md +++ b/docs/content/documentation/getting-started/configuration.md @@ -17,11 +17,11 @@ used by Zola as well as their default values are listed below: # The base URL of the site; the only required configuration variable. base_url = "mywebsite.com" -# The site title and description; used in RSS by default. +# The site title and description; used in feeds by default. title = "" description = "" -# The default language; used in RSS. +# The default language; used in feeds. default_language = "en" # The site theme to use. @@ -34,12 +34,17 @@ highlight_code = false # See below for list of allowed values. highlight_theme = "base16-ocean-dark" -# When set to "true", an RSS feed is automatically generated. -generate_rss = false +# When set to "true", a feed is automatically generated. +generate_feed = false -# The number of articles to include in the RSS feed. All items are included if +# The filename to use for the feed. Used as the template filename, too. +# Defaults to "atom.xml", which has a builtin template that renders an Atom 1.0 feed. +# There is also a builtin template "rss.xml" that renders an RSS 2.0 feed. +# feed_filename = "atom.xml" + +# The number of articles to include in the feed. All items are included if # this limit is not set (the default). -# rss_limit = 20 +# feed_limit = 20 # When set to "true", files in the `static` directory are hard-linked. Useful for large # static files. Note that for this to work, both `static` and the @@ -50,10 +55,10 @@ generate_rss = false # The taxonomies to be rendered for the site and their configuration. # Example: # taxonomies = [ -# {name = "tags", rss = true}, # each tag will have its own RSS feed +# {name = "tags", feed = true}, # each tag will have its own feed # {name = "tags", lang = "fr"}, # you can have taxonomies with the same name in multiple languages # {name = "categories", paginate_by = 5}, # 5 items per page for a term -# {name = "authors"}, # Basic definition: no RSS or pagination +# {name = "authors"}, # Basic definition: no feed or pagination # ] # taxonomies = [] @@ -61,9 +66,9 @@ taxonomies = [] # The additional languages for the site. # Example: # languages = [ -# {code = "fr", rss = true}, # there will be a RSS feed for French content +# {code = "fr", feed = true}, # there will be a feed for French content # {code = "fr", search = true}, # there will be a Search Index for French content -# {code = "it"}, # there won't be a RSS feed for Italian content +# {code = "it"}, # there won't be a feed for Italian content # ] # languages = [] @@ -155,6 +160,7 @@ Zola currently has the following highlight themes available: - [material-dark](https://tmtheme-editor.herokuapp.com/#!/editor/theme/Material%20Dark) - [material-light](https://github.com/morhetz/gruvbox) - [monokai](https://tmtheme-editor.herokuapp.com/#!/editor/theme/Monokai) +- [nord](https://github.com/crabique/Nord-plist/tree/0d655b23d6b300e691676d9b90a68d92b267f7ec) - [nyx-bold](https://github.com/GalAster/vscode-theme-nyx) - [one-dark](https://github.com/andresmichel/one-dark-theme) - [solarized-dark](https://tmtheme-editor.herokuapp.com/#!/editor/theme/Solarized%20(dark)) @@ -162,6 +168,7 @@ Zola currently has the following highlight themes available: - [subway-madrid](https://github.com/idleberg/Subway.tmTheme) - [subway-moscow](https://github.com/idleberg/Subway.tmTheme) - [Tomorrow](https://tmtheme-editor.herokuapp.com/#!/editor/theme/Tomorrow) +- [TwoDark](https://github.com/erremauro/TwoDark) - [visual-studio-dark](https://tmtheme-editor.herokuapp.com/#!/editor/theme/Visual%20Studio%20Dark) - [zenburn](https://github.com/colinta/zenburn) diff --git a/docs/content/documentation/templates/feeds.md b/docs/content/documentation/templates/feeds.md new file mode 100644 index 00000000..fb0dec5e --- /dev/null +++ b/docs/content/documentation/templates/feeds.md @@ -0,0 +1,34 @@ ++++ +title = "Feeds" +weight = 50 +aliases = ["/documentation/templates/rss/"] ++++ + +If the site `config.toml` file sets `generate_feed = true`, then Zola will +generate a feed file for the site, named according to the `feed_filename` +setting in `config.toml`, which defaults to `atom.xml`. Given the feed filename +`atom.xml`, the generated file will live at `base_url/atom.xml`, based upon the +`atom.xml` file in the `templates` directory, or the built-in Atom template. + +`feed_filename` can be set to any value, but built-in templates are provided +for `atom.xml` (in the preferred Atom 1.0 format), and `rss.xml` (in the RSS +2.0 format). If you choose a different filename (e.g. `feed.xml`), you will +need to provide a template yourself. + +**Only pages with a date will be available.** + +The feed template gets five variables: + +- `config`: the site config +- `feed_url`: the full url to that specific feed +- `last_updated`: the most recent `updated` or `date` field of any post +- `pages`: see [page variables](@/documentation/templates/pages-sections.md#page-variables) + for a detailed description of what this contains +- `lang`: the language code that applies to all of the pages in the feed, + if the site is multilingual, or `config.default_language` if it is not + +Feeds for taxonomy terms get two more variables, using types from the +[taxonomies templates](@/documentation/templates/taxonomies.md): + +- `taxonomy`: of type `TaxonomyConfig` +- `term`: of type `TaxonomyTerm`, but without `term.pages` (use `pages` instead) diff --git a/docs/content/documentation/templates/overview.md b/docs/content/documentation/templates/overview.md index eeb656b3..e9c967a7 100644 --- a/docs/content/documentation/templates/overview.md +++ b/docs/content/documentation/templates/overview.md @@ -13,13 +13,14 @@ to learn more about it first. All templates live in the `templates` directory. If you are not sure what variables are available in a template, you can place `{{ __tera_context }}` in the template to print the whole context. -A few variables are available on all templates except RSS and the sitemap: +A few variables are available on all templates except feeds and the sitemap: - `config`: the [configuration](@/documentation/getting-started/configuration.md) without any modifications - `current_path`: the path (full URL without `base_url`) of the current page, never starting with a `/` - `current_url`: the full URL for the current page -- `lang`: the language for the current page; `null` if the page/section doesn't have a language set +- `lang`: the language for the current page +Config variables can be accessed like `config.variable`, in HTML for example with `{{ config.base_url }}`. The 404 template does not get `current_path` and `current_url` (this information cannot be determined). ## Standard templates @@ -35,12 +36,13 @@ section variables. The `page.html` template has access to the page variables. The page and section variables are described in more detail in the next section. ## Built-in templates -Zola comes with three built-in templates: `rss.xml`, `sitemap.xml` and -`robots.txt` (each is described in its own section of this documentation). +Zola comes with four built-in templates: `atom.xml` and `rss.xml` (described in +[Feeds](@/documentation/templates/feeds.md)), `sitemap.xml` (described in [Sitemap](@/documentation/templates/sitemap.md)), +and `robots.txt` (described in [Robots.txt](@/documentation/templates/robots.md)). Additionally, themes can add their own templates, which will be applied if not overridden. You can override built-in or theme templates by creating a template with -the same name in the correct path. For example, you can override the RSS template by -creating a `templates/rss.xml` file. +the same name in the correct path. For example, you can override the Atom template by +creating a `templates/atom.xml` file. ## Custom templates In addition to the standard `index.html`, `section.html` and `page.html` templates, @@ -72,6 +74,8 @@ pass `true` to the inline argument: {{ some_text | markdown(inline=true) }} ``` +You do not need to use this filter with `page.content` or `section.content`, the content is already rendered. + ### base64_encode Encode the variable to base64. @@ -114,6 +118,16 @@ link like the ones used in Markdown, starting from the root `content` directory. {% set url = get_url(path="@/blog/_index.md") %} ``` +It accepts an optionnal parameter `lang` in order to compute a *language-aware URL* in multilingual websites. Assuming `config.base_url` is `"http://example.com"`, the following snippet will: + +- return `"http://example.com/blog/"` if `config.default_language` is `"en"` +- return `"http://example.com/en/blog/"` if `config.default_language` is **not** `"en"` and `"en"` appears in `config.languages` +- fail otherwise, with the error message `"'en' is not an authorized language (check config.languages)."` + +```jinja2 +{% set url = get_url(path="@/blog/_index.md", lang="en") %} +``` + This can also be used to get the permalinks for static assets, for example if we want to link to the file that is located at `static/css/app.css`: @@ -128,7 +142,7 @@ An example is: {{/* get_url(path="css/app.css", trailing_slash=true) */}} ``` -In the case of non-internal links, you can also add a cachebust of the format `?t=1290192` at the end of a URL +In the case of non-internal links, you can also add a cachebust of the format `?h=` at the end of a URL by passing `cachebust=true` to the `get_url` function. diff --git a/docs/content/documentation/templates/pages-sections.md b/docs/content/documentation/templates/pages-sections.md index a78c9ca2..0916b83a 100644 --- a/docs/content/documentation/templates/pages-sections.md +++ b/docs/content/documentation/templates/pages-sections.md @@ -14,10 +14,13 @@ with the following fields: ```ts +// The HTML output of the Markdown content content: String; title: String?; description: String?; date: String?; +// `updated` will be the same as `date` if `date` is specified but `updated` is not in front-matter +updated: String?; slug: String; path: String; draft: Bool; @@ -68,6 +71,7 @@ with the following fields: ```ts +// The HTML output of the Markdown content content: String; title: String?; description: String?; diff --git a/docs/content/documentation/templates/rss.md b/docs/content/documentation/templates/rss.md deleted file mode 100644 index d2e89f74..00000000 --- a/docs/content/documentation/templates/rss.md +++ /dev/null @@ -1,18 +0,0 @@ -+++ -title = "RSS" -weight = 50 -+++ - -If the site `config.toml` file sets `generate_rss = true`, then Zola will -generate an `rss.xml` page for the site, which will live at `base_url/rss.xml`. To -generate the `rss.xml` page, Zola will look for an `rss.xml` file in the `templates` -directory or, if one does not exist, it will use the use the built-in rss template. - -**Only pages with a date will be available.** - -The RSS template gets three variables in addition to `config`: - -- `feed_url`: the full url to that specific feed -- `last_build_date`: the date of the latest post -- `pages`: see [page variables](@/documentation/templates/pages-sections.md#page-variables) for -a detailed description of what this contains diff --git a/docs/content/documentation/templates/sitemap.md b/docs/content/documentation/templates/sitemap.md index decd397c..3c213516 100644 --- a/docs/content/documentation/templates/sitemap.md +++ b/docs/content/documentation/templates/sitemap.md @@ -25,7 +25,7 @@ A `SitemapEntry` has the following fields: ```ts permalink: String; -date: String?; +updated: String?; extra: Hashmap?; ``` diff --git a/docs/content/documentation/templates/taxonomies.md b/docs/content/documentation/templates/taxonomies.md index 923f0e28..7999957c 100644 --- a/docs/content/documentation/templates/taxonomies.md +++ b/docs/content/documentation/templates/taxonomies.md @@ -21,10 +21,10 @@ and `TaxonomyConfig` has the following fields: ```ts name: String, -slug: String, paginate_by: Number?; paginate_path: String?; -rss: Bool; +feed: Bool; +lang: String; ``` diff --git a/docs/content/themes/Zulma/index.md b/docs/content/themes/Zulma/index.md index 1ece6301..ffdbe6a5 100644 --- a/docs/content/themes/Zulma/index.md +++ b/docs/content/themes/Zulma/index.md @@ -100,8 +100,8 @@ Zulma has 3 taxonomies already set internally: `tags`, `cateogories` and `author ```toml taxonomies = [ {name = "categories"}, - {name = "tags", paginate_by = 5, rss = true}, - {name = "authors", rss = true}, + {name = "tags", paginate_by = 5, feed = true}, + {name = "authors", feed = true}, ] ``` diff --git a/docs/content/themes/after-dark/index.md b/docs/content/themes/after-dark/index.md index d88236b6..52579550 100644 --- a/docs/content/themes/after-dark/index.md +++ b/docs/content/themes/after-dark/index.md @@ -55,9 +55,9 @@ The theme requires tags and categories taxonomies to be enabled in your `config. ```toml taxonomies = [ - # You can enable/disable RSS - {name = "categories", rss = true}, - {name = "tags", rss = true}, + # You can enable/disable feeds + {name = "categories", feed = true}, + {name = "tags", feed = true}, ] ``` If you want to paginate taxonomies pages, you will need to overwrite the templates diff --git a/docs/content/themes/even/index.md b/docs/content/themes/even/index.md index 50460050..f9beedcb 100644 --- a/docs/content/themes/even/index.md +++ b/docs/content/themes/even/index.md @@ -48,9 +48,9 @@ The theme requires tags and categories taxonomies to be enabled in your `config. ```toml taxonomies = [ - # You can enable/disable RSS - {name = "categories", rss = true}, - {name = "tags", rss = true}, + # You can enable/disable feeds + {name = "categories", feed = true}, + {name = "tags", feed = true}, ] ``` If you want to paginate taxonomies pages, you will need to overwrite the templates diff --git a/src/cli.rs b/src/cli.rs index 975bb88c..79d758ce 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -18,9 +18,8 @@ pub fn build_cli() -> App<'static, 'static> { Arg::with_name("config") .short("c") .long("config") - .default_value("config.toml") .takes_value(true) - .help("Path to a config file other than config.toml") + .help("Path to a config file other than config.toml in the root of project") ) .subcommands(vec![ SubCommand::with_name("init") diff --git a/src/cmd/build.rs b/src/cmd/build.rs index 44d5e4bc..3a2c7634 100644 --- a/src/cmd/build.rs +++ b/src/cmd/build.rs @@ -7,9 +7,9 @@ use crate::console; pub fn build( root_dir: &Path, - config_file: &str, + config_file: &Path, base_url: Option<&str>, - output_dir: &str, + output_dir: &Path, include_drafts: bool, ) -> Result<()> { let mut site = Site::new(root_dir, config_file)?; diff --git a/src/cmd/check.rs b/src/cmd/check.rs index e354e7b4..1ad57b92 100644 --- a/src/cmd/check.rs +++ b/src/cmd/check.rs @@ -7,7 +7,7 @@ use crate::console; pub fn check( root_dir: &Path, - config_file: &str, + config_file: &Path, base_path: Option<&str>, base_url: Option<&str>, include_drafts: bool, diff --git a/src/cmd/serve.rs b/src/cmd/serve.rs index 3d4c7860..8f696dd3 100644 --- a/src/cmd/serve.rs +++ b/src/cmd/serve.rs @@ -161,9 +161,9 @@ fn create_new_site( root_dir: &Path, interface: &str, port: u16, - output_dir: &str, + output_dir: &Path, base_url: &str, - config_file: &str, + config_file: &Path, include_drafts: bool, ) -> Result<(Site, String)> { let mut site = Site::new(root_dir, config_file)?; @@ -194,9 +194,9 @@ pub fn serve( root_dir: &Path, interface: &str, port: u16, - output_dir: &str, + output_dir: &Path, base_url: &str, - config_file: &str, + config_file: &Path, watch_only: bool, open: bool, include_drafts: bool, diff --git a/src/main.rs b/src/main.rs index 935e5474..28c192f3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -16,7 +16,10 @@ fn main() { "." => env::current_dir().unwrap(), path => PathBuf::from(path), }; - let config_file = matches.value_of("config").unwrap(); + let config_file = match matches.value_of("config") { + Some(path) => PathBuf::from(path), + None => root_dir.join("config.toml"), + }; match matches.subcommand() { ("init", Some(matches)) => { @@ -31,12 +34,12 @@ fn main() { ("build", Some(matches)) => { console::info("Building site..."); let start = Instant::now(); - let output_dir = matches.value_of("output_dir").unwrap(); + let output_dir = PathBuf::from(matches.value_of("output_dir").unwrap()); match cmd::build( &root_dir, - config_file, + &config_file, matches.value_of("base_url"), - output_dir, + &output_dir, matches.is_present("drafts"), ) { Ok(()) => console::report_elapsed_time(start), @@ -73,16 +76,16 @@ fn main() { ::std::process::exit(1); } } - let output_dir = matches.value_of("output_dir").unwrap(); + let output_dir = PathBuf::from(matches.value_of("output_dir").unwrap()); let base_url = matches.value_of("base_url").unwrap(); console::info("Building site..."); match cmd::serve( &root_dir, interface, port, - output_dir, + &output_dir, base_url, - config_file, + &config_file, watch_only, open, include_drafts, @@ -99,7 +102,7 @@ fn main() { let start = Instant::now(); match cmd::check( &root_dir, - config_file, + &config_file, matches.value_of("base_path"), matches.value_of("base_url"), matches.is_present("drafts"), diff --git a/sublime_syntaxes/Assembly x86.sublime-syntax b/sublime/syntaxes/Assembly x86.sublime-syntax similarity index 100% rename from sublime_syntaxes/Assembly x86.sublime-syntax rename to sublime/syntaxes/Assembly x86.sublime-syntax diff --git a/sublime/syntaxes/CSV.sublime-syntax b/sublime/syntaxes/CSV.sublime-syntax new file mode 100644 index 00000000..1bbc5b97 --- /dev/null +++ b/sublime/syntaxes/CSV.sublime-syntax @@ -0,0 +1,46 @@ +%YAML 1.2 +--- +# http://www.sublimetext.com/docs/3/syntax.html +name: Advanced CSV +file_extensions: + - csv + - tsv +scope: text.advanced_csv +contexts: + main: + - match: (\") + captures: + 1: string.quoted.double.advanced_csv + push: + - meta_scope: meta.quoted.advanced_csv + - match: (\") + captures: + 1: string.quoted.double.advanced_csv + pop: true + - include: main + - match: '(\[([+-]?\d*)(\:)?([+-]?\d*)(\,)?([+-]?\d*)(\:)?([+-]?\d*)\])?\s*([<>v^])?\s*(=)' + captures: + 1: keyword.operator.advanced_csv + 2: constant.numeric.formula.advanced_csv + 4: constant.numeric.formula.advanced_csv + 6: constant.numeric.formula.advanced_csv + 8: constant.numeric.formula.advanced_csv + 9: keyword.operator.advanced_csv + 10: keyword.operator.advanced_csv + push: + - meta_scope: meta.range.advanced_csv + - match: (?=(\")|$) + pop: true + - include: scope:source.python + - match: '(?<=^|,|\s|\")([0-9.eE+-]+)(?=$|,|\s|\")' + scope: meta.number.advanced_csv + captures: + 1: constant.numeric.advanced_csv + - match: '(?<=^|,|\s|\")([^, \t\"]+)(?=$|,|\s|\")' + scope: meta.nonnumber.advanced_csv + captures: + 1: storage.type.advanced_csv + - match: (\,) + scope: meta.delimiter.advanced_csv + captures: + 1: keyword.operator.advanced_csv diff --git a/sublime_syntaxes/Crystal.sublime-syntax b/sublime/syntaxes/Crystal.sublime-syntax similarity index 98% rename from sublime_syntaxes/Crystal.sublime-syntax rename to sublime/syntaxes/Crystal.sublime-syntax index 7e864832..e4bca726 100644 --- a/sublime_syntaxes/Crystal.sublime-syntax +++ b/sublime/syntaxes/Crystal.sublime-syntax @@ -131,9 +131,9 @@ contexts: scope: keyword.control.pseudo-method.crystal - match: '\b(nil|true|false)\b(?![?!])' scope: constant.language.crystal - - match: '\b(__(DIR|FILE|LINE)__|self)\b(?![?!])' + - match: '\b(__(DIR|FILE|LINE|END_LINE)__|self)\b(?![?!])' scope: variable.language.crystal - - match: '\b(initialize|new|loop|include|extend|raise|getter|setter|property|class_getter|class_setter|class_property|describe|it|with|delegate|def_hash|def_equals|def_equals_and_hash|forward_missing_to|record|assert_responds_to|spawn)\b[!?]?' + - match: '\b(initialize|new|loop|include|extend|raise|getter|setter|property|class_getter|class_setter|class_property|describe|context|it|with|delegate|def_hash|def_equals|def_equals_and_hash|forward_missing_to|record|assert_responds_to|spawn|annotation|verbatim)\b[!?]?' comment: everything being a method but having a special function is a.. scope: keyword.control.special-method.crystal - match: \b(require)\b @@ -180,7 +180,7 @@ contexts: (?<=^|\s)(def)\s+ # the def keyword ( (?>[a-zA-Z_\x{80}-\x{10FFFF}][\x{80}-\x{10FFFF}\w]*(?>\.|::))? # a method name prefix (?>[a-zA-Z_\x{80}-\x{10FFFF}][\x{80}-\x{10FFFF}\w]*(?>[?!]|=(?!>))? # the method name - |===?|>[>=]?|<=>|<[<=]?|[%&`/\|]|\*\*?|=?~|[-+]@?|\[\]=?) ) # …or an operator method + |===?|>[>=]?|<=>|<[<=]?|[%&`/\|]|\*\*?|=?~|[-+]@?|\[\](?:=|\?)?) ) # …or an operator method \s*(\() # the openning parenthesis for arguments comment: the method pattern comes from the symbol pattern, see there for a explaination captures: @@ -201,7 +201,7 @@ contexts: (?<=^|\s)(def)\s+ # the def keyword ( (?>[a-zA-Z_\x{80}-\x{10FFFF}][\w\x{80}-\x{10FFFF}]*(?>\.|::))? # a method name prefix (?>[a-zA-Z_\x{80}-\x{10FFFF}][\w\x{80}-\x{10FFFF}]*(?>[?!]|=(?!>))? # the method name - |===?|>[>=]?|<=>|<[<=]?|[%&`/\|]|\*\*?|=?~|[-+]@?|\[\]=?) ) # …or an operator method + |===?|>[>=]?|<=>|<[<=]?|[%&`/\|]|\*\*?|=?~|[-+]@?|\[\](?:=|\?)?) ) # …or an operator method [ \t] # the space separating the arguments (?=[ \t]*[^\s#;]) # make sure arguments and not a comment follow comment: same as the previous rule, but without parentheses around the arguments @@ -221,7 +221,7 @@ contexts: ( \s+ # an optional group of whitespace followed by… ( (?>[a-zA-Z_\x{80}-\x{10FFFF}][\w\x{80}-\x{10FFFF}]*(?>\.|::))? # a method name prefix (?>[a-zA-Z_\x{80}-\x{10FFFF}][\w\x{80}-\x{10FFFF}]*(?>[?!]|=(?!>))? # the method name - |===?|>[>=]?|<=>|<[<=]?|[%&`/\|]|\*\*?|=?~|[-+]@?|\[\]=?) ) )? # …or an operator method + |===?|>[>=]?|<=>|<[<=]?|[%&`/\|]|\*\*?|=?~|[-+]@?|\[\](?:=|\?)?) ) )? # …or an operator method comment: the optional name is just to catch the def also without a method-name scope: meta.function.method.without-arguments.crystal captures: @@ -588,7 +588,7 @@ contexts: pop: true - match: \\. comment: Cant be named because its not neccesarily an escape. - - match: '(?[a-zA-Z_\x{80}-\x{10FFFF}][\w\x{80}-\x{10FFFF}]*(?>[?!]|=(?![>=]))?|===?|>[>=]?|<[<=]?|<=>|[%&`/\|]|\*\*?|=?~|[-+]@?|\[\]=?|@@?[a-zA-Z_\x{80}-\x{10FFFF}][\w\x{80}-\x{10FFFF}]*)' + - match: '(?[a-zA-Z_\x{80}-\x{10FFFF}][\w\x{80}-\x{10FFFF}]*(?>[?!]|=(?![>=]))?|===?|>[>=]?|<[<=]?|<=>|[%&`/\|]|\*\*?|=?~|[-+]@?|\[\](?:=|\?)?|@@?[a-zA-Z_\x{80}-\x{10FFFF}][\w\x{80}-\x{10FFFF}]*|!=?(?![?!]))' comment: symbols scope: constant.other.symbol.crystal captures: @@ -713,14 +713,14 @@ contexts: captures: 0: punctuation.definition.string.begin.crystal push: - - meta_scope: string.unquoted.embedded.js.jquery.crystal - - meta_content_scope: text.js.jquery.embedded.crystal + - meta_scope: string.unquoted.embedded.js.crystal + - meta_content_scope: text.js.embedded.crystal - match: \s*\2$ captures: 0: punctuation.definition.string.end.crystal pop: true - include: heredoc - - include: scope:source.js.jquery + - include: scope:source.js - include: interpolated_crystal - include: escaped_char - match: '(?><<-("?)((?:[_\w]+_|)(?:SH|SHELL))\b\1)' diff --git a/sublime_syntaxes/Dart.sublime-syntax b/sublime/syntaxes/Dart.sublime-syntax similarity index 90% rename from sublime_syntaxes/Dart.sublime-syntax rename to sublime/syntaxes/Dart.sublime-syntax index 223d9458..20b4407c 100644 --- a/sublime_syntaxes/Dart.sublime-syntax +++ b/sublime/syntaxes/Dart.sublime-syntax @@ -39,22 +39,31 @@ contexts: - include: comments-doc-oldschool - include: comments-doc - include: comments-inline + comments-block: + - match: /\* + push: + - meta_scope: comment.block.dart + - match: \*/ + pop: true + - include: comments-block comments-doc: - match: /// - scope: comment.block.documentation.dart + push: + - meta_scope: comment.block.documentation.dart + - match: .* + pop: true + - include: dartdoc comments-doc-oldschool: - match: /\*\* push: - meta_scope: comment.block.documentation.dart - match: \*/ pop: true + - include: comments-doc-oldschool + - include: comments-block - include: dartdoc comments-inline: - - match: /\* - push: - - meta_scope: comment.block.dart - - match: \*/ - pop: true + - include: comments-block - match: ((//).*)$ captures: 1: comment.line.double-slash.dart @@ -65,16 +74,16 @@ contexts: scope: variable.language.dart - match: '(?)' + - match: '([_$]*[a-z][a-zA-Z0-9_$]*)(<|\(|\s+=>)' captures: 1: entity.name.function.dart dartdoc: - match: '(\[.*?\])' captures: 0: variable.name.source.dart - - match: " .*" + - match: '^ {4,}(?![ \*]).*' captures: 0: variable.name.source.dart - match: "```.*?$" @@ -105,7 +114,7 @@ contexts: scope: keyword.control.dart - match: (?=|<|>) scope: keyword.operator.comparison.kotlin - match: (=) scope: keyword.operator.assignment.kotlin + - match: (::) + scope: keyword.operator.kotlin - match: (:) scope: keyword.operator.declaration.kotlin + - match: \b(by)\b + scope: keyword.other.by.kotlin + - match: (\?\.) + scope: keyword.operator.safenav.kotlin - match: (\.) scope: keyword.operator.dot.kotlin + - match: (\?:) + scope: keyword.operator.elvis.kotlin - match: (\-\-|\+\+) scope: keyword.operator.increment-decrement.kotlin - - match: (\-|\+|\*|\/|%) - scope: keyword.operator.arithmetic.kotlin - match: (\+=|\-=|\*=|\/=) scope: keyword.operator.arithmetic.assign.kotlin - - match: (!|&&|\|\|) - scope: keyword.operator.logical.kotlin - match: (\.\.) scope: keyword.operator.range.kotlin + - match: (\-|\+|\*|\/|%) + scope: keyword.operator.arithmetic.kotlin + - match: (!|&&|\|\|) + scope: keyword.operator.logical.kotlin - match: (;) scope: punctuation.terminator.kotlin namespaces: @@ -315,11 +324,11 @@ contexts: - include: generics - include: expressions types: - - match: \b(Any|Unit|String|Int|Boolean|Char|Long|Double|Float|Short|Byte|dynamic)\b + - match: \b(Nothing|Any|Unit|String|CharSequence|Int|Boolean|Char|Long|Double|Float|Short|Byte|dynamic)\b scope: storage.type.buildin.kotlin - match: \b(IntArray|BooleanArray|CharArray|LongArray|DoubleArray|FloatArray|ShortArray|ByteArray)\b scope: storage.type.buildin.array.kotlin - - match: \b(Array|List|Map)<\b + - match: \b(Array|Collection|List|Map|Set|MutableList|MutableMap|MutableSet|Sequence)<\b captures: 1: storage.type.buildin.collection.kotlin push: @@ -333,13 +342,6 @@ contexts: pop: true - include: types - include: keywords - - match: (#)\( - captures: - 1: keyword.operator.tuple.kotlin - push: - - match: \) - pop: true - - include: expressions - match: '\{' push: - match: '\}' @@ -353,15 +355,15 @@ contexts: - match: (->) scope: keyword.operator.declaration.kotlin variables: - - match: (?=\s*(?:var|val)) + - match: (?=\s*\b(?:var|val)\b) push: - - match: (?=:|=|$) + - match: (?=:|=|(\b(by)\b)|$) pop: true - match: \b(var|val)\b captures: 1: keyword.other.kotlin push: - - match: (?=:|=|$) + - match: (?=:|=|(\b(by)\b)|$) pop: true - match: < push: @@ -379,6 +381,13 @@ contexts: pop: true - include: types - include: getters-and-setters + - match: \b(by)\b + captures: + 1: keyword.other.kotlin + push: + - match: (?=$) + pop: true + - include: expressions - match: (=) captures: 1: keyword.operator.assignment.kotlin diff --git a/sublime/syntaxes/LESS-sublime b/sublime/syntaxes/LESS-sublime new file mode 160000 index 00000000..3dd952ea --- /dev/null +++ b/sublime/syntaxes/LESS-sublime @@ -0,0 +1 @@ +Subproject commit 3dd952ea771e5bc087a41146941ed36f2051c3c4 diff --git a/sublime_syntaxes/MZN.sublime-syntax b/sublime/syntaxes/MZN.sublime-syntax similarity index 100% rename from sublime_syntaxes/MZN.sublime-syntax rename to sublime/syntaxes/MZN.sublime-syntax diff --git a/sublime_syntaxes/Nim.sublime-syntax b/sublime/syntaxes/Nim.sublime-syntax similarity index 100% rename from sublime_syntaxes/Nim.sublime-syntax rename to sublime/syntaxes/Nim.sublime-syntax diff --git a/sublime_syntaxes/nix.sublime-syntax b/sublime/syntaxes/Nix.sublime-syntax similarity index 100% rename from sublime_syntaxes/nix.sublime-syntax rename to sublime/syntaxes/Nix.sublime-syntax diff --git a/sublime/syntaxes/Packages b/sublime/syntaxes/Packages new file mode 160000 index 00000000..f36b8f80 --- /dev/null +++ b/sublime/syntaxes/Packages @@ -0,0 +1 @@ +Subproject commit f36b8f807d5f30d2b8ef639232a9fc5960f550fa diff --git a/sublime_syntaxes/PowerShell.sublime-syntax b/sublime/syntaxes/PowerShell.sublime-syntax similarity index 87% rename from sublime_syntaxes/PowerShell.sublime-syntax rename to sublime/syntaxes/PowerShell.sublime-syntax index 63488230..8b92d401 100644 --- a/sublime_syntaxes/PowerShell.sublime-syntax +++ b/sublime/syntaxes/PowerShell.sublime-syntax @@ -147,7 +147,7 @@ contexts: 2: keyword.other.powershell 3: variable.parameter.powershell attribute: - - match: '(\[)\s*\b(?i)(cmdletbinding|alias|outputtype|parameter|validatenotnull|validatenotnullorempty|validatecount|validateset|allownull|allowemptycollection|allowemptystring|validatescript|validaterange|validatepattern|validatelength)\b' + - match: '(\[)\s*\b(?i)(cmdletbinding|alias|outputtype|parameter|validatenotnull|validatenotnullorempty|validatecount|validateset|allownull|allowemptycollection|allowemptystring|validatescript|validaterange|validatepattern|validatelength|supportswildcards)\b' captures: 1: punctuation.section.bracket.begin.powershell 2: support.function.attribute.powershell @@ -165,31 +165,11 @@ contexts: captures: 0: punctuation.section.group.end.powershell pop: true - - include: variable - - include: variableNoProperty - - include: hashtable - - include: scriptblock - - include: doubleQuotedStringEscapes - - include: doubleQuotedString - - include: type - - include: numericConstant - - include: doubleQuotedString - include: main - match: (?i)\b(mandatory|valuefrompipeline|valuefrompipelinebypropertyname|valuefromremainingarguments|position|parametersetname|defaultparametersetname|supportsshouldprocess|supportspaging|positionalbinding|helpuri|confirmimpact|helpmessage)\b(?:\s+)?(=)? captures: 1: variable.parameter.attribute.powershell 2: keyword.operator.assignment.powershell - - match: (?|define|define-values|define-syntax|define-syntaxes|define-for-syntax|define-require-syntax|define-provide-syntax|define-syntax-rule|define-record-type|begin|begin0|begin-for-syntax|when|unless|set!|set!-values|for|for/list|for/vector|for/hash|for/hasheq|for/hasheqv|for/and|for/or|for/lists|for/first|for/last|for/fold|for*|for*/list|for*/vector|for*/hash|for*/hasheq|for*/hasheqv|for*/and|for*/or|for*/lists|for*/first|for*/last|for*/fold|for/fold/derived|for*/fold/derived|define-sequence-syntax|:do-in|do|with-continuation-mark|quasiquote|unquote|unquote-splicing|quote-syntax|#%top-interaction|define-package|open-package|package-begin|define*|define*-values|define*-syntax|define*-syntaxes|open*-package|package?|package-exported-identifiers|package-original-identifiers|block|#%stratified-body|match|match*|match/values|define/match|match-lambda|match-lambda*|match-lambda**|match-let|match-let*|match-let-values|match-let*-values|match-letrec|match-define|match-define-values|with-handlers|with-handlers*|let/cc|let/ec|%|prompt|control|prompt-at|control-at|reset|shift|reset-at|shift-at|prompt0|reset0|control0|shift0|prompt0-at|reset0-at|control0-at|shift0-at|set|cupto|write|display|displayln|print|fprintf|printf|eprintf|format|print-pair-curly-braces|print-mpair-curly-braces|print-unreadable|print-graph|print-struct|print-box|print-vector-length|print-hash-table|print-boolean-long-form|print-reader-abbreviations|print-as-expression|print-syntax-width|current-write-relative-directory|port-write-handler|port-display-handler|port-print-handler|global-port-print-handler)[\s\)]' + scope: meta.keywords.source.racket + captures: + 1: keyword.source.racket + - match: '[\s\(](true|false|empty|null)[\s\)]' + captures: + 1: constant.language.source.racket + - match: '[\s\(\{\[](#t|#f|#true|#false)[\s\)\}\]]' + captures: + 1: constant.language.source.racket + - match: '(#\\[a-zA-Z0-9_\-?\+\.\!\"]+)' + captures: + 1: constant.language.source.racket + - match: '\b(0|([1-9][0-9_]*))\b' + scope: constant.numeric.integer.source.racket + - match: ; + push: + - meta_scope: comment.line.documentation.source.racket + - match: $\n + pop: true + - match: '#\|' + push: + - meta_scope: comment.block.source.racket + - match: '\|#' + pop: true diff --git a/sublime_syntaxes/Reason.sublime-syntax b/sublime/syntaxes/Reason.sublime-syntax similarity index 97% rename from sublime_syntaxes/Reason.sublime-syntax rename to sublime/syntaxes/Reason.sublime-syntax index 580f0144..60ad4c29 100644 --- a/sublime_syntaxes/Reason.sublime-syntax +++ b/sublime/syntaxes/Reason.sublime-syntax @@ -10,6 +10,7 @@ contexts: main: - include: reason_comment_doc_block - include: reason_comment_block + - include: reason_comment - include: reason_named_arg - include: reason_module - include: reason_lifetime @@ -102,6 +103,12 @@ contexts: scope: storage.modifier.rec.source.reason - match: \bmodule\b scope: storage.modifier.module.source.reason + reason_comment: + - match: // + push: + - meta_scope: comment.source.reason + - match: (?=^) + pop: true reason_comment_block: - match: /\* push: diff --git a/sublime/syntaxes/Stylus.sublime-syntax b/sublime/syntaxes/Stylus.sublime-syntax new file mode 100644 index 00000000..0b4e5156 --- /dev/null +++ b/sublime/syntaxes/Stylus.sublime-syntax @@ -0,0 +1,711 @@ +%YAML 1.2 +--- +# http://www.sublimetext.com/docs/3/syntax.html +name: Stylus +file_extensions: + - styl + - stylus +scope: source.stylus +contexts: + main: + - include: comments + - match: '^\s*(@(?:import|charset|css|font-face|(?:-webkit-)?keyframes)(?:\s+([\w-]+))?)\b' + captures: + 1: keyword.control.at-rule.other.stylus + 2: variable.other.animation-name.stylus + push: + - match: '$|;|(?=\{)' + pop: true + - include: string-quoted + - match: ^\s*(@media)\s* + captures: + 1: keyword.control.at-rule.media.stylus + push: + - match: '$|(?=\{)' + pop: true + - include: media-query + - match: |- + (?x) + (?<=^|;|}) + \s* + (?= + [\[\]'".\w$-]+ + \s* + ([?:]?=) + (?![^\[]*\]) + ) + push: + - match: $|; + pop: true + - include: expression + - include: iteration + - include: conditionals + - include: return + - match: |- + (?x) # multi-line regex definition mode + + ^(\s*) # starts at the beginning of line + ([\w$-]+) # identifier (name) + (\() # start of argument list + (?= + .*? + \)\s*\{ # we see a curly brace afterwards + ) # which means this is a function definition + captures: + 2: entity.name.function.stylus + 3: punctuation.definition.parameters.start.stylus + push: + - meta_scope: meta.function-call.stylus + - match: (\)) + captures: + 1: punctuation.definition.parameters.end.stylus + pop: true + - include: expression + - match: |- + (?x) # multi-line regex definition mode + ( + + (^|;) # starts at the beginning of line or at a ; + \s* + (\+?\s* # for block mixins + [\w$-]+) # identifier (name) + (\() # start of argument list + (?= + .*? + \)\s*;?\s* # if there are only spaces and semicolons + $|; # then this a + ) + ) + captures: + 3: entity.other.attribute-name.mixin.stylus + 4: punctuation.definition.parameters.start.stylus + push: + - meta_scope: meta.function-call.stylus + - match: (\)) + captures: + 1: punctuation.definition.parameters.end.stylus + pop: true + - include: expression + - match: |- + (?x) # multi-line regex definition mode + (^|(?<=\*/|\}))\s* + (?= + font(?! + \s*:\s + | + - + | + .*? + (?: + \/|normal|bold|light(er?)|serif|sans|monospace| + \b\d+(?:\b|px|r?em|%)| + var\s*\(| + ['"][^\]]*$ + ) + ) | # we need to distinguish between tag and property `cursor` + cursor(?! + \s*[:;]\s + | + - + | + .*? + (?: + (?:url\s*\()| + (?:-moz-|-webkit-|-ms-)? + (?:auto|default|none|context-menu|help|pointer|progress| + wait|cell|crosshair|text|vertical-text|alias|copy| + move|no-drop|not-allowed|e-resize|n-resize|ne-resize| + nw-resize|s-resize|se-resize|sw-resize|w-resize| + ew-resize|ns-resize|nesw-resize|nwse-resize|col-resize| + row-resize|all-scroll|zoom-in|zoom-out|grab|grabbing + normal|bold|light(er?)|serif|sans|monospace) + ) + ) | ( + ( + altGlyph|altGlyphDef|altGlyphItem|animate|animateColor| + animateMotion|animateTransform|circle|clipPath|color-profile| + defs|desc|ellipse|feBlend|feColorMatrix| + feComponentTransfer|feComposite|feConvolveMatrix| + feDiffuseLighting|feDisplacementMap|feDistantLight|feFlood| + feFuncA|feFuncB|feFuncG|feFuncR|feGaussianBlur|feImage|feMerge| + feMergeNode|feMorphology|feOffset|fePointLight| + feSpecularLighting|feSpotLight|feTile|feTurbulence|filter| + font-face|font-face-format|font-face-name|font-face-src| + font-face-uri|foreignObject|g|glyph|glyphRef|hkern|image|line| + linearGradient|marker|mask|metadata|missing-glyph|mpath|path| + pattern|polygon|polyline|radialGradient|rect|set|stop|svg| + switch|symbol|text|textPath|tref|tspan|use|view|vkern| + a|abbr|acronym|address|applet|area|article|aside|audio|b|base| + basefont|bdi|bdo|bgsound|big|blink|blockquote|body|br|button| + canvas|caption|center|cite|code|col|colgroup|data| + datalist|dd|decorator|del|details|dfn|dir|div|dl|dt|element| + em|embed|fieldset|figcaption|figure|footer|form|frame| + frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe| + img|input|ins|isindex|kbd|keygen|label|legend|li|link|listing| + main|map|mark|marquee|menu|menuitem|meta|meter|nav|nobr| + noframes|noscript|object|ol|optgroup|option|output|p|param| + plaintext|pre|progress|q|rp|rt|ruby|s|samp|script|section| + select|shadow|small|source|spacer|span|strike|strong|style| + sub|summary|sup|table|tbody|td|template|textarea|tfoot|th| + thead|time|title|tr|track|tt|u|ul|var|video|wbr|xmp) + + \s*([\s,.#\[]|:[^\s]|(?=\{|$)) + + ) | ( + [:~>\[*\/] # symbols but they are valid for selector + + ) | ( + + \+\s*[\w$-]+\b\s* # are an identifier starting with $ + (?!\() # and they can't have anything besides + + ) | ( # for animtions + + \d+(\.\d+)?%|(from|to)\b + + ) | ( # Placeholder selectors + + \$[\w$-]+\b\s* # are an identifier starting with $ + (?=$|\{) # and they can't have anything besides + + ) | ( # CSS class + + \.[a-zA-Z0-9_-]+ + + ) | ( # CSS id + + \#[a-zA-Z0-9_-]+ + + ) | ( # Reference to parent + + ([\w\d_-]+)? # matching any word right before & + (&) # & itself, escaped because of plist + ([\w\d_-]+)? # matching any word right after & + ) + ) + push: + - meta_scope: meta.selector.stylus + - match: |- + + |$|(?=\{\s*\}.*$)|(?=\{.*?[:;])|(?=\{)(?!.+\}.*$) + pop: true + - include: comma + - match: \d+(\.\d+)?%|from|to + scope: entity.other.animation-keyframe.stylus + - include: selector-components + - match: . + scope: entity.other.attribute-name.stylus + - match: |- + (?x) # multi-line regex definition mode + (?<=^|;|{)\s* # starts after begining of line, '{' or ';'' + (?= # lookahead for + ( + [a-zA-Z0-9_-] # then a letter + | # or + (\{(.*?)\}) # interpolation + | # or + (/\*.*?\*/) # comment + )+ + + \s*[:\s]\s* # value is separted by colon or space + + (?!(\s*\{)) # if there are only spaces afterwards + + (?! + [^}]*? # checking for an unclosed curly braces on this + \{ # line because if one exists it means that + [^}]* # this is a selector and not a property + ($|\}) + ) + ) + push: + - match: '(?=\}|;)|(?|(?:=|:|\?|\+|-|\*|\/|%|<|>)?=|!=)|\b(?:in|is(?:nt)?|(?]" + scope: keyword.operator.selector.stylus + - match: |- + (?x) # multi-line regex definition mode + \b( + altGlyph|altGlyphDef|altGlyphItem|animate|animateColor| + animateMotion|animateTransform|circle|clipPath|color-profile| + defs|desc|ellipse|feBlend|feColorMatrix| + feComponentTransfer|feComposite|feConvolveMatrix| + feDiffuseLighting|feDisplacementMap|feDistantLight|feFlood| + feFuncA|feFuncB|feFuncG|feFuncR|feGaussianBlur|feImage|feMerge| + feMergeNode|feMorphology|feOffset|fePointLight| + feSpecularLighting|feSpotLight|feTile|feTurbulence|filter| + font-face|font-face-format|font-face-name|font-face-src| + font-face-uri|foreignObject|g|glyph|glyphRef|hkern|image|line| + linearGradient|marker|mask|metadata|missing-glyph|mpath|path| + pattern|polygon|polyline|radialGradient|rect|set|stop|svg| + switch|symbol|text|textPath|tref|tspan|use|view|vkern| + a|abbr|acronym|address|applet|area|article|aside|audio|b|base| + basefont|bdi|bdo|bgsound|big|blink|blockquote|body|br|button| + canvas|caption|center|cite|code|col|colgroup|content|data| + datalist|dd|decorator|del|details|dfn|dir|div|dl|dt|element| + em|embed|fieldset|figcaption|figure|font|footer|form|frame| + frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe| + img|input|ins|isindex|kbd|keygen|label|legend|li|link|listing| + main|map|mark|marquee|menu|menuitem|meta|meter|nav|nobr| + noframes|noscript|object|ol|optgroup|option|output|p|param| + plaintext|pre|progress|q|rp|rt|ruby|s|samp|script|section| + select|shadow|small|source|spacer|span|strike|strong|style| + sub|summary|sup|table|tbody|td|template|textarea|tfoot|th| + thead|time|title|tr|track|tt|u|ul|var|video|wbr|xmp + )\b + scope: entity.name.tag.stylus + - match: '\.[a-zA-Z0-9_-]+' + scope: entity.other.attribute-name.class.stylus + - match: "#[a-zA-Z0-9_-]+" + scope: entity.other.attribute-name.id.stylus + - match: |- + (?x) # multi-line regex definition mode + ([\w\d_-]+)? # matching any word right before & + (&) # & itself, escaped because of plist + ([\w\d_-]+)? # matching any word right after & + captures: + 1: entity.other.attribute-name.stylus + 2: variable.language.stylus + 3: entity.other.attribute-name.stylus + single-line-comment: + - match: (\/\/).*$ + scope: comment.line.stylus + captures: + 1: punctuation.definition.comment.stylus + string-quoted: + - match: "'[^']*'" + scope: string.quoted.single.stylus + - match: '"[^"]*"' + scope: string.quoted.double.stylus + url: + - match: (url)\s*(\() + captures: + 1: entity.function-name.stylus + 2: punctuation.definition.parameters.start.stylus + push: + - meta_scope: meta.function-call.stylus + - match: (\)) + captures: + 1: punctuation.definition.parameters.end.stylus + pop: true + - include: string-quoted + - include: language-constants + - include: language-property-value-constants + - include: property-reference + - include: variable + variable: + - match: '([\w$-]+\b)' + scope: variable.other.stylus diff --git a/sublime_syntaxes/Sublime-CMakeLists b/sublime/syntaxes/Sublime-CMakeLists similarity index 100% rename from sublime_syntaxes/Sublime-CMakeLists rename to sublime/syntaxes/Sublime-CMakeLists diff --git a/sublime/syntaxes/Sublime-GenericConfig b/sublime/syntaxes/Sublime-GenericConfig new file mode 160000 index 00000000..926b6818 --- /dev/null +++ b/sublime/syntaxes/Sublime-GenericConfig @@ -0,0 +1 @@ +Subproject commit 926b6818067c741d1d5cd9bfe901954fc23eb049 diff --git a/sublime/syntaxes/SublimeElmLanguageSupport b/sublime/syntaxes/SublimeElmLanguageSupport new file mode 160000 index 00000000..e266d279 --- /dev/null +++ b/sublime/syntaxes/SublimeElmLanguageSupport @@ -0,0 +1 @@ +Subproject commit e266d279c8074aa342f106554cfa87ebe839a782 diff --git a/sublime/syntaxes/SublimeFortran b/sublime/syntaxes/SublimeFortran new file mode 160000 index 00000000..dcf4f24f --- /dev/null +++ b/sublime/syntaxes/SublimeFortran @@ -0,0 +1 @@ +Subproject commit dcf4f24f1cecd9eebf6b1eb388e4f5db671a7b08 diff --git a/sublime/syntaxes/SublimeSass b/sublime/syntaxes/SublimeSass new file mode 160000 index 00000000..b98a3f3c --- /dev/null +++ b/sublime/syntaxes/SublimeSass @@ -0,0 +1 @@ +Subproject commit b98a3f3ccff0134c38544d9bc41caf7f61048cdf diff --git a/sublime/syntaxes/SublimeTextLinkerSyntax b/sublime/syntaxes/SublimeTextLinkerSyntax new file mode 160000 index 00000000..041d1566 --- /dev/null +++ b/sublime/syntaxes/SublimeTextLinkerSyntax @@ -0,0 +1 @@ +Subproject commit 041d15667eca429afd4ff3df3b8f8617a66fc410 diff --git a/sublime/syntaxes/Swift.sublime-syntax b/sublime/syntaxes/Swift.sublime-syntax new file mode 100644 index 00000000..9194cc37 --- /dev/null +++ b/sublime/syntaxes/Swift.sublime-syntax @@ -0,0 +1,371 @@ +%YAML 1.2 +--- +# http://www.sublimetext.com/docs/3/syntax.html +name: Swift +file_extensions: + - swift +first_line_match: ^#!/.*\bswift +scope: source.swift +contexts: + main: + - include: shebang-line + - include: comment + - include: attribute + - include: literal + - include: operator + - include: declaration + - include: storage-type + - include: keyword + - include: type + - include: boolean + comment: + - include: documentation-comment + - include: block-comment + - include: in-line-comment + access-level-modifier: + - match: \b(open|public|internal|fileprivate|private)\b(?:\(set\))? + comment: access-level-modifier + scope: keyword.other.access-level-modifier.swift + arithmetic-operator: + - match: '(?&|\^~.])(\+|\-|\*|\/)(?![/=\-+!*%<>&|\^~.])' + scope: keyword.operator.arithmetic.swift + array-type: + - match: \b(Array)(<) + captures: + 1: support.type.array.swift + 2: punctuation.array.begin.swift + push: + - meta_scope: meta.array.swift + - match: (>) + captures: + 1: punctuation.array.end.swift + pop: true + - include: main + assignment-operator: + - match: '(?&|\^~.])(\+|\-|\*|\/|%|<<|>>|&|\^|\||&&|\|\|)?=(?![/=\-+!*%<>&|\^~.])' + scope: keyword.operator.assignment.swift + attribute: + - match: '((@)(\B\$[0-9]+|\b[\w^\d][\w\d]*\b|\B`[\w^\d][\w\d]*`\B))(\()' + captures: + 1: storage.modifier.attribute.swift + 2: punctuation.definition.attribute.swift + 3: punctuation.definition.attribute-arguments.begin.swift + push: + - meta_content_scope: meta.attribute.arguments.swift + - match: \) + captures: + 0: punctuation.definition.attribute-arguments.end.swift + pop: true + - include: main + - match: '((@)(\B\$[0-9]+|\b[\w^\d][\w\d]*\b|\B`[\w^\d][\w\d]*`\B))' + captures: + 1: storage.modifier.attribute.swift + 2: punctuation.definition.attribute.swift + bitwise-operator: + - match: '(?&|\^~.])(&|\||\^|<<|>>)(?![/=\-+!*%<>&|\^~.])' + scope: keyword.operator.bitwise.swift + block-comment: + - match: /\* + comment: Block comment + captures: + 0: punctuation.definition.comment.block.begin.swift + push: + - meta_scope: comment.block.swift + - match: \*/ + captures: + 0: punctuation.definition.comment.block.end.swift + pop: true + boolean: + - match: \b(true|false)\b + scope: keyword.constant.boolean.swift + branch-statement-keyword: + - include: if-statement-keyword + - include: switch-statement-keyword + catch-statement-keyword: + - match: \b(catch|do)\b + comment: catch-statement + scope: kewyord.control.catch.swift + code-block: + - match: '(\{)' + comment: code-block + captures: + 1: punctuation.definition.code-block.begin.swift + push: + - match: '(\})' + captures: + 1: punctuation.definition.code-block.end.swift + pop: true + - include: main + collection-type: + - include: array-type + - include: dictionary-type + - match: \b(Array|Dictionary)\b + scope: support.type.swift + comparative-operator: + - match: '(?&|\^~.])((=|!)==?|(<|>)=?|~=)(?![/=\-+!*%<>&|\^~.])' + scope: keyword.operator.comparative.swift + control-transfer-statement-keyword: + - match: \b(continue|break|fallthrough|return)\b + comment: control-transfer-statement + scope: keyword.control.transfer.swift + custom-operator: + - match: '(?<=[\s(\[{,;:])([/=\-+!*%<>&|\^~.]++)(?![\s)\]},;:])' + scope: keyword.operator.custom.prefix.unary.swift + - match: '(?&|\^~.]++)(?![\s)\]},;:\.])' + scope: keyword.operator.custom.postfix.unary.swift + - match: '(?<=[\s(\[{,;:])([/=\-+!*%<>&|\^~.]++)(?=[\s)\]},;:])' + scope: keyword.operator.custom.binary.swift + declaration: + - include: import-declaration + - include: function-declaration + declaration-modifier: + - match: \b(class|convenience|dynamic|final|lazy|(non)?mutating|optional|override|required|static|unowned((un)?safe)?|weak)\b + comment: declaration-modifier + scope: keyword.other.declaration-modifier.swift + dictionary-type: + - match: \b(Dictionary)(<) + captures: + 1: support.type.dictionary.swift + 2: punctuation.dictionary.begin.swift + push: + - meta_scope: meta.dictionary.swift + - match: (>) + captures: + 1: punctuation.dictionary.end.swift + pop: true + - include: main + documentation-comment: + - match: /\*\* + comment: Documentation comment + captures: + 0: punctuation.definition.comment.block.documentation.begin.swift + push: + - meta_scope: comment.block.documentation.swift + - match: \*/ + captures: + 0: punctuation.definition.comment.block.documentation.end.swift + pop: true + floating-point-literal: + - match: '\b([0-9][0-9_]*)(\.([0-9][0-9_]*))?([eE][+\-]?([0-9][0-9_]*))?\b' + comment: floating-point-literal -> (decimal-literal)(decimal-fraction)?(decimal-exponent)? + - match: '\b(0x\h[\h_]*)(\.(0x\h[\h_]*))?([pP][+\-]?(0x\h[\h_]*))\b' + comment: floating-point-literal -> (hexadecimal-literal)(hexadecimal-fraction)?(hexadecimal-exponent) + function-body: + - include: code-block + function-declaration: + - match: '\b(func)\s+(\B\$[0-9]+|\b[\w^\d][\w\d]*\b|\B`[\w^\d][\w\d]*`\B|[/=\-+!*%<>&|\^~.]+)\s*(?=\(|<)' + comment: function-declaration + captures: + 1: storage.type.function.swift + 2: entity.type.function.swift + push: + - meta_scope: meta.function-declaration.swift + - match: '(?<=\})' + pop: true + - include: generic-parameter-clause + - include: parameter-clause + - include: function-result + - include: function-body + function-result: + - match: '(?&|\^~.])(\->)(?![/=\-+!*%<>&|\^~.])\s*' + comment: function-result + captures: + 1: keyword.operator.function-result.swift + push: + - meta_scope: meta.function-result.swift + - match: '\s*(?=\{)' + pop: true + - include: type + generic-parameter-clause: + - match: (<) + comment: generic-parameter-clause + captures: + 1: punctuation.definition.generic-parameter-clause.begin.swift + push: + - meta_scope: meta.generic-parameter-clause.swift + - match: (>) + captures: + 1: punctuation.definition.generic-parameter-clause.end.swift + pop: true + - include: main + identifier: + - match: '(\B\$[0-9]+|\b[\w^\d][\w\d]*\b|\B`[\w^\d][\w\d]*`\B)' + comment: identifier + scope: meta.identifier.swift + if-statement-keyword: + - match: \b(if|else)\b + comment: if-statement + scope: keyword.control.if.swift + import-declaration: + - match: '\b(import)\s+(?:(typealias|struct|class|enum|protocol|var|func)\s+)?((?:\B\$[0-9]+|\b[\w^\d][\w\d]*\b|\B`[\w^\d][\w\d]*`\B|[/=\-+!*%<>&|\^~.]+)(?:\.(?:\B\$[0-9]+|\b[\w^\d][\w\d]*\b|\B`[\w^\d][\w\d]*`\B|[/=\-+!*%<>&|\^~.]+))*)' + comment: import-declaration + scope: meta.import.swift + captures: + 1: keyword.other.import.swift + 2: storage.modifier.swift + 3: support.type.module.import.swift + in-line-comment: + - match: (//).* + comment: In-line comment + scope: comment.line.double-slash.swift + captures: + 1: punctuation.definition.comment.line.double-slash.swift + increment-decrement-operator: + - match: '(?&|\^~.])(\+\+|\-\-)(?![/=\-+!*%<>&|\^~.])' + scope: keyword.operator.increment-or-decrement.swift + integer-literal: + - match: '(\B\-|\b)(0b[01][01_]*)\b' + comment: binary-literal + scope: constant.numeric.integer.binary.swift + - match: '(\B\-|\b)(0o[0-7][0-7_]*)\b' + comment: octal-literal + scope: constant.numeric.integer.octal.swift + - match: '(\B\-|\b)([0-9][0-9_]*)\b' + comment: decimal-literal + scope: constant.numeric.integer.decimal.swift + - match: '(\B\-|\b)(0x\h[\h_]*)\b' + comment: hexadecimal-literal + scope: constant.numeric.integer.hexadecimal.swift + integer-type: + - match: \bU?Int(8|16|32|64)?\b + comment: Int types + scope: support.type.swift + keyword: + - include: branch-statement-keyword + - include: control-transfer-statement-keyword + - include: loop-statement-keyword + - include: catch-statement-keyword + - include: operator-declaration-modifier + - include: declaration-modifier + - include: access-level-modifier + - match: \b(class|deinit|enum|extension|func|import|init|let|protocol|static|struct|subscript|typealias|var|throws|rethrows)\b + comment: declaration keyword + scope: keyword.declaration.swift + - match: \b(break|case|continue|default|do|else|fallthrough|if|in|for|return|switch|where|while|repeat|catch|guard|defer|try|throw)\b + comment: statement keyword + scope: keyword.statement.swift + - match: \b(as|dynamicType|is|new|super|self|Self|Type)\b + comment: expression and type keyword + scope: keyword.other.statement.swift + - match: \b(associativity|didSet|get|infix|inout|left|mutating|none|nonmutating|operator|override|postfix|precedence|prefix|right|set|unowned((un)?safe)?|weak|willSet)\b + comment: other keyword + scope: keyword.other.swift + literal: + - include: integer-literal + - include: floating-point-literal + - include: nil-literal + - include: string-literal + - include: special-literal + logical-operator: + - match: '(?&|\^~.])(!|&&|\|\|)(?![/=\-+!*%<>&|\^~.])' + scope: keyword.operator.logical.swift + loop-statement-keyword: + - match: \b(while|repeat|for|in)\b + comment: loop-statement + scope: keyword.control.loop.swift + nil-literal: + - match: \bnil\b + comment: nil-literal + scope: constant.nil.swift + operator: + - include: comparative-operator + - include: assignment-operator + - include: logical-operator + - include: remainder-operator + - include: increment-decrement-operator + - include: overflow-operator + - include: range-operator + - include: bitwise-operator + - include: arithmetic-operator + - include: ternary-operator + - include: type-casting-operator + - include: custom-operator + operator-declaration-modifier: + - match: \b(operator|prefix|infix|postfix)\b + comment: operator-declaration + scope: keyword.other.operator.swift + optional-type: + - match: \b(Optional)(<) + scope: meta.optional.swift + overflow-operator: + - match: '(?&|\^~.])\&(\+|\-|\*|\/|%)(?![/=\-+!*%<>&|\^~.])' + scope: keyword.operator.overflow.swift + parameter-clause: + - match: (\() + comment: parameter-clause + captures: + 1: punctuation.definition.function-arguments.begin.swift + push: + - meta_scope: meta.parameter-clause.swift + - match: (\)) + captures: + 1: punctuation.definition.function-arguments.end.swift + pop: true + - include: main + primitive-type: + - match: \b(Int|Float|Double|String|Bool|Character|Void)\b + comment: Primitive types + scope: support.type.swift + protocol-composition-type: + - match: \b(protocol)(<) + scope: meta.protocol.swift + range-operator: + - match: '(?&|\^~.])\.\.(?:\.)?(?![/=\-+!*%<>&|\^~.])' + scope: keyword.operator.range.swift + remainder-operator: + - match: '(?&|\^~.])\%(?![/=\-+!*%<>&|\^~.])' + scope: keyword.operator.remainder.swift + shebang-line: + - match: ^(#!).*$ + comment: Shebang line + scope: comment.line.shebang.swift + captures: + 1: punctuation.definition.comment.line.shebang.swift + special-literal: + - match: \b__(FILE|LINE|COLUMN|FUNCTION)__\b + scope: keyword.other.literal.swift + storage-type: + - match: \b(var|func|let|class|enum|struct|protocol|extension|typealias)\b + scope: storage.type.swift + string-literal: + - match: \" + captures: + 0: string.quoted.double.swift + push: + - meta_scope: meta.literal.string.swift + - match: \" + captures: + 0: string.quoted.double.swift + pop: true + - match: '\\([0tnr\"\''\\]|x\h{2}|u\h{4}|U\h{8})' + scope: constant.character.escape.swift + - match: (\\\() + captures: + 1: support.punctuation.expression.begin.swift + push: + - meta_content_scope: meta.expression.swift + - match: (\)) + captures: + 1: support.punctuation.expression.end.swift + pop: true + - include: scope:source.swift + - match: (\"|\\) + scope: invalid.illegal.swift + - match: (.) + scope: string.quoted.double.swift + switch-statement-keyword: + - match: \b(switch|case|default|where)\b + comment: switch-statement + scope: keyword.control.switch.swift + ternary-operator: + - match: '(?<=[\s(\[{,;:])(\?|:)(?=[\s)\]},;:])' + scope: keyword.operator.ternary.swift + type: + - include: primitive-type + - include: integer-type + - include: collection-type + - include: optional-type + - include: protocol-composition-type + type-casting-operator: + - match: \b(is\b|as(\?\B|\b)) + scope: keyword.operator.type-casting.swift diff --git a/sublime/syntaxes/TypeScript.sublime-syntax b/sublime/syntaxes/TypeScript.sublime-syntax new file mode 100644 index 00000000..b491d3ba --- /dev/null +++ b/sublime/syntaxes/TypeScript.sublime-syntax @@ -0,0 +1,3340 @@ +%YAML 1.2 +--- +# http://www.sublimetext.com/docs/3/syntax.html +name: TypeScript +file_extensions: + - ts +scope: source.ts +contexts: + main: + - include: directives + - include: statements + - match: \A(#!).*(?=$) + scope: comment.line.shebang.ts + captures: + 1: punctuation.definition.comment.ts + comment: + - match: /\*\*(?!/) + captures: + 0: punctuation.definition.comment.ts + push: + - meta_scope: comment.block.documentation.ts + - match: \*/ + captures: + 0: punctuation.definition.comment.ts + pop: true + - include: docblock + - match: (/\*)(?:\s*((@)internal)(?=\s|(\*/)))? + captures: + 1: punctuation.definition.comment.ts + 2: storage.type.internaldeclaration.ts + 3: punctuation.decorator.internaldeclaration.ts + push: + - meta_scope: comment.block.ts + - match: \*/ + captures: + 0: punctuation.definition.comment.ts + pop: true + - match: '(^[ \t]+)?((//)(?:\s*((@)internal)(?=\s|$))?)' + captures: + 1: punctuation.whitespace.comment.leading.ts + 2: comment.line.double-slash.ts + 3: punctuation.definition.comment.ts + 4: storage.type.internaldeclaration.ts + 5: punctuation.decorator.internaldeclaration.ts + push: + - meta_content_scope: comment.line.double-slash.ts + - match: (?=$) + pop: true + access-modifier: + - match: '(?]|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^yield|[^\._$[:alnum:]]yield|^throw|[^\._$[:alnum:]]throw|^in|[^\._$[:alnum:]]in|^of|[^\._$[:alnum:]]of|^typeof|[^\._$[:alnum:]]typeof|&&|\|\||\*)\s*(\{)' + captures: + 1: punctuation.definition.block.ts + push: + - meta_scope: meta.objectliteral.ts + - match: '\}' + captures: + 0: punctuation.definition.block.ts + pop: true + - include: object-member + array-binding-pattern: + - match: '(?:(\.\.\.)\s*)?(\[)' + captures: + 1: keyword.operator.rest.ts + 2: punctuation.definition.binding-pattern.array.ts + push: + - match: '\]' + captures: + 0: punctuation.definition.binding-pattern.array.ts + pop: true + - include: binding-element + - include: punctuation-comma + array-binding-pattern-const: + - match: '(?:(\.\.\.)\s*)?(\[)' + captures: + 1: keyword.operator.rest.ts + 2: punctuation.definition.binding-pattern.array.ts + push: + - match: '\]' + captures: + 0: punctuation.definition.binding-pattern.array.ts + pop: true + - include: binding-element-const + - include: punctuation-comma + array-literal: + - match: '\s*(\[)' + captures: + 1: meta.brace.square.ts + push: + - meta_scope: meta.array.literal.ts + - match: '\]' + captures: + 0: meta.brace.square.ts + pop: true + - include: expression + - include: punctuation-comma + arrow-function: + - match: '(?:(?)' + scope: meta.arrow.ts + captures: + 1: storage.modifier.async.ts + 2: variable.parameter.ts + - match: |- + (?x) (?: + (? is on new line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) + ) | + + # arrow function possible to detect only with => on same line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator + ) + ) + ) + captures: + 1: storage.modifier.async.ts + push: + - meta_scope: meta.arrow.ts + - match: '(?==>|\{|(^\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\s+))' + pop: true + - include: comment + - include: type-parameters + - include: function-parameters + - include: arrow-return-type + - include: possibly-arrow-return-type + - match: "=>" + captures: + 0: storage.type.function.arrow.ts + push: + - meta_scope: meta.arrow.ts + - match: '((?<=\}|\S)(?)|((?!\{)(?=\S)))(?!\/[\/\*])' + pop: true + - include: single-line-comment-consuming-line-ending + - include: decl-block + - include: expression + arrow-return-type: + - match: (?<=\))\s*(:) + captures: + 1: keyword.operator.type.annotation.ts + push: + - meta_scope: meta.return.type.arrow.ts + - match: '(?==>|\{|(^\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\s+))' + pop: true + - include: arrow-return-type-body + arrow-return-type-body: + - match: '(?<=[:])(?=\s*\{)' + push: + - match: '(?<=\})' + pop: true + - include: type-object + - include: type-predicate-operator + - include: type + async-modifier: + - match: '(?) + scope: cast.expr.ts + captures: + 1: meta.brace.angle.ts + 2: storage.modifier.ts + 3: meta.brace.angle.ts + - match: '(?:(?*?\&\|\^]|[^_$[:alnum:]](?:\+\+|\-\-)|[^\+]\+|[^\-]\-))\s*(<)(?!) + captures: + 1: meta.brace.angle.ts + pop: true + - include: type + - match: '(?:(?<=^))\s*(<)(?=[_$[:alpha:]][_$[:alnum:]]*\s*>)' + captures: + 1: meta.brace.angle.ts + push: + - meta_scope: cast.expr.ts + - match: (\>) + captures: + 1: meta.brace.angle.ts + pop: true + - include: type + class-declaration: + - match: '(?\s*$)' + captures: + 1: punctuation.definition.comment.ts + push: + - meta_scope: comment.line.triple-slash.directive.ts + - match: (?=$) + pop: true + - match: (<)(reference|amd-dependency|amd-module) + captures: + 1: punctuation.definition.tag.directive.ts + 2: entity.name.tag.directive.ts + push: + - meta_scope: meta.tag.ts + - match: /> + captures: + 0: punctuation.definition.tag.directive.ts + pop: true + - match: path|types|no-default-lib|lib|name + scope: entity.other.attribute-name.directive.ts + - match: "=" + scope: keyword.operator.assignment.ts + - include: string + docblock: + - match: |- + (?x) + ((@)(?:access|api)) + \s+ + (private|protected|public) + \b + captures: + 1: storage.type.class.jsdoc + 2: punctuation.definition.block.tag.jsdoc + 3: constant.language.access-type.jsdoc + - match: |- + (?x) + ((@)author) + \s+ + ( + [^@\s<>*/] + (?:[^@<>*/]|\*[^/])* + ) + (?: + \s* + (<) + ([^>\s]+) + (>) + )? + captures: + 1: storage.type.class.jsdoc + 2: punctuation.definition.block.tag.jsdoc + 3: entity.name.type.instance.jsdoc + 4: punctuation.definition.bracket.angle.begin.jsdoc + 5: constant.other.email.link.underline.jsdoc + 6: punctuation.definition.bracket.angle.end.jsdoc + - match: |- + (?x) + ((@)borrows) \s+ + ((?:[^@\s*/]|\*[^/])+) # + \s+ (as) \s+ # as + ((?:[^@\s*/]|\*[^/])+) # + captures: + 1: storage.type.class.jsdoc + 2: punctuation.definition.block.tag.jsdoc + 3: entity.name.type.instance.jsdoc + 4: keyword.operator.control.jsdoc + 5: entity.name.type.instance.jsdoc + - match: ((@)example)\s+ + captures: + 1: storage.type.class.jsdoc + 2: punctuation.definition.block.tag.jsdoc + push: + - meta_scope: meta.example.jsdoc + - match: (?=@|\*/) + pop: true + - match: ^\s\*\s+ + - match: \G(<)caption(>) + captures: + 0: entity.name.tag.inline.jsdoc + 1: punctuation.definition.bracket.angle.begin.jsdoc + 2: punctuation.definition.bracket.angle.end.jsdoc + push: + - meta_content_scope: constant.other.description.jsdoc + - match: ()|(?=\*/) + captures: + 0: entity.name.tag.inline.jsdoc + 1: punctuation.definition.bracket.angle.begin.jsdoc + 2: punctuation.definition.bracket.angle.end.jsdoc + pop: true + - match: '[^\s@*](?:[^*]|\*[^/])*' + captures: + 0: source.embedded.ts + - match: (?x) ((@)kind) \s+ (class|constant|event|external|file|function|member|mixin|module|namespace|typedef) \b + captures: + 1: storage.type.class.jsdoc + 2: punctuation.definition.block.tag.jsdoc + 3: constant.language.symbol-type.jsdoc + - match: |- + (?x) + ((@)see) + \s+ + (?: + # URL + ( + (?=https?://) + (?:[^\s*]|\*[^/])+ + ) + | + # JSDoc namepath + ( + (?! + # Avoid matching bare URIs (also acceptable as links) + https?:// + | + # Avoid matching {@inline tags}; we match those below + (?:\[[^\[\]]*\])? # Possible description [preceding]{@tag} + {@(?:link|linkcode|linkplain|tutorial)\b + ) + # Matched namepath + (?:[^@\s*/]|\*[^/])+ + ) + ) + captures: + 1: storage.type.class.jsdoc + 2: punctuation.definition.block.tag.jsdoc + 3: variable.other.link.underline.jsdoc + 4: entity.name.type.instance.jsdoc + - match: |- + (?x) + ((@)template) + \s+ + # One or more valid identifiers + ( + [A-Za-z_$] # First character: non-numeric word character + [\w$.\[\]]* # Rest of identifier + (?: # Possible list of additional identifiers + \s* , \s* + [A-Za-z_$] + [\w$.\[\]]* + )* + ) + captures: + 1: storage.type.class.jsdoc + 2: punctuation.definition.block.tag.jsdoc + 3: variable.other.jsdoc + - match: |- + (?x) + ( + (@) + (?:arg|argument|const|constant|member|namespace|param|var) + ) + \s+ + ( + [A-Za-z_$] + [\w$.\[\]]* + ) + captures: + 1: storage.type.class.jsdoc + 2: punctuation.definition.block.tag.jsdoc + 3: variable.other.jsdoc + - match: '((@)typedef)\s+(?={)' + captures: + 1: storage.type.class.jsdoc + 2: punctuation.definition.block.tag.jsdoc + push: + - match: '(?=\s|\*/|[^{}\[\]A-Za-z_$])' + pop: true + - include: jsdoctype + - match: '(?:[^@\s*/]|\*[^/])+' + scope: entity.name.type.instance.jsdoc + - match: '((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\s+(?={)' + captures: + 1: storage.type.class.jsdoc + 2: punctuation.definition.block.tag.jsdoc + push: + - match: '(?=\s|\*/|[^{}\[\]A-Za-z_$])' + pop: true + - include: jsdoctype + - match: '([A-Za-z_$][\w$.\[\]]*)' + scope: variable.other.jsdoc + - match: |- + (?x) + (\[)\s* + [\w$]+ + (?: + (?:\[\])? # Foo[ ].bar properties within an array + \. # Foo.Bar namespaced parameter + [\w$]+ + )* + (?: + \s* + (=) # [foo=bar] Default parameter value + \s* + ( + # The inner regexes are to stop the match early at */ and to not stop at escaped quotes + (?> + "(?:(?:\*(?!/))|(?:\\(?!"))|[^*\\])*?" | # [foo="bar"] Double-quoted + '(?:(?:\*(?!/))|(?:\\(?!'))|[^*\\])*?' | # [foo='bar'] Single-quoted + \[ (?:(?:\*(?!/))|[^*])*? \] | # [foo=[1,2]] Array literal + (?:(?:\*(?!/))|\s(?!\s*\])|\[.*?(?:\]|(?=\*/))|[^*\s\[\]])* # Everything else + )* + ) + )? + \s*(?:(\])((?:[^*\s]|\*[^\s/])+)?|(?=\*/)) + scope: variable.other.jsdoc + captures: + 1: punctuation.definition.optional-value.begin.bracket.square.jsdoc + 2: keyword.operator.assignment.jsdoc + 3: source.embedded.ts + 4: punctuation.definition.optional-value.end.bracket.square.jsdoc + 5: invalid.illegal.syntax.jsdoc + - match: |- + (?x) + ( + (@) + (?:define|enum|exception|export|extends|lends|implements|modifies + |namespace|private|protected|returns?|suppress|this|throws|type + |yields?) + ) + \s+(?={) + captures: + 1: storage.type.class.jsdoc + 2: punctuation.definition.block.tag.jsdoc + push: + - match: '(?=\s|\*/|[^{}\[\]A-Za-z_$])' + pop: true + - include: jsdoctype + - match: |- + (?x) + ( + (@) + (?:alias|augments|callback|constructs|emits|event|fires|exports? + |extends|external|function|func|host|lends|listens|interface|memberof!? + |method|module|mixes|mixin|name|requires|see|this|typedef|uses) + ) + \s+ + ( + (?: + [^{}@\s*] | \*[^/] + )+ + ) + captures: + 1: storage.type.class.jsdoc + 2: punctuation.definition.block.tag.jsdoc + 3: entity.name.type.instance.jsdoc + - match: '((@)(?:default(?:value)?|license|version))\s+(([''''"]))' + captures: + 1: storage.type.class.jsdoc + 2: punctuation.definition.block.tag.jsdoc + 3: variable.other.jsdoc + 4: punctuation.definition.string.begin.jsdoc + push: + - meta_content_scope: variable.other.jsdoc + - match: (\3)|(?=$|\*/) + captures: + 0: variable.other.jsdoc + 1: punctuation.definition.string.end.jsdoc + pop: true + - match: '((@)(?:default(?:value)?|license|tutorial|variation|version))\s+([^\s*]+)' + captures: + 1: storage.type.class.jsdoc + 2: punctuation.definition.block.tag.jsdoc + 3: variable.other.jsdoc + - match: '(?x) (@) (?:abstract|access|alias|api|arg|argument|async|attribute|augments|author|beta|borrows|bubbles |callback|chainable|class|classdesc|code|config|const|constant|constructor|constructs|copyright |default|defaultvalue|define|deprecated|desc|description|dict|emits|enum|event|example|exception |exports?|extends|extension(?:_?for)?|external|externs|file|fileoverview|final|fires|for|func |function|generator|global|hideconstructor|host|ignore|implements|implicitCast|inherit[Dd]oc |inner|instance|interface|internal|kind|lends|license|listens|main|member|memberof!?|method |mixes|mixins?|modifies|module|name|namespace|noalias|nocollapse|nocompile|nosideeffects |override|overview|package|param|polymer(?:Behavior)?|preserve|private|prop|property|protected |public|read[Oo]nly|record|require[ds]|returns?|see|since|static|struct|submodule|summary |suppress|template|this|throws|todo|tutorial|type|typedef|unrestricted|uses|var|variation |version|virtual|writeOnce|yields?) \b' + scope: storage.type.class.jsdoc + captures: + 1: punctuation.definition.block.tag.jsdoc + - include: inline-tags + - match: '((@)(?:[_$[:alpha:]][_$[:alnum:]]*))(?=\s+)' + captures: + 1: storage.type.class.jsdoc + 2: punctuation.definition.block.tag.jsdoc + enum-declaration: + - match: '(?) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) + ) | + + # arrow function possible to detect only with => on same line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator + ) + )) + )) | + # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) => + (:\s*( + (<) | + ([(]\s*( + ([)]) | + (\.\.\.) | + ([_$[:alnum:]]+\s*( + ([:,?=])| + ([)]\s*=>) + )) + )) + )) | + (:\s*(?]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) | + (:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) + ) | + + # arrow function possible to detect only with => on same line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator + ) + )) + ))) + captures: + 1: storage.modifier.ts + 2: keyword.operator.rest.ts + 3: entity.name.function.ts variable.language.this.ts + 4: entity.name.function.ts + 5: keyword.operator.optional.ts + - match: '(?x)(?:(?>=|>>>=|\|= + scope: keyword.operator.assignment.compound.bitwise.ts + - match: "<<|>>>|>>" + scope: keyword.operator.bitwise.shift.ts + - match: "===|!==|==|!=" + scope: keyword.operator.comparison.ts + - match: <=|>=|<>|<|> + scope: keyword.operator.relational.ts + - match: '(\!)\s*(/)(?![/*])' + captures: + 1: keyword.operator.logical.ts + 2: keyword.operator.arithmetic.ts + - match: \!|&&|\|\||\?\? + scope: keyword.operator.logical.ts + - match: \&|~|\^|\| + scope: keyword.operator.bitwise.ts + - match: \= + scope: keyword.operator.assignment.ts + - match: "--" + scope: keyword.operator.decrement.ts + - match: \+\+ + scope: keyword.operator.increment.ts + - match: '%|\*|/|-|\+' + scope: keyword.operator.arithmetic.ts + - match: '(?<=[_$[:alnum:])\]])\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)+(/)(?![/*]))' + push: + - match: '(/)(?!\*([^\*]|(\*[^\/]))*\*\/)' + captures: + 1: keyword.operator.arithmetic.ts + pop: true + - include: comment + - match: '(?<=[_$[:alnum:])\]])\s*(/)(?![/*])' + captures: + 1: keyword.operator.arithmetic.ts + expressionPunctuations: + - include: punctuation-comma + - include: punctuation-accessor + expressionWithoutIdentifiers: + - include: string + - include: regex + - include: comment + - include: function-expression + - include: class-expression + - include: arrow-function + - include: paren-expression-possibly-arrow + - include: cast + - include: ternary-expression + - include: new-expr + - include: instanceof-expr + - include: object-literal + - include: expression-operators + - include: function-call + - include: literal + - include: support-objects + - include: paren-expression + field-declaration: + - match: |- + (?x)(?) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) + ) | + + # arrow function possible to detect only with => on same line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator + ) + )) + )) | + # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) => + (:\s*( + (<) | + ([(]\s*( + ([)]) | + (\.\.\.) | + ([_$[:alnum:]]+\s*( + ([:,?=])| + ([)]\s*=>) + )) + )) + )) | + (:\s*(?]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) | + (:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) + ) | + + # arrow function possible to detect only with => on same line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator + ) + )) + ))) + captures: + 1: meta.definition.property.ts entity.name.function.ts + 2: keyword.operator.optional.ts + 3: keyword.operator.definiteassignment.ts + - match: '\#?[_$[:alpha:]][_$[:alnum:]]*' + scope: meta.definition.property.ts variable.object.property.ts + - match: \? + scope: keyword.operator.optional.ts + - match: \! + scope: keyword.operator.definiteassignment.ts + for-loop: + - match: '(?\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?))*(?)*(?\s*)?\()' + push: + - 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*)?\()' + pop: true + - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))' + push: + - meta_scope: meta.function-call.ts + - 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*)?\()' + pop: true + - include: support-function-call-identifiers + - match: '(\#?[_$[:alpha:]][_$[:alnum:]]*)' + scope: entity.name.function.ts + - include: comment + - match: \?\. + scope: meta.function-call.ts punctuation.accessor.optional.ts + - match: \! + scope: meta.function-call.ts keyword.operator.definiteassignment.ts + - include: type-arguments + - include: paren-expression + function-declaration: + - match: '(?) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) + ) | + + # arrow function possible to detect only with => on same line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator + ) + )) + )) + captures: + 1: punctuation.accessor.ts + 2: punctuation.accessor.optional.ts + 3: entity.name.function.ts + - match: '(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(\#?[[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])' + captures: + 1: punctuation.accessor.ts + 2: punctuation.accessor.optional.ts + 3: variable.other.constant.property.ts + - match: '(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(\#?[_$[:alpha:]][_$[:alnum:]]*)' + captures: + 1: punctuation.accessor.ts + 2: punctuation.accessor.optional.ts + 3: variable.other.property.ts + - match: "([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])" + scope: variable.other.constant.ts + - match: "[_$[:alpha:]][_$[:alnum:]]*" + scope: variable.other.readwrite.ts + if-statement: + - match: '(?]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(])' + captures: + 1: storage.modifier.ts + 2: storage.modifier.ts + 3: storage.modifier.async.ts + 4: keyword.operator.new.ts + 5: keyword.generator.asterisk.ts + push: + - meta_scope: meta.method.declaration.ts + - match: '(?=\}|;|,|$)|(?<=\})' + pop: true + - include: method-declaration-name + - include: function-body + - match: |- + (?x)(?]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(]) + captures: + 1: storage.modifier.ts + 2: storage.modifier.ts + 3: storage.modifier.async.ts + 4: storage.type.property.ts + 5: keyword.generator.asterisk.ts + push: + - meta_scope: meta.method.declaration.ts + - match: '(?=\}|;|,|$)|(?<=\})' + pop: true + - include: method-declaration-name + - include: function-body + method-declaration-name: + - match: |- + (?x)(?=((\b(?]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(]) + captures: + 1: storage.modifier.async.ts + 2: storage.type.property.ts + 3: keyword.generator.asterisk.ts + push: + - meta_scope: meta.method.declaration.ts + - match: '(?=\}|;|,)|(?<=\})' + pop: true + - include: method-declaration-name + - include: function-body + - match: |- + (?x)(?]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(]) + captures: + 1: storage.modifier.async.ts + 2: storage.type.property.ts + 3: keyword.generator.asterisk.ts + push: + - match: (?=\(|\<) + pop: true + - include: method-declaration-name + object-member: + - include: comment + - include: object-literal-method-declaration + - match: '(?=\[)' + push: + - meta_scope: meta.object.member.ts meta.object-literal.key.ts + - match: '(?=:)|((?<=[\]])(?=\s*[\(\<]))' + pop: true + - include: comment + - include: array-literal + - match: '(?=[\''\"\`])' + push: + - meta_scope: meta.object.member.ts meta.object-literal.key.ts + - match: '(?=:)|((?<=[\''\"\`])(?=((\s*[\(\<,}])|(\s+(as)\s+))))' + pop: true + - include: comment + - include: string + - match: |- + (?x)(?=(\b(?) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) + ) | + + # arrow function possible to detect only with => on same line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator + ) + )) + ))) + scope: meta.object.member.ts + captures: + 0: meta.object-literal.key.ts + 1: entity.name.function.ts + - match: '(?:[_$[:alpha:]][_$[:alnum:]]*)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:)' + scope: meta.object.member.ts + captures: + 0: meta.object-literal.key.ts + - match: \.\.\. + captures: + 0: keyword.operator.spread.ts + push: + - meta_scope: meta.object.member.ts + - match: '(?=,|\})' + pop: true + - include: expression + - match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(?=,|\}|$|\/\/|\/\*)' + scope: meta.object.member.ts + captures: + 1: variable.other.readwrite.ts + - match: '(?]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))' + captures: + 1: storage.modifier.async.ts + push: + - match: (?<=\)) + pop: true + - include: type-parameters + - match: \( + captures: + 0: meta.brace.round.ts + push: + - match: \) + captures: + 0: meta.brace.round.ts + pop: true + - include: expression-inside-possibly-arrow-parens + - match: '(?<=:)\s*(async)?\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))' + captures: + 1: storage.modifier.async.ts + 2: meta.brace.round.ts + push: + - match: \) + captures: + 0: meta.brace.round.ts + pop: true + - include: expression-inside-possibly-arrow-parens + - match: (?<=:)\s*(async)?\s*(?=\<\s*$) + captures: + 1: storage.modifier.async.ts + push: + - match: (?<=\>) + pop: true + - include: type-parameters + - match: '(?<=\>)\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))' + captures: + 1: meta.brace.round.ts + push: + - match: \) + captures: + 0: meta.brace.round.ts + pop: true + - include: expression-inside-possibly-arrow-parens + - include: possibly-arrow-return-type + - include: expression + - include: punctuation-comma + parameter-array-binding-pattern: + - match: '(?:(\.\.\.)\s*)?(\[)' + captures: + 1: keyword.operator.rest.ts + 2: punctuation.definition.binding-pattern.array.ts + push: + - match: '\]' + captures: + 0: punctuation.definition.binding-pattern.array.ts + pop: true + - include: parameter-binding-element + - include: punctuation-comma + parameter-binding-element: + - include: comment + - include: string + - include: numeric-literal + - include: regex + - include: parameter-object-binding-pattern + - include: parameter-array-binding-pattern + - include: destructuring-parameter-rest + - include: variable-initializer + parameter-name: + - match: '(?) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) + ) | + + # arrow function possible to detect only with => on same line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator + ) + )) + )) | + # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) => + (:\s*( + (<) | + ([(]\s*( + ([)]) | + (\.\.\.) | + ([_$[:alnum:]]+\s*( + ([:,?=])| + ([)]\s*=>) + )) + )) + )) | + (:\s*(?]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) | + (:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) + ) | + + # arrow function possible to detect only with => on same line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator + ) + )) + ))) + captures: + 1: storage.modifier.ts + 2: keyword.operator.rest.ts + 3: entity.name.function.ts variable.language.this.ts + 4: entity.name.function.ts + 5: keyword.operator.optional.ts + - match: '(?x)(?:(?])" + pop: true + - include: type + paren-expression: + - match: \( + captures: + 0: meta.brace.round.ts + push: + - match: \) + captures: + 0: meta.brace.round.ts + pop: true + - include: expression + paren-expression-possibly-arrow: + - match: '(?<=[(=,])\s*(async)?(?=\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))' + captures: + 1: storage.modifier.async.ts + push: + - match: (?<=\)) + pop: true + - include: paren-expression-possibly-arrow-with-typeparameters + - match: '(?<=[(=,]|=>|^return|[^\._$[:alnum:]]return)\s*(async)?(?=\s*((((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?\()|(<))\s*$)' + captures: + 1: storage.modifier.async.ts + push: + - match: (?<=\)) + pop: true + - include: paren-expression-possibly-arrow-with-typeparameters + - include: possibly-arrow-return-type + paren-expression-possibly-arrow-with-typeparameters: + - include: type-parameters + - match: \( + captures: + 0: meta.brace.round.ts + push: + - match: \) + captures: + 0: meta.brace.round.ts + pop: true + - include: expression-inside-possibly-arrow-parens + possibly-arrow-return-type: + - match: '(?<=\)|^)\s*(:)(?=\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*=>)' + captures: + 1: meta.arrow.ts meta.return.type.arrow.ts keyword.operator.type.annotation.ts + push: + - meta_content_scope: meta.arrow.ts meta.return.type.arrow.ts + - match: '(?==>|\{|(^\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\s+))' + pop: true + - include: arrow-return-type-body + property-accessor: + - match: '(?|&&|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[\()]|\\.|\[([^\]\\]|\\.)+\]|\(([^\)\\]|\\.)+\))+\/([gimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))' + captures: + 1: punctuation.definition.string.begin.ts + push: + - meta_scope: string.regexp.ts + - match: "(/)([gimsuy]*)" + captures: + 1: punctuation.definition.string.end.ts + 2: keyword.other.ts + pop: true + - include: regexp + - match: '((?' + captures: + 0: keyword.other.back-reference.regexp + 1: variable.other.regexp + - match: '[?+*]|\{(\d+,\d+|\d+,|,\d+|\d+)\}\??' + scope: keyword.operator.quantifier.regexp + - match: \| + scope: keyword.operator.or.regexp + - match: (\()((\?=)|(\?!)|(\?<=)|(\?))?' + captures: + 0: punctuation.definition.group.regexp + 1: punctuation.definition.group.no-capture.regexp + 2: variable.other.regexp + push: + - meta_scope: meta.group.regexp + - match: \) + captures: + 0: punctuation.definition.group.regexp + pop: true + - include: regexp + - match: '(\[)(\^)?' + captures: + 1: punctuation.definition.character-class.regexp + 2: keyword.operator.negation.regexp + push: + - meta_scope: constant.other.character-class.set.regexp + - match: '(\])' + captures: + 1: punctuation.definition.character-class.regexp + pop: true + - match: '(?:.|(\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\c[A-Z])|(\\.))\-(?:[^\]\\]|(\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\c[A-Z])|(\\.))' + scope: constant.other.character-class.range.regexp + captures: + 1: constant.character.numeric.regexp + 2: constant.character.control.regexp + 3: constant.character.escape.backslash.regexp + 4: constant.character.numeric.regexp + 5: constant.character.control.regexp + 6: constant.character.escape.backslash.regexp + - include: regex-character-class + - include: regex-character-class + return-type: + - match: (?<=\))\s*(:)(?=\s*\S) + captures: + 1: keyword.operator.type.annotation.ts + push: + - meta_scope: meta.return.type.ts + - match: "(?]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?\()) + | + (?:(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\b(?!\$))) + captures: + 1: punctuation.accessor.ts + 2: punctuation.accessor.optional.ts + 3: support.variable.property.ts + 4: support.constant.ts + - match: |- + (?x) (?]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?\() + captures: + 1: punctuation.accessor.ts + 2: punctuation.accessor.optional.ts + 3: support.constant.dom.ts + 4: support.variable.property.dom.ts + - match: |- + (?x)(?\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?))*(?)*(?\s*)?`)' + push: + - meta_scope: string.template.ts + - match: (?=`) + pop: true + - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*))' + push: + - 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*)?`)' + pop: true + - include: support-function-call-identifiers + - match: "([_$[:alpha:]][_$[:alnum:]]*)" + scope: entity.name.function.tagged-template.ts + - include: type-arguments + - 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*)`)' + captures: + 1: entity.name.function.tagged-template.ts + push: + - meta_scope: string.template.ts + - match: (?=`) + pop: true + - include: type-arguments + - match: "([_$[:alpha:]][_$[:alnum:]]*)?(`)" + captures: + 1: entity.name.function.tagged-template.ts + 2: punctuation.definition.string.template.begin.ts + push: + - meta_scope: string.template.ts + - match: "`" + captures: + 0: punctuation.definition.string.template.end.ts + pop: true + - include: template-substitution-element + - include: string-character-escape + template-substitution-element: + - match: '\$\{' + captures: + 0: punctuation.definition.template-expression.begin.ts + push: + - meta_scope: meta.template.expression.ts + - meta_content_scope: meta.embedded.line.ts + - match: '\}' + captures: + 0: punctuation.definition.template-expression.end.ts + pop: true + - include: expression + ternary-expression: + - match: '(?!\?\.\s*[^[:digit:]])(\?)(?!\?)' + captures: + 1: keyword.operator.ternary.ts + push: + - match: \s*(:) + captures: + 1: keyword.operator.ternary.ts + pop: true + - include: expression + this-literal: + - match: '(?])|((?<=[\}>\]\)]|[_$[:alpha:]])\s*(?=\{)))' + pop: true + - include: type + - match: (:) + captures: + 1: keyword.operator.type.annotation.ts + push: + - meta_scope: meta.type.annotation.ts + - match: '(?])|(?=^\s*$)|((?<=\S)(?=\s*$))|((?<=[\}>\]\)]|[_$[:alpha:]])\s*(?=\{)))' + pop: true + - include: type + type-arguments: + - match: \< + captures: + 0: punctuation.definition.typeparameters.begin.ts + push: + - meta_scope: meta.type.parameters.ts + - match: \> + captures: + 0: punctuation.definition.typeparameters.end.ts + pop: true + - include: type-arguments-body + type-arguments-body: + - match: '(?) + pop: true + - include: comment + - include: type-parameters + - match: '(?) + )) + ) + ) + ) + push: + - meta_scope: meta.type.function.ts + - match: (?<=\)) + pop: true + - include: function-parameters + type-function-return-type: + - match: (=>)(?=\s*\S) + captures: + 1: storage.type.function.arrow.ts + push: + - meta_scope: meta.type.function.return.ts + - match: '(?)(?:\?]|//|$)' + pop: true + - include: type-function-return-type-core + - match: "=>" + captures: + 0: storage.type.function.arrow.ts + push: + - meta_scope: meta.type.function.return.ts + - match: '(?)(?]|//|^\s*$)|((?<=\S)(?=\s*$)))' + pop: true + - include: type-function-return-type-core + type-function-return-type-core: + - include: comment + - match: '(?<==>)(?=\s*\{)' + push: + - match: '(?<=\})' + pop: true + - include: type-object + - include: type-predicate-operator + - include: type + type-name: + - match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(<)' + captures: + 1: entity.name.type.module.ts + 2: punctuation.accessor.ts + 3: punctuation.accessor.optional.ts + 4: meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts + push: + - meta_content_scope: meta.type.parameters.ts + - match: (>) + captures: + 1: meta.type.parameters.ts punctuation.definition.typeparameters.end.ts + pop: true + - include: type-arguments-body + - match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(<)' + captures: + 1: entity.name.type.ts + 2: meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts + push: + - meta_content_scope: meta.type.parameters.ts + - match: (>) + captures: + 1: meta.type.parameters.ts punctuation.definition.typeparameters.end.ts + pop: true + - include: type-arguments-body + - match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))' + captures: + 1: entity.name.type.module.ts + 2: punctuation.accessor.ts + 3: punctuation.accessor.optional.ts + - match: "[_$[:alpha:]][_$[:alnum:]]*" + scope: entity.name.type.ts + type-object: + - match: '\{' + captures: + 0: punctuation.definition.block.ts + push: + - meta_scope: meta.object.type.ts + - match: '\}' + captures: + 0: punctuation.definition.block.ts + pop: true + - include: comment + - include: method-declaration + - include: indexer-declaration + - include: indexer-mapped-type-declaration + - include: field-declaration + - include: type-annotation + - match: \.\.\. + captures: + 0: keyword.operator.spread.ts + push: + - match: '(?=\}|;|,|$)|(?<=\})' + pop: true + - include: type + - include: punctuation-comma + - include: punctuation-semicolon + - include: type + type-operators: + - include: typeof-operator + - match: '([&|])(?=\s*\{)' + captures: + 0: keyword.operator.type.ts + push: + - match: '(?<=\})' + pop: true + - include: type-object + - match: "[&|]" + captures: + 0: keyword.operator.type.ts + push: + - match: (?=\S) + pop: true + - match: '(?) + captures: + 1: punctuation.definition.typeparameters.end.ts + pop: true + - include: comment + - match: '(?) + scope: keyword.operator.assignment.ts + type-paren-or-function-parameters: + - match: \( + captures: + 0: meta.brace.round.ts + push: + - meta_scope: meta.type.paren.cover.ts + - match: \) + captures: + 0: meta.brace.round.ts + pop: true + - match: |- + (?x)(?:(?) + )) + )) + )) | + (:\s*(?]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))))) + captures: + 1: storage.modifier.ts + 2: keyword.operator.rest.ts + 3: entity.name.function.ts variable.language.this.ts + 4: entity.name.function.ts + 5: keyword.operator.optional.ts + - match: '(?x)(?:(?) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) + ) | + + # arrow function possible to detect only with => on same line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator + ) + )) + )) | + # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) => + (:\s*( + (<) | + ([(]\s*( + ([)]) | + (\.\.\.) | + ([_$[:alnum:]]+\s*( + ([:,?=])| + ([)]\s*=>) + )) + )) + )) | + (:\s*(?]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) | + (:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) + ) | + + # arrow function possible to detect only with => on same line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator + ) + )) + ))) + captures: + 1: meta.definition.variable.ts variable.other.constant.ts entity.name.function.ts + push: + - meta_scope: meta.var-single-variable.expr.ts + - match: '(?=$|^|[;,=}]|((?) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) + ) | + + # arrow function possible to detect only with => on same line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator + ) + )) + )) | + # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) => + (:\s*( + (<) | + ([(]\s*( + ([)]) | + (\.\.\.) | + ([_$[:alnum:]]+\s*( + ([:,?=])| + ([)]\s*=>) + )) + )) + )) | + (:\s*(?]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) | + (:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) + ) | + + # arrow function possible to detect only with => on same line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator + ) + )) + ))) + captures: + 1: meta.definition.variable.ts entity.name.function.ts + 2: keyword.operator.definiteassignment.ts + push: + - meta_scope: meta.var-single-variable.expr.ts + - match: '(?=$|^|[;,=}]|((?\s*$) + captures: + 1: keyword.operator.assignment.ts + push: + - match: '(?=$|^|[,);}\]]|((?]|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^yield|[^\._$[:alnum:]]yield|^throw|[^\._$[:alnum:]]throw|^in|[^\._$[:alnum:]]in|^of|[^\._$[:alnum:]]of|^typeof|[^\._$[:alnum:]]typeof|&&|\|\||\*)\s*(\{)' captures: 1: punctuation.definition.block.tsx push: @@ -72,10 +72,22 @@ contexts: pop: true - include: binding-element - include: punctuation-comma - array-literal: - - match: '\[' + array-binding-pattern-const: + - match: '(?:(\.\.\.)\s*)?(\[)' captures: - 0: meta.brace.square.tsx + 1: keyword.operator.rest.tsx + 2: punctuation.definition.binding-pattern.array.tsx + push: + - match: '\]' + captures: + 0: punctuation.definition.binding-pattern.array.tsx + pop: true + - include: binding-element-const + - include: punctuation-comma + array-literal: + - match: '\s*(\[)' + captures: + 1: meta.brace.square.tsx push: - meta_scope: meta.array.literal.tsx - match: '\]' @@ -97,21 +109,22 @@ contexts: (?= # sure shot arrow functions even if => is on new line ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? [(]\s* ( - ([)]\s*:) | # (): - ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: ) ) | ( - [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends ) | # arrow function possible to detect only with => on same line ( - (<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters - \(\s*([_$[:alpha:]\{\[]([^()]|\((\s*[^()]*)?\))*)?\) # parameteres - (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type - \s*=> # arrow operator + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters + \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type + \s*=> # arrow operator ) ) ) @@ -142,19 +155,32 @@ contexts: - meta_scope: meta.return.type.arrow.tsx - match: '(?==>|\{|(^\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\s+))' pop: true - - match: '(?<=[:])(?=\s*\{)' - push: - - match: '(?<=\})' - pop: true - - include: type-object - - include: type-predicate-operator - - include: type + - include: arrow-return-type-body + arrow-return-type-body: + - match: '(?<=[:])(?=\s*\{)' + push: + - match: '(?<=\})' + pop: true + - include: type-object + - include: type-predicate-operator + - include: type + async-modifier: + - match: '(?\s*$)' + - match: '^(///)\s*(?=<(reference|amd-dependency|amd-module)(\s+(path|types|no-default-lib|lib|name)\s*=\s*((\''([^\''\\]|\\\''|\\)*\'')|(\"([^\"\\]|\\\"|\\)*\")))+\s*/>\s*$)' captures: 1: punctuation.definition.comment.tsx push: @@ -363,7 +418,7 @@ contexts: captures: 0: punctuation.definition.tag.directive.tsx pop: true - - match: path|types|no-default-lib|name + - match: path|types|no-default-lib|lib|name scope: entity.other.attribute-name.directive.tsx - match: "=" scope: keyword.operator.assignment.tsx @@ -665,7 +720,7 @@ contexts: 3: keyword.control.default.tsx push: - meta_scope: meta.export.default.tsx - - match: (?=;|$|\babstract\b|\basync\b|\bclass\b|\bconst\b|\bdeclare\b|\benum\b|\bexport\b|\bfunction\b|\bimport\b|\binterface\b|\blet\b|\bmodule\b|\bnamespace\b|\btype\b|\bvar\b) + - 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) pop: true - include: expression - match: '(?) )) | ((async\s*)?( + ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) | # sure shot arrow functions even if => is on new line ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? [(]\s* ( - ([)]\s*:) | # (): - ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: ) ) | ( - [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends ) | # arrow function possible to detect only with => on same line ( - (<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters - \(\s*([_$[:alpha:]\{\[]([^()]|\((\s*[^()]*)?\))*)?\) # parameteres - (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type - \s*=> # arrow operator + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters + \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type + \s*=> # arrow operator ) )) )) | @@ -813,41 +927,82 @@ contexts: ([)]\s*=>) )) )) + )) | + (:\s*((<\s*$)|([\(]\s*([\{\[]\s*)?$))) | + (:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) | + # sure shot arrow functions even if => is on new line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? + [(]\s* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) + ) | + ( + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends + ) | + # arrow function possible to detect only with => on same line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters + \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type + \s*=> # arrow operator + ) + )) ))) - scope: meta.definition.property.tsx entity.name.function.tsx + captures: + 1: meta.definition.property.tsx entity.name.function.tsx + 2: keyword.operator.optional.tsx - match: "[_$[:alpha:]][_$[:alnum:]]*" scope: meta.definition.property.tsx variable.object.property.tsx - match: \? scope: keyword.operator.optional.tsx for-loop: - - match: '(?\(]|(\([^\(\)]*\))|\<\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))([^<>\(]|(\([^\(\)]*\)))*\>)*>\s*)?\()' + - 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*)?\()' push: - - match: '(?<=\))(?!(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\s*(\?\.\s*)?(<\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))([^<>\(]|(\([^\(\)]*\))|\<\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))([^<>\(]|(\([^\(\)]*\)))*\>)*>\s*)?\()' + - 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*)?\()' pop: true - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*))' push: - meta_scope: meta.function-call.tsx - - match: '(?=\s*(\?\.\s*)?(<\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))([^<>\(]|(\([^\(\)]*\))|\<\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))([^<>\(]|(\([^\(\)]*\)))*\>)*>\s*)?\()' + - match: '(?=\s*(\?\.\s*)?(<\s*(((keyof|infer)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\<\>\,\.\[=]|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\<\>\,\.\[=]|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?!=)\>)*(?!=)>\s*)?\()' pop: true - include: literal - include: support-objects @@ -860,17 +1015,7 @@ contexts: - include: comment - match: \?\. scope: meta.function-call.tsx punctuation.accessor.optional.tsx - - match: \< - captures: - 0: punctuation.definition.typeparameters.begin.tsx - push: - - meta_scope: meta.type.parameters.tsx - - match: \> - captures: - 0: punctuation.definition.typeparameters.end.tsx - pop: true - - include: type - - include: punctuation-comma + - include: type-arguments - include: paren-expression function-declaration: - match: '(?) )) | ((async\s*)?( + ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) | # sure shot arrow functions even if => is on new line ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? [(]\s* ( - ([)]\s*:) | # (): - ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: ) ) | ( - [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends ) | # arrow function possible to detect only with => on same line ( - (<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters - \(\s*([_$[:alpha:]\{\[]([^()]|\((\s*[^()]*)?\))*)?\) # parameteres - (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type - \s*=> # arrow operator + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters + \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type + \s*=> # arrow operator ) )) )) @@ -970,8 +1124,17 @@ contexts: 2: keyword.control.import.tsx push: - meta_scope: meta.import.tsx - - match: (?=;|$|^) + - match: '(?)) - push: - - match: '(/>)|(?:())' - captures: - 0: meta.tag.tsx - 1: punctuation.definition.tag.end.tsx - 2: punctuation.definition.tag.begin.tsx - 3: entity.name.tag.tsx - 4: support.class.component.tsx - 5: punctuation.definition.tag.end.tsx - pop: true - - include: jsx-tag jsx-children: - include: jsx-tag-without-attributes - - include: jsx-child-tag + - include: jsx-tag - include: jsx-evaluated-code - include: jsx-entities jsx-entities: @@ -1195,31 +1352,32 @@ contexts: pop: true - include: jsx-entities jsx-tag: - - match: |- - (?x) - (?=(<)\s* - ([_$a-zA-Z][-$\w.]*(?)) + - match: '(?=(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?))' push: - meta_scope: meta.tag.tsx - - match: '(?=(/>)|(?:()))' + - match: '(/>)|(?:())' + captures: + 1: punctuation.definition.tag.end.tsx + 2: punctuation.definition.tag.begin.tsx + 3: entity.name.tag.namespace.tsx + 4: punctuation.separator.namespace.tsx + 5: entity.name.tag.tsx + 6: support.class.component.tsx + 7: punctuation.definition.tag.end.tsx pop: true - - match: |- - (?x) - (<)\s* - ((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?) + - match: '(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?)' captures: 1: punctuation.definition.tag.begin.tsx - 2: entity.name.tag.tsx - 3: support.class.component.tsx + 2: entity.name.tag.namespace.tsx + 3: punctuation.separator.namespace.tsx + 4: entity.name.tag.tsx + 5: support.class.component.tsx push: - - meta_content_scope: meta.tag.attributes.tsx - match: "(?=[/]?>)" pop: true - include: comment + - include: type-arguments - include: jsx-tag-attributes - - include: jsx-tag-attributes-illegal - match: (>) captures: 1: punctuation.definition.tag.end.tsx @@ -1235,65 +1393,80 @@ contexts: - match: |- (?x) \s* - ([_$a-zA-Z][-$\w]*) + (?:([_$[:alpha:]][-$[:alnum:].]*)(:))? + ([_$[:alpha:]][-$[:alnum:]]*) (?=\s|=|/?>|/\*|//) captures: - 1: entity.other.attribute-name.tsx + 1: entity.other.attribute-name.namespace.tsx + 2: punctuation.separator.namespace.tsx + 3: entity.other.attribute-name.tsx jsx-tag-attributes: - - include: jsx-tag-attribute-name - - include: jsx-tag-attribute-assignment - - include: jsx-string-double-quoted - - include: jsx-string-single-quoted - - include: jsx-evaluated-code + - match: \s+ + push: + - meta_scope: meta.tag.attributes.tsx + - match: "(?=[/]?>)" + pop: true + - include: comment + - include: jsx-tag-attribute-name + - include: jsx-tag-attribute-assignment + - include: jsx-string-double-quoted + - include: jsx-string-single-quoted + - include: jsx-evaluated-code + - include: jsx-tag-attributes-illegal jsx-tag-attributes-illegal: - match: \S+ scope: invalid.illegal.attribute.tsx jsx-tag-in-expression: - match: |- (?x) - (?<=[({\[,?=>:*]|&&|\|\||\?|\Wreturn|^return|\Wdefault|^)\s* + (?:*]|&&|\|\||\?|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^yield|[^\._$[:alnum:]]yield|^)\s* (?!<\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s+[^=>])|,)) # look ahead is not type parameter of arrow - (?=(<)\s* - ([_$a-zA-Z][-$\w.]*(?)) + (?=(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?)) push: - - match: '(/>)|(?:())' - captures: - 0: meta.tag.tsx - 1: punctuation.definition.tag.end.tsx - 2: punctuation.definition.tag.begin.tsx - 3: entity.name.tag.tsx - 4: support.class.component.tsx - 5: punctuation.definition.tag.end.tsx + - match: '(?!(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?))' pop: true - include: jsx-tag jsx-tag-without-attributes: - - match: '(<)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?)' + - match: '(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?)' captures: 1: punctuation.definition.tag.begin.tsx - 2: entity.name.tag.tsx - 3: support.class.component.tsx - 4: punctuation.definition.tag.end.tsx + 2: entity.name.tag.namespace.tsx + 3: punctuation.separator.namespace.tsx + 4: entity.name.tag.tsx + 5: support.class.component.tsx + 6: punctuation.definition.tag.end.tsx push: - meta_scope: meta.tag.without-attributes.tsx - meta_content_scope: meta.jsx.children.tsx - - match: '()' + - match: '()' captures: 1: punctuation.definition.tag.begin.tsx - 2: entity.name.tag.tsx - 3: support.class.component.tsx - 4: punctuation.definition.tag.end.tsx + 2: entity.name.tag.namespace.tsx + 3: punctuation.separator.namespace.tsx + 4: entity.name.tag.tsx + 5: support.class.component.tsx + 6: punctuation.definition.tag.end.tsx pop: true - include: jsx-children jsx-tag-without-attributes-in-expression: - - match: |- - (?x) - (?<=[({\[,?=>:*]|&&|\|\||\?|\Wreturn|^return|\Wdefault|^)\s* - (?=(<)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?)) + - match: '(?:*]|&&|\|\||\?|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^yield|[^\._$[:alnum:]]yield|^)\s*(?=(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?))' push: - - match: '(?!\s*(<)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?))' + - match: '(?!(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?))' pop: true - include: jsx-tag-without-attributes + label: + - match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(:)(?=\s*\{)' + captures: + 1: entity.name.label.tsx + 2: punctuation.separator.label.tsx + push: + - match: '(?<=\})' + pop: true + - include: decl-block + - match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(:)' + captures: + 1: entity.name.label.tsx + 2: punctuation.separator.label.tsx literal: - include: numeric-literal - include: boolean-literal @@ -1304,7 +1477,42 @@ contexts: - include: this-literal - include: super-literal method-declaration: - - match: '(?) )) | ((async\s*)?( + ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) | # sure shot arrow functions even if => is on new line ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? [(]\s* ( - ([)]\s*:) | # (): - ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: ) ) | ( - [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends ) | # arrow function possible to detect only with => on same line ( - (<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters - \(\s*([_$[:alpha:]\{\[]([^()]|\((\s*[^()]*)?\))*)?\) # parameteres - (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type - \s*=> # arrow operator + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters + \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type + \s*=> # arrow operator ) )) ))) @@ -1571,6 +1858,32 @@ contexts: - meta_scope: meta.object.member.tsx - match: '(?=,|\})' pop: true + - match: '(?<=:)\s*(async)?(?=\s*(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)\(\s*([\{\[]\s*)?$)' + captures: + 1: storage.modifier.async.tsx + push: + - match: (?<=\)) + pop: true + - include: type-parameters + - match: \( + captures: + 0: meta.brace.round.tsx + push: + - match: \) + captures: + 0: meta.brace.round.tsx + pop: true + - include: expression-inside-possibly-arrow-parens + - match: '(?<=:)\s*(async)?\s*(\()(?=\s*([\{\[]\s*)?$)' + captures: + 1: storage.modifier.async.tsx + 2: meta.brace.round.tsx + push: + - match: \) + captures: + 0: meta.brace.round.tsx + pop: true + - include: expression-inside-possibly-arrow-parens - include: expression - include: punctuation-comma parameter-array-binding-pattern: @@ -1587,16 +1900,17 @@ contexts: - include: punctuation-comma parameter-binding-element: - include: comment + - include: string - include: parameter-object-binding-pattern - include: parameter-array-binding-pattern - include: destructuring-parameter-rest - include: variable-initializer parameter-name: - - match: \s*\b(public|protected|private|readonly)(?=\s+(public|protected|private|readonly)\s+) + - match: '(?) )) | ((async\s*)?( + ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) | # sure shot arrow functions even if => is on new line ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? [(]\s* ( - ([)]\s*:) | # (): - ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: ) ) | ( - [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends ) | # arrow function possible to detect only with => on same line ( - (<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters - \(\s*([_$[:alpha:]\{\[]([^()]|\((\s*[^()]*)?\))*)?\) # parameteres - (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type - \s*=> # arrow operator + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters + \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type + \s*=> # arrow operator ) )) )) | @@ -1636,6 +1952,36 @@ contexts: ([)]\s*=>) )) )) + )) | + (:\s*((<\s*$)|([\(]\s*([\{\[]\s*)?$))) | + (:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) | + # sure shot arrow functions even if => is on new line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? + [(]\s* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) + ) | + ( + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends + ) | + # arrow function possible to detect only with => on same line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters + \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type + \s*=> # arrow operator + ) + )) ))) captures: 1: storage.modifier.tsx @@ -1643,7 +1989,7 @@ contexts: 3: entity.name.function.tsx variable.language.this.tsx 4: entity.name.function.tsx 5: keyword.operator.optional.tsx - - match: '(?x)(?:\s*\b(public|private|protected|readonly)\s+)?(\.\.\.)?\s*(?]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*))?\(\s*[\{\[]\s*$)' + captures: + 1: storage.modifier.async.tsx + push: + - match: (?<=\)) + pop: true + - include: paren-expression-possibly-arrow-with-typeparameters + - match: '(?<=[(=,]|=>)\s*(async)?(?=\s*((((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*))?\()|(<))\s*$)' + captures: + 1: storage.modifier.async.tsx + push: + - match: (?<=\)) + pop: true + - include: paren-expression-possibly-arrow-with-typeparameters + - include: possibly-arrow-return-type + paren-expression-possibly-arrow-with-typeparameters: + - include: type-parameters + - match: \( + captures: + 0: meta.brace.round.tsx + push: + - match: \) + captures: + 0: meta.brace.round.tsx + pop: true + - include: expression-inside-possibly-arrow-parens + possibly-arrow-return-type: + - match: '(?<=\))\s*(:)(?=\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+\s*=>)' + captures: + 1: meta.arrow.tsx meta.return.type.arrow.tsx keyword.operator.type.annotation.tsx + push: + - meta_content_scope: meta.arrow.tsx meta.return.type.arrow.tsx + - match: '(?==>|\{|(^\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\s+))' + pop: true + - include: arrow-return-type-body property-accessor: - match: '(?|&&|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/(?![\/*])[gimuy]*(?!\s*[a-zA-Z0-9_$]))' + - match: '(?|&&|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/[gimsuy]*(?!\s*[a-zA-Z0-9_$]))' captures: 1: punctuation.definition.string.begin.tsx push: - meta_scope: string.regexp.tsx - - match: "(/)([gimuy]*)" + - match: "(/)([gimsuy]*)" captures: 1: punctuation.definition.string.end.tsx 2: keyword.other.tsx pop: true - include: regexp - - match: '(?' + captures: + 0: keyword.other.back-reference.regexp + 1: variable.other.regexp - match: '[?+*]|\{(\d+,\d+|\d+,|,\d+|\d+)\}\??' scope: keyword.operator.quantifier.regexp - match: \| scope: keyword.operator.or.regexp - - match: (\()((\?=)|(\?!)) + - match: (\()((\?=)|(\?!)|(\?<=)|(\?))?' captures: 0: punctuation.definition.group.regexp 1: punctuation.definition.group.no-capture.regexp + 2: variable.other.regexp push: - meta_scope: meta.group.regexp - match: \) @@ -1842,6 +2238,7 @@ contexts: - include: control-statement - include: after-operator-block-as-object-literal - include: decl-block + - include: label - include: expression - include: punctuation-semicolon string: @@ -1858,12 +2255,14 @@ contexts: scope: variable.language.arguments.tsx - match: |- (?x)(?]|=[^<]|\<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<])*\>)*>\s*)?\() + |vAlign|value|valueType|vendor|vendorSub|version|visibility|vspace|whiteSpace|width|X[MS]LDocument|zIndex))\b(?!\$|\s*(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?\() captures: 1: punctuation.accessor.tsx 2: punctuation.accessor.optional.tsx @@ -2109,6 +2520,8 @@ contexts: slice|splitText|stepDown|stepUp|stopImmediatePropagation|stopPropagation| submit|substringData|supports|surroundContents|takeRecords|terminate|toBlob| toDataURL|toggle|toString|values|write|writeln + ) | + (all|catch|finally|race|reject|resolve|then ) )(?=\s*\() captures: @@ -2117,6 +2530,7 @@ contexts: 3: support.function.event-handler.tsx 4: support.function.tsx 5: support.function.dom.tsx + 6: support.function.promise.tsx switch-statement: - match: '(?\,\.\[=]|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\<\>\,\.\[=]|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?!=)\>)*(?!=)>\s*)`)' + captures: + 1: entity.name.function.tagged-template.tsx + push: + - meta_scope: string.template.tsx + - match: (?=`) + pop: true + - include: type-arguments - match: "([_$[:alpha:]][_$[:alnum:]]*)?(`)" captures: 1: entity.name.function.tagged-template.tsx @@ -2184,9 +2618,9 @@ contexts: captures: 1: keyword.operator.ternary.tsx push: - - match: (:) + - match: \s*(:) captures: - 0: keyword.operator.ternary.tsx + 1: keyword.operator.ternary.tsx pop: true - include: expression this-literal: @@ -2201,6 +2635,7 @@ contexts: - include: type-parameters - include: type-tuple - include: type-object + - include: type-conditional - include: type-operators - include: type-fn-type-parameters - include: type-paren-or-function-parameters @@ -2214,14 +2649,17 @@ contexts: 3: entity.name.type.alias.tsx push: - meta_scope: meta.type.declaration.tsx - - match: '(?=[};]|\babstract\b|\basync\b|\bclass\b|\bconst\b|\bdeclare\b|\benum\b|\bexport\b|\bfunction\b|\bimport\b|\binterface\b|\blet\b|\bmodule\b|\bnamespace\b|\btype\b|\bvar\b)' + - 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)' pop: true - include: comment - include: type-parameters - - include: type - match: (=)\s* captures: 1: keyword.operator.assignment.tsx + push: + - 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)' + pop: true + - include: type type-annotation: - match: (:)(?=\s*\S) captures: @@ -2239,9 +2677,38 @@ contexts: - match: '(?])|(?=^\s*$)|((?<=\S)(?=\s*$))|((?<=[\}>\]\)]|[_$[:alpha:]])\s*(?=\{)))' pop: true - include: type + type-arguments: + - match: \< + captures: + 0: punctuation.definition.typeparameters.begin.tsx + push: + - meta_scope: meta.type.parameters.tsx + - match: \> + captures: + 0: punctuation.definition.typeparameters.end.tsx + pop: true + - include: type + - include: punctuation-comma type-builtin-literals: - match: '(?)(?]|//|$)' + - match: '(?)(?:\?]|//|$)' pop: true - include: type-function-return-type-core - match: "=>" @@ -2287,7 +2754,7 @@ contexts: 0: storage.type.function.arrow.tsx push: - meta_scope: meta.type.function.return.tsx - - match: '(?)(?]|//|^\s*$)|((?<=\S)(?=\s*$)))' + - match: '(?)(?]|//|^\s*$)|((?<=\S)(?=\s*$)))' pop: true - include: type-function-return-type-core type-function-return-type-core: @@ -2335,21 +2802,29 @@ contexts: - include: type type-operators: - include: typeof-operator - - match: '([&|])(?=\s*\{)' + - match: '(?:([&|])|(=(?!>)))(?=\s*\{)' captures: - 0: keyword.operator.type.tsx + 1: keyword.operator.type.tsx + 2: keyword.operator.assignment.tsx push: - match: '(?<=\})' pop: true - include: type-object - - match: "[&|]" + - match: "([&|])|(=(?!>))" captures: - 0: keyword.operator.type.tsx + 1: keyword.operator.type.tsx + 2: keyword.operator.assignment.tsx push: - match: (?=\S) pop: true - match: '(?) - scope: keyword.operator.assignment.tsx - include: type - include: punctuation-comma type-paren-or-function-parameters: @@ -2377,8 +2850,37 @@ contexts: captures: 0: meta.brace.round.tsx pop: true + - include: destructuring-parameter + - match: |- + (?x)(?:(?) + )) + )) + )) | + (:\s*((<\s*$)|([\(]\s*([\{\[]\s*)?$)))) + captures: + 1: storage.modifier.tsx + 2: keyword.operator.rest.tsx + 3: entity.name.function.tsx variable.language.this.tsx + 4: entity.name.function.tsx + 5: keyword.operator.optional.tsx + - match: '(?x)(?:(?) )) | ((async\s*)?( + ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) | # sure shot arrow functions even if => is on new line ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? [(]\s* ( - ([)]\s*:) | # (): - ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: ) ) | ( - [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends ) | # arrow function possible to detect only with => on same line ( - (<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters - \(\s*([_$[:alpha:]\{\[]([^()]|\((\s*[^()]*)?\))*)?\) # parameteres - (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type - \s*=> # arrow operator + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters + \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type + \s*=> # arrow operator ) )) )) | @@ -2469,6 +2996,126 @@ contexts: ([)]\s*=>) )) )) + )) | + (:\s*((<\s*$)|([\(]\s*([\{\[]\s*)?$))) | + (:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) | + # sure shot arrow functions even if => is on new line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? + [(]\s* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) + ) | + ( + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends + ) | + # arrow function possible to detect only with => on same line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters + \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type + \s*=> # arrow operator + ) + )) + ))) + captures: + 1: meta.definition.variable.tsx variable.other.constant.tsx entity.name.function.tsx + push: + - meta_scope: meta.var-single-variable.expr.tsx + - match: '(?=$|^|[;,=}]|(\s+(of|in)\s+))' + pop: true + - include: var-single-variable-type-annotation + - match: "([_$[:alpha:]][_$[:alnum:]]*)" + captures: + 1: meta.definition.variable.tsx variable.other.constant.tsx + push: + - meta_scope: meta.var-single-variable.expr.tsx + - match: '(?=$|^|[;,=}]|(\s+(of|in)\s+))' + pop: true + - include: var-single-variable-type-annotation + var-single-variable: + - match: |- + (?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\s* + # function assignment | + (=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) | + # sure shot arrow functions even if => is on new line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? + [(]\s* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) + ) | + ( + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends + ) | + # arrow function possible to detect only with => on same line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters + \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type + \s*=> # arrow operator + ) + )) + )) | + # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) => + (:\s*( + (<) | + ([(]\s*( + ([)]) | + (\.\.\.) | + ([_$[:alnum:]]+\s*( + ([:,?=])| + ([)]\s*=>) + )) + )) + )) | + (:\s*((<\s*$)|([\(]\s*([\{\[]\s*)?$))) | + (:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) | + # sure shot arrow functions even if => is on new line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? + [(]\s* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) + ) | + ( + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends + ) | + # arrow function possible to detect only with => on same line + ( + (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters + \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters + (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type + \s*=> # arrow operator + ) + )) ))) captures: 1: meta.definition.variable.tsx entity.name.function.tsx diff --git a/sublime_syntaxes/VimL.sublime-syntax b/sublime/syntaxes/VimL.sublime-syntax similarity index 100% rename from sublime_syntaxes/VimL.sublime-syntax rename to sublime/syntaxes/VimL.sublime-syntax diff --git a/sublime/syntaxes/awk-sublime b/sublime/syntaxes/awk-sublime new file mode 160000 index 00000000..1ce5f90d --- /dev/null +++ b/sublime/syntaxes/awk-sublime @@ -0,0 +1 @@ +Subproject commit 1ce5f90d444d80b12af41bc051507e914730d4ef diff --git a/sublime/syntaxes/elixir-sublime-syntax b/sublime/syntaxes/elixir-sublime-syntax new file mode 160000 index 00000000..d223f676 --- /dev/null +++ b/sublime/syntaxes/elixir-sublime-syntax @@ -0,0 +1 @@ +Subproject commit d223f67612fcc3ee2edd3336ffc285a9ee673406 diff --git a/sublime_syntaxes/lrc.sublime-syntax b/sublime/syntaxes/lrc.sublime-syntax similarity index 100% rename from sublime_syntaxes/lrc.sublime-syntax rename to sublime/syntaxes/lrc.sublime-syntax diff --git a/sublime/syntaxes/newlines.packdump b/sublime/syntaxes/newlines.packdump new file mode 100644 index 00000000..a0bf32f6 Binary files /dev/null and b/sublime/syntaxes/newlines.packdump differ diff --git a/sublime_syntaxes/srt.sublime-syntax b/sublime/syntaxes/srt.sublime-syntax similarity index 100% rename from sublime_syntaxes/srt.sublime-syntax rename to sublime/syntaxes/srt.sublime-syntax diff --git a/sublime/syntaxes/sublime-fish b/sublime/syntaxes/sublime-fish new file mode 160000 index 00000000..2c254cc8 --- /dev/null +++ b/sublime/syntaxes/sublime-fish @@ -0,0 +1 @@ +Subproject commit 2c254cc8512d53b7af306e4379fc9744ee5b4aee diff --git a/sublime/syntaxes/sublime-jinja2 b/sublime/syntaxes/sublime-jinja2 new file mode 160000 index 00000000..45355633 --- /dev/null +++ b/sublime/syntaxes/sublime-jinja2 @@ -0,0 +1 @@ +Subproject commit 45355633d17ee562481ca1d2ad0e3502c238f58a diff --git a/sublime/syntaxes/sublime-purescript-syntax b/sublime/syntaxes/sublime-purescript-syntax new file mode 160000 index 00000000..5acebc18 --- /dev/null +++ b/sublime/syntaxes/sublime-purescript-syntax @@ -0,0 +1 @@ +Subproject commit 5acebc18503697be09df047591964e68e80fcf8e diff --git a/sublime/syntaxes/sublime_toml_highlighting b/sublime/syntaxes/sublime_toml_highlighting new file mode 160000 index 00000000..0f14b7ca --- /dev/null +++ b/sublime/syntaxes/sublime_toml_highlighting @@ -0,0 +1 @@ +Subproject commit 0f14b7caf3c775a5d18551a9563a9debdb10c9a9 diff --git a/sublime/syntaxes/sublimetext-fsharp b/sublime/syntaxes/sublimetext-fsharp new file mode 160000 index 00000000..c18616d6 --- /dev/null +++ b/sublime/syntaxes/sublimetext-fsharp @@ -0,0 +1 @@ +Subproject commit c18616d6bd55b188672276da837837070170d967 diff --git a/sublime/syntaxes/vue-syntax-highlight b/sublime/syntaxes/vue-syntax-highlight new file mode 160000 index 00000000..6d405948 --- /dev/null +++ b/sublime/syntaxes/vue-syntax-highlight @@ -0,0 +1 @@ +Subproject commit 6d405948df4a112eb7a4db2ed72bbfe76dd9f419 diff --git a/sublime_themes/1337.tmTheme b/sublime/themes/1337.tmTheme similarity index 100% rename from sublime_themes/1337.tmTheme rename to sublime/themes/1337.tmTheme diff --git a/sublime_themes/Tomorrow.tmTheme b/sublime/themes/Tomorrow.tmTheme similarity index 100% rename from sublime_themes/Tomorrow.tmTheme rename to sublime/themes/Tomorrow.tmTheme diff --git a/sublime_themes/agola-dark.tmTheme b/sublime/themes/agola-dark.tmTheme similarity index 100% rename from sublime_themes/agola-dark.tmTheme rename to sublime/themes/agola-dark.tmTheme diff --git a/sublime/themes/all.themedump b/sublime/themes/all.themedump new file mode 100644 index 00000000..a79c10bd Binary files /dev/null and b/sublime/themes/all.themedump differ diff --git a/sublime_themes/ascetic-white.tmTheme b/sublime/themes/ascetic-white.tmTheme similarity index 100% rename from sublime_themes/ascetic-white.tmTheme rename to sublime/themes/ascetic-white.tmTheme diff --git a/sublime_themes/axar.tmTheme b/sublime/themes/axar.tmTheme similarity index 100% rename from sublime_themes/axar.tmTheme rename to sublime/themes/axar.tmTheme diff --git a/sublime_themes/ayu-dark.tmTheme b/sublime/themes/ayu-dark.tmTheme similarity index 100% rename from sublime_themes/ayu-dark.tmTheme rename to sublime/themes/ayu-dark.tmTheme diff --git a/sublime_themes/ayu-light.tmTheme b/sublime/themes/ayu-light.tmTheme similarity index 100% rename from sublime_themes/ayu-light.tmTheme rename to sublime/themes/ayu-light.tmTheme diff --git a/sublime_themes/ayu-mirage.tmTheme b/sublime/themes/ayu-mirage.tmTheme similarity index 100% rename from sublime_themes/ayu-mirage.tmTheme rename to sublime/themes/ayu-mirage.tmTheme diff --git a/sublime_themes/base16-ocean-dark.tmTheme b/sublime/themes/base16-ocean-dark.tmTheme similarity index 100% rename from sublime_themes/base16-ocean-dark.tmTheme rename to sublime/themes/base16-ocean-dark.tmTheme diff --git a/sublime_themes/base16-ocean-light.tmTheme b/sublime/themes/base16-ocean-light.tmTheme similarity index 100% rename from sublime_themes/base16-ocean-light.tmTheme rename to sublime/themes/base16-ocean-light.tmTheme diff --git a/sublime_themes/bbedit.tmTheme b/sublime/themes/bbedit.tmTheme similarity index 100% rename from sublime_themes/bbedit.tmTheme rename to sublime/themes/bbedit.tmTheme diff --git a/sublime_themes/boron.tmTheme b/sublime/themes/boron.tmTheme similarity index 100% rename from sublime_themes/boron.tmTheme rename to sublime/themes/boron.tmTheme diff --git a/sublime_themes/charcoal.tmTheme b/sublime/themes/charcoal.tmTheme similarity index 100% rename from sublime_themes/charcoal.tmTheme rename to sublime/themes/charcoal.tmTheme diff --git a/sublime_themes/cheerfully-light.tmTheme b/sublime/themes/cheerfully-light.tmTheme similarity index 100% rename from sublime_themes/cheerfully-light.tmTheme rename to sublime/themes/cheerfully-light.tmTheme diff --git a/sublime_themes/classic-modified.tmTheme b/sublime/themes/classic-modified.tmTheme similarity index 100% rename from sublime_themes/classic-modified.tmTheme rename to sublime/themes/classic-modified.tmTheme diff --git a/sublime_themes/demain.tmTheme b/sublime/themes/demain.tmTheme similarity index 100% rename from sublime_themes/demain.tmTheme rename to sublime/themes/demain.tmTheme diff --git a/sublime_themes/dimmed-fluid.tmTheme b/sublime/themes/dimmed-fluid.tmTheme similarity index 100% rename from sublime_themes/dimmed-fluid.tmTheme rename to sublime/themes/dimmed-fluid.tmTheme diff --git a/sublime_themes/dracula.tmTheme b/sublime/themes/dracula.tmTheme old mode 100755 new mode 100644 similarity index 100% rename from sublime_themes/dracula.tmTheme rename to sublime/themes/dracula.tmTheme diff --git a/sublime_themes/gray-matter-dark.tmTheme b/sublime/themes/gray-matter-dark.tmTheme similarity index 100% rename from sublime_themes/gray-matter-dark.tmTheme rename to sublime/themes/gray-matter-dark.tmTheme diff --git a/sublime_themes/gruvbox-dark.tmTheme b/sublime/themes/gruvbox-dark.tmTheme similarity index 100% rename from sublime_themes/gruvbox-dark.tmTheme rename to sublime/themes/gruvbox-dark.tmTheme diff --git a/sublime_themes/gruvbox-light.tmTheme b/sublime/themes/gruvbox-light.tmTheme similarity index 100% rename from sublime_themes/gruvbox-light.tmTheme rename to sublime/themes/gruvbox-light.tmTheme diff --git a/sublime_themes/idle.tmTheme b/sublime/themes/idle.tmTheme similarity index 100% rename from sublime_themes/idle.tmTheme rename to sublime/themes/idle.tmTheme diff --git a/sublime_themes/inspired-github.tmTheme b/sublime/themes/inspired-github.tmTheme similarity index 100% rename from sublime_themes/inspired-github.tmTheme rename to sublime/themes/inspired-github.tmTheme diff --git a/sublime_themes/ir-white.tmTheme b/sublime/themes/ir-white.tmTheme similarity index 100% rename from sublime_themes/ir-white.tmTheme rename to sublime/themes/ir-white.tmTheme diff --git a/sublime_themes/kronuz.tmTheme b/sublime/themes/kronuz.tmTheme similarity index 100% rename from sublime_themes/kronuz.tmTheme rename to sublime/themes/kronuz.tmTheme diff --git a/sublime_themes/material-dark.tmTheme b/sublime/themes/material-dark.tmTheme similarity index 100% rename from sublime_themes/material-dark.tmTheme rename to sublime/themes/material-dark.tmTheme diff --git a/sublime_themes/material-light.tmTheme b/sublime/themes/material-light.tmTheme similarity index 100% rename from sublime_themes/material-light.tmTheme rename to sublime/themes/material-light.tmTheme diff --git a/sublime_themes/monokai.tmTheme b/sublime/themes/monokai.tmTheme similarity index 100% rename from sublime_themes/monokai.tmTheme rename to sublime/themes/monokai.tmTheme diff --git a/sublime/themes/nord.tmTheme b/sublime/themes/nord.tmTheme new file mode 100644 index 00000000..7893c955 --- /dev/null +++ b/sublime/themes/nord.tmTheme @@ -0,0 +1,1873 @@ + + + + + + + name + Nord + comment + A arctic, north-bluish clean and elegant Visual Studio Code theme. + author + Arctic Ice Studio + semanticClass + nord + colorSpaceName + sRGB + settings + + + + settings + + background + #2e3440 + foreground + #d8dee9 + caret + #d8dee9 + invisibles + #4c566a + lineHighlight + #434c5e52 + + misspelling + #bf616a + minimapBorder + #434c5e52 + accent + #88C0D0 + + gutter + #2e3440 + gutterForeground + #d8dee966 + + selection + #434c5ecc + selectionBorder + #434c5ecc + inactiveSelection + #434c5e99 + + highlight + #88c0d0 + findHighlight + #88c0d0 + findHighlightForeground + #2e3440 + + guide + #434c5eb3 + activeGuide + #88c0d0cc + stackGuide + #88c0d066 + + bracketsOptions + underline + bracketsForeground + #88c0d0 + bracketsContentsOptions + underline + bracketsContentsForeground + #88c0d0 + + tagsOptions + underline + tagsForeground + #88c0d0 + + shadow + #2e3440 + shadowWidth + 8 + + + + + name + [Comment] Comment + scope + + comment, + punctuation.definition.comment + + settings + + foreground + #616e88 + + + + + name + [Constants] Numeric + scope + constant.numeric + settings + + foreground + #b48ead + + + + name + [Constants] BuiltIn + scope + constant.language + settings + + foreground + #81a1c1 + + + + name + [Constants] Escape + scope + constant.character.escape + settings + + foreground + #ebcb8b + + + + name + [Constants] Placeholder + scope + constant.other.placeholder + settings + + foreground + #ebcb8b + + + + name + [Constants] Other + scope + constant.other + settings + + foreground + #d8dee9 + + + + + name + [Entity] Class + scope + entity.name.class + settings + + foreground + #8fbcbb + + + + name + [Entity] Struct + scope + entity.name.struct + settings + + foreground + #8fbcbb + + + + name + [Entity] Enum + scope + entity.name.enum + settings + + foreground + #8fbcbb + + + + name + [Entity] Unions + scope + entity.name.union + settings + + foreground + #8fbcbb + + + + name + [Entity] Traits + scope + entity.name.trait + settings + + foreground + #8fbcbb + + + + name + [Entity] Interface + scope + entity.name.interface + settings + + foreground + #8fbcbb + fontStyle + bold + + + + name + [Entity] Type + scope + entity.name.type + settings + + foreground + #81a1c1 + + + + name + [Entity] Inherited Class/Interface/Trait + scope + entity.other.inherited-class + settings + + foreground + #8fbcbb + + + + name + [Entity] Function + scope + entity.name.function + settings + + foreground + #88c0d0 + + + + name + [Entity] Constructor + scope + entity.name.function.constructor + settings + + foreground + #88c0d0 + + + + name + [Entity] Destructor + scope + entity.name.function.destructor + settings + + foreground + #88c0d0 + + + + name + [Entity] Namespace + scope + entity.name.namespace + settings + + foreground + #8fbcbb + + + + name + [Entity] Constant + scope + entity.name.constant + settings + + foreground + #81a1c1 + + + + name + [Entity] Label/Goto + scope + entity.name.label + settings + + foreground + #5e81ac + + + + name + [Entity] Section + scope + entity.name.section + settings + + foreground + #88c0d0 + + + + name + [Entity] Tag + scope + entity.name.tag + settings + + foreground + #81a1c1 + + + + name + [Entity] Attribute Name + scope + entity.other.attribute-name + settings + + foreground + #8fbcbb + + + + + name + [Invalid] Illegal + scope + invalid.illegal + settings + + background + #bf616a + foreground + #d8dee9 + + + + name + [Invalid] Deprecated + scope + invalid.deprecated + settings + + background + #ebcb8b + foreground + #d8dee9 + + + + + name + [Keyword] Control + scope + keyword.control + settings + + foreground + #81a1c1 + + + + name + [Keyword] Control Conditional + scope + keyword.control.conditional + settings + + foreground + #81a1c1 + + + + name + [Keyword] Control Import + scope + keyword.control.import + settings + + foreground + #81a1c1 + + + + name + [Keyword] Punctuation Definition + scope + punctuation.definition.keyword + settings + + foreground + #81a1c1 + + + + name + [Keyword] Other + scope + keyword.other + settings + + foreground + #81a1c1 + + + + name + [Keyword] Operator + scope + + keyword.operator, + keyword.operator.assignment, + keyword.operator.arithmetic, + keyword.operator.bitwise, + keyword.operator.logical, + keyword.operator.word + + settings + + foreground + #81a1c1 + + + + + name + [Markup] Heading + scope + markup.heading + settings + + foreground + #88c0d0 + + + + name + [Markup] List + scope + + markup.list.unnumbered, + markup.list.numbered + + settings + + foreground + #d8dee9 + + + + name + [Markup] Bold + scope + markup.bold + settings + + fontStyle + bold + + + + name + [Markup] Italic + scope + markup.italic + settings + + fontStyle + italic + + + + name + [Markup] Inserted + scope + markup.inserted + settings + + foreground + #a3be8c + + + + name + [Markup] Deleted + scope + markup.deleted + settings + + foreground + #bf616a + + + + name + [Markup] Changed + scope + markup.changed + settings + + foreground + #ebcb8b + + + + name + [Markup] Quote + scope + markup.quote + settings + + foreground + #616e88 + + + + name + [Markup] Raw + scope + + markup.raw.inline, + markup.raw.block + + settings + + foreground + #8fbcbb + + + + name + [Markup] Other + scope + markup.other + settings + + background + #eceff4 + + + + + name + [Punctuation] Separator/Terminator + scope + + punctuation.separator, + punctuation.terminator + + settings + + foreground + #eceff4 + + + + name + [Punctuation] Separator Continuation/Accessor + scope + + punctuation.separator.continuation, + punctuation.accessor + + settings + + foreground + #81a1c1 + + + + name + [Punctuation] Definition Tag + scope + punctuation.definition.tag + settings + + foreground + #81a1c1 + + + + + name + [Storage] Type + scope + + storage.type, + storage.modifier + + settings + + foreground + #81a1c1 + + + + + name + [String] Quoted/Unquoted + scope + + string.quoted.single, + string.quoted.double, + string.quoted.triple, + string.quoted.other, + string.unquoted + + settings + + foreground + #a3be8c + + + + name + [String] Punctuation Definition + scope + + punctuation.definition.string.begin, + punctuation.definition.string.end + + settings + + foreground + #a3be8c + + + + name + [String] RegExp + scope + string.regexp + settings + + foreground + #ebcb8b + + + + + name + [Support] Constant + scope + support.constant + settings + + foreground + #8fbcbb + + + + name + [Support] Function + scope + support.function + settings + + foreground + #88c0d0 + + + + name + [Support] Module + scope + support.module + settings + + foreground + #8fbcbb + + + + name + [Support] Type + scope + support.type + settings + + foreground + #8fbcbb + + + + name + [Support] Class + scope + support.class + settings + + foreground + #8fbcbb + + + + + name + [Text] HTML/XML + scope + + text.html.basic, + text.xml + + settings + + foreground + #eceff4 + + + + + name + [Variable] Other/ReadWrite + scope + + variable.other, + variable.other.readwrite + + settings + + foreground + #d8dee9 + + + + name + [Variable] Punctuation Definition + scope + punctuation.definition.variable + settings + + foreground + #81a1c1 + + + + name + [Variable] Constant + scope + variable.other.constant + settings + + foreground + #81a1c1 + + + + name + [Variable] Language + scope + variable.language + settings + + foreground + #81a1c1 + + + + name + [Variable] Parameter + scope + variable.parameter + settings + + foreground + #d8dee9 + + + + name + [Variable] Other Member + scope + variable.other.member + settings + + foreground + #d8dee9 + + + + name + [Variable] Function + scope + variable.function + settings + + foreground + #88c0d0 + + + + + + name + [Find Results] Gutter Number + scope + constant.numeric.line-number.find-in-files + settings + + foreground + #d8dee966 + + + + name + [Find Results] Gutter Number Match + scope + constant.numeric.line-number.match.find-in-files + settings + + foreground + #88c0d0 + + + + name + [Find Results] Filename + scope + entity.name.filename.find-in-files + settings + + foreground + #8fbcbb + + + + name + [Find Results] Text + scope + text.find-in-files + settings + + foreground + #d8dee9 + + + + + + name + [C/C++] Preprocessor/Include + scope + + source.c keyword.control.import.include.c, + source.c meta.preprocessor.c keyword.control.import.c, + source.c++ keyword.control.import.include.c++, + source.c++ meta.preprocessor.c++ keyword.control.import.c++ + + settings + + foreground + #5e81ac + + + + name + [C/C++] BuiltIn Function + scope + + source.c keyword.operator.word.c, + source.c++ keyword.operator.word.c++ + + settings + + foreground + #88c0d0 + fontStyle + italic + + + + + name + [CSS/Sass] Property Name + scope + + source.css support.type.property-name.css, + source.sass support.type.property-name.sass, + source.css support.type.vendor-prefix.css + + settings + + foreground + #d8dee9 + + + + name + [CSS/Sass] RGB Value + scope + + source.css constant.other.color.rgb-value.css, + source.sass constant.other.rgb-value.sass + + settings + + foreground + #b48ead + + + + name + [CSS] Property Value + scope + + source.css support.constant.color.w3c-special-color-keyword.css, + source.css support.constant.property-value.css, + source.sass support.constant.property-value.sass + + settings + + foreground + #81a1c1 + + + + name + [CSS] Pseudo Class + scope + source.css entity.other.pseudo-class.css + settings + + foreground + #8fbcbb + + + + name + [CSS/Sass] At-Rule + scope + + source.css keyword.control.at-rule.media.css, + source.css punctuation.definition.keyword.css, + source.sass keyword.control.at-rule.sass + + settings + + foreground + #d08770 + + + + name + [CSS] Color Names + scope + source.css support.constant.color.w3c-standard-color-name.css + settings + + foreground + #81a1c1 + fontStyle + italic + + + + name + [CSS/Sass] ID + scope + + source.css entity.other.attribute-name.id.css, + source.sass entity.other.attribute-name.id.sass + + settings + + fontStyle + bold + + + + + name + [diff] Meta Range Context + scope + source.diff meta.diff.range.context + settings + + foreground + #8fbcbb + + + + name + [diff] Meta Header From-File + scope + source.diff meta.diff.header.from-file + settings + + foreground + #8fbcbb + + + + name + [diff] Punctuation Definition From-File + scope + source.diff punctuation.definition.from-file + settings + + foreground + #8FBCBB + + + + name + [diff] Punctuation Definition Separator + scope + source.diff punctuation.definition.separator + settings + + foreground + #81a1c1 + + + + + name + [Go] BuiltIn Function + scope + source.go support.function.builtin.go + settings + + fontStyle + italic + + + + + name + [HTML] Entity + scope + text.html.basic constant.character.entity.html + settings + + foreground + #ebcb8b + + + + + name + [Java] Annotation + scope + + variable.annotation.java, + punctuation.definition.annotation.java + + settings + + foreground + #d08770 + + + + name + [Java] Punctuation + scope + punctuation.accessor.dot.java + settings + + foreground + #eceff4 + + + + name + [Java] Package + scope + support.other.package.java + settings + + foreground + #8fbcbb + + + + name + [Java] JavaDoc Comment Block Documentation HTML Entities + scope + source.java comment.block.documentation.javadoc punctuation.definition.entity.html + settings + + foreground + #81a1c1 + + + + name + [Java] Constant + scope + source.java entity.name.constant + settings + + foreground + #d8dee9 + + + + name + [Java] JavaDoc Tags + scope + + source.java keyword.other.documentation, + source.java comment.block.documentation.javadoc punctuation.definition.keyword.javadoc + + settings + + foreground + #8fbcbb + + + + name + [Java] Generic + scope + source.java variable.parameter.type.java + settings + + foreground + #8fbcbb + + + + name + [Java] Interface + scope + source.java entity.other.inherited-class.java + settings + + foreground + #8fbcbb + fontStyle + bold + + + + name + [Java] Implements Keyword + scope + source.java keyword.declaration.implements.java + settings + + foreground + #81a1c1 + + + + + name + [JSON] Key + scope + + source.json meta.structure.dictionary.json meta.structure.dictionary.key.json string.quoted.double.json, + source.json.sublime meta.structure.dictionary.json meta.structure.dictionary.key.json string.quoted.double.json + + settings + + foreground + #8fbcbb + + + + name + [JSON] Quote Punctuation + scope + + source.json meta.structure.dictionary.json punctuation.definition.string.begin.json, + source.json meta.structure.dictionary.json punctuation.definition.string.end.json, + source.json.sublime meta.structure.dictionary.json punctuation.definition.string.begin.json, + source.json.sublime meta.structure.dictionary.json punctuation.definition.string.end.json + + settings + + foreground + #eceff4 + + + + + name + [Markdown] Fenced Code Block + scope + + text.html.markdown punctuation.definition.raw.code-fence.begin.markdown, + text.html.markdown punctuation.definition.raw.code-fence.end.markdown, + text.html.markdown markup.raw.code-fence.markdown constant.other.language-name.markdown + + settings + + foreground + #8fbcbb + + + + name + [Markdown] List Bullet + scope + + text.html.markdown punctuation.definition.list_item.markdown, + text.html.markdown markup.list.numbered.bullet.markdown + + settings + + foreground + #81a1c1 + + + + name + [Markdown] Quote Punctuation + scope + text.html.markdown markup.quote.markdown punctuation.definition.blockquote.markdown + settings + + foreground + #8FBCBB + + + + name + [Markdown] Link Description + scope + + text.html.markdown meta.link.inline.description.markdown, + text.html.markdown meta.image.inline.description.markdown, + text.html.markdown meta.link.reference.description.markdown, + text.html.markdown constant.other.reference.link.markdown, + text.html.markdown entity.name.reference.link.markdown + + settings + + foreground + #88C0D0 + + + + name + [Markdown] Link Punctuation + scope + + text.html.markdown punctuation.definition.link.begin.markdown, + text.html.markdown punctuation.definition.link.end.markdown, + text.html.markdown punctuation.definition.image.begin.markdown, + text.html.markdown punctuation.definition.image.end.markdown, + text.html.markdown punctuation.definition.constant.begin.markdown, + text.html.markdown punctuation.definition.constant.end.markdown + + settings + + foreground + #81a1c1 + + + + name + [Markdown] Table Punctuation + scope + + text.html.markdown punctuation.separator.table-cell.markdown, + text.html.markdown punctuation.section.table-header.markdown + + settings + + foreground + #81a1c1 + + + + name + [Markdown] Table Header + scope + text.html.markdown meta.table.header.markdown + settings + + foreground + #88c0d0 + + + + name + [Markdown] Horizontal Line + scope + text.html.markdown punctuation.definition.thematic-break.markdown + settings + + foreground + #81a1c1 + fontStyle + bold + + + + + name + [PHP] Embedded Tag + scope + + embedding.php text.html.basic punctuation.section.embedded.begin.php, + embedding.php text.html.basic punctuation.section.embedded.end.php + + settings + + foreground + #5e81ac + + + + name + [PHP] PHPDoc Tag + scope + embedding.php text.html.basic comment.block.documentation.phpdoc.php keyword.other.phpdoc.php + settings + + foreground + #8fbcbb + + + + name + [PHP] Namespace + scope + embedding.php text.html.basic support.other.namespace.php + settings + + foreground + #8fbcbb + + + + + name + [Python] Decorator + scope + + source.python meta.annotation.python meta.qualified-name.python support.function.builtin.python, + source.python punctuation.definition.annotation.python + + settings + + foreground + #d08770 + + + + name + [Python] BuiltIn Function + scope + support.function.builtin.python + settings + + fontStyle + italic + + + + name + [Python] Exception + scope + source.python support.type.exception.python + settings + + foreground + #8fbcbb + + + + name + [Python] Type + scope + source.python support.type.python + settings + + foreground + #81a1c1 + + + + + name + [Sass] Variable + scope + source.sass variable.parameter.sass + settings + + foreground + #d8dee9 + fontStyle + bold + + + + + name + [Ruby] BuiltIn Function + scope + source.ruby support.function.builtin.ruby + settings + + fontStyle + italic + + + + + name + [Shell] BuiltIn Function + scope + source.shell support.function.builtin.shell + settings + + fontStyle + italic + + + + + name + [XML] Namespace + scope + text.xml entity.name.tag.namespace + settings + + foreground + #8fbcbb + + + + name + [XML] Doctype/Preprocessor + scope + + text.xml meta.tag.sgml.doctype.xml, + text.xml meta.tag.preprocessor entity.name.tag, + text.xml meta.tag.preprocessor.xml punctuation.definition.tag.begin.xml, + text.xml meta.tag.preprocessor.xml punctuation.definition.tag.end.xml, + text.xml meta.tag.sgml.doctype.xml punctuation.definition.tag.begin.xml, + text.xml meta.tag.sgml.doctype.xml punctuation.definition.tag.end.xml + + settings + + foreground + #5e81ac + + + + name + [XML] CDATA Tag + scope + + text.xml string.unquoted.cdata.xml punctuation.definition.string.begin.xml, + text.xml string.unquoted.cdata.xml punctuation.definition.string.end.xml + + settings + + foreground + #D08770 + fontStyle + italic + + + + + name + [YAML] Entity Name Tag + scope + source.yaml entity.name.tag + settings + + foreground + #8fbcbb + + + + + + + name + [SublimeLinter] Warning + scope + sublimelinter.mark.warning + settings + + foreground + #ebcb8b + + + + name + [SublimeLinter] Error + scope + sublimelinter.mark.error + settings + + foreground + #bf616a + + + + name + [SublimeLinter] Gutter Mark + scope + sublimelinter.gutter-mark + settings + + foreground + lime + + + + + name + [GitGutter] Ignored + scope + markup.ignored.git_gutter + settings + + foreground + #616e88 + + + + name + [GitGutter] Untracked + scope + markup.untracked.git_gutter + settings + + foreground + #88c0d0 + + + + name + [GitGutter] Inserted + scope + markup.inserted.git_gutter + settings + + foreground + #a3be8c + + + + name + [GitGutter] Changed + scope + markup.changed.git_gutter + settings + + foreground + #ebcb8b + + + + name + [GitGutter] Deleted + scope + markup.deleted.git_gutter + settings + + foreground + #bf616a + + + + + + name + [Babel] Decorator + scope + + source.js tag.decorator.js entity.name.tag.js, + source.js tag.decorator.js punctuation.definition.tag.js + + settings + + foreground + #d08770 + + + + name + [Babel] String (Interpolated/Template Expression) + scope + + source.js string.quoted.js, + source.js string.quoted.jsx, + source.js meta.class.js meta.class.property.js string.interpolated.js, + source.js string.interpolated.js, + source.js string.template.js + + settings + + foreground + #a3be8c + + + + name + [Babel] Constant + scope + source.js variable.other.constant.js + settings + + foreground + #d8dee9 + fontStyle + bold + + + + name + [Babel] Object Key/Variable + scope + + source.js constant.other.object.key.js string.unquoted.label.js, + source.js variable.other.readwrite.js + + settings + + foreground + #d8dee9 + + + + name + [Babel] Arrow Function + scope + source.js meta.class.js meta.class.property.js variable.other.property.js + settings + + foreground + #88c0d0 + + + + name + [Babel] Static Variable + scope + source.js variable.other.property.static.js + settings + + fontStyle + italic + + + + name + [Babel] Class + scope + source.js variable.other.class.js + settings + + foreground + #8fbcbb + + + + name + [Babel] String Interpolated/Template Expression Keyword + scope + + source.js string.interpolated.js keyword.other.substitution.begin.js, + source.js string.interpolated.js keyword.other.substitution.end.js, + source.js punctuation.definition.template-expression.begin.js, + source.js punctuation.definition.template-expression.end.js + + settings + + foreground + #5e81ac + + + + name + [Babel] Spread Operator + scope + source.js keyword.operator.spread.js + settings + + foreground + #81a1c1 + + + + name + [Babel] Export + scope + source.js meta.export.js variable.other.readwrite.js + settings + + foreground + #8fbcbb + + + + + name + [TypeScript] Inherited Class + scope + source.ts meta.class.ts entity.other.inherited-class.ts + settings + + foreground + #8fbcbb + fontStyle + bold + + + + name + [TypeScript] Class/Enum + scope + + source.ts entity.name.type.class.ts, + source.ts entity.name.type.enum.ts + + settings + + foreground + #8fbcbb + + + + name + [TypeScript] Type + scope + source.ts entity.name.type.ts + settings + + foreground + #8fbcbb + + + + name + [TypeScript] Primitive + scope + source.ts support.type.primitive.ts + settings + + foreground + #81a1c1 + + + + name + [TypeScript] Decorator + scope + + source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.decorator.ts variable.other.readwrite.ts, + source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.decorator.ts punctuation.decorator.ts + + settings + + foreground + #d08770 + + + + name + [TypeScript] Interpolated String Keyword + scope + + source.ts punctuation.definition.template-expression.begin.ts, + source.ts punctuation.definition.template-expression.end.ts + + settings + + foreground + #5e81ac + + + + name + [TypeScript] Interpolated String + scope + source.ts string.template.ts + settings + + foreground + #a3be8c + + + + name + [TypeScript] Static Support Function + scope + source.ts support.function.math.ts + settings + + fontStyle + italic + + + + name + [TypeScript] Constant + scope + + source.ts variable.other.constant.property.ts, + source.ts variable.other.enummember.ts, + source.ts variable.other.constant.ts + + settings + + foreground + #d8dee9 + fontStyle + bold + + + + name + [TypeScript] JSDoc Tag + scope + source.ts comment.block.documentation.ts storage.type.class.jsdoc + settings + + foreground + #8fbcbb + + + + uuid + 8F96BB94-BF86-4D5E-9733-0428E66FB894 + + diff --git a/sublime_themes/nyx-bold.tmTheme b/sublime/themes/nyx-bold.tmTheme similarity index 100% rename from sublime_themes/nyx-bold.tmTheme rename to sublime/themes/nyx-bold.tmTheme diff --git a/sublime_themes/one-dark.tmTheme b/sublime/themes/one-dark.tmTheme similarity index 100% rename from sublime_themes/one-dark.tmTheme rename to sublime/themes/one-dark.tmTheme diff --git a/sublime_themes/solarized-dark.tmTheme b/sublime/themes/solarized-dark.tmTheme similarity index 82% rename from sublime_themes/solarized-dark.tmTheme rename to sublime/themes/solarized-dark.tmTheme index b39a1395..f46fa226 100644 --- a/sublime_themes/solarized-dark.tmTheme +++ b/sublime/themes/solarized-dark.tmTheme @@ -22,16 +22,13 @@ invisibles #586e75 lineHighlight - #073642 + #1CD1FF12 + misspelling + #dc322f selection #2c4c55 selectionBorder #586e75 - - - - - @@ -102,6 +99,28 @@ #268bd2 + + name + Variable Function + scope + variable.function + settings + + foreground + #b58900 + + + + name + Variable Language + scope + variable.language + settings + + foreground + #d33682 + + name Keyword @@ -146,11 +165,44 @@ #859900 + + name + Storage modifier + scope + storage.modifier + settings + + foreground + #93a1a1 + + name Class scope - keyword.control.class, meta.class, entity.name.class, entity.name.type.class + keyword.control.class, entity.name, entity.name.class, entity.name.type.class + settings + + foreground + #b58900 + + + + name + Inherited Class + scope + entity.other.inherited-class + settings + + foreground + #268bd2 + + + + name + Attribute + scope + entity.other.attribute-name settings foreground @@ -161,7 +213,7 @@ name Library class scope - support.type, support.class + support, support.type, support.class settings foreground @@ -194,13 +246,24 @@ name Built-in constant scope - constant.language, meta.preprocessor + constant, constant.language, meta.preprocessor settings foreground #b58900 + + Name + Section heading + scope + entity.name.section + settings + + foreground + #cb4b16 + + name Support.construct @@ -324,9 +387,9 @@ name - Quoted Single + Quotes scope - punctuation.definition.string.begin, punctuation.definition.string.end + punctuation.definition.string settings foreground @@ -337,7 +400,7 @@ name [] scope - meta.brace.square + meta.brace.square, punctuation.section.brackets settings foreground @@ -346,20 +409,9 @@ name - () + (),{} scope - meta.brace.round, punctuation.definition.parameters.begin, punctuation.definition.parameters.end - settings - - foreground - #657b83 - - - - name - {} - scope - meta.brace.curly + meta.brace.round, meta.brace.curly, punctuation.section, punctuation.section.block, punctuation.definition.parameters, punctuation.section.group settings foreground @@ -407,7 +459,7 @@ name CSS .class scope - entity.other.attribute-name.class.css, entity.other.attribute-name.class.sass + entity.other.attribute-name.class settings foreground @@ -418,7 +470,7 @@ name CSS: #id scope - source.css entity.other.attribute-name.id, source.less entity.other.attribute-name.id, source.scss entity.other.attribute-name.id, source.sass entity.other.attribute-name.id + entity.other.attribute-name.id settings foreground @@ -429,7 +481,7 @@ name CSS :pseudo scope - entity.other.attribute-name.pseudo-element.css, entity.other.attribute-name.pseudo-class, entity.other.attribute-name.tag.pseudo-class + entity.other.attribute-name.pseudo-element, entity.other.attribute-name.tag.pseudo-element, entity.other.attribute-name.pseudo-class, entity.other.attribute-name.tag.pseudo-class settings foreground @@ -536,7 +588,7 @@ name C: include scope - meta.preprocessor.c.include string, meta.preprocessor.c.include punctuation.definition.string.begin, meta.preprocessor.c.include punctuation.definition.string.end + meta.preprocessor.c.include string.quoted.other.lt-gt.include.c, meta.preprocessor.c.include punctuation.definition.string.begin.c, meta.preprocessor.c.include punctuation.definition.string.end.c settings foreground @@ -757,7 +809,7 @@ settings foreground - #586e75 + #93a1a1 @@ -768,7 +820,7 @@ settings foreground - #586e75 + #93a1a1 @@ -783,16 +835,16 @@ - + name - Java: storage import + Storage scope - storage.modifier.import.java + storage.modifier.c++ settings foreground - #93a1a1 + #859900 @@ -851,7 +903,7 @@ settings foreground - #2aa198 + #b58900 @@ -866,6 +918,29 @@ + + name + Warning + scope + markup.warning + settings + + foreground + #b58900 + + + + name + Error + scope + markup.error + settings + + foreground + #dc322f + + + Name @@ -876,6 +951,8 @@ foreground #b58900 + fontStyle + bold @@ -945,126 +1022,6 @@ - - - name - SublimeLinter Annotations - scope - sublimelinter.notes - settings - - background - #586e75 - foreground - #586e75 - - - - name - SublimeLinter Error Outline - scope - sublimelinter.outline.illegal - settings - - background - #586e75 - foreground - #586e75 - - - - name - SublimeLinter Error Underline - scope - sublimelinter.underline.illegal - settings - - background - #dc322f - - - - name - SublimeLinter Warning Outline - scope - sublimelinter.outline.warning - settings - - background - #839496 - foreground - #839496 - - - - name - SublimeLinter Warning Underline - scope - sublimelinter.underline.warning - settings - - background - #b58900 - - - - name - SublimeLinter Violation Outline - scope - sublimelinter.outline.violation - settings - - background - #657b83 - foreground - #657b83 - - - - name - SublimeLinter Violation Underline - scope - sublimelinter.underline.violation - settings - - background - #cb4b16 - - - - name - SublimeLinter Warning - scope - sublimelinter.mark.warning - settings - - foreground - #b58900 - - - - name - SublimeLinter Error - scope - sublimelinter.mark.error - settings - - foreground - #dc322f - - - - name - SublimeLinter Gutter Mark - scope - sublimelinter.gutter-mark - settings - - foreground - #657b83 - - - name @@ -1102,41 +1059,6 @@ - - - name - GitGutter deleted - scope - markup.deleted.git_gutter - settings - - foreground - #dc322f - - - - name - GitGutter inserted - scope - markup.inserted.git_gutter - settings - - foreground - #859900 - - - - name - GitGutter changed - scope - markup.changed.git_gutter - settings - - foreground - #b58900 - - - name @@ -1149,39 +1071,6 @@ #839496 - - name - JavaScript Functions - scope - variable.function.js - settings - - foreground - #b58900 - - - - name - JavaScript punctation inside class - scope - meta.class punctuation - settings - - foreground - #839496 - - - - name - JavaScript Classes - scope - variable.language.this.js, variable.language.super.js - settings - - foreground - #d33682 - - uuid 5815b34d-fb7d-4593-bf0c-4f41f8b1f0a9 diff --git a/sublime_themes/solarized-light.tmTheme b/sublime/themes/solarized-light.tmTheme similarity index 83% rename from sublime_themes/solarized-light.tmTheme rename to sublime/themes/solarized-light.tmTheme index ed7956bc..8ffb73bd 100644 --- a/sublime_themes/solarized-light.tmTheme +++ b/sublime/themes/solarized-light.tmTheme @@ -20,18 +20,15 @@ gutter #eee8d5 invisibles - #eee8d5 + #93a1a1 lineHighlight - #eee8d5 + #3F3D3812 + misspelling + #dc322f selection #eee8d5 selectionBorder #c0c4bb - - - - - @@ -102,6 +99,28 @@ #268bd2 + + name + Variable Function + scope + variable.function + settings + + foreground + #b58900 + + + + name + Variable Language + scope + variable.language + settings + + foreground + #d33682 + + name Keyword @@ -146,11 +165,44 @@ #859900 + + name + Storage modifier + scope + storage.modifier + settings + + foreground + #586e75 + + name Class scope - keyword.control.class, meta.class, entity.name.class, entity.name.type.class + keyword.control.class, entity.name, entity.name.class, entity.name.type.class + settings + + foreground + #b58900 + + + + name + Inherited Class + scope + entity.other.inherited-class + settings + + foreground + #268bd2 + + + + name + Attribute + scope + entity.other.attribute-name settings foreground @@ -161,7 +213,7 @@ name Library class scope - support.type, support.class + support, support.type, support.class settings foreground @@ -194,13 +246,24 @@ name Built-in constant scope - constant.language, meta.preprocessor + constant, constant.language, meta.preprocessor settings foreground #b58900 + + Name + Section heading + scope + entity.name.section + settings + + foreground + #cb4b16 + + name Support.construct @@ -324,9 +387,9 @@ name - Quoted Single + Quotes scope - punctuation.definition.string.begin, punctuation.definition.string.end + punctuation.definition.string settings foreground @@ -337,7 +400,7 @@ name [] scope - meta.brace.square + meta.brace.square, punctuation.section.brackets settings foreground @@ -346,20 +409,9 @@ name - () + (),{} scope - meta.brace.round, punctuation.definition.parameters.begin, punctuation.definition.parameters.end - settings - - foreground - #657b83 - - - - name - {} - scope - meta.brace.curly + meta.brace.round, meta.brace.curly, punctuation.section, punctuation.section.block, punctuation.definition.parameters, punctuation.section.group settings foreground @@ -407,7 +459,7 @@ name CSS .class scope - entity.other.attribute-name.class.css, entity.other.attribute-name.class.sass + entity.other.attribute-name.class settings foreground @@ -418,7 +470,7 @@ name CSS: #id scope - source.css entity.other.attribute-name.id, source.less entity.other.attribute-name.id, source.scss entity.other.attribute-name.id, source.sass entity.other.attribute-name.id + entity.other.attribute-name.id settings foreground @@ -429,7 +481,7 @@ name CSS :pseudo scope - entity.other.attribute-name.pseudo-element.css, entity.other.attribute-name.pseudo-class, entity.other.attribute-name.tag.pseudo-class + entity.other.attribute-name.pseudo-element, entity.other.attribute-name.tag.pseudo-element, entity.other.attribute-name.pseudo-class, entity.other.attribute-name.tag.pseudo-class settings foreground @@ -783,16 +835,16 @@ - + name - Java: storage import + Storage scope - storage.modifier.import.java + storage.modifier.c++ settings foreground - #586e75 + #859900 @@ -851,7 +903,7 @@ settings foreground - #2aa198 + #b58900 @@ -866,6 +918,29 @@ + + name + Warning + scope + markup.warning + settings + + foreground + #b58900 + + + + name + Error + scope + markup.error + settings + + foreground + #dc322f + + + Name @@ -876,6 +951,8 @@ foreground #b58900 + fontStyle + bold @@ -945,126 +1022,6 @@ - - - name - SublimeLinter Annotations - scope - sublimelinter.notes - settings - - background - #eee8d5 - foreground - #eee8d5 - - - - name - SublimeLinter Error Outline - scope - sublimelinter.outline.illegal - settings - - background - #93a1a1 - foreground - #93a1a1 - - - - name - SublimeLinter Error Underline - scope - sublimelinter.underline.illegal - settings - - background - #dc322f - - - - name - SublimeLinter Warning Outline - scope - sublimelinter.outline.warning - settings - - background - #839496 - foreground - #839496 - - - - name - SublimeLinter Warning Underline - scope - sublimelinter.underline.warning - settings - - background - #b58900 - - - - name - SublimeLinter Violation Outline - scope - sublimelinter.outline.violation - settings - - background - #657b83 - foreground - #657b83 - - - - name - SublimeLinter Violation Underline - scope - sublimelinter.underline.violation - settings - - background - #cb4b16 - - - - name - SublimeLinter Warning - scope - sublimelinter.mark.warning - settings - - foreground - #b58900 - - - - name - SublimeLinter Error - scope - sublimelinter.mark.error - settings - - foreground - #dc322f - - - - name - SublimeLinter Gutter Mark - scope - sublimelinter.gutter-mark - settings - - foreground - #657b83 - - - name @@ -1102,41 +1059,6 @@ - - - name - GitGutter deleted - scope - markup.deleted.git_gutter - settings - - foreground - #dc322f - - - - name - GitGutter inserted - scope - markup.inserted.git_gutter - settings - - foreground - #859900 - - - - name - GitGutter changed - scope - markup.changed.git_gutter - settings - - foreground - #b58900 - - - name @@ -1149,39 +1071,6 @@ #657b83 - - name - JavaScript Functions - scope - variable.function.js - settings - - foreground - #b58900 - - - - name - JavaScript punctation inside class - scope - meta.class punctuation - settings - - foreground - #657b83 - - - - name - JavaScript Classes - scope - variable.language.this.js, variable.language.super.js - settings - - foreground - #d33682 - - uuid ca238b9c-28f7-42d4-9670-bd0829ef864e diff --git a/sublime_themes/subway-madrid.tmTheme b/sublime/themes/subway-madrid.tmTheme similarity index 100% rename from sublime_themes/subway-madrid.tmTheme rename to sublime/themes/subway-madrid.tmTheme diff --git a/sublime_themes/subway-moscow.tmTheme b/sublime/themes/subway-moscow.tmTheme similarity index 100% rename from sublime_themes/subway-moscow.tmTheme rename to sublime/themes/subway-moscow.tmTheme diff --git a/sublime/themes/two-dark.tmTheme b/sublime/themes/two-dark.tmTheme new file mode 100644 index 00000000..87fd3587 --- /dev/null +++ b/sublime/themes/two-dark.tmTheme @@ -0,0 +1,878 @@ + + + + + author + Roberto Mauro (erremauro@icloud.com) + name + TwoDark + semanticClass + theme.dark.two_dark + colorSpaceName + sRGB + gutterSettings + + background + #393939 + divider + #393939 + foreground + #747369 + selectionBackground + #515151 + selectionForeground + #a09f93 + + settings + + + settings + + background + #282C34 + caret + #528BFF + foreground + #ABB2BF + invisibles + #747369 + lineHighlight + #2B313A + selection + #3D4350 + + + + name + Text + scope + variable.parameter.function + settings + + foreground + #ABB2BF + + + + name + Comments + scope + comment, punctuation.definition.comment + settings + + foreground + #5C6370 + fontStyle + italic + + + + name + Delimiters + scope + none + settings + + foreground + #ABB2BF + + + + name + Operators + scope + keyword.operator + settings + + foreground + #ABB2BF + + + + name + Keywords + scope + keyword + settings + + foreground + #C678DD + + + + name + Variables + scope + variable + settings + + foreground + #E06C75 + + + + name + Functions + scope + entity.name.function, meta.require, support.function.any-method + settings + + foreground + #61AFEF + + + + name + Classes + scope + support.class, entity.name.class, entity.name.type.class + settings + + foreground + #E5C07B + + + + name + Classes + scope + meta.class + settings + + foreground + #ABB2BF + + + + name + Methods + scope + keyword.other.special-method + settings + + foreground + #61AFEF + + + + name + Storage + scope + storage + settings + + foreground + #C678DD + + + + name + Support + scope + support.function + settings + + foreground + #56B6C2 + + + + name + Strings, Inherited Class + scope + string, constant.other.symbol, entity.other.inherited-class + settings + + foreground + #98C379 + + + + name + Integers + scope + constant.numeric + settings + + foreground + #D19A66 + + + + name + Floats + scope + none + settings + + foreground + #D19A66 + + + + name + Boolean + scope + none + settings + + foreground + #D19A66 + + + + name + Constants + scope + constant + settings + + foreground + #D19A66 + + + + name + Tags + scope + entity.name.tag + settings + + foreground + #E06C75 + + + + name + Attributes + scope + entity.other.attribute-name + settings + + foreground + #D19A66 + + + + name + Attribute IDs + scope + entity.other.attribute-name.id, punctuation.definition.entity + settings + + foreground + #D19A66 + + + + name + Selector + scope + meta.selector + settings + + foreground + #C678DD + + + + name + Values + scope + none + settings + + foreground + #D19A66 + + + + name + Headings + scope + markup.heading punctuation.definition.heading, entity.name.section + settings + + fontStyle + + foreground + #61AFEF + + + + name + Units + scope + keyword.other.unit + settings + + foreground + #D19A66 + + + + name + Bold + scope + markup.bold, punctuation.definition.bold + settings + + foreground + #E5C07B + + + + name + Italic + scope + markup.italic, punctuation.definition.italic + settings + + foreground + #C678DD + + + + name + Code + scope + markup.raw.inline + settings + + foreground + #98C379 + + + + name + Link Text + scope + string.other.link, punctuation.definition.string.end.markdown + settings + + foreground + #E06C75 + + + + name + Link Url + scope + meta.link + settings + + foreground + #D19A66 + + + + name + Lists + scope + markup.list + settings + + foreground + #E06C75 + + + + name + Quotes + scope + markup.quote + settings + + foreground + #D19A66 + + + + name + Separator + scope + meta.separator + settings + + background + #515151 + foreground + #ABB2BF + + + + name + Inserted + scope + markup.inserted + settings + + foreground + #98C379 + + + + name + Deleted + scope + markup.deleted + settings + + foreground + #E06C75 + + + + name + Changed + scope + markup.changed + settings + + foreground + #C678DD + + + + name + Colors + scope + constant.other.color + settings + + foreground + #56B6C2 + + + + name + Regular Expressions + scope + string.regexp + settings + + foreground + #56B6C2 + + + + name + Escape Characters + scope + constant.character.escape + settings + + foreground + #56B6C2 + + + + name + Embedded + scope + punctuation.section.embedded, variable.interpolation + settings + + foreground + #BE5046 + + + + name + Illegal + scope + invalid.illegal + settings + + background + #f2777a + foreground + #272B33 + + + + name + Broken + scope + invalid.broken + settings + + background + #f99157 + foreground + #2d2d2d + + + + name + Deprecated + scope + invalid.deprecated + settings + + background + #d27b53 + foreground + #272B33 + + + + name + Unimplemented + scope + invalid.unimplemented + settings + + background + #747369 + foreground + #272B33 + + + + name + Json key + scope + source.json meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #E06C75 + + + + name + Json value + scope + source.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #98C379 + + + + name + json sub key + scope + source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #E06C75 + + + + name + Json sub value + scope + source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #98C379 + + + + name + laravel blade tag + scope + text.html.laravel-blade source.php.embedded.line.html entity.name.tag.laravel-blade + settings + + foreground + #C678DD + + + + name + laravel blade @ + scope + text.html.laravel-blade source.php.embedded.line.html support.constant.laravel-blade + settings + + foreground + #C678DD + + + + name + python function parameter + scope + source.python meta.function.python meta.function.parameters.python variable.parameter.function.python + settings + + foreground + #D19A66 + + + + name + python meta function + scope + source.python meta.function-call.python support.type.python + settings + + foreground + #56B6C2 + + + + name + python logical keyword + scope + source.python keyword.operator.logical.python + settings + + foreground + #C678DD + + + + name + python class ( begin + scope + source.python meta.class.python punctuation.definition.inheritance.begin.python + settings + + foreground + #E5C07B + + + + name + python class ) end + scope + source.python meta.class.python punctuation.definition.inheritance.end.python + settings + + foreground + #E5C07B + + + + name + python function call parameter name + scope + source.python meta.function-call.python meta.function-call.arguments.python variable.parameter.function.python + settings + + foreground + #D19A66 + + + + name + php fcuntion constants + scope + text.html.basic source.php.embedded.block.html support.constant.std.php + settings + + foreground + #D19A66 + + + + name + php namespace name + scope + text.html.basic source.php.embedded.block.html meta.namespace.php entity.name.type.namespace.php + settings + + foreground + #E5C07B + + + + name + javascript meta constant + scope + source.js meta.function.js support.constant.js + settings + + foreground + #D19A66 + + + + name + php namespace in top + scope + text.html.basic` source.php.embedded.block.html constant.other.php + settings + + foreground + #C678DD + + + + name + php namespace name in top + scope + text.html.basic source.php.embedded.block.html support.other.namespace.php + settings + + foreground + #D19A66 + + + + name + latex label names + scope + text.tex.latex meta.function.environment.math.latex string.other.math.block.environment.latex meta.definition.label.latex variable.parameter.definition.label.latex + settings + + foreground + #ABB2BF + + + + name + latex italic emph + scope + text.tex.latex meta.function.emph.latex markup.italic.emph.latex + settings + + fontStyle + italic + foreground + #C678DD + + + + name + subl_new js vars + scope + source.js variable.other.readwrite.js + settings + + foreground + ABB2BF + + + + name + new_subl js $ + scope + source.js meta.function-call.with-arguments.js variable.function.js + settings + + foreground + #ABB2BF + + + + name + new_subl js call method + scope + source.js meta.group.braces.round meta.group.braces.curly meta.function-call.method.without-arguments.js variable.function.js + settings + + foreground + #ABB2BF + + + + name + new_subl e js + scope + source.js meta.group.braces.round meta.group.braces.curly variable.other.object.js + settings + + foreground + #ABB2BF + + + + name + new_subl js key + scope + source.js meta.group.braces.round meta.group.braces.curly constant.other.object.key.js string.unquoted.label.js + settings + + foreground + #ABB2BF + + + + name + new_subl obejct key + scope + source.js meta.group.braces.round meta.group.braces.curly constant.other.object.key.js punctuation.separator.key-value.js + settings + + foreground + #ABB2BF + + + + name + new_subl js method with args + scope + source.js meta.group.braces.round meta.group.braces.curly meta.function-call.method.with-arguments.js variable.function.js + settings + + foreground + #ABB2BF + + + + name + new_subl js variable function + scope + source.js meta.function-call.method.with-arguments.js variable.function.js + settings + + foreground + #ABB2BF + + + + name + new_subl variabel function method + scope + source.js meta.function-call.method.without-arguments.js variable.function.js + settings + + foreground + #ABB2BF + + + + name + SublimeLinter Error + scope + sublimelinter.mark.error + settings + + foreground + #D02000 + + + name + SublimeLinter Gutter Mark + scope + sublimelinter.gutter-mark + settings + + foreground + #FFFFFF + + + name + SublimeLinter Warning + scope + sublimelinter.mark.warning + settings + + foreground + #DDB700 + + + uuid + 32bd64fa-d60a-4858-a5fc-5164cc49a2b8 + comment + Work in progress + + \ No newline at end of file diff --git a/sublime_themes/visual-studio-dark.tmTheme b/sublime/themes/visual-studio-dark.tmTheme similarity index 100% rename from sublime_themes/visual-studio-dark.tmTheme rename to sublime/themes/visual-studio-dark.tmTheme diff --git a/sublime_themes/zenburn.tmTheme b/sublime/themes/zenburn.tmTheme similarity index 100% rename from sublime_themes/zenburn.tmTheme rename to sublime/themes/zenburn.tmTheme diff --git a/sublime_syntaxes/Elixir.sublime-syntax b/sublime_syntaxes/Elixir.sublime-syntax deleted file mode 100644 index 2a3437e2..00000000 --- a/sublime_syntaxes/Elixir.sublime-syntax +++ /dev/null @@ -1,521 +0,0 @@ -%YAML 1.2 ---- -# http://www.sublimetext.com/docs/3/syntax.html -name: Elixir -comment: Textmate bundle for Elixir Programming Language. -file_extensions: - - ex - - exs -first_line_match: ^#!/.*\belixir -scope: source.elixir -contexts: - main: - - match: \b(fn)\b(?!.*->) - captures: - 1: keyword.control.elixir - push: - - match: $ - pop: true - - include: core_syntax - - match: \b(fn)\b(?=.*->) - captures: - 1: keyword.control.elixir - push: - - match: (?>(->)|(when)|(\))) - captures: - 1: keyword.operator.other.elixir - 2: keyword.control.elixir - 3: punctuation.section.function.elixir - pop: true - - include: core_syntax - - include: core_syntax - - match: '^(?=.*->)((?![^"'']*("|'')[^"'']*->)|(?=.*->[^"'']*("|'')[^"'']*->))((?!.*\([^\)]*->)|(?=[^\(\)]*->)|(?=\s*\(.*\).*->))((?!.*\b(fn)\b)|(?=.*->.*\bfn\b))' - captures: - 1: keyword.control.elixir - push: - - match: (?>(->)|(when)|(\))) - captures: - 1: keyword.operator.other.elixir - 2: keyword.control.elixir - 3: punctuation.section.function.elixir - pop: true - - include: core_syntax - core_syntax: - - match: ^\s*(defmodule)\b - captures: - 1: keyword.control.module.elixir - push: - - meta_scope: meta.module.elixir - - match: \b(do)\b - captures: - 1: keyword.control.module.elixir - pop: true - - match: '\b[A-Z]\w*\b' - scope: entity.name.class.elixir - - match: ^\s*(defprotocol)\b - captures: - 1: keyword.control.protocol.elixir - push: - - meta_scope: meta.protocol_declaration.elixir - - match: \b(do)\b - captures: - 1: keyword.control.protocol.elixir - pop: true - - match: '\b[A-Z]\w*\b' - scope: entity.name.protocol.elixir - - match: ^\s*(defimpl)\b - captures: - 1: keyword.control.protocol.elixir - push: - - meta_scope: meta.protocol_implementation.elixir - - match: \b(do)\b - captures: - 1: keyword.control.protocol.elixir - pop: true - - match: '\b[A-Z]\w*\b' - scope: entity.name.protocol.elixir - - match: '^\s*(def|defmacro)\s+((?>[a-zA-Z_]\w*(?>\.|::))?(?>[a-zA-Z_]\w*(?>[?!]|=(?!>))?|===?|>[>=]?|<=>|<[<=]?|[%&`/\|]|\*\*?|=?~|[-+]@?|\[\]=?))((\()|\s*)' - captures: - 1: keyword.control.module.elixir - 2: entity.name.function.public.elixir - 4: punctuation.section.function.elixir - push: - - meta_scope: meta.function.public.elixir - - match: (\bdo:)|(\bdo\b)|(?=\s+(def|defmacro)\b) - captures: - 1: constant.other.keywords.elixir - 2: keyword.control.module.elixir - pop: true - - include: main - - match: \s(\\\\) - captures: - 1: keyword.operator.other.elixir - push: - - match: ',|\)|$' - pop: true - - include: main - - match: \b(is_atom|is_binary|is_bitstring|is_boolean|is_float|is_function|is_integer|is_list|is_map|is_nil|is_number|is_pid|is_port|is_record|is_reference|is_tuple|is_exception|abs|bit_size|byte_size|div|elem|hd|length|map_size|node|rem|round|tl|trunc|tuple_size)\b - scope: keyword.control.elixir - - match: '^\s*(defp|defmacrop)\s+((?>[a-zA-Z_]\w*(?>\.|::))?(?>[a-zA-Z_]\w*(?>[?!]|=(?!>))?|===?|>[>=]?|<=>|<[<=]?|[%&`/\|]|\*\*?|=?~|[-+]@?|\[\]=?))((\()|\s*)' - captures: - 1: keyword.control.module.elixir - 2: entity.name.function.private.elixir - 4: punctuation.section.function.elixir - push: - - meta_scope: meta.function.private.elixir - - match: (\bdo:)|(\bdo\b)|(?=\s+(defp|defmacrop)\b) - captures: - 1: constant.other.keywords.elixir - 2: keyword.control.module.elixir - pop: true - - include: main - - match: \s(\\\\) - captures: - 1: keyword.operator.other.elixir - push: - - match: ',|\)|$' - pop: true - - include: main - - match: \b(is_atom|is_binary|is_bitstring|is_boolean|is_float|is_function|is_integer|is_list|is_map|is_nil|is_number|is_pid|is_port|is_record|is_reference|is_tuple|is_exception|abs|bit_size|byte_size|div|elem|hd|length|map_size|node|rem|round|tl|trunc|tuple_size)\b - scope: keyword.control.elixir - - match: '@(module|type)?doc (~[a-z])?"""' - comment: "@doc with heredocs is treated as documentation" - push: - - meta_scope: comment.documentation.heredoc - - match: \s*""" - pop: true - - include: interpolated_elixir - - include: escaped_char - - match: '@(module|type)?doc ~[A-Z]"""' - comment: "@doc with heredocs is treated as documentation" - push: - - meta_scope: comment.documentation.heredoc - - match: \s*""" - pop: true - - match: "@(module|type)?doc (~[a-z])?'''" - comment: "@doc with heredocs is treated as documentation" - push: - - meta_scope: comment.documentation.heredoc - - match: \s*''' - pop: true - - include: interpolated_elixir - - include: escaped_char - - match: "@(module|type)?doc ~[A-Z]'''" - comment: "@doc with heredocs is treated as documentation" - push: - - meta_scope: comment.documentation.heredoc - - match: \s*''' - pop: true - - match: "@(module|type)?doc false" - comment: "@doc false is treated as documentation" - scope: comment.documentation.false - - match: '@(module|type)?doc "' - comment: "@doc with string is treated as documentation" - push: - - meta_scope: comment.documentation.string - - match: '"' - pop: true - - include: interpolated_elixir - - include: escaped_char - - match: '(?_?[0-9A-Fa-f])*|\d(?>_?\d)*(\.(?![^[:space:][:digit:]])(?>_?\d)*)?([eE][-+]?\d(?>_?\d)*)?|0b[01]+|0o[0-7]+)\b' - scope: constant.numeric.elixir - - match: ":'" - captures: - 0: punctuation.definition.constant.elixir - push: - - meta_scope: constant.other.symbol.single-quoted.elixir - - match: "'" - captures: - 0: punctuation.definition.constant.elixir - pop: true - - include: interpolated_elixir - - include: escaped_char - - match: ':"' - captures: - 0: punctuation.definition.constant.elixir - push: - - meta_scope: constant.other.symbol.double-quoted.elixir - - match: '"' - captures: - 0: punctuation.definition.constant.elixir - pop: true - - include: interpolated_elixir - - include: escaped_char - - match: (?>''') - comment: Single-quoted heredocs - captures: - 0: punctuation.definition.string.begin.elixir - push: - - meta_scope: string.quoted.single.heredoc.elixir - - match: ^\s*''' - captures: - 0: punctuation.definition.string.end.elixir - pop: true - - include: interpolated_elixir - - include: escaped_char - - match: "'" - comment: single quoted string (allows for interpolation) - captures: - 0: punctuation.definition.string.begin.elixir - push: - - meta_scope: string.quoted.single.elixir - - match: "'" - captures: - 0: punctuation.definition.string.end.elixir - pop: true - - include: interpolated_elixir - - include: escaped_char - - match: (?>""") - comment: Double-quoted heredocs - captures: - 0: punctuation.definition.string.begin.elixir - push: - - meta_scope: string.quoted.double.heredoc.elixir - - match: ^\s*""" - captures: - 0: punctuation.definition.string.end.elixir - pop: true - - include: interpolated_elixir - - include: escaped_char - - match: '"' - comment: double quoted string (allows for interpolation) - captures: - 0: punctuation.definition.string.begin.elixir - push: - - meta_scope: string.quoted.double.elixir - - match: '"' - captures: - 0: punctuation.definition.string.end.elixir - pop: true - - include: interpolated_elixir - - include: escaped_char - - match: '~[a-z](?>""")' - comment: Double-quoted heredocs sigils - captures: - 0: punctuation.definition.string.begin.elixir - push: - - meta_scope: string.quoted.double.heredoc.elixir - - match: ^\s*""" - captures: - 0: punctuation.definition.string.end.elixir - pop: true - - include: interpolated_elixir - - include: escaped_char - - match: '~[a-z]\{' - comment: sigil (allow for interpolation) - captures: - 0: punctuation.definition.string.begin.elixir - push: - - meta_scope: string.interpolated.elixir - - match: '\}[a-z]*' - captures: - 0: punctuation.definition.string.end.elixir - pop: true - - include: interpolated_elixir - - include: escaped_char - - match: '~[a-z]\[' - comment: sigil (allow for interpolation) - captures: - 0: punctuation.definition.string.begin.elixir - push: - - meta_scope: string.interpolated.elixir - - match: '\][a-z]*' - captures: - 0: punctuation.definition.string.end.elixir - pop: true - - include: interpolated_elixir - - include: escaped_char - - match: '~[a-z]\<' - comment: sigil (allow for interpolation) - captures: - 0: punctuation.definition.string.begin.elixir - push: - - meta_scope: string.interpolated.elixir - - match: '\>[a-z]*' - captures: - 0: punctuation.definition.string.end.elixir - pop: true - - include: interpolated_elixir - - include: escaped_char - - match: '~[a-z]\(' - comment: sigil (allow for interpolation) - captures: - 0: punctuation.definition.string.begin.elixir - push: - - meta_scope: string.interpolated.elixir - - match: '\)[a-z]*' - captures: - 0: punctuation.definition.string.end.elixir - pop: true - - include: interpolated_elixir - - include: escaped_char - - match: '~[a-z]([^\w])' - comment: sigil (allow for interpolation) - captures: - 0: punctuation.definition.string.begin.elixir - push: - - meta_scope: string.interpolated.elixir - - match: '\1[a-z]*' - captures: - 0: punctuation.definition.string.end.elixir - pop: true - - include: interpolated_elixir - - include: escaped_char - - include: escaped_char - - match: '~[A-Z](?>""")' - comment: Double-quoted heredocs sigils - captures: - 0: punctuation.definition.string.begin.elixir - push: - - meta_scope: string.quoted.other.literal.upper.elixir - - match: ^\s*""" - captures: - 0: punctuation.definition.string.end.elixir - pop: true - - match: '~[A-Z]\{' - comment: sigil (without interpolation) - captures: - 0: punctuation.definition.string.begin.elixir - push: - - meta_scope: string.quoted.other.literal.upper.elixir - - match: '\}[a-z]*' - captures: - 0: punctuation.definition.string.end.elixir - pop: true - - match: '~[A-Z]\[' - comment: sigil (without interpolation) - captures: - 0: punctuation.definition.string.begin.elixir - push: - - meta_scope: string.quoted.other.literal.upper.elixir - - match: '\][a-z]*' - captures: - 0: punctuation.definition.string.end.elixir - pop: true - - match: '~[A-Z]\<' - comment: sigil (without interpolation) - captures: - 0: punctuation.definition.string.begin.elixir - push: - - meta_scope: string.quoted.other.literal.upper.elixir - - match: '\>[a-z]*' - captures: - 0: punctuation.definition.string.end.elixir - pop: true - - match: '~[A-Z]\(' - comment: sigil (without interpolation) - captures: - 0: punctuation.definition.string.begin.elixir - push: - - meta_scope: string.quoted.other.literal.upper.elixir - - match: '\)[a-z]*' - captures: - 0: punctuation.definition.string.end.elixir - pop: true - - match: '~[A-Z]([^\w])' - comment: sigil (without interpolation) - captures: - 0: punctuation.definition.string.begin.elixir - push: - - meta_scope: string.quoted.other.literal.upper.elixir - - match: '\1[a-z]*' - captures: - 0: punctuation.definition.string.end.elixir - pop: true - - match: '(?[a-zA-Z_][\w@]*(?>[?!]|=(?![>=]))?|\<\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\-|\|>|=>|=~|=|/|\\\\|\*\*?|\.\.?\.?|>=?|<=?|&&?&?|\+\+?|\-\-?|\|\|?\|?|\!|@|\%?\{\}|%|\[\]|\^(\^\^)?)' - comment: symbols - scope: constant.other.symbol.elixir - captures: - 1: punctuation.definition.constant.elixir - - match: '(?>[a-zA-Z_][\w@]*(?>[?!])?)(:)(?!:)' - comment: symbols - scope: constant.other.keywords.elixir - captures: - 1: punctuation.definition.constant.elixir - - match: ^\s*(##).*$\n? - scope: comment.line.section.elixir - captures: - 1: punctuation.definition.comment.elixir - - match: '(?:^[ \t]+)?(#).*$\n?' - scope: comment.line.number-sign.elixir - captures: - 1: punctuation.definition.comment.elixir - - match: '(? - scope: keyword.operator.concatenation.elixir - - match: \|\>|<~>|<>|<<<|>>>|~>>|<<~|~>|<~|<\|> - scope: keyword.operator.sigils_1.elixir - - match: "&&&|&&" - scope: keyword.operator.sigils_2.elixir - - match: <\-|\\\\ - scope: keyword.operator.sigils_3.elixir - - match: "===?|!==?|<=?|>=?" - scope: keyword.operator.comparison.elixir - - match: (\|\|\||&&&|^^^|<<<|>>>|~~~) - scope: keyword.operator.bitwise.elixir - - match: '(?<=[ \t])!+|\bnot\b|&&|\band\b|\|\||\bor\b|\bxor\b' - scope: keyword.operator.logical.elixir - - match: (\*|\+|\-|/) - scope: keyword.operator.arithmetic.elixir - - match: \||\+\+|\-\-|\*\*|\\\\|\<\-|\<\>|\<\<|\>\>|\:\:|\.\.|\|>|~|=>|& - scope: keyword.operator.other.elixir - - match: "=" - scope: keyword.operator.assignment.elixir - - match: ":" - scope: punctuation.separator.other.elixir - - match: \; - scope: punctuation.separator.statement.elixir - - match: "," - scope: punctuation.separator.object.elixir - - match: \. - scope: punctuation.separator.method.elixir - - match: '\{|\}' - scope: punctuation.section.scope.elixir - - match: '\[|\]' - scope: punctuation.section.array.elixir - - match: \(|\) - scope: punctuation.section.function.elixir - escaped_char: - - match: '\\(x[\da-fA-F]{1,2}|.)' - scope: constant.character.escaped.elixir - interpolated_elixir: - - match: '#\{(\})' - scope: source.elixir.embedded.source - captures: - 0: punctuation.section.embedded.elixir - 1: source.elixir.embedded.source.empty - - match: '#\{' - captures: - 0: punctuation.section.embedded.elixir - push: - - meta_scope: source.elixir.embedded.source - - match: '\}' - captures: - 0: punctuation.section.embedded.elixir - pop: true - - include: nest_curly_and_self - - include: main - nest_curly_and_self: - - match: '\{' - captures: - 0: punctuation.section.scope.elixir - push: - - match: '\}' - captures: - 0: punctuation.section.scope.elixir - pop: true - - include: nest_curly_and_self - - include: main - regex_sub: - - include: interpolated_elixir - - include: escaped_char - - match: '(\{)\d+(,\d+)?(\})' - scope: string.regexp.arbitrary-repitition.elixir - captures: - 1: punctuation.definition.arbitrary-repitition.elixir - 3: punctuation.definition.arbitrary-repitition.elixir - - match: '\[(?:\^?\])?' - captures: - 0: punctuation.definition.character-class.elixir - push: - - meta_scope: string.regexp.character-class.elixir - - match: '\]' - captures: - 0: punctuation.definition.character-class.elixir - pop: true - - include: escaped_char - - match: \( - captures: - 0: punctuation.definition.group.elixir - push: - - meta_scope: string.regexp.group.elixir - - match: \) - captures: - 0: punctuation.definition.group.elixir - pop: true - - include: regex_sub - - match: '(?<=^|\s)(#)\s[[a-zA-Z0-9,. \t?!-][^\x{00}-\x{7F}]]*$' - comment: We are restrictive in what we allow to go after the comment character to avoid false positives, since the availability of comments depend on regexp flags. - scope: comment.line.number-sign.elixir - captures: - 1: punctuation.definition.comment.elixir diff --git a/sublime_syntaxes/FSharp.sublime-syntax b/sublime_syntaxes/FSharp.sublime-syntax deleted file mode 100644 index ebc83745..00000000 --- a/sublime_syntaxes/FSharp.sublime-syntax +++ /dev/null @@ -1,499 +0,0 @@ -%YAML 1.2 ---- -# http://www.sublimetext.com/docs/3/syntax.html -name: fsharp -file_extensions: - - fs -scope: source.fsharp -contexts: - main: - - include: compiler_directives - - include: comments - - include: constants - - include: strings - - include: chars - - include: double_tick - - include: definition - - include: abstract_definition - - include: attributes - - include: modules - - include: anonymous_functions - - include: du_declaration - - include: record_declaration - - include: keywords - - include: records - - include: cexprs - - include: text - abstract_definition: - - match: '\b(abstract)\s+(member)?(\s+\[\<.*\>\])?\s*([_[:alpha:]0-9,\._`\s]+)(:)' - captures: - 1: keyword.fsharp - 2: keyword.fsharp - 3: support.function.attribute.fsharp - 5: keyword.fsharp - push: - - meta_scope: abstract.definition.fsharp - - match: \s*(with)\b|=|$ - captures: - 1: keyword.fsharp - pop: true - - include: comments - - include: common_declaration - - match: '\?{0,1}([[:alpha:]0-9''`^._ ]+)\s*(:)(\s*([?[:alpha:]0-9''`^._ ]+)){0,1}' - captures: - 1: variable.parameter.fsharp - 2: keyword.symbol.fsharp - 3: entity.name.type.fsharp - - match: '(?!with|get|set\b)\b([\w0-9''`^._]+)' - captures: - 1: entity.name.type.fsharp - - include: keywords - anonymous_functions: - - match: \b(fun)\b - captures: - 1: keyword.fsharp - push: - - meta_scope: function.anonymous - - match: (->) - captures: - 1: keyword.fsharp - pop: true - - include: comments - - include: member_declaration - - match: '(:)(\s*([?[:alpha:]0-9''`<>^._ ]+))*' - captures: - 1: keyword.symbol.fsharp - 2: entity.name.type.fsharp - - include: variables - attributes: - - match: '\[\<' - push: - - meta_scope: support.function.attribute.fsharp - - match: '\>\]|\]' - pop: true - - include: main - cexprs: - - match: '\b(async|seq|promise|task|maybe|asyncMaybe|controller|scope|application|pipeline)\s*\{' - scope: cexpr.fsharp - captures: - 0: keyword.fsharp - chars: - - match: ('\\?.') - scope: char.fsharp - captures: - 1: string.quoted.single.fsharp - comments: - - match: ^\s*(\(\*\*(?!\)))(?!\*\))$ - captures: - 1: comment.block.fsharp - push: - - meta_scope: comment.block.markdown.fsharp - - match: \*\) - captures: - 1: comment.block.fsharp - pop: true - - include: scope:text.html.markdown - - match: ^(\s*\*\)$) - scope: comment.block.markdown.fsharp.end - captures: - 1: comment.block.fsharp - - match: (\(\*(?!\))) - captures: - 1: comment.block.fsharp - push: - - meta_scope: comment.block.fsharp - - match: (\*\)) - captures: - 1: comment.block.fsharp - pop: true - - match: /// - push: - - meta_scope: comment.line.markdown.fsharp - - match: (\r)?\n - pop: true - - include: scope:text.html.markdown - - match: //.*$ - scope: comment.line.double-slash.fsharp - common_declaration: - - match: '\s*(->)\s*([[:alpha:]0-9''`^._ ]+)(<)' - captures: - 1: keyword.symbol.fsharp - 2: entity.name.type.fsharp - 3: keyword.symbol.fsharp - push: - - match: (>) - captures: - 1: keyword.symbol.fsharp - pop: true - - match: "([[:alpha:]0-9'`^._ ]+)" - captures: - 1: entity.name.type.fsharp - - include: keywords - - match: '\s*(->)\s*(?!with|get|set\b)\b([\w0-9''`^._]+)' - captures: - 1: keyword.symbol.fsharp - 2: entity.name.type.fsharp - - match: '\?{0,1}([[:alpha:]0-9''`^._ ]+)\s*(:)(\s*([?[:alpha:]0-9''`^._ ]+)(<))' - captures: - 1: variable.parameter.fsharp - 2: keyword.symbol.fsharp - 3: keyword.symbol.fsharp - 4: entity.name.type.fsharp - push: - - match: (>) - captures: - 1: keyword.symbol.fsharp - pop: true - - match: "([[:alpha:]0-9'`^._ ]+)" - captures: - 1: entity.name.type.fsharp - - include: keywords - compiler_directives: - - match: \s?(#if|#elif|#else|#elseif|#endif|#light|#nowarn) - scope: compiler_directive.fsharp - captures: - constants: - - match: \(\) - scope: constant.language.unit.fsharp - - match: '\b-?[0-9][0-9_]*((\.([0-9][0-9_]*([eE][+-]??[0-9][0-9_]*)?)?)|([eE][+-]??[0-9][0-9_]*))' - scope: constant.numeric.floating-point.fsharp - - match: '\b(-?((0(x|X)[0-9a-fA-F][0-9a-fA-F_]*)|(0(o|O)[0-7][0-7_]*)|(0(b|B)[01][01_]*)|([0-9][0-9_]*)))' - scope: constant.numeric.integer.nativeint.fsharp - - match: \b(true|false|null|unit)\b - scope: constant.others.fsharp - definition: - - match: '\b(val mutable|val|let mutable|let inline|let|member val|member|static member|override|let!)(\s+rec|mutable)?(\s+\[\<.*\>\])?\s*(private|internal|public)?\s+(\[[^-=]*\]|[_[:alpha:]]([_[:alpha:]0-9,\._]+)*|``[_[:alpha:]]([_[:alpha:]0-9,\._`\s]+|(?<=,)\s)*)?' - captures: - 1: keyword.fsharp - 2: keyword.fsharp - 3: support.function.attribute.fsharp - 4: keyword.fsharp - 5: variable.fsharp - push: - - meta_scope: binding.fsharp - - match: \s*(with\b|=|\n+=|(?<=\=)) - captures: - 1: keyword.fsharp - pop: true - - include: comments - - include: attributes - - match: (:)\s*(\() - captures: - 1: keyword.symbol.fsharp - 2: keyword.symbol.fsharp - push: - - match: '(\)\s*(([?[:alpha:]0-9''`^._ ]+))+)' - captures: - 1: keyword.symbol.fsharp - 2: entity.name.type.fsharp - pop: true - - include: tuple_signature - - match: '(:)\s*([?[:alpha:]0-9''`^._ ]+)*' - captures: - 1: keyword.symbol.fsharp - 2: entity.name.type.fsharp - - match: '(->)\s*(\()?\s*([?[:alpha:]0-9''`^._ ]+)*' - captures: - 1: keyword.symbol.fsharp - 2: keyword.symbol.fsharp - 3: entity.name.type.fsharp - - match: (\*)\s*(\() - captures: - 1: keyword.symbol.fsharp - 2: keyword.symbol.fsharp - push: - - match: '(\)\s*(([?[:alpha:]0-9''`^._ ]+))+)' - captures: - 1: keyword.symbol.fsharp - 2: entity.name.type.fsharp - pop: true - - include: tuple_signature - - match: '(\*)(\s*([?[:alpha:]0-9''`^._ ]+))*' - captures: - 1: keyword.symbol.fsharp - 2: entity.name.type.fsharp - - match: '(<(?![[:space:]]*\)))' - captures: - 1: keyword.symbol.fsharp - push: - - match: (>) - captures: - 1: keyword.symbol.fsharp - pop: true - - include: generic_declaration - - match: "({)" - captures: - 1: keyword.symbol.fsharp - push: - - match: "(})" - captures: - 1: keyword.symbol.fsharp - pop: true - - include: record_signature - - include: variables - - include: keywords - double_tick: - - match: (``)(.*)(``) - scope: variable.other.binding.fsharp - captures: - 1: string.quoted.single.fsharp - 2: variable.other.binding.fsharp - 3: string.quoted.single.fsharp - du_declaration: - - match: \b(of)\b - captures: - 1: keyword.fsharp - push: - - meta_scope: du_declaration.fsharp - - match: $|(\|) - captures: - 1: keyword.symbol.fsharp - pop: true - - include: comments - - match: '([[:alpha:]0-9''`<>^._]+|``[[:alpha:]0-9'' <>^._]+``)\s*(:)\s*([[:alpha:]0-9''`<>^._]+|``[[:alpha:]0-9'' <>^._]+``)' - captures: - 1: variable.parameter.fsharp - 2: keyword.symbol.fsharp - 3: entity.name.type.fsharp - - match: "([[:alpha:]0-9'`^._]+)|``([[:alpha:]0-9'^._ ]+)``" - captures: - 1: entity.name.type.fsharp - - include: keywords - generic_declaration: - - match: "([^<>,*()-])" - captures: - 1: entity.name.type.fsharp - - match: (<) - captures: - 1: keyword.symbol.fsharp - push: - - match: (>) - captures: - 1: keyword.symbol.fsharp - pop: true - - match: "([^<>,*()-])" - captures: - 1: entity.name.type.fsharp - - include: tuple_signature - - include: generic_declaration - - include: keywords - keywords: - - match: \b(private|to|public|internal|function|yield!|yield|class|exception|match|delegate|of|new|in|as|if|then|else|elif|for|begin|end|inherit|do|let\!|return\!|return|interface|with|abstract|property|union|enum|member|try|finally|and|when|use|use\!|struct|while|mutable)(?!')\b - scope: keyword.fsharp - - match: '(&&&|\|\|\||\^\^\^|~~~|<<<|>>>|\|>|\->|\<\-|:>|:\?>|:|\[|\]|\;|<>|=|@|\|\||&&|{|}|\||_|\.\.|\,|\+|\-|\*|\/|\^|\!|\>|\>\=|\>\>|\<|\<\=|\(|\)|\<\<)' - scope: keyword.symbol.fsharp - member_declaration: - - match: (\() - captures: - 1: keyword.symbol.fsharp - push: - - match: (\)) - captures: - 1: keyword.symbol.fsharp - pop: true - - include: comments - - include: common_declaration - - match: '\?{0,1}([[:alpha:]0-9''`^._ ]+)\s*(:{0,1})(\s*([?[:alpha:]0-9''`<>^._ ]+)){0,1}' - captures: - 1: variable.parameter.fsharp - 2: keyword.symbol.fsharp - 3: entity.name.type.fsharp - - include: keywords - modules: - - match: '\b(namespace|module)\s*(public|internal|private)?\s+([[:alpha:]][[:alpha:]0-9''_. ]*)' - captures: - 1: keyword.fsharp - 2: keyword.fsharp - 3: entity.name.section.fsharp - push: - - meta_scope: entity.name.section.fsharp - - match: (\s?=|\s|$) - captures: - 1: keyword.symbol.fsharp - pop: true - - match: '(\.)([A-Z][[:alpha:]0-9''_]*)' - scope: entity.name.section.fsharp - captures: - 1: punctuation.separator.namespace-reference.fsharp - 2: entity.name.section.fsharp - - match: '\b(open)\s+([[:alpha:]][[:alpha:]0-9''_]*)(?=(\.[A-Z][[:alpha:]0-9_]*)*)' - captures: - 1: keyword.fsharp - 2: entity.name.section.fsharp - push: - - meta_scope: namespace.open.fsharp - - match: (\s|$) - pop: true - - match: '(\.)([[:alpha:]][[:alpha:]0-9''_]*)' - scope: entity.name.section.fsharp - captures: - 1: punctuation.separator.namespace-reference.fsharp - 2: entity.name.section.fsharp - - match: '^\s*(module)\s+([A-Z][[:alpha:]0-9''_]*)\s*(=)\s*([A-Z][[:alpha:]0-9''_]*)' - captures: - 1: keyword.fsharp - 2: entity.name.type.namespace.fsharp - 3: punctuation.separator.namespace-definition.fsharp - 4: entity.name.section.fsharp - push: - - meta_scope: namespace.alias.fsharp - - match: (\s|$) - pop: true - - match: '(\.)([A-Z][[:alpha:]0-9''_]*)' - scope: entity.name.section.fsharp - captures: - 1: punctuation.separator.namespace-reference.fsharp - 2: entity.name.section.fsharp - record_declaration: - - match: '(\{)' - captures: - 1: keyword.symbol.fsharp - push: - - match: '(?<=\})' - pop: true - - include: comments - - match: '(((mutable)\s[[:alpha:]]+)|[[:alpha:]0-9''`<>^._]*)\s*((?)\s*(private|internal|public)? - captures: - 1: keyword.symbol.fsharp - 2: keyword.fsharp - - match: "([[:alpha:]0-9'`^._ ]+)" - captures: - 1: entity.name.type.fsharp - - include: member_declaration - - include: keywords - string_formatter: - - match: (%0?-?(\d+)?((a|t)|(\.\d+)?(f|F|e|E|g|G|M)|(b|c|s|d|i|x|X|o|u)|(s|b|O)|(\+?A))) - scope: entity.name.type.format.specifier.fsharp - captures: - 1: keyword.format.specifier.fsharp - strings: - - match: '(?=[^\\])(@")' - captures: - 1: punctuation.definition.string.begin.fsharp - push: - - meta_scope: string.quoted.literal.fsharp - - match: (")(?!") - captures: - 1: punctuation.definition.string.end.fsharp - pop: true - - match: '"(")' - scope: constant.character.string.escape.fsharp - - match: '(?=[^\\])(""")' - captures: - 1: punctuation.definition.string.begin.fsharp - push: - - meta_scope: string.quoted.triple.fsharp - - match: (""") - captures: - 1: punctuation.definition.string.end.fsharp - pop: true - - include: string_formatter - - match: '(?=[^\\])(")' - captures: - 1: punctuation.definition.string.begin.fsharp - push: - - meta_scope: string.quoted.double.fsharp - - match: (") - captures: - 1: punctuation.definition.string.end.fsharp - pop: true - - match: '\\$[ \t]*' - scope: punctuation.separator.string.ignore-eol.fsharp - - match: '\\([\\''''ntbr]|u[a-fA-F0-9]{4}|u[a-fA-F0-9]{8})' - scope: constant.character.string.escape.fsharp - - match: '\\(?![\\''''ntbr]|u[a-fA-F0-9]{4}|u[a-fA-F0-9]{8}).' - scope: invalid.illeagal.character.string.fsharp - - include: string_formatter - text: - - match: \\ - scope: text.fsharp - tuple_signature: - - match: "(([?[:alpha:]0-9'`^._ ]+))+" - captures: - 1: entity.name.type.fsharp - - match: (\() - captures: - 1: keyword.symbol.fsharp - push: - - match: (\)) - captures: - 1: keyword.symbol.fsharp - pop: true - - match: "(([?[:alpha:]0-9'`^._ ]+))+" - captures: - 1: entity.name.type.fsharp - - include: tuple_signature - - include: keywords - variables: - - match: \(\) - scope: constant.language.unit.fsharp - - match: '``[[:alpha:]0-9''`^:,._ ]+``|[[:alpha:]0-9''`<>^._ ]\w*' - scope: variable.parameter.fsharp diff --git a/sublime_syntaxes/Handlebars b/sublime_syntaxes/Handlebars deleted file mode 160000 index fa350d39..00000000 --- a/sublime_syntaxes/Handlebars +++ /dev/null @@ -1 +0,0 @@ -Subproject commit fa350d393dc04cf67e238258be154625f7388bc6 diff --git a/sublime_syntaxes/Jinja2.sublime-syntax b/sublime_syntaxes/Jinja2.sublime-syntax deleted file mode 100644 index 70776665..00000000 --- a/sublime_syntaxes/Jinja2.sublime-syntax +++ /dev/null @@ -1,181 +0,0 @@ -%YAML 1.2 ---- -# http://www.sublimetext.com/docs/3/syntax.html -name: Jinja2 -file_extensions: - - j2 - - jinja2 -scope: text.html.jinja2 -contexts: - main: - - include: scope:text.html.basic - - match: '({%)\s*(raw)\s*(%})' - captures: - 1: entity.other.jinja2.delimiter.tag - 2: keyword.control.jinja2 - 3: entity.other.jinja2.delimiter.tag - push: - - meta_scope: comment.block.jinja2.raw - - match: '({%)\s*(endraw)\s*(%})' - captures: - 1: entity.other.jinja2.delimiter.tag - 2: keyword.control.jinja2 - 3: entity.other.jinja2.delimiter.tag - pop: true - - match: "{#-?" - captures: - 0: entity.other.jinja2.delimiter.comment - push: - - meta_scope: comment.block.jinja2 - - match: "-?#}" - captures: - 0: entity.other.jinja2.delimiter.comment - pop: true - - match: "{{-?" - captures: - 0: entity.other.jinja2.delimiter.variable - push: - - meta_scope: meta.scope.jinja2.variable - - match: "-?}}" - captures: - 0: entity.other.jinja2.delimiter.variable - pop: true - - include: expression - - match: "{%-?" - captures: - 0: entity.other.jinja2.delimiter.tag - push: - - meta_scope: meta.scope.jinja2.tag - - match: "-?%}" - captures: - 0: entity.other.jinja2.delimiter.tag - pop: true - - include: expression - escaped_char: - - match: '\\x[0-9A-F]{2}' - scope: constant.character.escape.hex.jinja2 - escaped_unicode_char: - - match: '(\\U[0-9A-Fa-f]{8})|(\\u[0-9A-Fa-f]{4})|(\\N\{[a-zA-Z ]+\})' - captures: - 1: constant.character.escape.unicode.16-bit-hex.jinja2 - 2: constant.character.escape.unicode.32-bit-hex.jinja2 - 3: constant.character.escape.unicode.name.jinja2 - expression: - - match: '\s*\b(macro)\s+([a-zA-Z_][a-zA-Z0-9_]*)\b' - captures: - 1: keyword.control.jinja2 - 2: variable.other.jinja2.macro - - match: '\s*\b(block)\s+([a-zA-Z_][a-zA-Z0-9_]*)\b' - captures: - 1: keyword.control.jinja2 - 2: variable.other.jinja2.block - - match: '\s*\b(filter)\s+([a-zA-Z_][a-zA-Z0-9_]*)\b' - captures: - 1: keyword.control.jinja2 - 2: variable.other.jinja2.filter - - match: '\s*\b(is)\s+([a-zA-Z_][a-zA-Z0-9_]*)\b' - captures: - 1: keyword.control.jinja2 - 2: variable.other.jinja2.test - - match: '(?<=\{\%-|\{\%)\s*\b([a-zA-Z_][a-zA-Z0-9_]*)\b(?!\s*[,=])' - captures: - 1: keyword.control.jinja2 - - match: \b(and|else|if|in|import|not|or|recursive|with(out)?\s+context)\b - scope: keyword.control.jinja2 - - match: '\b([Tt]rue|[Ff]alse|[Nn]one)\b' - scope: constant.language.jinja2 - - match: \b(loop|super|self|varargs|kwargs)\b - scope: variable.language.jinja2 - - match: "[a-zA-Z_][a-zA-Z0-9_]*" - scope: variable.other.jinja2 - - match: (\+|\-|\*\*|\*|//|/|%) - scope: keyword.operator.arithmetic.jinja2 - - match: '(\|)([a-zA-Z_][a-zA-Z0-9_]*)' - captures: - 1: punctuation.other.jinja2 - 2: variable.other.jinja2.filter - - match: '(\.)([a-zA-Z_][a-zA-Z0-9_]*)' - captures: - 1: punctuation.other.jinja2 - 2: variable.other.jinja2.attribute - - match: '\[' - captures: - 0: punctuation.other.jinja2 - push: - - match: '\]' - captures: - 0: punctuation.other.jinja2 - pop: true - - include: expression - - match: \( - captures: - 0: punctuation.other.jinja2 - push: - - match: \) - captures: - 0: punctuation.other.jinja2 - pop: true - - include: expression - - match: '\{' - captures: - 0: punctuation.other.jinja2 - push: - - match: '\}' - captures: - 0: punctuation.other.jinja2 - pop: true - - include: expression - - match: (\.|:|\||,) - scope: punctuation.other.jinja2 - - match: (==|<=|=>|<|>|!=) - scope: keyword.operator.comparison.jinja2 - - match: "=" - scope: keyword.operator.assignment.jinja2 - - match: '"' - captures: - 0: punctuation.definition.string.begin.jinja2 - push: - - meta_scope: string.quoted.double.jinja2 - - match: '"' - captures: - 0: punctuation.definition.string.end.jinja2 - pop: true - - include: string - - match: "'" - captures: - 0: punctuation.definition.string.begin.jinja2 - push: - - meta_scope: string.quoted.single.jinja2 - - match: "'" - captures: - 0: punctuation.definition.string.end.jinja2 - pop: true - - include: string - - match: "@/" - captures: - 0: punctuation.definition.regexp.begin.jinja2 - push: - - meta_scope: string.regexp.jinja2 - - match: / - captures: - 0: punctuation.definition.regexp.end.jinja2 - pop: true - - include: simple_escapes - simple_escapes: - - match: (\\\n)|(\\\\)|(\\\")|(\\')|(\\a)|(\\b)|(\\f)|(\\n)|(\\r)|(\\t)|(\\v) - captures: - 1: constant.character.escape.newline.jinja2 - 2: constant.character.escape.backlash.jinja2 - 3: constant.character.escape.double-quote.jinja2 - 4: constant.character.escape.single-quote.jinja2 - 5: constant.character.escape.bell.jinja2 - 6: constant.character.escape.backspace.jinja2 - 7: constant.character.escape.formfeed.jinja2 - 8: constant.character.escape.linefeed.jinja2 - 9: constant.character.escape.return.jinja2 - 10: constant.character.escape.tab.jinja2 - 11: constant.character.escape.vertical-tab.jinja2 - string: - - include: simple_escapes - - include: escaped_char - - include: escaped_unicode_char diff --git a/sublime_syntaxes/Julia-sublime b/sublime_syntaxes/Julia-sublime deleted file mode 160000 index 0ca4cc29..00000000 --- a/sublime_syntaxes/Julia-sublime +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0ca4cc29907e9476cb603fed00d1d5fd9dc13c9c diff --git a/sublime_syntaxes/LESS-sublime b/sublime_syntaxes/LESS-sublime deleted file mode 160000 index 0174335f..00000000 --- a/sublime_syntaxes/LESS-sublime +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0174335f91284f5ffab96f599ab2ab7e316658e2 diff --git a/sublime_syntaxes/Packages b/sublime_syntaxes/Packages deleted file mode 160000 index 289782ff..00000000 --- a/sublime_syntaxes/Packages +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 289782ff2e4cb58de171579c7fc86fe00d280619 diff --git a/sublime_syntaxes/Sublime-GenericConfig b/sublime_syntaxes/Sublime-GenericConfig deleted file mode 160000 index 04ec6d71..00000000 --- a/sublime_syntaxes/Sublime-GenericConfig +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 04ec6d7165e971db1fefd604942b04ccf86fb920 diff --git a/sublime_syntaxes/Sublime-VimL b/sublime_syntaxes/Sublime-VimL deleted file mode 160000 index ed40c3bc..00000000 --- a/sublime_syntaxes/Sublime-VimL +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ed40c3bc814cd0c8107dbbb8fcd95946b33217f0 diff --git a/sublime_syntaxes/SublimeElmLanguageSupport b/sublime_syntaxes/SublimeElmLanguageSupport deleted file mode 160000 index dfbb8bdc..00000000 --- a/sublime_syntaxes/SublimeElmLanguageSupport +++ /dev/null @@ -1 +0,0 @@ -Subproject commit dfbb8bdc9a8403092c884d3eb893a270538cfa72 diff --git a/sublime_syntaxes/SublimeTextLinkerSyntax b/sublime_syntaxes/SublimeTextLinkerSyntax deleted file mode 160000 index cc840ca9..00000000 --- a/sublime_syntaxes/SublimeTextLinkerSyntax +++ /dev/null @@ -1 +0,0 @@ -Subproject commit cc840ca97baf783ee3e260ea05f4e164abf665d1 diff --git a/sublime_syntaxes/Swift-for-f-ing-sublime b/sublime_syntaxes/Swift-for-f-ing-sublime deleted file mode 160000 index 2273beda..00000000 --- a/sublime_syntaxes/Swift-for-f-ing-sublime +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2273beda750aec3ef0fa53e389d366432db9c779 diff --git a/sublime_syntaxes/TOML.sublime-syntax b/sublime_syntaxes/TOML.sublime-syntax deleted file mode 100644 index 4e8e22e7..00000000 --- a/sublime_syntaxes/TOML.sublime-syntax +++ /dev/null @@ -1,153 +0,0 @@ -%YAML 1.2 ---- -# http://www.sublimetext.com/docs/3/syntax.html -name: TOML -file_extensions: - - toml - - tml -scope: source.toml -contexts: - main: - - include: comments - - include: tables - - include: keys - - include: illegal - array: - - match: '(? everything unmatched - captures: - 1: invalid.illegal.toml - inlinetable: - - match: '(?)' - scope: meta.arrow.ts - captures: - 1: storage.modifier.async.ts - 2: variable.parameter.ts - - match: |- - (?x) (?: - (? is on new line - ( - [(]\s* - ( - ([)]\s*:) | # (): - ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: - ) - ) | - ( - [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends - ) | - # arrow function possible to detect only with => on same line - ( - (<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters - \(\s*([_$[:alpha:]\{\[]([^()]|\((\s*[^()]*)?\))*)?\) # parameteres - (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type - \s*=> # arrow operator - ) - ) - ) - captures: - 1: storage.modifier.async.ts - push: - - meta_scope: meta.arrow.ts - - match: '(?==>|\{|(^\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\s+))' - pop: true - - include: comment - - include: type-parameters - - include: function-parameters - - include: arrow-return-type - - match: "=>" - captures: - 0: storage.type.function.arrow.ts - push: - - meta_scope: meta.arrow.ts - - match: '(?<=\}|\S)(?)|((?!\{)(?=\S))' - pop: true - - include: decl-block - - include: expression - arrow-return-type: - - match: (?<=\))\s*(:) - captures: - 1: keyword.operator.type.annotation.ts - push: - - meta_scope: meta.return.type.arrow.ts - - match: '(?==>|\{|(^\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\s+))' - pop: true - - match: '(?<=[:])(?=\s*\{)' - push: - - match: '(?<=\})' - pop: true - - include: type-object - - include: type-predicate-operator - - include: type - binding-element: - - include: comment - - include: object-binding-pattern - - include: array-binding-pattern - - include: destructuring-variable-rest - - include: variable-initializer - boolean-literal: - - match: '(?*?\&\|\^]|[^_$[:alnum:]](?:\+\+|\-\-)|[^\+]\+|[^\-]\-))\s*(<)(?!)\s* - captures: - 1: meta.brace.angle.ts - pop: true - - include: type - - match: '(?:(?<=^))\s*(<)(?=[_$[:alpha:]][_$[:alnum:]]*\s*>)' - captures: - 1: meta.brace.angle.ts - push: - - meta_scope: cast.expr.ts - - match: (\>)\s* - captures: - 1: meta.brace.angle.ts - pop: true - - include: type - class-declaration: - - match: '(?\s*$)' - captures: - 1: punctuation.definition.comment.ts - push: - - meta_scope: comment.line.triple-slash.directive.ts - - match: (?=^) - pop: true - - match: (<)(reference|amd-dependency|amd-module) - captures: - 1: punctuation.definition.tag.directive.ts - 2: entity.name.tag.directive.ts - push: - - meta_scope: meta.tag.ts - - match: /> - captures: - 0: punctuation.definition.tag.directive.ts - pop: true - - match: path|types|no-default-lib|name - scope: entity.other.attribute-name.directive.ts - - match: "=" - scope: keyword.operator.assignment.ts - - include: string - docblock: - - match: |- - (?x) - ((@)(?:access|api)) - \s+ - (private|protected|public) - \b - captures: - 1: storage.type.class.jsdoc - 2: punctuation.definition.block.tag.jsdoc - 3: constant.language.access-type.jsdoc - - match: |- - (?x) - ((@)author) - \s+ - ( - [^@\s<>*/] - (?:[^@<>*/]|\*[^/])* - ) - (?: - \s* - (<) - ([^>\s]+) - (>) - )? - captures: - 1: storage.type.class.jsdoc - 2: punctuation.definition.block.tag.jsdoc - 3: entity.name.type.instance.jsdoc - 4: punctuation.definition.bracket.angle.begin.jsdoc - 5: constant.other.email.link.underline.jsdoc - 6: punctuation.definition.bracket.angle.end.jsdoc - - match: |- - (?x) - ((@)borrows) \s+ - ((?:[^@\s*/]|\*[^/])+) # - \s+ (as) \s+ # as - ((?:[^@\s*/]|\*[^/])+) # - captures: - 1: storage.type.class.jsdoc - 2: punctuation.definition.block.tag.jsdoc - 3: entity.name.type.instance.jsdoc - 4: keyword.operator.control.jsdoc - 5: entity.name.type.instance.jsdoc - - match: ((@)example)\s+ - captures: - 1: storage.type.class.jsdoc - 2: punctuation.definition.block.tag.jsdoc - push: - - meta_scope: meta.example.jsdoc - - match: (?=@|\*/) - pop: true - - match: ^\s\*\s+ - - match: \G(<)caption(>) - captures: - 0: entity.name.tag.inline.jsdoc - 1: punctuation.definition.bracket.angle.begin.jsdoc - 2: punctuation.definition.bracket.angle.end.jsdoc - push: - - meta_content_scope: constant.other.description.jsdoc - - match: ()|(?=\*/) - captures: - 0: entity.name.tag.inline.jsdoc - 1: punctuation.definition.bracket.angle.begin.jsdoc - 2: punctuation.definition.bracket.angle.end.jsdoc - pop: true - - match: '[^\s@*](?:[^*]|\*[^/])*' - captures: - 0: source.embedded.ts - - match: (?x) ((@)kind) \s+ (class|constant|event|external|file|function|member|mixin|module|namespace|typedef) \b - captures: - 1: storage.type.class.jsdoc - 2: punctuation.definition.block.tag.jsdoc - 3: constant.language.symbol-type.jsdoc - - match: |- - (?x) - ((@)see) - \s+ - (?: - # URL - ( - (?=https?://) - (?:[^\s*]|\*[^/])+ - ) - | - # JSDoc namepath - ( - (?! - # Avoid matching bare URIs (also acceptable as links) - https?:// - | - # Avoid matching {@inline tags}; we match those below - (?:\[[^\[\]]*\])? # Possible description [preceding]{@tag} - {@(?:link|linkcode|linkplain|tutorial)\b - ) - # Matched namepath - (?:[^@\s*/]|\*[^/])+ - ) - ) - captures: - 1: storage.type.class.jsdoc - 2: punctuation.definition.block.tag.jsdoc - 3: variable.other.link.underline.jsdoc - 4: entity.name.type.instance.jsdoc - - match: |- - (?x) - ((@)template) - \s+ - # One or more valid identifiers - ( - [A-Za-z_$] # First character: non-numeric word character - [\w$.\[\]]* # Rest of identifier - (?: # Possible list of additional identifiers - \s* , \s* - [A-Za-z_$] - [\w$.\[\]]* - )* - ) - captures: - 1: storage.type.class.jsdoc - 2: punctuation.definition.block.tag.jsdoc - 3: variable.other.jsdoc - - match: |- - (?x) - ( - (@) - (?:arg|argument|const|constant|member|namespace|param|var) - ) - \s+ - ( - [A-Za-z_$] - [\w$.\[\]]* - ) - captures: - 1: storage.type.class.jsdoc - 2: punctuation.definition.block.tag.jsdoc - 3: variable.other.jsdoc - - match: '((@)typedef)\s+(?={)' - captures: - 1: storage.type.class.jsdoc - 2: punctuation.definition.block.tag.jsdoc - push: - - match: '(?=\s|\*/|[^{}\[\]A-Za-z_$])' - pop: true - - include: jsdoctype - - match: '(?:[^@\s*/]|\*[^/])+' - scope: entity.name.type.instance.jsdoc - - match: '((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\s+(?={)' - captures: - 1: storage.type.class.jsdoc - 2: punctuation.definition.block.tag.jsdoc - push: - - match: '(?=\s|\*/|[^{}\[\]A-Za-z_$])' - pop: true - - include: jsdoctype - - match: '([A-Za-z_$][\w$.\[\]]*)' - scope: variable.other.jsdoc - - match: |- - (?x) - (\[)\s* - [\w$]+ - (?: - (?:\[\])? # Foo[ ].bar properties within an array - \. # Foo.Bar namespaced parameter - [\w$]+ - )* - (?: - \s* - (=) # [foo=bar] Default parameter value - \s* - ( - # The inner regexes are to stop the match early at */ and to not stop at escaped quotes - (?> - "(?:(?:\*(?!/))|(?:\\(?!"))|[^*\\])*?" | # [foo="bar"] Double-quoted - '(?:(?:\*(?!/))|(?:\\(?!'))|[^*\\])*?' | # [foo='bar'] Single-quoted - \[ (?:(?:\*(?!/))|[^*])*? \] | # [foo=[1,2]] Array literal - (?:(?:\*(?!/))|\s(?!\s*\])|\[.*?(?:\]|(?=\*/))|[^*\s\[\]])* # Everything else - )* - ) - )? - \s*(?:(\])((?:[^*\s]|\*[^\s/])+)?|(?=\*/)) - scope: variable.other.jsdoc - captures: - 1: punctuation.definition.optional-value.begin.bracket.square.jsdoc - 2: keyword.operator.assignment.jsdoc - 3: source.embedded.ts - 4: punctuation.definition.optional-value.end.bracket.square.jsdoc - 5: invalid.illegal.syntax.jsdoc - - match: |- - (?x) - ( - (@) - (?:define|enum|exception|export|extends|lends|implements|modifies - |namespace|private|protected|returns?|suppress|this|throws|type - |yields?) - ) - \s+(?={) - captures: - 1: storage.type.class.jsdoc - 2: punctuation.definition.block.tag.jsdoc - push: - - match: '(?=\s|\*/|[^{}\[\]A-Za-z_$])' - pop: true - - include: jsdoctype - - match: |- - (?x) - ( - (@) - (?:alias|augments|callback|constructs|emits|event|fires|exports? - |extends|external|function|func|host|lends|listens|interface|memberof!? - |method|module|mixes|mixin|name|requires|see|this|typedef|uses) - ) - \s+ - ( - (?: - [^{}@\s*] | \*[^/] - )+ - ) - captures: - 1: storage.type.class.jsdoc - 2: punctuation.definition.block.tag.jsdoc - 3: entity.name.type.instance.jsdoc - - match: '((@)(?:default(?:value)?|license|version))\s+(([''''"]))' - captures: - 1: storage.type.class.jsdoc - 2: punctuation.definition.block.tag.jsdoc - 3: variable.other.jsdoc - 4: punctuation.definition.string.begin.jsdoc - push: - - meta_content_scope: variable.other.jsdoc - - match: (\3)|(?=$|\*/) - captures: - 0: variable.other.jsdoc - 1: punctuation.definition.string.end.jsdoc - pop: true - - match: '((@)(?:default(?:value)?|license|tutorial|variation|version))\s+([^\s*]+)' - captures: - 1: storage.type.class.jsdoc - 2: punctuation.definition.block.tag.jsdoc - 3: variable.other.jsdoc - - match: '(?x) (@) (?:abstract|access|alias|api|arg|argument|async|attribute|augments|author|beta|borrows|bubbles |callback|chainable|class|classdesc|code|config|const|constant|constructor|constructs|copyright |default|defaultvalue|define|deprecated|desc|description|dict|emits|enum|event|example|exception |exports?|extends|extension(?:_?for)?|external|externs|file|fileoverview|final|fires|for|func |function|generator|global|hideconstructor|host|ignore|implements|implicitCast|inherit[Dd]oc |inner|instance|interface|internal|kind|lends|license|listens|main|member|memberof!?|method |mixes|mixins?|modifies|module|name|namespace|noalias|nocollapse|nocompile|nosideeffects |override|overview|package|param|polymer(?:Behavior)?|preserve|private|prop|property|protected |public|read[Oo]nly|record|require[ds]|returns?|see|since|static|struct|submodule|summary |suppress|template|this|throws|todo|tutorial|type|typedef|unrestricted|uses|var|variation |version|virtual|writeOnce|yields?) \b' - scope: storage.type.class.jsdoc - captures: - 1: punctuation.definition.block.tag.jsdoc - - include: inline-tags - enum-declaration: - - match: '(?>=|>>>=|\|= - scope: keyword.operator.assignment.compound.bitwise.ts - - match: "<<|>>>|>>" - scope: keyword.operator.bitwise.shift.ts - - match: "===|!==|==|!=" - scope: keyword.operator.comparison.ts - - match: <=|>=|<>|<|> - scope: keyword.operator.relational.ts - - match: \!|&&|\|\| - scope: keyword.operator.logical.ts - - match: \&|~|\^|\| - scope: keyword.operator.bitwise.ts - - match: \= - scope: keyword.operator.assignment.ts - - match: "--" - scope: keyword.operator.decrement.ts - - match: \+\+ - scope: keyword.operator.increment.ts - - match: '%|\*|/|-|\+' - scope: keyword.operator.arithmetic.ts - - match: '(?<=[_$[:alnum:])])\s*(/)(?![/*])' - captures: - 1: keyword.operator.arithmetic.ts - expressionPunctuations: - - include: punctuation-comma - - include: punctuation-accessor - expressionWithoutIdentifiers: - - include: string - - include: regex - - include: template - - include: comment - - include: function-expression - - include: class-expression - - include: arrow-function - - include: cast - - include: ternary-expression - - include: new-expr - - include: object-literal - - include: expression-operators - - include: function-call - - include: literal - - include: support-objects - - include: paren-expression - field-declaration: - - match: '(?) - )) | - ((async\s*)?( - # sure shot arrow functions even if => is on new line - ( - [(]\s* - ( - ([)]\s*:) | # (): - ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: - ) - ) | - ( - [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends - ) | - # arrow function possible to detect only with => on same line - ( - (<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters - \(\s*([_$[:alpha:]\{\[]([^()]|\((\s*[^()]*)?\))*)?\) # parameteres - (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type - \s*=> # arrow operator - ) - )) - )) | - # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) => - (:\s*( - (<) | - ([(]\s*( - ([)]) | - (\.\.\.) | - ([_$[:alnum:]]+\s*( - ([:,?=])| - ([)]\s*=>) - )) - )) - ))) - scope: meta.definition.property.ts entity.name.function.ts - - match: "[_$[:alpha:]][_$[:alnum:]]*" - scope: meta.definition.property.ts variable.object.property.ts - - match: \? - scope: keyword.operator.optional.ts - for-loop: - - match: '(?\(]|(\([^\(\)]*\))|\<\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))([^<>\(]|(\([^\(\)]*\)))*\>)*>\s*)?\()' - push: - - match: '(?<=\))(?!(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\s*(\?\.\s*)?(<\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))([^<>\(]|(\([^\(\)]*\))|\<\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))([^<>\(]|(\([^\(\)]*\)))*\>)*>\s*)?\()' - pop: true - - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*))' - push: - - meta_scope: meta.function-call.ts - - match: '(?=\s*(\?\.\s*)?(<\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))([^<>\(]|(\([^\(\)]*\))|\<\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))([^<>\(]|(\([^\(\)]*\)))*\>)*>\s*)?\()' - pop: true - - include: literal - - include: support-objects - - include: object-identifiers - - include: punctuation-accessor - - match: '(?:(? - captures: - 0: punctuation.definition.typeparameters.end.ts - pop: true - - include: type - - include: punctuation-comma - - include: paren-expression - function-declaration: - - match: '(?) - )) | - ((async\s*)?( - # sure shot arrow functions even if => is on new line - ( - [(]\s* - ( - ([)]\s*:) | # (): - ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: - ) - ) | - ( - [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends - ) | - # arrow function possible to detect only with => on same line - ( - (<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters - \(\s*([_$[:alpha:]\{\[]([^()]|\((\s*[^()]*)?\))*)?\) # parameteres - (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type - \s*=> # arrow operator - ) - )) - )) - captures: - 1: punctuation.accessor.ts - 2: punctuation.accessor.optional.ts - 3: entity.name.function.ts - - match: '(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])' - captures: - 1: punctuation.accessor.ts - 2: punctuation.accessor.optional.ts - 3: variable.other.constant.property.ts - - match: '(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*([_$[:alpha:]][_$[:alnum:]]*)' - captures: - 1: punctuation.accessor.ts - 2: punctuation.accessor.optional.ts - 3: variable.other.property.ts - - match: "([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])" - scope: variable.other.constant.ts - - match: "[_$[:alpha:]][_$[:alnum:]]*" - scope: variable.other.readwrite.ts - import-declaration: - - match: '(?) - )) | - ((async\s*)?( - # sure shot arrow functions even if => is on new line - ( - [(]\s* - ( - ([)]\s*:) | # (): - ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: - ) - ) | - ( - [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends - ) | - # arrow function possible to detect only with => on same line - ( - (<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters - \(\s*([_$[:alpha:]\{\[]([^()]|\((\s*[^()]*)?\))*)?\) # parameteres - (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type - \s*=> # arrow operator - ) - )) - ))) - scope: meta.object.member.ts - captures: - 0: meta.object-literal.key.ts - 1: entity.name.function.ts - - match: '(?:[_$[:alpha:]][_$[:alnum:]]*)\s*(?=:)' - scope: meta.object.member.ts - captures: - 0: meta.object-literal.key.ts - - match: \.\.\. - captures: - 0: keyword.operator.spread.ts - push: - - meta_scope: meta.object.member.ts - - match: '(?=,|\})' - pop: true - - include: expression - - match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(?=,|\}|$)' - scope: meta.object.member.ts - captures: - 1: variable.other.readwrite.ts - - match: '(?=[_$[:alpha:]][_$[:alnum:]]*\s*=)' - push: - - meta_scope: meta.object.member.ts - - match: '(?=,|\}|$)' - pop: true - - include: expression - - match: ":" - captures: - 0: meta.object-literal.key.ts punctuation.separator.key-value.ts - push: - - meta_scope: meta.object.member.ts - - match: '(?=,|\})' - pop: true - - include: expression - - include: punctuation-comma - parameter-array-binding-pattern: - - match: '(?:(\.\.\.)\s*)?(\[)' - captures: - 1: keyword.operator.rest.ts - 2: punctuation.definition.binding-pattern.array.ts - push: - - match: '\]' - captures: - 0: punctuation.definition.binding-pattern.array.ts - pop: true - - include: parameter-binding-element - - include: punctuation-comma - parameter-binding-element: - - include: comment - - include: parameter-object-binding-pattern - - include: parameter-array-binding-pattern - - include: destructuring-parameter-rest - - include: variable-initializer - parameter-name: - - match: \s*\b(public|protected|private|readonly)(?=\s+(public|protected|private|readonly)\s+) - captures: - 1: storage.modifier.ts - - match: |- - (?x)(?:\s*\b(public|private|protected|readonly)\s+)?(\.\.\.)?\s*(?) - )) | - ((async\s*)?( - # sure shot arrow functions even if => is on new line - ( - [(]\s* - ( - ([)]\s*:) | # (): - ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: - ) - ) | - ( - [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends - ) | - # arrow function possible to detect only with => on same line - ( - (<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters - \(\s*([_$[:alpha:]\{\[]([^()]|\((\s*[^()]*)?\))*)?\) # parameteres - (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type - \s*=> # arrow operator - ) - )) - )) | - # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) => - (:\s*( - (<) | - ([(]\s*( - ([)]) | - (\.\.\.) | - ([_$[:alnum:]]+\s*( - ([:,?=])| - ([)]\s*=>) - )) - )) - ))) - captures: - 1: storage.modifier.ts - 2: keyword.operator.rest.ts - 3: entity.name.function.ts variable.language.this.ts - 4: entity.name.function.ts - 5: keyword.operator.optional.ts - - match: '(?x)(?:\s*\b(public|private|protected|readonly)\s+)?(\.\.\.)?\s*(?|&&|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/(?![\/*])[gimuy]*(?!\s*[a-zA-Z0-9_$]))' - captures: - 1: punctuation.definition.string.begin.ts - push: - - meta_scope: string.regexp.ts - - match: "(/)([gimuy]*)" - captures: - 1: punctuation.definition.string.end.ts - 2: keyword.other.ts - pop: true - - include: regexp - - match: '(?]|=[^<]|\<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<])*\>)*>\s*)?\() - captures: - 1: punctuation.accessor.ts - 2: punctuation.accessor.optional.ts - 3: support.constant.dom.ts - 4: support.variable.property.dom.ts - - match: |- - (?x)(?])|((?<=[\}>\]\)]|[_$[:alpha:]])\s*(?=\{)))' - pop: true - - include: type - - match: (:) - captures: - 1: keyword.operator.type.annotation.ts - push: - - meta_scope: meta.type.annotation.ts - - match: '(?])|(?=^\s*$)|((?<=\S)(?=\s*$))|((?<=[\}>\]\)]|[_$[:alpha:]])\s*(?=\{)))' - pop: true - - include: type - type-builtin-literals: - - match: '(?) - )) - ) - ) - ) - push: - - meta_scope: meta.type.function.ts - - match: (?<=\)) - pop: true - - include: function-parameters - type-function-return-type: - - match: (=>)(?=\s*\S) - captures: - 1: storage.type.function.arrow.ts - push: - - meta_scope: meta.type.function.return.ts - - match: '(?)(?]|//|$)' - pop: true - - include: type-function-return-type-core - - match: "=>" - captures: - 0: storage.type.function.arrow.ts - push: - - meta_scope: meta.type.function.return.ts - - match: '(?)(?]|//|^\s*$)|((?<=\S)(?=\s*$)))' - pop: true - - include: type-function-return-type-core - type-function-return-type-core: - - include: comment - - match: '(?<==>)(?=\s*\{)' - push: - - match: '(?<=\})' - pop: true - - include: type-object - - include: type-predicate-operator - - include: type - type-name: - - match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))' - captures: - 1: entity.name.type.module.ts - 2: punctuation.accessor.ts - 3: punctuation.accessor.optional.ts - - match: "[_$[:alpha:]][_$[:alnum:]]*" - scope: entity.name.type.ts - type-object: - - match: '\{' - captures: - 0: punctuation.definition.block.ts - push: - - meta_scope: meta.object.type.ts - - match: '\}' - captures: - 0: punctuation.definition.block.ts - pop: true - - include: comment - - include: method-declaration - - include: indexer-declaration - - include: indexer-mapped-type-declaration - - include: field-declaration - - include: type-annotation - - match: \.\.\. - captures: - 0: keyword.operator.spread.ts - push: - - match: '(?=\}|;|,|$)|(?<=\})' - pop: true - - include: type - - include: punctuation-comma - - include: punctuation-semicolon - - include: type - type-operators: - - include: typeof-operator - - match: '([&|])(?=\s*\{)' - captures: - 0: keyword.operator.type.ts - push: - - match: '(?<=\})' - pop: true - - include: type-object - - match: "[&|]" - captures: - 0: keyword.operator.type.ts - push: - - match: (?=\S) - pop: true - - match: '(?) - captures: - 1: punctuation.definition.typeparameters.end.ts - pop: true - - include: comment - - match: '(?) - scope: keyword.operator.assignment.ts - - include: type - - include: punctuation-comma - type-paren-or-function-parameters: - - match: \( - captures: - 0: meta.brace.round.ts - push: - - meta_scope: meta.type.paren.cover.ts - - match: \) - captures: - 0: meta.brace.round.ts - pop: true - - include: type - - include: function-parameters - type-predicate-operator: - - match: '(?) - )) | - ((async\s*)?( - # sure shot arrow functions even if => is on new line - ( - [(]\s* - ( - ([)]\s*:) | # (): - ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: - ) - ) | - ( - [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends - ) | - # arrow function possible to detect only with => on same line - ( - (<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters - \(\s*([_$[:alpha:]\{\[]([^()]|\((\s*[^()]*)?\))*)?\) # parameteres - (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type - \s*=> # arrow operator - ) - )) - )) | - # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) => - (:\s*( - (<) | - ([(]\s*( - ([)]) | - (\.\.\.) | - ([_$[:alnum:]]+\s*( - ([:,?=])| - ([)]\s*=>) - )) - )) - ))) - captures: - 1: meta.definition.variable.ts entity.name.function.ts - push: - - meta_scope: meta.var-single-variable.expr.ts - - match: '(?=$|^|[;,=}]|(\s+(of|in)\s+))' - pop: true - - include: var-single-variable-type-annotation - - match: "([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])" - captures: - 1: meta.definition.variable.ts variable.other.constant.ts - push: - - meta_scope: meta.var-single-variable.expr.ts - - match: '(?=$|^|[;,=}]|(\s+(of|in)\s+))' - pop: true - - include: var-single-variable-type-annotation - - match: "([_$[:alpha:]][_$[:alnum:]]*)" - captures: - 1: meta.definition.variable.ts variable.other.readwrite.ts - push: - - meta_scope: meta.var-single-variable.expr.ts - - match: '(?=$|^|[;,=}]|(\s+(of|in)\s+))' - pop: true - - include: var-single-variable-type-annotation - var-single-variable-type-annotation: - - include: type-annotation - - include: string - - include: comment - variable-initializer: - - match: (?