[INFO] crate lichen 0.3.7 is already in cache [INFO] extracting crate lichen 0.3.7 into work/ex/clippy-test-run/sources/stable/reg/lichen/0.3.7 [INFO] extracting crate lichen 0.3.7 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/lichen/0.3.7 [INFO] validating manifest of lichen-0.3.7 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 lichen-0.3.7 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 lichen-0.3.7 [INFO] finished frobbing lichen-0.3.7 [INFO] frobbed toml for lichen-0.3.7 written to work/ex/clippy-test-run/sources/stable/reg/lichen/0.3.7/Cargo.toml [INFO] started frobbing lichen-0.3.7 [INFO] finished frobbing lichen-0.3.7 [INFO] frobbed toml for lichen-0.3.7 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/lichen/0.3.7/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 lichen-0.3.7 against stable+rustflags=-Dclippy::into_iter_on_array for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-5/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/lichen/0.3.7:/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 -Dclippy::into_iter_on_array" "-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] e20b52685b59967f75dce37550c8c16398788824eef20c924463ea16fcc02509 [INFO] running `"docker" "start" "-a" "e20b52685b59967f75dce37550c8c16398788824eef20c924463ea16fcc02509"` [INFO] [stderr] Checking lichen v0.3.7 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parse.rs:145:29 [INFO] [stderr] | [INFO] [stderr] 145 | name: name, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `name` [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/eval.rs:97:13 [INFO] [stderr] | [INFO] [stderr] 97 | env: env, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `env` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/eval.rs:279:13 [INFO] [stderr] | [INFO] [stderr] 279 | env: env, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `env` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: 5th binding whose name is just one char [INFO] [stderr] --> src/var.rs:128:21 [INFO] [stderr] | [INFO] [stderr] 128 | let r = try!(Var::parse(n)); [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::many_single_char_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#many_single_char_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parse.rs:145:29 [INFO] [stderr] | [INFO] [stderr] 145 | name: name, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `name` [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/eval.rs:97:13 [INFO] [stderr] | [INFO] [stderr] 97 | env: env, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `env` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/eval.rs:279:13 [INFO] [stderr] | [INFO] [stderr] 279 | env: env, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `env` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: 5th binding whose name is just one char [INFO] [stderr] --> src/var.rs:128:21 [INFO] [stderr] | [INFO] [stderr] 128 | let r = try!(Var::parse(n)); [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::many_single_char_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#many_single_char_names [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/parse.rs:261:18 [INFO] [stderr] | [INFO] [stderr] 261 | else { [INFO] [stderr] | __________________^ [INFO] [stderr] 262 | | if c == '{' && !in_comment && !in_string { [INFO] [stderr] 263 | | in_map = true; [INFO] [stderr] 264 | | // push previous symbol [INFO] [stderr] ... | [INFO] [stderr] 271 | | } [INFO] [stderr] 272 | | } [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 c == '{' && !in_comment && !in_string { [INFO] [stderr] 262 | in_map = true; [INFO] [stderr] 263 | // push previous symbol [INFO] [stderr] 264 | let sym = IR::Sym(exp.trim().to_owned()); [INFO] [stderr] 265 | exps.push(sym); [INFO] [stderr] 266 | exp.clear(); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parse.rs:347:19 [INFO] [stderr] | [INFO] [stderr] 347 | _=> { return Err("Map type not found") } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err("Map type not found")` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/eval.rs:201:38 [INFO] [stderr] | [INFO] [stderr] 201 | else { [INFO] [stderr] | ______________________________________^ [INFO] [stderr] 202 | | if in_sym { sym.push(c); } [INFO] [stderr] 203 | | else { fs.push(c); } [INFO] [stderr] 204 | | } [INFO] [stderr] | |_________________________________^ [INFO] [stderr] | [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] 201 | else if in_sym { sym.push(c); } [INFO] [stderr] 202 | else { fs.push(c); } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/source.rs:248:17 [INFO] [stderr] | [INFO] [stderr] 248 | return (vec![],None) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(vec![],None)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/source.rs:251:17 [INFO] [stderr] | [INFO] [stderr] 251 | return (vec![],Some(next.clone())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(vec![],Some(next.clone()))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/source.rs:254:17 [INFO] [stderr] | [INFO] [stderr] 254 | return (vars.clone(), next.clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(vars.clone(), next.clone())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/source.rs:257:17 [INFO] [stderr] | [INFO] [stderr] 257 | return (vars.clone(),None) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(vars.clone(),None)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/source.rs:266:17 [INFO] [stderr] | [INFO] [stderr] 266 | return (vec![],None) // logic does not return anything [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(vec![],None)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/source.rs:278:30 [INFO] [stderr] | [INFO] [stderr] 278 | if is_true { return ((*v).clone(), next.clone()) } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `((*v).clone(), next.clone())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/source.rs:279:24 [INFO] [stderr] | [INFO] [stderr] 279 | else { return (vec![],None) } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(vec![],None)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/source.rs:299:17 [INFO] [stderr] | [INFO] [stderr] 299 | return (vec![],None) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(vec![],None)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/source.rs:311:21 [INFO] [stderr] | [INFO] [stderr] 311 | return Ok(Src::Mut(m,v,a)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(Src::Mut(m,v,a))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/var.rs:82:9 [INFO] [stderr] | [INFO] [stderr] 82 | return Ok(num) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(num)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/parse.rs:261:18 [INFO] [stderr] | [INFO] [stderr] 261 | else { [INFO] [stderr] | __________________^ [INFO] [stderr] 262 | | if c == '{' && !in_comment && !in_string { [INFO] [stderr] 263 | | in_map = true; [INFO] [stderr] 264 | | // push previous symbol [INFO] [stderr] ... | [INFO] [stderr] 271 | | } [INFO] [stderr] 272 | | } [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 c == '{' && !in_comment && !in_string { [INFO] [stderr] 262 | in_map = true; [INFO] [stderr] 263 | // push previous symbol [INFO] [stderr] 264 | let sym = IR::Sym(exp.trim().to_owned()); [INFO] [stderr] 265 | exps.push(sym); [INFO] [stderr] 266 | exp.clear(); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parse.rs:347:19 [INFO] [stderr] | [INFO] [stderr] 347 | _=> { return Err("Map type not found") } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err("Map type not found")` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/eval.rs:201:38 [INFO] [stderr] | [INFO] [stderr] 201 | else { [INFO] [stderr] | ______________________________________^ [INFO] [stderr] 202 | | if in_sym { sym.push(c); } [INFO] [stderr] 203 | | else { fs.push(c); } [INFO] [stderr] 204 | | } [INFO] [stderr] | |_________________________________^ [INFO] [stderr] | [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] 201 | else if in_sym { sym.push(c); } [INFO] [stderr] 202 | else { fs.push(c); } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/source.rs:248:17 [INFO] [stderr] | [INFO] [stderr] 248 | return (vec![],None) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(vec![],None)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/source.rs:251:17 [INFO] [stderr] | [INFO] [stderr] 251 | return (vec![],Some(next.clone())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(vec![],Some(next.clone()))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/source.rs:254:17 [INFO] [stderr] | [INFO] [stderr] 254 | return (vars.clone(), next.clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(vars.clone(), next.clone())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/source.rs:257:17 [INFO] [stderr] | [INFO] [stderr] 257 | return (vars.clone(),None) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(vars.clone(),None)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/source.rs:266:17 [INFO] [stderr] | [INFO] [stderr] 266 | return (vec![],None) // logic does not return anything [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(vec![],None)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/source.rs:278:30 [INFO] [stderr] | [INFO] [stderr] 278 | if is_true { return ((*v).clone(), next.clone()) } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `((*v).clone(), next.clone())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/source.rs:279:24 [INFO] [stderr] | [INFO] [stderr] 279 | else { return (vec![],None) } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(vec![],None)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/source.rs:299:17 [INFO] [stderr] | [INFO] [stderr] 299 | return (vec![],None) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(vec![],None)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/source.rs:311:21 [INFO] [stderr] | [INFO] [stderr] 311 | return Ok(Src::Mut(m,v,a)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(Src::Mut(m,v,a))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/var.rs:82:9 [INFO] [stderr] | [INFO] [stderr] 82 | return Ok(num) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(num)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 33 [INFO] [stderr] --> src/parse.rs:80:5 [INFO] [stderr] | [INFO] [stderr] 80 | / pub fn parse_blocks (src: &str) -> Result { [INFO] [stderr] 81 | | let mut v = vec!(); [INFO] [stderr] 82 | | let mut exp = String::new(); [INFO] [stderr] 83 | | let mut exps: Vec = vec!(); [INFO] [stderr] ... | [INFO] [stderr] 275 | | Ok(Parser(v)) [INFO] [stderr] 276 | | } [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 one [INFO] [stderr] --> src/parse.rs:129:20 [INFO] [stderr] | [INFO] [stderr] 129 | if exps.len() < 1 { continue } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `exps.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you should use the `starts_with` method [INFO] [stderr] --> src/parse.rs:160:28 [INFO] [stderr] | [INFO] [stderr] 160 | if s.chars().next() == Some('!') { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: like this: `s.starts_with('!')` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::chars_next_cmp)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#chars_next_cmp [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parse.rs:173:25 [INFO] [stderr] | [INFO] [stderr] 173 | / match n { [INFO] [stderr] 174 | | &mut IR::Sym(ref mut s) => { [INFO] [stderr] 175 | | adjust_sym(&mut qsyms,s); [INFO] [stderr] 176 | | }, [INFO] [stderr] ... | [INFO] [stderr] 187 | | _ => {}, [INFO] [stderr] 188 | | } [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] 173 | match *n { [INFO] [stderr] 174 | IR::Sym(ref mut s) => { [INFO] [stderr] 175 | adjust_sym(&mut qsyms,s); [INFO] [stderr] 176 | }, [INFO] [stderr] 177 | IR::Map(ref mut v) => { [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/parse.rs:179:37 [INFO] [stderr] | [INFO] [stderr] 179 | / match n { [INFO] [stderr] 180 | | &mut IR::Sym(ref mut s) => { [INFO] [stderr] 181 | | adjust_sym(&mut qsyms,s); [INFO] [stderr] 182 | | }, [INFO] [stderr] 183 | | _ => {}, [INFO] [stderr] 184 | | } [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] 179 | if let &mut IR::Sym(ref mut s) = n { [INFO] [stderr] 180 | adjust_sym(&mut qsyms,s); [INFO] [stderr] 181 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parse.rs:179:37 [INFO] [stderr] | [INFO] [stderr] 179 | / match n { [INFO] [stderr] 180 | | &mut IR::Sym(ref mut s) => { [INFO] [stderr] 181 | | adjust_sym(&mut qsyms,s); [INFO] [stderr] 182 | | }, [INFO] [stderr] 183 | | _ => {}, [INFO] [stderr] 184 | | } [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] 179 | match *n { [INFO] [stderr] 180 | IR::Sym(ref mut s) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/parse.rs:215:33 [INFO] [stderr] | [INFO] [stderr] 215 | / match &src { [INFO] [stderr] 216 | | &Src::If(_,_,_) => { was_if = true; }, [INFO] [stderr] 217 | | &Src::Or(_,_) => { [INFO] [stderr] 218 | | if !was_if { [INFO] [stderr] ... | [INFO] [stderr] 222 | | _ => { was_if = false; }, [INFO] [stderr] 223 | | } [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] 215 | match src { [INFO] [stderr] 216 | Src::If(_,_,_) => { was_if = true; }, [INFO] [stderr] 217 | Src::Or(_,_) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/parse.rs:282:12 [INFO] [stderr] | [INFO] [stderr] 282 | if self.0.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.0.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you should use the `ends_with` method [INFO] [stderr] --> src/parse.rs:317:32 [INFO] [stderr] | [INFO] [stderr] 317 | if s.chars().last() == Some(',') { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: like this: `s.ends_with(',')` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::chars_last_cmp)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#chars_last_cmp [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/parse.rs:336:39 [INFO] [stderr] | [INFO] [stderr] 336 | if !key.is_empty() && vals.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!vals.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/parse.rs:404:17 [INFO] [stderr] | [INFO] [stderr] 404 | let _ = buf.truncate(n); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_unit_value)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/eval.rs:18:8 [INFO] [stderr] | [INFO] [stderr] 18 | if lookups.len() > 0 { path = Some(lookups); } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!lookups.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/eval.rs:57:52 [INFO] [stderr] | [INFO] [stderr] 57 | fn call (&mut self, var: Var, fun: &str, vars: &Vec) -> Option; [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[Var]` [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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/eval.rs:73:25 [INFO] [stderr] | [INFO] [stderr] 73 | / match next { [INFO] [stderr] 74 | | &Next::Restart(ref nn) => { [INFO] [stderr] 75 | | if let &Some(ref nn) = nn { [INFO] [stderr] 76 | | if let Some(b) = self.env.src.get_mut(nn) { [INFO] [stderr] ... | [INFO] [stderr] 81 | | _ => {}, // we handle the rest during Run, for convenience [INFO] [stderr] 82 | | } [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] 73 | if let &Next::Restart(ref nn) = next { [INFO] [stderr] 74 | if let &Some(ref nn) = nn { [INFO] [stderr] 75 | if let Some(b) = self.env.src.get_mut(nn) { [INFO] [stderr] 76 | b.idx = 0; [INFO] [stderr] 77 | } [INFO] [stderr] 78 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/eval.rs:73:25 [INFO] [stderr] | [INFO] [stderr] 73 | / match next { [INFO] [stderr] 74 | | &Next::Restart(ref nn) => { [INFO] [stderr] 75 | | if let &Some(ref nn) = nn { [INFO] [stderr] 76 | | if let Some(b) = self.env.src.get_mut(nn) { [INFO] [stderr] ... | [INFO] [stderr] 81 | | _ => {}, // we handle the rest during Run, for convenience [INFO] [stderr] 82 | | } [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] 73 | match *next { [INFO] [stderr] 74 | Next::Restart(ref nn) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/eval.rs:75:33 [INFO] [stderr] | [INFO] [stderr] 75 | / if let &Some(ref nn) = nn { [INFO] [stderr] 76 | | if let Some(b) = self.env.src.get_mut(nn) { [INFO] [stderr] 77 | | b.idx = 0; [INFO] [stderr] 78 | | } [INFO] [stderr] 79 | | } [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] 75 | if let Some(ref nn) = *nn { [INFO] [stderr] | ^^^^^^^^^^^^ ^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/eval.rs:149:17 [INFO] [stderr] | [INFO] [stderr] 149 | / match src { [INFO] [stderr] 150 | | &Src::Or(_,_) => { [INFO] [stderr] 151 | | if !b.or_valid { [INFO] [stderr] 152 | | return None [INFO] [stderr] ... | [INFO] [stderr] 158 | | _ => { b.or_valid = false; }, [INFO] [stderr] 159 | | } [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] 149 | match *src { [INFO] [stderr] 150 | Src::Or(_,_) => { [INFO] [stderr] 151 | if !b.or_valid { [INFO] [stderr] 152 | return None [INFO] [stderr] 153 | } [INFO] [stderr] 154 | else { b.or_valid = false; } //reset [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/eval.rs:164:34 [INFO] [stderr] | [INFO] [stderr] 164 | let has_return = (vars.len() > 0) || next.is_some(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!vars.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/eval.rs:173:21 [INFO] [stderr] | [INFO] [stderr] 173 | / match var { [INFO] [stderr] 174 | | &mut Var::Sym(ref mut s) => { // resolve symbol refs [INFO] [stderr] 175 | | val = Evaluator::resolve(s, &b.logic, &self.env.def); [INFO] [stderr] 176 | | // NOTE: otherwise we silently fail [INFO] [stderr] ... | [INFO] [stderr] 218 | | _ => {} [INFO] [stderr] 219 | | } [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] 173 | match *var { [INFO] [stderr] 174 | Var::Sym(ref mut s) => { // resolve symbol refs [INFO] [stderr] 175 | val = Evaluator::resolve(s, &b.logic, &self.env.def); [INFO] [stderr] 176 | // NOTE: otherwise we silently fail [INFO] [stderr] 177 | }, [INFO] [stderr] 178 | Var::String(ref mut s) => { //format string [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/eval.rs:230:21 [INFO] [stderr] | [INFO] [stderr] 230 | / match next { [INFO] [stderr] 231 | | &Next::Now(ref nn) => { // immediate advance clears node stack [INFO] [stderr] 232 | | self.node_stack.clear(); [INFO] [stderr] 233 | | self.node_stack.push(nn.clone()); [INFO] [stderr] ... | [INFO] [stderr] 253 | | }, [INFO] [stderr] 254 | | } [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] 230 | match *next { [INFO] [stderr] 231 | Next::Now(ref nn) => { // immediate advance clears node stack [INFO] [stderr] 232 | self.node_stack.clear(); [INFO] [stderr] 233 | self.node_stack.push(nn.clone()); [INFO] [stderr] 234 | }, [INFO] [stderr] 235 | Next::Call(ref nn) => { // callback nodes add to stack [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/eval.rs:277:25 [INFO] [stderr] | [INFO] [stderr] 277 | pub fn to_eval<'e> (self, env: &'e mut Env) -> Evaluator<'e> { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [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/eval.rs:277:5 [INFO] [stderr] | [INFO] [stderr] 277 | / pub fn to_eval<'e> (self, env: &'e mut Env) -> Evaluator<'e> { [INFO] [stderr] 278 | | Evaluator { [INFO] [stderr] 279 | | env: env, [INFO] [stderr] 280 | | node_stack: self.node_stack, [INFO] [stderr] 281 | | } [INFO] [stderr] 282 | | } [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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/source.rs:78:13 [INFO] [stderr] | [INFO] [stderr] 78 | / match n { [INFO] [stderr] 79 | | &IR::Sym(ref s) => { [INFO] [stderr] 80 | | if s == &"next:select" { [INFO] [stderr] 81 | | select_idx = Some(i); [INFO] [stderr] ... | [INFO] [stderr] 85 | | _ => {}, [INFO] [stderr] 86 | | } [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] 78 | if let &IR::Sym(ref s) = n { [INFO] [stderr] 79 | if s == &"next:select" { [INFO] [stderr] 80 | select_idx = Some(i); [INFO] [stderr] 81 | break [INFO] [stderr] 82 | } [INFO] [stderr] 83 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/source.rs:78:13 [INFO] [stderr] | [INFO] [stderr] 78 | / match n { [INFO] [stderr] 79 | | &IR::Sym(ref s) => { [INFO] [stderr] 80 | | if s == &"next:select" { [INFO] [stderr] 81 | | select_idx = Some(i); [INFO] [stderr] ... | [INFO] [stderr] 85 | | _ => {}, [INFO] [stderr] 86 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 78 | match *n { [INFO] [stderr] 79 | IR::Sym(ref s) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: taken reference of right operand [INFO] [stderr] --> src/source.rs:80:24 [INFO] [stderr] | [INFO] [stderr] 80 | if s == &"next:select" { [INFO] [stderr] | ^^^^^-------------- [INFO] [stderr] | | [INFO] [stderr] | help: use the right value directly: `"next:select"` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/source.rs:171:9 [INFO] [stderr] | [INFO] [stderr] 171 | / match self { [INFO] [stderr] 172 | | &Src::Mut(ref m, ref v, ref a) => { [INFO] [stderr] 173 | | match m { [INFO] [stderr] 174 | | &Mut::Add | &Mut::Sub | &Mut::Mul | &Mut::Div => { [INFO] [stderr] ... | [INFO] [stderr] 300 | | }, [INFO] [stderr] 301 | | } [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] 171 | match *self { [INFO] [stderr] 172 | Src::Mut(ref m, ref v, ref a) => { [INFO] [stderr] 173 | match m { [INFO] [stderr] 174 | &Mut::Add | &Mut::Sub | &Mut::Mul | &Mut::Div => { [INFO] [stderr] 175 | let mut num = None; [INFO] [stderr] 176 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/source.rs:173:17 [INFO] [stderr] | [INFO] [stderr] 173 | / match m { [INFO] [stderr] 174 | | &Mut::Add | &Mut::Sub | &Mut::Mul | &Mut::Div => { [INFO] [stderr] 175 | | let mut num = None; [INFO] [stderr] 176 | | [INFO] [stderr] ... | [INFO] [stderr] 245 | | }, [INFO] [stderr] 246 | | } [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] 173 | match *m { [INFO] [stderr] 174 | Mut::Add | Mut::Sub | Mut::Mul | Mut::Div => { [INFO] [stderr] 175 | let mut num = None; [INFO] [stderr] 176 | [INFO] [stderr] 177 | let var_name = Var::Sym(v.to_owned()); [INFO] [stderr] 178 | let v1 = Var::get_num(&var_name, def); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/source.rs:185:33 [INFO] [stderr] | [INFO] [stderr] 185 | / match m { [INFO] [stderr] 186 | | &Mut::Add => { [INFO] [stderr] 187 | | num = Some(v1+v2); [INFO] [stderr] 188 | | }, [INFO] [stderr] ... | [INFO] [stderr] 198 | | _ => {}, [INFO] [stderr] 199 | | } [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] 185 | match *m { [INFO] [stderr] 186 | Mut::Add => { [INFO] [stderr] 187 | num = Some(v1+v2); [INFO] [stderr] 188 | }, [INFO] [stderr] 189 | Mut::Sub => { [INFO] [stderr] 190 | num = Some(v1-v2); [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/source.rs:212:25 [INFO] [stderr] | [INFO] [stderr] 212 | / match a[0] { [INFO] [stderr] 213 | | Var::Sym(ref sym) => { [INFO] [stderr] 214 | | let mut block = None; [INFO] [stderr] 215 | | if let Some(b) = def.get(sym) { [INFO] [stderr] ... | [INFO] [stderr] 223 | | _ => { } // We do nothing with other var types [INFO] [stderr] 224 | | } [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] 212 | if let Var::Sym(ref sym) = a[0] { [INFO] [stderr] 213 | let mut block = None; [INFO] [stderr] 214 | if let Some(b) = def.get(sym) { [INFO] [stderr] 215 | block = Some(b.clone()); [INFO] [stderr] 216 | } [INFO] [stderr] 217 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/source.rs:230:29 [INFO] [stderr] | [INFO] [stderr] 230 | / match n { [INFO] [stderr] 231 | | &Var::Sym(ref n) => { [INFO] [stderr] 232 | | if let Some(v) = Evaluator::resolve(n, &logic, &def) { [INFO] [stderr] 233 | | args.push(v) [INFO] [stderr] ... | [INFO] [stderr] 236 | | _ => { args.push(n.clone()) } [INFO] [stderr] 237 | | } [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] 230 | match *n { [INFO] [stderr] 231 | Var::Sym(ref n) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should use the `starts_with` method [INFO] [stderr] --> src/source.rs:308:20 [INFO] [stderr] | [INFO] [stderr] 308 | if sym.chars().next() == Some('@') { //mutating statement [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: like this: `sym.starts_with('@')` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#chars_next_cmp [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 33 [INFO] [stderr] --> src/parse.rs:80:5 [INFO] [stderr] | [INFO] [stderr] 80 | / pub fn parse_blocks (src: &str) -> Result { [INFO] [stderr] 81 | | let mut v = vec!(); [INFO] [stderr] 82 | | let mut exp = String::new(); [INFO] [stderr] 83 | | let mut exps: Vec = vec!(); [INFO] [stderr] ... | [INFO] [stderr] 275 | | Ok(Parser(v)) [INFO] [stderr] 276 | | } [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 one [INFO] [stderr] --> src/source.rs:349:24 [INFO] [stderr] | [INFO] [stderr] 349 | if exp.len() < 1 { return Err("Invalid OR Logic") } [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `exp.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of both operands [INFO] [stderr] --> src/source.rs:361:25 [INFO] [stderr] | [INFO] [stderr] 361 | else if &sym.split_terminator(':').next() == &Some("next") { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] help: use the values directly [INFO] [stderr] | [INFO] [stderr] 361 | else if sym.split_terminator(':').next() == Some("next") { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/source.rs:370:24 [INFO] [stderr] | [INFO] [stderr] 370 | if exp.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!exp.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/var.rs:18:9 [INFO] [stderr] | [INFO] [stderr] 18 | / match self { [INFO] [stderr] 19 | | &Var::String(ref s) => s.clone(), [INFO] [stderr] 20 | | &Var::Sym(ref s) => s.clone(), [INFO] [stderr] 21 | | &Var::Num(ref n) => n.to_string(), [INFO] [stderr] 22 | | &Var::Bool(ref b) => b.to_string(), [INFO] [stderr] 23 | | } [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] 18 | match *self { [INFO] [stderr] 19 | Var::String(ref s) => s.clone(), [INFO] [stderr] 20 | Var::Sym(ref s) => s.clone(), [INFO] [stderr] 21 | Var::Num(ref n) => n.to_string(), [INFO] [stderr] 22 | Var::Bool(ref b) => b.to_string(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/var.rs:68:9 [INFO] [stderr] | [INFO] [stderr] 68 | / match self { [INFO] [stderr] 69 | | &Var::Num(n) => { num = n; }, [INFO] [stderr] 70 | | &Var::Sym(ref s) => { [INFO] [stderr] 71 | | if let Some((n,_res)) = data.get_last(s) { [INFO] [stderr] ... | [INFO] [stderr] 79 | | _ => return Err("ERROR: NaN Evaluation") [INFO] [stderr] 80 | | } [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] 68 | match *self { [INFO] [stderr] 69 | Var::Num(n) => { num = n; }, [INFO] [stderr] 70 | Var::Sym(ref s) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/parse.rs:129:20 [INFO] [stderr] | [INFO] [stderr] 129 | if exps.len() < 1 { continue } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `exps.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you should use the `starts_with` method [INFO] [stderr] --> src/parse.rs:160:28 [INFO] [stderr] | [INFO] [stderr] 160 | if s.chars().next() == Some('!') { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: like this: `s.starts_with('!')` [INFO] [stderr] warning: you should use the `starts_with` method [INFO] [stderr] --> src/var.rs:106:12 [INFO] [stderr] | [INFO] [stderr] 106 | if exp.chars().next() == Some('(') { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: like this: `exp.starts_with('(')` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#chars_next_cmp [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::chars_next_cmp)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#chars_next_cmp [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parse.rs:173:25 [INFO] [stderr] | [INFO] [stderr] 173 | / match n { [INFO] [stderr] 174 | | &mut IR::Sym(ref mut s) => { [INFO] [stderr] 175 | | adjust_sym(&mut qsyms,s); [INFO] [stderr] 176 | | }, [INFO] [stderr] ... | [INFO] [stderr] 187 | | _ => {}, [INFO] [stderr] 188 | | } [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] 173 | match *n { [INFO] [stderr] 174 | IR::Sym(ref mut s) => { [INFO] [stderr] 175 | adjust_sym(&mut qsyms,s); [INFO] [stderr] 176 | }, [INFO] [stderr] 177 | IR::Map(ref mut v) => { [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/parse.rs:179:37 [INFO] [stderr] | [INFO] [stderr] 179 | / match n { [INFO] [stderr] 180 | | &mut IR::Sym(ref mut s) => { [INFO] [stderr] 181 | | adjust_sym(&mut qsyms,s); [INFO] [stderr] 182 | | }, [INFO] [stderr] 183 | | _ => {}, [INFO] [stderr] 184 | | } [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] 179 | if let &mut IR::Sym(ref mut s) = n { [INFO] [stderr] 180 | adjust_sym(&mut qsyms,s); [INFO] [stderr] 181 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parse.rs:179:37 [INFO] [stderr] | [INFO] [stderr] 179 | / match n { [INFO] [stderr] 180 | | &mut IR::Sym(ref mut s) => { [INFO] [stderr] 181 | | adjust_sym(&mut qsyms,s); [INFO] [stderr] 182 | | }, [INFO] [stderr] 183 | | _ => {}, [INFO] [stderr] 184 | | } [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] 179 | match *n { [INFO] [stderr] 180 | IR::Sym(ref mut s) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/parse.rs:215:33 [INFO] [stderr] | [INFO] [stderr] 215 | / match &src { [INFO] [stderr] 216 | | &Src::If(_,_,_) => { was_if = true; }, [INFO] [stderr] 217 | | &Src::Or(_,_) => { [INFO] [stderr] 218 | | if !was_if { [INFO] [stderr] ... | [INFO] [stderr] 222 | | _ => { was_if = false; }, [INFO] [stderr] 223 | | } [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] 215 | match src { [INFO] [stderr] 216 | Src::If(_,_,_) => { was_if = true; }, [INFO] [stderr] 217 | Src::Or(_,_) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/parse.rs:282:12 [INFO] [stderr] | [INFO] [stderr] 282 | if self.0.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.0.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you should use the `ends_with` method [INFO] [stderr] --> src/parse.rs:317:32 [INFO] [stderr] | [INFO] [stderr] 317 | if s.chars().last() == Some(',') { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: like this: `s.ends_with(',')` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::chars_last_cmp)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#chars_last_cmp [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/parse.rs:336:39 [INFO] [stderr] | [INFO] [stderr] 336 | if !key.is_empty() && vals.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!vals.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/parse.rs:404:17 [INFO] [stderr] | [INFO] [stderr] 404 | let _ = buf.truncate(n); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_unit_value)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/eval.rs:18:8 [INFO] [stderr] | [INFO] [stderr] 18 | if lookups.len() > 0 { path = Some(lookups); } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!lookups.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/eval.rs:57:52 [INFO] [stderr] | [INFO] [stderr] 57 | fn call (&mut self, var: Var, fun: &str, vars: &Vec) -> Option; [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[Var]` [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/logic.rs:117:9 [INFO] [stderr] | [INFO] [stderr] 117 | / match self { [INFO] [stderr] 118 | | &Logic::Is(ref lookup) => { [INFO] [stderr] 119 | | let lookup = lookup.clone(); [INFO] [stderr] 120 | | let lfn = Box::new(move |data: &Def, logic: &Logics| { [INFO] [stderr] ... | [INFO] [stderr] 219 | | } [INFO] [stderr] 220 | | } [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] 117 | match *self { [INFO] [stderr] 118 | Logic::Is(ref lookup) => { [INFO] [stderr] 119 | let lookup = lookup.clone(); [INFO] [stderr] 120 | let lfn = Box::new(move |data: &Def, logic: &Logics| { [INFO] [stderr] 121 | if let Some(r) = Evaluator::resolve(&lookup, logic, data) { [INFO] [stderr] 122 | match r { [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/eval.rs:73:25 [INFO] [stderr] | [INFO] [stderr] 73 | / match next { [INFO] [stderr] 74 | | &Next::Restart(ref nn) => { [INFO] [stderr] 75 | | if let &Some(ref nn) = nn { [INFO] [stderr] 76 | | if let Some(b) = self.env.src.get_mut(nn) { [INFO] [stderr] ... | [INFO] [stderr] 81 | | _ => {}, // we handle the rest during Run, for convenience [INFO] [stderr] 82 | | } [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] 73 | if let &Next::Restart(ref nn) = next { [INFO] [stderr] 74 | if let &Some(ref nn) = nn { [INFO] [stderr] 75 | if let Some(b) = self.env.src.get_mut(nn) { [INFO] [stderr] 76 | b.idx = 0; [INFO] [stderr] 77 | } [INFO] [stderr] 78 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/eval.rs:73:25 [INFO] [stderr] | [INFO] [stderr] 73 | / match next { [INFO] [stderr] 74 | | &Next::Restart(ref nn) => { [INFO] [stderr] 75 | | if let &Some(ref nn) = nn { [INFO] [stderr] 76 | | if let Some(b) = self.env.src.get_mut(nn) { [INFO] [stderr] ... | [INFO] [stderr] 81 | | _ => {}, // we handle the rest during Run, for convenience [INFO] [stderr] 82 | | } [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] 73 | match *next { [INFO] [stderr] 74 | Next::Restart(ref nn) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/eval.rs:75:33 [INFO] [stderr] | [INFO] [stderr] 75 | / if let &Some(ref nn) = nn { [INFO] [stderr] 76 | | if let Some(b) = self.env.src.get_mut(nn) { [INFO] [stderr] 77 | | b.idx = 0; [INFO] [stderr] 78 | | } [INFO] [stderr] 79 | | } [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] 75 | if let Some(ref nn) = *nn { [INFO] [stderr] | ^^^^^^^^^^^^ ^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/eval.rs:149:17 [INFO] [stderr] | [INFO] [stderr] 149 | / match src { [INFO] [stderr] 150 | | &Src::Or(_,_) => { [INFO] [stderr] 151 | | if !b.or_valid { [INFO] [stderr] 152 | | return None [INFO] [stderr] ... | [INFO] [stderr] 158 | | _ => { b.or_valid = false; }, [INFO] [stderr] 159 | | } [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] 149 | match *src { [INFO] [stderr] 150 | Src::Or(_,_) => { [INFO] [stderr] 151 | if !b.or_valid { [INFO] [stderr] 152 | return None [INFO] [stderr] 153 | } [INFO] [stderr] 154 | else { b.or_valid = false; } //reset [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/eval.rs:164:34 [INFO] [stderr] | [INFO] [stderr] 164 | let has_return = (vars.len() > 0) || next.is_some(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!vars.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/eval.rs:173:21 [INFO] [stderr] | [INFO] [stderr] 173 | / match var { [INFO] [stderr] 174 | | &mut Var::Sym(ref mut s) => { // resolve symbol refs [INFO] [stderr] 175 | | val = Evaluator::resolve(s, &b.logic, &self.env.def); [INFO] [stderr] 176 | | // NOTE: otherwise we silently fail [INFO] [stderr] ... | [INFO] [stderr] 218 | | _ => {} [INFO] [stderr] 219 | | } [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] 173 | match *var { [INFO] [stderr] 174 | Var::Sym(ref mut s) => { // resolve symbol refs [INFO] [stderr] 175 | val = Evaluator::resolve(s, &b.logic, &self.env.def); [INFO] [stderr] 176 | // NOTE: otherwise we silently fail [INFO] [stderr] 177 | }, [INFO] [stderr] 178 | Var::String(ref mut s) => { //format string [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/eval.rs:230:21 [INFO] [stderr] | [INFO] [stderr] 230 | / match next { [INFO] [stderr] 231 | | &Next::Now(ref nn) => { // immediate advance clears node stack [INFO] [stderr] 232 | | self.node_stack.clear(); [INFO] [stderr] 233 | | self.node_stack.push(nn.clone()); [INFO] [stderr] ... | [INFO] [stderr] 253 | | }, [INFO] [stderr] 254 | | } [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] 230 | match *next { [INFO] [stderr] 231 | Next::Now(ref nn) => { // immediate advance clears node stack [INFO] [stderr] 232 | self.node_stack.clear(); [INFO] [stderr] 233 | self.node_stack.push(nn.clone()); [INFO] [stderr] 234 | }, [INFO] [stderr] 235 | Next::Call(ref nn) => { // callback nodes add to stack [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/eval.rs:277:25 [INFO] [stderr] | [INFO] [stderr] 277 | pub fn to_eval<'e> (self, env: &'e mut Env) -> Evaluator<'e> { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [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/eval.rs:277:5 [INFO] [stderr] | [INFO] [stderr] 277 | / pub fn to_eval<'e> (self, env: &'e mut Env) -> Evaluator<'e> { [INFO] [stderr] 278 | | Evaluator { [INFO] [stderr] 279 | | env: env, [INFO] [stderr] 280 | | node_stack: self.node_stack, [INFO] [stderr] 281 | | } [INFO] [stderr] 282 | | } [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/def.rs:61:25 [INFO] [stderr] | [INFO] [stderr] 61 | / match v { [INFO] [stderr] 62 | | &Var::Sym(ref sym) => { [INFO] [stderr] 63 | | if lookup != sym { [INFO] [stderr] 64 | | resolved = Some(v.clone()); // take note that we resolved atleast once [INFO] [stderr] ... | [INFO] [stderr] 74 | | } [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: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 61 | match *v { [INFO] [stderr] 62 | Var::Sym(ref sym) => { [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/source.rs:78:13 [INFO] [stderr] | [INFO] [stderr] 78 | / match n { [INFO] [stderr] 79 | | &IR::Sym(ref s) => { [INFO] [stderr] 80 | | if s == &"next:select" { [INFO] [stderr] 81 | | select_idx = Some(i); [INFO] [stderr] ... | [INFO] [stderr] 85 | | _ => {}, [INFO] [stderr] 86 | | } [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] 78 | if let &IR::Sym(ref s) = n { [INFO] [stderr] 79 | if s == &"next:select" { [INFO] [stderr] 80 | select_idx = Some(i); [INFO] [stderr] 81 | break [INFO] [stderr] 82 | } [INFO] [stderr] 83 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/source.rs:78:13 [INFO] [stderr] | [INFO] [stderr] 78 | / match n { [INFO] [stderr] 79 | | &IR::Sym(ref s) => { [INFO] [stderr] 80 | | if s == &"next:select" { [INFO] [stderr] 81 | | select_idx = Some(i); [INFO] [stderr] ... | [INFO] [stderr] 85 | | _ => {}, [INFO] [stderr] 86 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 78 | match *n { [INFO] [stderr] 79 | IR::Sym(ref s) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: taken reference of right operand [INFO] [stderr] --> src/source.rs:80:24 [INFO] [stderr] | [INFO] [stderr] 80 | if s == &"next:select" { [INFO] [stderr] | ^^^^^-------------- [INFO] [stderr] | | [INFO] [stderr] | help: use the right value directly: `"next:select"` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/source.rs:171:9 [INFO] [stderr] | [INFO] [stderr] 171 | / match self { [INFO] [stderr] 172 | | &Src::Mut(ref m, ref v, ref a) => { [INFO] [stderr] 173 | | match m { [INFO] [stderr] 174 | | &Mut::Add | &Mut::Sub | &Mut::Mul | &Mut::Div => { [INFO] [stderr] ... | [INFO] [stderr] 300 | | }, [INFO] [stderr] 301 | | } [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] 171 | match *self { [INFO] [stderr] 172 | Src::Mut(ref m, ref v, ref a) => { [INFO] [stderr] 173 | match m { [INFO] [stderr] 174 | &Mut::Add | &Mut::Sub | &Mut::Mul | &Mut::Div => { [INFO] [stderr] 175 | let mut num = None; [INFO] [stderr] 176 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/source.rs:173:17 [INFO] [stderr] | [INFO] [stderr] 173 | / match m { [INFO] [stderr] 174 | | &Mut::Add | &Mut::Sub | &Mut::Mul | &Mut::Div => { [INFO] [stderr] 175 | | let mut num = None; [INFO] [stderr] 176 | | [INFO] [stderr] ... | [INFO] [stderr] 245 | | }, [INFO] [stderr] 246 | | } [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] 173 | match *m { [INFO] [stderr] 174 | Mut::Add | Mut::Sub | Mut::Mul | Mut::Div => { [INFO] [stderr] 175 | let mut num = None; [INFO] [stderr] 176 | [INFO] [stderr] 177 | let var_name = Var::Sym(v.to_owned()); [INFO] [stderr] 178 | let v1 = Var::get_num(&var_name, def); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/source.rs:185:33 [INFO] [stderr] | [INFO] [stderr] 185 | / match m { [INFO] [stderr] 186 | | &Mut::Add => { [INFO] [stderr] 187 | | num = Some(v1+v2); [INFO] [stderr] 188 | | }, [INFO] [stderr] ... | [INFO] [stderr] 198 | | _ => {}, [INFO] [stderr] 199 | | } [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] 185 | match *m { [INFO] [stderr] 186 | Mut::Add => { [INFO] [stderr] 187 | num = Some(v1+v2); [INFO] [stderr] 188 | }, [INFO] [stderr] 189 | Mut::Sub => { [INFO] [stderr] 190 | num = Some(v1-v2); [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/source.rs:212:25 [INFO] [stderr] | [INFO] [stderr] 212 | / match a[0] { [INFO] [stderr] 213 | | Var::Sym(ref sym) => { [INFO] [stderr] 214 | | let mut block = None; [INFO] [stderr] 215 | | if let Some(b) = def.get(sym) { [INFO] [stderr] ... | [INFO] [stderr] 223 | | _ => { } // We do nothing with other var types [INFO] [stderr] 224 | | } [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] 212 | if let Var::Sym(ref sym) = a[0] { [INFO] [stderr] 213 | let mut block = None; [INFO] [stderr] 214 | if let Some(b) = def.get(sym) { [INFO] [stderr] 215 | block = Some(b.clone()); [INFO] [stderr] 216 | } [INFO] [stderr] 217 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/source.rs:230:29 [INFO] [stderr] | [INFO] [stderr] 230 | / match n { [INFO] [stderr] 231 | | &Var::Sym(ref n) => { [INFO] [stderr] 232 | | if let Some(v) = Evaluator::resolve(n, &logic, &def) { [INFO] [stderr] 233 | | args.push(v) [INFO] [stderr] ... | [INFO] [stderr] 236 | | _ => { args.push(n.clone()) } [INFO] [stderr] 237 | | } [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] 230 | match *n { [INFO] [stderr] 231 | Var::Sym(ref n) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should use the `starts_with` method [INFO] [stderr] --> src/source.rs:308:20 [INFO] [stderr] | [INFO] [stderr] 308 | if sym.chars().next() == Some('@') { //mutating statement [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: like this: `sym.starts_with('@')` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#chars_next_cmp [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/source.rs:349:24 [INFO] [stderr] | [INFO] [stderr] 349 | if exp.len() < 1 { return Err("Invalid OR Logic") } [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `exp.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of both operands [INFO] [stderr] --> src/source.rs:361:25 [INFO] [stderr] | [INFO] [stderr] 361 | else if &sym.split_terminator(':').next() == &Some("next") { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] help: use the values directly [INFO] [stderr] | [INFO] [stderr] 361 | else if sym.split_terminator(':').next() == Some("next") { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/source.rs:370:24 [INFO] [stderr] | [INFO] [stderr] 370 | if exp.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!exp.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/var.rs:18:9 [INFO] [stderr] | [INFO] [stderr] 18 | / match self { [INFO] [stderr] 19 | | &Var::String(ref s) => s.clone(), [INFO] [stderr] 20 | | &Var::Sym(ref s) => s.clone(), [INFO] [stderr] 21 | | &Var::Num(ref n) => n.to_string(), [INFO] [stderr] 22 | | &Var::Bool(ref b) => b.to_string(), [INFO] [stderr] 23 | | } [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] 18 | match *self { [INFO] [stderr] 19 | Var::String(ref s) => s.clone(), [INFO] [stderr] 20 | Var::Sym(ref s) => s.clone(), [INFO] [stderr] 21 | Var::Num(ref n) => n.to_string(), [INFO] [stderr] 22 | Var::Bool(ref b) => b.to_string(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/var.rs:68:9 [INFO] [stderr] | [INFO] [stderr] 68 | / match self { [INFO] [stderr] 69 | | &Var::Num(n) => { num = n; }, [INFO] [stderr] 70 | | &Var::Sym(ref s) => { [INFO] [stderr] 71 | | if let Some((n,_res)) = data.get_last(s) { [INFO] [stderr] ... | [INFO] [stderr] 79 | | _ => return Err("ERROR: NaN Evaluation") [INFO] [stderr] 80 | | } [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] 68 | match *self { [INFO] [stderr] 69 | Var::Num(n) => { num = n; }, [INFO] [stderr] 70 | Var::Sym(ref s) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should use the `starts_with` method [INFO] [stderr] --> src/var.rs:106:12 [INFO] [stderr] | [INFO] [stderr] 106 | if exp.chars().next() == Some('(') { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: like this: `exp.starts_with('(')` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#chars_next_cmp [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/logic.rs:117:9 [INFO] [stderr] | [INFO] [stderr] 117 | / match self { [INFO] [stderr] 118 | | &Logic::Is(ref lookup) => { [INFO] [stderr] 119 | | let lookup = lookup.clone(); [INFO] [stderr] 120 | | let lfn = Box::new(move |data: &Def, logic: &Logics| { [INFO] [stderr] ... | [INFO] [stderr] 219 | | } [INFO] [stderr] 220 | | } [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] 117 | match *self { [INFO] [stderr] 118 | Logic::Is(ref lookup) => { [INFO] [stderr] 119 | let lookup = lookup.clone(); [INFO] [stderr] 120 | let lfn = Box::new(move |data: &Def, logic: &Logics| { [INFO] [stderr] 121 | if let Some(r) = Evaluator::resolve(&lookup, logic, data) { [INFO] [stderr] 122 | match r { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/def.rs:61:25 [INFO] [stderr] | [INFO] [stderr] 61 | / match v { [INFO] [stderr] 62 | | &Var::Sym(ref sym) => { [INFO] [stderr] 63 | | if lookup != sym { [INFO] [stderr] 64 | | resolved = Some(v.clone()); // take note that we resolved atleast once [INFO] [stderr] ... | [INFO] [stderr] 74 | | } [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: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 61 | match *v { [INFO] [stderr] 62 | Var::Sym(ref sym) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> tests/state.rs:56:9 [INFO] [stderr] | [INFO] [stderr] 56 | return Some(Var::Num(r)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Some(Var::Num(r))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> examples/contrived.rs:20:13 [INFO] [stderr] | [INFO] [stderr] 20 | / match var { [INFO] [stderr] 21 | | Var::String(s) => { println!("{:}", s); }, [INFO] [stderr] 22 | | _ => {}, [INFO] [stderr] 23 | | } [INFO] [stderr] | |_____________^ help: try this: `if let Var::String(s) = var { println!("{:}", s); }` [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] [INFO] [stderr] warning: Err(_) will match all errors, maybe not a good idea [INFO] [stderr] --> examples/contrived.rs:40:25 [INFO] [stderr] | [INFO] [stderr] 40 | Err(_) => panic!() [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_wild_err_arm)] on by default [INFO] [stderr] = note: to remove this warning, match each error separately or use unreachable macro [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_wild_err_arm [INFO] [stderr] [INFO] [stderr] warning: Err(_) will match all errors, maybe not a good idea [INFO] [stderr] --> examples/contrived.rs:62:25 [INFO] [stderr] | [INFO] [stderr] 62 | Err(_) => panic!() [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: to remove this warning, match each error separately or use unreachable macro [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_wild_err_arm [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> examples/contrived.rs:58:36 [INFO] [stderr] | [INFO] [stderr] 58 | if let Some(_) = choices.remove(line) { [INFO] [stderr] | _____________________________- ^^^^^^^ [INFO] [stderr] 59 | | ev.advance(line.to_owned()); [INFO] [stderr] 60 | | } [INFO] [stderr] | |_____________________________- help: try this: `if choices.remove(line).is_some()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `for` loop [INFO] [stderr] --> examples/basic.rs:17:42 [INFO] [stderr] | [INFO] [stderr] 17 | while let Some((vars, _next_node)) = ev.next() { // here we loop through the evaluator steps [INFO] [stderr] | ^^^^^^^^^ help: try: `for (vars, _next_node) in ev { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_on_iterator)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_on_iterator [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> examples/basic.rs:19:13 [INFO] [stderr] | [INFO] [stderr] 19 | / match var { [INFO] [stderr] 20 | | Var::String(s) => { println!("{:}", s); }, // print out the emitted variables [INFO] [stderr] 21 | | _ => {}, [INFO] [stderr] 22 | | } [INFO] [stderr] | |_____________^ help: try this: `if let Var::String(s) = var { println!("{:}", s); }` [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] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> tests/samples.rs:17:25 [INFO] [stderr] | [INFO] [stderr] 17 | assert!(env.src.len() > 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!env.src.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: length comparison to zero [INFO] [stderr] --> tests/samples.rs:21:25 [INFO] [stderr] | [INFO] [stderr] 21 | assert!(vars.len() > 0 || [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!vars.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> tests/state.rs:179:5 [INFO] [stderr] | [INFO] [stderr] 179 | assert_eq!(player.coins, 6.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::float_cmp)] on by default [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> tests/state.rs:179:5 [INFO] [stderr] | [INFO] [stderr] 179 | assert_eq!(player.coins, 6.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `lichen`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> tests/stream.rs:32:9 [INFO] [stderr] | [INFO] [stderr] 32 | / match b { [INFO] [stderr] 33 | | &Block::Src(ref b) => { [INFO] [stderr] 34 | | assert_eq!(b.name, "root".to_owned()); [INFO] [stderr] 35 | | assert_eq!(b.src.get(0), Some(&Src::Emit(vec![Var::String("hi".to_owned())]))); [INFO] [stderr] ... | [INFO] [stderr] 38 | | _ => { panic!("ERROR: Invalid block type") } [INFO] [stderr] 39 | | } [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] 32 | match *b { [INFO] [stderr] 33 | Block::Src(ref b) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> tests/stream.rs:59:9 [INFO] [stderr] | [INFO] [stderr] 59 | / match b { [INFO] [stderr] 60 | | &Block::Src(ref b) => { [INFO] [stderr] 61 | | assert_eq!(b.name, "some_block".to_owned()); [INFO] [stderr] 62 | | assert_eq!(b.src.get(0), Some(&Src::Emit(vec![Var::String("hi again".to_owned())]))) [INFO] [stderr] 63 | | }, [INFO] [stderr] 64 | | _ => { panic!("ERROR: Invalid block type") } [INFO] [stderr] 65 | | } [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] 59 | match *b { [INFO] [stderr] 60 | Block::Src(ref b) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> tests/unit.rs:69:5 [INFO] [stderr] | [INFO] [stderr] 69 | / match &block[0] { [INFO] [stderr] 70 | | &Block::Src(ref b) => { [INFO] [stderr] 71 | | let r; [INFO] [stderr] 72 | | match b.src[0] { [INFO] [stderr] ... | [INFO] [stderr] 84 | | _ => panic!("unknown block found") [INFO] [stderr] 85 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 69 | match block[0] { [INFO] [stderr] 70 | Block::Src(ref b) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> tests/unit.rs:97:5 [INFO] [stderr] | [INFO] [stderr] 97 | / match &block[0] { [INFO] [stderr] 98 | | &Block::Src(ref b) => { [INFO] [stderr] 99 | | let r; [INFO] [stderr] 100 | | match b.src[1] { [INFO] [stderr] ... | [INFO] [stderr] 117 | | _ => panic!("unknown block found") [INFO] [stderr] 118 | | } [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] 97 | match block[0] { [INFO] [stderr] 98 | Block::Src(ref b) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> tests/unit.rs:107:21 [INFO] [stderr] | [INFO] [stderr] 107 | / match l { [INFO] [stderr] 108 | | &Logic::Composite(ref _x, ref v) => { [INFO] [stderr] 109 | | assert_eq!(r,&v[1]); [INFO] [stderr] 110 | | }, [INFO] [stderr] 111 | | _ => panic!("unknown logic found") [INFO] [stderr] 112 | | } [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] 107 | match *l { [INFO] [stderr] 108 | Logic::Composite(ref _x, ref v) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> tests/unit.rs:166:5 [INFO] [stderr] | [INFO] [stderr] 166 | / match &block[0] { [INFO] [stderr] 167 | | &Block::Src(ref b) => { [INFO] [stderr] 168 | | match b.src[1] { [INFO] [stderr] 169 | | Src::If(_,_, ref next) => { [INFO] [stderr] ... | [INFO] [stderr] 175 | | _ => panic!("unknown block found") [INFO] [stderr] 176 | | } [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] 166 | match block[0] { [INFO] [stderr] 167 | Block::Src(ref b) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: build failed [INFO] running `"docker" "inspect" "e20b52685b59967f75dce37550c8c16398788824eef20c924463ea16fcc02509"` [INFO] running `"docker" "rm" "-f" "e20b52685b59967f75dce37550c8c16398788824eef20c924463ea16fcc02509"` [INFO] [stdout] e20b52685b59967f75dce37550c8c16398788824eef20c924463ea16fcc02509