[INFO] cloning repository https://github.com/BartekLew/red [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/BartekLew/red" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FBartekLew%2Fred", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FBartekLew%2Fred'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 8dacba9e3bbd6b2ae8307c98cefaf9e3f869a2bd [INFO] linting BartekLew/red against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FBartekLew%2Fred" "/workspace/builds/worker-5-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/BartekLew/red [INFO] finished tweaking git repo https://github.com/BartekLew/red [INFO] tweaked toml for git repo https://github.com/BartekLew/red written to /workspace/builds/worker-5-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/BartekLew/red on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/BartekLew/red already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded cstr v0.2.11 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] a001b8e2956ffa5d5e4c585ad7fd4e0a7de26c7216e04a7ebdbf6c77d404835b [INFO] running `Command { std: "docker" "start" "-a" "a001b8e2956ffa5d5e4c585ad7fd4e0a7de26c7216e04a7ebdbf6c77d404835b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "a001b8e2956ffa5d5e4c585ad7fd4e0a7de26c7216e04a7ebdbf6c77d404835b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "a001b8e2956ffa5d5e4c585ad7fd4e0a7de26c7216e04a7ebdbf6c77d404835b", kill_on_drop: false }` [INFO] [stdout] a001b8e2956ffa5d5e4c585ad7fd4e0a7de26c7216e04a7ebdbf6c77d404835b [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] ea9fedd54b8a6b1893b8db490d5cd957feaaaeb3c6460d88c7731f500f9fbcc3 [INFO] running `Command { std: "docker" "start" "-a" "ea9fedd54b8a6b1893b8db490d5cd957feaaaeb3c6460d88c7731f500f9fbcc3", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.76 [INFO] [stderr] Compiling quote v1.0.35 [INFO] [stderr] Compiling cstr v0.2.11 [INFO] [stderr] Checking red v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:20:46 [INFO] [stdout] | [INFO] [stdout] 20 | pub const QUOTE_CHAR: Class = Class::Set(&[b'"']); [INFO] [stdout] | ^^^^^^^ help: try: `b"\""` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] = note: `#[warn(clippy::byte_char_slices)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:25:98 [INFO] [stdout] | [INFO] [stdout] 25 | pub const UNIX_NAME_CHAR: Class = Class::Alt(&[LATIN_SMALL, LATIN_CAPITAL, DIGIT, Class::Set(&[b'_'])]); [INFO] [stdout] | ^^^^^^^ help: try: `b"_"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:194:65 [INFO] [stdout] | [INFO] [stdout] 194 | pub const ESC: Seq = Seq::Composition(&[Seq::One(Class::Set(&[b'\\'])), [INFO] [stdout] | ^^^^^^^^ help: try: `b"\\"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:200:68 [INFO] [stdout] | [INFO] [stdout] 200 | ... &Seq::One(Class::NoneOf(&[b'"']))])), [INFO] [stdout] | ^^^^^^^ help: try: `b"\""` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:204:44 [INFO] [stdout] | [INFO] [stdout] 204 | Seq::Composition(&[Seq::One(Class::Set(&[b'('])), [INFO] [stdout] | ^^^^^^^ help: try: `b"("` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:205:76 [INFO] [stdout] | [INFO] [stdout] 205 | Seq::Any(&Seq::Or(&[&BRACK, &Seq::One(Class::NoneOf(&[b'(', b')']))])), [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `b"()"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:206:44 [INFO] [stdout] | [INFO] [stdout] 206 | Seq::One(Class::Set(&[b')']))]); [INFO] [stdout] | ^^^^^^^ help: try: `b")"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:209:44 [INFO] [stdout] | [INFO] [stdout] 209 | Seq::Composition(&[Seq::One(Class::Set(&[b'{'])), [INFO] [stdout] | ^^^^^^^ help: try: `b"{"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:210:76 [INFO] [stdout] | [INFO] [stdout] 210 | Seq::Any(&Seq::Or(&[&CURLY, &Seq::One(Class::NoneOf(&[b'{', b'}']))])), [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `b"{}"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:211:44 [INFO] [stdout] | [INFO] [stdout] 211 | Seq::One(Class::Set(&[b'}']))]); [INFO] [stdout] | ^^^^^^^ help: try: `b"}"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:214:44 [INFO] [stdout] | [INFO] [stdout] 214 | Seq::Composition(&[Seq::One(Class::Set(&[b'['])), [INFO] [stdout] | ^^^^^^^ help: try: `b"["` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:215:78 [INFO] [stdout] | [INFO] [stdout] 215 | Seq::Any(&Seq::Or(&[&SQBRACK, &Seq::One(Class::NoneOf(&[b'[', b']']))])), [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `b"[]"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:216:44 [INFO] [stdout] | [INFO] [stdout] 216 | Seq::One(Class::Set(&[b']']))]); [INFO] [stdout] | ^^^^^^^ help: try: `b"]"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:219:44 [INFO] [stdout] | [INFO] [stdout] 219 | Seq::Composition(&[Seq::One(Class::Set(&[b'<'])), [INFO] [stdout] | ^^^^^^^ help: try: `b"<"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:220:78 [INFO] [stdout] | [INFO] [stdout] 220 | Seq::Any(&Seq::Or(&[&PTBRACK, &Seq::One(Class::NoneOf(&[b'<', b'>']))])), [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `b"<>"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:221:44 [INFO] [stdout] | [INFO] [stdout] 221 | Seq::One(Class::Set(&[b'>']))]); [INFO] [stdout] | ^^^^^^^ help: try: `b">"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:261:60 [INFO] [stdout] | [INFO] [stdout] 261 | pub static SPACE: Seq = Seq::Many(&Seq::One(Class::Set(&[b' ', b'\t', b'\n']))); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `b" \t\n"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:20:46 [INFO] [stdout] | [INFO] [stdout] 20 | pub const QUOTE_CHAR: Class = Class::Set(&[b'"']); [INFO] [stdout] | ^^^^^^^ help: try: `b"\""` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] = note: `#[warn(clippy::byte_char_slices)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:25:98 [INFO] [stdout] | [INFO] [stdout] 25 | pub const UNIX_NAME_CHAR: Class = Class::Alt(&[LATIN_SMALL, LATIN_CAPITAL, DIGIT, Class::Set(&[b'_'])]); [INFO] [stdout] | ^^^^^^^ help: try: `b"_"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:194:65 [INFO] [stdout] | [INFO] [stdout] 194 | pub const ESC: Seq = Seq::Composition(&[Seq::One(Class::Set(&[b'\\'])), [INFO] [stdout] | ^^^^^^^^ help: try: `b"\\"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:200:68 [INFO] [stdout] | [INFO] [stdout] 200 | ... &Seq::One(Class::NoneOf(&[b'"']))])), [INFO] [stdout] | ^^^^^^^ help: try: `b"\""` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:204:44 [INFO] [stdout] | [INFO] [stdout] 204 | Seq::Composition(&[Seq::One(Class::Set(&[b'('])), [INFO] [stdout] | ^^^^^^^ help: try: `b"("` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:205:76 [INFO] [stdout] | [INFO] [stdout] 205 | Seq::Any(&Seq::Or(&[&BRACK, &Seq::One(Class::NoneOf(&[b'(', b')']))])), [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `b"()"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:206:44 [INFO] [stdout] | [INFO] [stdout] 206 | Seq::One(Class::Set(&[b')']))]); [INFO] [stdout] | ^^^^^^^ help: try: `b")"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:209:44 [INFO] [stdout] | [INFO] [stdout] 209 | Seq::Composition(&[Seq::One(Class::Set(&[b'{'])), [INFO] [stdout] | ^^^^^^^ help: try: `b"{"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:210:76 [INFO] [stdout] | [INFO] [stdout] 210 | Seq::Any(&Seq::Or(&[&CURLY, &Seq::One(Class::NoneOf(&[b'{', b'}']))])), [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `b"{}"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:211:44 [INFO] [stdout] | [INFO] [stdout] 211 | Seq::One(Class::Set(&[b'}']))]); [INFO] [stdout] | ^^^^^^^ help: try: `b"}"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:214:44 [INFO] [stdout] | [INFO] [stdout] 214 | Seq::Composition(&[Seq::One(Class::Set(&[b'['])), [INFO] [stdout] | ^^^^^^^ help: try: `b"["` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:215:78 [INFO] [stdout] | [INFO] [stdout] 215 | Seq::Any(&Seq::Or(&[&SQBRACK, &Seq::One(Class::NoneOf(&[b'[', b']']))])), [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `b"[]"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:216:44 [INFO] [stdout] | [INFO] [stdout] 216 | Seq::One(Class::Set(&[b']']))]); [INFO] [stdout] | ^^^^^^^ help: try: `b"]"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:219:44 [INFO] [stdout] | [INFO] [stdout] 219 | Seq::Composition(&[Seq::One(Class::Set(&[b'<'])), [INFO] [stdout] | ^^^^^^^ help: try: `b"<"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:220:78 [INFO] [stdout] | [INFO] [stdout] 220 | Seq::Any(&Seq::Or(&[&PTBRACK, &Seq::One(Class::NoneOf(&[b'<', b'>']))])), [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `b"<>"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:221:44 [INFO] [stdout] | [INFO] [stdout] 221 | Seq::One(Class::Set(&[b'>']))]); [INFO] [stdout] | ^^^^^^^ help: try: `b">"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: can be more succinctly written as a byte str [INFO] [stdout] --> src/lex.rs:261:60 [INFO] [stdout] | [INFO] [stdout] 261 | pub static SPACE: Seq = Seq::Many(&Seq::One(Class::Set(&[b' ', b'\t', b'\n']))); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `b" \t\n"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#byte_char_slices [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this call to `from_str_radix` can be replaced with a call to `str::parse` [INFO] [stdout] --> src/matcher.rs:10:30 [INFO] [stdout] | [INFO] [stdout] 10 | .map(|s| warn_err(u64::from_str_radix(s, 10))) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `s.parse::()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_str_radix_10 [INFO] [stdout] = note: `#[warn(clippy::from_str_radix_10)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/matcher.rs:63:22 [INFO] [stdout] | [INFO] [stdout] 63 | m if !m.val.is_none() => { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try: `m.val.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/matcher.rs:135:20 [INFO] [stdout] | [INFO] [stdout] 135 | if tail.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!tail.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/matcher.rs:193:9 [INFO] [stdout] | [INFO] [stdout] 193 | / match &self.val { [INFO] [stdout] 194 | | Some(v) => { eprintln!("{}Matcher {} <{}>", prefix, v, self.tail); }, [INFO] [stdout] 195 | | None => {} [INFO] [stdout] 196 | | } [INFO] [stdout] | |_________^ help: try: `if let Some(v) = &self.val { eprintln!("{}Matcher {} <{}>", prefix, v, self.tail); }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref on an immutable reference [INFO] [stdout] --> src/matcher.rs:283:77 [INFO] [stdout] | [INFO] [stdout] 283 | Matcher { tail, val: Some(std::str::from_utf8_unchecked(&*extref)) } [INFO] [stdout] | ^^^^^^^^ help: if you would like to reborrow, try removing `&*`: `extref` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrow_deref_ref [INFO] [stdout] = note: `#[warn(clippy::borrow_deref_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/matcher.rs:316:9 [INFO] [stdout] | [INFO] [stdout] 316 | return None [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 316 - return None [INFO] [stdout] 316 + None [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/matcher.rs:303:15 [INFO] [stdout] | [INFO] [stdout] 303 | while self.m.tail.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!self.m.tail.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/matcher.rs:356:9 [INFO] [stdout] | [INFO] [stdout] 356 | return Some(Matcher::new(rest)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 356 - return Some(Matcher::new(rest)) [INFO] [stdout] 356 + Some(Matcher::new(rest)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/matcher.rs:337:12 [INFO] [stdout] | [INFO] [stdout] 337 | if self.m.tail.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.m.tail.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/matcher.rs:341:15 [INFO] [stdout] | [INFO] [stdout] 341 | while self.m.tail.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!self.m.tail.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `filter` for `Some` followed by `unwrap` [INFO] [stdout] --> src/matcher.rs:535:17 [INFO] [stdout] | [INFO] [stdout] 535 | .filter(|p| p.is_some()) [INFO] [stdout] | _________________^ [INFO] [stdout] 536 | | .map(|p| p.unwrap()) [INFO] [stdout] | |___________________________________^ help: consider using `flatten` instead: `flatten()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_filter_map [INFO] [stdout] = note: `#[warn(clippy::option_filter_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lex.rs:37:17 [INFO] [stdout] | [INFO] [stdout] 37 | return false; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 37 - return false; [INFO] [stdout] 37 + false [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `contains()` instead of `iter().any()` is more efficient [INFO] [stdout] --> src/lex.rs:30:32 [INFO] [stdout] | [INFO] [stdout] 30 | Self::Set(opts) => opts.iter().any(|c| *c == val), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `opts.contains(&val)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_contains [INFO] [stdout] = note: `#[warn(clippy::manual_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `contains()` instead of `iter().any()` is more efficient [INFO] [stdout] --> src/lex.rs:40:36 [INFO] [stdout] | [INFO] [stdout] 40 | Self::NoneOf(opts) => !opts.iter().any(|c| *c == val), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `opts.contains(&val)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/lex.rs:53:5 [INFO] [stdout] | [INFO] [stdout] 53 | assert_eq!(LATIN_SMALL.test(b'a'), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] = note: `#[warn(clippy::bool_assert_comparison)]` on by default [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 53 - assert_eq!(LATIN_SMALL.test(b'a'), true); [INFO] [stdout] 53 + assert!(LATIN_SMALL.test(b'a')); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/lex.rs:54:5 [INFO] [stdout] | [INFO] [stdout] 54 | assert_eq!(LATIN_SMALL.test(b'c'), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 54 - assert_eq!(LATIN_SMALL.test(b'c'), true); [INFO] [stdout] 54 + assert!(LATIN_SMALL.test(b'c')); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/lex.rs:55:5 [INFO] [stdout] | [INFO] [stdout] 55 | assert_eq!(LATIN_SMALL.test(b'z'), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 55 - assert_eq!(LATIN_SMALL.test(b'z'), true); [INFO] [stdout] 55 + assert!(LATIN_SMALL.test(b'z')); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/lex.rs:56:5 [INFO] [stdout] | [INFO] [stdout] 56 | assert_eq!(LATIN_CAPITAL.test(b'Z'), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 56 - assert_eq!(LATIN_CAPITAL.test(b'Z'), true); [INFO] [stdout] 56 + assert!(LATIN_CAPITAL.test(b'Z')); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/lex.rs:57:5 [INFO] [stdout] | [INFO] [stdout] 57 | assert_eq!(LATIN_CAPITAL.test(b'C'), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 57 - assert_eq!(LATIN_CAPITAL.test(b'C'), true); [INFO] [stdout] 57 + assert!(LATIN_CAPITAL.test(b'C')); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/lex.rs:58:5 [INFO] [stdout] | [INFO] [stdout] 58 | assert_eq!(LATIN_CAPITAL.test(b'a'), false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 58 - assert_eq!(LATIN_CAPITAL.test(b'a'), false); [INFO] [stdout] 58 + assert!(!LATIN_CAPITAL.test(b'a')); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/lex.rs:59:5 [INFO] [stdout] | [INFO] [stdout] 59 | assert_eq!(LATIN_SMALL.test(b'_'), false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 59 - assert_eq!(LATIN_SMALL.test(b'_'), false); [INFO] [stdout] 59 + assert!(!LATIN_SMALL.test(b'_')); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/lex.rs:60:5 [INFO] [stdout] | [INFO] [stdout] 60 | assert_eq!(LATIN_SMALL.test(b'A'), false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 60 - assert_eq!(LATIN_SMALL.test(b'A'), false); [INFO] [stdout] 60 + assert!(!LATIN_SMALL.test(b'A')); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/lex.rs:61:5 [INFO] [stdout] | [INFO] [stdout] 61 | assert_eq!(LATIN.test(b'Z'), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 61 - assert_eq!(LATIN.test(b'Z'), true); [INFO] [stdout] 61 + assert!(LATIN.test(b'Z')); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/lex.rs:62:5 [INFO] [stdout] | [INFO] [stdout] 62 | assert_eq!(LATIN.test(b'C'), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 62 - assert_eq!(LATIN.test(b'C'), true); [INFO] [stdout] 62 + assert!(LATIN.test(b'C')); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/lex.rs:63:5 [INFO] [stdout] | [INFO] [stdout] 63 | assert_eq!(LATIN.test(b'a'), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 63 - assert_eq!(LATIN.test(b'a'), true); [INFO] [stdout] 63 + assert!(LATIN.test(b'a')); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/lex.rs:64:5 [INFO] [stdout] | [INFO] [stdout] 64 | assert_eq!(UNIX_NAME_CHAR.test(b'_'), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 64 - assert_eq!(UNIX_NAME_CHAR.test(b'_'), true); [INFO] [stdout] 64 + assert!(UNIX_NAME_CHAR.test(b'_')); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/lex.rs:65:5 [INFO] [stdout] | [INFO] [stdout] 65 | assert_eq!(Class::Any.test(b'_'), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 65 - assert_eq!(Class::Any.test(b'_'), true); [INFO] [stdout] 65 + assert!(Class::Any.test(b'_')); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/lex.rs:66:5 [INFO] [stdout] | [INFO] [stdout] 66 | assert_eq!(Class::Any.test(b'Q'), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 66 - assert_eq!(Class::Any.test(b'Q'), true); [INFO] [stdout] 66 + assert!(Class::Any.test(b'Q')); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/lex.rs:67:5 [INFO] [stdout] | [INFO] [stdout] 67 | assert_eq!(Class::Any.test(b'v'), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 67 - assert_eq!(Class::Any.test(b'v'), true); [INFO] [stdout] 67 + assert!(Class::Any.test(b'v')); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/lex.rs:68:5 [INFO] [stdout] | [INFO] [stdout] 68 | assert_eq!(Class::Any.test(11), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 68 - assert_eq!(Class::Any.test(11), true); [INFO] [stdout] 68 + assert!(Class::Any.test(11)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `rawstr.get(0)` [INFO] [stdout] --> src/lex.rs:126:30 [INFO] [stdout] | [INFO] [stdout] 126 | Self::One(cd) => rawstr.get(0) [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `rawstr.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/lex.rs:132:17 [INFO] [stdout] | [INFO] [stdout] 132 | / match acc.as_mut() { [INFO] [stdout] 133 | | Some(x) => { [INFO] [stdout] 134 | | loop { [INFO] [stdout] 135 | | match x.then(|x| seq.scan(x)) { [INFO] [stdout] ... | [INFO] [stdout] 141 | | None => { } [INFO] [stdout] 142 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 132 ~ if let Some(x) = acc.as_mut() { [INFO] [stdout] 133 + loop { [INFO] [stdout] 134 + match x.then(|x| seq.scan(x)) { [INFO] [stdout] 135 + Some(y) => { *x = y }, [INFO] [stdout] 136 + None => { break; } [INFO] [stdout] 137 + } [INFO] [stdout] 138 + } [INFO] [stdout] 139 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this loop could be written as a `while let` loop [INFO] [stdout] --> src/lex.rs:134:25 [INFO] [stdout] | [INFO] [stdout] 134 | / loop { [INFO] [stdout] 135 | | match x.then(|x| seq.scan(x)) { [INFO] [stdout] 136 | | Some(y) => { *x = y }, [INFO] [stdout] 137 | | None => { break; } [INFO] [stdout] 138 | | } [INFO] [stdout] 139 | | } [INFO] [stdout] | |_________________________^ help: try: `while let Some(y) = x.then(|x| seq.scan(x)) { .. }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stdout] = note: `#[warn(clippy::while_let_loop)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this loop could be written as a `while let` loop [INFO] [stdout] --> src/lex.rs:151:25 [INFO] [stdout] | [INFO] [stdout] 151 | / loop { [INFO] [stdout] 152 | | match x.then(|x| seq.scan(x)) { [INFO] [stdout] 153 | | Some(y) => { *x = y }, [INFO] [stdout] 154 | | None => { break; } [INFO] [stdout] 155 | | } [INFO] [stdout] 156 | | } [INFO] [stdout] | |_________________________^ help: try: `while let Some(y) = x.then(|x| seq.scan(x)) { .. }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of `Iterator::fold` on a type that implements `Try` [INFO] [stdout] --> src/lex.rs:185:23 [INFO] [stdout] | [INFO] [stdout] 185 | .fold(Some(Subseq::start(rawstr, 0)), [INFO] [stdout] | _______________________^ [INFO] [stdout] 186 | | |acc: Option>, part| acc.and_then(|x| x.then(|x| part.scan(x)))) [INFO] [stdout] | |_____________________________________________________________________________________________________^ help: use `try_fold` instead: `try_fold(Subseq::start(rawstr, 0), |acc: Option>, part| ...)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_try_fold [INFO] [stdout] = note: `#[warn(clippy::manual_try_fold)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this call to `from_str_radix` can be replaced with a call to `str::parse` [INFO] [stdout] --> src/matcher.rs:10:30 [INFO] [stdout] | [INFO] [stdout] 10 | .map(|s| warn_err(u64::from_str_radix(s, 10))) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `s.parse::()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_str_radix_10 [INFO] [stdout] = note: `#[warn(clippy::from_str_radix_10)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/matcher.rs:63:22 [INFO] [stdout] | [INFO] [stdout] 63 | m if !m.val.is_none() => { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try: `m.val.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use `std::ptr::eq` when comparing raw pointers [INFO] [stdout] --> src/lex.rs:283:5 [INFO] [stdout] | [INFO] [stdout] 283 | a as *const T == b as *const T [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `std::ptr::eq(a, b)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_eq [INFO] [stdout] = note: `#[warn(clippy::ptr_eq)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/lex.rs:343:12 [INFO] [stdout] | [INFO] [stdout] 343 | if tail.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `tail.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/matcher.rs:135:20 [INFO] [stdout] | [INFO] [stdout] 135 | if tail.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!tail.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/matcher.rs:193:9 [INFO] [stdout] | [INFO] [stdout] 193 | / match &self.val { [INFO] [stdout] 194 | | Some(v) => { eprintln!("{}Matcher {} <{}>", prefix, v, self.tail); }, [INFO] [stdout] 195 | | None => {} [INFO] [stdout] 196 | | } [INFO] [stdout] | |_________^ help: try: `if let Some(v) = &self.val { eprintln!("{}Matcher {} <{}>", prefix, v, self.tail); }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref on an immutable reference [INFO] [stdout] --> src/matcher.rs:283:77 [INFO] [stdout] | [INFO] [stdout] 283 | Matcher { tail, val: Some(std::str::from_utf8_unchecked(&*extref)) } [INFO] [stdout] | ^^^^^^^^ help: if you would like to reborrow, try removing `&*`: `extref` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrow_deref_ref [INFO] [stdout] = note: `#[warn(clippy::borrow_deref_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/matcher.rs:316:9 [INFO] [stdout] | [INFO] [stdout] 316 | return None [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 316 - return None [INFO] [stdout] 316 + None [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/matcher.rs:303:15 [INFO] [stdout] | [INFO] [stdout] 303 | while self.m.tail.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!self.m.tail.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lex.rs:461:9 [INFO] [stdout] | [INFO] [stdout] 461 | return Err(SyntaxError { last: Some(initial) }) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 461 - return Err(SyntaxError { last: Some(initial) }) [INFO] [stdout] 461 + Err(SyntaxError { last: Some(initial) }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/matcher.rs:356:9 [INFO] [stdout] | [INFO] [stdout] 356 | return Some(Matcher::new(rest)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 356 - return Some(Matcher::new(rest)) [INFO] [stdout] 356 + Some(Matcher::new(rest)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/matcher.rs:337:12 [INFO] [stdout] | [INFO] [stdout] 337 | if self.m.tail.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.m.tail.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/matcher.rs:341:15 [INFO] [stdout] | [INFO] [stdout] 341 | while self.m.tail.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!self.m.tail.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lex.rs:37:17 [INFO] [stdout] | [INFO] [stdout] 37 | return false; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 37 - return false; [INFO] [stdout] 37 + false [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `contains()` instead of `iter().any()` is more efficient [INFO] [stdout] --> src/lex.rs:30:32 [INFO] [stdout] | [INFO] [stdout] 30 | Self::Set(opts) => opts.iter().any(|c| *c == val), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `opts.contains(&val)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_contains [INFO] [stdout] = note: `#[warn(clippy::manual_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `contains()` instead of `iter().any()` is more efficient [INFO] [stdout] --> src/lex.rs:40:36 [INFO] [stdout] | [INFO] [stdout] 40 | Self::NoneOf(opts) => !opts.iter().any(|c| *c == val), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `opts.contains(&val)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Token<'_>` which implements the `Copy` trait [INFO] [stdout] --> src/lex.rs:447:52 [INFO] [stdout] | [INFO] [stdout] 447 | x = SyntaxError::from_it_next(Some(name.clone()), &mut it)?; [INFO] [stdout] | ^^^^^^^^^^^^ help: try removing the `clone` call: `name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `rawstr.get(0)` [INFO] [stdout] --> src/lex.rs:126:30 [INFO] [stdout] | [INFO] [stdout] 126 | Self::One(cd) => rawstr.get(0) [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `rawstr.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/lex.rs:132:17 [INFO] [stdout] | [INFO] [stdout] 132 | / match acc.as_mut() { [INFO] [stdout] 133 | | Some(x) => { [INFO] [stdout] 134 | | loop { [INFO] [stdout] 135 | | match x.then(|x| seq.scan(x)) { [INFO] [stdout] ... | [INFO] [stdout] 141 | | None => { } [INFO] [stdout] 142 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 132 ~ if let Some(x) = acc.as_mut() { [INFO] [stdout] 133 + loop { [INFO] [stdout] 134 + match x.then(|x| seq.scan(x)) { [INFO] [stdout] 135 + Some(y) => { *x = y }, [INFO] [stdout] 136 + None => { break; } [INFO] [stdout] 137 + } [INFO] [stdout] 138 + } [INFO] [stdout] 139 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this loop could be written as a `while let` loop [INFO] [stdout] --> src/lex.rs:134:25 [INFO] [stdout] | [INFO] [stdout] 134 | / loop { [INFO] [stdout] 135 | | match x.then(|x| seq.scan(x)) { [INFO] [stdout] 136 | | Some(y) => { *x = y }, [INFO] [stdout] 137 | | None => { break; } [INFO] [stdout] 138 | | } [INFO] [stdout] 139 | | } [INFO] [stdout] | |_________________________^ help: try: `while let Some(y) = x.then(|x| seq.scan(x)) { .. }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stdout] = note: `#[warn(clippy::while_let_loop)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this loop could be written as a `while let` loop [INFO] [stdout] --> src/lex.rs:151:25 [INFO] [stdout] | [INFO] [stdout] 151 | / loop { [INFO] [stdout] 152 | | match x.then(|x| seq.scan(x)) { [INFO] [stdout] 153 | | Some(y) => { *x = y }, [INFO] [stdout] 154 | | None => { break; } [INFO] [stdout] 155 | | } [INFO] [stdout] 156 | | } [INFO] [stdout] | |_________________________^ help: try: `while let Some(y) = x.then(|x| seq.scan(x)) { .. }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of `Iterator::fold` on a type that implements `Try` [INFO] [stdout] --> src/lex.rs:185:23 [INFO] [stdout] | [INFO] [stdout] 185 | .fold(Some(Subseq::start(rawstr, 0)), [INFO] [stdout] | _______________________^ [INFO] [stdout] 186 | | |acc: Option>, part| acc.and_then(|x| x.then(|x| part.scan(x)))) [INFO] [stdout] | |_____________________________________________________________________________________________________^ help: use `try_fold` instead: `try_fold(Subseq::start(rawstr, 0), |acc: Option>, part| ...)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_try_fold [INFO] [stdout] = note: `#[warn(clippy::manual_try_fold)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use `std::ptr::eq` when comparing raw pointers [INFO] [stdout] --> src/lex.rs:283:5 [INFO] [stdout] | [INFO] [stdout] 283 | a as *const T == b as *const T [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `std::ptr::eq(a, b)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_eq [INFO] [stdout] = note: `#[warn(clippy::ptr_eq)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/lex.rs:343:12 [INFO] [stdout] | [INFO] [stdout] 343 | if tail.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `tail.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lex.rs:461:9 [INFO] [stdout] | [INFO] [stdout] 461 | return Err(SyntaxError { last: Some(initial) }) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 461 - return Err(SyntaxError { last: Some(initial) }) [INFO] [stdout] 461 + Err(SyntaxError { last: Some(initial) }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Token<'_>` which implements the `Copy` trait [INFO] [stdout] --> src/lex.rs:447:52 [INFO] [stdout] | [INFO] [stdout] 447 | x = SyntaxError::from_it_next(Some(name.clone()), &mut it)?; [INFO] [stdout] | ^^^^^^^^^^^^ help: try removing the `clone` call: `name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/cdefs.rs:111:5 [INFO] [stdout] | [INFO] [stdout] 111 | / match load_stdin() { [INFO] [stdout] 112 | | Ok(s) => { [INFO] [stdout] 113 | | let mut struc_m : Search<&str,_> = [INFO] [stdout] 114 | | Matcher::new(s.as_str()) [INFO] [stdout] ... | [INFO] [stdout] 133 | | }, Err(_) => {} [INFO] [stdout] 134 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 111 ~ if let Ok(s) = load_stdin() { [INFO] [stdout] 112 + let mut struc_m : Search<&str,_> = [INFO] [stdout] 113 + Matcher::new(s.as_str()) [INFO] [stdout] 114 + .search(|m| m.const_str("struct") [INFO] [stdout] 115 + .space() [INFO] [stdout] 116 + .word() [INFO] [stdout] 117 + .space() [INFO] [stdout] 118 + .const_str("{")); [INFO] [stdout] 119 + match struc_m.next() { [INFO] [stdout] 120 + Some(s) => { [INFO] [stdout] 121 + let fields : Vec = [INFO] [stdout] 122 + struc_m.m.search(|m| m.maybe(|m| m.space()) [INFO] [stdout] 123 + .value::()) [INFO] [stdout] 124 + .collect(); [INFO] [stdout] 125 + [INFO] [stdout] 126 + CUnit::includes(vec!["stdio.h", "stddef.h", "sys/types.h", "sys/stat.h"]) [INFO] [stdout] 127 + .struct_def(s, fields.iter()) [INFO] [stdout] 128 + .def_type4size() [INFO] [stdout] 129 + .main(s, fields.iter()); [INFO] [stdout] 130 + }, None => {} [INFO] [stdout] 131 + } [INFO] [stdout] 132 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/cdefs.rs:120:13 [INFO] [stdout] | [INFO] [stdout] 120 | / match struc_m.next() { [INFO] [stdout] 121 | | Some(s) => { [INFO] [stdout] 122 | | let fields : Vec = [INFO] [stdout] 123 | | struc_m.m.search(|m| m.maybe(|m| m.space()) [INFO] [stdout] ... | [INFO] [stdout] 131 | | }, None => {} [INFO] [stdout] 132 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 120 ~ if let Some(s) = struc_m.next() { [INFO] [stdout] 121 + let fields : Vec = [INFO] [stdout] 122 + struc_m.m.search(|m| m.maybe(|m| m.space()) [INFO] [stdout] 123 + .value::()) [INFO] [stdout] 124 + .collect(); [INFO] [stdout] 125 + [INFO] [stdout] 126 + CUnit::includes(vec!["stdio.h", "stddef.h", "sys/types.h", "sys/stat.h"]) [INFO] [stdout] 127 + .struct_def(s, fields.iter()) [INFO] [stdout] 128 + .def_type4size() [INFO] [stdout] 129 + .main(s, fields.iter()); [INFO] [stdout] 130 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's named elsewhere is confusing [INFO] [stdout] --> src/cdefs.rs:46:49 [INFO] [stdout] | [INFO] [stdout] 46 | fn parse(m: Matcher<'a, ()>) -> Matcher<'a, CFieldDef> { [INFO] [stdout] | -- -- ^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | | [INFO] [stdout] | | the same lifetime is named here [INFO] [stdout] | the lifetime is named here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: consistently use `'a` [INFO] [stdout] | [INFO] [stdout] 46 | fn parse(m: Matcher<'a, ()>) -> Matcher<'a, CFieldDef<'a>> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this lifetime isn't used in the impl [INFO] [stdout] --> src/main.rs:77:6 [INFO] [stdout] | [INFO] [stdout] 77 | impl<'a> fmt::Display for TestStat { [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stdout] = note: `#[warn(clippy::extra_unused_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/main.rs:147:34 [INFO] [stdout] | [INFO] [stdout] 147 | testrep.select().map(|w| Info::Test(w)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Info::Test` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant guard [INFO] [stdout] --> src/main.rs:166:18 [INFO] [stdout] | [INFO] [stdout] 166 | Ok(n) if n == 0 => None, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_guards [INFO] [stdout] = note: `#[warn(clippy::redundant_guards)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 166 - Ok(n) if n == 0 => None, [INFO] [stdout] 166 + Ok(0) => None, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this loop could be written as a `while let` loop [INFO] [stdout] --> src/main.rs:179:5 [INFO] [stdout] | [INFO] [stdout] 179 | / loop { [INFO] [stdout] 180 | | match fill_buff(&mut buff, offset) { [INFO] [stdout] 181 | | Some(n) => { [INFO] [stdout] 182 | | let fixed_buff = String::from_utf8_lossy(&buff[0..offset+n]); [INFO] [stdout] ... | [INFO] [stdout] 203 | | } [INFO] [stdout] | |_____^ help: try: `while let Some(n) = fill_buff(&mut buff, offset) { .. }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stdout] = note: `#[warn(clippy::while_let_loop)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this loop could be written as a `for` loop [INFO] [stdout] --> src/main.rs:185:17 [INFO] [stdout] | [INFO] [stdout] 185 | while let Some(msg) = lines.next() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `for msg in lines.by_ref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_on_iterator [INFO] [stdout] = note: `#[warn(clippy::while_let_on_iterator)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: needless call to `as_bytes` [INFO] [stdout] --> src/main.rs:191:31 [INFO] [stdout] | [INFO] [stdout] 191 | let taillen = lines.tail().as_bytes().len(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: `len()` can be called directly on strings: `lines.tail().len()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_as_bytes [INFO] [stdout] = note: `#[warn(clippy::needless_as_bytes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's named elsewhere is confusing [INFO] [stdout] --> src/main.rs:18:49 [INFO] [stdout] | [INFO] [stdout] 18 | fn parse(m: Matcher<'a, ()>) -> Matcher<'a, Warning> { [INFO] [stdout] | -- -- ^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | | [INFO] [stdout] | | the same lifetime is named here [INFO] [stdout] | the lifetime is named here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: consistently use `'a` [INFO] [stdout] | [INFO] [stdout] 18 | fn parse(m: Matcher<'a, ()>) -> Matcher<'a, Warning<'a>> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's named elsewhere is confusing [INFO] [stdout] --> src/main.rs:141:45 [INFO] [stdout] | [INFO] [stdout] 141 | fn scan(msg: Matcher<'a, ()>) -> Option { [INFO] [stdout] | -- ^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is named here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: consistently use `'a` [INFO] [stdout] | [INFO] [stdout] 141 | fn scan(msg: Matcher<'a, ()>) -> Option> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/cdefs.rs:111:5 [INFO] [stdout] | [INFO] [stdout] 111 | / match load_stdin() { [INFO] [stdout] 112 | | Ok(s) => { [INFO] [stdout] 113 | | let mut struc_m : Search<&str,_> = [INFO] [stdout] 114 | | Matcher::new(s.as_str()) [INFO] [stdout] ... | [INFO] [stdout] 133 | | }, Err(_) => {} [INFO] [stdout] 134 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 111 ~ if let Ok(s) = load_stdin() { [INFO] [stdout] 112 + let mut struc_m : Search<&str,_> = [INFO] [stdout] 113 + Matcher::new(s.as_str()) [INFO] [stdout] 114 + .search(|m| m.const_str("struct") [INFO] [stdout] 115 + .space() [INFO] [stdout] 116 + .word() [INFO] [stdout] 117 + .space() [INFO] [stdout] 118 + .const_str("{")); [INFO] [stdout] 119 + match struc_m.next() { [INFO] [stdout] 120 + Some(s) => { [INFO] [stdout] 121 + let fields : Vec = [INFO] [stdout] 122 + struc_m.m.search(|m| m.maybe(|m| m.space()) [INFO] [stdout] 123 + .value::()) [INFO] [stdout] 124 + .collect(); [INFO] [stdout] 125 + [INFO] [stdout] 126 + CUnit::includes(vec!["stdio.h", "stddef.h", "sys/types.h", "sys/stat.h"]) [INFO] [stdout] 127 + .struct_def(s, fields.iter()) [INFO] [stdout] 128 + .def_type4size() [INFO] [stdout] 129 + .main(s, fields.iter()); [INFO] [stdout] 130 + }, None => {} [INFO] [stdout] 131 + } [INFO] [stdout] 132 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/cdefs.rs:120:13 [INFO] [stdout] | [INFO] [stdout] 120 | / match struc_m.next() { [INFO] [stdout] 121 | | Some(s) => { [INFO] [stdout] 122 | | let fields : Vec = [INFO] [stdout] 123 | | struc_m.m.search(|m| m.maybe(|m| m.space()) [INFO] [stdout] ... | [INFO] [stdout] 131 | | }, None => {} [INFO] [stdout] 132 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 120 ~ if let Some(s) = struc_m.next() { [INFO] [stdout] 121 + let fields : Vec = [INFO] [stdout] 122 + struc_m.m.search(|m| m.maybe(|m| m.space()) [INFO] [stdout] 123 + .value::()) [INFO] [stdout] 124 + .collect(); [INFO] [stdout] 125 + [INFO] [stdout] 126 + CUnit::includes(vec!["stdio.h", "stddef.h", "sys/types.h", "sys/stat.h"]) [INFO] [stdout] 127 + .struct_def(s, fields.iter()) [INFO] [stdout] 128 + .def_type4size() [INFO] [stdout] 129 + .main(s, fields.iter()); [INFO] [stdout] 130 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's named elsewhere is confusing [INFO] [stdout] --> src/cdefs.rs:46:49 [INFO] [stdout] | [INFO] [stdout] 46 | fn parse(m: Matcher<'a, ()>) -> Matcher<'a, CFieldDef> { [INFO] [stdout] | -- -- ^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | | [INFO] [stdout] | | the same lifetime is named here [INFO] [stdout] | the lifetime is named here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: consistently use `'a` [INFO] [stdout] | [INFO] [stdout] 46 | fn parse(m: Matcher<'a, ()>) -> Matcher<'a, CFieldDef<'a>> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this lifetime isn't used in the impl [INFO] [stdout] --> src/main.rs:77:6 [INFO] [stdout] | [INFO] [stdout] 77 | impl<'a> fmt::Display for TestStat { [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stdout] = note: `#[warn(clippy::extra_unused_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/main.rs:147:34 [INFO] [stdout] | [INFO] [stdout] 147 | testrep.select().map(|w| Info::Test(w)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Info::Test` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant guard [INFO] [stdout] --> src/main.rs:166:18 [INFO] [stdout] | [INFO] [stdout] 166 | Ok(n) if n == 0 => None, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_guards [INFO] [stdout] = note: `#[warn(clippy::redundant_guards)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 166 - Ok(n) if n == 0 => None, [INFO] [stdout] 166 + Ok(0) => None, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this loop could be written as a `while let` loop [INFO] [stdout] --> src/main.rs:179:5 [INFO] [stdout] | [INFO] [stdout] 179 | / loop { [INFO] [stdout] 180 | | match fill_buff(&mut buff, offset) { [INFO] [stdout] 181 | | Some(n) => { [INFO] [stdout] 182 | | let fixed_buff = String::from_utf8_lossy(&buff[0..offset+n]); [INFO] [stdout] ... | [INFO] [stdout] 203 | | } [INFO] [stdout] | |_____^ help: try: `while let Some(n) = fill_buff(&mut buff, offset) { .. }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stdout] = note: `#[warn(clippy::while_let_loop)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this loop could be written as a `for` loop [INFO] [stdout] --> src/main.rs:185:17 [INFO] [stdout] | [INFO] [stdout] 185 | while let Some(msg) = lines.next() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `for msg in lines.by_ref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_on_iterator [INFO] [stdout] = note: `#[warn(clippy::while_let_on_iterator)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: needless call to `as_bytes` [INFO] [stdout] --> src/main.rs:191:31 [INFO] [stdout] | [INFO] [stdout] 191 | let taillen = lines.tail().as_bytes().len(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: `len()` can be called directly on strings: `lines.tail().len()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_as_bytes [INFO] [stdout] = note: `#[warn(clippy::needless_as_bytes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's named elsewhere is confusing [INFO] [stdout] --> src/main.rs:18:49 [INFO] [stdout] | [INFO] [stdout] 18 | fn parse(m: Matcher<'a, ()>) -> Matcher<'a, Warning> { [INFO] [stdout] | -- -- ^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | | [INFO] [stdout] | | the same lifetime is named here [INFO] [stdout] | the lifetime is named here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: consistently use `'a` [INFO] [stdout] | [INFO] [stdout] 18 | fn parse(m: Matcher<'a, ()>) -> Matcher<'a, Warning<'a>> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's named elsewhere is confusing [INFO] [stdout] --> src/main.rs:141:45 [INFO] [stdout] | [INFO] [stdout] 141 | fn scan(msg: Matcher<'a, ()>) -> Option { [INFO] [stdout] | -- ^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is named here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: consistently use `'a` [INFO] [stdout] | [INFO] [stdout] 141 | fn scan(msg: Matcher<'a, ()>) -> Option> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 2.69s [INFO] running `Command { std: "docker" "inspect" "ea9fedd54b8a6b1893b8db490d5cd957feaaaeb3c6460d88c7731f500f9fbcc3", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "ea9fedd54b8a6b1893b8db490d5cd957feaaaeb3c6460d88c7731f500f9fbcc3", kill_on_drop: false }` [INFO] [stdout] ea9fedd54b8a6b1893b8db490d5cd957feaaaeb3c6460d88c7731f500f9fbcc3