[INFO] updating cached repository fromheten/plato [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/fromheten/plato [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/fromheten/plato" "work/ex/clippy-test-run/sources/stable/gh/fromheten/plato"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/fromheten/plato'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/fromheten/plato" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/fromheten/plato"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/fromheten/plato'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 5b6cc48fa80eb224eb632dd3ad2353a24abfa146 [INFO] sha for GitHub repo fromheten/plato: 5b6cc48fa80eb224eb632dd3ad2353a24abfa146 [INFO] validating manifest of fromheten/plato 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 fromheten/plato 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 fromheten/plato [INFO] finished frobbing fromheten/plato [INFO] frobbed toml for fromheten/plato written to work/ex/clippy-test-run/sources/stable/gh/fromheten/plato/Cargo.toml [INFO] started frobbing fromheten/plato [INFO] finished frobbing fromheten/plato [INFO] frobbed toml for fromheten/plato written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/fromheten/plato/Cargo.toml [INFO] crate fromheten/plato has a lockfile. skipping [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 fromheten/plato against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-6/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/fromheten/plato:/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] 2370b511a47661d3cb22f479ec9372916a31edeaeb4198298bde79eaa441262c [INFO] running `"docker" "start" "-a" "2370b511a47661d3cb22f479ec9372916a31edeaeb4198298bde79eaa441262c"` [INFO] [stderr] Checking rpds v0.3.0 [INFO] [stderr] Checking generic-array v0.9.0 [INFO] [stderr] Checking digest v0.7.2 [INFO] [stderr] Checking sha3 v0.7.2 [INFO] [stderr] Checking plato v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/main.rs:713:13 [INFO] [stderr] | [INFO] [stderr] 713 | return Ok(Expression::Vector(to_ret)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(Expression::Vector(to_ret))` [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: unneeded return statement [INFO] [stderr] --> src/main.rs:735:21 [INFO] [stderr] | [INFO] [stderr] 735 | return Ok(Expression::Record(to_ret)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(Expression::Record(to_ret))` [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/main.rs:713:13 [INFO] [stderr] | [INFO] [stderr] 713 | return Ok(Expression::Vector(to_ret)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(Expression::Vector(to_ret))` [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: unneeded return statement [INFO] [stderr] --> src/main.rs:735:21 [INFO] [stderr] | [INFO] [stderr] 735 | return Ok(Expression::Record(to_ret)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(Expression::Record(to_ret))` [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: function is never used: `type_of` [INFO] [stderr] --> src/main.rs:562:1 [INFO] [stderr] | [INFO] [stderr] 562 | fn type_of(expression: &Expression) -> &str { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: function is never used: `evaluate` [INFO] [stderr] --> src/main.rs:572:1 [INFO] [stderr] | [INFO] [stderr] 572 | fn evaluate(expression_given: Expression, context_given: Expression) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `given_arguments` [INFO] [stderr] --> src/main.rs:663:1 [INFO] [stderr] | [INFO] [stderr] 663 | fn given_arguments(lambda_call_expression: &Expression) -> Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `lambda_args` [INFO] [stderr] --> src/main.rs:667:1 [INFO] [stderr] | [INFO] [stderr] 667 | fn lambda_args(lambda_call_expression: &Expression) -> Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `lambda_body` [INFO] [stderr] --> src/main.rs:671:1 [INFO] [stderr] | [INFO] [stderr] 671 | fn lambda_body(lambda_call_expression: &Expression) -> Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `rest_no_evaluate` [INFO] [stderr] --> src/main.rs:675:1 [INFO] [stderr] | [INFO] [stderr] 675 | fn rest_no_evaluate(e: Expression) -> Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `rest` [INFO] [stderr] --> src/main.rs:692:1 [INFO] [stderr] | [INFO] [stderr] 692 | fn rest(e: Expression, context: Expression) -> Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `zipmap` [INFO] [stderr] --> src/main.rs:719:1 [INFO] [stderr] | [INFO] [stderr] 719 | fn zipmap(vec0: Expression, vec1: Expression) -> Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `nth_vector` [INFO] [stderr] --> src/main.rs:744:1 [INFO] [stderr] | [INFO] [stderr] 744 | fn nth_vector(e: Expression, n: usize) -> Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `eval_test` [INFO] [stderr] --> src/main.rs:751:1 [INFO] [stderr] | [INFO] [stderr] 751 | fn eval_test(source_str: &str, context_source: &str, expectation: &str) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `id` [INFO] [stderr] --> src/main.rs:859:1 [INFO] [stderr] | [INFO] [stderr] 859 | fn id(expression: &Expression) -> String { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: you are implementing `Hash` explicitly but have derived `PartialEq` [INFO] [stderr] --> src/main.rs:18:1 [INFO] [stderr] | [INFO] [stderr] 18 | / impl std::hash::Hash for Expression { [INFO] [stderr] 19 | | fn hash(&self, state: &mut H) { [INFO] [stderr] 20 | | match self { [INFO] [stderr] 21 | | &Expression::Symbol(ref string) => string.hash(state), [INFO] [stderr] ... | [INFO] [stderr] 27 | | } [INFO] [stderr] 28 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::derive_hash_xor_eq)] on by default [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/main.rs:8:14 [INFO] [stderr] | [INFO] [stderr] 8 | #[derive(Eq, PartialEq, Clone)] [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/main.rs:20:9 [INFO] [stderr] | [INFO] [stderr] 20 | / match self { [INFO] [stderr] 21 | | &Expression::Symbol(ref string) => string.hash(state), [INFO] [stderr] 22 | | &Expression::Vector(ref vector) => vector.hash(state), [INFO] [stderr] 23 | | &Expression::Record(ref record) => record.iter().collect::>().hash(state), [INFO] [stderr] 24 | | &Expression::Set(ref set) => set.iter().collect::>().hash(state), [INFO] [stderr] 25 | | &Expression::Bool(ref b) => b.hash(state), [INFO] [stderr] 26 | | } [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] 20 | match *self { [INFO] [stderr] 21 | Expression::Symbol(ref string) => string.hash(state), [INFO] [stderr] 22 | Expression::Vector(ref vector) => vector.hash(state), [INFO] [stderr] 23 | Expression::Record(ref record) => record.iter().collect::>().hash(state), [INFO] [stderr] 24 | Expression::Set(ref set) => set.iter().collect::>().hash(state), [INFO] [stderr] 25 | Expression::Bool(ref b) => b.hash(state), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/main.rs:33:13 [INFO] [stderr] | [INFO] [stderr] 33 | / match b { [INFO] [stderr] 34 | | true => String::from("T"), [INFO] [stderr] 35 | | false => String::from("F"), [INFO] [stderr] 36 | | } [INFO] [stderr] | |_____________^ help: consider using an if/else expression: `if b { String::from("T") } else { String::from("F") }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/main.rs:128:21 [INFO] [stderr] | [INFO] [stderr] 128 | fn tokenize(source: &String) -> Vec { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/main.rs:295:23 [INFO] [stderr] | [INFO] [stderr] 295 | fn expression(tokens: &Vec, index_option: &Option) -> (Expression, usize) { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[Token]` [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/main.rs:297:5 [INFO] [stderr] | [INFO] [stderr] 297 | / match index_option { [INFO] [stderr] 298 | | &None => expression(tokens, &Some(0)), [INFO] [stderr] 299 | | &Some(index) => { [INFO] [stderr] 300 | | let current_token = tokens[index].clone(); [INFO] [stderr] ... | [INFO] [stderr] 383 | | } [INFO] [stderr] 384 | | } [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] 297 | match *index_option { [INFO] [stderr] 298 | None => expression(tokens, &Some(0)), [INFO] [stderr] 299 | Some(index) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/main.rs:334:28 [INFO] [stderr] | [INFO] [stderr] 334 | if expressions_buffer.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `expressions_buffer.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/main.rs:563:5 [INFO] [stderr] | [INFO] [stderr] 563 | / match expression { [INFO] [stderr] 564 | | &Expression::Vector(_) => "Vector", [INFO] [stderr] 565 | | &Expression::Record(_) => "Record", [INFO] [stderr] 566 | | &Expression::Set(_) => "Set", [INFO] [stderr] 567 | | &Expression::Symbol(_) => "Symbol", [INFO] [stderr] 568 | | &Expression::Bool(_) => "Bool", [INFO] [stderr] 569 | | } [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] 563 | match *expression { [INFO] [stderr] 564 | Expression::Vector(_) => "Vector", [INFO] [stderr] 565 | Expression::Record(_) => "Record", [INFO] [stderr] 566 | Expression::Set(_) => "Set", [INFO] [stderr] 567 | Expression::Symbol(_) => "Symbol", [INFO] [stderr] 568 | Expression::Bool(_) => "Bool", [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/main.rs:684:17 [INFO] [stderr] | [INFO] [stderr] 684 | index = index + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `index += 1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/main.rs:705:33 [INFO] [stderr] | [INFO] [stderr] 705 | index = index + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `index += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/main.rs:733:25 [INFO] [stderr] | [INFO] [stderr] 733 | index = index + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `index += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `plato`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] error: you are implementing `Hash` explicitly but have derived `PartialEq` [INFO] [stderr] --> src/main.rs:18:1 [INFO] [stderr] | [INFO] [stderr] 18 | / impl std::hash::Hash for Expression { [INFO] [stderr] 19 | | fn hash(&self, state: &mut H) { [INFO] [stderr] 20 | | match self { [INFO] [stderr] 21 | | &Expression::Symbol(ref string) => string.hash(state), [INFO] [stderr] ... | [INFO] [stderr] 27 | | } [INFO] [stderr] 28 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::derive_hash_xor_eq)] on by default [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/main.rs:8:14 [INFO] [stderr] | [INFO] [stderr] 8 | #[derive(Eq, PartialEq, Clone)] [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/main.rs:20:9 [INFO] [stderr] | [INFO] [stderr] 20 | / match self { [INFO] [stderr] 21 | | &Expression::Symbol(ref string) => string.hash(state), [INFO] [stderr] 22 | | &Expression::Vector(ref vector) => vector.hash(state), [INFO] [stderr] 23 | | &Expression::Record(ref record) => record.iter().collect::>().hash(state), [INFO] [stderr] 24 | | &Expression::Set(ref set) => set.iter().collect::>().hash(state), [INFO] [stderr] 25 | | &Expression::Bool(ref b) => b.hash(state), [INFO] [stderr] 26 | | } [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] 20 | match *self { [INFO] [stderr] 21 | Expression::Symbol(ref string) => string.hash(state), [INFO] [stderr] 22 | Expression::Vector(ref vector) => vector.hash(state), [INFO] [stderr] 23 | Expression::Record(ref record) => record.iter().collect::>().hash(state), [INFO] [stderr] 24 | Expression::Set(ref set) => set.iter().collect::>().hash(state), [INFO] [stderr] 25 | Expression::Bool(ref b) => b.hash(state), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/main.rs:33:13 [INFO] [stderr] | [INFO] [stderr] 33 | / match b { [INFO] [stderr] 34 | | true => String::from("T"), [INFO] [stderr] 35 | | false => String::from("F"), [INFO] [stderr] 36 | | } [INFO] [stderr] | |_____________^ help: consider using an if/else expression: `if b { String::from("T") } else { String::from("F") }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/main.rs:128:21 [INFO] [stderr] | [INFO] [stderr] 128 | fn tokenize(source: &String) -> Vec { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/main.rs:295:23 [INFO] [stderr] | [INFO] [stderr] 295 | fn expression(tokens: &Vec, index_option: &Option) -> (Expression, usize) { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[Token]` [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/main.rs:297:5 [INFO] [stderr] | [INFO] [stderr] 297 | / match index_option { [INFO] [stderr] 298 | | &None => expression(tokens, &Some(0)), [INFO] [stderr] 299 | | &Some(index) => { [INFO] [stderr] 300 | | let current_token = tokens[index].clone(); [INFO] [stderr] ... | [INFO] [stderr] 383 | | } [INFO] [stderr] 384 | | } [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] 297 | match *index_option { [INFO] [stderr] 298 | None => expression(tokens, &Some(0)), [INFO] [stderr] 299 | Some(index) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/main.rs:334:28 [INFO] [stderr] | [INFO] [stderr] 334 | if expressions_buffer.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `expressions_buffer.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/main.rs:563:5 [INFO] [stderr] | [INFO] [stderr] 563 | / match expression { [INFO] [stderr] 564 | | &Expression::Vector(_) => "Vector", [INFO] [stderr] 565 | | &Expression::Record(_) => "Record", [INFO] [stderr] 566 | | &Expression::Set(_) => "Set", [INFO] [stderr] 567 | | &Expression::Symbol(_) => "Symbol", [INFO] [stderr] 568 | | &Expression::Bool(_) => "Bool", [INFO] [stderr] 569 | | } [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] 563 | match *expression { [INFO] [stderr] 564 | Expression::Vector(_) => "Vector", [INFO] [stderr] 565 | Expression::Record(_) => "Record", [INFO] [stderr] 566 | Expression::Set(_) => "Set", [INFO] [stderr] 567 | Expression::Symbol(_) => "Symbol", [INFO] [stderr] 568 | Expression::Bool(_) => "Bool", [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/main.rs:684:17 [INFO] [stderr] | [INFO] [stderr] 684 | index = index + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `index += 1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/main.rs:705:33 [INFO] [stderr] | [INFO] [stderr] 705 | index = index + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `index += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/main.rs:733:25 [INFO] [stderr] | [INFO] [stderr] 733 | index = index + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `index += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `plato`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "2370b511a47661d3cb22f479ec9372916a31edeaeb4198298bde79eaa441262c"` [INFO] running `"docker" "rm" "-f" "2370b511a47661d3cb22f479ec9372916a31edeaeb4198298bde79eaa441262c"` [INFO] [stdout] 2370b511a47661d3cb22f479ec9372916a31edeaeb4198298bde79eaa441262c