[INFO] crate glit 0.1.3 is already in cache [INFO] extracting crate glit 0.1.3 into work/ex/clippy-test-run/sources/stable/reg/glit/0.1.3 [INFO] extracting crate glit 0.1.3 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/glit/0.1.3 [INFO] validating manifest of glit-0.1.3 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of glit-0.1.3 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing glit-0.1.3 [INFO] finished frobbing glit-0.1.3 [INFO] frobbed toml for glit-0.1.3 written to work/ex/clippy-test-run/sources/stable/reg/glit/0.1.3/Cargo.toml [INFO] started frobbing glit-0.1.3 [INFO] finished frobbing glit-0.1.3 [INFO] frobbed toml for glit-0.1.3 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/glit/0.1.3/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting glit-0.1.3 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-1/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/glit/0.1.3:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] c870bf29c49e1e2dfacc9db9b69ea00edabe47e6abe8e69b43849c4100513d2b [INFO] running `"docker" "start" "-a" "c870bf29c49e1e2dfacc9db9b69ea00edabe47e6abe8e69b43849c4100513d2b"` [INFO] [stderr] Checking clap v2.29.4 [INFO] [stderr] Checking glit v0.1.3 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/ast.rs:248:26 [INFO] [stderr] | [INFO] [stderr] 248 | Format { style: style, sub: Tree(sub) } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `style` [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/ast.rs:248:26 [INFO] [stderr] | [INFO] [stderr] 248 | Format { style: style, sub: Tree(sub) } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `style` [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/interpreter.rs:86:13 [INFO] [stderr] | [INFO] [stderr] 86 | stats: stats, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `stats` [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/interpreter.rs:86:13 [INFO] [stderr] | [INFO] [stderr] 86 | stats: stats, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `stats` [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] | [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: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/main.rs:132:14 [INFO] [stderr] | [INFO] [stderr] 132 | const DESC: &'static str = "Glitter is a git repository status pretty-printing utility, useful for [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: All variants have the same prefix: `Bad` [INFO] [stderr] --> src/main.rs:184:1 [INFO] [stderr] | [INFO] [stderr] 184 | / enum ProgramErr<'a> { [INFO] [stderr] 185 | | BadPath(Box<&'a str>), [INFO] [stderr] 186 | | BadFormat(Box<&'a str>), [INFO] [stderr] 187 | | BadParse(Box<&'a str>, String), [INFO] [stderr] 188 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::enum_variant_names)] on by default [INFO] [stderr] = help: remove the prefixes and use full paths to the variants instead of glob imports [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/main.rs:132:14 [INFO] [stderr] | [INFO] [stderr] 132 | const DESC: &'static str = "Glitter is a git repository status pretty-printing utility, useful for [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: All variants have the same prefix: `Bad` [INFO] [stderr] --> src/main.rs:184:1 [INFO] [stderr] | [INFO] [stderr] 184 | / enum ProgramErr<'a> { [INFO] [stderr] 185 | | BadPath(Box<&'a str>), [INFO] [stderr] 186 | | BadFormat(Box<&'a str>), [INFO] [stderr] 187 | | BadParse(Box<&'a str>, String), [INFO] [stderr] 188 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::enum_variant_names)] on by default [INFO] [stderr] = help: remove the prefixes and use full paths to the variants instead of glob imports [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:33:23 [INFO] [stderr] | [INFO] [stderr] 33 | let literal = match self { [INFO] [stderr] | _______________________^ [INFO] [stderr] 34 | | &Name::Stashed => "h", [INFO] [stderr] 35 | | &Name::Branch => "b", [INFO] [stderr] 36 | | &Name::Remote => "B", [INFO] [stderr] ... | [INFO] [stderr] 48 | | &Name::Quote => "\'", [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] 33 | let literal = match *self { [INFO] [stderr] 34 | Name::Stashed => "h", [INFO] [stderr] 35 | Name::Branch => "b", [INFO] [stderr] 36 | Name::Remote => "B", [INFO] [stderr] 37 | Name::Ahead => "+", [INFO] [stderr] 38 | Name::Behind => "-", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:119:23 [INFO] [stderr] | [INFO] [stderr] 119 | let literal = match self { [INFO] [stderr] | _______________________^ [INFO] [stderr] 120 | | &Style::Reset => "~".to_string(), [INFO] [stderr] 121 | | &Style::Bold => "*".to_string(), [INFO] [stderr] 122 | | &Style::Underline => "_".to_string(), [INFO] [stderr] ... | [INFO] [stderr] 142 | | &Style::Number(n) => n.to_string(), [INFO] [stderr] 143 | | }; [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 | let literal = match *self { [INFO] [stderr] 120 | Style::Reset => "~".to_string(), [INFO] [stderr] 121 | Style::Bold => "*".to_string(), [INFO] [stderr] 122 | Style::Underline => "_".to_string(), [INFO] [stderr] 123 | Style::Italic => "i".to_string(), [INFO] [stderr] 124 | Style::FgRed => "r".to_string(), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:277:9 [INFO] [stderr] | [INFO] [stderr] 277 | / match self { [INFO] [stderr] 278 | | &Expression::Named { ref name, ref sub } => { [INFO] [stderr] 279 | | write!(f, "\\{}", name)?; [INFO] [stderr] 280 | | if sub.0.is_empty() { [INFO] [stderr] ... | [INFO] [stderr] 300 | | &Expression::Literal(ref string) => write!(f, "'{}'", string), [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] 277 | match *self { [INFO] [stderr] 278 | Expression::Named { ref name, ref sub } => { [INFO] [stderr] 279 | write!(f, "\\{}", name)?; [INFO] [stderr] 280 | if sub.0.is_empty() { [INFO] [stderr] 281 | Ok(()) [INFO] [stderr] 282 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/interpreter.rs:110:19 [INFO] [stderr] | [INFO] [stderr] 110 | let val = match exp { [INFO] [stderr] | ___________________^ [INFO] [stderr] 111 | | &Named { ref name, ref sub } => self.interpret_named(name, sub, ctx)?, [INFO] [stderr] 112 | | &Group { ref l, ref r, ref sub } => { [INFO] [stderr] 113 | | let sub = self.interpret_tree(&sub, ctx)?; [INFO] [stderr] ... | [INFO] [stderr] 125 | | &Format { ref style, ref sub } => self.interpret_format(style, sub, ctx)?, [INFO] [stderr] 126 | | }; [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] 110 | let val = match *exp { [INFO] [stderr] 111 | Named { ref name, ref sub } => self.interpret_named(name, sub, ctx)?, [INFO] [stderr] 112 | Group { ref l, ref r, ref sub } => { [INFO] [stderr] 113 | let sub = self.interpret_tree(&sub, ctx)?; [INFO] [stderr] 114 | if sub.is_empty() { [INFO] [stderr] 115 | vec![] [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/interpreter.rs:177:37 [INFO] [stderr] | [INFO] [stderr] 177 | fn interpret_named(&self, name: &Name, sub: &Tree, ctx: ansi_term::Style) -> State { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Name` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/interpreter.rs:179:9 [INFO] [stderr] | [INFO] [stderr] 179 | / match name { [INFO] [stderr] 180 | | &Branch => self.optional_prefix(sub, self.stats.branch.clone(), "", ctx), [INFO] [stderr] 181 | | &Remote => self.optional_prefix(sub, self.stats.remote.clone(), "", ctx), [INFO] [stderr] 182 | | &Ahead => self.optional_prefix(sub, self.stats.ahead, "+", ctx), [INFO] [stderr] ... | [INFO] [stderr] 194 | | &Quote => Ok(vec![self.interpret_literal(sub, "'", ctx)?]), [INFO] [stderr] 195 | | } [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 *name { [INFO] [stderr] 180 | Branch => self.optional_prefix(sub, self.stats.branch.clone(), "", ctx), [INFO] [stderr] 181 | Remote => self.optional_prefix(sub, self.stats.remote.clone(), "", ctx), [INFO] [stderr] 182 | Ahead => self.optional_prefix(sub, self.stats.ahead, "+", ctx), [INFO] [stderr] 183 | Behind => self.optional_prefix(sub, self.stats.behind, "-", ctx), [INFO] [stderr] 184 | Conflict => self.optional_prefix(sub, self.stats.conflicts, "U", ctx), [INFO] [stderr] ... [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/interpreter.rs:198:39 [INFO] [stderr] | [INFO] [stderr] 198 | fn interpret_format(&self, style: &Vec