[INFO] crate timi 0.2.1 is already in cache [INFO] extracting crate timi 0.2.1 into work/ex/clippy-test-run/sources/stable/reg/timi/0.2.1 [INFO] extracting crate timi 0.2.1 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/timi/0.2.1 [INFO] validating manifest of timi-0.2.1 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 timi-0.2.1 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 timi-0.2.1 [INFO] finished frobbing timi-0.2.1 [INFO] frobbed toml for timi-0.2.1 written to work/ex/clippy-test-run/sources/stable/reg/timi/0.2.1/Cargo.toml [INFO] started frobbing timi-0.2.1 [INFO] finished frobbing timi-0.2.1 [INFO] frobbed toml for timi-0.2.1 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/timi/0.2.1/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 timi-0.2.1 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-4/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/timi/0.2.1:/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] 2fec680e64751b5acaf0a0faae807674fe6399e51c042bacde28c0dcc8d121ff [INFO] running `"docker" "start" "-a" "2fec680e64751b5acaf0a0faae807674fe6399e51c042bacde28c0dcc8d121ff"` [INFO] [stderr] Checking prettytable-rs v0.6.7 [INFO] [stderr] Checking timi v0.2.1 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/machine.rs:496:13 [INFO] [stderr] | [INFO] [stderr] 496 | globals: globals, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `globals` [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/machine.rs:706:21 [INFO] [stderr] | [INFO] [stderr] 706 | fn_addr: fn_addr, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `fn_addr` [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/machine.rs:707:21 [INFO] [stderr] | [INFO] [stderr] 707 | arg_addr: arg_addr [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `arg_addr` [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/machine.rs:722:25 [INFO] [stderr] | [INFO] [stderr] 722 | arity: arity [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `arity` [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/machine.rs:899:26 [INFO] [stderr] | [INFO] [stderr] 899 | tag:tag}) [INFO] [stderr] | ^^^^^^^ help: replace it with: `tag` [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/machine.rs:1429:28 [INFO] [stderr] | [INFO] [stderr] 1429 | fn_addr: fn_addr, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `fn_addr` [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/frontend.rs:27:13 [INFO] [stderr] | [INFO] [stderr] 27 | index: index, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `index` [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/frontend.rs:28:13 [INFO] [stderr] | [INFO] [stderr] 28 | 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/frontend.rs:29:13 [INFO] [stderr] | [INFO] [stderr] 29 | col: col [INFO] [stderr] | ^^^^^^^^ help: replace it with: `col` [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/frontend.rs:261:13 [INFO] [stderr] | [INFO] [stderr] 261 | 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: redundant field names in struct initialization [INFO] [stderr] --> src/frontend.rs:263:13 [INFO] [stderr] | [INFO] [stderr] 263 | cur_range: cur_range [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `cur_range` [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/frontend.rs:741:9 [INFO] [stderr] | [INFO] [stderr] 741 | bindings: bindings, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `bindings` [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/frontend.rs:777:23 [INFO] [stderr] | [INFO] [stderr] 777 | Ok(CoreExpr::Pack{tag: tag, arity: arity }) [INFO] [stderr] | ^^^^^^^^ help: replace it with: `tag` [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/frontend.rs:777:33 [INFO] [stderr] | [INFO] [stderr] 777 | Ok(CoreExpr::Pack{tag: tag, arity: arity }) [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `arity` [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/machine.rs:496:13 [INFO] [stderr] | [INFO] [stderr] 496 | globals: globals, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `globals` [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/machine.rs:706:21 [INFO] [stderr] | [INFO] [stderr] 706 | fn_addr: fn_addr, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `fn_addr` [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/machine.rs:707:21 [INFO] [stderr] | [INFO] [stderr] 707 | arg_addr: arg_addr [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `arg_addr` [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/machine.rs:722:25 [INFO] [stderr] | [INFO] [stderr] 722 | arity: arity [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `arity` [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/machine.rs:899:26 [INFO] [stderr] | [INFO] [stderr] 899 | tag:tag}) [INFO] [stderr] | ^^^^^^^ help: replace it with: `tag` [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/machine.rs:1429:28 [INFO] [stderr] | [INFO] [stderr] 1429 | fn_addr: fn_addr, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `fn_addr` [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/frontend.rs:27:13 [INFO] [stderr] | [INFO] [stderr] 27 | index: index, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `index` [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/frontend.rs:28:13 [INFO] [stderr] | [INFO] [stderr] 28 | 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/frontend.rs:29:13 [INFO] [stderr] | [INFO] [stderr] 29 | col: col [INFO] [stderr] | ^^^^^^^^ help: replace it with: `col` [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/frontend.rs:261:13 [INFO] [stderr] | [INFO] [stderr] 261 | 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: redundant field names in struct initialization [INFO] [stderr] --> src/frontend.rs:263:13 [INFO] [stderr] | [INFO] [stderr] 263 | cur_range: cur_range [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `cur_range` [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/frontend.rs:741:9 [INFO] [stderr] | [INFO] [stderr] 741 | bindings: bindings, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `bindings` [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/frontend.rs:777:23 [INFO] [stderr] | [INFO] [stderr] 777 | Ok(CoreExpr::Pack{tag: tag, arity: arity }) [INFO] [stderr] | ^^^^^^^^ help: replace it with: `tag` [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/frontend.rs:777:33 [INFO] [stderr] | [INFO] [stderr] 777 | Ok(CoreExpr::Pack{tag: tag, arity: arity }) [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `arity` [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: unneeded return statement [INFO] [stderr] --> src/machine.rs:309:9 [INFO] [stderr] | [INFO] [stderr] 309 | return Ok(()) [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(())` [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] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/machine.rs:1507:16 [INFO] [stderr] | [INFO] [stderr] 1507 | Ok((ListAccess::Cons(x_addr, xs_addr))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_parens)] on by default [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/machine.rs:1507:16 [INFO] [stderr] | [INFO] [stderr] 1507 | Ok((ListAccess::Cons(x_addr, xs_addr))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::double_parens)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/frontend.rs:298:30 [INFO] [stderr] | [INFO] [stderr] 298 | (range, None) => return ParseError(range, ParseErrorKind::EOF(format!( [INFO] [stderr] | ______________________________^ [INFO] [stderr] 299 | | "was expecting {:#?}, found EOF\n{}", t, error))).into(), [INFO] [stderr] | |____________________________________________________________________________________^ [INFO] [stderr] | [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] 298 | (range, None) => ParseError(range, ParseErrorKind::EOF(format!( [INFO] [stderr] 299 | "was expecting {:#?}, found EOF\n{}", t, error))).into(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/frontend.rs:307:21 [INFO] [stderr] | [INFO] [stderr] 307 | / return ParseError(range, ParseErrorKind::UnexpectedToken{ [INFO] [stderr] 308 | | expected: vec![t], [INFO] [stderr] 309 | | found: tok, [INFO] [stderr] 310 | | error: error.to_string() [INFO] [stderr] 311 | | }).into() [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [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] 307 | ParseError(range, ParseErrorKind::UnexpectedToken{ [INFO] [stderr] 308 | expected: vec![t], [INFO] [stderr] 309 | found: tok, [INFO] [stderr] 310 | error: error.to_string() [INFO] [stderr] 311 | }).into() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/frontend.rs:555:13 [INFO] [stderr] | [INFO] [stderr] 555 | return true [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `true` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/frontend.rs:557:27 [INFO] [stderr] | [INFO] [stderr] 557 | Some(_) | None => return false [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `false` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/frontend.rs:684:13 [INFO] [stderr] | [INFO] [stderr] 684 | / return ParseError(range, ParseErrorKind::Generic(format!( [INFO] [stderr] 685 | | "expected integer, identifier or (), found {:#?}", [INFO] [stderr] 686 | | other))).into() [INFO] [stderr] | |_______________________________________^ [INFO] [stderr] | [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] 684 | ParseError(range, ParseErrorKind::Generic(format!( [INFO] [stderr] 685 | "expected integer, identifier or (), found {:#?}", [INFO] [stderr] 686 | other))).into() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/frontend.rs:704:13 [INFO] [stderr] | [INFO] [stderr] 704 | return ParseError::generic(range, format!("expected LHS of let binding, found {:#?}", other)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `ParseError::generic(range, format!("expected LHS of let binding, found {:#?}", other))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/frontend.rs:817:9 [INFO] [stderr] | [INFO] [stderr] 817 | / return ParseError::generic(cursor.cur_range, [INFO] [stderr] 818 | | concat!("wanted function application or expression").to_string()) [INFO] [stderr] | |_________________________________________________________________________________^ [INFO] [stderr] | [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] 817 | ParseError::generic(cursor.cur_range, [INFO] [stderr] 818 | concat!("wanted function application or expression").to_string()) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/frontend.rs:823:9 [INFO] [stderr] | [INFO] [stderr] 823 | return Ok(application_vec.remove(0)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(application_vec.remove(0))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/machine.rs:309:9 [INFO] [stderr] | [INFO] [stderr] 309 | return Ok(()) [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(())` [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] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/machine.rs:1507:16 [INFO] [stderr] | [INFO] [stderr] 1507 | Ok((ListAccess::Cons(x_addr, xs_addr))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_parens)] on by default [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/machine.rs:1507:16 [INFO] [stderr] | [INFO] [stderr] 1507 | Ok((ListAccess::Cons(x_addr, xs_addr))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::double_parens)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/frontend.rs:298:30 [INFO] [stderr] | [INFO] [stderr] 298 | (range, None) => return ParseError(range, ParseErrorKind::EOF(format!( [INFO] [stderr] | ______________________________^ [INFO] [stderr] 299 | | "was expecting {:#?}, found EOF\n{}", t, error))).into(), [INFO] [stderr] | |____________________________________________________________________________________^ [INFO] [stderr] | [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] 298 | (range, None) => ParseError(range, ParseErrorKind::EOF(format!( [INFO] [stderr] 299 | "was expecting {:#?}, found EOF\n{}", t, error))).into(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/frontend.rs:307:21 [INFO] [stderr] | [INFO] [stderr] 307 | / return ParseError(range, ParseErrorKind::UnexpectedToken{ [INFO] [stderr] 308 | | expected: vec![t], [INFO] [stderr] 309 | | found: tok, [INFO] [stderr] 310 | | error: error.to_string() [INFO] [stderr] 311 | | }).into() [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [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] 307 | ParseError(range, ParseErrorKind::UnexpectedToken{ [INFO] [stderr] 308 | expected: vec![t], [INFO] [stderr] 309 | found: tok, [INFO] [stderr] 310 | error: error.to_string() [INFO] [stderr] 311 | }).into() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/frontend.rs:555:13 [INFO] [stderr] | [INFO] [stderr] 555 | return true [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `true` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/frontend.rs:557:27 [INFO] [stderr] | [INFO] [stderr] 557 | Some(_) | None => return false [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `false` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/frontend.rs:684:13 [INFO] [stderr] | [INFO] [stderr] 684 | / return ParseError(range, ParseErrorKind::Generic(format!( [INFO] [stderr] 685 | | "expected integer, identifier or (), found {:#?}", [INFO] [stderr] 686 | | other))).into() [INFO] [stderr] | |_______________________________________^ [INFO] [stderr] | [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] 684 | ParseError(range, ParseErrorKind::Generic(format!( [INFO] [stderr] 685 | "expected integer, identifier or (), found {:#?}", [INFO] [stderr] 686 | other))).into() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/frontend.rs:704:13 [INFO] [stderr] | [INFO] [stderr] 704 | return ParseError::generic(range, format!("expected LHS of let binding, found {:#?}", other)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `ParseError::generic(range, format!("expected LHS of let binding, found {:#?}", other))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/frontend.rs:817:9 [INFO] [stderr] | [INFO] [stderr] 817 | / return ParseError::generic(cursor.cur_range, [INFO] [stderr] 818 | | concat!("wanted function application or expression").to_string()) [INFO] [stderr] | |_________________________________________________________________________________^ [INFO] [stderr] | [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] 817 | ParseError::generic(cursor.cur_range, [INFO] [stderr] 818 | concat!("wanted function application or expression").to_string()) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/frontend.rs:823:9 [INFO] [stderr] | [INFO] [stderr] 823 | return Ok(application_vec.remove(0)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(application_vec.remove(0))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/frontend.rs:567:21 [INFO] [stderr] | [INFO] [stderr] 567 | fn parse_identifier(mut cursor: &mut TokenizerCursor) -> Result<(Range, CoreToken), ParseError> { [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/frontend.rs:749:15 [INFO] [stderr] | [INFO] [stderr] 749 | fn parse_pack(mut c: &mut ParserCursor) -> Result { [INFO] [stderr] | ----^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/frontend.rs:893:18 [INFO] [stderr] | [INFO] [stderr] 893 | fn parse_mul_div(mut cursor: &mut ParserCursor) -> Result { [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/frontend.rs:906:18 [INFO] [stderr] | [INFO] [stderr] 906 | fn parse_add_sub(mut cursor: &mut ParserCursor) -> Result { [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/frontend.rs:919:16 [INFO] [stderr] | [INFO] [stderr] 919 | fn parse_relop(mut cursor: &mut ParserCursor) -> Result { [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/frontend.rs:938:14 [INFO] [stderr] | [INFO] [stderr] 938 | fn parse_and(mut cursor: &mut ParserCursor) -> Result { [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/frontend.rs:950:13 [INFO] [stderr] | [INFO] [stderr] 950 | fn parse_or(mut cursor: &mut ParserCursor) -> Result { [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/pretty_print.rs:82:32 [INFO] [stderr] | [INFO] [stderr] 82 | mut processed: &mut HashSet, [INFO] [stderr] | ----^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/pretty_print.rs:83:32 [INFO] [stderr] | [INFO] [stderr] 83 | mut rec_stack: &mut HashSet) -> bool { [INFO] [stderr] | ----^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] error: useless lint attribute [INFO] [stderr] --> src/lib.rs:30:1 [INFO] [stderr] | [INFO] [stderr] 30 | #[warn(missing_docs)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: if you just forgot a `!`, use: `#![warn(missing_docs)]` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::useless_attribute)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_attribute [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/machine.rs:66:9 [INFO] [stderr] | [INFO] [stderr] 66 | / match self { [INFO] [stderr] 67 | | &MachinePrimOp::Negate => write!(fmt, "Negate"), [INFO] [stderr] 68 | | &MachinePrimOp::Add => write!(fmt, "+"), [INFO] [stderr] 69 | | &MachinePrimOp::Sub => write!(fmt, "-"), [INFO] [stderr] ... | [INFO] [stderr] 84 | | } [INFO] [stderr] 85 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 66 | match *self { [INFO] [stderr] 67 | MachinePrimOp::Negate => write!(fmt, "Negate"), [INFO] [stderr] 68 | MachinePrimOp::Add => write!(fmt, "+"), [INFO] [stderr] 69 | MachinePrimOp::Sub => write!(fmt, "-"), [INFO] [stderr] 70 | MachinePrimOp::Mul => write!(fmt, "*"), [INFO] [stderr] 71 | MachinePrimOp::Div => write!(fmt, "/"), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: the `other @ _` pattern can be written as just `other` [INFO] [stderr] --> src/machine.rs:109:9 [INFO] [stderr] | [INFO] [stderr] 109 | other @ _ => Err(format!( [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/machine.rs:150:9 [INFO] [stderr] | [INFO] [stderr] 150 | / match self { [INFO] [stderr] 151 | | &HeapNode::Application{ref fn_addr, ref arg_addr} => { [INFO] [stderr] 152 | | write!(fmt, "{}({} $ {})", [INFO] [stderr] 153 | | format_heap_tag("H-Ap"), [INFO] [stderr] ... | [INFO] [stderr] 194 | | } [INFO] [stderr] 195 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 150 | match *self { [INFO] [stderr] 151 | HeapNode::Application{ref fn_addr, ref arg_addr} => { [INFO] [stderr] 152 | write!(fmt, "{}({} $ {})", [INFO] [stderr] 153 | format_heap_tag("H-Ap"), [INFO] [stderr] 154 | format_addr_string(fn_addr), [INFO] [stderr] 155 | format_addr_string(arg_addr)) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/machine.rs:182:20 [INFO] [stderr] | [INFO] [stderr] 182 | if component_addrs.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `component_addrs.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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/machine.rs:201:9 [INFO] [stderr] | [INFO] [stderr] 201 | / match self { [INFO] [stderr] 202 | | &HeapNode::Num(_) => true, [INFO] [stderr] 203 | | &HeapNode::Data{..} => true, [INFO] [stderr] 204 | | _ => false [INFO] [stderr] 205 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 201 | match *self { [INFO] [stderr] 202 | HeapNode::Num(_) => true, [INFO] [stderr] 203 | HeapNode::Data{..} => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the `other @ _` pattern can be written as just `other` [INFO] [stderr] --> src/machine.rs:223:13 [INFO] [stderr] | [INFO] [stderr] 223 | other @ _ => Err(format!( [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: item `machine::Stack` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/machine.rs:247:1 [INFO] [stderr] | [INFO] [stderr] 247 | / impl Stack { [INFO] [stderr] 248 | | pub fn new() -> Stack { [INFO] [stderr] 249 | | Stack { [INFO] [stderr] 250 | | stack: Vec::new(), [INFO] [stderr] ... | [INFO] [stderr] 286 | | [INFO] [stderr] 287 | | } [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: you should consider deriving a `Default` implementation for `machine::Stack` [INFO] [stderr] --> src/machine.rs:248:5 [INFO] [stderr] | [INFO] [stderr] 248 | / pub fn new() -> Stack { [INFO] [stderr] 249 | | Stack { [INFO] [stderr] 250 | | stack: Vec::new(), [INFO] [stderr] 251 | | } [INFO] [stderr] 252 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 243 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/machine.rs:269:26 [INFO] [stderr] | [INFO] [stderr] 269 | self.stack.pop().ok_or("top of stack is empty".to_string()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "top of stack is empty".to_string())` [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 `ok_or` followed by a function call [INFO] [stderr] --> src/machine.rs:276:36 [INFO] [stderr] | [INFO] [stderr] 276 | self.stack.last().cloned().ok_or("top of stack is empty to peek".to_string()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "top of stack is empty to peek".to_string())` [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: item `machine::Heap` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/machine.rs:314:1 [INFO] [stderr] | [INFO] [stderr] 314 | / impl Heap { [INFO] [stderr] 315 | | pub fn new() -> Heap { [INFO] [stderr] 316 | | Heap { [INFO] [stderr] 317 | | heap: HashMap::new(), [INFO] [stderr] ... | [INFO] [stderr] 369 | | [INFO] [stderr] 370 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [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: you should consider deriving a `Default` implementation for `machine::Heap` [INFO] [stderr] --> src/machine.rs:315:5 [INFO] [stderr] | [INFO] [stderr] 315 | / pub fn new() -> Heap { [INFO] [stderr] 316 | | Heap { [INFO] [stderr] 317 | | heap: HashMap::new(), [INFO] [stderr] 318 | | next_addr: 0 [INFO] [stderr] 319 | | } [INFO] [stderr] 320 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 295 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/machine.rs:338:29 [INFO] [stderr] | [INFO] [stderr] 338 | pub fn get(&self, addr: &Addr) -> HeapNode { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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: use of `expect` followed by a function call [INFO] [stderr] --> src/machine.rs:342:14 [INFO] [stderr] | [INFO] [stderr] 342 | .expect(&format!("expected heap node at addess: {}", addr)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("expected heap node at addess: {}", addr))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/machine.rs:349:37 [INFO] [stderr] | [INFO] [stderr] 349 | pub fn rewrite(&mut self, addr: &Addr, node: HeapNode) { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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/machine.rs:363:34 [INFO] [stderr] | [INFO] [stderr] 363 | pub fn contains(&self, addr: &Addr) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/machine.rs:364:9 [INFO] [stderr] | [INFO] [stderr] 364 | / match self.heap.get(&addr) { [INFO] [stderr] 365 | | Some(_) => true, [INFO] [stderr] 366 | | None => false [INFO] [stderr] 367 | | } [INFO] [stderr] | |_________^ help: try this: `self.heap.get(&addr).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: called `cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable [INFO] [stderr] --> src/machine.rs:435:5 [INFO] [stderr] | [INFO] [stderr] 435 | / [("+".to_string(), MachinePrimOp::Add), [INFO] [stderr] 436 | | ("-".to_string(), MachinePrimOp::Sub), [INFO] [stderr] 437 | | ("*".to_string(), MachinePrimOp::Mul), [INFO] [stderr] 438 | | ("/".to_string(), MachinePrimOp::Div), [INFO] [stderr] ... | [INFO] [stderr] 449 | | ("undef".to_string(), MachinePrimOp::Undef) [INFO] [stderr] 450 | | ].iter().cloned().collect() [INFO] [stderr] | |_______________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::iter_cloned_collect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/machine.rs:546:30 [INFO] [stderr] | [INFO] [stderr] 546 | .ok_or(format!("supercombinator with name: {} not found", sc_name))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| format!("supercombinator with name: {} not found", sc_name))` [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: length comparison to zero [INFO] [stderr] --> src/machine.rs:565:30 [INFO] [stderr] | [INFO] [stderr] 565 | let dump_empty = self.dump.len() == 0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.dump.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: length comparison to zero [INFO] [stderr] --> src/machine.rs:588:39 [INFO] [stderr] | [INFO] [stderr] 588 | if heap_val.is_data_node() && self.dump.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.dump.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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/machine.rs:736:44 [INFO] [stderr] | [INFO] [stderr] 736 | fn find_root_heap_node_for_addr(fake_addr: &Addr, [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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: use of `expect` followed by a function call [INFO] [stderr] --> src/machine.rs:754:26 [INFO] [stderr] | [INFO] [stderr] 754 | .expect(&format!("expected to find address [INFO] [stderr] | __________________________^ [INFO] [stderr] 755 | | that is not in heap as a [INFO] [stderr] 756 | | let-created address: {}", cur_addr)); [INFO] [stderr] | |____________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 754 | .unwrap_or_else(|| panic!("expected to find address [INFO] [stderr] 755 | that is not in heap as a [INFO] [stderr] 756 | let-created address: {}", cur_addr)); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/machine.rs:772:30 [INFO] [stderr] | [INFO] [stderr] 772 | pub fn is_addr_phantom(addr: &Addr) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/machine.rs:803:29 [INFO] [stderr] | [INFO] [stderr] 803 | let fake_addr = try!(env.get(&bind_name) [INFO] [stderr] | _____________________________^ [INFO] [stderr] 804 | | .ok_or(format!("unable to find |{}| in env", bind_name))).clone(); [INFO] [stderr] | |_________________________________________________________________________________________________^ [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] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 803 | let fake_addr = *(match $ expr { [INFO] [stderr] 804 | $ crate :: result :: Result :: Ok ( val ) => val , $ crate :: result :: Result [INFO] [stderr] 805 | :: Err ( err ) => { [INFO] [stderr] 806 | return $ crate :: result :: Result :: Err ( [INFO] [stderr] 807 | $ crate :: convert :: From :: from ( err ) ) } }); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/machine.rs:804:34 [INFO] [stderr] | [INFO] [stderr] 804 | .ok_or(format!("unable to find |{}| in env", bind_name))).clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| format!("unable to find |{}| in env", bind_name))` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/machine.rs:1003:28 [INFO] [stderr] | [INFO] [stderr] 1003 | let then_ap_addr = try!(m.stack [INFO] [stderr] | ____________________________^ [INFO] [stderr] 1004 | | .iter() [INFO] [stderr] 1005 | | .nth(2) [INFO] [stderr] 1006 | | .ok_or("expected then application, was not found on stack".to_string())).clone(); [INFO] [stderr] | |________________________________________________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 1003 | let then_ap_addr = *(match $ expr { [INFO] [stderr] 1004 | $ crate :: result :: Result :: Ok ( val ) => val , $ crate :: result :: Result [INFO] [stderr] 1005 | :: Err ( err ) => { [INFO] [stderr] 1006 | return $ crate :: result :: Result :: Err ( [INFO] [stderr] 1007 | $ crate :: convert :: From :: from ( err ) ) } }); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/machine.rs:1006:34 [INFO] [stderr] | [INFO] [stderr] 1006 | .ok_or("expected then application, was not found on stack".to_string())).clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "expected then application, was not found on stack".to_string())` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/machine.rs:1008:28 [INFO] [stderr] | [INFO] [stderr] 1008 | let else_ap_addr = try!(m.stack [INFO] [stderr] | ____________________________^ [INFO] [stderr] 1009 | | .iter() [INFO] [stderr] 1010 | | .nth(3) [INFO] [stderr] 1011 | | .ok_or("expected else application, was not found on stack".to_string())).clone(); [INFO] [stderr] | |________________________________________________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 1008 | let else_ap_addr = *(match $ expr { [INFO] [stderr] 1009 | $ crate :: result :: Result :: Ok ( val ) => val , $ crate :: result :: Result [INFO] [stderr] 1010 | :: Err ( err ) => { [INFO] [stderr] 1011 | return $ crate :: result :: Result :: Err ( [INFO] [stderr] 1012 | $ crate :: convert :: From :: from ( err ) ) } }); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/machine.rs:1011:34 [INFO] [stderr] | [INFO] [stderr] 1011 | .ok_or("expected else application, was not found on stack".to_string())).clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "expected else application, was not found on stack".to_string())` [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: length comparison to zero [INFO] [stderr] --> src/machine.rs:1340:16 [INFO] [stderr] | [INFO] [stderr] 1340 | if sc_defn.args.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `sc_defn.args.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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/machine.rs:1372:40 [INFO] [stderr] | [INFO] [stderr] 1372 | stack_args:&Vec, [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[Addr]` [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: the `other @ _` pattern can be written as just `other` [INFO] [stderr] --> src/machine.rs:1456:9 [INFO] [stderr] | [INFO] [stderr] 1456 | other @ _ => Err(format!( [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: the `other @ _` pattern can be written as just `other` [INFO] [stderr] --> src/machine.rs:1469:9 [INFO] [stderr] | [INFO] [stderr] 1469 | other @ _ => Err(format!( [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/machine.rs:1478:52 [INFO] [stderr] | [INFO] [stderr] 1478 | let left = try!(component_addrs.get(0).ok_or(format!( [INFO] [stderr] | ____________________________________________________^ [INFO] [stderr] 1479 | | "expected left component, of pair {:#?}, was not found", h))); [INFO] [stderr] | |____________________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 1478 | let left = try!(component_addrs.get(0).ok_or_else(|| format!( [INFO] [stderr] 1479 | "expected left component, of pair {:#?}, was not found", h))); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/machine.rs:1480:53 [INFO] [stderr] | [INFO] [stderr] 1480 | let right = try!(component_addrs.get(1).ok_or(format!( [INFO] [stderr] | _____________________________________________________^ [INFO] [stderr] 1481 | | "expected right component, of pair {:#?}, was not found", h))); [INFO] [stderr] | |_____________________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 1480 | let right = try!(component_addrs.get(1).ok_or_else(|| format!( [INFO] [stderr] 1481 | "expected right component, of pair {:#?}, was not found", h))); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the `other @ _` pattern can be written as just `other` [INFO] [stderr] --> src/machine.rs:1485:9 [INFO] [stderr] | [INFO] [stderr] 1485 | other @ _ => [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/machine.rs:1502:63 [INFO] [stderr] | [INFO] [stderr] 1502 | let x_addr = try!(component_addrs.get(0).cloned().ok_or(format!( [INFO] [stderr] | _______________________________________________________________^ [INFO] [stderr] 1503 | | "expected first component of list, found {:#?}", h))); [INFO] [stderr] | |____________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 1502 | let x_addr = try!(component_addrs.get(0).cloned().ok_or_else(|| format!( [INFO] [stderr] 1503 | "expected first component of list, found {:#?}", h))); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/machine.rs:1504:64 [INFO] [stderr] | [INFO] [stderr] 1504 | let xs_addr = try!(component_addrs.get(1).cloned().ok_or(format!( [INFO] [stderr] | ________________________________________________________________^ [INFO] [stderr] 1505 | | "expected second component of list, found {:#?}", h))); [INFO] [stderr] | |_____________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 1504 | let xs_addr = try!(component_addrs.get(1).cloned().ok_or_else(|| format!( [INFO] [stderr] 1505 | "expected second component of list, found {:#?}", h))); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the `other @ _` pattern can be written as just `other` [INFO] [stderr] --> src/machine.rs:1509:9 [INFO] [stderr] | [INFO] [stderr] 1509 | other @ _ => [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] error: useless lint attribute [INFO] [stderr] --> src/frontend.rs:2:1 [INFO] [stderr] | [INFO] [stderr] 2 | #[warn(missing_docs)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: if you just forgot a `!`, use: `#![warn(missing_docs)]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_attribute [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:78:9 [INFO] [stderr] | [INFO] [stderr] 78 | / match self { [INFO] [stderr] 79 | | &ParseErrorKind::EOF(ref s) => { [INFO] [stderr] 80 | | write!(fmt, "EOF reached: {}", s) [INFO] [stderr] 81 | | } [INFO] [stderr] ... | [INFO] [stderr] 88 | | &ParseErrorKind::Generic(ref err) => write!(fmt, "{}", err) [INFO] [stderr] 89 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 78 | match *self { [INFO] [stderr] 79 | ParseErrorKind::EOF(ref s) => { [INFO] [stderr] 80 | write!(fmt, "EOF reached: {}", s) [INFO] [stderr] 81 | } [INFO] [stderr] 82 | ParseErrorKind::UnexpectedToken{ref expected, ref found, ref error} => { [INFO] [stderr] 83 | write!(fmt, "expected one of {:#?}\n\ [INFO] [stderr] ... [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/frontend.rs:136:90 [INFO] [stderr] | [INFO] [stderr] 136 | fn pretty_print_single_line(line: usize, col_begin: usize, col_end: usize, line_str: &Vec) -> String{ [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[char]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:214:9 [INFO] [stderr] | [INFO] [stderr] 214 | / match self { [INFO] [stderr] 215 | | &CoreToken::Let => write!(fmt, "let"), [INFO] [stderr] 216 | | &CoreToken::In => write!(fmt, "in"), [INFO] [stderr] 217 | | &CoreToken::Ident(ref s) => write!(fmt, "{}", s), [INFO] [stderr] ... | [INFO] [stderr] 238 | | &CoreToken::Pack => write!(fmt, "Pack"), [INFO] [stderr] 239 | | } [INFO] [stderr] | |______^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 214 | match *self { [INFO] [stderr] 215 | CoreToken::Let => write!(fmt, "let"), [INFO] [stderr] 216 | CoreToken::In => write!(fmt, "in"), [INFO] [stderr] 217 | CoreToken::Ident(ref s) => write!(fmt, "{}", s), [INFO] [stderr] 218 | CoreToken::Assignment => write!(fmt, "="), [INFO] [stderr] 219 | CoreToken::Semicolon => write!(fmt, ";"), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/frontend.rs:386:18 [INFO] [stderr] | [INFO] [stderr] 386 | for l in (1..length_to_take+1).rev() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: use: `(1..=length_to_take)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/frontend.rs:424:33 [INFO] [stderr] | [INFO] [stderr] 424 | Some((_, c)) => c.clone(), [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*c` [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/frontend.rs:430:28 [INFO] [stderr] | [INFO] [stderr] 430 | accum.push(c.clone()); [INFO] [stderr] | ^^^^^^^^^ help: try removing the `clone` call: `c` [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/frontend.rs:446:41 [INFO] [stderr] | [INFO] [stderr] 446 | Some((range, c)) => (range, c.clone()), [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*c` [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: the `other @ _` pattern can be written as just `other` [INFO] [stderr] --> src/frontend.rs:475:9 [INFO] [stderr] | [INFO] [stderr] 475 | other @ _ => CoreToken::Ident(other.to_string()) [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/frontend.rs:485:21 [INFO] [stderr] | [INFO] [stderr] 485 | fn is_char_space(c: &char) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `char` [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] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/frontend.rs:524:43 [INFO] [stderr] | [INFO] [stderr] 524 | .map(|&s| s.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] 524 | .map(|&s| &(*s).clone()) [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 524 | .map(|&s| &str::clone(s)) [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/frontend.rs:530:22 [INFO] [stderr] | [INFO] [stderr] 530 | .expect(&format!("expected symbol for string: {}", op_str)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("expected symbol for string: {}", op_str))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/frontend.rs:541:34 [INFO] [stderr] | [INFO] [stderr] 541 | fn can_char_belong_identifier(c: &char) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `char` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:655:5 [INFO] [stderr] | [INFO] [stderr] 655 | / match t { [INFO] [stderr] 656 | | &CoreToken::Integer(_) => true, [INFO] [stderr] 657 | | &CoreToken::Ident(_) => true, [INFO] [stderr] 658 | | &CoreToken::OpenRoundBracket => true, [INFO] [stderr] 659 | | _ => false [INFO] [stderr] 660 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 655 | match *t { [INFO] [stderr] 656 | CoreToken::Integer(_) => true, [INFO] [stderr] 657 | CoreToken::Ident(_) => true, [INFO] [stderr] 658 | CoreToken::OpenRoundBracket => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/frontend.rs:816:8 [INFO] [stderr] | [INFO] [stderr] 816 | if application_vec.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `application_vec.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: redundant closure found [INFO] [stderr] --> src/frontend.rs:967:60 [INFO] [stderr] | [INFO] [stderr] 967 | (_, Some(CoreToken::Let)) => parse_let(&mut c).map(|l| CoreExpr::Let(l)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `CoreExpr::Let` [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: identical conversion [INFO] [stderr] --> src/frontend.rs:996:24 [INFO] [stderr] | [INFO] [stderr] 996 | return ParseError::generic(range, format!( [INFO] [stderr] | ________________________^ [INFO] [stderr] 997 | | "identifier that is supercombinator argument or \"=\" expected, \ [INFO] [stderr] 998 | | {:#?} encountered", [INFO] [stderr] 999 | | other)).into(); [INFO] [stderr] | |__________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] help: consider removing `.into()` [INFO] [stderr] | [INFO] [stderr] 996 | return ParseError::generic(range, format!( [INFO] [stderr] 997 | "identifier that is supercombinator argument or \"=\" expected, \ [INFO] [stderr] 998 | {:#?} encountered", [INFO] [stderr] 999 | other)); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: useless lint attribute [INFO] [stderr] --> src/ir.rs:10:1 [INFO] [stderr] | [INFO] [stderr] 10 | #[warn(missing_docs)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: if you just forgot a `!`, use: `#![warn(missing_docs)]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_attribute [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ir.rs:45:9 [INFO] [stderr] | [INFO] [stderr] 45 | / match self { [INFO] [stderr] 46 | | &CoreExpr::Variable(ref name) => write!(fmt, "v_{}", name), [INFO] [stderr] 47 | | &CoreExpr::Num(ref num) => write!(fmt, "n_{}", num), [INFO] [stderr] 48 | | &CoreExpr::Application(ref e1, ref e2) => [INFO] [stderr] ... | [INFO] [stderr] 62 | | } [INFO] [stderr] 63 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 45 | match *self { [INFO] [stderr] 46 | CoreExpr::Variable(ref name) => write!(fmt, "v_{}", name), [INFO] [stderr] 47 | CoreExpr::Num(ref num) => write!(fmt, "n_{}", num), [INFO] [stderr] 48 | CoreExpr::Application(ref e1, ref e2) => [INFO] [stderr] 49 | write!(fmt, "({:#?} $ {:#?})", *e1, *e2), [INFO] [stderr] 50 | CoreExpr::Let(CoreLet{ref bindings, ref expr}) => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/pretty_print.rs:21:44 [INFO] [stderr] | [INFO] [stderr] 21 | pub fn format_heap_node(heap: &Heap, addr: &Addr) -> String { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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: useless use of `format!` [INFO] [stderr] --> src/pretty_print.rs:42:13 [INFO] [stderr] | [INFO] [stderr] 42 | format!("True") [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: consider using .to_string(): `"True".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/pretty_print.rs:45:13 [INFO] [stderr] | [INFO] [stderr] 45 | format!("False") [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"False".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/pretty_print.rs:59:13 [INFO] [stderr] | [INFO] [stderr] 59 | format!("[]") [INFO] [stderr] | ^^^^^^^^^^^^^ help: consider using .to_string(): `"[]".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/pretty_print.rs:81:43 [INFO] [stderr] | [INFO] [stderr] 81 | fn is_heap_node_cyclic(heap: &Heap, addr: &Addr, [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pretty_print.rs:86:9 [INFO] [stderr] | [INFO] [stderr] 86 | / match node { [INFO] [stderr] 87 | | &HeapNode::Indirection(ref addr) => { [INFO] [stderr] 88 | | vec![*addr] [INFO] [stderr] 89 | | } [INFO] [stderr] ... | [INFO] [stderr] 98 | | &HeapNode::Num(_) => {Vec::new()} [INFO] [stderr] 99 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 86 | match *node { [INFO] [stderr] 87 | HeapNode::Indirection(ref addr) => { [INFO] [stderr] 88 | vec![*addr] [INFO] [stderr] 89 | } [INFO] [stderr] 90 | HeapNode::Application{ref fn_addr, ref arg_addr} => { [INFO] [stderr] 91 | vec![*fn_addr, *arg_addr] [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/pretty_print.rs:119:73 [INFO] [stderr] | [INFO] [stderr] 119 | else if is_heap_node_cyclic(heap, &n, processed, rec_stack) { [INFO] [stderr] | _________________________________________________________________________^ [INFO] [stderr] 120 | | return true; [INFO] [stderr] 121 | | } [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/pretty_print.rs:116:39 [INFO] [stderr] | [INFO] [stderr] 116 | if rec_stack.contains(&n) { [INFO] [stderr] | _______________________________________^ [INFO] [stderr] 117 | | return true; [INFO] [stderr] 118 | | } [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/pretty_print.rs:140:39 [INFO] [stderr] | [INFO] [stderr] 140 | addr: &Addr, [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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/pretty_print.rs:179:33 [INFO] [stderr] | [INFO] [stderr] 179 | pub fn format_addr_string(addr: &Addr) -> String { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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: length comparison to zero [INFO] [stderr] --> src/pretty_print.rs:240:8 [INFO] [stderr] | [INFO] [stderr] 240 | if cur_addrs.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `cur_addrs.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: length comparison to zero [INFO] [stderr] --> src/pretty_print.rs:259:8 [INFO] [stderr] | [INFO] [stderr] 259 | if m.dump.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `m.dump.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: length comparison to zero [INFO] [stderr] --> src/pretty_print.rs:279:8 [INFO] [stderr] | [INFO] [stderr] 279 | if globals_in_use.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `globals_in_use.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] error: aborting due to 5 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `timi`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/frontend.rs:567:21 [INFO] [stderr] | [INFO] [stderr] 567 | fn parse_identifier(mut cursor: &mut TokenizerCursor) -> Result<(Range, CoreToken), ParseError> { [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/frontend.rs:749:15 [INFO] [stderr] | [INFO] [stderr] 749 | fn parse_pack(mut c: &mut ParserCursor) -> Result { [INFO] [stderr] | ----^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/frontend.rs:893:18 [INFO] [stderr] | [INFO] [stderr] 893 | fn parse_mul_div(mut cursor: &mut ParserCursor) -> Result { [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/frontend.rs:906:18 [INFO] [stderr] | [INFO] [stderr] 906 | fn parse_add_sub(mut cursor: &mut ParserCursor) -> Result { [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/frontend.rs:919:16 [INFO] [stderr] | [INFO] [stderr] 919 | fn parse_relop(mut cursor: &mut ParserCursor) -> Result { [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/frontend.rs:938:14 [INFO] [stderr] | [INFO] [stderr] 938 | fn parse_and(mut cursor: &mut ParserCursor) -> Result { [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/frontend.rs:950:13 [INFO] [stderr] | [INFO] [stderr] 950 | fn parse_or(mut cursor: &mut ParserCursor) -> Result { [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/pretty_print.rs:82:32 [INFO] [stderr] | [INFO] [stderr] 82 | mut processed: &mut HashSet, [INFO] [stderr] | ----^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/pretty_print.rs:83:32 [INFO] [stderr] | [INFO] [stderr] 83 | mut rec_stack: &mut HashSet) -> bool { [INFO] [stderr] | ----^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] error: useless lint attribute [INFO] [stderr] --> src/lib.rs:30:1 [INFO] [stderr] | [INFO] [stderr] 30 | #[warn(missing_docs)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: if you just forgot a `!`, use: `#![warn(missing_docs)]` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::useless_attribute)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_attribute [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/machine.rs:66:9 [INFO] [stderr] | [INFO] [stderr] 66 | / match self { [INFO] [stderr] 67 | | &MachinePrimOp::Negate => write!(fmt, "Negate"), [INFO] [stderr] 68 | | &MachinePrimOp::Add => write!(fmt, "+"), [INFO] [stderr] 69 | | &MachinePrimOp::Sub => write!(fmt, "-"), [INFO] [stderr] ... | [INFO] [stderr] 84 | | } [INFO] [stderr] 85 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 66 | match *self { [INFO] [stderr] 67 | MachinePrimOp::Negate => write!(fmt, "Negate"), [INFO] [stderr] 68 | MachinePrimOp::Add => write!(fmt, "+"), [INFO] [stderr] 69 | MachinePrimOp::Sub => write!(fmt, "-"), [INFO] [stderr] 70 | MachinePrimOp::Mul => write!(fmt, "*"), [INFO] [stderr] 71 | MachinePrimOp::Div => write!(fmt, "/"), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: the `other @ _` pattern can be written as just `other` [INFO] [stderr] --> src/machine.rs:109:9 [INFO] [stderr] | [INFO] [stderr] 109 | other @ _ => Err(format!( [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/machine.rs:150:9 [INFO] [stderr] | [INFO] [stderr] 150 | / match self { [INFO] [stderr] 151 | | &HeapNode::Application{ref fn_addr, ref arg_addr} => { [INFO] [stderr] 152 | | write!(fmt, "{}({} $ {})", [INFO] [stderr] 153 | | format_heap_tag("H-Ap"), [INFO] [stderr] ... | [INFO] [stderr] 194 | | } [INFO] [stderr] 195 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 150 | match *self { [INFO] [stderr] 151 | HeapNode::Application{ref fn_addr, ref arg_addr} => { [INFO] [stderr] 152 | write!(fmt, "{}({} $ {})", [INFO] [stderr] 153 | format_heap_tag("H-Ap"), [INFO] [stderr] 154 | format_addr_string(fn_addr), [INFO] [stderr] 155 | format_addr_string(arg_addr)) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/machine.rs:182:20 [INFO] [stderr] | [INFO] [stderr] 182 | if component_addrs.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `component_addrs.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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/machine.rs:201:9 [INFO] [stderr] | [INFO] [stderr] 201 | / match self { [INFO] [stderr] 202 | | &HeapNode::Num(_) => true, [INFO] [stderr] 203 | | &HeapNode::Data{..} => true, [INFO] [stderr] 204 | | _ => false [INFO] [stderr] 205 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 201 | match *self { [INFO] [stderr] 202 | HeapNode::Num(_) => true, [INFO] [stderr] 203 | HeapNode::Data{..} => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the `other @ _` pattern can be written as just `other` [INFO] [stderr] --> src/machine.rs:223:13 [INFO] [stderr] | [INFO] [stderr] 223 | other @ _ => Err(format!( [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: item `machine::Stack` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/machine.rs:247:1 [INFO] [stderr] | [INFO] [stderr] 247 | / impl Stack { [INFO] [stderr] 248 | | pub fn new() -> Stack { [INFO] [stderr] 249 | | Stack { [INFO] [stderr] 250 | | stack: Vec::new(), [INFO] [stderr] ... | [INFO] [stderr] 286 | | [INFO] [stderr] 287 | | } [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: you should consider deriving a `Default` implementation for `machine::Stack` [INFO] [stderr] --> src/machine.rs:248:5 [INFO] [stderr] | [INFO] [stderr] 248 | / pub fn new() -> Stack { [INFO] [stderr] 249 | | Stack { [INFO] [stderr] 250 | | stack: Vec::new(), [INFO] [stderr] 251 | | } [INFO] [stderr] 252 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 243 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/machine.rs:269:26 [INFO] [stderr] | [INFO] [stderr] 269 | self.stack.pop().ok_or("top of stack is empty".to_string()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "top of stack is empty".to_string())` [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 `ok_or` followed by a function call [INFO] [stderr] --> src/machine.rs:276:36 [INFO] [stderr] | [INFO] [stderr] 276 | self.stack.last().cloned().ok_or("top of stack is empty to peek".to_string()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "top of stack is empty to peek".to_string())` [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: item `machine::Heap` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/machine.rs:314:1 [INFO] [stderr] | [INFO] [stderr] 314 | / impl Heap { [INFO] [stderr] 315 | | pub fn new() -> Heap { [INFO] [stderr] 316 | | Heap { [INFO] [stderr] 317 | | heap: HashMap::new(), [INFO] [stderr] ... | [INFO] [stderr] 369 | | [INFO] [stderr] 370 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [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: you should consider deriving a `Default` implementation for `machine::Heap` [INFO] [stderr] --> src/machine.rs:315:5 [INFO] [stderr] | [INFO] [stderr] 315 | / pub fn new() -> Heap { [INFO] [stderr] 316 | | Heap { [INFO] [stderr] 317 | | heap: HashMap::new(), [INFO] [stderr] 318 | | next_addr: 0 [INFO] [stderr] 319 | | } [INFO] [stderr] 320 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 295 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/machine.rs:338:29 [INFO] [stderr] | [INFO] [stderr] 338 | pub fn get(&self, addr: &Addr) -> HeapNode { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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: use of `expect` followed by a function call [INFO] [stderr] --> src/machine.rs:342:14 [INFO] [stderr] | [INFO] [stderr] 342 | .expect(&format!("expected heap node at addess: {}", addr)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("expected heap node at addess: {}", addr))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/machine.rs:349:37 [INFO] [stderr] | [INFO] [stderr] 349 | pub fn rewrite(&mut self, addr: &Addr, node: HeapNode) { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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/machine.rs:363:34 [INFO] [stderr] | [INFO] [stderr] 363 | pub fn contains(&self, addr: &Addr) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/machine.rs:364:9 [INFO] [stderr] | [INFO] [stderr] 364 | / match self.heap.get(&addr) { [INFO] [stderr] 365 | | Some(_) => true, [INFO] [stderr] 366 | | None => false [INFO] [stderr] 367 | | } [INFO] [stderr] | |_________^ help: try this: `self.heap.get(&addr).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: called `cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable [INFO] [stderr] --> src/machine.rs:435:5 [INFO] [stderr] | [INFO] [stderr] 435 | / [("+".to_string(), MachinePrimOp::Add), [INFO] [stderr] 436 | | ("-".to_string(), MachinePrimOp::Sub), [INFO] [stderr] 437 | | ("*".to_string(), MachinePrimOp::Mul), [INFO] [stderr] 438 | | ("/".to_string(), MachinePrimOp::Div), [INFO] [stderr] ... | [INFO] [stderr] 449 | | ("undef".to_string(), MachinePrimOp::Undef) [INFO] [stderr] 450 | | ].iter().cloned().collect() [INFO] [stderr] | |_______________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::iter_cloned_collect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/machine.rs:546:30 [INFO] [stderr] | [INFO] [stderr] 546 | .ok_or(format!("supercombinator with name: {} not found", sc_name))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| format!("supercombinator with name: {} not found", sc_name))` [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: length comparison to zero [INFO] [stderr] --> src/machine.rs:565:30 [INFO] [stderr] | [INFO] [stderr] 565 | let dump_empty = self.dump.len() == 0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.dump.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: length comparison to zero [INFO] [stderr] --> src/machine.rs:588:39 [INFO] [stderr] | [INFO] [stderr] 588 | if heap_val.is_data_node() && self.dump.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.dump.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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/machine.rs:736:44 [INFO] [stderr] | [INFO] [stderr] 736 | fn find_root_heap_node_for_addr(fake_addr: &Addr, [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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: use of `expect` followed by a function call [INFO] [stderr] --> src/machine.rs:754:26 [INFO] [stderr] | [INFO] [stderr] 754 | .expect(&format!("expected to find address [INFO] [stderr] | __________________________^ [INFO] [stderr] 755 | | that is not in heap as a [INFO] [stderr] 756 | | let-created address: {}", cur_addr)); [INFO] [stderr] | |____________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 754 | .unwrap_or_else(|| panic!("expected to find address [INFO] [stderr] 755 | that is not in heap as a [INFO] [stderr] 756 | let-created address: {}", cur_addr)); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/machine.rs:772:30 [INFO] [stderr] | [INFO] [stderr] 772 | pub fn is_addr_phantom(addr: &Addr) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/machine.rs:803:29 [INFO] [stderr] | [INFO] [stderr] 803 | let fake_addr = try!(env.get(&bind_name) [INFO] [stderr] | _____________________________^ [INFO] [stderr] 804 | | .ok_or(format!("unable to find |{}| in env", bind_name))).clone(); [INFO] [stderr] | |_________________________________________________________________________________________________^ [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] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 803 | let fake_addr = *(match $ expr { [INFO] [stderr] 804 | $ crate :: result :: Result :: Ok ( val ) => val , $ crate :: result :: Result [INFO] [stderr] 805 | :: Err ( err ) => { [INFO] [stderr] 806 | return $ crate :: result :: Result :: Err ( [INFO] [stderr] 807 | $ crate :: convert :: From :: from ( err ) ) } }); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/machine.rs:804:34 [INFO] [stderr] | [INFO] [stderr] 804 | .ok_or(format!("unable to find |{}| in env", bind_name))).clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| format!("unable to find |{}| in env", bind_name))` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/machine.rs:1003:28 [INFO] [stderr] | [INFO] [stderr] 1003 | let then_ap_addr = try!(m.stack [INFO] [stderr] | ____________________________^ [INFO] [stderr] 1004 | | .iter() [INFO] [stderr] 1005 | | .nth(2) [INFO] [stderr] 1006 | | .ok_or("expected then application, was not found on stack".to_string())).clone(); [INFO] [stderr] | |________________________________________________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 1003 | let then_ap_addr = *(match $ expr { [INFO] [stderr] 1004 | $ crate :: result :: Result :: Ok ( val ) => val , $ crate :: result :: Result [INFO] [stderr] 1005 | :: Err ( err ) => { [INFO] [stderr] 1006 | return $ crate :: result :: Result :: Err ( [INFO] [stderr] 1007 | $ crate :: convert :: From :: from ( err ) ) } }); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/machine.rs:1006:34 [INFO] [stderr] | [INFO] [stderr] 1006 | .ok_or("expected then application, was not found on stack".to_string())).clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "expected then application, was not found on stack".to_string())` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/machine.rs:1008:28 [INFO] [stderr] | [INFO] [stderr] 1008 | let else_ap_addr = try!(m.stack [INFO] [stderr] | ____________________________^ [INFO] [stderr] 1009 | | .iter() [INFO] [stderr] 1010 | | .nth(3) [INFO] [stderr] 1011 | | .ok_or("expected else application, was not found on stack".to_string())).clone(); [INFO] [stderr] | |________________________________________________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 1008 | let else_ap_addr = *(match $ expr { [INFO] [stderr] 1009 | $ crate :: result :: Result :: Ok ( val ) => val , $ crate :: result :: Result [INFO] [stderr] 1010 | :: Err ( err ) => { [INFO] [stderr] 1011 | return $ crate :: result :: Result :: Err ( [INFO] [stderr] 1012 | $ crate :: convert :: From :: from ( err ) ) } }); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/machine.rs:1011:34 [INFO] [stderr] | [INFO] [stderr] 1011 | .ok_or("expected else application, was not found on stack".to_string())).clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "expected else application, was not found on stack".to_string())` [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: length comparison to zero [INFO] [stderr] --> src/machine.rs:1340:16 [INFO] [stderr] | [INFO] [stderr] 1340 | if sc_defn.args.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `sc_defn.args.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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/machine.rs:1372:40 [INFO] [stderr] | [INFO] [stderr] 1372 | stack_args:&Vec, [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[Addr]` [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: the `other @ _` pattern can be written as just `other` [INFO] [stderr] --> src/machine.rs:1456:9 [INFO] [stderr] | [INFO] [stderr] 1456 | other @ _ => Err(format!( [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: the `other @ _` pattern can be written as just `other` [INFO] [stderr] --> src/machine.rs:1469:9 [INFO] [stderr] | [INFO] [stderr] 1469 | other @ _ => Err(format!( [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/machine.rs:1478:52 [INFO] [stderr] | [INFO] [stderr] 1478 | let left = try!(component_addrs.get(0).ok_or(format!( [INFO] [stderr] | ____________________________________________________^ [INFO] [stderr] 1479 | | "expected left component, of pair {:#?}, was not found", h))); [INFO] [stderr] | |____________________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 1478 | let left = try!(component_addrs.get(0).ok_or_else(|| format!( [INFO] [stderr] 1479 | "expected left component, of pair {:#?}, was not found", h))); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/machine.rs:1480:53 [INFO] [stderr] | [INFO] [stderr] 1480 | let right = try!(component_addrs.get(1).ok_or(format!( [INFO] [stderr] | _____________________________________________________^ [INFO] [stderr] 1481 | | "expected right component, of pair {:#?}, was not found", h))); [INFO] [stderr] | |_____________________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 1480 | let right = try!(component_addrs.get(1).ok_or_else(|| format!( [INFO] [stderr] 1481 | "expected right component, of pair {:#?}, was not found", h))); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the `other @ _` pattern can be written as just `other` [INFO] [stderr] --> src/machine.rs:1485:9 [INFO] [stderr] | [INFO] [stderr] 1485 | other @ _ => [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/machine.rs:1502:63 [INFO] [stderr] | [INFO] [stderr] 1502 | let x_addr = try!(component_addrs.get(0).cloned().ok_or(format!( [INFO] [stderr] | _______________________________________________________________^ [INFO] [stderr] 1503 | | "expected first component of list, found {:#?}", h))); [INFO] [stderr] | |____________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 1502 | let x_addr = try!(component_addrs.get(0).cloned().ok_or_else(|| format!( [INFO] [stderr] 1503 | "expected first component of list, found {:#?}", h))); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/machine.rs:1504:64 [INFO] [stderr] | [INFO] [stderr] 1504 | let xs_addr = try!(component_addrs.get(1).cloned().ok_or(format!( [INFO] [stderr] | ________________________________________________________________^ [INFO] [stderr] 1505 | | "expected second component of list, found {:#?}", h))); [INFO] [stderr] | |_____________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 1504 | let xs_addr = try!(component_addrs.get(1).cloned().ok_or_else(|| format!( [INFO] [stderr] 1505 | "expected second component of list, found {:#?}", h))); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the `other @ _` pattern can be written as just `other` [INFO] [stderr] --> src/machine.rs:1509:9 [INFO] [stderr] | [INFO] [stderr] 1509 | other @ _ => [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] error: useless lint attribute [INFO] [stderr] --> src/frontend.rs:2:1 [INFO] [stderr] | [INFO] [stderr] 2 | #[warn(missing_docs)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: if you just forgot a `!`, use: `#![warn(missing_docs)]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_attribute [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:78:9 [INFO] [stderr] | [INFO] [stderr] 78 | / match self { [INFO] [stderr] 79 | | &ParseErrorKind::EOF(ref s) => { [INFO] [stderr] 80 | | write!(fmt, "EOF reached: {}", s) [INFO] [stderr] 81 | | } [INFO] [stderr] ... | [INFO] [stderr] 88 | | &ParseErrorKind::Generic(ref err) => write!(fmt, "{}", err) [INFO] [stderr] 89 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 78 | match *self { [INFO] [stderr] 79 | ParseErrorKind::EOF(ref s) => { [INFO] [stderr] 80 | write!(fmt, "EOF reached: {}", s) [INFO] [stderr] 81 | } [INFO] [stderr] 82 | ParseErrorKind::UnexpectedToken{ref expected, ref found, ref error} => { [INFO] [stderr] 83 | write!(fmt, "expected one of {:#?}\n\ [INFO] [stderr] ... [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/frontend.rs:136:90 [INFO] [stderr] | [INFO] [stderr] 136 | fn pretty_print_single_line(line: usize, col_begin: usize, col_end: usize, line_str: &Vec) -> String{ [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[char]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:214:9 [INFO] [stderr] | [INFO] [stderr] 214 | / match self { [INFO] [stderr] 215 | | &CoreToken::Let => write!(fmt, "let"), [INFO] [stderr] 216 | | &CoreToken::In => write!(fmt, "in"), [INFO] [stderr] 217 | | &CoreToken::Ident(ref s) => write!(fmt, "{}", s), [INFO] [stderr] ... | [INFO] [stderr] 238 | | &CoreToken::Pack => write!(fmt, "Pack"), [INFO] [stderr] 239 | | } [INFO] [stderr] | |______^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 214 | match *self { [INFO] [stderr] 215 | CoreToken::Let => write!(fmt, "let"), [INFO] [stderr] 216 | CoreToken::In => write!(fmt, "in"), [INFO] [stderr] 217 | CoreToken::Ident(ref s) => write!(fmt, "{}", s), [INFO] [stderr] 218 | CoreToken::Assignment => write!(fmt, "="), [INFO] [stderr] 219 | CoreToken::Semicolon => write!(fmt, ";"), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/frontend.rs:386:18 [INFO] [stderr] | [INFO] [stderr] 386 | for l in (1..length_to_take+1).rev() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: use: `(1..=length_to_take)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/frontend.rs:424:33 [INFO] [stderr] | [INFO] [stderr] 424 | Some((_, c)) => c.clone(), [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*c` [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/frontend.rs:430:28 [INFO] [stderr] | [INFO] [stderr] 430 | accum.push(c.clone()); [INFO] [stderr] | ^^^^^^^^^ help: try removing the `clone` call: `c` [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/frontend.rs:446:41 [INFO] [stderr] | [INFO] [stderr] 446 | Some((range, c)) => (range, c.clone()), [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*c` [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: the `other @ _` pattern can be written as just `other` [INFO] [stderr] --> src/frontend.rs:475:9 [INFO] [stderr] | [INFO] [stderr] 475 | other @ _ => CoreToken::Ident(other.to_string()) [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/frontend.rs:485:21 [INFO] [stderr] | [INFO] [stderr] 485 | fn is_char_space(c: &char) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `char` [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] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/frontend.rs:524:43 [INFO] [stderr] | [INFO] [stderr] 524 | .map(|&s| s.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] 524 | .map(|&s| &(*s).clone()) [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 524 | .map(|&s| &str::clone(s)) [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/frontend.rs:530:22 [INFO] [stderr] | [INFO] [stderr] 530 | .expect(&format!("expected symbol for string: {}", op_str)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("expected symbol for string: {}", op_str))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/frontend.rs:541:34 [INFO] [stderr] | [INFO] [stderr] 541 | fn can_char_belong_identifier(c: &char) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `char` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:655:5 [INFO] [stderr] | [INFO] [stderr] 655 | / match t { [INFO] [stderr] 656 | | &CoreToken::Integer(_) => true, [INFO] [stderr] 657 | | &CoreToken::Ident(_) => true, [INFO] [stderr] 658 | | &CoreToken::OpenRoundBracket => true, [INFO] [stderr] 659 | | _ => false [INFO] [stderr] 660 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 655 | match *t { [INFO] [stderr] 656 | CoreToken::Integer(_) => true, [INFO] [stderr] 657 | CoreToken::Ident(_) => true, [INFO] [stderr] 658 | CoreToken::OpenRoundBracket => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/frontend.rs:816:8 [INFO] [stderr] | [INFO] [stderr] 816 | if application_vec.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `application_vec.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: redundant closure found [INFO] [stderr] --> src/frontend.rs:967:60 [INFO] [stderr] | [INFO] [stderr] 967 | (_, Some(CoreToken::Let)) => parse_let(&mut c).map(|l| CoreExpr::Let(l)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `CoreExpr::Let` [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: identical conversion [INFO] [stderr] --> src/frontend.rs:996:24 [INFO] [stderr] | [INFO] [stderr] 996 | return ParseError::generic(range, format!( [INFO] [stderr] | ________________________^ [INFO] [stderr] 997 | | "identifier that is supercombinator argument or \"=\" expected, \ [INFO] [stderr] 998 | | {:#?} encountered", [INFO] [stderr] 999 | | other)).into(); [INFO] [stderr] | |__________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] help: consider removing `.into()` [INFO] [stderr] | [INFO] [stderr] 996 | return ParseError::generic(range, format!( [INFO] [stderr] 997 | "identifier that is supercombinator argument or \"=\" expected, \ [INFO] [stderr] 998 | {:#?} encountered", [INFO] [stderr] 999 | other)); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: useless lint attribute [INFO] [stderr] --> src/ir.rs:10:1 [INFO] [stderr] | [INFO] [stderr] 10 | #[warn(missing_docs)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: if you just forgot a `!`, use: `#![warn(missing_docs)]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_attribute [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ir.rs:45:9 [INFO] [stderr] | [INFO] [stderr] 45 | / match self { [INFO] [stderr] 46 | | &CoreExpr::Variable(ref name) => write!(fmt, "v_{}", name), [INFO] [stderr] 47 | | &CoreExpr::Num(ref num) => write!(fmt, "n_{}", num), [INFO] [stderr] 48 | | &CoreExpr::Application(ref e1, ref e2) => [INFO] [stderr] ... | [INFO] [stderr] 62 | | } [INFO] [stderr] 63 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 45 | match *self { [INFO] [stderr] 46 | CoreExpr::Variable(ref name) => write!(fmt, "v_{}", name), [INFO] [stderr] 47 | CoreExpr::Num(ref num) => write!(fmt, "n_{}", num), [INFO] [stderr] 48 | CoreExpr::Application(ref e1, ref e2) => [INFO] [stderr] 49 | write!(fmt, "({:#?} $ {:#?})", *e1, *e2), [INFO] [stderr] 50 | CoreExpr::Let(CoreLet{ref bindings, ref expr}) => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/pretty_print.rs:21:44 [INFO] [stderr] | [INFO] [stderr] 21 | pub fn format_heap_node(heap: &Heap, addr: &Addr) -> String { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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: useless use of `format!` [INFO] [stderr] --> src/pretty_print.rs:42:13 [INFO] [stderr] | [INFO] [stderr] 42 | format!("True") [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: consider using .to_string(): `"True".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/pretty_print.rs:45:13 [INFO] [stderr] | [INFO] [stderr] 45 | format!("False") [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"False".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/pretty_print.rs:59:13 [INFO] [stderr] | [INFO] [stderr] 59 | format!("[]") [INFO] [stderr] | ^^^^^^^^^^^^^ help: consider using .to_string(): `"[]".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/pretty_print.rs:81:43 [INFO] [stderr] | [INFO] [stderr] 81 | fn is_heap_node_cyclic(heap: &Heap, addr: &Addr, [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pretty_print.rs:86:9 [INFO] [stderr] | [INFO] [stderr] 86 | / match node { [INFO] [stderr] 87 | | &HeapNode::Indirection(ref addr) => { [INFO] [stderr] 88 | | vec![*addr] [INFO] [stderr] 89 | | } [INFO] [stderr] ... | [INFO] [stderr] 98 | | &HeapNode::Num(_) => {Vec::new()} [INFO] [stderr] 99 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 86 | match *node { [INFO] [stderr] 87 | HeapNode::Indirection(ref addr) => { [INFO] [stderr] 88 | vec![*addr] [INFO] [stderr] 89 | } [INFO] [stderr] 90 | HeapNode::Application{ref fn_addr, ref arg_addr} => { [INFO] [stderr] 91 | vec![*fn_addr, *arg_addr] [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/pretty_print.rs:119:73 [INFO] [stderr] | [INFO] [stderr] 119 | else if is_heap_node_cyclic(heap, &n, processed, rec_stack) { [INFO] [stderr] | _________________________________________________________________________^ [INFO] [stderr] 120 | | return true; [INFO] [stderr] 121 | | } [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/pretty_print.rs:116:39 [INFO] [stderr] | [INFO] [stderr] 116 | if rec_stack.contains(&n) { [INFO] [stderr] | _______________________________________^ [INFO] [stderr] 117 | | return true; [INFO] [stderr] 118 | | } [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/pretty_print.rs:140:39 [INFO] [stderr] | [INFO] [stderr] 140 | addr: &Addr, [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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/pretty_print.rs:179:33 [INFO] [stderr] | [INFO] [stderr] 179 | pub fn format_addr_string(addr: &Addr) -> String { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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: length comparison to zero [INFO] [stderr] --> src/pretty_print.rs:240:8 [INFO] [stderr] | [INFO] [stderr] 240 | if cur_addrs.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `cur_addrs.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: length comparison to zero [INFO] [stderr] --> src/pretty_print.rs:259:8 [INFO] [stderr] | [INFO] [stderr] 259 | if m.dump.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `m.dump.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: length comparison to zero [INFO] [stderr] --> src/pretty_print.rs:279:8 [INFO] [stderr] | [INFO] [stderr] 279 | if globals_in_use.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `globals_in_use.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] error: aborting due to 5 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `timi`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "2fec680e64751b5acaf0a0faae807674fe6399e51c042bacde28c0dcc8d121ff"` [INFO] running `"docker" "rm" "-f" "2fec680e64751b5acaf0a0faae807674fe6399e51c042bacde28c0dcc8d121ff"` [INFO] [stdout] 2fec680e64751b5acaf0a0faae807674fe6399e51c042bacde28c0dcc8d121ff