[INFO] updating cached repository punchagan/weblogviz [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/punchagan/weblogviz [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/punchagan/weblogviz" "work/ex/clippy-test-run/sources/stable/gh/punchagan/weblogviz"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/punchagan/weblogviz'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/punchagan/weblogviz" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/punchagan/weblogviz"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/punchagan/weblogviz'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 43d85778e9c7a536d648669093cb5258ff70f974 [INFO] sha for GitHub repo punchagan/weblogviz: 43d85778e9c7a536d648669093cb5258ff70f974 [INFO] validating manifest of punchagan/weblogviz 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 punchagan/weblogviz 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 punchagan/weblogviz [INFO] finished frobbing punchagan/weblogviz [INFO] frobbed toml for punchagan/weblogviz written to work/ex/clippy-test-run/sources/stable/gh/punchagan/weblogviz/Cargo.toml [INFO] started frobbing punchagan/weblogviz [INFO] finished frobbing punchagan/weblogviz [INFO] frobbed toml for punchagan/weblogviz written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/punchagan/weblogviz/Cargo.toml [INFO] crate punchagan/weblogviz has a lockfile. skipping [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting punchagan/weblogviz 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/gh/punchagan/weblogviz:/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] d9390718e986bda65230d7da562b57ba39514204d3d4b87da30b4a71fde64a8c [INFO] running `"docker" "start" "-a" "d9390718e986bda65230d7da562b57ba39514204d3d4b87da30b4a71fde64a8c"` [INFO] [stderr] Checking clap v2.32.0 [INFO] [stderr] Checking flate2 v1.0.4 [INFO] [stderr] Checking weblogviz v0.2.0 (/opt/crater/workdir) [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:45:5 [INFO] [stderr] | [INFO] [stderr] 45 | return media_re.is_match(&path.to_lowercase()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `media_re.is_match(&path.to_lowercase())` [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/lib.rs:55:5 [INFO] [stderr] | [INFO] [stderr] 55 | return re.is_match(&user_agent); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `re.is_match(&user_agent)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:45:5 [INFO] [stderr] | [INFO] [stderr] 45 | return media_re.is_match(&path.to_lowercase()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `media_re.is_match(&path.to_lowercase())` [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/lib.rs:55:5 [INFO] [stderr] | [INFO] [stderr] 55 | return re.is_match(&user_agent); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `re.is_match(&user_agent)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/lib.rs:40:24 [INFO] [stderr] | [INFO] [stderr] 40 | fn is_media_path(path: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/lib.rs:48:27 [INFO] [stderr] | [INFO] [stderr] 48 | fn is_crawler(user_agent: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/lib.rs:85:35 [INFO] [stderr] | [INFO] [stderr] 85 | println!("{}:\t{}", date, log_db.by_date.get(date).unwrap().len()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&log_db.by_date[date]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/lib.rs:87:22 [INFO] [stderr] | [INFO] [stderr] 87 | for index in log_db.by_date.get(date).unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&log_db.by_date[date]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/lib.rs:95:24 [INFO] [stderr] | [INFO] [stderr] 95 | fn parse_dir(log_path: &String, config: Config) -> LogDB { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/lib.rs:124:20 [INFO] [stderr] | [INFO] [stderr] 124 | fn read_file(path: &String) -> String { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/lib.rs:125:5 [INFO] [stderr] | [INFO] [stderr] 125 | / let contents: String; [INFO] [stderr] 126 | | if path.ends_with(".gz") { [INFO] [stderr] 127 | | let mut gz = GzDecoder::new(fs::File::open(path).unwrap()); [INFO] [stderr] 128 | | let mut s = String::new(); [INFO] [stderr] ... | [INFO] [stderr] 132 | | contents = fs::read_to_string(path).expect("Something went wrong reading the file"); [INFO] [stderr] 133 | | } [INFO] [stderr] | |_____^ help: it is more idiomatic to write: `let contents = if path.ends_with(".gz") { ..; s } else { fs::read_to_string(path).expect("Something went wrong reading the file") };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/lib.rs:138:25 [INFO] [stderr] | [INFO] [stderr] 138 | fn parse_file(log_path: &String, config: Config) -> LogDB { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:154:63 [INFO] [stderr] | [INFO] [stderr] 154 | let path_fragments: Vec<&str> = parsed.path.split("?").collect(); [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: use of `or_insert` followed by a function call [INFO] [stderr] --> src/lib.rs:200:14 [INFO] [stderr] | [INFO] [stderr] 200 | .or_insert(vec![]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(|| vec![])` [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: use of `or_insert` followed by a function call [INFO] [stderr] --> src/lib.rs:206:14 [INFO] [stderr] | [INFO] [stderr] 206 | .or_insert(vec![]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(|| vec![])` [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: statement can be reduced [INFO] [stderr] --> src/lib.rs:209:9 [INFO] [stderr] | [INFO] [stderr] 209 | &self.logs.push(parsed_line); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.logs.push(parsed_line);` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_operation)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_operation [INFO] [stderr] [INFO] [stderr] warning: use of `or_insert` followed by a function call [INFO] [stderr] --> src/lib.rs:214:53 [INFO] [stderr] | [INFO] [stderr] 214 | let path_map = self.by_path.entry(path).or_insert(vec![]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(|| vec![])` [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: use of `or_insert` followed by a function call [INFO] [stderr] --> src/lib.rs:218:53 [INFO] [stderr] | [INFO] [stderr] 218 | let date_map = self.by_date.entry(date).or_insert(vec![]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(|| vec![])` [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/lib.rs:235:1 [INFO] [stderr] | [INFO] [stderr] 235 | / fn parse_line<'a>(line: &'a str) -> Option { [INFO] [stderr] 236 | | lazy_static! { [INFO] [stderr] 237 | | static ref log_line_re: Regex = Regex::new(r#"^([0-9a-f:]+?|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) - - \[(.*?)\] "([A-Z]+) (.*?) HTTP/*.*" (\d{3}) (\d+) "(.*?)" "(.*?)"$"#).unwrap(); [INFO] [stderr] 238 | | } [INFO] [stderr] ... | [INFO] [stderr] 257 | | } [INFO] [stderr] 258 | | } [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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/lib.rs:40:24 [INFO] [stderr] | [INFO] [stderr] 40 | fn is_media_path(path: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/lib.rs:48:27 [INFO] [stderr] | [INFO] [stderr] 48 | fn is_crawler(user_agent: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/lib.rs:85:35 [INFO] [stderr] | [INFO] [stderr] 85 | println!("{}:\t{}", date, log_db.by_date.get(date).unwrap().len()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&log_db.by_date[date]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/lib.rs:87:22 [INFO] [stderr] | [INFO] [stderr] 87 | for index in log_db.by_date.get(date).unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&log_db.by_date[date]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/lib.rs:95:24 [INFO] [stderr] | [INFO] [stderr] 95 | fn parse_dir(log_path: &String, config: Config) -> LogDB { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/lib.rs:124:20 [INFO] [stderr] | [INFO] [stderr] 124 | fn read_file(path: &String) -> String { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/lib.rs:125:5 [INFO] [stderr] | [INFO] [stderr] 125 | / let contents: String; [INFO] [stderr] 126 | | if path.ends_with(".gz") { [INFO] [stderr] 127 | | let mut gz = GzDecoder::new(fs::File::open(path).unwrap()); [INFO] [stderr] 128 | | let mut s = String::new(); [INFO] [stderr] ... | [INFO] [stderr] 132 | | contents = fs::read_to_string(path).expect("Something went wrong reading the file"); [INFO] [stderr] 133 | | } [INFO] [stderr] | |_____^ help: it is more idiomatic to write: `let contents = if path.ends_with(".gz") { ..; s } else { fs::read_to_string(path).expect("Something went wrong reading the file") };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/lib.rs:138:25 [INFO] [stderr] | [INFO] [stderr] 138 | fn parse_file(log_path: &String, config: Config) -> LogDB { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:154:63 [INFO] [stderr] | [INFO] [stderr] 154 | let path_fragments: Vec<&str> = parsed.path.split("?").collect(); [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: use of `or_insert` followed by a function call [INFO] [stderr] --> src/lib.rs:200:14 [INFO] [stderr] | [INFO] [stderr] 200 | .or_insert(vec![]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(|| vec![])` [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: use of `or_insert` followed by a function call [INFO] [stderr] --> src/lib.rs:206:14 [INFO] [stderr] | [INFO] [stderr] 206 | .or_insert(vec![]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(|| vec![])` [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: statement can be reduced [INFO] [stderr] --> src/lib.rs:209:9 [INFO] [stderr] | [INFO] [stderr] 209 | &self.logs.push(parsed_line); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.logs.push(parsed_line);` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_operation)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_operation [INFO] [stderr] [INFO] [stderr] warning: use of `or_insert` followed by a function call [INFO] [stderr] --> src/lib.rs:214:53 [INFO] [stderr] | [INFO] [stderr] 214 | let path_map = self.by_path.entry(path).or_insert(vec![]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(|| vec![])` [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: use of `or_insert` followed by a function call [INFO] [stderr] --> src/lib.rs:218:53 [INFO] [stderr] | [INFO] [stderr] 218 | let date_map = self.by_date.entry(date).or_insert(vec![]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(|| vec![])` [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/lib.rs:235:1 [INFO] [stderr] | [INFO] [stderr] 235 | / fn parse_line<'a>(line: &'a str) -> Option { [INFO] [stderr] 236 | | lazy_static! { [INFO] [stderr] 237 | | static ref log_line_re: Regex = Regex::new(r#"^([0-9a-f:]+?|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) - - \[(.*?)\] "([A-Z]+) (.*?) HTTP/*.*" (\d{3}) (\d+) "(.*?)" "(.*?)"$"#).unwrap(); [INFO] [stderr] 238 | | } [INFO] [stderr] ... | [INFO] [stderr] 257 | | } [INFO] [stderr] 258 | | } [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/lib.rs:299:20 [INFO] [stderr] | [INFO] [stderr] 299 | assert_eq!(log_db.by_path.get("/index.xml").unwrap().len(), 2); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&log_db.by_path["/index.xml"]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/lib.rs:300:20 [INFO] [stderr] | [INFO] [stderr] 300 | assert_eq!(log_db.by_path.get("/index.xml").unwrap(), &vec![1_usize, 2]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&log_db.by_path["/index.xml"]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/lib.rs:301:20 [INFO] [stderr] | [INFO] [stderr] 301 | assert_eq!(log_db.by_path.get("/").unwrap().len(), 1); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&log_db.by_path["/"]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/lib.rs:302:20 [INFO] [stderr] | [INFO] [stderr] 302 | assert_eq!(log_db.by_path.get("/").unwrap(), &vec![0_usize]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&log_db.by_path["/"]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/main.rs:15:14 [INFO] [stderr] | [INFO] [stderr] 15 | .map(|e| String::from(e)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `String::from` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [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/main.rs:23:5 [INFO] [stderr] | [INFO] [stderr] 23 | / match num_log { [INFO] [stderr] 24 | | Err(_) => { [INFO] [stderr] 25 | | println!("Number of lines needs to be a number"); [INFO] [stderr] 26 | | process::exit(1); [INFO] [stderr] 27 | | } [INFO] [stderr] 28 | | Ok(_) => {} [INFO] [stderr] 29 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 23 | if let Err(_) = num_log { [INFO] [stderr] 24 | println!("Number of lines needs to be a number"); [INFO] [stderr] 25 | process::exit(1); [INFO] [stderr] 26 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/main.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | / match num_days { [INFO] [stderr] 31 | | Err(_) => { [INFO] [stderr] 32 | | println!("Number of days needs to be a number"); [INFO] [stderr] 33 | | process::exit(1); [INFO] [stderr] 34 | | } [INFO] [stderr] 35 | | Ok(_) => {} [INFO] [stderr] 36 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 30 | if let Err(_) = num_days { [INFO] [stderr] 31 | println!("Number of days needs to be a number"); [INFO] [stderr] 32 | process::exit(1); [INFO] [stderr] 33 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/main.rs:15:14 [INFO] [stderr] | [INFO] [stderr] 15 | .map(|e| String::from(e)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `String::from` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [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/main.rs:23:5 [INFO] [stderr] | [INFO] [stderr] 23 | / match num_log { [INFO] [stderr] 24 | | Err(_) => { [INFO] [stderr] 25 | | println!("Number of lines needs to be a number"); [INFO] [stderr] 26 | | process::exit(1); [INFO] [stderr] 27 | | } [INFO] [stderr] 28 | | Ok(_) => {} [INFO] [stderr] 29 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 23 | if let Err(_) = num_log { [INFO] [stderr] 24 | println!("Number of lines needs to be a number"); [INFO] [stderr] 25 | process::exit(1); [INFO] [stderr] 26 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/main.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | / match num_days { [INFO] [stderr] 31 | | Err(_) => { [INFO] [stderr] 32 | | println!("Number of days needs to be a number"); [INFO] [stderr] 33 | | process::exit(1); [INFO] [stderr] 34 | | } [INFO] [stderr] 35 | | Ok(_) => {} [INFO] [stderr] 36 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 30 | if let Err(_) = num_days { [INFO] [stderr] 31 | println!("Number of days needs to be a number"); [INFO] [stderr] 32 | process::exit(1); [INFO] [stderr] 33 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 9.45s [INFO] running `"docker" "inspect" "d9390718e986bda65230d7da562b57ba39514204d3d4b87da30b4a71fde64a8c"` [INFO] running `"docker" "rm" "-f" "d9390718e986bda65230d7da562b57ba39514204d3d4b87da30b4a71fde64a8c"` [INFO] [stdout] d9390718e986bda65230d7da562b57ba39514204d3d4b87da30b4a71fde64a8c