[INFO] crate esparse 0.1.0 is already in cache [INFO] extracting crate esparse 0.1.0 into work/ex/clippy-test-run/sources/stable/reg/esparse/0.1.0 [INFO] extracting crate esparse 0.1.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/esparse/0.1.0 [INFO] validating manifest of esparse-0.1.0 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of esparse-0.1.0 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing esparse-0.1.0 [INFO] finished frobbing esparse-0.1.0 [INFO] frobbed toml for esparse-0.1.0 written to work/ex/clippy-test-run/sources/stable/reg/esparse/0.1.0/Cargo.toml [INFO] started frobbing esparse-0.1.0 [INFO] finished frobbing esparse-0.1.0 [INFO] frobbed toml for esparse-0.1.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/esparse/0.1.0/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting esparse-0.1.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-0/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/esparse/0.1.0:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 7930ee4414219d8f92a3baadcbf7230bcde392959051013f39cfa72931728965 [INFO] running `"docker" "start" "-a" "7930ee4414219d8f92a3baadcbf7230bcde392959051013f39cfa72931728965"` [INFO] [stderr] Checking esparse v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/lex.rs:379:22 [INFO] [stderr] | [INFO] [stderr] 379 | b'\r' => match bytes.get(last_pos) { [INFO] [stderr] | ______________________^ [INFO] [stderr] 380 | | Some(&b'\n') => last_pos += 1, [INFO] [stderr] 381 | | _ => {} [INFO] [stderr] 382 | | }, [INFO] [stderr] | |_____________^ help: try this: `if let Some(&b'\n') = bytes.get(last_pos) { last_pos += 1 }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 48 [INFO] [stderr] --> src/lex.rs:802:5 [INFO] [stderr] | [INFO] [stderr] 802 | / fn read_tok(&mut self) -> Tok<'f, 's> { [INFO] [stderr] 803 | | let (ws_before, nl_before) = match self.stream.skip_ws() { [INFO] [stderr] 804 | | Some(x) => x, [INFO] [stderr] 805 | | None => { [INFO] [stderr] ... | [INFO] [stderr] 1325 | | } [INFO] [stderr] 1326 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/lex.rs:950:37 [INFO] [stderr] | [INFO] [stderr] 950 | / match self.stream.advance() { [INFO] [stderr] 951 | | Some('\u{000D}') => { [INFO] [stderr] 952 | | self.stream.eat('\u{000A}'); [INFO] [stderr] 953 | | } [INFO] [stderr] 954 | | _ => {} [INFO] [stderr] 955 | | } [INFO] [stderr] | |_____________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 950 | if let Some('\u{000D}') = self.stream.advance() { [INFO] [stderr] 951 | self.stream.eat('\u{000A}'); [INFO] [stderr] 952 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/lex.rs:998:29 [INFO] [stderr] | [INFO] [stderr] 998 | / match self.stream.advance() { [INFO] [stderr] 999 | | Some('\u{000D}') => { [INFO] [stderr] 1000 | | self.stream.eat('\u{000A}'); [INFO] [stderr] 1001 | | } [INFO] [stderr] 1002 | | _ => {} [INFO] [stderr] 1003 | | } [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 998 | if let Some('\u{000D}') = self.stream.advance() { [INFO] [stderr] 999 | self.stream.eat('\u{000A}'); [INFO] [stderr] 1000 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/lex.rs:1031:29 [INFO] [stderr] | [INFO] [stderr] 1031 | / match self.stream.advance() { [INFO] [stderr] 1032 | | Some('\u{000D}') => { [INFO] [stderr] 1033 | | self.stream.eat('\u{000A}'); [INFO] [stderr] 1034 | | } [INFO] [stderr] 1035 | | _ => {} [INFO] [stderr] 1036 | | } [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 1031 | if let Some('\u{000D}') = self.stream.advance() { [INFO] [stderr] 1032 | self.stream.eat('\u{000A}'); [INFO] [stderr] 1033 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/lex.rs:1059:29 [INFO] [stderr] | [INFO] [stderr] 1059 | / match self.stream.advance() { [INFO] [stderr] 1060 | | Some('\u{000D}') => { [INFO] [stderr] 1061 | | self.stream.eat('\u{000A}'); [INFO] [stderr] 1062 | | } [INFO] [stderr] 1063 | | _ => {} [INFO] [stderr] 1064 | | } [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 1059 | if let Some('\u{000D}') = self.stream.advance() { [INFO] [stderr] 1060 | self.stream.eat('\u{000A}'); [INFO] [stderr] 1061 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/lex.rs:1107:37 [INFO] [stderr] | [INFO] [stderr] 1107 | / match self.stream.advance() { [INFO] [stderr] 1108 | | Some('\u{000D}') => { [INFO] [stderr] 1109 | | self.stream.eat('\u{000A}'); [INFO] [stderr] 1110 | | } [INFO] [stderr] 1111 | | _ => {} [INFO] [stderr] 1112 | | } [INFO] [stderr] | |_____________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 1107 | if let Some('\u{000D}') = self.stream.advance() { [INFO] [stderr] 1108 | self.stream.eat('\u{000A}'); [INFO] [stderr] 1109 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/lex.rs:1122:49 [INFO] [stderr] | [INFO] [stderr] 1122 | / match self.stream.advance() { [INFO] [stderr] 1123 | | Some('\u{000D}') => { [INFO] [stderr] 1124 | | self.stream.eat('\u{000A}'); [INFO] [stderr] 1125 | | } [INFO] [stderr] 1126 | | _ => {} [INFO] [stderr] 1127 | | } [INFO] [stderr] | |_________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 1122 | if let Some('\u{000D}') = self.stream.advance() { [INFO] [stderr] 1123 | self.stream.eat('\u{000A}'); [INFO] [stderr] 1124 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/lex.rs:1426:9 [INFO] [stderr] | [INFO] [stderr] 1426 | / loop { [INFO] [stderr] 1427 | | match self.here() { [INFO] [stderr] 1428 | | Some(c) => { [INFO] [stderr] 1429 | | if f(c) { [INFO] [stderr] ... | [INFO] [stderr] 1436 | | } [INFO] [stderr] 1437 | | } [INFO] [stderr] | |_________^ help: try: `while let Some(c) = self.here() { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/lex.rs:1515:9 [INFO] [stderr] | [INFO] [stderr] 1515 | / loop { [INFO] [stderr] 1516 | | match self.here() { [INFO] [stderr] 1517 | | Some(c) => match c { [INFO] [stderr] 1518 | | '\u{000A}' // LINE FEED (LF) [INFO] [stderr] ... | [INFO] [stderr] 1610 | | } [INFO] [stderr] 1611 | | } [INFO] [stderr] | |_________^ help: try: `while let Some(c) = self.here() { .. }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/lex.rs:1779:13 [INFO] [stderr] | [INFO] [stderr] 1779 | (1, b0 as u32) [INFO] [stderr] | ^^^^^^^^^ help: try: `u32::from(b0)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/lex.rs:1781:13 [INFO] [stderr] | [INFO] [stderr] 1781 | (2, ((b0 & 0x1f) as u32) << 6 | (b[n+1] & 0x3f) as u32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(b0 & 0x1f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/lex.rs:1781:41 [INFO] [stderr] | [INFO] [stderr] 1781 | (2, ((b0 & 0x1f) as u32) << 6 | (b[n+1] & 0x3f) as u32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(b[n+1] & 0x3f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/lex.rs:1783:13 [INFO] [stderr] | [INFO] [stderr] 1783 | (3, ((b0 & 0x0f) as u32) << 12 | ((b[n+1] & 0x3f) as u32) << 6 | (b[n+2] & 0x3f) as u32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(b0 & 0x0f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/lex.rs:1783:42 [INFO] [stderr] | [INFO] [stderr] 1783 | (3, ((b0 & 0x0f) as u32) << 12 | ((b[n+1] & 0x3f) as u32) << 6 | (b[n+2] & 0x3f) as u32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(b[n+1] & 0x3f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/lex.rs:1783:74 [INFO] [stderr] | [INFO] [stderr] 1783 | (3, ((b0 & 0x0f) as u32) << 12 | ((b[n+1] & 0x3f) as u32) << 6 | (b[n+2] & 0x3f) as u32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(b[n+2] & 0x3f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/lex.rs:1785:13 [INFO] [stderr] | [INFO] [stderr] 1785 | (4, ((b0 & 0x07) as u32) << 18 | ((b[n+1] & 0x3f) as u32) << 12 | ((b[n+2] & 0x3f) as u32) << 6 | (b[n+3] & 0x3f) as u32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(b0 & 0x07)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/lex.rs:1785:42 [INFO] [stderr] | [INFO] [stderr] 1785 | (4, ((b0 & 0x07) as u32) << 18 | ((b[n+1] & 0x3f) as u32) << 12 | ((b[n+2] & 0x3f) as u32) << 6 | (b[n+3] & 0x3f) as u32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(b[n+1] & 0x3f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/lex.rs:1785:75 [INFO] [stderr] | [INFO] [stderr] 1785 | (4, ((b0 & 0x07) as u32) << 18 | ((b[n+1] & 0x3f) as u32) << 12 | ((b[n+2] & 0x3f) as u32) << 6 | (b[n+3] & 0x3f) as u32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(b[n+2] & 0x3f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/lex.rs:1785:107 [INFO] [stderr] | [INFO] [stderr] 1785 | (4, ((b0 & 0x07) as u32) << 18 | ((b[n+1] & 0x3f) as u32) << 12 | ((b[n+2] & 0x3f) as u32) << 6 | (b[n+3] & 0x3f) as u32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(b[n+3] & 0x3f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 92 [INFO] [stderr] --> src/skip.rs:79:1 [INFO] [stderr] | [INFO] [stderr] 79 | / pub fn expr<'f, 's>(lex: &mut lex::Lexer<'f, 's>, prec: Prec) -> Result<()> { [INFO] [stderr] 80 | | // intentionally over-permissive [INFO] [stderr] 81 | | let mut had_primary = false; [INFO] [stderr] 82 | | loop { [INFO] [stderr] ... | [INFO] [stderr] 276 | | Ok(()) [INFO] [stderr] 277 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/lex.rs:379:22 [INFO] [stderr] | [INFO] [stderr] 379 | b'\r' => match bytes.get(last_pos) { [INFO] [stderr] | ______________________^ [INFO] [stderr] 380 | | Some(&b'\n') => last_pos += 1, [INFO] [stderr] 381 | | _ => {} [INFO] [stderr] 382 | | }, [INFO] [stderr] | |_____________^ help: try this: `if let Some(&b'\n') = bytes.get(last_pos) { last_pos += 1 }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 48 [INFO] [stderr] --> src/lex.rs:802:5 [INFO] [stderr] | [INFO] [stderr] 802 | / fn read_tok(&mut self) -> Tok<'f, 's> { [INFO] [stderr] 803 | | let (ws_before, nl_before) = match self.stream.skip_ws() { [INFO] [stderr] 804 | | Some(x) => x, [INFO] [stderr] 805 | | None => { [INFO] [stderr] ... | [INFO] [stderr] 1325 | | } [INFO] [stderr] 1326 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/lex.rs:950:37 [INFO] [stderr] | [INFO] [stderr] 950 | / match self.stream.advance() { [INFO] [stderr] 951 | | Some('\u{000D}') => { [INFO] [stderr] 952 | | self.stream.eat('\u{000A}'); [INFO] [stderr] 953 | | } [INFO] [stderr] 954 | | _ => {} [INFO] [stderr] 955 | | } [INFO] [stderr] | |_____________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 950 | if let Some('\u{000D}') = self.stream.advance() { [INFO] [stderr] 951 | self.stream.eat('\u{000A}'); [INFO] [stderr] 952 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/lex.rs:998:29 [INFO] [stderr] | [INFO] [stderr] 998 | / match self.stream.advance() { [INFO] [stderr] 999 | | Some('\u{000D}') => { [INFO] [stderr] 1000 | | self.stream.eat('\u{000A}'); [INFO] [stderr] 1001 | | } [INFO] [stderr] 1002 | | _ => {} [INFO] [stderr] 1003 | | } [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 998 | if let Some('\u{000D}') = self.stream.advance() { [INFO] [stderr] 999 | self.stream.eat('\u{000A}'); [INFO] [stderr] 1000 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/lex.rs:1031:29 [INFO] [stderr] | [INFO] [stderr] 1031 | / match self.stream.advance() { [INFO] [stderr] 1032 | | Some('\u{000D}') => { [INFO] [stderr] 1033 | | self.stream.eat('\u{000A}'); [INFO] [stderr] 1034 | | } [INFO] [stderr] 1035 | | _ => {} [INFO] [stderr] 1036 | | } [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 1031 | if let Some('\u{000D}') = self.stream.advance() { [INFO] [stderr] 1032 | self.stream.eat('\u{000A}'); [INFO] [stderr] 1033 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/lex.rs:1059:29 [INFO] [stderr] | [INFO] [stderr] 1059 | / match self.stream.advance() { [INFO] [stderr] 1060 | | Some('\u{000D}') => { [INFO] [stderr] 1061 | | self.stream.eat('\u{000A}'); [INFO] [stderr] 1062 | | } [INFO] [stderr] 1063 | | _ => {} [INFO] [stderr] 1064 | | } [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 1059 | if let Some('\u{000D}') = self.stream.advance() { [INFO] [stderr] 1060 | self.stream.eat('\u{000A}'); [INFO] [stderr] 1061 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/lex.rs:1107:37 [INFO] [stderr] | [INFO] [stderr] 1107 | / match self.stream.advance() { [INFO] [stderr] 1108 | | Some('\u{000D}') => { [INFO] [stderr] 1109 | | self.stream.eat('\u{000A}'); [INFO] [stderr] 1110 | | } [INFO] [stderr] 1111 | | _ => {} [INFO] [stderr] 1112 | | } [INFO] [stderr] | |_____________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 1107 | if let Some('\u{000D}') = self.stream.advance() { [INFO] [stderr] 1108 | self.stream.eat('\u{000A}'); [INFO] [stderr] 1109 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/lex.rs:1122:49 [INFO] [stderr] | [INFO] [stderr] 1122 | / match self.stream.advance() { [INFO] [stderr] 1123 | | Some('\u{000D}') => { [INFO] [stderr] 1124 | | self.stream.eat('\u{000A}'); [INFO] [stderr] 1125 | | } [INFO] [stderr] 1126 | | _ => {} [INFO] [stderr] 1127 | | } [INFO] [stderr] | |_________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 1122 | if let Some('\u{000D}') = self.stream.advance() { [INFO] [stderr] 1123 | self.stream.eat('\u{000A}'); [INFO] [stderr] 1124 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/lex.rs:1426:9 [INFO] [stderr] | [INFO] [stderr] 1426 | / loop { [INFO] [stderr] 1427 | | match self.here() { [INFO] [stderr] 1428 | | Some(c) => { [INFO] [stderr] 1429 | | if f(c) { [INFO] [stderr] ... | [INFO] [stderr] 1436 | | } [INFO] [stderr] 1437 | | } [INFO] [stderr] | |_________^ help: try: `while let Some(c) = self.here() { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/lex.rs:1515:9 [INFO] [stderr] | [INFO] [stderr] 1515 | / loop { [INFO] [stderr] 1516 | | match self.here() { [INFO] [stderr] 1517 | | Some(c) => match c { [INFO] [stderr] 1518 | | '\u{000A}' // LINE FEED (LF) [INFO] [stderr] ... | [INFO] [stderr] 1610 | | } [INFO] [stderr] 1611 | | } [INFO] [stderr] | |_________^ help: try: `while let Some(c) = self.here() { .. }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/lex.rs:1779:13 [INFO] [stderr] | [INFO] [stderr] 1779 | (1, b0 as u32) [INFO] [stderr] | ^^^^^^^^^ help: try: `u32::from(b0)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/lex.rs:1781:13 [INFO] [stderr] | [INFO] [stderr] 1781 | (2, ((b0 & 0x1f) as u32) << 6 | (b[n+1] & 0x3f) as u32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(b0 & 0x1f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/lex.rs:1781:41 [INFO] [stderr] | [INFO] [stderr] 1781 | (2, ((b0 & 0x1f) as u32) << 6 | (b[n+1] & 0x3f) as u32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(b[n+1] & 0x3f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/lex.rs:1783:13 [INFO] [stderr] | [INFO] [stderr] 1783 | (3, ((b0 & 0x0f) as u32) << 12 | ((b[n+1] & 0x3f) as u32) << 6 | (b[n+2] & 0x3f) as u32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(b0 & 0x0f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/lex.rs:1783:42 [INFO] [stderr] | [INFO] [stderr] 1783 | (3, ((b0 & 0x0f) as u32) << 12 | ((b[n+1] & 0x3f) as u32) << 6 | (b[n+2] & 0x3f) as u32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(b[n+1] & 0x3f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/lex.rs:1783:74 [INFO] [stderr] | [INFO] [stderr] 1783 | (3, ((b0 & 0x0f) as u32) << 12 | ((b[n+1] & 0x3f) as u32) << 6 | (b[n+2] & 0x3f) as u32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(b[n+2] & 0x3f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/lex.rs:1785:13 [INFO] [stderr] | [INFO] [stderr] 1785 | (4, ((b0 & 0x07) as u32) << 18 | ((b[n+1] & 0x3f) as u32) << 12 | ((b[n+2] & 0x3f) as u32) << 6 | (b[n+3] & 0x3f) as u32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(b0 & 0x07)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/lex.rs:1785:42 [INFO] [stderr] | [INFO] [stderr] 1785 | (4, ((b0 & 0x07) as u32) << 18 | ((b[n+1] & 0x3f) as u32) << 12 | ((b[n+2] & 0x3f) as u32) << 6 | (b[n+3] & 0x3f) as u32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(b[n+1] & 0x3f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/lex.rs:1785:75 [INFO] [stderr] | [INFO] [stderr] 1785 | (4, ((b0 & 0x07) as u32) << 18 | ((b[n+1] & 0x3f) as u32) << 12 | ((b[n+2] & 0x3f) as u32) << 6 | (b[n+3] & 0x3f) as u32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(b[n+2] & 0x3f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/lex.rs:1785:107 [INFO] [stderr] | [INFO] [stderr] 1785 | (4, ((b0 & 0x07) as u32) << 18 | ((b[n+1] & 0x3f) as u32) << 12 | ((b[n+2] & 0x3f) as u32) << 6 | (b[n+3] & 0x3f) as u32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(b[n+3] & 0x3f)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 92 [INFO] [stderr] --> src/skip.rs:79:1 [INFO] [stderr] | [INFO] [stderr] 79 | / pub fn expr<'f, 's>(lex: &mut lex::Lexer<'f, 's>, prec: Prec) -> Result<()> { [INFO] [stderr] 80 | | // intentionally over-permissive [INFO] [stderr] 81 | | let mut had_primary = false; [INFO] [stderr] 82 | | loop { [INFO] [stderr] ... | [INFO] [stderr] 276 | | Ok(()) [INFO] [stderr] 277 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> examples/lex-echo.rs:28:18 [INFO] [stderr] | [INFO] [stderr] 28 | const APP_NAME: &'static str = env!("CARGO_PKG_NAME"); [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 2.66s [INFO] running `"docker" "inspect" "7930ee4414219d8f92a3baadcbf7230bcde392959051013f39cfa72931728965"` [INFO] running `"docker" "rm" "-f" "7930ee4414219d8f92a3baadcbf7230bcde392959051013f39cfa72931728965"` [INFO] [stdout] 7930ee4414219d8f92a3baadcbf7230bcde392959051013f39cfa72931728965