[INFO] crate oftlisp 0.1.3 is already in cache [INFO] extracting crate oftlisp 0.1.3 into work/ex/clippy-test-run/sources/stable/reg/oftlisp/0.1.3 [INFO] extracting crate oftlisp 0.1.3 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/oftlisp/0.1.3 [INFO] validating manifest of oftlisp-0.1.3 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 oftlisp-0.1.3 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 oftlisp-0.1.3 [INFO] finished frobbing oftlisp-0.1.3 [INFO] frobbed toml for oftlisp-0.1.3 written to work/ex/clippy-test-run/sources/stable/reg/oftlisp/0.1.3/Cargo.toml [INFO] started frobbing oftlisp-0.1.3 [INFO] finished frobbing oftlisp-0.1.3 [INFO] frobbed toml for oftlisp-0.1.3 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/oftlisp/0.1.3/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 oftlisp-0.1.3 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-1/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/oftlisp/0.1.3:/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] d7f9484d5f424bc12e67ca97dcf6636c5763147945f5c51a0ffd26cb48fe7bcc [INFO] running `"docker" "start" "-a" "d7f9484d5f424bc12e67ca97dcf6636c5763147945f5c51a0ffd26cb48fe7bcc"` [INFO] [stderr] Checking gc v0.3.2 [INFO] [stderr] Checking itertools v0.6.5 [INFO] [stderr] Compiling synstructure v0.5.2 [INFO] [stderr] Compiling gc_derive v0.3.1 [INFO] [stderr] Checking oftlisp v0.1.3 (/opt/crater/workdir) [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/ast/args/mod.rs:53:10 [INFO] [stderr] | [INFO] [stderr] 53 | ) -> Result>)>, ArgsBindingError> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/ast/args/mod.rs:167:19 [INFO] [stderr] | [INFO] [stderr] 167 | rest: self.rest.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.rest` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/ast/args/mod.rs:53:10 [INFO] [stderr] | [INFO] [stderr] 53 | ) -> Result>)>, ArgsBindingError> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/ast/args/mod.rs:167:19 [INFO] [stderr] | [INFO] [stderr] 167 | rest: self.rest.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.rest` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/ast/expr.rs:44:33 [INFO] [stderr] | [INFO] [stderr] 44 | let args = args.into_iter().map(|e| e.to_value()); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/ast/expr.rs:96:33 [INFO] [stderr] | [INFO] [stderr] 96 | let body = body.into_iter().map(|e| e.to_value()); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/ast/expr.rs:104:33 [INFO] [stderr] | [INFO] [stderr] 104 | let body = body.into_iter().map(|e| e.to_value()); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/ast/expr.rs:118:30 [INFO] [stderr] | [INFO] [stderr] 118 | Expr::Lambda(n.clone(), a.clone(), b.clone(), t.clone()) [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*n` [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: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/ast/expr.rs:44:33 [INFO] [stderr] | [INFO] [stderr] 44 | let args = args.into_iter().map(|e| e.to_value()); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/ast/header.rs:27:6 [INFO] [stderr] | [INFO] [stderr] 27 | ) -> Result<(Symbol, Vec, HashMap>, Vec>>), ModuleHeaderError> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/ast/expr.rs:96:33 [INFO] [stderr] | [INFO] [stderr] 96 | let body = body.into_iter().map(|e| e.to_value()); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/ast/expr.rs:104:33 [INFO] [stderr] | [INFO] [stderr] 104 | let body = body.into_iter().map(|e| e.to_value()); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/ast/expr.rs:118:30 [INFO] [stderr] | [INFO] [stderr] 118 | Expr::Lambda(n.clone(), a.clone(), b.clone(), t.clone()) [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*n` [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: length comparison to zero [INFO] [stderr] --> src/ast/header.rs:59:8 [INFO] [stderr] | [INFO] [stderr] 59 | if values.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `values.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: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/ast/mod.rs:76:6 [INFO] [stderr] | [INFO] [stderr] 76 | ) -> Result>)>, ConvertError> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/ast/header.rs:27:6 [INFO] [stderr] | [INFO] [stderr] 27 | ) -> Result<(Symbol, Vec, HashMap>, Vec>>), ModuleHeaderError> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ast/header.rs:59:8 [INFO] [stderr] | [INFO] [stderr] 59 | if values.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `values.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: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/ast/mod.rs:76:6 [INFO] [stderr] | [INFO] [stderr] 76 | ) -> Result>)>, ConvertError> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/ast/mod.rs:154:62 [INFO] [stderr] | [INFO] [stderr] 154 | Err(ConvertError::InvalidBuiltin("if".into(), value)) [INFO] [stderr] | ^^^^^^^^^^^ help: consider removing `.into()`: `"if"` [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] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/ast/mod.rs:166:62 [INFO] [stderr] | [INFO] [stderr] 166 | Err(ConvertError::InvalidBuiltin("quote".into(), value)) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider removing `.into()`: `"quote"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/ast/mod.rs:187:22 [INFO] [stderr] | [INFO] [stderr] 187 | .map(|v| convert_expr(v)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `convert_expr` [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/ast/mod.rs:154:62 [INFO] [stderr] | [INFO] [stderr] 154 | Err(ConvertError::InvalidBuiltin("if".into(), value)) [INFO] [stderr] | ^^^^^^^^^^^ help: consider removing `.into()`: `"if"` [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] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/ast/mod.rs:166:62 [INFO] [stderr] | [INFO] [stderr] 166 | Err(ConvertError::InvalidBuiltin("quote".into(), value)) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider removing `.into()`: `"quote"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/ast/mod.rs:187:22 [INFO] [stderr] | [INFO] [stderr] 187 | .map(|v| convert_expr(v)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `convert_expr` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `interpreter::Interpreter` [INFO] [stderr] --> src/interpreter/mod.rs:27:5 [INFO] [stderr] | [INFO] [stderr] 27 | / pub fn new() -> Self { [INFO] [stderr] 28 | | Interpreter::wrap(Modules::new()) [INFO] [stderr] 29 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 25 | impl Default for interpreter::Interpreter { [INFO] [stderr] 26 | fn default() -> Self { [INFO] [stderr] 27 | Self::new() [INFO] [stderr] 28 | } [INFO] [stderr] 29 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/interpreter/mod.rs:44:10 [INFO] [stderr] | [INFO] [stderr] 44 | ) -> Result>, Either, C::RuntimeError>> [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/interpreter/mod.rs:71:10 [INFO] [stderr] | [INFO] [stderr] 71 | ) -> Result<&HashMap>>, Either, C::RuntimeError>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/interpreter/mod.rs:80:12 [INFO] [stderr] | [INFO] [stderr] 80 | Ok(self.ran.get(&import_path).unwrap()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.ran[&import_path]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `interpreter::Interpreter` [INFO] [stderr] --> src/interpreter/mod.rs:27:5 [INFO] [stderr] | [INFO] [stderr] 27 | / pub fn new() -> Self { [INFO] [stderr] 28 | | Interpreter::wrap(Modules::new()) [INFO] [stderr] 29 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 25 | impl Default for interpreter::Interpreter { [INFO] [stderr] 26 | fn default() -> Self { [INFO] [stderr] 27 | Self::new() [INFO] [stderr] 28 | } [INFO] [stderr] 29 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/interpreter/mod.rs:44:10 [INFO] [stderr] | [INFO] [stderr] 44 | ) -> Result>, Either, C::RuntimeError>> [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/interpreter/mod.rs:71:10 [INFO] [stderr] | [INFO] [stderr] 71 | ) -> Result<&HashMap>>, Either, C::RuntimeError>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/interpreter/mod.rs:80:12 [INFO] [stderr] | [INFO] [stderr] 80 | Ok(self.ran.get(&import_path).unwrap()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.ran[&import_path]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/macro_expand.rs:18:6 [INFO] [stderr] | [INFO] [stderr] 18 | ) -> Result>>, Either>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/macro_expand.rs:36:6 [INFO] [stderr] | [INFO] [stderr] 36 | ) -> Result>>, Either>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/macro_expand.rs:18:6 [INFO] [stderr] | [INFO] [stderr] 18 | ) -> Result>>, Either>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/macro_expand.rs:36:6 [INFO] [stderr] | [INFO] [stderr] 36 | ) -> Result>>, Either>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/macro_expand.rs:91:6 [INFO] [stderr] | [INFO] [stderr] 91 | ) -> Result>>, Either>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/macro_expand.rs:91:6 [INFO] [stderr] | [INFO] [stderr] 91 | ) -> Result>>, Either>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `modules::Modules` [INFO] [stderr] --> src/modules/mod.rs:100:5 [INFO] [stderr] | [INFO] [stderr] 100 | / pub fn new() -> Modules { [INFO] [stderr] 101 | | Modules { [INFO] [stderr] 102 | | mods: HashMap::new(), [INFO] [stderr] 103 | | seen: HashSet::new(), [INFO] [stderr] 104 | | } [INFO] [stderr] 105 | | } [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] 93 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/modules/mod.rs:131:12 [INFO] [stderr] | [INFO] [stderr] 131 | Ok(self.mods.get(&import_path).unwrap()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.mods[&import_path]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `modules::Modules` [INFO] [stderr] --> src/modules/mod.rs:100:5 [INFO] [stderr] | [INFO] [stderr] 100 | / pub fn new() -> Modules { [INFO] [stderr] 101 | | Modules { [INFO] [stderr] 102 | | mods: HashMap::new(), [INFO] [stderr] 103 | | seen: HashSet::new(), [INFO] [stderr] 104 | | } [INFO] [stderr] 105 | | } [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] 93 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/modules/mod.rs:131:12 [INFO] [stderr] | [INFO] [stderr] 131 | Ok(self.mods.get(&import_path).unwrap()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.mods[&import_path]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/reader/lexer/mod.rs:278:21 [INFO] [stderr] | [INFO] [stderr] 278 | code += self.parse_strhex_one()? as u32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(self.parse_strhex_one()?)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/reader/lexer/mod.rs:377:35 [INFO] [stderr] | [INFO] [stderr] 377 | let s = &self.buf[(str_start + 1)..(str_start + len + 1)]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `((str_start + 1)..=str_start + len)` [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/reader/mod.rs:237:1 [INFO] [stderr] | [INFO] [stderr] 237 | / fn unexpected_tok_val<'a>(token: Token<'a>, path: Option>) -> ReadError { [INFO] [stderr] 238 | | ReadError { [INFO] [stderr] 239 | | kind: ReadErrorKind::Token(token.lexeme.to_string(), AcceptSet::Value), [INFO] [stderr] 240 | | location: SourceLocation { [INFO] [stderr] ... | [INFO] [stderr] 245 | | } [INFO] [stderr] 246 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/reader/lexer/mod.rs:278:21 [INFO] [stderr] | [INFO] [stderr] 278 | code += self.parse_strhex_one()? as u32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(self.parse_strhex_one()?)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/reader/mod.rs:282:36 [INFO] [stderr] | [INFO] [stderr] 282 | let peek = lexer.peek().map(|r| r.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `lexer.peek().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/reader/mod.rs:283:25 [INFO] [stderr] | [INFO] [stderr] 283 | / match peek { [INFO] [stderr] 284 | | Some(Ok(tok)) => { [INFO] [stderr] 285 | | match tok.lexeme { [INFO] [stderr] 286 | | Lexeme::BracketClose => break, [INFO] [stderr] ... | [INFO] [stderr] 290 | | _ => {} [INFO] [stderr] 291 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 283 | if let Some(Ok(tok)) = peek { [INFO] [stderr] 284 | match tok.lexeme { [INFO] [stderr] 285 | Lexeme::BracketClose => break, [INFO] [stderr] 286 | _ => {} [INFO] [stderr] 287 | } [INFO] [stderr] 288 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/reader/mod.rs:285:33 [INFO] [stderr] | [INFO] [stderr] 285 | / match tok.lexeme { [INFO] [stderr] 286 | | Lexeme::BracketClose => break, [INFO] [stderr] 287 | | _ => {} [INFO] [stderr] 288 | | } [INFO] [stderr] | |_________________________________^ help: try this: `if let Lexeme::BracketClose = tok.lexeme { break }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/reader/mod.rs:303:36 [INFO] [stderr] | [INFO] [stderr] 303 | let peek = lexer.peek().map(|r| r.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `lexer.peek().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/reader/mod.rs:304:25 [INFO] [stderr] | [INFO] [stderr] 304 | / match peek { [INFO] [stderr] 305 | | Some(Ok(tok)) => { [INFO] [stderr] 306 | | match tok.lexeme { [INFO] [stderr] 307 | | Lexeme::Dot => { [INFO] [stderr] ... | [INFO] [stderr] 318 | | _ => {} [INFO] [stderr] 319 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 304 | if let Some(Ok(tok)) = peek { [INFO] [stderr] 305 | match tok.lexeme { [INFO] [stderr] 306 | Lexeme::Dot => { [INFO] [stderr] 307 | must_read(lexer, Lexeme::Dot)?; [INFO] [stderr] 308 | let value = read_one(s, lexer, path)?; [INFO] [stderr] 309 | break value; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: you are deriving `Hash` but have implemented `PartialEq` explicitly [INFO] [stderr] --> src/symbol.rs:17:37 [INFO] [stderr] | [INFO] [stderr] 17 | #[derive(Clone, Copy, Eq, Finalize, Hash, PartialOrd)] [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/symbol.rs:81:1 [INFO] [stderr] | [INFO] [stderr] 81 | / impl PartialEq for Symbol { [INFO] [stderr] 82 | | fn eq(&self, other: &Self) -> bool { [INFO] [stderr] 83 | | self.cmp(other) == Ordering::Equal [INFO] [stderr] 84 | | } [INFO] [stderr] 85 | | } [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] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/symbol.rs:67:13 [INFO] [stderr] | [INFO] [stderr] 67 | heap.get(s).unwrap().clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/reader/lexer/mod.rs:377:35 [INFO] [stderr] | [INFO] [stderr] 377 | let s = &self.buf[(str_start + 1)..(str_start + len + 1)]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `((str_start + 1)..=str_start + len)` [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] | [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] 67 | &(*heap.get(s).unwrap()).clone() [INFO] [stderr] | [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 67 | &str::clone(heap.get(s).unwrap()) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/util.rs:24:47 [INFO] [stderr] | [INFO] [stderr] 24 | while let &Value::Cons(ref h, ref t, _) = val { [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] 24 | while let Value::Cons(ref h, ref t, _) = *val { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/util.rs:28:5 [INFO] [stderr] | [INFO] [stderr] 28 | / if let &Value::Nil(_) = val { [INFO] [stderr] 29 | | Some(out) [INFO] [stderr] 30 | | } else { [INFO] [stderr] 31 | | None [INFO] [stderr] 32 | | } [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] 28 | if let Value::Nil(_) = *val { [INFO] [stderr] | ^^^^^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/util.rs:39:6 [INFO] [stderr] | [INFO] [stderr] 39 | ) -> Option>, C::ValueMeta)>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/util.rs:42:51 [INFO] [stderr] | [INFO] [stderr] 42 | while let &Value::Cons(ref h, ref t, ref m) = val { [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] 42 | while let Value::Cons(ref h, ref t, ref m) = *val { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/util.rs:46:5 [INFO] [stderr] | [INFO] [stderr] 46 | / if let &Value::Nil(_) = val { [INFO] [stderr] 47 | | Some(out) [INFO] [stderr] 48 | | } else { [INFO] [stderr] 49 | | None [INFO] [stderr] 50 | | } [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] 46 | if let Value::Nil(_) = *val { [INFO] [stderr] | ^^^^^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/util.rs:71:9 [INFO] [stderr] | [INFO] [stderr] 71 | / if let &Value::Symbol(s, _) = &*val { [INFO] [stderr] 72 | | out.push(s); [INFO] [stderr] 73 | | } else { [INFO] [stderr] 74 | | return None; [INFO] [stderr] 75 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 71 | if let Value::Symbol(s, _) = *val { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/reader/mod.rs:237:1 [INFO] [stderr] | [INFO] [stderr] 237 | / fn unexpected_tok_val<'a>(token: Token<'a>, path: Option>) -> ReadError { [INFO] [stderr] 238 | | ReadError { [INFO] [stderr] 239 | | kind: ReadErrorKind::Token(token.lexeme.to_string(), AcceptSet::Value), [INFO] [stderr] 240 | | location: SourceLocation { [INFO] [stderr] ... | [INFO] [stderr] 245 | | } [INFO] [stderr] 246 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/reader/mod.rs:282:36 [INFO] [stderr] | [INFO] [stderr] 282 | let peek = lexer.peek().map(|r| r.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `lexer.peek().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/reader/mod.rs:283:25 [INFO] [stderr] | [INFO] [stderr] 283 | / match peek { [INFO] [stderr] 284 | | Some(Ok(tok)) => { [INFO] [stderr] 285 | | match tok.lexeme { [INFO] [stderr] 286 | | Lexeme::BracketClose => break, [INFO] [stderr] ... | [INFO] [stderr] 290 | | _ => {} [INFO] [stderr] 291 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 283 | if let Some(Ok(tok)) = peek { [INFO] [stderr] 284 | match tok.lexeme { [INFO] [stderr] 285 | Lexeme::BracketClose => break, [INFO] [stderr] 286 | _ => {} [INFO] [stderr] 287 | } [INFO] [stderr] 288 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/reader/mod.rs:285:33 [INFO] [stderr] | [INFO] [stderr] 285 | / match tok.lexeme { [INFO] [stderr] 286 | | Lexeme::BracketClose => break, [INFO] [stderr] 287 | | _ => {} [INFO] [stderr] 288 | | } [INFO] [stderr] | |_________________________________^ help: try this: `if let Lexeme::BracketClose = tok.lexeme { break }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/reader/mod.rs:303:36 [INFO] [stderr] | [INFO] [stderr] 303 | let peek = lexer.peek().map(|r| r.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `lexer.peek().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/reader/mod.rs:304:25 [INFO] [stderr] | [INFO] [stderr] 304 | / match peek { [INFO] [stderr] 305 | | Some(Ok(tok)) => { [INFO] [stderr] 306 | | match tok.lexeme { [INFO] [stderr] 307 | | Lexeme::Dot => { [INFO] [stderr] ... | [INFO] [stderr] 318 | | _ => {} [INFO] [stderr] 319 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 304 | if let Some(Ok(tok)) = peek { [INFO] [stderr] 305 | match tok.lexeme { [INFO] [stderr] 306 | Lexeme::Dot => { [INFO] [stderr] 307 | must_read(lexer, Lexeme::Dot)?; [INFO] [stderr] 308 | let value = read_one(s, lexer, path)?; [INFO] [stderr] 309 | break value; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: you are deriving `Hash` but have implemented `PartialEq` explicitly [INFO] [stderr] --> src/symbol.rs:17:37 [INFO] [stderr] | [INFO] [stderr] 17 | #[derive(Clone, Copy, Eq, Finalize, Hash, PartialOrd)] [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/symbol.rs:81:1 [INFO] [stderr] | [INFO] [stderr] 81 | / impl PartialEq for Symbol { [INFO] [stderr] 82 | | fn eq(&self, other: &Self) -> bool { [INFO] [stderr] 83 | | self.cmp(other) == Ordering::Equal [INFO] [stderr] 84 | | } [INFO] [stderr] 85 | | } [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] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/symbol.rs:67:13 [INFO] [stderr] | [INFO] [stderr] 67 | heap.get(s).unwrap().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] 67 | &(*heap.get(s).unwrap()).clone() [INFO] [stderr] | [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 67 | &str::clone(heap.get(s).unwrap()) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/util.rs:24:47 [INFO] [stderr] | [INFO] [stderr] 24 | while let &Value::Cons(ref h, ref t, _) = val { [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] 24 | while let Value::Cons(ref h, ref t, _) = *val { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/util.rs:28:5 [INFO] [stderr] | [INFO] [stderr] 28 | / if let &Value::Nil(_) = val { [INFO] [stderr] 29 | | Some(out) [INFO] [stderr] 30 | | } else { [INFO] [stderr] 31 | | None [INFO] [stderr] 32 | | } [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] 28 | if let Value::Nil(_) = *val { [INFO] [stderr] | ^^^^^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/util.rs:39:6 [INFO] [stderr] | [INFO] [stderr] 39 | ) -> Option>, C::ValueMeta)>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/util.rs:42:51 [INFO] [stderr] | [INFO] [stderr] 42 | while let &Value::Cons(ref h, ref t, ref m) = val { [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] 42 | while let Value::Cons(ref h, ref t, ref m) = *val { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/util.rs:46:5 [INFO] [stderr] | [INFO] [stderr] 46 | / if let &Value::Nil(_) = val { [INFO] [stderr] 47 | | Some(out) [INFO] [stderr] 48 | | } else { [INFO] [stderr] 49 | | None [INFO] [stderr] 50 | | } [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] 46 | if let Value::Nil(_) = *val { [INFO] [stderr] | ^^^^^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/util.rs:71:9 [INFO] [stderr] | [INFO] [stderr] 71 | / if let &Value::Symbol(s, _) = &*val { [INFO] [stderr] 72 | | out.push(s); [INFO] [stderr] 73 | | } else { [INFO] [stderr] 74 | | return None; [INFO] [stderr] 75 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 71 | if let Value::Symbol(s, _) = *val { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `oftlisp`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `oftlisp`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "d7f9484d5f424bc12e67ca97dcf6636c5763147945f5c51a0ffd26cb48fe7bcc"` [INFO] running `"docker" "rm" "-f" "d7f9484d5f424bc12e67ca97dcf6636c5763147945f5c51a0ffd26cb48fe7bcc"` [INFO] [stdout] d7f9484d5f424bc12e67ca97dcf6636c5763147945f5c51a0ffd26cb48fe7bcc