[INFO] cloning repository https://github.com/ms747/chailang [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/ms747/chailang" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fms747%2Fchailang", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fms747%2Fchailang'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 370a3fc3745e97126b800e2b522ccc4dd5295190 [INFO] linting ms747/chailang against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fms747%2Fchailang" "/workspace/builds/worker-0-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/ms747/chailang [INFO] finished tweaking git repo https://github.com/ms747/chailang [INFO] tweaked toml for git repo https://github.com/ms747/chailang written to /workspace/builds/worker-0-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/ms747/chailang on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/ms747/chailang already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] fd84eabf611520783a6bf4b5916836a120cb3df808394a57afba12660c012ea8 [INFO] running `Command { std: "docker" "start" "-a" "fd84eabf611520783a6bf4b5916836a120cb3df808394a57afba12660c012ea8", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "fd84eabf611520783a6bf4b5916836a120cb3df808394a57afba12660c012ea8", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "fd84eabf611520783a6bf4b5916836a120cb3df808394a57afba12660c012ea8", kill_on_drop: false }` [INFO] [stdout] fd84eabf611520783a6bf4b5916836a120cb3df808394a57afba12660c012ea8 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] a3342097390ab46363f13c25727512f9aa43cb57ec4b3f860b4669b3106e8a6a [INFO] running `Command { std: "docker" "start" "-a" "a3342097390ab46363f13c25727512f9aa43cb57ec4b3f860b4669b3106e8a6a", kill_on_drop: false }` [INFO] [stderr] Checking newchai v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lexer.rs:43:13 [INFO] [stdout] | [INFO] [stdout] 43 | return self.input.as_bytes()[self.read_position]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 43 - return self.input.as_bytes()[self.read_position]; [INFO] [stdout] 43 + self.input.as_bytes()[self.read_position] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/lexer.rs:76:9 [INFO] [stdout] | [INFO] [stdout] 76 | ch >= b'A' && ch <= b'Z' || ch >= b'a' && ch <= b'z' || ch == b'_' [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(b'A'..=b'Z').contains(&ch)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] = note: `#[warn(clippy::manual_range_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/lexer.rs:76:37 [INFO] [stdout] | [INFO] [stdout] 76 | ch >= b'A' && ch <= b'Z' || ch >= b'a' && ch <= b'z' || ch == b'_' [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(b'a'..=b'z').contains(&ch)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/lexer.rs:80:9 [INFO] [stdout] | [INFO] [stdout] 80 | ch >= b'0' && ch <= b'9' [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(b'0'..=b'9').contains(&ch)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> src/program.rs:8:1 [INFO] [stdout] | [INFO] [stdout] 8 | / impl Default for Program { [INFO] [stdout] 9 | | fn default() -> Self { [INFO] [stdout] 10 | | Program { [INFO] [stdout] 11 | | statements: Vec::new(), [INFO] [stdout] ... | [INFO] [stdout] 14 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 4 + #[derive(Default)] [INFO] [stdout] 5 | pub struct Program { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Enviornment` [INFO] [stdout] --> src/enviornment.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 12 | / pub fn new() -> Self { [INFO] [stdout] 13 | | Enviornment { [INFO] [stdout] 14 | | state: HashMap::new(), [INFO] [stdout] 15 | | outer: None, [INFO] [stdout] 16 | | } [INFO] [stdout] 17 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 11 + impl Default for Enviornment { [INFO] [stdout] 12 + fn default() -> Self { [INFO] [stdout] 13 + Self::new() [INFO] [stdout] 14 + } [INFO] [stdout] 15 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/enviornment.rs:32:12 [INFO] [stdout] | [INFO] [stdout] 32 | if !value.is_some() && !self.outer.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try: `value.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/enviornment.rs:32:32 [INFO] [stdout] | [INFO] [stdout] 32 | if !value.is_some() && !self.outer.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `self.outer.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `&str` [INFO] [stdout] --> src/enviornment.rs:31:36 [INFO] [stdout] | [INFO] [stdout] 31 | let value = self.state.get(name.into()).cloned(); [INFO] [stdout] | ^^^^^^^^^^^ help: consider removing `.into()`: `name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this if-then-else expression returns a bool literal [INFO] [stdout] --> src/interpreter.rs:30:13 [INFO] [stdout] | [INFO] [stdout] 30 | / if boolean { [INFO] [stdout] 31 | | true [INFO] [stdout] 32 | | } else { [INFO] [stdout] 33 | | false [INFO] [stdout] 34 | | } [INFO] [stdout] | |_____________^ help: you can reduce it to: `boolean` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stdout] = note: `#[warn(clippy::needless_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `otherwise` after checking its variant with `is_some` [INFO] [stdout] --> src/interpreter.rs:187:33 [INFO] [stdout] | [INFO] [stdout] 186 | if otherwise.is_some() { [INFO] [stdout] | ---------------------- help: try: `if let Some() = otherwise` [INFO] [stdout] 187 | return eval(otherwise.unwrap(), env, std); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/interpreter.rs:221:13 [INFO] [stdout] | [INFO] [stdout] 221 | return error(&format!("Variable : {} not found", name)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 221 - return error(&format!("Variable : {} not found", name)); [INFO] [stdout] 221 + error(&format!("Variable : {} not found", name)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/interpreter.rs:236:13 [INFO] [stdout] | [INFO] [stdout] 236 | return apply_function(function, arguments, env, std); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 236 - return apply_function(function, arguments, env, std); [INFO] [stdout] 236 + apply_function(function, arguments, env, std) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option) -> ChaiObject>` which implements the `Copy` trait [INFO] [stdout] --> src/interpreter.rs:215:27 [INFO] [stdout] | [INFO] [stdout] 215 | let buildin = std.clone().get(&name).clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `std.clone().get(&name)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `to_string` [INFO] [stdout] --> src/stdchai.rs:64:56 [INFO] [stdout] | [INFO] [stdout] 64 | "[".to_string() + &array_items.join(",") + &"]".to_string() [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: use: `"]"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_to_owned [INFO] [stdout] = note: `#[warn(clippy::unnecessary_to_owned)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/stdchai.rs:71:8 [INFO] [stdout] | [INFO] [stdout] 71 | if object.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `object.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `&str` [INFO] [stdout] --> src/stdchai.rs:94:35 [INFO] [stdout] | [INFO] [stdout] 94 | self.buildinfunctions.get(name.into()).cloned() [INFO] [stdout] | ^^^^^^^^^^^ help: consider removing `.into()`: `name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique [INFO] [stdout] --> src/object.rs:18:21 [INFO] [stdout] | [INFO] [stdout] 10 | #[derive(Debug, PartialEq, Clone)] [INFO] [stdout] | --------- in this derive macro expansion [INFO] [stdout] ... [INFO] [stdout] 18 | BuildinFunction(BuildinFunction), [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: the address of the same function can vary between different codegen units [INFO] [stdout] = note: furthermore, different functions could have the same address after being merged together [INFO] [stdout] = note: for more information visit [INFO] [stdout] = note: `#[warn(unpredictable_function_pointer_comparisons)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lexer.rs:43:13 [INFO] [stdout] | [INFO] [stdout] 43 | return self.input.as_bytes()[self.read_position]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 43 - return self.input.as_bytes()[self.read_position]; [INFO] [stdout] 43 + self.input.as_bytes()[self.read_position] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/lexer.rs:76:9 [INFO] [stdout] | [INFO] [stdout] 76 | ch >= b'A' && ch <= b'Z' || ch >= b'a' && ch <= b'z' || ch == b'_' [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(b'A'..=b'Z').contains(&ch)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] = note: `#[warn(clippy::manual_range_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/lexer.rs:76:37 [INFO] [stdout] | [INFO] [stdout] 76 | ch >= b'A' && ch <= b'Z' || ch >= b'a' && ch <= b'z' || ch == b'_' [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(b'a'..=b'z').contains(&ch)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/lexer.rs:80:9 [INFO] [stdout] | [INFO] [stdout] 80 | ch >= b'0' && ch <= b'9' [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(b'0'..=b'9').contains(&ch)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting a character literal to `u8` truncates [INFO] [stdout] --> src/lexer.rs:244:17 [INFO] [stdout] | [INFO] [stdout] 244 | ch: 'l' as u8, [INFO] [stdout] | ^^^^^^^^^ help: use a byte literal instead: `b'l'` [INFO] [stdout] | [INFO] [stdout] = note: `char` is four bytes wide, but `u8` is a single byte [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stdout] = note: `#[warn(clippy::char_lit_as_u8)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/lexer.rs:252:9 [INFO] [stdout] | [INFO] [stdout] 252 | assert_eq!(Lexer::is_letter('a' as u8), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] = note: `#[warn(clippy::bool_assert_comparison)]` on by default [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 252 - assert_eq!(Lexer::is_letter('a' as u8), true); [INFO] [stdout] 252 + assert!(Lexer::is_letter('a' as u8)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting a character literal to `u8` truncates [INFO] [stdout] --> src/lexer.rs:252:37 [INFO] [stdout] | [INFO] [stdout] 252 | assert_eq!(Lexer::is_letter('a' as u8), true); [INFO] [stdout] | ^^^^^^^^^ help: use a byte literal instead: `b'a'` [INFO] [stdout] | [INFO] [stdout] = note: `char` is four bytes wide, but `u8` is a single byte [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/lexer.rs:253:9 [INFO] [stdout] | [INFO] [stdout] 253 | assert_eq!(Lexer::is_letter('_' as u8), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 253 - assert_eq!(Lexer::is_letter('_' as u8), true); [INFO] [stdout] 253 + assert!(Lexer::is_letter('_' as u8)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting a character literal to `u8` truncates [INFO] [stdout] --> src/lexer.rs:253:37 [INFO] [stdout] | [INFO] [stdout] 253 | assert_eq!(Lexer::is_letter('_' as u8), true); [INFO] [stdout] | ^^^^^^^^^ help: use a byte literal instead: `b'_'` [INFO] [stdout] | [INFO] [stdout] = note: `char` is four bytes wide, but `u8` is a single byte [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/lexer.rs:254:9 [INFO] [stdout] | [INFO] [stdout] 254 | assert_eq!(Lexer::is_letter('1' as u8), false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 254 - assert_eq!(Lexer::is_letter('1' as u8), false); [INFO] [stdout] 254 + assert!(!Lexer::is_letter('1' as u8)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting a character literal to `u8` truncates [INFO] [stdout] --> src/lexer.rs:254:37 [INFO] [stdout] | [INFO] [stdout] 254 | assert_eq!(Lexer::is_letter('1' as u8), false); [INFO] [stdout] | ^^^^^^^^^ help: use a byte literal instead: `b'1'` [INFO] [stdout] | [INFO] [stdout] = note: `char` is four bytes wide, but `u8` is a single byte [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/lexer.rs:255:9 [INFO] [stdout] | [INFO] [stdout] 255 | assert_eq!(Lexer::is_letter('[' as u8), false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 255 - assert_eq!(Lexer::is_letter('[' as u8), false); [INFO] [stdout] 255 + assert!(!Lexer::is_letter('[' as u8)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting a character literal to `u8` truncates [INFO] [stdout] --> src/lexer.rs:255:37 [INFO] [stdout] | [INFO] [stdout] 255 | assert_eq!(Lexer::is_letter('[' as u8), false); [INFO] [stdout] | ^^^^^^^^^ help: use a byte literal instead: `b'['` [INFO] [stdout] | [INFO] [stdout] = note: `char` is four bytes wide, but `u8` is a single byte [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/lexer.rs:260:9 [INFO] [stdout] | [INFO] [stdout] 260 | assert_eq!(Lexer::is_digit('1' as u8), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 260 - assert_eq!(Lexer::is_digit('1' as u8), true); [INFO] [stdout] 260 + assert!(Lexer::is_digit('1' as u8)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting a character literal to `u8` truncates [INFO] [stdout] --> src/lexer.rs:260:36 [INFO] [stdout] | [INFO] [stdout] 260 | assert_eq!(Lexer::is_digit('1' as u8), true); [INFO] [stdout] | ^^^^^^^^^ help: use a byte literal instead: `b'1'` [INFO] [stdout] | [INFO] [stdout] = note: `char` is four bytes wide, but `u8` is a single byte [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/lexer.rs:261:9 [INFO] [stdout] | [INFO] [stdout] 261 | assert_eq!(Lexer::is_digit('2' as u8), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 261 - assert_eq!(Lexer::is_digit('2' as u8), true); [INFO] [stdout] 261 + assert!(Lexer::is_digit('2' as u8)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting a character literal to `u8` truncates [INFO] [stdout] --> src/lexer.rs:261:36 [INFO] [stdout] | [INFO] [stdout] 261 | assert_eq!(Lexer::is_digit('2' as u8), true); [INFO] [stdout] | ^^^^^^^^^ help: use a byte literal instead: `b'2'` [INFO] [stdout] | [INFO] [stdout] = note: `char` is four bytes wide, but `u8` is a single byte [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/lexer.rs:262:9 [INFO] [stdout] | [INFO] [stdout] 262 | assert_eq!(Lexer::is_digit('a' as u8), false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 262 - assert_eq!(Lexer::is_digit('a' as u8), false); [INFO] [stdout] 262 + assert!(!Lexer::is_digit('a' as u8)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting a character literal to `u8` truncates [INFO] [stdout] --> src/lexer.rs:262:36 [INFO] [stdout] | [INFO] [stdout] 262 | assert_eq!(Lexer::is_digit('a' as u8), false); [INFO] [stdout] | ^^^^^^^^^ help: use a byte literal instead: `b'a'` [INFO] [stdout] | [INFO] [stdout] = note: `char` is four bytes wide, but `u8` is a single byte [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> src/program.rs:8:1 [INFO] [stdout] | [INFO] [stdout] 8 | / impl Default for Program { [INFO] [stdout] 9 | | fn default() -> Self { [INFO] [stdout] 10 | | Program { [INFO] [stdout] 11 | | statements: Vec::new(), [INFO] [stdout] ... | [INFO] [stdout] 14 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 4 + #[derive(Default)] [INFO] [stdout] 5 | pub struct Program { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Enviornment` [INFO] [stdout] --> src/enviornment.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 12 | / pub fn new() -> Self { [INFO] [stdout] 13 | | Enviornment { [INFO] [stdout] 14 | | state: HashMap::new(), [INFO] [stdout] 15 | | outer: None, [INFO] [stdout] 16 | | } [INFO] [stdout] 17 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 11 + impl Default for Enviornment { [INFO] [stdout] 12 + fn default() -> Self { [INFO] [stdout] 13 + Self::new() [INFO] [stdout] 14 + } [INFO] [stdout] 15 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/enviornment.rs:32:12 [INFO] [stdout] | [INFO] [stdout] 32 | if !value.is_some() && !self.outer.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try: `value.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/enviornment.rs:32:32 [INFO] [stdout] | [INFO] [stdout] 32 | if !value.is_some() && !self.outer.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `self.outer.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `&str` [INFO] [stdout] --> src/enviornment.rs:31:36 [INFO] [stdout] | [INFO] [stdout] 31 | let value = self.state.get(name.into()).cloned(); [INFO] [stdout] | ^^^^^^^^^^^ help: consider removing `.into()`: `name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this if-then-else expression returns a bool literal [INFO] [stdout] --> src/interpreter.rs:30:13 [INFO] [stdout] | [INFO] [stdout] 30 | / if boolean { [INFO] [stdout] 31 | | true [INFO] [stdout] 32 | | } else { [INFO] [stdout] 33 | | false [INFO] [stdout] 34 | | } [INFO] [stdout] | |_____________^ help: you can reduce it to: `boolean` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stdout] = note: `#[warn(clippy::needless_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `otherwise` after checking its variant with `is_some` [INFO] [stdout] --> src/interpreter.rs:187:33 [INFO] [stdout] | [INFO] [stdout] 186 | if otherwise.is_some() { [INFO] [stdout] | ---------------------- help: try: `if let Some() = otherwise` [INFO] [stdout] 187 | return eval(otherwise.unwrap(), env, std); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/interpreter.rs:221:13 [INFO] [stdout] | [INFO] [stdout] 221 | return error(&format!("Variable : {} not found", name)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 221 - return error(&format!("Variable : {} not found", name)); [INFO] [stdout] 221 + error(&format!("Variable : {} not found", name)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/interpreter.rs:236:13 [INFO] [stdout] | [INFO] [stdout] 236 | return apply_function(function, arguments, env, std); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 236 - return apply_function(function, arguments, env, std); [INFO] [stdout] 236 + apply_function(function, arguments, env, std) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option) -> ChaiObject>` which implements the `Copy` trait [INFO] [stdout] --> src/interpreter.rs:215:27 [INFO] [stdout] | [INFO] [stdout] 215 | let buildin = std.clone().get(&name).clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `std.clone().get(&name)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `to_string` [INFO] [stdout] --> src/stdchai.rs:64:56 [INFO] [stdout] | [INFO] [stdout] 64 | "[".to_string() + &array_items.join(",") + &"]".to_string() [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: use: `"]"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_to_owned [INFO] [stdout] = note: `#[warn(clippy::unnecessary_to_owned)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/stdchai.rs:71:8 [INFO] [stdout] | [INFO] [stdout] 71 | if object.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `object.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `&str` [INFO] [stdout] --> src/stdchai.rs:94:35 [INFO] [stdout] | [INFO] [stdout] 94 | self.buildinfunctions.get(name.into()).cloned() [INFO] [stdout] | ^^^^^^^^^^^ help: consider removing `.into()`: `name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique [INFO] [stdout] --> src/object.rs:18:21 [INFO] [stdout] | [INFO] [stdout] 10 | #[derive(Debug, PartialEq, Clone)] [INFO] [stdout] | --------- in this derive macro expansion [INFO] [stdout] ... [INFO] [stdout] 18 | BuildinFunction(BuildinFunction), [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: the address of the same function can vary between different codegen units [INFO] [stdout] = note: furthermore, different functions could have the same address after being merged together [INFO] [stdout] = note: for more information visit [INFO] [stdout] = note: `#[warn(unpredictable_function_pointer_comparisons)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.77s [INFO] running `Command { std: "docker" "inspect" "a3342097390ab46363f13c25727512f9aa43cb57ec4b3f860b4669b3106e8a6a", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "a3342097390ab46363f13c25727512f9aa43cb57ec4b3f860b4669b3106e8a6a", kill_on_drop: false }` [INFO] [stdout] a3342097390ab46363f13c25727512f9aa43cb57ec4b3f860b4669b3106e8a6a