[INFO] updating cached repository Javyre/uLisp [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/Javyre/uLisp [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/Javyre/uLisp" "work/ex/clippy-test-run/sources/stable/gh/Javyre/uLisp"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/Javyre/uLisp'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/Javyre/uLisp" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/Javyre/uLisp"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/Javyre/uLisp'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 154a087a648f8908f78d94232b842211c8a831e7 [INFO] sha for GitHub repo Javyre/uLisp: 154a087a648f8908f78d94232b842211c8a831e7 [INFO] validating manifest of Javyre/uLisp 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 Javyre/uLisp 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 Javyre/uLisp [INFO] finished frobbing Javyre/uLisp [INFO] frobbed toml for Javyre/uLisp written to work/ex/clippy-test-run/sources/stable/gh/Javyre/uLisp/Cargo.toml [INFO] started frobbing Javyre/uLisp [INFO] finished frobbing Javyre/uLisp [INFO] frobbed toml for Javyre/uLisp written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/Javyre/uLisp/Cargo.toml [INFO] crate Javyre/uLisp 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 Javyre/uLisp against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-2/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/Javyre/uLisp:/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] 04393f0602a7a202c035ee127ac00f7f98ce8e3aff0a4037f45d3a6c92559685 [INFO] running `"docker" "start" "-a" "04393f0602a7a202c035ee127ac00f7f98ce8e3aff0a4037f45d3a6c92559685"` [INFO] [stderr] Checking ulisp v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/vm/mod.rs:375:13 [INFO] [stderr] | [INFO] [stderr] 375 | consts: consts, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `consts` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/vm/mod.rs:375:13 [INFO] [stderr] | [INFO] [stderr] 375 | consts: consts, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `consts` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: unused imports: `RefMut`, `Ref` [INFO] [stderr] --> src/vm/mem.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | Ref, [INFO] [stderr] | ^^^ [INFO] [stderr] 5 | RefMut, [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/vm/mem.rs:261:16 [INFO] [stderr] | [INFO] [stderr] 261 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 262 | | if self.parent.is_some() { [INFO] [stderr] 263 | | self.parent.as_ref().unwrap().borrow().get(ident) [INFO] [stderr] 264 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 267 | | } [INFO] [stderr] 268 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 261 | } else if self.parent.is_some() { [INFO] [stderr] 262 | self.parent.as_ref().unwrap().borrow().get(ident) [INFO] [stderr] 263 | } else { [INFO] [stderr] 264 | // FIXME: scope for error set to const 0 [INFO] [stderr] 265 | Err(Error::VariableNotFound(0, *ident)) [INFO] [stderr] 266 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/vm/mod.rs:26:38 [INFO] [stderr] | [INFO] [stderr] 26 | const OVERRIDE_VAR_STRINGS = 0b00000001; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0001` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/vm/mod.rs:27:38 [INFO] [stderr] | [INFO] [stderr] 27 | const REUSE_VAR_STRINGS = 0b00000010; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0010` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unused variable: `initial_len` [INFO] [stderr] --> src/vm/mod.rs:346:13 [INFO] [stderr] | [INFO] [stderr] 346 | let initial_len = self.reg_stack.len(); [INFO] [stderr] | ^^^^^^^^^^^ help: consider using `_initial_len` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/vm/mod.rs:387:33 [INFO] [stderr] | [INFO] [stderr] 387 | let (mut insts, idents, mut var_strings, consts) = bin.unpack(); [INFO] [stderr] | ----^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `append` [INFO] [stderr] --> src/vm/mem.rs:68:5 [INFO] [stderr] | [INFO] [stderr] 68 | pub fn append(&mut self, other: Environment) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `define_n` [INFO] [stderr] --> src/vm/mem.rs:81:5 [INFO] [stderr] | [INFO] [stderr] 81 | fn define_n(&mut self, frame: usize, ident: IdentID, val: MemData) -> Result<(), Error> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_parent` [INFO] [stderr] --> src/vm/mem.rs:233:5 [INFO] [stderr] | [INFO] [stderr] 233 | fn get_parent(&self) -> Option<&Rc>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_child` [INFO] [stderr] --> src/vm/mem.rs:240:5 [INFO] [stderr] | [INFO] [stderr] 240 | fn get_child(&self) -> Option<&Weak>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `define_n` [INFO] [stderr] --> src/vm/mem.rs:248:5 [INFO] [stderr] | [INFO] [stderr] 248 | fn define_n(&mut self, n: usize, ident: IdentID, val: MemData) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_parent_n` [INFO] [stderr] --> src/vm/mem.rs:286:5 [INFO] [stderr] | [INFO] [stderr] 286 | fn get_parent_n(&self, n: usize) -> Option>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_child_n` [INFO] [stderr] --> src/vm/mem.rs:295:5 [INFO] [stderr] | [INFO] [stderr] 295 | fn get_child_n(&self, n: usize) -> Option>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_frame` [INFO] [stderr] --> src/vm/mem.rs:321:5 [INFO] [stderr] | [INFO] [stderr] 321 | fn get_frame(&self) -> &Frame { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_frame_mut` [INFO] [stderr] --> src/vm/mem.rs:325:5 [INFO] [stderr] | [INFO] [stderr] 325 | fn get_frame_mut(&mut self) -> &mut Frame { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `create_pointer` [INFO] [stderr] --> src/vm/data.rs:189:5 [INFO] [stderr] | [INFO] [stderr] 189 | pub fn create_pointer(data: MemData) -> MemData { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `clone_pointer` [INFO] [stderr] --> src/vm/data.rs:197:5 [INFO] [stderr] | [INFO] [stderr] 197 | pub fn clone_pointer(&self) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `is_true` [INFO] [stderr] --> src/vm/data.rs:257:5 [INFO] [stderr] | [INFO] [stderr] 257 | pub fn is_true(&self) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `eq` [INFO] [stderr] --> src/vm/data.rs:293:5 [INFO] [stderr] | [INFO] [stderr] 293 | pub fn eq(&self, other: &Self) -> Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `BadScopeIndex` [INFO] [stderr] --> src/vm/err.rs:43:5 [INFO] [stderr] | [INFO] [stderr] 43 | BadScopeIndex(usize), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `consts` [INFO] [stderr] --> src/vm/mod.rs:45:5 [INFO] [stderr] | [INFO] [stderr] 45 | consts: Rc>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/vm/mem.rs:78:12 [INFO] [stderr] | [INFO] [stderr] 78 | Ok(self.env_tail.borrow_mut().define(ident, val)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unit_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 78 | Ok(()) [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/vm/mem.rs:85:16 [INFO] [stderr] | [INFO] [stderr] 85 | Ok(self.env_head.borrow_mut().define_n(frame, ident, val)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 85 | Ok(()) [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/vm/mem.rs:89:30 [INFO] [stderr] | [INFO] [stderr] 89 | pub fn get(&self, ident: &IdentID) -> Result { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `IdentID` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/vm/mem.rs:149:38 [INFO] [stderr] | [INFO] [stderr] 149 | pub fn get_const(&self, constid: &ConstID) -> Result { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `ConstID` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/vm/mem.rs:169:32 [INFO] [stderr] | [INFO] [stderr] 169 | pub fn get_ident(&self, s: &String) -> Option { [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: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/vm/mem.rs:170:9 [INFO] [stderr] | [INFO] [stderr] 170 | self.var_strings.borrow().get(s).map(|id| *id) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.var_strings.borrow().get(s).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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/vm/mem.rs:257:26 [INFO] [stderr] | [INFO] [stderr] 257 | fn get(&self, ident: &IdentID) -> Result { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `IdentID` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/vm/mem.rs:273:20 [INFO] [stderr] | [INFO] [stderr] 273 | return self.frame.max_id().map(|id| *id); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.frame.max_id().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/vm/mem.rs:279:13 [INFO] [stderr] | [INFO] [stderr] 279 | self.frame.max_id().map(|id| *id), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.frame.max_id().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/vm/mem.rs:288:28 [INFO] [stderr] | [INFO] [stderr] 288 | if n == 0 { return parent.map(|p| p.clone()); } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `parent.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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/vm/mem.rs:341:27 [INFO] [stderr] | [INFO] [stderr] 341 | pub fn get(&self, id: &IdentID) -> Option { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `IdentID` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/vm/data.rs:138:45 [INFO] [stderr] | [INFO] [stderr] 138 | pub fn apply_ident_swap(&mut self, old: &Vec, new: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^ help: change this to: `&[IdentID]` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/vm/data.rs:138:65 [INFO] [stderr] | [INFO] [stderr] 138 | pub fn apply_ident_swap(&mut self, old: &Vec, new: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^ help: change this to: `&[IdentID]` [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: called `.get().unwrap()` on a slice. Using `[]` is more clear and more concise [INFO] [stderr] --> src/vm/data.rs:140:46 [INFO] [stderr] | [INFO] [stderr] 140 | old.binary_search(&iid).map(|i| *new.get(i).unwrap()).unwrap_or(iid) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try this: `new[i]` [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/vm/data.rs:182:9 [INFO] [stderr] | [INFO] [stderr] 182 | / if let &MemData::Pointer(ref rc) = self { [INFO] [stderr] 183 | | rc.deref() [INFO] [stderr] 184 | | } else { [INFO] [stderr] 185 | | &self [INFO] [stderr] 186 | | } [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] 182 | if let MemData::Pointer(ref rc) = *self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/vm/data.rs:198:9 [INFO] [stderr] | [INFO] [stderr] 198 | / if let &MemData::Pointer(ref rc) = self { [INFO] [stderr] 199 | | Some(MemData::Pointer(Rc::clone(rc))) [INFO] [stderr] 200 | | } else { [INFO] [stderr] 201 | | None [INFO] [stderr] 202 | | } [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] 198 | if let MemData::Pointer(ref rc) = *self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/vm/data.rs:302:32 [INFO] [stderr] | [INFO] [stderr] 302 | pub fn convert(&self, typ: &Type) -> Result { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Type` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/vm/data.rs:312:63 [INFO] [stderr] | [INFO] [stderr] 312 | Err(Error::IllegalConversion(self.get_type(), typ.clone())) [INFO] [stderr] | ^^^^^^^^^^^ help: try dereferencing it: `*typ` [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/vm/mod.rs:61:32 [INFO] [stderr] | [INFO] [stderr] 61 | pub fn call(&mut self, id: &IdentID) -> Result { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `IdentID` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/vm/mod.rs:66:16 [INFO] [stderr] | [INFO] [stderr] 66 | Ok(match v.deref() { [INFO] [stderr] | ________________^ [INFO] [stderr] 67 | | &MemData::Proc(ref p) => p.clone(), [INFO] [stderr] 68 | | &MemData::Lambda(ref p, ref e) => { [INFO] [stderr] 69 | | env = Some(e.clone()); [INFO] [stderr] ... | [INFO] [stderr] 72 | | _ => Err(v.wrong_type(Type::Proc))?, [INFO] [stderr] 73 | | }) [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] 66 | Ok(match *v.deref() { [INFO] [stderr] 67 | MemData::Proc(ref p) => p.clone(), [INFO] [stderr] 68 | MemData::Lambda(ref p, ref e) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 38 [INFO] [stderr] --> src/vm/mod.rs:98:5 [INFO] [stderr] | [INFO] [stderr] 98 | / pub fn run_instruction(&mut self, inst: &Op) -> Result<(), Error> { [INFO] [stderr] 99 | | if self.recording > 0 { [INFO] [stderr] 100 | | self.recording -= 1; [INFO] [stderr] 101 | | self.reg_stack.push_back(MemData::Inst(inst.clone())); [INFO] [stderr] ... | [INFO] [stderr] 325 | | Ok(()) [INFO] [stderr] 326 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: unused imports: `RefMut`, `Ref` [INFO] [stderr] --> src/vm/mem.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | Ref, [INFO] [stderr] | ^^^ [INFO] [stderr] 5 | RefMut, [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/vm/mem.rs:261:16 [INFO] [stderr] | [INFO] [stderr] 261 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 262 | | if self.parent.is_some() { [INFO] [stderr] 263 | | self.parent.as_ref().unwrap().borrow().get(ident) [INFO] [stderr] 264 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 267 | | } [INFO] [stderr] 268 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 261 | } else if self.parent.is_some() { [INFO] [stderr] 262 | self.parent.as_ref().unwrap().borrow().get(ident) [INFO] [stderr] 263 | } else { [INFO] [stderr] 264 | // FIXME: scope for error set to const 0 [INFO] [stderr] 265 | Err(Error::VariableNotFound(0, *ident)) [INFO] [stderr] 266 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/vm/mod.rs:26:38 [INFO] [stderr] | [INFO] [stderr] 26 | const OVERRIDE_VAR_STRINGS = 0b00000001; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0001` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/vm/mod.rs:27:38 [INFO] [stderr] | [INFO] [stderr] 27 | const REUSE_VAR_STRINGS = 0b00000010; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0010` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/vm/mod.rs:299:24 [INFO] [stderr] | [INFO] [stderr] 299 | if vals.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `vals.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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/vm/mod.rs:424:9 [INFO] [stderr] | [INFO] [stderr] 424 | self.memory.define(id, MemData::Lambda(insts, env)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/vm/mod.rs:429:32 [INFO] [stderr] | [INFO] [stderr] 429 | pub fn call(&mut self, id: &IdentID) -> Result { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `IdentID` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: unused variable: `initial_len` [INFO] [stderr] --> src/vm/mod.rs:346:13 [INFO] [stderr] | [INFO] [stderr] 346 | let initial_len = self.reg_stack.len(); [INFO] [stderr] | ^^^^^^^^^^^ help: consider using `_initial_len` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/vm/mod.rs:387:33 [INFO] [stderr] | [INFO] [stderr] 387 | let (mut insts, idents, mut var_strings, consts) = bin.unpack(); [INFO] [stderr] | ----^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `append` [INFO] [stderr] --> src/vm/mem.rs:68:5 [INFO] [stderr] | [INFO] [stderr] 68 | pub fn append(&mut self, other: Environment) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `define_n` [INFO] [stderr] --> src/vm/mem.rs:81:5 [INFO] [stderr] | [INFO] [stderr] 81 | fn define_n(&mut self, frame: usize, ident: IdentID, val: MemData) -> Result<(), Error> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_parent` [INFO] [stderr] --> src/vm/mem.rs:233:5 [INFO] [stderr] | [INFO] [stderr] 233 | fn get_parent(&self) -> Option<&Rc>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_child` [INFO] [stderr] --> src/vm/mem.rs:240:5 [INFO] [stderr] | [INFO] [stderr] 240 | fn get_child(&self) -> Option<&Weak>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `define_n` [INFO] [stderr] --> src/vm/mem.rs:248:5 [INFO] [stderr] | [INFO] [stderr] 248 | fn define_n(&mut self, n: usize, ident: IdentID, val: MemData) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_parent_n` [INFO] [stderr] --> src/vm/mem.rs:286:5 [INFO] [stderr] | [INFO] [stderr] 286 | fn get_parent_n(&self, n: usize) -> Option>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_child_n` [INFO] [stderr] --> src/vm/mem.rs:295:5 [INFO] [stderr] | [INFO] [stderr] 295 | fn get_child_n(&self, n: usize) -> Option>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_frame` [INFO] [stderr] --> src/vm/mem.rs:321:5 [INFO] [stderr] | [INFO] [stderr] 321 | fn get_frame(&self) -> &Frame { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_frame_mut` [INFO] [stderr] --> src/vm/mem.rs:325:5 [INFO] [stderr] | [INFO] [stderr] 325 | fn get_frame_mut(&mut self) -> &mut Frame { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `create_pointer` [INFO] [stderr] --> src/vm/data.rs:189:5 [INFO] [stderr] | [INFO] [stderr] 189 | pub fn create_pointer(data: MemData) -> MemData { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `clone_pointer` [INFO] [stderr] --> src/vm/data.rs:197:5 [INFO] [stderr] | [INFO] [stderr] 197 | pub fn clone_pointer(&self) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `is_true` [INFO] [stderr] --> src/vm/data.rs:257:5 [INFO] [stderr] | [INFO] [stderr] 257 | pub fn is_true(&self) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `BadScopeIndex` [INFO] [stderr] --> src/vm/err.rs:43:5 [INFO] [stderr] | [INFO] [stderr] 43 | BadScopeIndex(usize), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `consts` [INFO] [stderr] --> src/vm/mod.rs:45:5 [INFO] [stderr] | [INFO] [stderr] 45 | consts: Rc>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `R` [INFO] [stderr] --> src/vm/macros.rs:54:30 [INFO] [stderr] | [INFO] [stderr] 54 | enum ___BinConst { $($ids),* } [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] ::: src/tests.rs:174:9 [INFO] [stderr] | [INFO] [stderr] 174 | / program! { [INFO] [stderr] 175 | | { foo, bar } [INFO] [stderr] 176 | | { [INFO] [stderr] 177 | | (#a = Str("Heyheyhey".to_string())) [INFO] [stderr] ... | [INFO] [stderr] 210 | | } [INFO] [stderr] 211 | | }, [INFO] [stderr] | |_________- in this macro invocation [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/vm/mem.rs:78:12 [INFO] [stderr] | [INFO] [stderr] 78 | Ok(self.env_tail.borrow_mut().define(ident, val)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unit_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 78 | Ok(()) [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/vm/mem.rs:85:16 [INFO] [stderr] | [INFO] [stderr] 85 | Ok(self.env_head.borrow_mut().define_n(frame, ident, val)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 85 | Ok(()) [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/vm/mem.rs:89:30 [INFO] [stderr] | [INFO] [stderr] 89 | pub fn get(&self, ident: &IdentID) -> Result { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `IdentID` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/vm/mem.rs:149:38 [INFO] [stderr] | [INFO] [stderr] 149 | pub fn get_const(&self, constid: &ConstID) -> Result { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `ConstID` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/vm/mem.rs:169:32 [INFO] [stderr] | [INFO] [stderr] 169 | pub fn get_ident(&self, s: &String) -> Option { [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: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/vm/mem.rs:170:9 [INFO] [stderr] | [INFO] [stderr] 170 | self.var_strings.borrow().get(s).map(|id| *id) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.var_strings.borrow().get(s).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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/vm/mem.rs:257:26 [INFO] [stderr] | [INFO] [stderr] 257 | fn get(&self, ident: &IdentID) -> Result { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `IdentID` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/vm/mem.rs:273:20 [INFO] [stderr] | [INFO] [stderr] 273 | return self.frame.max_id().map(|id| *id); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.frame.max_id().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/vm/mem.rs:279:13 [INFO] [stderr] | [INFO] [stderr] 279 | self.frame.max_id().map(|id| *id), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.frame.max_id().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/vm/mem.rs:288:28 [INFO] [stderr] | [INFO] [stderr] 288 | if n == 0 { return parent.map(|p| p.clone()); } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `parent.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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/vm/mem.rs:341:27 [INFO] [stderr] | [INFO] [stderr] 341 | pub fn get(&self, id: &IdentID) -> Option { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `IdentID` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/vm/data.rs:138:45 [INFO] [stderr] | [INFO] [stderr] 138 | pub fn apply_ident_swap(&mut self, old: &Vec, new: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^ help: change this to: `&[IdentID]` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/vm/data.rs:138:65 [INFO] [stderr] | [INFO] [stderr] 138 | pub fn apply_ident_swap(&mut self, old: &Vec, new: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^ help: change this to: `&[IdentID]` [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: called `.get().unwrap()` on a slice. Using `[]` is more clear and more concise [INFO] [stderr] --> src/vm/data.rs:140:46 [INFO] [stderr] | [INFO] [stderr] 140 | old.binary_search(&iid).map(|i| *new.get(i).unwrap()).unwrap_or(iid) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try this: `new[i]` [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/vm/data.rs:182:9 [INFO] [stderr] | [INFO] [stderr] 182 | / if let &MemData::Pointer(ref rc) = self { [INFO] [stderr] 183 | | rc.deref() [INFO] [stderr] 184 | | } else { [INFO] [stderr] 185 | | &self [INFO] [stderr] 186 | | } [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] 182 | if let MemData::Pointer(ref rc) = *self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/vm/data.rs:198:9 [INFO] [stderr] | [INFO] [stderr] 198 | / if let &MemData::Pointer(ref rc) = self { [INFO] [stderr] 199 | | Some(MemData::Pointer(Rc::clone(rc))) [INFO] [stderr] 200 | | } else { [INFO] [stderr] 201 | | None [INFO] [stderr] 202 | | } [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] 198 | if let MemData::Pointer(ref rc) = *self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/vm/data.rs:302:32 [INFO] [stderr] | [INFO] [stderr] 302 | pub fn convert(&self, typ: &Type) -> Result { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Type` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/vm/data.rs:312:63 [INFO] [stderr] | [INFO] [stderr] 312 | Err(Error::IllegalConversion(self.get_type(), typ.clone())) [INFO] [stderr] | ^^^^^^^^^^^ help: try dereferencing it: `*typ` [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/vm/mod.rs:61:32 [INFO] [stderr] | [INFO] [stderr] 61 | pub fn call(&mut self, id: &IdentID) -> Result { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `IdentID` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/vm/mod.rs:66:16 [INFO] [stderr] | [INFO] [stderr] 66 | Ok(match v.deref() { [INFO] [stderr] | ________________^ [INFO] [stderr] 67 | | &MemData::Proc(ref p) => p.clone(), [INFO] [stderr] 68 | | &MemData::Lambda(ref p, ref e) => { [INFO] [stderr] 69 | | env = Some(e.clone()); [INFO] [stderr] ... | [INFO] [stderr] 72 | | _ => Err(v.wrong_type(Type::Proc))?, [INFO] [stderr] 73 | | }) [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] 66 | Ok(match *v.deref() { [INFO] [stderr] 67 | MemData::Proc(ref p) => p.clone(), [INFO] [stderr] 68 | MemData::Lambda(ref p, ref e) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 38 [INFO] [stderr] --> src/vm/mod.rs:98:5 [INFO] [stderr] | [INFO] [stderr] 98 | / pub fn run_instruction(&mut self, inst: &Op) -> Result<(), Error> { [INFO] [stderr] 99 | | if self.recording > 0 { [INFO] [stderr] 100 | | self.recording -= 1; [INFO] [stderr] 101 | | self.reg_stack.push_back(MemData::Inst(inst.clone())); [INFO] [stderr] ... | [INFO] [stderr] 325 | | Ok(()) [INFO] [stderr] 326 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/vm/mod.rs:299:24 [INFO] [stderr] | [INFO] [stderr] 299 | if vals.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `vals.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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/vm/mod.rs:424:9 [INFO] [stderr] | [INFO] [stderr] 424 | self.memory.define(id, MemData::Lambda(insts, env)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/vm/mod.rs:429:32 [INFO] [stderr] | [INFO] [stderr] 429 | pub fn call(&mut self, id: &IdentID) -> Result { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `IdentID` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 3.06s [INFO] running `"docker" "inspect" "04393f0602a7a202c035ee127ac00f7f98ce8e3aff0a4037f45d3a6c92559685"` [INFO] running `"docker" "rm" "-f" "04393f0602a7a202c035ee127ac00f7f98ce8e3aff0a4037f45d3a6c92559685"` [INFO] [stdout] 04393f0602a7a202c035ee127ac00f7f98ce8e3aff0a4037f45d3a6c92559685