[INFO] crate waterbear 0.12.0 is already in cache [INFO] extracting crate waterbear 0.12.0 into work/ex/clippy-test-run/sources/stable/reg/waterbear/0.12.0 [INFO] extracting crate waterbear 0.12.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/waterbear/0.12.0 [INFO] validating manifest of waterbear-0.12.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 waterbear-0.12.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 waterbear-0.12.0 [INFO] finished frobbing waterbear-0.12.0 [INFO] frobbed toml for waterbear-0.12.0 written to work/ex/clippy-test-run/sources/stable/reg/waterbear/0.12.0/Cargo.toml [INFO] started frobbing waterbear-0.12.0 [INFO] finished frobbing waterbear-0.12.0 [INFO] frobbed toml for waterbear-0.12.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/waterbear/0.12.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 waterbear-0.12.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-6/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/waterbear/0.12.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] 32ca60548f8c609207e24a401c72f4b3489848d187d3c36e5050ac0f7610c37a [INFO] running `"docker" "start" "-a" "32ca60548f8c609207e24a401c72f4b3489848d187d3c36e5050ac0f7610c37a"` [INFO] [stderr] Compiling waterbear v0.12.0 (/opt/crater/workdir) [INFO] [stderr] Compiling waterbear-instruction-derive v0.1.0 [INFO] [stderr] Checking uuid v0.7.2 [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser.rs:77:9 [INFO] [stderr] | [INFO] [stderr] 77 | tokens: tokens [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `tokens` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser.rs:118:13 [INFO] [stderr] | [INFO] [stderr] 118 | prefix: prefix, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `prefix` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser.rs:119:13 [INFO] [stderr] | [INFO] [stderr] 119 | infix: infix [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `infix` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser.rs:537:13 [INFO] [stderr] | [INFO] [stderr] 537 | tokens: tokens [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `tokens` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: using `writeln!(f, "")` [INFO] [stderr] --> src/ast.rs:350:21 [INFO] [stderr] | [INFO] [stderr] 350 | writeln!(f, "")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: replace it with: `writeln!(f)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::writeln_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#writeln_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/ast.rs:405:17 [INFO] [stderr] | [INFO] [stderr] 405 | write!(f, "\n")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_with_newline)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/input.rs:21:13 [INFO] [stderr] | [INFO] [stderr] 21 | name: name, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/input.rs:22:13 [INFO] [stderr] | [INFO] [stderr] 22 | text: text, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `text` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lexer.rs:100:17 [INFO] [stderr] | [INFO] [stderr] 100 | Token { token_type: token_type, span: span } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `token_type` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lexer.rs:100:41 [INFO] [stderr] | [INFO] [stderr] 100 | Token { token_type: token_type, span: span } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `span` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lexer.rs:280:13 [INFO] [stderr] | [INFO] [stderr] 280 | convert: convert [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `convert` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/location.rs:16:13 [INFO] [stderr] | [INFO] [stderr] 16 | file: file, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `file` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/location.rs:17:13 [INFO] [stderr] | [INFO] [stderr] 17 | pos: pos, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `pos` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/location.rs:18:13 [INFO] [stderr] | [INFO] [stderr] 18 | line: line, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/location.rs:19:13 [INFO] [stderr] | [INFO] [stderr] 19 | column: column [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `column` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/location.rs:58:13 [INFO] [stderr] | [INFO] [stderr] 58 | start: start, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `start` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/location.rs:59:13 [INFO] [stderr] | [INFO] [stderr] 59 | end: end, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `end` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/files.rs:20:51 [INFO] [stderr] | [INFO] [stderr] 20 | pub fn new(value: usize) -> FileID { FileID { value: value } } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `value` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/files.rs:70:13 [INFO] [stderr] | [INFO] [stderr] 70 | working_dir: working_dir, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `working_dir` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/files.rs:117:21 [INFO] [stderr] | [INFO] [stderr] 117 | contents: contents [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `contents` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/asm.rs:153:49 [INFO] [stderr] | [INFO] [stderr] 153 | value: value [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `value` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/asm.rs:185:41 [INFO] [stderr] | [INFO] [stderr] 185 | value: value [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `value` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/asm.rs:605:18 [INFO] [stderr] | [INFO] [stderr] 605 | MapEnv { name: name, map: map } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/asm.rs:605:30 [INFO] [stderr] | [INFO] [stderr] 605 | MapEnv { name: name, map: map } [INFO] [stderr] | ^^^^^^^^ help: replace it with: `map` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/env.rs:28:13 [INFO] [stderr] | [INFO] [stderr] 28 | name: name, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: using `writeln!(outfile, "")` [INFO] [stderr] --> src/lib.rs:208:9 [INFO] [stderr] | [INFO] [stderr] 208 | writeln!(outfile, "").unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `writeln!(outfile)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#writeln_empty_string [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser.rs:77:9 [INFO] [stderr] | [INFO] [stderr] 77 | tokens: tokens [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `tokens` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser.rs:118:13 [INFO] [stderr] | [INFO] [stderr] 118 | prefix: prefix, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `prefix` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser.rs:119:13 [INFO] [stderr] | [INFO] [stderr] 119 | infix: infix [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `infix` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser.rs:537:13 [INFO] [stderr] | [INFO] [stderr] 537 | tokens: tokens [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `tokens` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: using `writeln!(f, "")` [INFO] [stderr] --> src/ast.rs:350:21 [INFO] [stderr] | [INFO] [stderr] 350 | writeln!(f, "")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: replace it with: `writeln!(f)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::writeln_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#writeln_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/ast.rs:405:17 [INFO] [stderr] | [INFO] [stderr] 405 | write!(f, "\n")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_with_newline)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/input.rs:21:13 [INFO] [stderr] | [INFO] [stderr] 21 | name: name, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/input.rs:22:13 [INFO] [stderr] | [INFO] [stderr] 22 | text: text, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `text` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lexer.rs:100:17 [INFO] [stderr] | [INFO] [stderr] 100 | Token { token_type: token_type, span: span } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `token_type` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lexer.rs:100:41 [INFO] [stderr] | [INFO] [stderr] 100 | Token { token_type: token_type, span: span } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `span` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lexer.rs:280:13 [INFO] [stderr] | [INFO] [stderr] 280 | convert: convert [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `convert` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/location.rs:16:13 [INFO] [stderr] | [INFO] [stderr] 16 | file: file, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `file` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/location.rs:17:13 [INFO] [stderr] | [INFO] [stderr] 17 | pos: pos, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `pos` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/location.rs:18:13 [INFO] [stderr] | [INFO] [stderr] 18 | line: line, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/location.rs:19:13 [INFO] [stderr] | [INFO] [stderr] 19 | column: column [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `column` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/location.rs:58:13 [INFO] [stderr] | [INFO] [stderr] 58 | start: start, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `start` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/location.rs:59:13 [INFO] [stderr] | [INFO] [stderr] 59 | end: end, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `end` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/files.rs:20:51 [INFO] [stderr] | [INFO] [stderr] 20 | pub fn new(value: usize) -> FileID { FileID { value: value } } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `value` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/files.rs:70:13 [INFO] [stderr] | [INFO] [stderr] 70 | working_dir: working_dir, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `working_dir` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/files.rs:117:21 [INFO] [stderr] | [INFO] [stderr] 117 | contents: contents [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `contents` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/asm.rs:153:49 [INFO] [stderr] | [INFO] [stderr] 153 | value: value [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `value` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/asm.rs:185:41 [INFO] [stderr] | [INFO] [stderr] 185 | value: value [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `value` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/asm.rs:605:18 [INFO] [stderr] | [INFO] [stderr] 605 | MapEnv { name: name, map: map } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/asm.rs:605:30 [INFO] [stderr] | [INFO] [stderr] 605 | MapEnv { name: name, map: map } [INFO] [stderr] | ^^^^^^^^ help: replace it with: `map` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/env.rs:28:13 [INFO] [stderr] | [INFO] [stderr] 28 | name: name, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: using `writeln!(outfile, "")` [INFO] [stderr] --> src/lib.rs:208:9 [INFO] [stderr] | [INFO] [stderr] 208 | writeln!(outfile, "").unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `writeln!(outfile)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#writeln_empty_string [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/instruction.rs:382:9 [INFO] [stderr] | [INFO] [stderr] 382 | / return Err(EncodingError::mismatch_top_bits( [INFO] [stderr] 383 | | expr.span(), [INFO] [stderr] 384 | | pos, [INFO] [stderr] 385 | | addr, [INFO] [stderr] 386 | | ((pos_top >> 12) & 0xFF) as u8, [INFO] [stderr] 387 | | ((val_top >> 12) & 0xFF) as u8 [INFO] [stderr] 388 | | )); [INFO] [stderr] | |___________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 382 | Err(EncodingError::mismatch_top_bits( [INFO] [stderr] 383 | expr.span(), [INFO] [stderr] 384 | pos, [INFO] [stderr] 385 | addr, [INFO] [stderr] 386 | ((pos_top >> 12) & 0xFF) as u8, [INFO] [stderr] 387 | ((val_top >> 12) & 0xFF) as u8 [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:378:37 [INFO] [stderr] | [INFO] [stderr] 378 | let val_top = (addr as usize) & 0b1111000000000000; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider: `0b1111_0000_0000_0000` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:379:25 [INFO] [stderr] | [INFO] [stderr] 379 | let pos_top = pos & 0b1111000000000000; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider: `0b1111_0000_0000_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:380:36 [INFO] [stderr] | [INFO] [stderr] 380 | let value = ((addr as usize) & 0b0000111111111111) as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider: `0b0000_1111_1111_1111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/disasm.rs:95:16 [INFO] [stderr] | [INFO] [stderr] 95 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 96 | | if !mask[pos] { [INFO] [stderr] 97 | | let bytes = byte_range(bytes, &mask, pos); [INFO] [stderr] 98 | | let chunk = read_chunk(bytes, 16); [INFO] [stderr] ... | [INFO] [stderr] 117 | | } [INFO] [stderr] 118 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/instruction.rs:382:9 [INFO] [stderr] | [INFO] [stderr] 382 | / return Err(EncodingError::mismatch_top_bits( [INFO] [stderr] 383 | | expr.span(), [INFO] [stderr] 384 | | pos, [INFO] [stderr] 385 | | addr, [INFO] [stderr] 386 | | ((pos_top >> 12) & 0xFF) as u8, [INFO] [stderr] 387 | | ((val_top >> 12) & 0xFF) as u8 [INFO] [stderr] 388 | | )); [INFO] [stderr] | |___________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 382 | Err(EncodingError::mismatch_top_bits( [INFO] [stderr] 383 | expr.span(), [INFO] [stderr] 384 | pos, [INFO] [stderr] 385 | addr, [INFO] [stderr] 386 | ((pos_top >> 12) & 0xFF) as u8, [INFO] [stderr] 387 | ((val_top >> 12) & 0xFF) as u8 [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:378:37 [INFO] [stderr] | [INFO] [stderr] 378 | let val_top = (addr as usize) & 0b1111000000000000; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider: `0b1111_0000_0000_0000` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:379:25 [INFO] [stderr] | [INFO] [stderr] 379 | let pos_top = pos & 0b1111000000000000; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider: `0b1111_0000_0000_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:380:36 [INFO] [stderr] | [INFO] [stderr] 380 | let value = ((addr as usize) & 0b0000111111111111) as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider: `0b0000_1111_1111_1111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 95 | } else if !mask[pos] { [INFO] [stderr] 96 | let bytes = byte_range(bytes, &mask, pos); [INFO] [stderr] 97 | let chunk = read_chunk(bytes, 16); [INFO] [stderr] 98 | if !all_zeros(chunk) { [INFO] [stderr] 99 | if pos > 0 && mask[pos - 1] { [INFO] [stderr] 100 | stmts.push_comment(""); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:682:17 [INFO] [stderr] | [INFO] [stderr] 682 | let a = 0b000011111111 as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider: `0b0000_1111_1111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:683:26 [INFO] [stderr] | [INFO] [stderr] 683 | let bytes = vec![0b00101000, 0b11111111]; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0010_1000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:683:38 [INFO] [stderr] | [INFO] [stderr] 683 | let bytes = vec![0b00101000, 0b11111111]; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b1111_1111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: Unnecessary `>= y + 1` or `x - 1 >=` [INFO] [stderr] --> src/disasm.rs:1046:28 [INFO] [stderr] | [INFO] [stderr] 1046 | if instr2.size() + loc - 1 >= pos { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::int_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#int_plus_one [INFO] [stderr] help: change `>= y + 1` to `> y` as shown [INFO] [stderr] | [INFO] [stderr] 1046 | if instr2.size() + loc > pos { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/lib.rs:48:21 [INFO] [stderr] | [INFO] [stderr] 48 | const DESCRIPTION: &'static str = env!("CARGO_PKG_DESCRIPTION"); [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] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/lib.rs:49:14 [INFO] [stderr] | [INFO] [stderr] 49 | const NAME: &'static str = env!("CARGO_PKG_NAME"); [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/lib.rs:50:17 [INFO] [stderr] | [INFO] [stderr] 50 | const VERSION: &'static str = env!("CARGO_PKG_VERSION"); [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/lib.rs:51:15 [INFO] [stderr] | [INFO] [stderr] 51 | const RUSTC: &'static str = env!("RUSTC_VERSION"); [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/lib.rs:52:15 [INFO] [stderr] | [INFO] [stderr] 52 | const CARGO: &'static str = env!("CARGO_VERSION"); [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/lib.rs:53:16 [INFO] [stderr] | [INFO] [stderr] 53 | const GITSHA: &'static str = env!("GITSHA"); [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/disasm.rs:95:16 [INFO] [stderr] | [INFO] [stderr] 95 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 96 | | if !mask[pos] { [INFO] [stderr] 97 | | let bytes = byte_range(bytes, &mask, pos); [INFO] [stderr] 98 | | let chunk = read_chunk(bytes, 16); [INFO] [stderr] ... | [INFO] [stderr] 117 | | } [INFO] [stderr] 118 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 95 | } else if !mask[pos] { [INFO] [stderr] 96 | let bytes = byte_range(bytes, &mask, pos); [INFO] [stderr] 97 | let chunk = read_chunk(bytes, 16); [INFO] [stderr] 98 | if !all_zeros(chunk) { [INFO] [stderr] 99 | if pos > 0 && mask[pos - 1] { [INFO] [stderr] 100 | stmts.push_comment(""); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: Unnecessary `>= y + 1` or `x - 1 >=` [INFO] [stderr] --> src/disasm.rs:1046:28 [INFO] [stderr] | [INFO] [stderr] 1046 | if instr2.size() + loc - 1 >= pos { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::int_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#int_plus_one [INFO] [stderr] help: change `>= y + 1` to `> y` as shown [INFO] [stderr] | [INFO] [stderr] 1046 | if instr2.size() + loc > pos { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/lib.rs:48:21 [INFO] [stderr] | [INFO] [stderr] 48 | const DESCRIPTION: &'static str = env!("CARGO_PKG_DESCRIPTION"); [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] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/lib.rs:49:14 [INFO] [stderr] | [INFO] [stderr] 49 | const NAME: &'static str = env!("CARGO_PKG_NAME"); [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/lib.rs:50:17 [INFO] [stderr] | [INFO] [stderr] 50 | const VERSION: &'static str = env!("CARGO_PKG_VERSION"); [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/lib.rs:51:15 [INFO] [stderr] | [INFO] [stderr] 51 | const RUSTC: &'static str = env!("RUSTC_VERSION"); [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/lib.rs:52:15 [INFO] [stderr] | [INFO] [stderr] 52 | const CARGO: &'static str = env!("CARGO_VERSION"); [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/lib.rs:53:16 [INFO] [stderr] | [INFO] [stderr] 53 | const GITSHA: &'static str = env!("GITSHA"); [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/instruction.rs:229:48 [INFO] [stderr] | [INFO] [stderr] 229 | Instr::::decode_raw(bytes).map(|instr| decode_from_raw(instr)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `decode_from_raw` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: casting i16 to i32 may become silently lossy if types change [INFO] [stderr] --> src/instruction.rs:549:13 [INFO] [stderr] | [INFO] [stderr] 549 | r16 as i32 [INFO] [stderr] | ^^^^^^^^^^ help: try: `i32::from(r16)` [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 i8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/instruction.rs:557:13 [INFO] [stderr] | [INFO] [stderr] 557 | r8 as i32 [INFO] [stderr] | ^^^^^^^^^ help: try: `i32::from(r8)` [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: single-character string constant used as pattern [INFO] [stderr] --> src/parser.rs:160:38 [INFO] [stderr] | [INFO] [stderr] 160 | if !name.starts_with(".") [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/parser.rs:177:80 [INFO] [stderr] | [INFO] [stderr] 177 | fn parse_macro_header(&self, macros: &Macros, tokens: &mut TokenStream) -> Result<(Span,String,Vec<(Span,String)>),ParseError> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/parser.rs:231:17 [INFO] [stderr] | [INFO] [stderr] 231 | idx = idx + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `idx += 1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/parser.rs:242:29 [INFO] [stderr] | [INFO] [stderr] 242 | idx = idx + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `idx += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/parser.rs:250:21 [INFO] [stderr] | [INFO] [stderr] 250 | idx = idx + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `idx += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/parser.rs:259:17 [INFO] [stderr] | [INFO] [stderr] 259 | idx = idx + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `idx += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/parser.rs:266:32 [INFO] [stderr] | [INFO] [stderr] 266 | new_lines.push(lines[idx].clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::clone_double_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 266 | new_lines.push(&(*lines[idx]).clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 266 | new_lines.push(&[lexer::Token]::clone(lines[idx])); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/parser.rs:334:86 [INFO] [stderr] | [INFO] [stderr] 334 | if tok.is_name() && tokens.is_empty() && tok.name_matching(|n| n.starts_with(".")) { [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/parser.rs:354:65 [INFO] [stderr] | [INFO] [stderr] 354 | if tok.is_name() && tok.name_matching(|n| n.starts_with(".")) { [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/parser.rs:367:35 [INFO] [stderr] | [INFO] [stderr] 367 | if !n.starts_with(".") { [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/parser.rs:430:41 [INFO] [stderr] | [INFO] [stderr] 430 | self.parse_expr(tokens).map(|expr| ByteValue::Expr(expr)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `ByteValue::Expr` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/parser.rs:435:22 [INFO] [stderr] | [INFO] [stderr] 435 | let peeked = tokens.peek().map(|t| t.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `tokens.peek().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/parser.rs:534:5 [INFO] [stderr] | [INFO] [stderr] 534 | / pub fn from<'b>(tokens: &'b [Token]) -> TokenStream<'b> { [INFO] [stderr] 535 | | TokenStream { [INFO] [stderr] 536 | | pos: 0, [INFO] [stderr] 537 | | tokens: tokens [INFO] [stderr] 538 | | } [INFO] [stderr] 539 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: defining a method called `next` on this type; consider implementing the `std::iter::Iterator` trait or choosing a less ambiguous name [INFO] [stderr] --> src/parser.rs:633:5 [INFO] [stderr] | [INFO] [stderr] 633 | / pub fn next(&mut self) -> Result { [INFO] [stderr] 634 | | let tok = self.current()?; [INFO] [stderr] 635 | | self.advance(); [INFO] [stderr] 636 | | Ok(tok) [INFO] [stderr] 637 | | [INFO] [stderr] 638 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:685:52 [INFO] [stderr] | [INFO] [stderr] 685 | ("add", [IM(_, im)]) => instr(span, Add_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:693:54 [INFO] [stderr] | [INFO] [stderr] 693 | ("addc", [IM(_, im)]) => instr(span, Addc_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:701:52 [INFO] [stderr] | [INFO] [stderr] 701 | ("sub", [IM(_, im)]) => instr(span, Sub_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:709:54 [INFO] [stderr] | [INFO] [stderr] 709 | ("subc", [IM(_, im)]) => instr(span, Subc_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:716:52 [INFO] [stderr] | [INFO] [stderr] 716 | ("inc", [IM(_, im)]) => instr(span, Inc_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:722:52 [INFO] [stderr] | [INFO] [stderr] 722 | ("dec", [IM(_, im)]) => instr(span, Dec_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:733:52 [INFO] [stderr] | [INFO] [stderr] 733 | ("and", [IM(_, im)]) => instr(span, And_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:741:50 [INFO] [stderr] | [INFO] [stderr] 741 | ("or", [IM(_, im)]) => instr(span, Or_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:749:52 [INFO] [stderr] | [INFO] [stderr] 749 | ("xor", [IM(_, im)]) => instr(span, Xor_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:764:50 [INFO] [stderr] | [INFO] [stderr] 764 | ("ld", [IM(_, im)]) => instr(span, Ld_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:770:50 [INFO] [stderr] | [INFO] [stderr] 770 | ("st", [IM(_, im)]) => instr(span, St_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:776:75 [INFO] [stderr] | [INFO] [stderr] 776 | ("mov", [Imm(imm), IM(_, im)]) => instr(span, Mov_Rj(imm.clone(), im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:792:52 [INFO] [stderr] | [INFO] [stderr] 792 | ("xch", [IM(_, im)]) => instr(span, Xch_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:834:63 [INFO] [stderr] | [INFO] [stderr] 834 | ("dbnz", [IM(_, im), Ex(mem)]) => instr(span, Dbnz_Ri(im.clone(), mem.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:841:69 [INFO] [stderr] | [INFO] [stderr] 841 | ("be", [IM(_, im), Imm(imm), Ex(mem)]) => instr(span, Be_Rj(im.clone(), imm.clone(), mem.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:849:71 [INFO] [stderr] | [INFO] [stderr] 849 | ("bne", [IM(_, im), Imm(imm), Ex(mem)]) => instr(span, Bne_Rj(im.clone(), imm.clone(), mem.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/parser.rs:950:82 [INFO] [stderr] | [INFO] [stderr] 950 | pub fn infix(&self, location: Location, token_type: ExprTokenType) -> Result<&Box,ParseError> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&dyn InfixParselet` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::borrowed_box)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/parser.rs:957:83 [INFO] [stderr] | [INFO] [stderr] 957 | pub fn prefix(&self, location: Location, token_type: ExprTokenType) -> Result<&Box,ParseError> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&dyn PrefixParselet` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/ast.rs:64:25 [INFO] [stderr] | [INFO] [stderr] 64 | pub fn is_immediate(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/ast.rs:72:32 [INFO] [stderr] | [INFO] [stderr] 72 | pub fn is_indirection_mode(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/ast.rs:80:19 [INFO] [stderr] | [INFO] [stderr] 80 | pub fn is_mem(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/ast.rs:168:17 [INFO] [stderr] | [INFO] [stderr] 168 | mult = mult + multiple; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `mult += multiple` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/ast.rs:181:47 [INFO] [stderr] | [INFO] [stderr] 181 | ByteValue::Expr(_) => count = count + 1, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `count += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/ast.rs:182:55 [INFO] [stderr] | [INFO] [stderr] 182 | ByteValue::String(_, vals) => count = count + vals.len() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `count += vals.len()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/ast.rs:287:5 [INFO] [stderr] | [INFO] [stderr] 287 | Instr(Span, Instr), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::large_enum_variant)] on by default [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] --> src/ast.rs:287:5 [INFO] [stderr] | [INFO] [stderr] 287 | Instr(Span, Instr), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/ast.rs:349:47 [INFO] [stderr] | [INFO] [stderr] 349 | } else if comment.starts_with("\n") { [INFO] [stderr] | ^^^^ help: try using a char instead: `'\n'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/ast.rs:413:29 [INFO] [stderr] | [INFO] [stderr] 413 | fn escape_string<'a>(bytes: &Vec) -> String { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/ast.rs:413:18 [INFO] [stderr] | [INFO] [stderr] 413 | fn escape_string<'a>(bytes: &Vec) -> String { [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::extra_unused_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/ast.rs:466:9 [INFO] [stderr] | [INFO] [stderr] 466 | index = index + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `index += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 26 [INFO] [stderr] --> src/expression.rs:158:5 [INFO] [stderr] | [INFO] [stderr] 158 | / fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { [INFO] [stderr] 159 | | match self { [INFO] [stderr] 160 | | Expr::Name(_, name) => write!(f, "{}", name), [INFO] [stderr] 161 | | Expr::Plus(left, right) => { [INFO] [stderr] ... | [INFO] [stderr] 250 | | } [INFO] [stderr] 251 | | } [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: Negation by multiplying with -1 [INFO] [stderr] --> src/expression.rs:280:45 [INFO] [stderr] | [INFO] [stderr] 280 | Expr::UnaryMinus(_, expr) => Ok(-1 * expr.eval(name_lookup)?), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::neg_multiply)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#neg_multiply [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/expression.rs:317:18 [INFO] [stderr] | [INFO] [stderr] 317 | pub fn index(&self) -> u8 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: item `input::Input<'b>` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/input.rs:18:1 [INFO] [stderr] | [INFO] [stderr] 18 | / impl<'b> Input<'b> { [INFO] [stderr] 19 | | pub fn new<'y>(name: FileID, text: &'y str) -> Input<'y> { [INFO] [stderr] 20 | | Input { [INFO] [stderr] 21 | | name: name, [INFO] [stderr] ... | [INFO] [stderr] 110 | | } [INFO] [stderr] 111 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/input.rs:19:5 [INFO] [stderr] | [INFO] [stderr] 19 | / pub fn new<'y>(name: FileID, text: &'y str) -> Input<'y> { [INFO] [stderr] 20 | | Input { [INFO] [stderr] 21 | | name: name, [INFO] [stderr] 22 | | text: text, [INFO] [stderr] ... | [INFO] [stderr] 26 | | } [INFO] [stderr] 27 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [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/input.rs:79:9 [INFO] [stderr] | [INFO] [stderr] 79 | / match RE.captures_iter(&self.text[self.pos..]).next() { [INFO] [stderr] 80 | | Some(cap) => skipped += cap[0].len(), [INFO] [stderr] 81 | | None => () [INFO] [stderr] 82 | | } [INFO] [stderr] | |_________^ help: try this: `if let Some(cap) = RE.captures_iter(&self.text[self.pos..]).next() { skipped += cap[0].len() }` [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: this loop could be written as a `while let` loop [INFO] [stderr] --> src/input.rs:92:9 [INFO] [stderr] | [INFO] [stderr] 92 | / loop { [INFO] [stderr] 93 | | match graphemes.next() { [INFO] [stderr] 94 | | Some(text) => { [INFO] [stderr] 95 | | if (input.pos - start) + text.len() > num_bytes { [INFO] [stderr] ... | [INFO] [stderr] 107 | | } [INFO] [stderr] 108 | | } [INFO] [stderr] | |_________^ help: try: `while let Some(text) = graphemes.next() { .. }` [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: single-character string constant used as pattern [INFO] [stderr] --> src/lexer.rs:203:38 [INFO] [stderr] | [INFO] [stderr] 203 | Name(n) => n.starts_with("."), [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lexer.rs:211:44 [INFO] [stderr] | [INFO] [stderr] 211 | MacroLabel(n) => n.starts_with("."), [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/lexer.rs:321:9 [INFO] [stderr] | [INFO] [stderr] 321 | skipped = skipped + 1 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `skipped += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lexer.rs:328:8 [INFO] [stderr] | [INFO] [stderr] 328 | if text.len() > 0 && input.start_of_line() && text.as_bytes()[0] == b'*' { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!text.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lexer.rs:336:8 [INFO] [stderr] | [INFO] [stderr] 336 | if text.len() > 0 && text.as_bytes()[0] == b';' { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!text.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of left operand [INFO] [stderr] --> src/files.rs:85:16 [INFO] [stderr] | [INFO] [stderr] 85 | if &file.name == filename { [INFO] [stderr] | ----------^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: use the left value directly: `file.name` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/asm.rs:114:66 [INFO] [stderr] | [INFO] [stderr] 114 | byte_vals.push(ByteValue::Expr(Expr::num(*byte as i32))); [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `i32::from(*byte)` [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 i8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/asm.rs:148:48 [INFO] [stderr] | [INFO] [stderr] 148 | if value < (std::i8::MIN as i32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(std::i8::MIN)` [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 i32 may become silently lossy if types change [INFO] [stderr] --> src/asm.rs:149:52 [INFO] [stderr] | [INFO] [stderr] 149 | || value > (std::u8::MAX as i32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(std::u8::MAX)` [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: manual implementation of an assign operation [INFO] [stderr] --> src/asm.rs:159:37 [INFO] [stderr] | [INFO] [stderr] 159 | pos = pos + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `pos += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/asm.rs:164:41 [INFO] [stderr] | [INFO] [stderr] 164 | pos = pos + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `pos += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: casting i16 to i32 may become silently lossy if types change [INFO] [stderr] --> src/asm.rs:180:40 [INFO] [stderr] | [INFO] [stderr] 180 | if value < (std::i16::MIN as i32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(std::i16::MIN)` [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 u16 to i32 may become silently lossy if types change [INFO] [stderr] --> src/asm.rs:181:44 [INFO] [stderr] | [INFO] [stderr] 181 | || value > (std::u16::MAX as i32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(std::u16::MAX)` [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: manual implementation of an assign operation [INFO] [stderr] --> src/asm.rs:191:29 [INFO] [stderr] | [INFO] [stderr] 191 | pos = pos + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `pos += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/asm.rs:193:29 [INFO] [stderr] | [INFO] [stderr] 193 | pos = pos + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `pos += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/asm.rs:203:38 [INFO] [stderr] | [INFO] [stderr] 203 | if !name.starts_with(".") { [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/asm.rs:212:21 [INFO] [stderr] | [INFO] [stderr] 212 | pos = pos + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `pos += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stderr] --> src/asm.rs:364:5 [INFO] [stderr] | [INFO] [stderr] 364 | / if names.contains_key(&name) { [INFO] [stderr] 365 | | Err(AssemblyError::NameAlreadyExists(value.span.clone(), names[&name].span.clone(), name.clone())) [INFO] [stderr] 366 | | } else { [INFO] [stderr] 367 | | names.insert(name, value); [INFO] [stderr] 368 | | Ok(()) [INFO] [stderr] 369 | | } [INFO] [stderr] | |_____^ help: consider using: `names.entry(name)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_entry)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/asm.rs:397:37 [INFO] [stderr] | [INFO] [stderr] 397 | if name.starts_with(".") { [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/instruction.rs:229:48 [INFO] [stderr] | [INFO] [stderr] 229 | Instr::::decode_raw(bytes).map(|instr| decode_from_raw(instr)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `decode_from_raw` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [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/asm.rs:518:9 [INFO] [stderr] | [INFO] [stderr] 518 | / match stmt { [INFO] [stderr] 519 | | MacroStatement::MacroLabel(span, name) => { [INFO] [stderr] 520 | | if !map.contains_key(name) { [INFO] [stderr] 521 | | let label_name = format!("{}_{}", name.replace("%", ""), Uuid::new_v4().to_string().replace("-", "")); [INFO] [stderr] ... | [INFO] [stderr] 527 | | _ => {}, [INFO] [stderr] 528 | | } [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] 518 | if let MacroStatement::MacroLabel(span, name) = stmt { [INFO] [stderr] 519 | if !map.contains_key(name) { [INFO] [stderr] 520 | let label_name = format!("{}_{}", name.replace("%", ""), Uuid::new_v4().to_string().replace("-", "")); [INFO] [stderr] 521 | map.insert(name.to_owned(), label_name); [INFO] [stderr] 522 | } else { [INFO] [stderr] 523 | return Err(AssemblyError::DuplicateLabel(span.clone())); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/disasm.rs:71:47 [INFO] [stderr] | [INFO] [stderr] 71 | let mut vec: Vec = set.iter().map(|v| *v).collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `set.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disasm.rs:94:13 [INFO] [stderr] | [INFO] [stderr] 94 | pos = pos + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `pos += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disasm.rs:114:17 [INFO] [stderr] | [INFO] [stderr] 114 | pos = pos + chunk.len(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `pos += chunk.len()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disasm.rs:116:17 [INFO] [stderr] | [INFO] [stderr] 116 | pos = pos + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `pos += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/disasm.rs:149:1 [INFO] [stderr] | [INFO] [stderr] 149 | / fn read_chunk<'a>(bytes: &'a [u8], size: usize) -> &'a [u8] { [INFO] [stderr] 150 | | let mut end = 0; [INFO] [stderr] 151 | | while end < bytes.len() && end < size { [INFO] [stderr] 152 | | end = end + 1; [INFO] [stderr] 153 | | } [INFO] [stderr] 154 | | &bytes[0..end] [INFO] [stderr] 155 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disasm.rs:152:9 [INFO] [stderr] | [INFO] [stderr] 152 | end = end + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `end += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disasm.rs:160:9 [INFO] [stderr] | [INFO] [stderr] 160 | end = end + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `end += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/disasm.rs:166:52 [INFO] [stderr] | [INFO] [stderr] 166 | names.label(addr).map(|name| Expr::name(name)).unwrap_or(Expr::num(addr as i32)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| Expr::num(addr as i32))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/disasm.rs:170:61 [INFO] [stderr] | [INFO] [stderr] 170 | names.alias(addr as usize).map(|name| Expr::name(name)).unwrap_or(Expr::num(addr as i32)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| Expr::num(addr as i32))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/disasm.rs:175:67 [INFO] [stderr] | [INFO] [stderr] 175 | names.psw_bit(addr as usize).map(|name| Expr::name(name)).unwrap_or(Expr::num(addr as i32)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| Expr::num(addr as i32))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/disasm.rs:903:37 [INFO] [stderr] | [INFO] [stderr] 903 | let mut positions: Vec = entry_points.iter().map(|x| *x).collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `entry_points.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: methods called `new` usually return `Self` [INFO] [stderr] --> src/disasm.rs:1031:5 [INFO] [stderr] | [INFO] [stderr] 1031 | / pub fn new() -> InstructionGraph { [INFO] [stderr] 1032 | | InstructionGraph { [INFO] [stderr] 1033 | | instrs: HashMap::new(), [INFO] [stderr] 1034 | | jump_to: HashMap::new(), [INFO] [stderr] 1035 | | jump_from: HashMap::new() [INFO] [stderr] 1036 | | } [INFO] [stderr] 1037 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_ret_no_self)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_ret_no_self [INFO] [stderr] [INFO] [stderr] warning: casting i16 to i32 may become silently lossy if types change [INFO] [stderr] --> src/instruction.rs:549:13 [INFO] [stderr] | [INFO] [stderr] 549 | r16 as i32 [INFO] [stderr] | ^^^^^^^^^^ help: try: `i32::from(r16)` [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 i8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/instruction.rs:557:13 [INFO] [stderr] | [INFO] [stderr] 557 | r8 as i32 [INFO] [stderr] | ^^^^^^^^^ help: try: `i32::from(r8)` [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/disasm.rs:1075:9 [INFO] [stderr] | [INFO] [stderr] 1075 | self.instrs.get(&pos).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.instrs[&pos]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stderr] --> src/disasm.rs:1079:9 [INFO] [stderr] | [INFO] [stderr] 1079 | / if !self.jump_to.contains_key(&from) { [INFO] [stderr] 1080 | | self.jump_to.insert(from, HashSet::new()); [INFO] [stderr] 1081 | | } [INFO] [stderr] | |_________^ help: consider using: `self.jump_to.entry(from).or_insert(HashSet::new())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stderr] --> src/disasm.rs:1083:9 [INFO] [stderr] | [INFO] [stderr] 1083 | / if !self.jump_from.contains_key(&to) { [INFO] [stderr] 1084 | | self.jump_from.insert(to, HashSet::new()); [INFO] [stderr] 1085 | | } [INFO] [stderr] | |_________^ help: consider using: `self.jump_from.entry(to).or_insert(HashSet::new())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/disasm.rs:1105:19 [INFO] [stderr] | [INFO] [stderr] 1105 | pub fn to_vec(self) -> Vec { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/disasm.rs:1163:48 [INFO] [stderr] | [INFO] [stderr] 1163 | vec.push(ByteValue::Expr(Expr::num(*byte as i32))); [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `i32::from(*byte)` [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: single-character string constant used as pattern [INFO] [stderr] --> src/disasm.rs:1207:43 [INFO] [stderr] | [INFO] [stderr] 1207 | if old.trim_right().ends_with(".") { [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/env.rs:15:9 [INFO] [stderr] | [INFO] [stderr] 15 | self.get(name).map(|x| x.clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.get(name).cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/env.rs:30:22 [INFO] [stderr] | [INFO] [stderr] 30 | locals: &self.locals.get(current_global).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.locals[current_global]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/env.rs:48:29 [INFO] [stderr] | [INFO] [stderr] 48 | if name.starts_with(".") { [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/env.rs:49:13 [INFO] [stderr] | [INFO] [stderr] 49 | self.locals.get(name).map(|r| *r) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.locals.get(name).cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/env.rs:51:13 [INFO] [stderr] | [INFO] [stderr] 51 | self.globals.get(name).map(|r| *r) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.globals.get(name).cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/lib.rs:91:33 [INFO] [stderr] | [INFO] [stderr] 91 | let dir = path.parent().unwrap_or(Path::new("")).to_str().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| Path::new(""))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: The function/method `print_error` doesn't need a mutable reference [INFO] [stderr] --> src/lib.rs:108:29 [INFO] [stderr] | [INFO] [stderr] 108 | print_error(&mut files, err, &mut stdout); [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_mut_passed)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/lib.rs:125:33 [INFO] [stderr] | [INFO] [stderr] 125 | let dir = path.parent().unwrap_or(Path::new("")).to_str().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| Path::new(""))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: The function/method `print_error` doesn't need a mutable reference [INFO] [stderr] --> src/lib.rs:142:29 [INFO] [stderr] | [INFO] [stderr] 142 | print_error(&mut files, err, &mut stdout); [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/lib.rs:145:19 [INFO] [stderr] | [INFO] [stderr] 145 | } else if let Some(_) = matches.subcommand_matches("version") { [INFO] [stderr] | ____________- ^^^^^^^ [INFO] [stderr] 146 | | stdout.magenta() [INFO] [stderr] 147 | | .writeln(" _ _") [INFO] [stderr] 148 | | .writeln(" | | | |") [INFO] [stderr] ... | [INFO] [stderr] 181 | | std::process::exit(1); [INFO] [stderr] 182 | | } [INFO] [stderr] | |_____- help: try this: `if matches.subcommand_matches("version").is_some()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/parser.rs:160:38 [INFO] [stderr] | [INFO] [stderr] 160 | if !name.starts_with(".") [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/parser.rs:177:80 [INFO] [stderr] | [INFO] [stderr] 177 | fn parse_macro_header(&self, macros: &Macros, tokens: &mut TokenStream) -> Result<(Span,String,Vec<(Span,String)>),ParseError> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/parser.rs:231:17 [INFO] [stderr] | [INFO] [stderr] 231 | idx = idx + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `idx += 1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/parser.rs:242:29 [INFO] [stderr] | [INFO] [stderr] 242 | idx = idx + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `idx += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/parser.rs:250:21 [INFO] [stderr] | [INFO] [stderr] 250 | idx = idx + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `idx += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/parser.rs:259:17 [INFO] [stderr] | [INFO] [stderr] 259 | idx = idx + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `idx += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/parser.rs:266:32 [INFO] [stderr] | [INFO] [stderr] 266 | new_lines.push(lines[idx].clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::clone_double_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 266 | new_lines.push(&(*lines[idx]).clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 266 | new_lines.push(&[lexer::Token]::clone(lines[idx])); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/parser.rs:334:86 [INFO] [stderr] | [INFO] [stderr] 334 | if tok.is_name() && tokens.is_empty() && tok.name_matching(|n| n.starts_with(".")) { [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [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/lib.rs:629:5 [INFO] [stderr] | [INFO] [stderr] 629 | / match span.parent() { [INFO] [stderr] 630 | | Some(parent) => { [INFO] [stderr] 631 | | stdout.newline() [INFO] [stderr] 632 | | .cyan() [INFO] [stderr] ... | [INFO] [stderr] 639 | | None => {} [INFO] [stderr] 640 | | } [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] 629 | if let Some(parent) = span.parent() { [INFO] [stderr] 630 | stdout.newline() [INFO] [stderr] 631 | .cyan() [INFO] [stderr] 632 | .write("Derived From") [INFO] [stderr] 633 | .reset() [INFO] [stderr] 634 | .writeln(":") [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/parser.rs:354:65 [INFO] [stderr] | [INFO] [stderr] 354 | if tok.is_name() && tok.name_matching(|n| n.starts_with(".")) { [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: the variable `col` is used as a loop counter. Consider using `for (col, item) in graphemes.enumerate()` or similar iterators [INFO] [stderr] --> src/lib.rs:652:21 [INFO] [stderr] | [INFO] [stderr] 652 | for grapheme in graphemes { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_counter_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/lib.rs:661:44 [INFO] [stderr] | [INFO] [stderr] 661 | } else if col > start && col < end { [INFO] [stderr] | ____________________________________________^ [INFO] [stderr] 662 | | result.push_str("^"); [INFO] [stderr] 663 | | } else { [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/parser.rs:367:35 [INFO] [stderr] | [INFO] [stderr] 367 | if !n.starts_with(".") { [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] [INFO] [stderr] note: same as this [INFO] [stderr] --> src/lib.rs:659:32 [INFO] [stderr] | [INFO] [stderr] 659 | } else if col == start { [INFO] [stderr] | ________________________________^ [INFO] [stderr] 660 | | result.push_str("^"); [INFO] [stderr] 661 | | } else if col > start && col < end { [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/parser.rs:430:41 [INFO] [stderr] | [INFO] [stderr] 430 | self.parse_expr(tokens).map(|expr| ByteValue::Expr(expr)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `ByteValue::Expr` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/parser.rs:435:22 [INFO] [stderr] | [INFO] [stderr] 435 | let peeked = tokens.peek().map(|t| t.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `tokens.peek().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/parser.rs:534:5 [INFO] [stderr] | [INFO] [stderr] 534 | / pub fn from<'b>(tokens: &'b [Token]) -> TokenStream<'b> { [INFO] [stderr] 535 | | TokenStream { [INFO] [stderr] 536 | | pos: 0, [INFO] [stderr] 537 | | tokens: tokens [INFO] [stderr] 538 | | } [INFO] [stderr] 539 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: defining a method called `next` on this type; consider implementing the `std::iter::Iterator` trait or choosing a less ambiguous name [INFO] [stderr] --> src/parser.rs:633:5 [INFO] [stderr] | [INFO] [stderr] 633 | / pub fn next(&mut self) -> Result { [INFO] [stderr] 634 | | let tok = self.current()?; [INFO] [stderr] 635 | | self.advance(); [INFO] [stderr] 636 | | Ok(tok) [INFO] [stderr] 637 | | [INFO] [stderr] 638 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `waterbear`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:685:52 [INFO] [stderr] | [INFO] [stderr] 685 | ("add", [IM(_, im)]) => instr(span, Add_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:693:54 [INFO] [stderr] | [INFO] [stderr] 693 | ("addc", [IM(_, im)]) => instr(span, Addc_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:701:52 [INFO] [stderr] | [INFO] [stderr] 701 | ("sub", [IM(_, im)]) => instr(span, Sub_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:709:54 [INFO] [stderr] | [INFO] [stderr] 709 | ("subc", [IM(_, im)]) => instr(span, Subc_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:716:52 [INFO] [stderr] | [INFO] [stderr] 716 | ("inc", [IM(_, im)]) => instr(span, Inc_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:722:52 [INFO] [stderr] | [INFO] [stderr] 722 | ("dec", [IM(_, im)]) => instr(span, Dec_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:733:52 [INFO] [stderr] | [INFO] [stderr] 733 | ("and", [IM(_, im)]) => instr(span, And_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:741:50 [INFO] [stderr] | [INFO] [stderr] 741 | ("or", [IM(_, im)]) => instr(span, Or_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:749:52 [INFO] [stderr] | [INFO] [stderr] 749 | ("xor", [IM(_, im)]) => instr(span, Xor_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:764:50 [INFO] [stderr] | [INFO] [stderr] 764 | ("ld", [IM(_, im)]) => instr(span, Ld_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:770:50 [INFO] [stderr] | [INFO] [stderr] 770 | ("st", [IM(_, im)]) => instr(span, St_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:776:75 [INFO] [stderr] | [INFO] [stderr] 776 | ("mov", [Imm(imm), IM(_, im)]) => instr(span, Mov_Rj(imm.clone(), im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:792:52 [INFO] [stderr] | [INFO] [stderr] 792 | ("xch", [IM(_, im)]) => instr(span, Xch_Ri(im.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:834:63 [INFO] [stderr] | [INFO] [stderr] 834 | ("dbnz", [IM(_, im), Ex(mem)]) => instr(span, Dbnz_Ri(im.clone(), mem.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:841:69 [INFO] [stderr] | [INFO] [stderr] 841 | ("be", [IM(_, im), Imm(imm), Ex(mem)]) => instr(span, Be_Rj(im.clone(), imm.clone(), mem.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:849:71 [INFO] [stderr] | [INFO] [stderr] 849 | ("bne", [IM(_, im), Imm(imm), Ex(mem)]) => instr(span, Bne_Rj(im.clone(), imm.clone(), mem.clone())), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*im` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/parser.rs:950:82 [INFO] [stderr] | [INFO] [stderr] 950 | pub fn infix(&self, location: Location, token_type: ExprTokenType) -> Result<&Box,ParseError> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&dyn InfixParselet` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::borrowed_box)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/parser.rs:957:83 [INFO] [stderr] | [INFO] [stderr] 957 | pub fn prefix(&self, location: Location, token_type: ExprTokenType) -> Result<&Box,ParseError> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&dyn PrefixParselet` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/ast.rs:64:25 [INFO] [stderr] | [INFO] [stderr] 64 | pub fn is_immediate(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/ast.rs:72:32 [INFO] [stderr] | [INFO] [stderr] 72 | pub fn is_indirection_mode(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/ast.rs:80:19 [INFO] [stderr] | [INFO] [stderr] 80 | pub fn is_mem(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/ast.rs:168:17 [INFO] [stderr] | [INFO] [stderr] 168 | mult = mult + multiple; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `mult += multiple` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/ast.rs:181:47 [INFO] [stderr] | [INFO] [stderr] 181 | ByteValue::Expr(_) => count = count + 1, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `count += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/ast.rs:182:55 [INFO] [stderr] | [INFO] [stderr] 182 | ByteValue::String(_, vals) => count = count + vals.len() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `count += vals.len()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/ast.rs:287:5 [INFO] [stderr] | [INFO] [stderr] 287 | Instr(Span, Instr), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::large_enum_variant)] on by default [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] --> src/ast.rs:287:5 [INFO] [stderr] | [INFO] [stderr] 287 | Instr(Span, Instr), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/ast.rs:349:47 [INFO] [stderr] | [INFO] [stderr] 349 | } else if comment.starts_with("\n") { [INFO] [stderr] | ^^^^ help: try using a char instead: `'\n'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/ast.rs:413:29 [INFO] [stderr] | [INFO] [stderr] 413 | fn escape_string<'a>(bytes: &Vec) -> String { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/ast.rs:413:18 [INFO] [stderr] | [INFO] [stderr] 413 | fn escape_string<'a>(bytes: &Vec) -> String { [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::extra_unused_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/ast.rs:466:9 [INFO] [stderr] | [INFO] [stderr] 466 | index = index + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `index += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 26 [INFO] [stderr] --> src/expression.rs:158:5 [INFO] [stderr] | [INFO] [stderr] 158 | / fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { [INFO] [stderr] 159 | | match self { [INFO] [stderr] 160 | | Expr::Name(_, name) => write!(f, "{}", name), [INFO] [stderr] 161 | | Expr::Plus(left, right) => { [INFO] [stderr] ... | [INFO] [stderr] 250 | | } [INFO] [stderr] 251 | | } [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: Negation by multiplying with -1 [INFO] [stderr] --> src/expression.rs:280:45 [INFO] [stderr] | [INFO] [stderr] 280 | Expr::UnaryMinus(_, expr) => Ok(-1 * expr.eval(name_lookup)?), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::neg_multiply)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#neg_multiply [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/expression.rs:317:18 [INFO] [stderr] | [INFO] [stderr] 317 | pub fn index(&self) -> u8 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: item `input::Input<'b>` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/input.rs:18:1 [INFO] [stderr] | [INFO] [stderr] 18 | / impl<'b> Input<'b> { [INFO] [stderr] 19 | | pub fn new<'y>(name: FileID, text: &'y str) -> Input<'y> { [INFO] [stderr] 20 | | Input { [INFO] [stderr] 21 | | name: name, [INFO] [stderr] ... | [INFO] [stderr] 110 | | } [INFO] [stderr] 111 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/input.rs:19:5 [INFO] [stderr] | [INFO] [stderr] 19 | / pub fn new<'y>(name: FileID, text: &'y str) -> Input<'y> { [INFO] [stderr] 20 | | Input { [INFO] [stderr] 21 | | name: name, [INFO] [stderr] 22 | | text: text, [INFO] [stderr] ... | [INFO] [stderr] 26 | | } [INFO] [stderr] 27 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [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/input.rs:79:9 [INFO] [stderr] | [INFO] [stderr] 79 | / match RE.captures_iter(&self.text[self.pos..]).next() { [INFO] [stderr] 80 | | Some(cap) => skipped += cap[0].len(), [INFO] [stderr] 81 | | None => () [INFO] [stderr] 82 | | } [INFO] [stderr] | |_________^ help: try this: `if let Some(cap) = RE.captures_iter(&self.text[self.pos..]).next() { skipped += cap[0].len() }` [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: this loop could be written as a `while let` loop [INFO] [stderr] --> src/input.rs:92:9 [INFO] [stderr] | [INFO] [stderr] 92 | / loop { [INFO] [stderr] 93 | | match graphemes.next() { [INFO] [stderr] 94 | | Some(text) => { [INFO] [stderr] 95 | | if (input.pos - start) + text.len() > num_bytes { [INFO] [stderr] ... | [INFO] [stderr] 107 | | } [INFO] [stderr] 108 | | } [INFO] [stderr] | |_________^ help: try: `while let Some(text) = graphemes.next() { .. }` [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: single-character string constant used as pattern [INFO] [stderr] --> src/lexer.rs:203:38 [INFO] [stderr] | [INFO] [stderr] 203 | Name(n) => n.starts_with("."), [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lexer.rs:211:44 [INFO] [stderr] | [INFO] [stderr] 211 | MacroLabel(n) => n.starts_with("."), [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/lexer.rs:321:9 [INFO] [stderr] | [INFO] [stderr] 321 | skipped = skipped + 1 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `skipped += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lexer.rs:328:8 [INFO] [stderr] | [INFO] [stderr] 328 | if text.len() > 0 && input.start_of_line() && text.as_bytes()[0] == b'*' { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!text.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lexer.rs:336:8 [INFO] [stderr] | [INFO] [stderr] 336 | if text.len() > 0 && text.as_bytes()[0] == b';' { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!text.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of left operand [INFO] [stderr] --> src/files.rs:85:16 [INFO] [stderr] | [INFO] [stderr] 85 | if &file.name == filename { [INFO] [stderr] | ----------^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: use the left value directly: `file.name` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/asm.rs:114:66 [INFO] [stderr] | [INFO] [stderr] 114 | byte_vals.push(ByteValue::Expr(Expr::num(*byte as i32))); [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `i32::from(*byte)` [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 i8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/asm.rs:148:48 [INFO] [stderr] | [INFO] [stderr] 148 | if value < (std::i8::MIN as i32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(std::i8::MIN)` [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 i32 may become silently lossy if types change [INFO] [stderr] --> src/asm.rs:149:52 [INFO] [stderr] | [INFO] [stderr] 149 | || value > (std::u8::MAX as i32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(std::u8::MAX)` [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: manual implementation of an assign operation [INFO] [stderr] --> src/asm.rs:159:37 [INFO] [stderr] | [INFO] [stderr] 159 | pos = pos + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `pos += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/asm.rs:164:41 [INFO] [stderr] | [INFO] [stderr] 164 | pos = pos + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `pos += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: casting i16 to i32 may become silently lossy if types change [INFO] [stderr] --> src/asm.rs:180:40 [INFO] [stderr] | [INFO] [stderr] 180 | if value < (std::i16::MIN as i32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(std::i16::MIN)` [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 u16 to i32 may become silently lossy if types change [INFO] [stderr] --> src/asm.rs:181:44 [INFO] [stderr] | [INFO] [stderr] 181 | || value > (std::u16::MAX as i32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(std::u16::MAX)` [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: manual implementation of an assign operation [INFO] [stderr] --> src/asm.rs:191:29 [INFO] [stderr] | [INFO] [stderr] 191 | pos = pos + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `pos += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/asm.rs:193:29 [INFO] [stderr] | [INFO] [stderr] 193 | pos = pos + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `pos += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/asm.rs:203:38 [INFO] [stderr] | [INFO] [stderr] 203 | if !name.starts_with(".") { [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/asm.rs:212:21 [INFO] [stderr] | [INFO] [stderr] 212 | pos = pos + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `pos += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stderr] --> src/asm.rs:364:5 [INFO] [stderr] | [INFO] [stderr] 364 | / if names.contains_key(&name) { [INFO] [stderr] 365 | | Err(AssemblyError::NameAlreadyExists(value.span.clone(), names[&name].span.clone(), name.clone())) [INFO] [stderr] 366 | | } else { [INFO] [stderr] 367 | | names.insert(name, value); [INFO] [stderr] 368 | | Ok(()) [INFO] [stderr] 369 | | } [INFO] [stderr] | |_____^ help: consider using: `names.entry(name)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_entry)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/asm.rs:397:37 [INFO] [stderr] | [INFO] [stderr] 397 | if name.starts_with(".") { [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [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/asm.rs:518:9 [INFO] [stderr] | [INFO] [stderr] 518 | / match stmt { [INFO] [stderr] 519 | | MacroStatement::MacroLabel(span, name) => { [INFO] [stderr] 520 | | if !map.contains_key(name) { [INFO] [stderr] 521 | | let label_name = format!("{}_{}", name.replace("%", ""), Uuid::new_v4().to_string().replace("-", "")); [INFO] [stderr] ... | [INFO] [stderr] 527 | | _ => {}, [INFO] [stderr] 528 | | } [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] 518 | if let MacroStatement::MacroLabel(span, name) = stmt { [INFO] [stderr] 519 | if !map.contains_key(name) { [INFO] [stderr] 520 | let label_name = format!("{}_{}", name.replace("%", ""), Uuid::new_v4().to_string().replace("-", "")); [INFO] [stderr] 521 | map.insert(name.to_owned(), label_name); [INFO] [stderr] 522 | } else { [INFO] [stderr] 523 | return Err(AssemblyError::DuplicateLabel(span.clone())); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/disasm.rs:71:47 [INFO] [stderr] | [INFO] [stderr] 71 | let mut vec: Vec = set.iter().map(|v| *v).collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `set.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disasm.rs:94:13 [INFO] [stderr] | [INFO] [stderr] 94 | pos = pos + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `pos += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disasm.rs:114:17 [INFO] [stderr] | [INFO] [stderr] 114 | pos = pos + chunk.len(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `pos += chunk.len()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disasm.rs:116:17 [INFO] [stderr] | [INFO] [stderr] 116 | pos = pos + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `pos += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/disasm.rs:149:1 [INFO] [stderr] | [INFO] [stderr] 149 | / fn read_chunk<'a>(bytes: &'a [u8], size: usize) -> &'a [u8] { [INFO] [stderr] 150 | | let mut end = 0; [INFO] [stderr] 151 | | while end < bytes.len() && end < size { [INFO] [stderr] 152 | | end = end + 1; [INFO] [stderr] 153 | | } [INFO] [stderr] 154 | | &bytes[0..end] [INFO] [stderr] 155 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disasm.rs:152:9 [INFO] [stderr] | [INFO] [stderr] 152 | end = end + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `end += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disasm.rs:160:9 [INFO] [stderr] | [INFO] [stderr] 160 | end = end + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `end += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/disasm.rs:166:52 [INFO] [stderr] | [INFO] [stderr] 166 | names.label(addr).map(|name| Expr::name(name)).unwrap_or(Expr::num(addr as i32)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| Expr::num(addr as i32))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/disasm.rs:170:61 [INFO] [stderr] | [INFO] [stderr] 170 | names.alias(addr as usize).map(|name| Expr::name(name)).unwrap_or(Expr::num(addr as i32)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| Expr::num(addr as i32))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/disasm.rs:175:67 [INFO] [stderr] | [INFO] [stderr] 175 | names.psw_bit(addr as usize).map(|name| Expr::name(name)).unwrap_or(Expr::num(addr as i32)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| Expr::num(addr as i32))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/disasm.rs:903:37 [INFO] [stderr] | [INFO] [stderr] 903 | let mut positions: Vec = entry_points.iter().map(|x| *x).collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `entry_points.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: methods called `new` usually return `Self` [INFO] [stderr] --> src/disasm.rs:1031:5 [INFO] [stderr] | [INFO] [stderr] 1031 | / pub fn new() -> InstructionGraph { [INFO] [stderr] 1032 | | InstructionGraph { [INFO] [stderr] 1033 | | instrs: HashMap::new(), [INFO] [stderr] 1034 | | jump_to: HashMap::new(), [INFO] [stderr] 1035 | | jump_from: HashMap::new() [INFO] [stderr] 1036 | | } [INFO] [stderr] 1037 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_ret_no_self)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_ret_no_self [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/disasm.rs:1075:9 [INFO] [stderr] | [INFO] [stderr] 1075 | self.instrs.get(&pos).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.instrs[&pos]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stderr] --> src/disasm.rs:1079:9 [INFO] [stderr] | [INFO] [stderr] 1079 | / if !self.jump_to.contains_key(&from) { [INFO] [stderr] 1080 | | self.jump_to.insert(from, HashSet::new()); [INFO] [stderr] 1081 | | } [INFO] [stderr] | |_________^ help: consider using: `self.jump_to.entry(from).or_insert(HashSet::new())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stderr] --> src/disasm.rs:1083:9 [INFO] [stderr] | [INFO] [stderr] 1083 | / if !self.jump_from.contains_key(&to) { [INFO] [stderr] 1084 | | self.jump_from.insert(to, HashSet::new()); [INFO] [stderr] 1085 | | } [INFO] [stderr] | |_________^ help: consider using: `self.jump_from.entry(to).or_insert(HashSet::new())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/disasm.rs:1105:19 [INFO] [stderr] | [INFO] [stderr] 1105 | pub fn to_vec(self) -> Vec { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/disasm.rs:1163:48 [INFO] [stderr] | [INFO] [stderr] 1163 | vec.push(ByteValue::Expr(Expr::num(*byte as i32))); [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `i32::from(*byte)` [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: single-character string constant used as pattern [INFO] [stderr] --> src/disasm.rs:1207:43 [INFO] [stderr] | [INFO] [stderr] 1207 | if old.trim_right().ends_with(".") { [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/env.rs:15:9 [INFO] [stderr] | [INFO] [stderr] 15 | self.get(name).map(|x| x.clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.get(name).cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/env.rs:30:22 [INFO] [stderr] | [INFO] [stderr] 30 | locals: &self.locals.get(current_global).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.locals[current_global]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/env.rs:48:29 [INFO] [stderr] | [INFO] [stderr] 48 | if name.starts_with(".") { [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/env.rs:49:13 [INFO] [stderr] | [INFO] [stderr] 49 | self.locals.get(name).map(|r| *r) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.locals.get(name).cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/env.rs:51:13 [INFO] [stderr] | [INFO] [stderr] 51 | self.globals.get(name).map(|r| *r) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.globals.get(name).cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/lib.rs:91:33 [INFO] [stderr] | [INFO] [stderr] 91 | let dir = path.parent().unwrap_or(Path::new("")).to_str().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| Path::new(""))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: The function/method `print_error` doesn't need a mutable reference [INFO] [stderr] --> src/lib.rs:108:29 [INFO] [stderr] | [INFO] [stderr] 108 | print_error(&mut files, err, &mut stdout); [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_mut_passed)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/lib.rs:125:33 [INFO] [stderr] | [INFO] [stderr] 125 | let dir = path.parent().unwrap_or(Path::new("")).to_str().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| Path::new(""))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: The function/method `print_error` doesn't need a mutable reference [INFO] [stderr] --> src/lib.rs:142:29 [INFO] [stderr] | [INFO] [stderr] 142 | print_error(&mut files, err, &mut stdout); [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/lib.rs:145:19 [INFO] [stderr] | [INFO] [stderr] 145 | } else if let Some(_) = matches.subcommand_matches("version") { [INFO] [stderr] | ____________- ^^^^^^^ [INFO] [stderr] 146 | | stdout.magenta() [INFO] [stderr] 147 | | .writeln(" _ _") [INFO] [stderr] 148 | | .writeln(" | | | |") [INFO] [stderr] ... | [INFO] [stderr] 181 | | std::process::exit(1); [INFO] [stderr] 182 | | } [INFO] [stderr] | |_____- help: try this: `if matches.subcommand_matches("version").is_some()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [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/lib.rs:629:5 [INFO] [stderr] | [INFO] [stderr] 629 | / match span.parent() { [INFO] [stderr] 630 | | Some(parent) => { [INFO] [stderr] 631 | | stdout.newline() [INFO] [stderr] 632 | | .cyan() [INFO] [stderr] ... | [INFO] [stderr] 639 | | None => {} [INFO] [stderr] 640 | | } [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] 629 | if let Some(parent) = span.parent() { [INFO] [stderr] 630 | stdout.newline() [INFO] [stderr] 631 | .cyan() [INFO] [stderr] 632 | .write("Derived From") [INFO] [stderr] 633 | .reset() [INFO] [stderr] 634 | .writeln(":") [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: the variable `col` is used as a loop counter. Consider using `for (col, item) in graphemes.enumerate()` or similar iterators [INFO] [stderr] --> src/lib.rs:652:21 [INFO] [stderr] | [INFO] [stderr] 652 | for grapheme in graphemes { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_counter_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/lib.rs:661:44 [INFO] [stderr] | [INFO] [stderr] 661 | } else if col > start && col < end { [INFO] [stderr] | ____________________________________________^ [INFO] [stderr] 662 | | result.push_str("^"); [INFO] [stderr] 663 | | } else { [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> src/lib.rs:659:32 [INFO] [stderr] | [INFO] [stderr] 659 | } else if col == start { [INFO] [stderr] | ________________________________^ [INFO] [stderr] 660 | | result.push_str("^"); [INFO] [stderr] 661 | | } else if col > start && col < end { [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `waterbear`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "32ca60548f8c609207e24a401c72f4b3489848d187d3c36e5050ac0f7610c37a"` [INFO] running `"docker" "rm" "-f" "32ca60548f8c609207e24a401c72f4b3489848d187d3c36e5050ac0f7610c37a"` [INFO] [stdout] 32ca60548f8c609207e24a401c72f4b3489848d187d3c36e5050ac0f7610c37a