diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8709f46..f1e32e9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -69,7 +69,7 @@ jobs: - name: No-default features run: cargo test --workspace --no-default-features msrv: - name: "Check MSRV: 1.53.0" + name: "Check MSRV: 1.54.0" needs: smoke runs-on: ubuntu-latest steps: @@ -78,7 +78,7 @@ jobs: - name: Install Rust uses: actions-rs/toolchain@v1 with: - toolchain: 1.53.0 # MSRV + toolchain: 1.54.0 # MSRV profile: minimal override: true - uses: Swatinem/rust-cache@v1 @@ -133,7 +133,7 @@ jobs: - name: Install Rust uses: actions-rs/toolchain@v1 with: - toolchain: 1.53.0 # MSRV + toolchain: 1.54.0 # MSRV profile: minimal override: true components: clippy diff --git a/.github/workflows/codegen.yml b/.github/workflows/codegen.yml index 0f62b60..057b7ac 100644 --- a/.github/workflows/codegen.yml +++ b/.github/workflows/codegen.yml @@ -26,7 +26,7 @@ jobs: - name: Install Rust uses: actions-rs/toolchain@v1 with: - toolchain: 1.53.0 # MSRV + toolchain: 1.54.0 # MSRV profile: minimal override: true components: rustfmt diff --git a/.github/workflows/rust-next.yml b/.github/workflows/rust-next.yml index d0ef8a8..bce29d1 100644 --- a/.github/workflows/rust-next.yml +++ b/.github/workflows/rust-next.yml @@ -57,9 +57,9 @@ jobs: strategy: matrix: rust: - - 1.53.0 # MSRV + - 1.54.0 # MSRV - stable - continue-on-error: ${{ matrix.rust != '1.53.0' }} # MSRV + continue-on-error: ${{ matrix.rust != '1.54.0' }} # MSRV runs-on: ubuntu-latest steps: - name: Checkout repository diff --git a/Cargo.lock b/Cargo.lock index cdf99f1..40a4fed 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -58,20 +58,6 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" -[[package]] -name = "assert_cmd" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e996dc7940838b7ef1096b882e29ec30a3149a3a443cdc8dba19ed382eca1fe2" -dependencies = [ - "bstr", - "doc-comment", - "predicates", - "predicates-core", - "predicates-tree", - "wait-timeout", -] - [[package]] name = "assert_fs" version = "1.0.6" @@ -154,6 +140,12 @@ version = "3.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9df67f7bf9ef8498769f994239c45613ef0c5899415fb58e9add412d2c1a538" +[[package]] +name = "bytes" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" + [[package]] name = "cast" version = "0.2.7" @@ -231,6 +223,16 @@ dependencies = [ "unicase", ] +[[package]] +name = "combine" +version = "4.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2b2f5d0ee456f3928812dfc8c6d9a1d592b98678f6d56db9b0cd2b7bc6c8db5" +dependencies = [ + "bytes", + "memchr", +] + [[package]] name = "concolor-clap" version = "0.0.6" @@ -572,15 +574,6 @@ dependencies = [ "termcolor", ] -[[package]] -name = "float-cmp" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" -dependencies = [ - "num-traits", -] - [[package]] name = "fnv" version = "1.0.7" @@ -610,6 +603,12 @@ version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7" +[[package]] +name = "glob" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" + [[package]] name = "globset" version = "0.4.8" @@ -640,6 +639,12 @@ version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62aca2aba2d62b4a7f5b33f3712cb1b0692779a56fb510499d5c0aa594daeaf3" +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" + [[package]] name = "heck" version = "0.3.3" @@ -679,6 +684,16 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +[[package]] +name = "humantime-serde" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac34a56cfd4acddb469cc7fff187ed5ac36f498ba085caf8bbc725e3ff474058" +dependencies = [ + "humantime", + "serde", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -703,6 +718,16 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "indexmap" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" +dependencies = [ + "autocfg", + "hashbrown", +] + [[package]] name = "itertools" version = "0.10.1" @@ -996,11 +1021,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c6ce811d0b2e103743eec01db1c50612221f173084ce2f7941053e94b6bb474" dependencies = [ "difflib", - "float-cmp", "itertools", - "normalize-line-endings", "predicates-core", - "regex", ] [[package]] @@ -1289,6 +1311,12 @@ dependencies = [ "serde", ] +[[package]] +name = "shlex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" + [[package]] name = "simdutf8" version = "0.1.3" @@ -1440,12 +1468,47 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_edit" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c29c21e11af3c58476a1063cb550e255c45c60928bf7f272462a533e7a2b406" +dependencies = [ + "combine", + "indexmap", + "itertools", + "kstring", + "serde", +] + [[package]] name = "treeline" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7f741b240f1a48843f9b8e0444fb55fb2a4ff67293b50a9179dfd5ea67f8d41" +[[package]] +name = "trycmd" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3756168da9e15c2ba53478a9e14661162bd724cc45dc650d1009d80ad46f0cad" +dependencies = [ + "concolor-control", + "difflib", + "glob", + "humantime", + "humantime-serde", + "normalize-line-endings", + "rayon", + "serde", + "shlex", + "tempfile", + "toml_edit", + "wait-timeout", + "walkdir", + "yansi", +] + [[package]] name = "typed-arena" version = "2.0.1" @@ -1475,7 +1538,6 @@ version = "1.2.1" dependencies = [ "ahash", "anyhow", - "assert_cmd", "assert_fs", "atty", "bstr", @@ -1497,12 +1559,12 @@ dependencies = [ "log", "maplit", "once_cell", - "predicates", "proc-exit", "serde", "serde_json", "structopt", "toml", + "trycmd", "typed-arena", "typos", "typos-dict", diff --git a/Cargo.toml b/Cargo.toml index 3361efe..99002d0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -94,8 +94,7 @@ maplit = "1.0" [dev-dependencies] assert_fs = "1.0" -assert_cmd = "2.0" -predicates = "2.0" +trycmd = "0.2.2" criterion = "0.3" [profile.dev] diff --git a/crates/typos-vars/codegen/src/main.rs b/crates/typos-vars/codegen/src/main.rs index 2a3293e..30174e3 100644 --- a/crates/typos-vars/codegen/src/main.rs +++ b/crates/typos-vars/codegen/src/main.rs @@ -90,7 +90,7 @@ fn generate_variations(file: &mut W) { None } else { referenced_symbols.extend(data.iter().map(|(s, _)| s)); - let value = generate_link(&data); + let value = generate_link(data); Some((*word, value)) } }), @@ -165,7 +165,7 @@ fn entries() -> BTreeMap { .filter(|e| { e.variants .iter() - .all(|v| typos::tokens::Word::new(&v.word, 0).is_ok()) + .all(|v| typos::tokens::Word::new(v.word, 0).is_ok()) }) .map(|e| { let mut e = e.into_owned(); diff --git a/crates/typos/src/tokens.rs b/crates/typos/src/tokens.rs index 992f1e6..426c248 100644 --- a/crates/typos/src/tokens.rs +++ b/crates/typos/src/tokens.rs @@ -720,6 +720,7 @@ impl<'s> Iterator for SplitIdent<'s> { type Item = Word<'s>; fn next(&mut self) -> Option> { + #[allow(clippy::while_let_on_iterator)] while let Some((i, c)) = self.char_indices.next() { let cur_mode = WordMode::classify(c); if cur_mode == WordMode::Boundary { diff --git a/crates/varcon-core/src/parser.rs b/crates/varcon-core/src/parser.rs index 8655f74..cbc2a1b 100644 --- a/crates/varcon-core/src/parser.rs +++ b/crates/varcon-core/src/parser.rs @@ -39,8 +39,7 @@ A Cv: acknowledgment's / Av B C: acknowledgement's ", ); - let all: Vec<_> = iter.collect(); - assert_eq!(all.len(), 1); + assert_eq!(iter.count(), 1); } #[test] @@ -58,8 +57,7 @@ A Cv: acknowledgment's / Av B C: acknowledgement's ", ); - let all: Vec<_> = iter.collect(); - assert_eq!(all.len(), 2); + assert_eq!(iter.count(), 2); } } diff --git a/src/file.rs b/src/file.rs index 4f081e6..887a9f9 100644 --- a/src/file.rs +++ b/src/file.rs @@ -620,15 +620,14 @@ mod test { fn fix_simple(line: &str, corrections: Vec<(usize, &'static str, &'static str)>) -> String { let line = line.as_bytes().to_vec(); - let corrections: Vec<_> = corrections + let corrections = corrections .into_iter() .map(|(byte_offset, typo, correction)| typos::Typo { byte_offset, typo: typo.into(), corrections: typos::Status::Corrections(vec![correction.into()]), - }) - .collect(); - let actual = fix_buffer(line, corrections.into_iter()); + }); + let actual = fix_buffer(line, corrections); String::from_utf8(actual).unwrap() } diff --git a/tests/cli.rs b/tests/cli.rs deleted file mode 100644 index 2193332..0000000 --- a/tests/cli.rs +++ /dev/null @@ -1,50 +0,0 @@ -use assert_cmd::Command; - -#[test] -#[cfg(feature = "dict")] -fn test_stdin_success() { - let mut cmd = Command::cargo_bin("typos").unwrap(); - cmd.arg("-").write_stdin("Hello world"); - cmd.assert().success(); -} - -#[test] -#[cfg(feature = "dict")] -fn test_stdin_failure() { - let mut cmd = Command::cargo_bin("typos").unwrap(); - cmd.arg("-").write_stdin("Apropriate world"); - cmd.assert().code(2); -} - -#[test] -#[cfg(feature = "dict")] -fn test_stdin_correct() { - let mut cmd = Command::cargo_bin("typos").unwrap(); - cmd.arg("-") - .arg("--write-changes") - .write_stdin("Apropriate world"); - cmd.assert().success().stdout("Appropriate world"); -} - -#[test] -#[cfg(feature = "dict")] -fn test_file_failure() { - let mut cmd = Command::cargo_bin("typos").unwrap(); - cmd.arg("README.md"); - cmd.assert().code(2); -} - -#[test] -#[cfg(feature = "dict")] -fn test_relative_dir_failure() { - let mut cmd = Command::cargo_bin("typos").unwrap(); - cmd.arg("."); - cmd.assert().code(2); -} - -#[test] -#[cfg(feature = "dict")] -fn test_assumed_dir_failure() { - let mut cmd = Command::cargo_bin("typos").unwrap(); - cmd.assert().code(2); -} diff --git a/tests/cli_tests.rs b/tests/cli_tests.rs new file mode 100644 index 0000000..b81c6d1 --- /dev/null +++ b/tests/cli_tests.rs @@ -0,0 +1,5 @@ +#[test] +#[cfg(feature = "dict")] +fn cli_tests() { + trycmd::TestCases::new().case("tests/cmd/*.toml"); +} diff --git a/tests/cmd/assumed-dir-failure.toml b/tests/cmd/assumed-dir-failure.toml new file mode 100644 index 0000000..a04fffd --- /dev/null +++ b/tests/cmd/assumed-dir-failure.toml @@ -0,0 +1,2 @@ +bin.name = "typos" +status.code = 2 diff --git a/tests/cmd/file-failure.toml b/tests/cmd/file-failure.toml new file mode 100644 index 0000000..134c44c --- /dev/null +++ b/tests/cmd/file-failure.toml @@ -0,0 +1,3 @@ +bin.name = "typos" +args = "README.md" +status.code = 2 diff --git a/tests/cmd/relative-dir-failure.toml b/tests/cmd/relative-dir-failure.toml new file mode 100644 index 0000000..d742035 --- /dev/null +++ b/tests/cmd/relative-dir-failure.toml @@ -0,0 +1,3 @@ +bin.name = "typos" +args = "." +status.code = 2 diff --git a/tests/cmd/stdin-correct.stdin b/tests/cmd/stdin-correct.stdin new file mode 100644 index 0000000..78a4360 --- /dev/null +++ b/tests/cmd/stdin-correct.stdin @@ -0,0 +1 @@ +Apropriate world diff --git a/tests/cmd/stdin-correct.stdout b/tests/cmd/stdin-correct.stdout new file mode 100644 index 0000000..8d183c3 --- /dev/null +++ b/tests/cmd/stdin-correct.stdout @@ -0,0 +1 @@ +Appropriate world diff --git a/tests/cmd/stdin-correct.toml b/tests/cmd/stdin-correct.toml new file mode 100644 index 0000000..fd62546 --- /dev/null +++ b/tests/cmd/stdin-correct.toml @@ -0,0 +1,2 @@ +bin.name = "typos" +args = "--write-changes -" diff --git a/tests/cmd/stdin-failure.stdin b/tests/cmd/stdin-failure.stdin new file mode 100644 index 0000000..78a4360 --- /dev/null +++ b/tests/cmd/stdin-failure.stdin @@ -0,0 +1 @@ +Apropriate world diff --git a/tests/cmd/stdin-failure.toml b/tests/cmd/stdin-failure.toml new file mode 100644 index 0000000..74181fa --- /dev/null +++ b/tests/cmd/stdin-failure.toml @@ -0,0 +1,3 @@ +bin.name = "typos" +args = "-" +status.code = 2 diff --git a/tests/cmd/stdin-success.stdin b/tests/cmd/stdin-success.stdin new file mode 100644 index 0000000..802992c --- /dev/null +++ b/tests/cmd/stdin-success.stdin @@ -0,0 +1 @@ +Hello world diff --git a/tests/cmd/stdin-success.toml b/tests/cmd/stdin-success.toml new file mode 100644 index 0000000..15dd0dd --- /dev/null +++ b/tests/cmd/stdin-success.toml @@ -0,0 +1,2 @@ +bin.name = "typos" +args = "-"