[INFO] crate lapp 0.4.0 is already in cache [INFO] extracting crate lapp 0.4.0 into work/ex/clippy-test-run/sources/stable/reg/lapp/0.4.0 [INFO] extracting crate lapp 0.4.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/lapp/0.4.0 [INFO] validating manifest of lapp-0.4.0 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 lapp-0.4.0 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 lapp-0.4.0 [INFO] finished frobbing lapp-0.4.0 [INFO] frobbed toml for lapp-0.4.0 written to work/ex/clippy-test-run/sources/stable/reg/lapp/0.4.0/Cargo.toml [INFO] started frobbing lapp-0.4.0 [INFO] finished frobbing lapp-0.4.0 [INFO] frobbed toml for lapp-0.4.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/lapp/0.4.0/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 lapp-0.4.0 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/lapp/0.4.0:/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] ae6decff477eec941ec8bfc775526987d81dd01cb5a075db19cd662c54cfdd3d [INFO] running `"docker" "start" "-a" "ae6decff477eec941ec8bfc775526987d81dd01cb5a075db19cd662c54cfdd3d"` [INFO] [stderr] Checking lapp v0.4.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:75:41 [INFO] [stderr] | [INFO] [stderr] 75 | Args{flags: Vec::new(), pos: 0, text: text, varargs: false, user_types: Vec::new(), istart: 1} [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `text` [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:843:20 [INFO] [stderr] | [INFO] [stderr] 843 | Ok(Hex{value: value}) [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `value` [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:75:41 [INFO] [stderr] | [INFO] [stderr] 75 | Args{flags: Vec::new(), pos: 0, text: text, varargs: false, user_types: Vec::new(), istart: 1} [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `text` [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:843:20 [INFO] [stderr] | [INFO] [stderr] 843 | Ok(Hex{value: value}) [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `value` [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: this is an `else if` but the formatting might hide it [INFO] [stderr] --> src/types.rs:256:10 [INFO] [stderr] | [INFO] [stderr] 256 | } else [INFO] [stderr] | __________^ [INFO] [stderr] 257 | | if firstc == '\'' { // strip quotes, _definitely_ a string [INFO] [stderr] | |________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::suspicious_else_formatting)] on by default [INFO] [stderr] = note: to remove this lint, remove the `else` or remove the new line between `else` and `if` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_else_formatting [INFO] [stderr] [INFO] [stderr] warning: this is an `else if` but the formatting might hide it [INFO] [stderr] --> src/types.rs:264:10 [INFO] [stderr] | [INFO] [stderr] 264 | } else [INFO] [stderr] | __________^ [INFO] [stderr] 265 | | if let Type::Str = *dtype { [INFO] [stderr] | |________^ [INFO] [stderr] | [INFO] [stderr] = note: to remove this lint, remove the `else` or remove the new line between `else` and `if` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_else_formatting [INFO] [stderr] [INFO] [stderr] warning: this is an `else if` but the formatting might hide it [INFO] [stderr] --> src/types.rs:267:10 [INFO] [stderr] | [INFO] [stderr] 267 | } else [INFO] [stderr] | __________^ [INFO] [stderr] 268 | | if val == "stdin" { [INFO] [stderr] | |________^ [INFO] [stderr] | [INFO] [stderr] = note: to remove this lint, remove the `else` or remove the new line between `else` and `if` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_else_formatting [INFO] [stderr] [INFO] [stderr] warning: this is an `else if` but the formatting might hide it [INFO] [stderr] --> src/types.rs:270:10 [INFO] [stderr] | [INFO] [stderr] 270 | } else [INFO] [stderr] | __________^ [INFO] [stderr] 271 | | if val == "stdout" { [INFO] [stderr] | |________^ [INFO] [stderr] | [INFO] [stderr] = note: to remove this lint, remove the `else` or remove the new line between `else` and `if` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_else_formatting [INFO] [stderr] [INFO] [stderr] warning: this is an `else if` but the formatting might hide it [INFO] [stderr] --> src/types.rs:273:10 [INFO] [stderr] | [INFO] [stderr] 273 | } else [INFO] [stderr] | __________^ [INFO] [stderr] 274 | | if let Type::Path = *dtype { [INFO] [stderr] | |________^ [INFO] [stderr] | [INFO] [stderr] = note: to remove this lint, remove the `else` or remove the new line between `else` and `if` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_else_formatting [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/flag.rs:95:16 [INFO] [stderr] | [INFO] [stderr] 95 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 96 | | if let Value::Arr(ref mut arr) = self.value { [INFO] [stderr] 97 | | arr.push(Box::new(v)); [INFO] [stderr] 98 | | } [INFO] [stderr] 99 | | } [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] 95 | } else if let Value::Arr(ref mut arr) = self.value { [INFO] [stderr] 96 | arr.push(Box::new(v)); [INFO] [stderr] 97 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this is an `else if` but the formatting might hide it [INFO] [stderr] --> src/flag.rs:114:18 [INFO] [stderr] | [INFO] [stderr] 114 | } else [INFO] [stderr] | __________________^ [INFO] [stderr] 115 | | if ! self.is_multiple { [INFO] [stderr] | |________________^ [INFO] [stderr] | [INFO] [stderr] = note: to remove this lint, remove the `else` or remove the new line between `else` and `if` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_else_formatting [INFO] [stderr] [INFO] [stderr] warning: this is an `else if` but the formatting might hide it [INFO] [stderr] --> src/flag.rs:159:10 [INFO] [stderr] | [INFO] [stderr] 159 | } else [INFO] [stderr] | __________^ [INFO] [stderr] 160 | | if self.is_multiple { [INFO] [stderr] | |________^ [INFO] [stderr] | [INFO] [stderr] = note: to remove this lint, remove the `else` or remove the new line between `else` and `if` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_else_formatting [INFO] [stderr] [INFO] [stderr] warning: this is an `else if` but the formatting might hide it [INFO] [stderr] --> src/lib.rs:217:14 [INFO] [stderr] | [INFO] [stderr] 217 | } else [INFO] [stderr] | ______________^ [INFO] [stderr] 218 | | if starts_with(&mut slice, "<") { // positional argument [INFO] [stderr] | |____________^ [INFO] [stderr] | [INFO] [stderr] = note: to remove this lint, remove the `else` or remove the new line between `else` and `if` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_else_formatting [INFO] [stderr] [INFO] [stderr] warning: this is an `else if` but the formatting might hide it [INFO] [stderr] --> src/lib.rs:368:14 [INFO] [stderr] | [INFO] [stderr] 368 | } else [INFO] [stderr] | ______________^ [INFO] [stderr] 369 | | if parsing && starts_with(&mut s,"-") { // short flag [INFO] [stderr] | |____________^ [INFO] [stderr] | [INFO] [stderr] = note: to remove this lint, remove the `else` or remove the new line between `else` and `if` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_else_formatting [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/lib.rs:459:20 [INFO] [stderr] | [INFO] [stderr] 459 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 460 | | if let Value::Error(ref s) = flag.value { [INFO] [stderr] 461 | | self.bad_flag(name,s) [INFO] [stderr] 462 | | } else { [INFO] [stderr] 463 | | Ok(flag) [INFO] [stderr] 464 | | } [INFO] [stderr] 465 | | } [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] 459 | } else if let Value::Error(ref s) = flag.value { [INFO] [stderr] 460 | self.bad_flag(name,s) [INFO] [stderr] 461 | } else { [INFO] [stderr] 462 | Ok(flag) [INFO] [stderr] 463 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'std::env::home_dir': This function's behavior is unexpected and probably not what you want. Consider using the home_dir function from https://crates.io/crates/dirs instead. [INFO] [stderr] --> src/types.rs:276:17 [INFO] [stderr] | [INFO] [stderr] 276 | env::home_dir().unwrap().join(&val[2..]) [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: this is an `else if` but the formatting might hide it [INFO] [stderr] --> src/types.rs:256:10 [INFO] [stderr] | [INFO] [stderr] 256 | } else [INFO] [stderr] | __________^ [INFO] [stderr] 257 | | if firstc == '\'' { // strip quotes, _definitely_ a string [INFO] [stderr] | |________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::suspicious_else_formatting)] on by default [INFO] [stderr] = note: to remove this lint, remove the `else` or remove the new line between `else` and `if` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_else_formatting [INFO] [stderr] [INFO] [stderr] warning: this is an `else if` but the formatting might hide it [INFO] [stderr] --> src/types.rs:264:10 [INFO] [stderr] | [INFO] [stderr] 264 | } else [INFO] [stderr] | __________^ [INFO] [stderr] 265 | | if let Type::Str = *dtype { [INFO] [stderr] | |________^ [INFO] [stderr] | [INFO] [stderr] = note: to remove this lint, remove the `else` or remove the new line between `else` and `if` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_else_formatting [INFO] [stderr] [INFO] [stderr] warning: this is an `else if` but the formatting might hide it [INFO] [stderr] --> src/types.rs:267:10 [INFO] [stderr] | [INFO] [stderr] 267 | } else [INFO] [stderr] | __________^ [INFO] [stderr] 268 | | if val == "stdin" { [INFO] [stderr] | |________^ [INFO] [stderr] | [INFO] [stderr] = note: to remove this lint, remove the `else` or remove the new line between `else` and `if` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_else_formatting [INFO] [stderr] [INFO] [stderr] warning: this is an `else if` but the formatting might hide it [INFO] [stderr] --> src/types.rs:270:10 [INFO] [stderr] | [INFO] [stderr] 270 | } else [INFO] [stderr] | __________^ [INFO] [stderr] 271 | | if val == "stdout" { [INFO] [stderr] | |________^ [INFO] [stderr] | [INFO] [stderr] = note: to remove this lint, remove the `else` or remove the new line between `else` and `if` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_else_formatting [INFO] [stderr] [INFO] [stderr] warning: this is an `else if` but the formatting might hide it [INFO] [stderr] --> src/types.rs:273:10 [INFO] [stderr] | [INFO] [stderr] 273 | } else [INFO] [stderr] | __________^ [INFO] [stderr] 274 | | if let Type::Path = *dtype { [INFO] [stderr] | |________^ [INFO] [stderr] | [INFO] [stderr] = note: to remove this lint, remove the `else` or remove the new line between `else` and `if` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_else_formatting [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/flag.rs:95:16 [INFO] [stderr] | [INFO] [stderr] 95 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 96 | | if let Value::Arr(ref mut arr) = self.value { [INFO] [stderr] 97 | | arr.push(Box::new(v)); [INFO] [stderr] 98 | | } [INFO] [stderr] 99 | | } [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] 95 | } else if let Value::Arr(ref mut arr) = self.value { [INFO] [stderr] 96 | arr.push(Box::new(v)); [INFO] [stderr] 97 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this is an `else if` but the formatting might hide it [INFO] [stderr] --> src/flag.rs:114:18 [INFO] [stderr] | [INFO] [stderr] 114 | } else [INFO] [stderr] | __________________^ [INFO] [stderr] 115 | | if ! self.is_multiple { [INFO] [stderr] | |________________^ [INFO] [stderr] | [INFO] [stderr] = note: to remove this lint, remove the `else` or remove the new line between `else` and `if` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_else_formatting [INFO] [stderr] [INFO] [stderr] warning: this is an `else if` but the formatting might hide it [INFO] [stderr] --> src/flag.rs:159:10 [INFO] [stderr] | [INFO] [stderr] 159 | } else [INFO] [stderr] | __________^ [INFO] [stderr] 160 | | if self.is_multiple { [INFO] [stderr] | |________^ [INFO] [stderr] | [INFO] [stderr] = note: to remove this lint, remove the `else` or remove the new line between `else` and `if` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_else_formatting [INFO] [stderr] [INFO] [stderr] warning: this is an `else if` but the formatting might hide it [INFO] [stderr] --> src/lib.rs:217:14 [INFO] [stderr] | [INFO] [stderr] 217 | } else [INFO] [stderr] | ______________^ [INFO] [stderr] 218 | | if starts_with(&mut slice, "<") { // positional argument [INFO] [stderr] | |____________^ [INFO] [stderr] | [INFO] [stderr] = note: to remove this lint, remove the `else` or remove the new line between `else` and `if` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_else_formatting [INFO] [stderr] [INFO] [stderr] warning: this is an `else if` but the formatting might hide it [INFO] [stderr] --> src/lib.rs:368:14 [INFO] [stderr] | [INFO] [stderr] 368 | } else [INFO] [stderr] | ______________^ [INFO] [stderr] 369 | | if parsing && starts_with(&mut s,"-") { // short flag [INFO] [stderr] | |____________^ [INFO] [stderr] | [INFO] [stderr] = note: to remove this lint, remove the `else` or remove the new line between `else` and `if` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_else_formatting [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/lib.rs:459:20 [INFO] [stderr] | [INFO] [stderr] 459 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 460 | | if let Value::Error(ref s) = flag.value { [INFO] [stderr] 461 | | self.bad_flag(name,s) [INFO] [stderr] 462 | | } else { [INFO] [stderr] 463 | | Ok(flag) [INFO] [stderr] 464 | | } [INFO] [stderr] 465 | | } [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] 459 | } else if let Value::Error(ref s) = flag.value { [INFO] [stderr] 460 | self.bad_flag(name,s) [INFO] [stderr] 461 | } else { [INFO] [stderr] 462 | Ok(flag) [INFO] [stderr] 463 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/lib.rs:695:20 [INFO] [stderr] | [INFO] [stderr] 695 | const SIMPLE: &'static str = " [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: use of deprecated item 'std::env::home_dir': This function's behavior is unexpected and probably not what you want. Consider using the home_dir function from https://crates.io/crates/dirs instead. [INFO] [stderr] --> src/types.rs:276:17 [INFO] [stderr] | [INFO] [stderr] 276 | env::home_dir().unwrap().join(&val[2..]) [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/strutil.rs:4:57 [INFO] [stderr] | [INFO] [stderr] 4 | let nxt = slice.find(|c: char| ! c.is_whitespace()).unwrap_or(slice.len()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| slice.len())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/strutil.rs:8:18 [INFO] [stderr] | [INFO] [stderr] 8 | pub fn grab_word<'a>(pslice: &mut &str) -> String { [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::extra_unused_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/strutil.rs:9:56 [INFO] [stderr] | [INFO] [stderr] 9 | let nxt = pslice.find(|c: char| c.is_whitespace()).unwrap_or(pslice.len()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| pslice.len())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `for` loop [INFO] [stderr] --> src/strutil.rs:66:32 [INFO] [stderr] | [INFO] [stderr] 66 | while let Some(line) = lines.next() { [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `for line in lines { .. }` [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: length comparison to zero [INFO] [stderr] --> src/lib.rs:114:12 [INFO] [stderr] | [INFO] [stderr] 114 | if struct_name.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!struct_name.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: useless use of `format!` [INFO] [stderr] --> src/lib.rs:128:21 [INFO] [stderr] | [INFO] [stderr] 128 | res += &format!("\t\t}},args)\n\t}}\n}}\n\n"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"\t\t}},args)\n\t}}\n}}\n\n".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_err()` [INFO] [stderr] --> src/lib.rs:171:16 [INFO] [stderr] | [INFO] [stderr] 171 | if let Err(_) = self.flags_by_long("help") { [INFO] [stderr] | _________- ^^^^^^ [INFO] [stderr] 172 | | self.parse_spec_line(" -h,--help this help").unwrap(); [INFO] [stderr] 173 | | } [INFO] [stderr] | |_________- help: try this: `if self.flags_by_long("help").is_err()` [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/lib.rs:210:22 [INFO] [stderr] | [INFO] [stderr] 210 | .unwrap_or(slice.len()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| slice.len())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:214:20 [INFO] [stderr] | [INFO] [stderr] 214 | if slice.len() > 0 && ! (slice.starts_with(" ") || slice.starts_with(".")) { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!slice.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: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:214:60 [INFO] [stderr] | [INFO] [stderr] 214 | if slice.len() > 0 && ! (slice.starts_with(" ") || slice.starts_with(".")) { [INFO] [stderr] | ^^^ help: try using a char instead: `' '` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:214:86 [INFO] [stderr] | [INFO] [stderr] 214 | if slice.len() > 0 && ! (slice.starts_with(" ") || slice.starts_with(".")) { [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/lib.rs:220:17 [INFO] [stderr] | [INFO] [stderr] 220 | self.pos = self.pos + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.pos += 1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:245:24 [INFO] [stderr] | [INFO] [stderr] 245 | if rest.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `rest.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: length comparison to zero [INFO] [stderr] --> src/lib.rs:291:16 [INFO] [stderr] | [INFO] [stderr] 291 | if slice.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!slice.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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:308:21 [INFO] [stderr] | [INFO] [stderr] 308 | .next().ok_or(LappError(format!("no long flag '{}'",s))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| LappError(format!("no long flag '{}'",s)))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: called `filter(p).next()` on an `Iterator`. This is more succinctly expressed by calling `.find(p)` instead. [INFO] [stderr] --> src/lib.rs:306:9 [INFO] [stderr] | [INFO] [stderr] 306 | / self.flags.iter_mut() [INFO] [stderr] 307 | | .filter(|&ref f| f.long == s) [INFO] [stderr] 308 | | .next().ok_or(LappError(format!("no long flag '{}'",s))) [INFO] [stderr] | |___________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::filter_next)] on by default [INFO] [stderr] = note: replace `filter(|&ref f| f.long == s).next()` with `find(|&ref f| f.long == s)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_next [INFO] [stderr] [INFO] [stderr] warning: this pattern takes a reference on something that is being de-referenced [INFO] [stderr] --> src/lib.rs:307:22 [INFO] [stderr] | [INFO] [stderr] 307 | .filter(|&ref f| f.long == s) [INFO] [stderr] | ^^^^^^ help: try removing the `&ref` part and just keep: `f` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_borrowed_reference)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:314:21 [INFO] [stderr] | [INFO] [stderr] 314 | .next().ok_or(LappError(format!("no long flag '{}'",s))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| LappError(format!("no long flag '{}'",s)))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: called `filter(p).next()` on an `Iterator`. This is more succinctly expressed by calling `.find(p)` instead. [INFO] [stderr] --> src/lib.rs:312:9 [INFO] [stderr] | [INFO] [stderr] 312 | / self.flags.iter() [INFO] [stderr] 313 | | .filter(|&f| f.long == s) [INFO] [stderr] 314 | | .next().ok_or(LappError(format!("no long flag '{}'",s))) [INFO] [stderr] | |___________________^ [INFO] [stderr] | [INFO] [stderr] = note: replace `filter(|&f| f.long == s).next()` with `find(|&f| f.long == s)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_next [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:320:21 [INFO] [stderr] | [INFO] [stderr] 320 | .next().ok_or(LappError(format!("no short flag '{}'",ch))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| LappError(format!("no short flag '{}'",ch)))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: called `filter(p).next()` on an `Iterator`. This is more succinctly expressed by calling `.find(p)` instead. [INFO] [stderr] --> src/lib.rs:318:9 [INFO] [stderr] | [INFO] [stderr] 318 | / self.flags.iter_mut() [INFO] [stderr] 319 | | .filter(|&ref f| f.short == ch) [INFO] [stderr] 320 | | .next().ok_or(LappError(format!("no short flag '{}'",ch))) [INFO] [stderr] | |___________________^ [INFO] [stderr] | [INFO] [stderr] = note: replace `filter(|&ref f| f.short == ch).next()` with `find(|&ref f| f.short == ch)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_next [INFO] [stderr] [INFO] [stderr] warning: this pattern takes a reference on something that is being de-referenced [INFO] [stderr] --> src/lib.rs:319:22 [INFO] [stderr] | [INFO] [stderr] 319 | .filter(|&ref f| f.short == ch) [INFO] [stderr] | ^^^^^^ help: try removing the `&ref` part and just keep: `f` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:326:21 [INFO] [stderr] | [INFO] [stderr] 326 | .next().ok_or(LappError(format!("no arg #{}",pos))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| LappError(format!("no arg #{}",pos)))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: called `filter(p).next()` on an `Iterator`. This is more succinctly expressed by calling `.find(p)` instead. [INFO] [stderr] --> src/lib.rs:324:9 [INFO] [stderr] | [INFO] [stderr] 324 | / self.flags.iter_mut() [INFO] [stderr] 325 | | .filter(|&ref f| f.pos == pos) [INFO] [stderr] 326 | | .next().ok_or(LappError(format!("no arg #{}",pos))) [INFO] [stderr] | |___________________^ [INFO] [stderr] | [INFO] [stderr] = note: replace `filter(|&ref f| f.pos == pos).next()` with `find(|&ref f| f.pos == pos)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_next [INFO] [stderr] [INFO] [stderr] warning: this pattern takes a reference on something that is being de-referenced [INFO] [stderr] --> src/lib.rs:325:22 [INFO] [stderr] | [INFO] [stderr] 325 | .filter(|&ref f| f.pos == pos) [INFO] [stderr] | ^^^^^^ help: try removing the `&ref` part and just keep: `f` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/lib.rs:493:12 [INFO] [stderr] | [INFO] [stderr] 493 | / if flag.value.is_none() { [INFO] [stderr] 494 | | false [INFO] [stderr] 495 | | } else { [INFO] [stderr] 496 | | true [INFO] [stderr] 497 | | } [INFO] [stderr] | |_____________^ help: you can reduce it to: `!flag.value.is_none()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:604:12 [INFO] [stderr] | [INFO] [stderr] 604 | if arr.len() == 0 { return Ok(arr); } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `arr.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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/lib.rs:606:13 [INFO] [stderr] | [INFO] [stderr] 606 | let ref v = *(arr[0]); [INFO] [stderr] | ----^^^^^------------- help: try: `let v = &(*(arr[0]));` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> examples/basic.rs:20:9 [INFO] [stderr] | [INFO] [stderr] 20 | write!(outf,"{}\n",line)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/strutil.rs:4:57 [INFO] [stderr] | [INFO] [stderr] 4 | let nxt = slice.find(|c: char| ! c.is_whitespace()).unwrap_or(slice.len()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| slice.len())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/strutil.rs:8:18 [INFO] [stderr] | [INFO] [stderr] 8 | pub fn grab_word<'a>(pslice: &mut &str) -> String { [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::extra_unused_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/strutil.rs:9:56 [INFO] [stderr] | [INFO] [stderr] 9 | let nxt = pslice.find(|c: char| c.is_whitespace()).unwrap_or(pslice.len()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| pslice.len())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `for` loop [INFO] [stderr] --> src/strutil.rs:66:32 [INFO] [stderr] | [INFO] [stderr] 66 | while let Some(line) = lines.next() { [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `for line in lines { .. }` [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] | [INFO] [stderr] = note: #[warn(clippy::write_with_newline)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:114:12 [INFO] [stderr] | [INFO] [stderr] 114 | if struct_name.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!struct_name.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: useless use of `format!` [INFO] [stderr] --> src/lib.rs:128:21 [INFO] [stderr] | [INFO] [stderr] 128 | res += &format!("\t\t}},args)\n\t}}\n}}\n\n"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"\t\t}},args)\n\t}}\n}}\n\n".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_err()` [INFO] [stderr] --> src/lib.rs:171:16 [INFO] [stderr] | [INFO] [stderr] 171 | if let Err(_) = self.flags_by_long("help") { [INFO] [stderr] | _________- ^^^^^^ [INFO] [stderr] 172 | | self.parse_spec_line(" -h,--help this help").unwrap(); [INFO] [stderr] 173 | | } [INFO] [stderr] | |_________- help: try this: `if self.flags_by_long("help").is_err()` [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/lib.rs:210:22 [INFO] [stderr] | [INFO] [stderr] 210 | .unwrap_or(slice.len()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| slice.len())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:214:20 [INFO] [stderr] | [INFO] [stderr] 214 | if slice.len() > 0 && ! (slice.starts_with(" ") || slice.starts_with(".")) { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!slice.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: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:214:60 [INFO] [stderr] | [INFO] [stderr] 214 | if slice.len() > 0 && ! (slice.starts_with(" ") || slice.starts_with(".")) { [INFO] [stderr] | ^^^ help: try using a char instead: `' '` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:214:86 [INFO] [stderr] | [INFO] [stderr] 214 | if slice.len() > 0 && ! (slice.starts_with(" ") || slice.starts_with(".")) { [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/lib.rs:220:17 [INFO] [stderr] | [INFO] [stderr] 220 | self.pos = self.pos + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.pos += 1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:245:24 [INFO] [stderr] | [INFO] [stderr] 245 | if rest.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `rest.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: length comparison to zero [INFO] [stderr] --> src/lib.rs:291:16 [INFO] [stderr] | [INFO] [stderr] 291 | if slice.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!slice.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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:308:21 [INFO] [stderr] | [INFO] [stderr] 308 | .next().ok_or(LappError(format!("no long flag '{}'",s))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| LappError(format!("no long flag '{}'",s)))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: called `filter(p).next()` on an `Iterator`. This is more succinctly expressed by calling `.find(p)` instead. [INFO] [stderr] --> src/lib.rs:306:9 [INFO] [stderr] | [INFO] [stderr] 306 | / self.flags.iter_mut() [INFO] [stderr] 307 | | .filter(|&ref f| f.long == s) [INFO] [stderr] 308 | | .next().ok_or(LappError(format!("no long flag '{}'",s))) [INFO] [stderr] | |___________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::filter_next)] on by default [INFO] [stderr] = note: replace `filter(|&ref f| f.long == s).next()` with `find(|&ref f| f.long == s)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_next [INFO] [stderr] [INFO] [stderr] warning: this pattern takes a reference on something that is being de-referenced [INFO] [stderr] --> src/lib.rs:307:22 [INFO] [stderr] | [INFO] [stderr] 307 | .filter(|&ref f| f.long == s) [INFO] [stderr] | ^^^^^^ help: try removing the `&ref` part and just keep: `f` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_borrowed_reference)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:314:21 [INFO] [stderr] | [INFO] [stderr] 314 | .next().ok_or(LappError(format!("no long flag '{}'",s))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| LappError(format!("no long flag '{}'",s)))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: called `filter(p).next()` on an `Iterator`. This is more succinctly expressed by calling `.find(p)` instead. [INFO] [stderr] --> src/lib.rs:312:9 [INFO] [stderr] | [INFO] [stderr] 312 | / self.flags.iter() [INFO] [stderr] 313 | | .filter(|&f| f.long == s) [INFO] [stderr] 314 | | .next().ok_or(LappError(format!("no long flag '{}'",s))) [INFO] [stderr] | |___________________^ [INFO] [stderr] | [INFO] [stderr] = note: replace `filter(|&f| f.long == s).next()` with `find(|&f| f.long == s)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_next [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:320:21 [INFO] [stderr] | [INFO] [stderr] 320 | .next().ok_or(LappError(format!("no short flag '{}'",ch))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| LappError(format!("no short flag '{}'",ch)))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: called `filter(p).next()` on an `Iterator`. This is more succinctly expressed by calling `.find(p)` instead. [INFO] [stderr] --> src/lib.rs:318:9 [INFO] [stderr] | [INFO] [stderr] 318 | / self.flags.iter_mut() [INFO] [stderr] 319 | | .filter(|&ref f| f.short == ch) [INFO] [stderr] 320 | | .next().ok_or(LappError(format!("no short flag '{}'",ch))) [INFO] [stderr] | |___________________^ [INFO] [stderr] | [INFO] [stderr] = note: replace `filter(|&ref f| f.short == ch).next()` with `find(|&ref f| f.short == ch)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_next [INFO] [stderr] [INFO] [stderr] warning: this pattern takes a reference on something that is being de-referenced [INFO] [stderr] --> src/lib.rs:319:22 [INFO] [stderr] | [INFO] [stderr] 319 | .filter(|&ref f| f.short == ch) [INFO] [stderr] | ^^^^^^ help: try removing the `&ref` part and just keep: `f` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:326:21 [INFO] [stderr] | [INFO] [stderr] 326 | .next().ok_or(LappError(format!("no arg #{}",pos))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| LappError(format!("no arg #{}",pos)))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: called `filter(p).next()` on an `Iterator`. This is more succinctly expressed by calling `.find(p)` instead. [INFO] [stderr] --> src/lib.rs:324:9 [INFO] [stderr] | [INFO] [stderr] 324 | / self.flags.iter_mut() [INFO] [stderr] 325 | | .filter(|&ref f| f.pos == pos) [INFO] [stderr] 326 | | .next().ok_or(LappError(format!("no arg #{}",pos))) [INFO] [stderr] | |___________________^ [INFO] [stderr] | [INFO] [stderr] = note: replace `filter(|&ref f| f.pos == pos).next()` with `find(|&ref f| f.pos == pos)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_next [INFO] [stderr] [INFO] [stderr] warning: this pattern takes a reference on something that is being de-referenced [INFO] [stderr] --> src/lib.rs:325:22 [INFO] [stderr] | [INFO] [stderr] 325 | .filter(|&ref f| f.pos == pos) [INFO] [stderr] | ^^^^^^ help: try removing the `&ref` part and just keep: `f` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/lib.rs:493:12 [INFO] [stderr] | [INFO] [stderr] 493 | / if flag.value.is_none() { [INFO] [stderr] 494 | | false [INFO] [stderr] 495 | | } else { [INFO] [stderr] 496 | | true [INFO] [stderr] 497 | | } [INFO] [stderr] | |_____________^ help: you can reduce it to: `!flag.value.is_none()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:604:12 [INFO] [stderr] | [INFO] [stderr] 604 | if arr.len() == 0 { return Ok(arr); } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `arr.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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/lib.rs:606:13 [INFO] [stderr] | [INFO] [stderr] 606 | let ref v = *(arr[0]); [INFO] [stderr] | ----^^^^^------------- help: try: `let v = &(*(arr[0]));` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/lib.rs:818:9 [INFO] [stderr] | [INFO] [stderr] 818 | assert_eq!(ok(aa.get_float_result("frodo")),1.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] --> src/lib.rs:818:9 [INFO] [stderr] | [INFO] [stderr] 818 | assert_eq!(ok(aa.get_float_result("frodo")),1.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 `lapp`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> examples/simple-test.rs:9:15 [INFO] [stderr] | [INFO] [stderr] 9 | const USAGE: &'static str = " [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: use of `expect` followed by a function call [INFO] [stderr] --> src/bin/lapp-gen.rs:26:39 [INFO] [stderr] | [INFO] [stderr] 26 | let mut f = File::open(lapp_file).expect(&format!("cannot read {}",lapp_file)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("cannot read {}", lapp_file))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> examples/test.lapp.inc:1:15 [INFO] [stderr] | [INFO] [stderr] 1 | const USAGE: &'static str = " [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: use of `expect` followed by a function call [INFO] [stderr] --> src/bin/lapp-gen.rs:26:39 [INFO] [stderr] | [INFO] [stderr] 26 | let mut f = File::open(lapp_file).expect(&format!("cannot read {}",lapp_file)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("cannot read {}", lapp_file))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] error: build failed [INFO] running `"docker" "inspect" "ae6decff477eec941ec8bfc775526987d81dd01cb5a075db19cd662c54cfdd3d"` [INFO] running `"docker" "rm" "-f" "ae6decff477eec941ec8bfc775526987d81dd01cb5a075db19cd662c54cfdd3d"` [INFO] [stdout] ae6decff477eec941ec8bfc775526987d81dd01cb5a075db19cd662c54cfdd3d