[INFO] crate gdl-parser 0.0.8 is already in cache [INFO] extracting crate gdl-parser 0.0.8 into work/ex/clippy-test-run/sources/stable/reg/gdl-parser/0.0.8 [INFO] extracting crate gdl-parser 0.0.8 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/gdl-parser/0.0.8 [INFO] validating manifest of gdl-parser-0.0.8 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 gdl-parser-0.0.8 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 gdl-parser-0.0.8 [INFO] finished frobbing gdl-parser-0.0.8 [INFO] frobbed toml for gdl-parser-0.0.8 written to work/ex/clippy-test-run/sources/stable/reg/gdl-parser/0.0.8/Cargo.toml [INFO] started frobbing gdl-parser-0.0.8 [INFO] finished frobbing gdl-parser-0.0.8 [INFO] frobbed toml for gdl-parser-0.0.8 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/gdl-parser/0.0.8/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 gdl-parser-0.0.8 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-3/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/gdl-parser/0.0.8:/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] ff21a67ee7d6d2f202971ec3437bbb9f5075dad21a54b48dc876b77f5eb26cd3 [INFO] running `"docker" "start" "-a" "ff21a67ee7d6d2f202971ec3437bbb9f5075dad21a54b48dc876b77f5eb26cd3"` [INFO] [stderr] Checking gdl-parser v0.0.8 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/gdl.rs:1082:20 [INFO] [stderr] | [INFO] [stderr] 1082 | Err(ParseError{line: line, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/lib.rs:38:23 [INFO] [stderr] | [INFO] [stderr] 38 | Description { clauses: clauses } [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `clauses` [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/lib.rs:84:16 [INFO] [stderr] | [INFO] [stderr] 84 | Rule { head: head, body: body } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `head` [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/lib.rs:84:28 [INFO] [stderr] | [INFO] [stderr] 84 | Rule { head: head, body: body } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `body` [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/lib.rs:253:39 [INFO] [stderr] | [INFO] [stderr] 253 | Relation { name: name.into(), args: args } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `args` [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/lib.rs:288:15 [INFO] [stderr] | [INFO] [stderr] 288 | Not { lit: lit } [INFO] [stderr] | ^^^^^^^^ help: replace it with: `lit` [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/lib.rs:312:14 [INFO] [stderr] | [INFO] [stderr] 312 | Or { lits: lits } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `lits` [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/lib.rs:342:20 [INFO] [stderr] | [INFO] [stderr] 342 | Distinct { term1: term1, term2: term2 } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `term1` [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/lib.rs:342:34 [INFO] [stderr] | [INFO] [stderr] 342 | Distinct { term1: term1, term2: term2 } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `term2` [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/lib.rs:393:39 [INFO] [stderr] | [INFO] [stderr] 393 | Function { name: name.into(), args: args } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `args` [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/gdl.rs:1082:20 [INFO] [stderr] | [INFO] [stderr] 1082 | Err(ParseError{line: line, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/lib.rs:38:23 [INFO] [stderr] | [INFO] [stderr] 38 | Description { clauses: clauses } [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `clauses` [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/lib.rs:84:16 [INFO] [stderr] | [INFO] [stderr] 84 | Rule { head: head, body: body } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `head` [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/lib.rs:84:28 [INFO] [stderr] | [INFO] [stderr] 84 | Rule { head: head, body: body } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `body` [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/lib.rs:253:39 [INFO] [stderr] | [INFO] [stderr] 253 | Relation { name: name.into(), args: args } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `args` [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/lib.rs:288:15 [INFO] [stderr] | [INFO] [stderr] 288 | Not { lit: lit } [INFO] [stderr] | ^^^^^^^^ help: replace it with: `lit` [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/lib.rs:312:14 [INFO] [stderr] | [INFO] [stderr] 312 | Or { lits: lits } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `lits` [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/lib.rs:342:20 [INFO] [stderr] | [INFO] [stderr] 342 | Distinct { term1: term1, term2: term2 } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `term1` [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/lib.rs:342:34 [INFO] [stderr] | [INFO] [stderr] 342 | Distinct { term1: term1, term2: term2 } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `term2` [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/lib.rs:393:39 [INFO] [stderr] | [INFO] [stderr] 393 | Function { name: name.into(), args: args } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `args` [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: unneeded return statement [INFO] [stderr] --> src/gdl.rs:115:5 [INFO] [stderr] | [INFO] [stderr] 115 | return (lineno, remaining + 1); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(lineno, remaining + 1)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/gdl.rs:115:5 [INFO] [stderr] | [INFO] [stderr] 115 | return (lineno, remaining + 1); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(lineno, remaining + 1)` [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: length comparison to one [INFO] [stderr] --> src/gdl.rs:807:36 [INFO] [stderr] | [INFO] [stderr] 807 | if repeat_value.len() >= 1usize { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!repeat_value.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: passing a unit value to a function [INFO] [stderr] --> src/gdl.rs:1013:61 [INFO] [stderr] | [INFO] [stderr] 1013 | Matched(pos, value) => Matched(pos, value), [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] 1013 | Matched(pos, value) => Matched(pos, ()), [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/gdl.rs:1075:1 [INFO] [stderr] | [INFO] [stderr] 1075 | / pub fn description<'input>(input: &'input str) -> ParseResult { [INFO] [stderr] 1076 | | let mut state = ParseState::new(); [INFO] [stderr] 1077 | | match parse_description(input, &mut state, 0) { [INFO] [stderr] 1078 | | Matched(pos, value) => { if pos == input.len() { return Ok(value) } } [INFO] [stderr] ... | [INFO] [stderr] 1085 | | expected: state.expected,}) [INFO] [stderr] 1086 | | } [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/gdl.rs:1077:5 [INFO] [stderr] | [INFO] [stderr] 1077 | / match parse_description(input, &mut state, 0) { [INFO] [stderr] 1078 | | Matched(pos, value) => { if pos == input.len() { return Ok(value) } } [INFO] [stderr] 1079 | | _ => { } [INFO] [stderr] 1080 | | } [INFO] [stderr] | |_____^ help: try this: `if let Matched(pos, value) = parse_description(input, &mut state, 0) { if pos == input.len() { return Ok(value) } }` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/visitor.rs:46:5 [INFO] [stderr] | [INFO] [stderr] 46 | / match clause { [INFO] [stderr] 47 | | &mut RuleClause(ref mut r) => visit_rule(r, visitor), [INFO] [stderr] 48 | | &mut SentenceClause(ref mut s) => visit_sentence(s, visitor) [INFO] [stderr] 49 | | } [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] 46 | match *clause { [INFO] [stderr] 47 | RuleClause(ref mut r) => visit_rule(r, visitor), [INFO] [stderr] 48 | SentenceClause(ref mut s) => visit_sentence(s, visitor) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/visitor.rs:64:5 [INFO] [stderr] | [INFO] [stderr] 64 | / match sentence { [INFO] [stderr] 65 | | &mut PropSentence(ref mut p) => visit_proposition(p, visitor), [INFO] [stderr] 66 | | &mut RelSentence(ref mut r) => visit_relation(r, visitor) [INFO] [stderr] 67 | | } [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] 64 | match *sentence { [INFO] [stderr] 65 | PropSentence(ref mut p) => visit_proposition(p, visitor), [INFO] [stderr] 66 | RelSentence(ref mut r) => visit_relation(r, visitor) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/visitor.rs:88:5 [INFO] [stderr] | [INFO] [stderr] 88 | / match literal { [INFO] [stderr] 89 | | &mut OrLit(ref mut or) => visit_or(or, visitor), [INFO] [stderr] 90 | | &mut NotLit(ref mut not) => visit_not(not, visitor), [INFO] [stderr] 91 | | &mut DistinctLit(ref mut distinct) => visit_distinct(distinct, visitor), [INFO] [stderr] 92 | | &mut RelLit(ref mut rel) => visit_relation(rel, visitor), [INFO] [stderr] 93 | | &mut PropLit(ref mut prop) => visit_proposition(prop, visitor) [INFO] [stderr] 94 | | } [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] 88 | match *literal { [INFO] [stderr] 89 | OrLit(ref mut or) => visit_or(or, visitor), [INFO] [stderr] 90 | NotLit(ref mut not) => visit_not(not, visitor), [INFO] [stderr] 91 | DistinctLit(ref mut distinct) => visit_distinct(distinct, visitor), [INFO] [stderr] 92 | RelLit(ref mut rel) => visit_relation(rel, visitor), [INFO] [stderr] 93 | PropLit(ref mut prop) => visit_proposition(prop, visitor) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/visitor.rs:100:5 [INFO] [stderr] | [INFO] [stderr] 100 | / match term { [INFO] [stderr] 101 | | &mut ConstTerm(ref mut c) => visit_constant(c, visitor), [INFO] [stderr] 102 | | &mut FuncTerm(ref mut f) => visit_function(f, visitor), [INFO] [stderr] 103 | | &mut VarTerm(ref mut v) => visit_variable(v, visitor) [INFO] [stderr] 104 | | } [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] 100 | match *term { [INFO] [stderr] 101 | ConstTerm(ref mut c) => visit_constant(c, visitor), [INFO] [stderr] 102 | FuncTerm(ref mut f) => visit_function(f, visitor), [INFO] [stderr] 103 | VarTerm(ref mut v) => visit_variable(v, visitor) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:68:9 [INFO] [stderr] | [INFO] [stderr] 68 | / match self { [INFO] [stderr] 69 | | &RuleClause(ref r) => Display::fmt(r, f), [INFO] [stderr] 70 | | &SentenceClause(ref s) => Display::fmt(s, f) [INFO] [stderr] 71 | | } [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 | RuleClause(ref r) => Display::fmt(r, f), [INFO] [stderr] 70 | SentenceClause(ref s) => Display::fmt(s, f) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:119:9 [INFO] [stderr] | [INFO] [stderr] 119 | / match self { [INFO] [stderr] 120 | | &PropSentence(ref p) => &p.name, [INFO] [stderr] 121 | | &RelSentence(ref r) => &r.name [INFO] [stderr] 122 | | } [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] 119 | match *self { [INFO] [stderr] 120 | PropSentence(ref p) => &p.name, [INFO] [stderr] 121 | RelSentence(ref r) => &r.name [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:149:9 [INFO] [stderr] | [INFO] [stderr] 149 | / match self { [INFO] [stderr] 150 | | &PropSentence(ref p) => Display::fmt(p, f), [INFO] [stderr] 151 | | &RelSentence(ref r) => Display::fmt(r, f) [INFO] [stderr] 152 | | } [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 *self { [INFO] [stderr] 150 | PropSentence(ref p) => Display::fmt(p, f), [INFO] [stderr] 151 | RelSentence(ref r) => Display::fmt(r, f) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/gdl.rs:807:36 [INFO] [stderr] | [INFO] [stderr] 807 | if repeat_value.len() >= 1usize { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!repeat_value.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: passing a unit value to a function [INFO] [stderr] --> src/gdl.rs:1013:61 [INFO] [stderr] | [INFO] [stderr] 1013 | Matched(pos, value) => Matched(pos, value), [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] 1013 | Matched(pos, value) => Matched(pos, ()), [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/gdl.rs:1075:1 [INFO] [stderr] | [INFO] [stderr] 1075 | / pub fn description<'input>(input: &'input str) -> ParseResult { [INFO] [stderr] 1076 | | let mut state = ParseState::new(); [INFO] [stderr] 1077 | | match parse_description(input, &mut state, 0) { [INFO] [stderr] 1078 | | Matched(pos, value) => { if pos == input.len() { return Ok(value) } } [INFO] [stderr] ... | [INFO] [stderr] 1085 | | expected: state.expected,}) [INFO] [stderr] 1086 | | } [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/gdl.rs:1077:5 [INFO] [stderr] | [INFO] [stderr] 1077 | / match parse_description(input, &mut state, 0) { [INFO] [stderr] 1078 | | Matched(pos, value) => { if pos == input.len() { return Ok(value) } } [INFO] [stderr] 1079 | | _ => { } [INFO] [stderr] 1080 | | } [INFO] [stderr] | |_____^ help: try this: `if let Matched(pos, value) = parse_description(input, &mut state, 0) { if pos == input.len() { return Ok(value) } }` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/visitor.rs:46:5 [INFO] [stderr] | [INFO] [stderr] 46 | / match clause { [INFO] [stderr] 47 | | &mut RuleClause(ref mut r) => visit_rule(r, visitor), [INFO] [stderr] 48 | | &mut SentenceClause(ref mut s) => visit_sentence(s, visitor) [INFO] [stderr] 49 | | } [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] 46 | match *clause { [INFO] [stderr] 47 | RuleClause(ref mut r) => visit_rule(r, visitor), [INFO] [stderr] 48 | SentenceClause(ref mut s) => visit_sentence(s, visitor) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/visitor.rs:64:5 [INFO] [stderr] | [INFO] [stderr] 64 | / match sentence { [INFO] [stderr] 65 | | &mut PropSentence(ref mut p) => visit_proposition(p, visitor), [INFO] [stderr] 66 | | &mut RelSentence(ref mut r) => visit_relation(r, visitor) [INFO] [stderr] 67 | | } [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] 64 | match *sentence { [INFO] [stderr] 65 | PropSentence(ref mut p) => visit_proposition(p, visitor), [INFO] [stderr] 66 | RelSentence(ref mut r) => visit_relation(r, visitor) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/visitor.rs:88:5 [INFO] [stderr] | [INFO] [stderr] 88 | / match literal { [INFO] [stderr] 89 | | &mut OrLit(ref mut or) => visit_or(or, visitor), [INFO] [stderr] 90 | | &mut NotLit(ref mut not) => visit_not(not, visitor), [INFO] [stderr] 91 | | &mut DistinctLit(ref mut distinct) => visit_distinct(distinct, visitor), [INFO] [stderr] 92 | | &mut RelLit(ref mut rel) => visit_relation(rel, visitor), [INFO] [stderr] 93 | | &mut PropLit(ref mut prop) => visit_proposition(prop, visitor) [INFO] [stderr] 94 | | } [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] 88 | match *literal { [INFO] [stderr] 89 | OrLit(ref mut or) => visit_or(or, visitor), [INFO] [stderr] 90 | NotLit(ref mut not) => visit_not(not, visitor), [INFO] [stderr] 91 | DistinctLit(ref mut distinct) => visit_distinct(distinct, visitor), [INFO] [stderr] 92 | RelLit(ref mut rel) => visit_relation(rel, visitor), [INFO] [stderr] 93 | PropLit(ref mut prop) => visit_proposition(prop, visitor) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/visitor.rs:100:5 [INFO] [stderr] | [INFO] [stderr] 100 | / match term { [INFO] [stderr] 101 | | &mut ConstTerm(ref mut c) => visit_constant(c, visitor), [INFO] [stderr] 102 | | &mut FuncTerm(ref mut f) => visit_function(f, visitor), [INFO] [stderr] 103 | | &mut VarTerm(ref mut v) => visit_variable(v, visitor) [INFO] [stderr] 104 | | } [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] 100 | match *term { [INFO] [stderr] 101 | ConstTerm(ref mut c) => visit_constant(c, visitor), [INFO] [stderr] 102 | FuncTerm(ref mut f) => visit_function(f, visitor), [INFO] [stderr] 103 | VarTerm(ref mut v) => visit_variable(v, visitor) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:168:9 [INFO] [stderr] | [INFO] [stderr] 168 | / match self { [INFO] [stderr] 169 | | &NotLit(ref n) => Display::fmt(n, f), [INFO] [stderr] 170 | | &OrLit(ref o) => Display::fmt(o, f), [INFO] [stderr] 171 | | &DistinctLit(ref d) => Display::fmt(d, f), [INFO] [stderr] 172 | | &PropLit(ref p) => Display::fmt(p, f), [INFO] [stderr] 173 | | &RelLit(ref r) => Display::fmt(r, f), [INFO] [stderr] 174 | | } [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] 168 | match *self { [INFO] [stderr] 169 | NotLit(ref n) => Display::fmt(n, f), [INFO] [stderr] 170 | OrLit(ref o) => Display::fmt(o, f), [INFO] [stderr] 171 | DistinctLit(ref d) => Display::fmt(d, f), [INFO] [stderr] 172 | PropLit(ref p) => Display::fmt(p, f), [INFO] [stderr] 173 | RelLit(ref r) => Display::fmt(r, f), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:68:9 [INFO] [stderr] | [INFO] [stderr] 68 | / match self { [INFO] [stderr] 69 | | &RuleClause(ref r) => Display::fmt(r, f), [INFO] [stderr] 70 | | &SentenceClause(ref s) => Display::fmt(s, f) [INFO] [stderr] 71 | | } [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 | RuleClause(ref r) => Display::fmt(r, f), [INFO] [stderr] 70 | SentenceClause(ref s) => Display::fmt(s, f) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:189:9 [INFO] [stderr] | [INFO] [stderr] 189 | / match self { [INFO] [stderr] 190 | | &VarTerm(ref v) => &v.name, [INFO] [stderr] 191 | | &FuncTerm(ref f) => &f.name, [INFO] [stderr] 192 | | &ConstTerm(ref c) => c [INFO] [stderr] 193 | | } [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] 189 | match *self { [INFO] [stderr] 190 | VarTerm(ref v) => &v.name, [INFO] [stderr] 191 | FuncTerm(ref f) => &f.name, [INFO] [stderr] 192 | ConstTerm(ref c) => c [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:199:9 [INFO] [stderr] | [INFO] [stderr] 199 | / match self { [INFO] [stderr] 200 | | &VarTerm(ref v) => Display::fmt(v, f), [INFO] [stderr] 201 | | &FuncTerm(ref func) => Display::fmt(func, f), [INFO] [stderr] 202 | | &ConstTerm(ref c) => Display::fmt(c, f) [INFO] [stderr] 203 | | } [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] 199 | match *self { [INFO] [stderr] 200 | VarTerm(ref v) => Display::fmt(v, f), [INFO] [stderr] 201 | FuncTerm(ref func) => Display::fmt(func, f), [INFO] [stderr] 202 | ConstTerm(ref c) => Display::fmt(c, f) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:119:9 [INFO] [stderr] | [INFO] [stderr] 119 | / match self { [INFO] [stderr] 120 | | &PropSentence(ref p) => &p.name, [INFO] [stderr] 121 | | &RelSentence(ref r) => &r.name [INFO] [stderr] 122 | | } [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] 119 | match *self { [INFO] [stderr] 120 | PropSentence(ref p) => &p.name, [INFO] [stderr] 121 | RelSentence(ref r) => &r.name [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:149:9 [INFO] [stderr] | [INFO] [stderr] 149 | / match self { [INFO] [stderr] 150 | | &PropSentence(ref p) => Display::fmt(p, f), [INFO] [stderr] 151 | | &RelSentence(ref r) => Display::fmt(r, f) [INFO] [stderr] 152 | | } [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 *self { [INFO] [stderr] 150 | PropSentence(ref p) => Display::fmt(p, f), [INFO] [stderr] 151 | RelSentence(ref r) => Display::fmt(r, f) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:168:9 [INFO] [stderr] | [INFO] [stderr] 168 | / match self { [INFO] [stderr] 169 | | &NotLit(ref n) => Display::fmt(n, f), [INFO] [stderr] 170 | | &OrLit(ref o) => Display::fmt(o, f), [INFO] [stderr] 171 | | &DistinctLit(ref d) => Display::fmt(d, f), [INFO] [stderr] 172 | | &PropLit(ref p) => Display::fmt(p, f), [INFO] [stderr] 173 | | &RelLit(ref r) => Display::fmt(r, f), [INFO] [stderr] 174 | | } [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] 168 | match *self { [INFO] [stderr] 169 | NotLit(ref n) => Display::fmt(n, f), [INFO] [stderr] 170 | OrLit(ref o) => Display::fmt(o, f), [INFO] [stderr] 171 | DistinctLit(ref d) => Display::fmt(d, f), [INFO] [stderr] 172 | PropLit(ref p) => Display::fmt(p, f), [INFO] [stderr] 173 | RelLit(ref r) => Display::fmt(r, f), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:189:9 [INFO] [stderr] | [INFO] [stderr] 189 | / match self { [INFO] [stderr] 190 | | &VarTerm(ref v) => &v.name, [INFO] [stderr] 191 | | &FuncTerm(ref f) => &f.name, [INFO] [stderr] 192 | | &ConstTerm(ref c) => c [INFO] [stderr] 193 | | } [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] 189 | match *self { [INFO] [stderr] 190 | VarTerm(ref v) => &v.name, [INFO] [stderr] 191 | FuncTerm(ref f) => &f.name, [INFO] [stderr] 192 | ConstTerm(ref c) => c [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:199:9 [INFO] [stderr] | [INFO] [stderr] 199 | / match self { [INFO] [stderr] 200 | | &VarTerm(ref v) => Display::fmt(v, f), [INFO] [stderr] 201 | | &FuncTerm(ref func) => Display::fmt(func, f), [INFO] [stderr] 202 | | &ConstTerm(ref c) => Display::fmt(c, f) [INFO] [stderr] 203 | | } [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] 199 | match *self { [INFO] [stderr] 200 | VarTerm(ref v) => Display::fmt(v, f), [INFO] [stderr] 201 | FuncTerm(ref func) => Display::fmt(func, f), [INFO] [stderr] 202 | ConstTerm(ref c) => Display::fmt(c, f) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> tests/test.rs:16:5 [INFO] [stderr] | [INFO] [stderr] 16 | f.unwrap().read_to_string(&mut gdl).ok().expect("Unable to read GDL file"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ok_expect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stderr] [INFO] [stderr] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> tests/test.rs:20:5 [INFO] [stderr] | [INFO] [stderr] 20 | f.unwrap().read_to_string(&mut json).ok().expect("Unable to read JSON file"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stderr] [INFO] [stderr] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> tests/test.rs:29:5 [INFO] [stderr] | [INFO] [stderr] 29 | f.unwrap().read_to_string(&mut gdl).ok().expect("Unable to read GDL file"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 2.97s [INFO] running `"docker" "inspect" "ff21a67ee7d6d2f202971ec3437bbb9f5075dad21a54b48dc876b77f5eb26cd3"` [INFO] running `"docker" "rm" "-f" "ff21a67ee7d6d2f202971ec3437bbb9f5075dad21a54b48dc876b77f5eb26cd3"` [INFO] [stdout] ff21a67ee7d6d2f202971ec3437bbb9f5075dad21a54b48dc876b77f5eb26cd3