diff --git a/.concourse.yml b/.concourse.yml index b08d320e..6974eff4 100644 --- a/.concourse.yml +++ b/.concourse.yml @@ -65,7 +65,7 @@ jobs: - name: pr-validate build_logs_to_retain: 10 public: true - serial: false + serial: true plan: - in_parallel: - get: git-pull-request-resource @@ -114,7 +114,7 @@ jobs: - in_parallel: - task: compile-pr - timeout: 10m + timeout: 20m image: env-glibc config: platform: linux @@ -159,7 +159,7 @@ jobs: status: failure - task: unit-tests-pr - timeout: 10m + timeout: 20m image: env-glibc config: platform: linux @@ -193,7 +193,7 @@ jobs: status: failure - task: pr-win64-cross-build - timeout: 15m + timeout: 20m image: env-glibc config: platform: linux diff --git a/Cargo.lock b/Cargo.lock index 80ce60e9..5cb54dcf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,20 +1,5 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -[[package]] -name = "addr2line" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a55f82cfe485775d02112886f4169bde0c5894d75e79ead7eafe7e40a25e45f7" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" - [[package]] name = "adler32" version = "1.2.0" @@ -45,7 +30,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -80,44 +65,15 @@ checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ "hermit-abi", "libc", - "winapi 0.3.9", + "winapi", ] -[[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.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" -[[package]] -name = "backtrace" -version = "0.3.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d117600f438b1707d4e4ae15d3595657288f8235a0eb593e80ecc98ab34e1bc" -dependencies = [ - "addr2line", - "cfg-if 1.0.0", - "libc", - "miniz_oxide 0.4.3", - "object", - "rustc-demangle", -] - -[[package]] -name = "base64" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" -dependencies = [ - "byteorder", -] - [[package]] name = "base64" version = "0.13.0" @@ -135,9 +91,9 @@ dependencies = [ [[package]] name = "bincode" -version = "1.3.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30d3a39baa26f9651f17b375061f3233dde33424a8b72b0dbe93a68a0bc896d" +checksum = "d175dfa69e619905c4c3cdb7c3c203fa3bdd5d51184e3afdb2742c0280493772" dependencies = [ "byteorder", "serde", @@ -207,20 +163,9 @@ checksum = "63396b8a4b9de3f4fdfb320ab6080762242f66a8ef174c49d8e19b674db4cdbe" [[package]] name = "byteorder" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b" - -[[package]] -name = "bytes" -version = "0.4.12" +version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" -dependencies = [ - "byteorder", - "either", - "iovec", -] +checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" [[package]] name = "bytes" @@ -266,22 +211,22 @@ dependencies = [ "hunspell-rs", "indexmap", "itertools 0.10.0", - "languagetool", "lazy_static", "log", "maplit", "nlprule", "nlprule-build", + "num_cpus", "proc-macro2", "pulldown-cmark", "ra_ap_syntax", "rayon", "regex", "serde", - "signal-hook 0.3.4", + "signal-hook 0.3.7", "syn", "toml", - "url 2.2.1", + "url", "walkdir", "xz2", ] @@ -299,9 +244,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.66" +version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c0496836a84f8d0495758516b8621a622beb77c0fed418570e50764093ced48" +checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd" [[package]] name = "cexpr" @@ -326,9 +271,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clang-sys" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cb92721cb37482245ed88428f72253ce422b3b4ee169c70a0642521bb5db4cc" +checksum = "f54d78e30b388d4815220c8dd03fea5656b6c6d32adb59e89061552a102f8da1" dependencies = [ "glob", "libc", @@ -382,20 +327,11 @@ dependencies = [ "syn", ] -[[package]] -name = "cloudabi" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -dependencies = [ - "bitflags", -] - [[package]] name = "console" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cc80946b3480f421c2f17ed1cb841753a371c7c5104f51d507e13f532c856aa" +checksum = "3993e6445baa160675931ec041a5e03ca84b9c6e32a056150d3aa2bdda0a1f45" dependencies = [ "encode_unicode", "lazy_static", @@ -403,65 +339,15 @@ dependencies = [ "regex", "terminal_size", "unicode-width", - "winapi 0.3.9", + "winapi", ] -[[package]] -name = "const_fn" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b9d6de7f49e22cf97ad17fc4036ece69300032f45f78f30b4a4482cdc3f4a6" - [[package]] name = "constant_time_eq" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" -[[package]] -name = "cookie" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5" -dependencies = [ - "time", - "url 1.7.2", -] - -[[package]] -name = "cookie_store" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46750b3f362965f197996c4448e4a0935e791bf7d6631bfce9ee0af3d24c919c" -dependencies = [ - "cookie", - "failure", - "idna 0.1.5", - "log", - "publicsuffix", - "serde", - "serde_json", - "time", - "try_from", - "url 1.7.2", -] - -[[package]] -name = "core-foundation" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" - [[package]] name = "countme" version = "2.0.4" @@ -473,6 +359,12 @@ dependencies = [ "rustc-hash", ] +[[package]] +name = "cov-mark" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ffa3d3e0138386cd4361f63537765cac7ee40698028844635a54495a92f67f3" + [[package]] name = "crc32fast" version = "1.2.1" @@ -489,18 +381,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775" dependencies = [ "cfg-if 1.0.0", - "crossbeam-utils 0.8.1", -] - -[[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", - "crossbeam-utils 0.7.2", - "maybe-uninit", + "crossbeam-utils", ] [[package]] @@ -510,68 +391,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9" dependencies = [ "cfg-if 1.0.0", - "crossbeam-epoch 0.9.1", - "crossbeam-utils 0.8.1", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" -dependencies = [ - "autocfg 1.0.1", - "cfg-if 0.1.10", - "crossbeam-utils 0.7.2", - "lazy_static", - "maybe-uninit", - "memoffset 0.5.6", - "scopeguard", + "crossbeam-epoch", + "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.1" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1aaa739f95311c2c7887a76863f500026092fb1dce0161dab577e559ef3569d" +checksum = "2584f639eb95fea8c798496315b297cf81b9b58b6d30ab066a75455333cf4b12" dependencies = [ "cfg-if 1.0.0", - "const_fn", - "crossbeam-utils 0.8.1", + "crossbeam-utils", "lazy_static", - "memoffset 0.6.1", + "memoffset", "scopeguard", ] -[[package]] -name = "crossbeam-queue" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" -dependencies = [ - "cfg-if 0.1.10", - "crossbeam-utils 0.7.2", - "maybe-uninit", -] - -[[package]] -name = "crossbeam-utils" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" -dependencies = [ - "autocfg 1.0.1", - "cfg-if 0.1.10", - "lazy_static", -] - [[package]] name = "crossbeam-utils" -version = "0.8.1" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d" +checksum = "e7e9d99fa91428effe99c5c6d4634cdeba32b8cf784fc428a2a687f61a952c49" dependencies = [ - "autocfg 1.0.1", + "autocfg", "cfg-if 1.0.0", "lazy_static", ] @@ -586,10 +429,10 @@ dependencies = [ "crossterm_winapi", "lazy_static", "libc", - "mio 0.7.8", - "parking_lot 0.11.1", + "mio", + "parking_lot", "signal-hook 0.1.17", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -598,7 +441,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0da8964ace4d3e4a044fd027919b2237000b24315a37c916f61809f1ff2140b9" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -639,25 +482,19 @@ checksum = "8e93d7f5705de3e49895a2b5e0b8855a1c27f080192ae9c32a6432d50741a57a" dependencies = [ "libc", "redox_users", - "winapi 0.3.9", + "winapi", ] -[[package]] -name = "dissimilar" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4b29f4b9bb94bf267d57269fd0706d343a160937108e9619fe380645428abb" - [[package]] name = "docopt" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f525a586d310c87df72ebcd98009e57f1cc030c8c268305287a476beb653969" +checksum = "7f3f119846c823f9eafcf953a8f6ffb6ed69bf6240883261a7f13b634579a51f" dependencies = [ "lazy_static", "regex", "serde", - "strsim 0.9.3", + "strsim 0.10.0", ] [[package]] @@ -666,12 +503,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bda8e21c04aca2ae33ffc2fd8c23134f3cac46db123ba97bd9d3f3b8a4a85e1" -[[package]] -name = "dtoa" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d7ed2934d741c6b37e33e3832298e8850b53fd2d2bea03873375596c7cea4e" - [[package]] name = "either" version = "1.6.1" @@ -734,37 +565,6 @@ dependencies = [ "termcolor", ] -[[package]] -name = "error-chain" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" -dependencies = [ - "version_check", -] - -[[package]] -name = "failure" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" -dependencies = [ - "backtrace", - "failure_derive", -] - -[[package]] -name = "failure_derive" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - [[package]] name = "fancy-regex" version = "0.5.0" @@ -784,7 +584,7 @@ dependencies = [ "cfg-if 0.1.10", "crc32fast", "libc", - "miniz_oxide 0.3.7", + "miniz_oxide", ] [[package]] @@ -793,21 +593,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "form_urlencoded" version = "1.0.1" @@ -815,7 +600,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" dependencies = [ "matches", - "percent-encoding 2.1.0", + "percent-encoding", ] [[package]] @@ -830,70 +615,32 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d79238883cf0307100b90aba4a755d8051a3182305dfe7f649a1e9dc0517006f" -[[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", - "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 = "futures" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7e4c2612746b0df8fed4ce0c69156021b704c9aefa360311c04e6e9e002eed" - [[package]] name = "futures-channel" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2d31b7ec7efab6eefc7c57233bb10b847986139d88cc2f5a02a1ae6871a1846" +checksum = "8c2dd2df839b57db9ab69c2c9d8f3e8c81984781937fe2807dc6dcf3b2ad2939" dependencies = [ "futures-core", ] [[package]] name = "futures-core" -version = "0.3.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79e5145dde8da7d1b3892dad07a9c98fc04bc39892b1ecc9692cf53e2b780a65" - -[[package]] -name = "futures-cpupool" -version = "0.1.8" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" -dependencies = [ - "futures", - "num_cpus", -] +checksum = "15496a72fabf0e62bdc3df11a59a3787429221dd0710ba8ef163d6f7a9112c94" [[package]] name = "futures-io" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28be053525281ad8259d47e4de5de657b25e7bac113458555bb4b70bc6870500" +checksum = "d71c2c65c57704c32f5241c1223167c2c3294fd34ac020c807ddbe6db287ba59" [[package]] name = "futures-macro" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c287d25add322d9f9abdcdc5927ca398917996600182178774032e9f8258fedd" +checksum = "ea405816a5139fb39af82c2beb921d52143f556038378d6db21183a5c37fbfb7" dependencies = [ "proc-macro-hack", "proc-macro2", @@ -903,24 +650,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf5c69029bda2e743fddd0582d1083951d65cc9539aebf8812f36c3491342d6" +checksum = "85754d98985841b7d4f5e8e6fbfa4a4ac847916893ec511a2917ccd8525b8bb3" [[package]] name = "futures-task" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13de07eb8ea81ae445aca7b69f5f7bf15d7bf4912d8ca37d6645c77ae8a58d86" -dependencies = [ - "once_cell", -] +checksum = "fa189ef211c15ee602667a6fcfe1c1fd9e07d42250d2156382820fba33c9df80" [[package]] name = "futures-util" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "632a8cd0f2a4b3fdea1657f08bde063848c3bd00f9bbf6e256b8be78802e624b" +checksum = "1812c7ab8aedf8d6f2701a43e1243acdbcc2b36ab26e2ad421eb99ac963d96d1" dependencies = [ "futures-core", "futures-io", @@ -954,23 +698,6 @@ dependencies = [ "wasi 0.9.0+wasi-snapshot-preview1", ] -[[package]] -name = "getrandom" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", -] - -[[package]] -name = "gimli" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce" - [[package]] name = "glob" version = "0.3.0" @@ -979,40 +706,21 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] name = "h2" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" -dependencies = [ - "byteorder", - "bytes 0.4.12", - "fnv", - "futures", - "http 0.1.21", - "indexmap", - "log", - "slab", - "string", - "tokio-io", -] - -[[package]] -name = "h2" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b67e66362108efccd8ac053abafc8b7a8d86a37e6e48fc4f6f7485eb5e9e6a5" +checksum = "d832b01df74254fe364568d6ddc294443f61cbec82816b60904303af87efae78" dependencies = [ - "bytes 1.0.1", + "bytes", "fnv", "futures-core", "futures-sink", "futures-util", - "http 0.2.3", + "http", "indexmap", "slab", - "tokio 1.2.0", + "tokio", "tokio-util", "tracing", - "tracing-futures", ] [[package]] @@ -1048,48 +756,25 @@ dependencies = [ "libc", ] -[[package]] -name = "http" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0" -dependencies = [ - "bytes 0.4.12", - "fnv", - "itoa", -] - [[package]] name = "http" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7245cd7449cc792608c3c8a9eaf69bd4eabbabf802713748fd739c98b82f0747" dependencies = [ - "bytes 1.0.1", + "bytes", "fnv", "itoa", ] -[[package]] -name = "http-body" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" -dependencies = [ - "bytes 0.4.12", - "futures", - "http 0.1.21", - "tokio-buf", -] - [[package]] name = "http-body" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2861bd27ee074e5ee891e8b539837a9430012e249d7f0ca2d795650f579c1994" dependencies = [ - "bytes 1.0.1", - "http 0.2.3", + "bytes", + "http", ] [[package]] @@ -1139,58 +824,28 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "hyper" -version = "0.12.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c843caf6296fc1f93444735205af9ed4e109a539005abb2564ae1d6fad34c52" -dependencies = [ - "bytes 0.4.12", - "futures", - "futures-cpupool", - "h2 0.1.26", - "http 0.1.21", - "http-body 0.1.0", - "httparse", - "iovec", - "itoa", - "log", - "net2", - "rustc_version", - "time", - "tokio 0.1.22", - "tokio-buf", - "tokio-executor", - "tokio-io", - "tokio-reactor", - "tokio-tcp", - "tokio-threadpool", - "tokio-timer", - "want 0.2.0", -] - [[package]] name = "hyper" version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8e946c2b1349055e0b72ae281b238baf1a3ea7307c7e9f9d64673bdd9c26ac7" dependencies = [ - "bytes 1.0.1", + "bytes", "futures-channel", "futures-core", "futures-util", - "h2 0.3.0", - "http 0.2.3", - "http-body 0.4.0", + "h2", + "http", + "http-body", "httparse", "httpdate", "itoa", "pin-project", "socket2", - "tokio 1.2.0", + "tokio", "tower-service", "tracing", - "want 0.3.0", + "want", ] [[package]] @@ -1200,38 +855,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f9f7a97316d44c0af9b0301e65010573a853a9fc97046d7331d7f6bc0fd5a64" dependencies = [ "futures-util", - "hyper 0.14.4", + "hyper", "log", "rustls", - "tokio 1.2.0", + "tokio", "tokio-rustls", "webpki", ] -[[package]] -name = "hyper-tls" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a800d6aa50af4b5850b2b0f659625ce9504df908e9733b635720483be26174f" -dependencies = [ - "bytes 0.4.12", - "futures", - "hyper 0.12.36", - "native-tls", - "tokio-io", -] - -[[package]] -name = "idna" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", -] - [[package]] name = "idna" version = "0.2.2" @@ -1245,11 +876,11 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.6.1" +version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb1fa934250de4de8aef298d81c729a7d33d8c239daa3a7575e6b92bfc7313b" +checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3" dependencies = [ - "autocfg 1.0.1", + "autocfg", "hashbrown", "rayon", "serde", @@ -1264,15 +895,6 @@ dependencies = [ "cfg-if 1.0.0", ] -[[package]] -name = "iovec" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" -dependencies = [ - "libc", -] - [[package]] name = "ipnet" version = "2.3.0" @@ -1305,34 +927,13 @@ checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" [[package]] name = "js-sys" -version = "0.3.47" +version = "0.3.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cfb73131c35423a367daf8cbd24100af0d077668c8c2943f0e7dd775fef0f65" +checksum = "dc9f84f9b115ce7843d60706df1422a916680bfdfcbdb0447c5614ff9d7e4d78" dependencies = [ "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", - "winapi-build", -] - -[[package]] -name = "languagetool" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c34e53e49c3b35d881e26bdd2d3af25c287c3467729f06d16d57234c86df80d6" -dependencies = [ - "reqwest 0.9.24", - "serde", - "serde_json", -] - [[package]] name = "lazy_static" version = "1.4.0" @@ -1347,27 +948,18 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.86" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c" +checksum = "538c092e5586f4cdd7dd8078c4a79220e3e168880218124dcbce860f0ea938c6" [[package]] name = "libloading" -version = "0.6.7" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883" +checksum = "6f84d96438c15fcd6c3f244c8fce01d1e2b9c6b5623e9c711dc9286d8fc92d6a" dependencies = [ "cfg-if 1.0.0", - "winapi 0.3.9", -] - -[[package]] -name = "lock_api" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75" -dependencies = [ - "scopeguard", + "winapi", ] [[package]] @@ -1411,34 +1003,19 @@ 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.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" -[[package]] -name = "memoffset" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa" -dependencies = [ - "autocfg 1.0.1", -] - [[package]] name = "memoffset" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87" dependencies = [ - "autocfg 1.0.1", + "autocfg", ] [[package]] @@ -1447,16 +1024,6 @@ 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", - "unicase", -] - [[package]] name = "miniz_oxide" version = "0.3.7" @@ -1466,58 +1033,17 @@ dependencies = [ "adler32", ] -[[package]] -name = "miniz_oxide" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f2d26ec3309788e423cfbf68ad1800f061638098d76a83681af979dc4eda19d" -dependencies = [ - "adler", - "autocfg 1.0.1", -] - -[[package]] -name = "mio" -version = "0.6.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" -dependencies = [ - "cfg-if 0.1.10", - "fuchsia-zircon", - "fuchsia-zircon-sys", - "iovec", - "kernel32-sys", - "libc", - "log", - "miow 0.2.2", - "net2", - "slab", - "winapi 0.2.8", -] - [[package]] name = "mio" -version = "0.7.8" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc250d6848c90d719ea2ce34546fb5df7af1d3fd189d10bf7bad80bfcebecd95" +checksum = "2182a122f3b7f3f5329cb1972cee089ba2459a0a80a56935e6e674f096f8d839" dependencies = [ "libc", "log", - "miow 0.3.6", + "miow", "ntapi", - "winapi 0.3.9", -] - -[[package]] -name = "miow" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" -dependencies = [ - "kernel32-sys", - "net2", - "winapi 0.2.8", - "ws2_32-sys", + "winapi", ] [[package]] @@ -1527,36 +1053,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a33c1b55807fbed163481b5ba66db4b2fa6cde694a5027be10fb724206c5897" dependencies = [ "socket2", - "winapi 0.3.9", -] - -[[package]] -name = "native-tls" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8d96b2e1c8da3957d58100b09f102c6d9cfdfced01b7ec5a8974044bb09dbd4" -dependencies = [ - "lazy_static", - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - -[[package]] -name = "net2" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" -dependencies = [ - "cfg-if 0.1.10", - "libc", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1603,7 +1100,7 @@ dependencies = [ "flate2", "fs-err", "nlprule", - "reqwest 0.11.1", + "reqwest", "thiserror", "zip", ] @@ -1624,7 +1121,7 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1637,17 +1134,11 @@ dependencies = [ "libc", ] -[[package]] -name = "object" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a7ab5d64814df0fe4a4b5ead45ed6c5f181ee3ff04ba344313a6c80446c5d4" - [[package]] name = "once_cell" -version = "1.5.2" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0" +checksum = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3" [[package]] name = "onig" @@ -1671,56 +1162,12 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "openssl" -version = "0.10.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038d43985d1ddca7a9900630d8cd031b56e4794eecc2e9ea39dd17aa04399a70" -dependencies = [ - "bitflags", - "cfg-if 1.0.0", - "foreign-types", - "lazy_static", - "libc", - "openssl-sys", -] - -[[package]] -name = "openssl-probe" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" - -[[package]] -name = "openssl-sys" -version = "0.9.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "921fc71883267538946025deffb622905ecad223c28efbfdef9bb59a0175f3e6" -dependencies = [ - "autocfg 1.0.1", - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "os_str_bytes" version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afb2e1c3ee07430c2cf76151675e583e0f19985fa6efae47d6848a3e2c824f85" -[[package]] -name = "parking_lot" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" -dependencies = [ - "lock_api 0.3.4", - "parking_lot_core 0.6.2", - "rustc_version", -] - [[package]] name = "parking_lot" version = "0.11.1" @@ -1728,23 +1175,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" dependencies = [ "instant", - "lock_api 0.4.2", - "parking_lot_core 0.8.3", -] - -[[package]] -name = "parking_lot_core" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" -dependencies = [ - "cfg-if 0.1.10", - "cloudabi", - "libc", - "redox_syscall 0.1.57", - "rustc_version", - "smallvec 0.6.14", - "winapi 0.3.9", + "lock_api", + "parking_lot_core", ] [[package]] @@ -1757,8 +1189,8 @@ dependencies = [ "instant", "libc", "redox_syscall 0.2.5", - "smallvec 1.6.1", - "winapi 0.3.9", + "smallvec", + "winapi", ] [[package]] @@ -1767,12 +1199,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" -[[package]] -name = "percent-encoding" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" - [[package]] name = "percent-encoding" version = "2.1.0" @@ -1820,9 +1246,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439697af366c49a6d0a010c56a0d97685bc140ce0d377b13a2ea2aa42d64a827" +checksum = "dc0e1f259c92177c30a4c9d177246edd0a3568b25756a977d0632cf8fa37e905" [[package]] name = "pin-utils" @@ -1836,12 +1262,6 @@ version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" -[[package]] -name = "ppv-lite86" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" - [[package]] name = "proc-macro-error" version = "1.0.4" @@ -1887,19 +1307,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "publicsuffix" -version = "1.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bbaa49075179162b49acac1c6aa45fb4dafb5f13cf6794276d77bc7fd95757b" -dependencies = [ - "error-chain", - "idna 0.2.2", - "lazy_static", - "regex", - "url 2.2.1", -] - [[package]] name = "pulldown-cmark" version = "0.8.0" @@ -1929,24 +1336,24 @@ dependencies = [ [[package]] name = "ra_ap_la-arena" -version = "0.0.38" +version = "0.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3bafc0aa7d8024d6d64fb07562e28d9dc30bd80497635d21321c8e0b39845b3" +checksum = "14d569d0360f4f91af413f1ec6894d12bcc68b055490d3a2b816d8809b2669a4" [[package]] name = "ra_ap_parser" -version = "0.0.38" +version = "0.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0848834768a18bf4a0787d5872af9ace2b41e48dd5ddf202fdbf5a552ceb3df0" +checksum = "fc94789ac6d4c66dbf6a2829d117c38e49cb918aa48280f19dbbb9fc2e27de42" dependencies = [ "drop_bomb", ] [[package]] name = "ra_ap_profile" -version = "0.0.38" +version = "0.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833f276679d1ee093236294d4a3f07787f7567141c65ff30c2ad276cadb984bc" +checksum = "07eba074bae03521aacb12578178b9c4a7f9bfb6eee86e67ea18886bc35d1eca" dependencies = [ "cfg-if 1.0.0", "countme", @@ -1958,27 +1365,27 @@ dependencies = [ [[package]] name = "ra_ap_stdx" -version = "0.0.38" +version = "0.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb3c8c1f17832cc5e10467b131def046f3dafeba1e12f2a35cd2af4614df95db" +checksum = "eedbc67e2bed7c6f0da25961d993aaa343518837ccc6b64822708c715f5c6747" dependencies = [ "always-assert", ] [[package]] name = "ra_ap_syntax" -version = "0.0.38" +version = "0.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1709e9fd7e597d0fc9b6e9a8ac6c40cce85879bf1b25eb1d6e03683af9b670a2" +checksum = "67ac2c883077129059296637073e83124fb7eb92b5675fcd7fb2e69a5240f223" dependencies = [ "arrayvec", + "cov-mark", "indexmap", "itertools 0.10.0", "once_cell", "ra_ap_parser", "ra_ap_profile", "ra_ap_stdx", - "ra_ap_test_utils", "ra_ap_text_edit", "rowan", "rustc-ap-rustc_lexer", @@ -1987,183 +1394,23 @@ dependencies = [ "smol_str", ] -[[package]] -name = "ra_ap_test_utils" -version = "0.0.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b75ac23856c87960ac54a15302f8d61de14645e4b0c8145a2f3b92e465c88fd" -dependencies = [ - "dissimilar", - "ra_ap_profile", - "ra_ap_stdx", - "rustc-hash", - "serde_json", - "text-size", -] - [[package]] name = "ra_ap_text_edit" -version = "0.0.38" +version = "0.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fac103f98d2127264002eb55c4e1e4040c7122a0515660cba91f7aea239778e6" +checksum = "b32f86e4d397f6f22397e91ee26e6d502ac61c78a47293aa6a6a18e47ce17e77" dependencies = [ "text-size", ] -[[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", - "rand_xorshift", - "winapi 0.3.9", -] - -[[package]] -name = "rand" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e" -dependencies = [ - "libc", - "rand_chacha 0.3.0", - "rand_core 0.6.2", - "rand_hc 0.3.0", -] - -[[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.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.2", -] - -[[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.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7" -dependencies = [ - "getrandom 0.2.2", -] - -[[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.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73" -dependencies = [ - "rand_core 0.6.2", -] - -[[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.9", -] - -[[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.9", -] - -[[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_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.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674" dependencies = [ - "autocfg 1.0.1", - "crossbeam-deque 0.8.0", + "autocfg", + "crossbeam-deque", "either", "rayon-core", ] @@ -2186,21 +1433,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a" dependencies = [ "crossbeam-channel", - "crossbeam-deque 0.8.0", - "crossbeam-utils 0.8.1", + "crossbeam-deque", + "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 = "redox_syscall" version = "0.1.57" @@ -2222,105 +1460,61 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d" dependencies = [ - "getrandom 0.1.16", + "getrandom", "redox_syscall 0.1.57", "rust-argon2", ] [[package]] name = "regex" -version = "1.4.3" +version = "1.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a" +checksum = "957056ecddbeba1b26965114e191d2e8589ce74db242b6ea25fc4062427a5c19" dependencies = [ "aho-corasick", "memchr", "regex-syntax", - "thread_local", ] [[package]] name = "regex-syntax" -version = "0.6.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581" - -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi 0.3.9", -] - -[[package]] -name = "reqwest" -version = "0.9.24" +version = "0.6.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f88643aea3c1343c804950d7bf983bd2067f5ab59db6d613a08e05572f2714ab" -dependencies = [ - "base64 0.10.1", - "bytes 0.4.12", - "cookie", - "cookie_store", - "encoding_rs", - "flate2", - "futures", - "http 0.1.21", - "hyper 0.12.36", - "hyper-tls", - "log", - "mime", - "mime_guess", - "native-tls", - "serde", - "serde_json", - "serde_urlencoded 0.5.5", - "time", - "tokio 0.1.22", - "tokio-executor", - "tokio-io", - "tokio-threadpool", - "tokio-timer", - "url 1.7.2", - "uuid", - "winreg 0.6.2", -] +checksum = "24d5f089152e60f62d28b835fbff2cd2e8dc0baf1ac13343bef92ab7eed84548" [[package]] name = "reqwest" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0460542b551950620a3648c6aa23318ac6b3cd779114bd873209e6e8b5eb1c34" +checksum = "bf12057f289428dbf5c591c74bf10392e4a8003f993405a902f20117019022d4" dependencies = [ - "base64 0.13.0", - "bytes 1.0.1", + "base64", + "bytes", "encoding_rs", "futures-core", "futures-util", - "http 0.2.3", - "http-body 0.4.0", - "hyper 0.14.4", + "http", + "http-body", + "hyper", "hyper-rustls", "ipnet", "js-sys", "lazy_static", "log", "mime", - "percent-encoding 2.1.0", + "percent-encoding", "pin-project-lite", "rustls", "serde", - "serde_urlencoded 0.7.0", - "tokio 1.2.0", + "serde_urlencoded", + "tokio", "tokio-rustls", - "url 2.2.1", + "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", "webpki-roots", - "winreg 0.7.0", + "winreg", ] [[package]] @@ -2335,7 +1529,7 @@ dependencies = [ "spin", "untrusted", "web-sys", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -2346,7 +1540,7 @@ checksum = "a1b36e449f3702f3b0c821411db1cbdf30fb451726a9456dce5dabcd44420043" dependencies = [ "countme", "hashbrown", - "memoffset 0.6.1", + "memoffset", "rustc-hash", "text-size", ] @@ -2366,49 +1560,34 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb" dependencies = [ - "base64 0.13.0", + "base64", "blake2b_simd", "constant_time_eq", - "crossbeam-utils 0.8.1", + "crossbeam-utils", ] [[package]] name = "rustc-ap-rustc_lexer" -version = "705.0.0" +version = "710.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a030d00510966cd31e13dca5e6c1bd40d303a932c54eca40e854188bca8c49e" +checksum = "b0bba1ca6787b6d4af505b7a940eae9ecb084dd03e07f03bf3ddbf78e738b617" dependencies = [ "unicode-xid", ] -[[package]] -name = "rustc-demangle" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e3bad0ee36814ca07d7968269dd4b7ec89ec2da10c4bb613928d3077083c232" - [[package]] name = "rustc-hash" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver", -] - [[package]] name = "rustls" version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "064fd21ff87c6e87ed4506e68beb42459caa4a0e2eb144932e6776768556980b" dependencies = [ - "base64 0.13.0", + "base64", "log", "ring", "sct", @@ -2430,16 +1609,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "schannel" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" -dependencies = [ - "lazy_static", - "winapi 0.3.9", -] - [[package]] name = "scopeguard" version = "1.1.0" @@ -2456,49 +1625,11 @@ dependencies = [ "untrusted", ] -[[package]] -name = "security-framework" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1759c2e3c8580017a484a7ac56d3abc5a6c1feadf88db2f3633f12ae4268c69" -dependencies = [ - "bitflags", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f99b9d5e26d2a71633cc4f2ebae7cc9f874044e0c351a27e17892d76dce5678b" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - [[package]] name = "serde" -version = "1.0.123" +version = "1.0.124" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d5161132722baa40d802cc70b15262b98258453e85e5d1d365c757c73869ae" +checksum = "bd761ff957cb2a45fbb9ab3da6512de9de55872866160b23c25f1a841e99d29f" dependencies = [ "serde_derive", ] @@ -2517,9 +1648,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.123" +version = "1.0.124" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9391c295d64fc0abb2c556bad848f33cb8296276b1ad2677d1ae1ace4f258f31" +checksum = "1800f7693e94e186f5e25a28291ae1570da908aff7d97a095dec1e56ff99069b" dependencies = [ "proc-macro2", "quote", @@ -2528,9 +1659,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.62" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea1c6153794552ea7cf7cf63b1231a25de00ec90db326ba6264440fa08e31486" +checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79" dependencies = [ "itoa", "ryu", @@ -2547,18 +1678,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_urlencoded" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "642dd69105886af2efd227f75a520ec9b44a820d65bc133a9131f7d229fd165a" -dependencies = [ - "dtoa", - "itoa", - "serde", - "url 1.7.2", -] - [[package]] name = "serde_urlencoded" version = "0.7.0" @@ -2584,15 +1703,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e31d442c16f047a671b5a71e2161d6e68814012b7f5379d269ebd915fac2729" dependencies = [ "libc", - "mio 0.7.8", + "mio", "signal-hook-registry", ] [[package]] name = "signal-hook" -version = "0.3.4" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "780f5e3fe0c66f67197236097d89de1e86216f1f6fdeaf47c442f854ab46c240" +checksum = "6aa894ef3fade0ee7243422f4fbbd6c2b48e6de767e621d37ef65f2310f53cea" dependencies = [ "libc", "signal-hook-registry", @@ -2613,15 +1732,6 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" -[[package]] -name = "smallvec" -version = "0.6.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0" -dependencies = [ - "maybe-uninit", -] - [[package]] name = "smallvec" version = "1.6.1" @@ -2645,7 +1755,7 @@ checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" dependencies = [ "cfg-if 1.0.0", "libc", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -2667,27 +1777,12 @@ dependencies = [ "thiserror", ] -[[package]] -name = "string" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" -dependencies = [ - "bytes 0.4.12", -] - [[package]] name = "strsim" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" -[[package]] -name = "strsim" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" - [[package]] name = "strsim" version = "0.10.0" @@ -2696,41 +1791,15 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "syn" -version = "1.0.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c700597eca8a5a762beb35753ef6b94df201c81cca676604f547495a0d7f0081" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "synstructure" -version = "0.12.4" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701" +checksum = "3fd9d1e9976102a03c542daa2eff1b43f9d72306342f3f8b3ed5fb8908195d6f" dependencies = [ "proc-macro2", "quote", - "syn", "unicode-xid", ] -[[package]] -name = "tempfile" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "rand 0.8.3", - "redox_syscall 0.2.5", - "remove_dir_all", - "winapi 0.3.9", -] - [[package]] name = "termcolor" version = "1.1.2" @@ -2747,7 +1816,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86ca8ced750734db02076f44132d802af0b33b09942331f4459dde8636fd2406" dependencies = [ "libc", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -2794,15 +1863,6 @@ dependencies = [ "syn", ] -[[package]] -name = "thread_local" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" -dependencies = [ - "once_cell", -] - [[package]] name = "time" version = "0.1.44" @@ -2811,7 +1871,7 @@ checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" dependencies = [ "libc", "wasi 0.10.0+wasi-snapshot-preview1", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -2831,99 +1891,19 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" -dependencies = [ - "bytes 0.4.12", - "futures", - "mio 0.6.23", - "num_cpus", - "tokio-current-thread", - "tokio-executor", - "tokio-io", - "tokio-reactor", - "tokio-tcp", - "tokio-threadpool", - "tokio-timer", -] - -[[package]] -name = "tokio" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8190d04c665ea9e6b6a0dc45523ade572c088d2e6566244c1122671dbf4ae3a" +checksum = "8d56477f6ed99e10225f38f9f75f872f29b8b8bd8c0b946f63345bb144e9eeda" dependencies = [ - "autocfg 1.0.1", - "bytes 1.0.1", + "autocfg", + "bytes", "libc", "memchr", - "mio 0.7.8", + "mio", "num_cpus", "pin-project-lite", ] -[[package]] -name = "tokio-buf" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" -dependencies = [ - "bytes 0.4.12", - "either", - "futures", -] - -[[package]] -name = "tokio-current-thread" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e" -dependencies = [ - "futures", - "tokio-executor", -] - -[[package]] -name = "tokio-executor" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671" -dependencies = [ - "crossbeam-utils 0.7.2", - "futures", -] - -[[package]] -name = "tokio-io" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" -dependencies = [ - "bytes 0.4.12", - "futures", - "log", -] - -[[package]] -name = "tokio-reactor" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351" -dependencies = [ - "crossbeam-utils 0.7.2", - "futures", - "lazy_static", - "log", - "mio 0.6.23", - "num_cpus", - "parking_lot 0.9.0", - "slab", - "tokio-executor", - "tokio-io", - "tokio-sync", -] - [[package]] name = "tokio-rustls" version = "0.22.0" @@ -2931,75 +1911,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6" dependencies = [ "rustls", - "tokio 1.2.0", + "tokio", "webpki", ] -[[package]] -name = "tokio-sync" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee" -dependencies = [ - "fnv", - "futures", -] - -[[package]] -name = "tokio-tcp" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72" -dependencies = [ - "bytes 0.4.12", - "futures", - "iovec", - "mio 0.6.23", - "tokio-io", - "tokio-reactor", -] - -[[package]] -name = "tokio-threadpool" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89" -dependencies = [ - "crossbeam-deque 0.7.3", - "crossbeam-queue", - "crossbeam-utils 0.7.2", - "futures", - "lazy_static", - "log", - "num_cpus", - "slab", - "tokio-executor", -] - -[[package]] -name = "tokio-timer" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296" -dependencies = [ - "crossbeam-utils 0.7.2", - "futures", - "slab", - "tokio-executor", -] - [[package]] name = "tokio-util" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebb7cb2f00c5ae8df755b252306272cd1790d39728363936e01827e11f0b017b" +checksum = "ec31e5cc6b46e653cf57762f36f71d5e6386391d88a72fd6db4508f8f676fb29" dependencies = [ - "bytes 1.0.1", + "bytes", "futures-core", "futures-sink", "log", "pin-project-lite", - "tokio 1.2.0", + "tokio", ] [[package]] @@ -3019,9 +1946,9 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] name = "tracing" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f77d3842f76ca899ff2dbcf231c5c65813dea431301d6eb686279c15c4464f12" +checksum = "01ebdc2bb4498ab1ab5f5b73c5803825e60199229ccba0698170e3be0e7f959f" dependencies = [ "cfg-if 1.0.0", "pin-project-lite", @@ -3037,31 +1964,12 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - [[package]] name = "try-lock" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" -[[package]] -name = "try_from" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "283d3b89e1368717881a9d51dad843cc435380d8109c9e47d38780a324698d8b" -dependencies = [ - "cfg-if 0.1.10", -] - [[package]] name = "unicase" version = "2.6.0" @@ -3113,17 +2021,6 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" -[[package]] -name = "url" -version = "1.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" -dependencies = [ - "idna 0.1.5", - "matches", - "percent-encoding 1.0.1", -] - [[package]] name = "url" version = "2.2.1" @@ -3131,27 +2028,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ccd964113622c8e9322cfac19eb1004a07e636c545f325da085d5cdde6f1f8b" dependencies = [ "form_urlencoded", - "idna 0.2.2", + "idna", "matches", - "percent-encoding 2.1.0", + "percent-encoding", "serde", ] -[[package]] -name = "uuid" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a" -dependencies = [ - "rand 0.6.5", -] - -[[package]] -name = "vcpkg" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b00bca6106a5e23f3eee943593759b7fcddb00554332e856d990c893966879fb" - [[package]] name = "vec_map" version = "0.8.2" @@ -3160,9 +2042,9 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" +checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" [[package]] name = "walkdir" @@ -3171,21 +2053,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" dependencies = [ "same-file", - "winapi 0.3.9", + "winapi", "winapi-util", ] -[[package]] -name = "want" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230" -dependencies = [ - "futures", - "log", - "try-lock", -] - [[package]] name = "want" version = "0.3.0" @@ -3210,9 +2081,9 @@ checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" [[package]] name = "wasm-bindgen" -version = "0.2.70" +version = "0.2.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55c0f7123de74f0dab9b7d00fd614e7b19349cd1e2f5252bbe9b1754b59433be" +checksum = "7ee1280240b7c461d6a0071313e08f34a60b0365f14260362e5a2b17d1d31aa7" dependencies = [ "cfg-if 1.0.0", "serde", @@ -3222,9 +2093,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.70" +version = "0.2.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bc45447f0d4573f3d65720f636bbcc3dd6ce920ed704670118650bcd47764c7" +checksum = "5b7d8b6942b8bb3a9b0e73fc79b98095a27de6fa247615e59d096754a3bc2aa8" dependencies = [ "bumpalo", "lazy_static", @@ -3237,9 +2108,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.20" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3de431a2910c86679c34283a33f66f4e4abd7e0aec27b6669060148872aadf94" +checksum = "8e67a5806118af01f0d9045915676b22aaebecf4178ae7021bc171dab0b897ab" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -3249,9 +2120,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.70" +version = "0.2.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b8853882eef39593ad4174dd26fc9865a64e84026d223f63bb2c42affcbba2c" +checksum = "e5ac38da8ef716661f0f36c0d8320b89028efe10c7c0afde65baffb496ce0d3b" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3259,9 +2130,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.70" +version = "0.2.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4133b5e7f2a531fa413b3a1695e925038a05a71cf67e87dafa295cb645a01385" +checksum = "cc053ec74d454df287b9374ee8abb36ffd5acb95ba87da3ba5b7d3fe20eb401e" dependencies = [ "proc-macro2", "quote", @@ -3272,15 +2143,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.70" +version = "0.2.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd4945e4943ae02d15c13962b38a5b1e81eadd4b71214eee75af64a4d6a4fd64" +checksum = "7d6f8ec44822dd71f5f221a5847fb34acd9060535c1211b70a05844c0f6383b1" [[package]] name = "web-sys" -version = "0.3.47" +version = "0.3.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c40dc691fc48003eba817c38da7113c15698142da971298003cac3ef175680b3" +checksum = "ec600b26223b2948cedfde2a0aa6756dcf1fef616f43d7b3097aaf53a6c4d92b" dependencies = [ "js-sys", "wasm-bindgen", @@ -3314,12 +2185,6 @@ dependencies = [ "libc", ] -[[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.9" @@ -3330,12 +2195,6 @@ dependencies = [ "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" @@ -3348,7 +2207,7 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -3357,32 +2216,13 @@ 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.9", -] - [[package]] name = "winreg" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" dependencies = [ - "winapi 0.3.9", -] - -[[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", - "winapi-build", + "winapi", ] [[package]] @@ -3408,9 +2248,9 @@ dependencies = [ [[package]] name = "zip" -version = "0.5.10" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a8977234acab718eb2820494b2f96cbb16004c19dddf88b7445b27381450997" +checksum = "8264fcea9b7a036a4a5103d7153e988dbc2ebbafb34f68a3c2d404b6b82d74b6" dependencies = [ "byteorder", "bzip2", diff --git a/Cargo.toml b/Cargo.toml index 20cf5ff9..6873e347 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -40,9 +40,10 @@ indexmap = { version = "1", features=["rayon", "serde"] } itertools = "0.10" lazy_static = "1" log = "0.4" +num_cpus = "1.13" proc-macro2 = { version = "1", features = ["span-locations"] } pulldown-cmark = "0.8" -ra_ap_syntax = "0.0.38" +ra_ap_syntax = "0.0.42" rayon = "1.5" regex = "1.4" serde = { version = "1", features = ["derive"] } @@ -64,9 +65,7 @@ url = { version = "2", features = ["serde"] } # dictionary lookup with affixes hunspell-rs = { version = "0.3", default-features=false, optional = true } -# full grammar check -languagetool-rs = { version = "0.1", package = "languagetool", optional = true } - +# full grammar check, but also tokenization and disambiguation nlprule = { version = "0.4.6", optional = true } [dev-dependencies] @@ -79,11 +78,10 @@ maplit = "1" default = ["hunspell", "nlprules"] # deprecated! pending removal -languagetool = ["languagetool-rs"] hunspell = ["hunspell-rs/bundled"] nlprules = ["nlprule", "nlprule-build"] -all = ["hunspell", "nlprules", "languagetool"] +all = ["hunspell", "nlprules"] [profile.dev] build-override = { opt-level = 2 } diff --git a/demo/src/lib.rs b/demo/src/lib.rs index 5f00be43..48463e9f 100644 --- a/demo/src/lib.rs +++ b/demo/src/lib.rs @@ -16,7 +16,7 @@ pub fn c() { } -#[doc = r#"Risk is not your thing, just tkae the money and run."#] +#[doc = r#"Risk not ya ting?"#] pub fn take_the_money_and_leave() { } diff --git a/src/action/bandaid.rs b/src/action/bandaid.rs index 3c253625..8cfbc096 100644 --- a/src/action/bandaid.rs +++ b/src/action/bandaid.rs @@ -145,6 +145,16 @@ l column: 27, }, }, + Span { + start: LineColumn { + line: 1, + column: 28, + }, + end: LineColumn { + line: 1, + column: 28, + }, + }, ]; crate::checker::tests::extraction_test_body(TEST, EXPECTED); @@ -156,6 +166,7 @@ l let fn_with_doc = TEST .lines() .skip(18) + .take(4) .fold(String::new(), |acc, line| acc + line); const EXPECTED: &[Span] = &[ @@ -176,13 +187,13 @@ l }, end: LineColumn { line: 1, - column: 17, + column: 18, }, }, Span { start: LineColumn { line: 1, - column: 19, + column: 20, }, end: LineColumn { line: 1, @@ -202,75 +213,15 @@ l Span { start: LineColumn { line: 1, - column: 28, - }, - end: LineColumn { - line: 1, - column: 32, - }, - }, - Span { - start: LineColumn { - line: 1, - column: 35, - }, - end: LineColumn { - line: 1, - column: 38, - }, - }, - Span { - start: LineColumn { - line: 1, - column: 40, - }, - end: LineColumn { - line: 1, - column: 43, - }, - }, - Span { - start: LineColumn { - line: 1, - column: 45, - }, - end: LineColumn { - line: 1, - column: 47, - }, - }, - Span { - start: LineColumn { - line: 1, - column: 49, - }, - end: LineColumn { - line: 1, - column: 53, - }, - }, - Span { - start: LineColumn { - line: 1, - column: 55, - }, - end: LineColumn { - line: 1, - column: 57, - }, - }, - Span { - start: LineColumn { - line: 1, - column: 59, + column: 27, }, end: LineColumn { line: 1, - column: 61, + column: 27, }, }, ]; - crate::checker::tests::extraction_test_body(fn_with_doc.as_str(), EXPECTED); + crate::checker::tests::extraction_test_body(dbg!(fn_with_doc.as_str()), EXPECTED); } } diff --git a/src/checker/dummy.rs b/src/checker/dummy.rs index acf4b012..0c890383 100644 --- a/src/checker/dummy.rs +++ b/src/checker/dummy.rs @@ -2,8 +2,8 @@ //! //! A test checker, only available for unit tests. -use super::tokenize; -use super::Checker; +// use super::tokenize; +use super::{apply_tokenizer, Checker}; use crate::documentation::Documentation; use crate::suggestion::{Detector, Suggestion, SuggestionSet}; use crate::util::sub_chars; @@ -24,6 +24,8 @@ impl Checker for DummyChecker { where 'a: 's, { + let tokenizer = super::tokenizer::<&std::path::PathBuf>(None)?; + let suggestions = docu.iter().try_fold::>( SuggestionSet::new(), |mut acc, (origin, chunks)| { @@ -32,12 +34,9 @@ impl Checker for DummyChecker { .next() .expect("DummyChecker expects at least one chunk"); let plain = chunk.erase_cmark(); - for (index, range) in dbg!(tokenize(plain.as_str())).into_iter().enumerate() { - trace!( - "****Token[{}]: >{}<", - index, - sub_chars(plain.as_str(), range.clone()) - ); + let txt = plain.as_str(); + for (index, range) in apply_tokenizer(&tokenizer, txt).enumerate() { + trace!("****Token[{}]: >{}<", index, sub_chars(txt, range.clone())); let detector = Detector::Dummy; let range2span = plain.find_spans(range.clone()); for (range, span) in range2span { diff --git a/src/checker/hunspell.rs b/src/checker/hunspell.rs index 5b2fb1f1..9d479292 100644 --- a/src/checker/hunspell.rs +++ b/src/checker/hunspell.rs @@ -5,7 +5,7 @@ //! the defined affixes. //! Can handle multiple dictionaries. -use super::{tokenize, Checker, Detector, Documentation, Suggestion, SuggestionSet}; +use super::{apply_tokenizer, Checker, Detector, Documentation, Suggestion, SuggestionSet}; use crate::documentation::{CheckableChunk, ContentOrigin, PlainOverlay}; use crate::util::sub_chars; @@ -148,6 +148,17 @@ impl Checker for HunspellChecker { ) } }; + // FIXME rename the config option + let ignorelist = config.tokenization_splitchars.as_str(); + // without these, a lot of those would be flagged as mistakes. + debug_assert!(ignorelist.contains(',')); + debug_assert!(ignorelist.contains('.')); + debug_assert!(ignorelist.contains(';')); + debug_assert!(ignorelist.contains('!')); + debug_assert!(ignorelist.contains('?')); + + // TODO allow override + let tokenizer = super::tokenizer::<&PathBuf>(None)?; let suggestions = docu .par_iter() @@ -161,8 +172,18 @@ impl Checker for HunspellChecker { trace!("{:?}", &plain); let txt = plain.as_str(); let hunspell = &*hunspell.0; - for range in tokenize(txt) { + + 'tokenization: for range in apply_tokenizer(&tokenizer, txt) { let word = sub_chars(txt, range.clone()); + if range.len() == 1 + && word + .chars() + .next() + .filter(|c| ignorelist.contains(*c)) + .is_some() + { + continue 'tokenization; + } if transform_regex.is_empty() { obtain_suggestions( &plain, diff --git a/src/checker/languagetool.rs b/src/checker/languagetool.rs deleted file mode 100644 index abf23276..00000000 --- a/src/checker/languagetool.rs +++ /dev/null @@ -1,81 +0,0 @@ -//! Check spelling and grammar by utilizing a languagetool server -//! -//! Can either be local or hosted. -//! Note that this does not do any rate limiting and will exhaust the -//! checks per second very quickly. - -use super::*; - -use crate::Range; -use languagetool_rs::{LanguageTool, Request}; -use log::trace; - -pub struct LanguageToolChecker; - -impl Checker for LanguageToolChecker { - type Config = crate::config::LanguageToolConfig; - - fn detector() -> Detector { - Detector::LanguageTool - } - - fn check<'a, 's>(docu: &'a Documentation, config: &Self::Config) -> Result> - where - 'a: 's, - { - let lt = LanguageTool::new(config.url.as_str())?; - let suggestions = docu.iter().try_fold::>( - SuggestionSet::new(), - |mut acc, (origin, chunks)| { - for chunk in chunks { - let plain = chunk.erase_cmark(); - log::trace!("markdown erasure: {:?}", &plain); - let req = Request::new(plain.to_string(), "en-US".to_owned()); - let resp = lt.check(req)?; - if let Some(software) = resp.software { - log::trace!("sw: {:?}", software); - } - if let Some(matches) = resp.matches { - for item in matches { - if let Some(rule) = item.rule { - if rule.id == "EN_QUOTES" { - // really annoying and pointless in code related documentation - continue; - } - trace!("item.rule: {:?}", rule); - } - trace!("item.context: {:?}", item.context); - trace!("item.message: {:?}", item.message); - trace!("item.short_message: {:?}", item.short_message); - // TODO convert response to offsets and errors with the matching literal - for (range, span) in plain.find_spans(Range { - start: item.offset as usize, - end: (item.offset + item.length) as usize, - }) { - acc.add( - origin.clone(), - Suggestion { - detector: Detector::LanguageTool, - range, - span, - origin: origin.clone(), - replacements: item - .replacements - .iter() - .filter_map(|x| x.value.clone()) - .collect(), - chunk: chunk, - description: Some(item.message.clone()), - }, - ); - } - } - } - } - Ok(acc) - }, - )?; - - Ok(suggestions) - } -} diff --git a/src/checker/mod.rs b/src/checker/mod.rs index 7beceb03..1f1d5333 100644 --- a/src/checker/mod.rs +++ b/src/checker/mod.rs @@ -8,18 +8,18 @@ use crate::{Config, Detector, Documentation, Suggestion, SuggestionSet}; use anyhow::Result; -use crate::Range; use log::debug; +mod tokenize; +pub(crate) use self::tokenize::*; + #[cfg(feature = "hunspell")] mod hunspell; -#[cfg(feature = "languagetool")] -mod languagetool; #[cfg(feature = "nlprules")] mod nlprules; -#[cfg(any(feature = "languagetool", feature = "hunspell"))] +#[cfg(feature = "hunspell")] mod quirks; /// Implementation for a checker @@ -33,55 +33,6 @@ pub(crate) trait Checker { 'a: 's; } -/// Returns absolute offsets and the data with the token in question. -/// -/// Does not handle hyphenation yet or partial words at boundaries. -/// Returns the a vector of ranges for the input str. -/// -/// All ranges are in characters. -fn tokenize(s: &str) -> Vec { - let mut started = false; - let mut linear_start = 0usize; - let mut linear_end; - let mut bananasplit = Vec::with_capacity(32); - let _fin_char_idx = 0usize; - - let blacklist = "\";:,.?!#(){}[]-\n\r/`".to_owned(); - let is_ignore_char = |c: char| c.is_whitespace() || blacklist.contains(c); - - for (c_idx, (_byte_offset, c)) in s.char_indices().enumerate() { - if is_ignore_char(c) { - linear_end = c_idx; - if started { - bananasplit.push(linear_start..linear_end); - } - started = false; - // TODO handle hyphenation - // if c == '\n' { - // column = 0; - // line += 1; - // } - } else { - if !started { - linear_start = c_idx; - started = true; - } - } - } - // at the end of string, assume word complete - // TODO for hypenation, check if line ends with a dash - if started { - if let Some((idx, _)) = s.char_indices().next_back() { - // increase by one, since the range's end goes one beyond, end bounds is _exclusive_ for ranges - let linear_end = idx + 1; - bananasplit.push(linear_start..linear_end) - } else { - log::error!("BUG: Most likely lost a word when tokenizing!"); - } - } - bananasplit -} - fn invoke_checker_inner<'a, 's, T>( documentation: &'a Documentation, config: Option<&T::Config>, @@ -127,15 +78,6 @@ where { let mut collective = SuggestionSet::<'s>::new(); - invoke_checker!( - "languagetool", - self::languagetool::LanguageToolChecker, - documentation, - config, - config.languagetool.as_ref(), - &mut collective - ); - invoke_checker!( "nlprules", self::nlprules::NlpRulesChecker, @@ -168,6 +110,8 @@ pub mod tests { use crate::span::Span; use crate::ContentOrigin; use crate::LineColumn; + use crate::Range; + use std::path::PathBuf; use crate::fluff_up; @@ -177,14 +121,17 @@ pub mod tests { "With", "markdown", "removed", + ",", "for", - "sure" + "sure", + ".", ]; } #[test] fn tokens() { - let ranges: Vec = tokenize(TEXT); + let tokenizer = tokenizer::<&PathBuf>(None).unwrap(); + let ranges: Vec = dbg!(apply_tokenizer(&tokenizer, TEXT).collect()); for (range, expect) in ranges.into_iter().zip(TOKENS.iter()) { assert_eq!(&&TEXT[range], expect); } @@ -214,9 +161,10 @@ pub mod tests { { assert_eq!( suggestion.replacements, - vec![format!("replacement_{}", index)] + vec![format!("replacement_{}", index)], + "found vs expected replacement" ); - assert_eq!(suggestion.span, *expected_span); + assert_eq!(suggestion.span, *expected_span, "found vs expected span"); } } diff --git a/src/checker/nlprules.rs b/src/checker/nlprules.rs index 32aab43b..7b476c37 100644 --- a/src/checker/nlprules.rs +++ b/src/checker/nlprules.rs @@ -7,17 +7,12 @@ use super::{Checker, Detector, Documentation, Suggestion, SuggestionSet}; use crate::{CheckableChunk, ContentOrigin}; use anyhow::Result; -use fs_err as fs; use log::{debug, info, trace, warn}; use rayon::prelude::*; use nlprule::types::Suggestion as NlpFix; use nlprule::{Rules, Tokenizer}; -static DEFAULT_TOKENIZER_BYTES: &[u8] = - include_bytes!(concat!(env!("OUT_DIR"), "/en_tokenizer.bin")); -static DEFAULT_RULES_BYTES: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/en_rules.bin")); - pub(crate) struct NlpRulesChecker; impl Checker for NlpRulesChecker { @@ -31,33 +26,8 @@ impl Checker for NlpRulesChecker { where 'a: 's, { - info!("Loading tokenizer..."); - - let tokenizer = config.override_tokenizer.as_ref().map_or_else( - || { - Ok(Tokenizer::from_reader(&mut &*DEFAULT_TOKENIZER_BYTES) - .expect("build.rs pulls valid tokenizer description. qed")) - }, - |path| -> Result { - let f = fs::File::open(&path)?; - Ok(Tokenizer::from_reader(f)?) - }, - )?; - - info!("Loaded tokenizer."); - - info!("Loading rules.."); - - let rules = config.override_rules.as_ref().map_or_else( - || { - Ok(Rules::from_reader(&mut &*DEFAULT_RULES_BYTES) - .expect("build.rs pulls valid rules set. qed")) - }, - |path| -> Result { - let f = fs::File::open(&path)?; - Ok(Rules::from_reader(f)?) - }, - )?; + let tokenizer = super::tokenizer(config.override_tokenizer.as_ref())?; + let rules = super::rules(config.override_tokenizer.as_ref())?; let rules = rules .into_iter() @@ -136,7 +106,7 @@ fn check_chunk<'a>( } in nlpfixes { if start > end { - warn!("BUG: crate nlprule yielded a negative range, please file a bug"); + warn!("BUG: crate nlprule yielded a negative range {:?} for chunk in {}, please file a bug", start..end, &origin); continue 'nlp; } let range = start..end; diff --git a/src/checker/tokenize.rs b/src/checker/tokenize.rs new file mode 100644 index 00000000..0fa7887c --- /dev/null +++ b/src/checker/tokenize.rs @@ -0,0 +1,106 @@ +use anyhow::Result; +use fs_err as fs; +use lazy_static::lazy_static; +use log::info; +use nlprule::{Rules, Tokenizer}; +use std::collections::{hash_map::Entry, HashMap}; +use std::{ + path::{Path, PathBuf}, + sync::{Arc, Mutex}, +}; + +static DEFAULT_TOKENIZER_BYTES: &[u8] = + include_bytes!(concat!(env!("OUT_DIR"), "/en_tokenizer.bin")); + +static DEFAULT_RULES_BYTES: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/en_rules.bin")); + +lazy_static! { + static ref TOKENIZER: Mutex, Arc>> = + Mutex::new(HashMap::new()); +} + +fn tokenizer_inner>(override_path: Option

) -> Result { + info!("Loading tokenizer..."); + let tokenizer = if let Some(path) = override_path.as_ref() { + let f = fs::File::open(path.as_ref())?; + Tokenizer::from_reader(f) + } else { + Tokenizer::from_reader(&mut &*DEFAULT_TOKENIZER_BYTES) + }?; + info!("Loaded tokenizer."); + Ok(tokenizer) +} + +pub(crate) fn tokenizer + Clone>( + override_path: Option

, +) -> Result> { + match TOKENIZER + .lock() + .unwrap() + .entry(override_path.clone().map(|x| x.as_ref().to_path_buf())) + { + Entry::Occupied(occupied) => Ok(occupied.get().clone()), + Entry::Vacant(empty) => { + let tokenizer = tokenizer_inner(override_path)?; + let tokenizer = Arc::new(tokenizer); + empty.insert(tokenizer.clone()); + Ok(tokenizer) + } + } +} + +fn rules_inner>(override_path: Option

) -> Result { + info!("Loading rules..."); + let rules = if let Some(override_path) = override_path.as_ref() { + let f = fs::File::open(override_path.as_ref())?; + Rules::from_reader(f) + } else { + Rules::from_reader(&mut &*DEFAULT_RULES_BYTES) + }?; + info!("Loaded rules."); + Ok(rules) +} + +pub(crate) fn rules + Clone>(override_path: Option

) -> Result { + // XXX TODO right now `Rules` is not copy and only used in one place + // so this is fine for now + rules_inner(override_path) +} + +use crate::Range; + +pub(crate) fn apply_tokenizer<'t, 'z>( + tokenizer: &'t Arc, + text: &'z str, +) -> impl std::iter::Iterator + 'z +where + 't: 'z, +{ + tokenizer + .pipe(text) + .into_iter() + .map(|sentence| { + sentence.into_iter().filter_map(|token| { + let range = token.char_span.0..token.char_span.1; + if range.is_empty() { + None + } else { + Some((token, range)) + } + }) + }) + .flatten() + .map(move |(token, range)| { + // TODO XXX FIXME + // Get rid of this asap once + // https://github.com/bminixhofer/nlprule/issues/53 + // is resolved + let offset_bytes = + (token.sentence.as_ptr() as usize).saturating_sub(text.as_ptr() as usize); + let offset_chars = text[..offset_bytes].chars().count(); + Range { + start: range.start + offset_chars, + end: range.end + offset_chars, + } + }) +} diff --git a/src/config/args.rs b/src/config/args.rs index dfef70a1..145f9953 100644 --- a/src/config/args.rs +++ b/src/config/args.rs @@ -18,10 +18,10 @@ const USAGE: &str = r#" Spellcheck all your doc comments Usage: - cargo-spellcheck [(-v...|-q)] fix [--cfg=] [--code=] [--dev-comments] [--skip-readme] [--checkers=] [[--recursive] ... ] - cargo-spellcheck [(-v...|-q)] reflow [--cfg=] [--code=] [--dev-comments] [--skip-readme] [[--recursive] ... ] - cargo-spellcheck [(-v...|-q)] config (--user|--stdout|--cfg=) [--checkers=] [--force] - cargo-spellcheck [(-v...|-q)] [check] [--fix] [--cfg=] [--code=] [--dev-comments] [--skip-readme] [--checkers=] [[--recursive] ... ] + cargo-spellcheck [(-v...|-q)] [--jobs=] fix [--cfg=] [--code=] [--dev-comments] [--skip-readme] [--checkers=] [[--recursive] ... ] + cargo-spellcheck [(-v...|-q)] [--jobs=] reflow [--cfg=] [--code=] [--dev-comments] [--skip-readme] [[--recursive] ... ] + cargo-spellcheck [(-v...|-q)] [--jobs=] config (--user|--stdout|--cfg=) [--checkers=] [--force] + cargo-spellcheck [(-v...|-q)] [--jobs=] [check] [--fix] [--cfg=] [--code=] [--dev-comments] [--skip-readme] [--checkers=] [[--recursive] ... ] cargo-spellcheck --version cargo-spellcheck --help @@ -40,6 +40,7 @@ Options: --stdout Print the configuration file to stdout and exit. -v --verbose Verbosity level. -q --quiet Silences all printed messages. Overrules `-v`. + -j --jobs= The number of threads to use for parallel checking. -m --code= Overwrite the exit value for a successful run with content mistakes found. [default=0] --skip-readme Do not attempt to process README.md files listed in Cargo.toml manifests. "#; @@ -53,10 +54,6 @@ pub enum CheckerType { #[serde(alias = "nlprules")] #[serde(alias = "nlpRules")] NlpRules, - #[serde(alias = "languageTool")] - #[serde(alias = "Languagetool")] - #[serde(alias = "languagetool")] - LanguageTool, #[serde(alias = "ReFlow")] #[serde(alias = "reflow")] Reflow, @@ -78,6 +75,7 @@ pub struct Args { // with fallback from config, so it has to be tri-state pub flag_skip_readme: Option, pub flag_dev_comments: Option, + pub flag_jobs: Option, pub flag_code: u8, pub flag_stdout: bool, pub cmd_fix: bool, @@ -114,6 +112,44 @@ impl Args { action } + /// Set the worker pool job/thread count. + /// + /// Affects the parallel processing intra checkers. + /// Checkers are always executed in sequence. + pub fn job_count(&self) -> usize { + match self.flag_jobs { + _ if cfg!(debug_assertions) => { + log::warn!("Debug mode always uses 1 thread!"); + 1 + } + Some(jobs) if jobs == 0 => { + log::warn!( + "Cannot have less than one worker thread ({}). Retaining one worker thread.", + jobs + ); + 1 + } + Some(jobs) if jobs > 128 => { + log::warn!( + "Setting threads beyond 128 ({}) is insane. Capping at 128", + jobs + ); + 128 + } + Some(jobs) => { + log::info!("Explicitly set threads to {}", jobs); + jobs + } + None => { + // commonly we are not the only process + // on the machine, so use the physical cores. + let jobs = num_cpus::get_physical(); + log::debug!("Using the default physical thread count of {}", jobs); + jobs + } + } + } + /// Adjust the raw arguments for call variants. /// /// The program could be called like `cargo-spellcheck`, `cargo spellcheck` or @@ -191,21 +227,13 @@ impl Args { warn!("Nlprules checker was never configured.") } } - #[cfg(feature = "languagetool")] - if !checkers.contains(&CheckerType::LanguageTool) { - if !config.languagetool.take().is_some() { - warn!("Languagetool checker was never configured.") - } - } if !checkers.contains(&CheckerType::Reflow) { warn!("Reflow is a separate sub command.") } - const EXPECTED_COUNT: usize = 1_usize - + cfg!(feature = "nlprule") as usize - + cfg!(feature = "hunspell") as usize - + cfg!(feature = "languagetool") as usize; + const EXPECTED_COUNT: usize = + 1_usize + cfg!(feature = "nlprule") as usize + cfg!(feature = "hunspell") as usize; if checkers.iter().unique().count() == EXPECTED_COUNT { bail!("Argument override for checkers disabled all checkers") @@ -335,13 +363,6 @@ impl Args { } else { config.nlprules = None; } - if filter_set.contains(&CheckerType::LanguageTool) { - if config.languagetool.is_none() { - warn!("Language tool must be explicitly configured via config file") - } - } else { - config.languagetool = None; - } // reflow is a different subcommand, not relevant } @@ -539,6 +560,5 @@ mod tests { assert!(cfg.override_rules.is_none()); assert!(cfg.override_tokenizer.is_none()); }); - assert_matches!(config.languagetool, None => {}); } } diff --git a/src/config/hunspell.rs b/src/config/hunspell.rs index 9b34351d..465c1236 100644 --- a/src/config/hunspell.rs +++ b/src/config/hunspell.rs @@ -48,6 +48,10 @@ impl Quirks { } } +fn default_tokenization_splitchars() -> String { + "\",;:.!?#(){}[]|/_-β€’'`&@§¢…".to_owned() +} + #[derive(Deserialize, Serialize, Debug, Clone)] #[serde(deny_unknown_fields)] pub struct HunspellConfig { @@ -64,6 +68,9 @@ pub struct HunspellConfig { /// Additional quirks besides dictionary lookups. #[serde(default)] pub quirks: Quirks, + + #[serde(default = "default_tokenization_splitchars")] + pub tokenization_splitchars: String, } impl Default for HunspellConfig { @@ -73,6 +80,7 @@ impl Default for HunspellConfig { search_dirs: SearchDirs::default(), extra_dictionaries: Vec::default(), quirks: Quirks::default(), + tokenization_splitchars: default_tokenization_splitchars(), } } } diff --git a/src/config/mod.rs b/src/config/mod.rs index 0b8d547d..41574f66 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -72,10 +72,6 @@ pub struct Config { #[serde(alias = "NlpRules")] #[serde(default = "default_nlprules")] pub nlprules: Option, - #[serde(alias = "LanguageTool")] - #[serde(alias = "languageTool")] - #[serde(alias = "Languagetool")] - pub languagetool: Option, #[serde(alias = "ReFlow")] #[serde(alias = "Reflow")] pub reflow: Option, @@ -214,7 +210,6 @@ impl Config { match detector { Detector::Hunspell => self.hunspell.is_some(), Detector::NlpRules => self.nlprules.is_some(), - Detector::LanguageTool => self.languagetool.is_some(), Detector::Reflow => self.reflow.is_some(), #[cfg(test)] Detector::Dummy => true, @@ -222,13 +217,7 @@ impl Config { } pub fn full() -> Self { - let languagetool = LanguageToolConfig { - url: url::Url::parse("http://127.0.0.1:8010").expect("Default ip must be ok"), - }; - Self { - languagetool: Some(languagetool), - ..Default::default() - } + Default::default() } } @@ -243,9 +232,7 @@ fn default_nlprules() -> Option { fn default_hunspell() -> Option { Some(HunspellConfig { lang: Some("en_US".to_owned()), - search_dirs: SearchDirs::default(), - extra_dictionaries: Vec::new(), - quirks: Quirks::default(), + ..Default::default() }) } @@ -256,10 +243,6 @@ impl Default for Config { skip_readme: false, hunspell: default_hunspell(), nlprules: default_nlprules(), - // disabled by default, it - // requires additional setup and - // deprecated now - languagetool: None, reflow: Some(ReflowConfig::default()), } } @@ -276,9 +259,6 @@ mod tests { dev_comments = true skip-readme = true -[LanguageTool] -url = "http://127.0.0.1:8010/" - [Hunspell] lang = "en_US" search_dirs = ["/usr/lib64/hunspell"] @@ -309,22 +289,6 @@ extra_dictionaries = ["/home/bernhard/test.dic"] .unwrap(); } - #[test] - fn partial_2() { - assert!(Config::parse( - r#" -[languageTool] - - -[Hunspell] -lang = "en_US" -search_dirs = ["/usr/lib64/hunspell"] -extra_dictionaries = ["/home/bernhard/test.dic"] - "#, - ) - .is_err()); - } - #[test] fn partial_3() { let cfg = Config::parse( @@ -343,16 +307,12 @@ extra_dictionaries = ["/home/bernhard/test.dic"] fn partial_4() { let cfg = Config::parse( r#" -[LanguageTool] -url = "http://127.0.0.1:8010/" - [Hunspell] lang = "en_US" "#, ) .unwrap(); let _hunspell = cfg.hunspell.expect("Must contain hunspell cfg"); - let _langtool = cfg.languagetool.expect("Must contain language tool cfg"); } #[test] diff --git a/src/documentation/mod.rs b/src/documentation/mod.rs index ab4bec26..7ef55f36 100644 --- a/src/documentation/mod.rs +++ b/src/documentation/mod.rs @@ -176,7 +176,7 @@ impl Documentation { pub fn load_from_str(origin: ContentOrigin, content: &str, dev_comments: bool) -> Self { let mut docs = Documentation::new(); - match &origin { + match origin.clone() { ContentOrigin::RustDocTest(_path, span) => { if let Ok(excerpt) = load_span_from(&mut content.as_bytes(), span.clone()) { docs.add_rust(origin.clone(), excerpt.as_str(), dev_comments) @@ -185,14 +185,21 @@ impl Documentation { Ok(()) } } - ContentOrigin::RustSourceFile(_path) => docs.add_rust(origin, content, dev_comments), - ContentOrigin::CommonMarkFile(_path) => docs.add_commonmark(origin, content), + origin @ ContentOrigin::RustSourceFile(_) => { + docs.add_rust(origin, content, dev_comments) + } + origin @ ContentOrigin::CommonMarkFile(_) => docs.add_commonmark(origin, content), #[cfg(test)] - ContentOrigin::TestEntityRust => docs.add_rust(origin, content, dev_comments), + origin @ ContentOrigin::TestEntityRust => docs.add_rust(origin, content, dev_comments), #[cfg(test)] - ContentOrigin::TestEntityCommonMark => docs.add_commonmark(origin, content), + origin @ ContentOrigin::TestEntityCommonMark => docs.add_commonmark(origin, content), } - .unwrap_or_else(|e| warn!("BUG! << failed to load yada >> {}", e)); + .unwrap_or_else(move |e| { + warn!( + "BUG! << failed to load content from {} (dev_comments={:?}) >> {}", + origin, dev_comments, e + ) + }); docs } } diff --git a/src/documentation/tests.rs b/src/documentation/tests.rs index efcfc83b..c1fd8d06 100644 --- a/src/documentation/tests.rs +++ b/src/documentation/tests.rs @@ -151,7 +151,7 @@ mod e2e { #[test] fn file_justone() { - end2end_file_rust!("demo/src/nested/justone.rs", 1); + end2end_file_rust!("demo/src/nested/justone.rs", 2); } #[test] @@ -188,13 +188,13 @@ mod e2e { let chunk = chunks .iter() .next() - .expect("Commonmark files always contain a chunk. qed"); + .expect("Commonmark files always contains a chunk. qed"); assert_eq!(chunks.len(), 1); assert_eq!(RAW, chunk.as_str()); - let plain = chunk.erase_cmark(); - assert_eq!($plain, plain.as_str()); + let plain = dbg!(chunk.erase_cmark()); + assert_eq!(dbg!($plain), plain.as_str()); let mut it = suggestion_set.iter(); let (_, suggestions) = it.next().expect("Dummy checker produces one error per tokenized word. qed"); @@ -261,7 +261,40 @@ Erronbeous bold uetchkp"#; } #[test] - fn word_extraction_commonmark() { + fn word_extraction_commonmark_small() { + // raw source + const SOURCE: &'static str = r###"## cmark test 1 + +🐒 are _so_ *cute*! +"###; + + // extracted content as present as provided by `chunk.as_str()` + const RAW: &'static str = SOURCE; + + // markdown erased residue + const PLAIN: &'static str = r##"cmark test 1 + +🐒 are so cute!"##; + + bananasplit!( + ContentOrigin::TestEntityCommonMark; + SOURCE -> RAW -> PLAIN + expect + [ + "cmark", + "test", + "1", + "🐒", + "are", + "so", + "cute", + "!", + ] + ); + } + + #[test] + fn word_extraction_commonmark_large() { // raw source const SOURCE: &'static str = r#"# cmark test @@ -307,11 +340,14 @@ The end.🐒"#; "relly", "boring", "test", + ".", "Engineering", "Breakage", "anticipated", + "?", "The", "end", + ".", "🐒", ] ); diff --git a/src/main.rs b/src/main.rs index fa8ceb4c..7f00af9d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -87,13 +87,12 @@ fn signal_handler() { /// The inner main. fn run() -> anyhow::Result { - #[cfg(debug_assertions)] + let args = Args::parse(std::env::args()).unwrap_or_else(|e| e.exit()); + let _ = ::rayon::ThreadPoolBuilder::new() - .num_threads(1) + .num_threads(args.job_count()) .build_global(); - let args = Args::parse(std::env::args()).unwrap_or_else(|e| e.exit()); - let verbosity = match args.flag_verbose { _ if args.flag_quiet => log::LevelFilter::Off, n if n > 4 => log::LevelFilter::Trace, diff --git a/src/suggestion.rs b/src/suggestion.rs index ea3aa831..f99f4621 100644 --- a/src/suggestion.rs +++ b/src/suggestion.rs @@ -25,8 +25,6 @@ use crate::{Range, Span}; pub enum Detector { /// Hunspell lib based detector. Hunspell, - /// Language tool server based detection. - LanguageTool, /// Language server rules based on nlp detector. NlpRules, /// Reflow according to a given max column. @@ -42,7 +40,6 @@ impl Detector { match self { Self::Hunspell => "Hunspell", Self::NlpRules => "NlpRules", - Self::LanguageTool => "LanguageTool", Self::Reflow => "Reflow", #[cfg(test)] Self::Dummy => "Dummy", @@ -73,10 +70,10 @@ pub fn get_terminal_size() -> usize { // impl // // TODO use this to display included compiled backends -// fn list_available() { +// fn list_available() -> bool { // match detector { -// Detector::Hunspell => cfg!(feature="hunspell"), -// Detector::LanguageTool => cfg!(feature="languagetool"), +// Detector::Hunspell => cfg!(feature="hunspell") as bool, +// Detector::NlpRules => cfg!(feature="nlprules") as bool, // } // } diff --git a/src/traverse/iter.rs b/src/traverse/iter.rs index fe935614..20880545 100644 --- a/src/traverse/iter.rs +++ b/src/traverse/iter.rs @@ -59,6 +59,7 @@ impl TraverseModulesIter { .is_some() }) .try_for_each::<_, Result<()>>(|path| { + trace!("🌱 using path {} as seed recursion dir", path.display()); self.queue.push_back((path, level)); Ok(()) })?; @@ -168,6 +169,10 @@ mod tests { #[test] fn traverse_main_rs() { + let _ = env_logger::builder() + .filter_level(log::LevelFilter::Trace) + .is_test(true) + .try_init(); let manifest_path = demo_dir().join("src/main.rs"); let expect = indexmap::indexset! { diff --git a/src/traverse/mod.rs b/src/traverse/mod.rs index 50cba83e..c6b098b7 100644 --- a/src/traverse/mod.rs +++ b/src/traverse/mod.rs @@ -8,7 +8,8 @@ use crate::Documentation; use anyhow::{anyhow, bail, Error, Result}; use log::{debug, trace, warn}; -use std::fs; +use fs_err as fs; +use std::collections::HashSet; use std::path::{Path, PathBuf}; pub(crate) fn cwd() -> Result { @@ -29,7 +30,63 @@ use proc_macro2::Spacing; use proc_macro2::TokenStream; use proc_macro2::TokenTree; -fn extract_modules_inner>(path: P, stream: TokenStream) -> Result> { +fn extract_modules_recurse_collect>( + path: P, + acc: &mut HashSet, + mod_name: &str, +) -> Result<()> { + let path = path.as_ref(); + let base = if let Some(base) = path.parent() { + trace!("Parent path of {} is {}", path.display(), base.display()); + base.to_owned() + } else { + return Err(anyhow::anyhow!( + "Must have a valid parent directory: {}", + path.display() + )); + }; + let path1 = base.join(&mod_name).join("mod.rs"); + let path2 = base.join(&mod_name).with_extension("rs"); + let path3 = base + .join(path.file_stem().expect("If parent exists, should workβ„’")) + .join(mod_name) + .with_extension("rs"); + // avoid IO + if acc.contains(&path1) || acc.contains(&path2) || acc.contains(&path3) { + return Ok(()); + } + match (path1.is_file(), path2.is_file(), path3.is_file()) { + (true, false, false) => { + let _ = acc.insert(path1); + } + (false, true, false) => { + let _ = acc.insert(path2); + } + (false, false, true) => { + let _ = acc.insert(path3); + } + (true, true, _) | (true, _, true) | (_, true, true) => { + return Err(anyhow::anyhow!( + "Detected both module entry files: {} and {} and {}", + path1.display(), + path2.display(), + path3.display() + )) + } + _ => trace!( + "Neither file nor dir with mod.rs {} / {} / {}", + path1.display(), + path2.display(), + path2.display() + ), + }; + Ok(()) +} + +fn extract_modules_recurse>( + path: P, + stream: TokenStream, +) -> Result> { let path: &Path = path.as_ref(); // Ident { @@ -43,15 +100,7 @@ fn extract_modules_inner>(path: P, stream: TokenStream) -> Result // spacing: Alone, // }, - let base = if let Some(base) = path.parent() { - trace!("Parent path of {} is {}", path.display(), base.display()); - base.to_owned() - } else { - return Err(anyhow::anyhow!( - "Must have a valid parent directory: {}", - path.display() - )); - }; + let mut acc = HashSet::with_capacity(16); #[derive(Debug, Clone)] enum SeekingFor { @@ -60,10 +109,9 @@ fn extract_modules_inner>(path: P, stream: TokenStream) -> Result ModulFin(String), } - let mut acc = Vec::with_capacity(16); let mut state = SeekingFor::ModulKeyword; - for tree in stream { - match tree { + for tt in stream { + match tt { TokenTree::Ident(ident) => match state { SeekingFor::ModulKeyword => { if ident == "mod" { @@ -73,46 +121,30 @@ fn extract_modules_inner>(path: P, stream: TokenStream) -> Result SeekingFor::ModulName => { state = SeekingFor::ModulFin(ident.to_string()); } - _ => {} + _x => { + state = SeekingFor::ModulKeyword; + } }, TokenTree::Punct(punct) => { - if let SeekingFor::ModulFin(mod_name) = state { + if let SeekingFor::ModulFin(ref mod_name) = state { + trace!("✨ Found a module: {}", mod_name); if punct.as_char() == ';' && punct.spacing() == Spacing::Alone { - let path1 = base.join(&mod_name).join("mod.rs"); - let path2 = base.join(&mod_name).with_extension("rs"); - let path3 = base - .join( - path.file_stem() - .expect("If parent exists, should work (TM)"), - ) - .join(mod_name) - .with_extension("rs"); - match (path1.is_file(), path2.is_file(), path3.is_file()) { - (true, false, false) => acc.push(path1), - (false, true, false) => acc.push(path2), - (false, false, true) => acc.push(path3), - (true, true, _) | (true, _, true) | (_, true, true) => { - return Err(anyhow::anyhow!( - "Detected both module entry files: {} and {} and {}", - path1.display(), - path2.display(), - path3.display() - )) - } - _ => trace!( - "Neither file nor dir with mod.rs {} / {} / {}", - path1.display(), - path2.display(), - path2.display() - ), - }; + extract_modules_recurse_collect(path, &mut acc, &mod_name)?; } else { - trace!("Either not alone or not a semi colon {:?}", punct); + trace!( + "πŸ‚ Either not alone or not a semi colon {:?} - incomplete mod {}", + punct, + mod_name + ); } } state = SeekingFor::ModulKeyword; } - _ => { + TokenTree::Group(grp) => { + state = SeekingFor::ModulKeyword; + acc.extend(extract_modules_recurse(path, grp.stream())?.into_iter()); + } + _y => { state = SeekingFor::ModulKeyword; } }; @@ -121,15 +153,28 @@ fn extract_modules_inner>(path: P, stream: TokenStream) -> Result } /// Read all `mod x;` declarations from a source file. -pub(crate) fn extract_modules_from_file>(path: P) -> Result> { +pub(crate) fn extract_modules_from_file>(path: P) -> Result> { let path: &Path = path.as_ref(); if let Some(path_str) = path.to_str() { - let s = std::fs::read_to_string(path_str).map_err(|e| { - Error::from(e).context(anyhow!("Failed to read file content of {}", path_str)) - })?; + let s = fs::read_to_string(path_str)?; let stream = syn::parse_str::(s.as_str()) .map_err(|e| Error::from(e).context(anyhow!("File {} has syntax errors", path_str)))?; - extract_modules_inner(path.to_owned(), stream) + let acc = extract_modules_recurse(path.to_owned(), stream)?; + log::debug!( + "πŸ₯ž Recursed into {} modules from {}", + acc.len(), + path.display() + ); + if log::log_enabled!(log::Level::Trace) { + for path_rec in acc.iter() { + log::trace!( + "πŸ₯ž recurse into {} from {}", + path_rec.display(), + path.display() + ); + } + } + Ok(acc) } else { Err(anyhow::anyhow!("path must have a string representation")) } @@ -146,9 +191,7 @@ fn load_manifest>(manifest_dir: P) -> Result>(manifest_dir: P) -> Result { fn extract_products( manifest: &cargo_toml::Manifest, manifest_dir: &Path, -) -> Result> { +) -> Result> { let iter = manifest .bin .iter() @@ -198,7 +241,7 @@ fn extract_products( // cargo_toml's complete is not very truthfull .filter(|path_str| manifest_dir.join(path_str).is_file()) .map(|path_str| CheckEntity::Source(manifest_dir.join(path_str), true)) - .collect::>(); + .collect::>(); trace!("manifest products {:?}", &items); Ok(items) @@ -207,13 +250,13 @@ fn extract_products( fn extract_readme( manifest: &cargo_toml::Manifest, manifest_dir: &Path, -) -> Result> { - let mut acc = Vec::with_capacity(2); +) -> Result> { + let mut acc = HashSet::with_capacity(2); if let Some(package) = manifest.package.clone() { if let Some(readme) = package.readme { let readme = PathBuf::from(readme); if readme.is_file() { - acc.push(CheckEntity::Markdown(manifest_dir.join(readme))); + acc.insert(CheckEntity::Markdown(manifest_dir.join(readme))); } else { warn!( "README.md defined in Cargo.toml {} is not a file", @@ -222,13 +265,16 @@ fn extract_readme( } } if let Some(description) = package.description { - acc.push(CheckEntity::ManifestDescription(description.to_owned())); + acc.insert(CheckEntity::ManifestDescription(description.to_owned())); } } Ok(acc) } -fn handle_manifest>(manifest_dir: P, skip_readme: bool) -> Result> { +fn handle_manifest>( + manifest_dir: P, + skip_readme: bool, +) -> Result> { let manifest_dir = to_manifest_dir(manifest_dir)?; trace!("Handle manifest in dir: {}", manifest_dir.display()); @@ -415,7 +461,7 @@ pub(crate) fn extract( } } CheckEntity::Markdown(path) => { - let content = std::fs::read_to_string(&path).map_err(|e| { + let content = fs::read_to_string(&path).map_err(|e| { anyhow!("Common mark / markdown file does not exist").context(e) })?; if content.len() < 1 { @@ -451,7 +497,7 @@ mod tests { assert_eq!( extract_modules_from_file(demo_dir().join(TEST_FILE_FRAGMENTS)) .expect("fragments.rs must exist"), - vec![ + maplit::hashset![ demo_dir() .join(TEST_FILE_SIMPLE) .with_file_name("simple.rs"), @@ -467,14 +513,14 @@ mod tests { let (manifest, dir) = demo_dir_manifest(); assert_eq!( extract_products(&manifest, &dir).expect("Must succeed"), - vec![ + maplit::hashset![ CheckEntity::Source(demo_dir().join("src/main.rs"), true), CheckEntity::Source(demo_dir().join("src/lib.rs"), true), ] ); assert_eq!( extract_readme(&manifest, &dir).expect("Must succeed"), - vec![ + maplit::hashset![ CheckEntity::Markdown(demo_dir().join("README.md")), CheckEntity::ManifestDescription( "A silly demo with plenty of spelling mistakes for cargo-spellcheck demos and CI".to_string()