[INFO] updating cached repository Pierozi/awatchlog [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/Pierozi/awatchlog [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/Pierozi/awatchlog" "work/ex/clippy-test-run/sources/stable/gh/Pierozi/awatchlog"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/Pierozi/awatchlog'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/Pierozi/awatchlog" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/Pierozi/awatchlog"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/Pierozi/awatchlog'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] e4fbf3bd608249f6444d7a1e71a0053217292f69 [INFO] sha for GitHub repo Pierozi/awatchlog: e4fbf3bd608249f6444d7a1e71a0053217292f69 [INFO] validating manifest of Pierozi/awatchlog 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 Pierozi/awatchlog 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 Pierozi/awatchlog [INFO] finished frobbing Pierozi/awatchlog [INFO] frobbed toml for Pierozi/awatchlog written to work/ex/clippy-test-run/sources/stable/gh/Pierozi/awatchlog/Cargo.toml [INFO] started frobbing Pierozi/awatchlog [INFO] finished frobbing Pierozi/awatchlog [INFO] frobbed toml for Pierozi/awatchlog written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/Pierozi/awatchlog/Cargo.toml [INFO] crate Pierozi/awatchlog 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 Pierozi/awatchlog against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-2/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/Pierozi/awatchlog:/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] ddec164db5e8e7287858909c81440b157b86e29840a26451bcce0cd8cbb6c75e [INFO] running `"docker" "start" "-a" "ddec164db5e8e7287858909c81440b157b86e29840a26451bcce0cd8cbb6c75e"` [INFO] [stderr] Checking sha1 v0.4.0 [INFO] [stderr] Checking shuteye v0.3.3 [INFO] [stderr] Compiling rayon-core v1.3.0 [INFO] [stderr] Compiling rusoto_core v0.30.0 [INFO] [stderr] Checking hyper-tls v0.1.2 [INFO] [stderr] Compiling rayon v0.8.2 [INFO] [stderr] Checking rusoto_credential v0.9.2 [INFO] [stderr] Compiling ring v0.12.1 [INFO] [stderr] Checking rusoto_logs v0.30.0 [INFO] [stderr] Checking awatchlog v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/logger/state.rs:42:29 [INFO] [stderr] | [INFO] [stderr] 42 | const DEFAULT_STATES_PATH: &'static str = "/usr/share/awatchlog/states"; [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: unneeded return statement [INFO] [stderr] --> src/logger/state.rs:59:5 [INFO] [stderr] | [INFO] [stderr] 59 | / return match File::open(state_path) { [INFO] [stderr] 60 | | Ok(file) => Ok(serde_json::from_reader(file).unwrap()), [INFO] [stderr] 61 | | Err(_) => Err(Error { [INFO] [stderr] 62 | | code: 0, [INFO] [stderr] 63 | | message: "State file not found".to_string() [INFO] [stderr] 64 | | }) [INFO] [stderr] 65 | | }; [INFO] [stderr] | |______^ [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] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 59 | match File::open(state_path) { [INFO] [stderr] 60 | Ok(file) => Ok(serde_json::from_reader(file).unwrap()), [INFO] [stderr] 61 | Err(_) => Err(Error { [INFO] [stderr] 62 | code: 0, [INFO] [stderr] 63 | message: "State file not found".to_string() [INFO] [stderr] 64 | }) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/logger/mod.rs:54:33 [INFO] [stderr] | [INFO] [stderr] 54 | const AWS_MAX_BATCH_SIZE: u64 = 788576; // 1048576 - (10000 * 26) [INFO] [stderr] | ^^^^^^ help: consider: `788_576` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/logger/mod.rs:147:46 [INFO] [stderr] | [INFO] [stderr] 147 | delay = Duration::new(0, 400*1000000); [INFO] [stderr] | ^^^^^^^ help: consider: `1_000_000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/logger/mod.rs:234:13 [INFO] [stderr] | [INFO] [stderr] 234 | return content; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: remove `return` as shown: `content` [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/logger/mod.rs:285:5 [INFO] [stderr] | [INFO] [stderr] 285 | / return match result_log { [INFO] [stderr] 286 | | Err(why) => { [INFO] [stderr] 287 | | match why { [INFO] [stderr] 288 | | PutLogEventsError::InvalidSequenceToken(cause) => { [INFO] [stderr] ... | [INFO] [stderr] 309 | | }, [INFO] [stderr] 310 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 285 | match result_log { [INFO] [stderr] 286 | Err(why) => { [INFO] [stderr] 287 | match why { [INFO] [stderr] 288 | PutLogEventsError::InvalidSequenceToken(cause) => { [INFO] [stderr] 289 | let pat = "expected sequenceToken is: "; [INFO] [stderr] 290 | let token = match cause.find(pat) { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/config/parser.rs:54:5 [INFO] [stderr] | [INFO] [stderr] 54 | return content; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: remove `return` as shown: `content` [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: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/config/configuration.rs:38:29 [INFO] [stderr] | [INFO] [stderr] 38 | const DEFAULT_CONFIG_PATH: &'static str = "/usr/share/awatchlog/config.toml"; [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [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: unneeded return statement [INFO] [stderr] --> src/config/configuration.rs:75:5 [INFO] [stderr] | [INFO] [stderr] 75 | return toml::from_str(&content).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `toml::from_str(&content).unwrap()` [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: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/config/credentials.rs:40:34 [INFO] [stderr] | [INFO] [stderr] 40 | const DEFAULT_CREDENTIALS_PATH: &'static str = "/etc/awatchlog/credentials.toml"; [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [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: unneeded return statement [INFO] [stderr] --> src/config/credentials.rs:68:5 [INFO] [stderr] | [INFO] [stderr] 68 | / return Some(StaticProvider::new( [INFO] [stderr] 69 | | credentials.aws_access_key_id, [INFO] [stderr] 70 | | credentials.aws_secret_access_key, [INFO] [stderr] 71 | | None, [INFO] [stderr] 72 | | None, [INFO] [stderr] 73 | | )); [INFO] [stderr] | |_______^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 68 | Some(StaticProvider::new( [INFO] [stderr] 69 | credentials.aws_access_key_id, [INFO] [stderr] 70 | credentials.aws_secret_access_key, [INFO] [stderr] 71 | None, [INFO] [stderr] 72 | None, [INFO] [stderr] 73 | )) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/awatchlog.rs:93:5 [INFO] [stderr] | [INFO] [stderr] 93 | / return match credentials::parse(credentials_file) { [INFO] [stderr] 94 | | None => { [INFO] [stderr] 95 | | let credentials = DefaultCredentialsProvider::new().unwrap(); [INFO] [stderr] 96 | | Box::new(CloudWatchLogsClient::new( [INFO] [stderr] ... | [INFO] [stderr] 108 | | }, [INFO] [stderr] 109 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 93 | match credentials::parse(credentials_file) { [INFO] [stderr] 94 | None => { [INFO] [stderr] 95 | let credentials = DefaultCredentialsProvider::new().unwrap(); [INFO] [stderr] 96 | Box::new(CloudWatchLogsClient::new( [INFO] [stderr] 97 | default_tls_client().unwrap(), [INFO] [stderr] 98 | credentials, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: function is never used: `metadata` [INFO] [stderr] --> src/config/discovery.rs:38:1 [INFO] [stderr] | [INFO] [stderr] 38 | pub fn metadata() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/logger/state.rs:81:9 [INFO] [stderr] | [INFO] [stderr] 81 | writer.write_all(json.as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/logger/state.rs:94:8 [INFO] [stderr] | [INFO] [stderr] 94 | if false == state_path.exists() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!state_path.exists()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::bool_comparison)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: Err(_) will match all errors, maybe not a good idea [INFO] [stderr] --> src/logger/state.rs:98:13 [INFO] [stderr] | [INFO] [stderr] 98 | Err(_) => panic!("Cannot create sates path at {}", state_path_dir) [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_wild_err_arm)] on by default [INFO] [stderr] = note: to remove this warning, match each error separately or use unreachable macro [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_wild_err_arm [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/logger/mod.rs:57:47 [INFO] [stderr] | [INFO] [stderr] 57 | pub fn watch(log_file: ConfigLogFile, client: &Box) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `&CloudWatchLogs` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::borrowed_box)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/logger/mod.rs:71:47 [INFO] [stderr] | [INFO] [stderr] 71 | fn consumer(log_file: &ConfigLogFile, client: &Box) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `&CloudWatchLogs` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/logger/mod.rs:111:17 [INFO] [stderr] | [INFO] [stderr] 111 | buffer_size = buffer_size / 2; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `buffer_size /= 2` [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: variable `LogEventResponse` should have a snake case name such as `log_event_response` [INFO] [stderr] --> src/logger/mod.rs:139:16 [INFO] [stderr] | [INFO] [stderr] 139 | Ok(LogEventResponse) => { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable `LogEventError` should have a snake case name such as `log_event_error` [INFO] [stderr] --> src/logger/mod.rs:150:17 [INFO] [stderr] | [INFO] [stderr] 150 | Err(LogEventError) => { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/logger/mod.rs:162:33 [INFO] [stderr] | [INFO] [stderr] 162 | fn create_group(log_group_name: &String, client: &Box) { [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: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/logger/mod.rs:162:50 [INFO] [stderr] | [INFO] [stderr] 162 | fn create_group(log_group_name: &String, client: &Box) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `&CloudWatchLogs` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/logger/mod.rs:178:21 [INFO] [stderr] | [INFO] [stderr] 178 | log_group_name: &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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/logger/mod.rs:179:22 [INFO] [stderr] | [INFO] [stderr] 179 | log_stream_name: &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: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/logger/mod.rs:180:13 [INFO] [stderr] | [INFO] [stderr] 180 | client: &Box [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `&CloudWatchLogs` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/logger/mod.rs:201:25 [INFO] [stderr] | [INFO] [stderr] 201 | fn read_file(file_name: &String, offset: &mut u64, buf_size: u64) -> 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: single-character string constant used as pattern [INFO] [stderr] --> src/logger/mod.rs:223:59 [INFO] [stderr] | [INFO] [stderr] 223 | if let Some(line_feed_offset) = content.rfind("\n") { [INFO] [stderr] | ^^^^ help: try using a char instead: `'\n'` [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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/logger/mod.rs:251:14 [INFO] [stderr] | [INFO] [stderr] 251 | message: &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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/logger/mod.rs:252:21 [INFO] [stderr] | [INFO] [stderr] 252 | log_group_name: &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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/logger/mod.rs:253:22 [INFO] [stderr] | [INFO] [stderr] 253 | log_stream_name: &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: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/logger/mod.rs:255:13 [INFO] [stderr] | [INFO] [stderr] 255 | client: &Box [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `&CloudWatchLogs` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [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/config/parser.rs:49:5 [INFO] [stderr] | [INFO] [stderr] 49 | / match file.read_to_string(&mut content) { [INFO] [stderr] 50 | | Err(why) => panic!("Couldn't read file: {}", why.description()), [INFO] [stderr] 51 | | Ok(_) => {}, [INFO] [stderr] 52 | | } [INFO] [stderr] | |_____^ help: try this: `if let Err(why) = file.read_to_string(&mut content) { panic!("Couldn't read file: {}", why.description()) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/config/configuration.rs:67:12 [INFO] [stderr] | [INFO] [stderr] 67 | if false == default_path.exists() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!default_path.exists()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/awatchlog.rs:88:9 [INFO] [stderr] | [INFO] [stderr] 88 | handle.join(); [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/logger/state.rs:42:29 [INFO] [stderr] | [INFO] [stderr] 42 | const DEFAULT_STATES_PATH: &'static str = "/usr/share/awatchlog/states"; [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: unneeded return statement [INFO] [stderr] --> src/logger/state.rs:59:5 [INFO] [stderr] | [INFO] [stderr] 59 | / return match File::open(state_path) { [INFO] [stderr] 60 | | Ok(file) => Ok(serde_json::from_reader(file).unwrap()), [INFO] [stderr] 61 | | Err(_) => Err(Error { [INFO] [stderr] 62 | | code: 0, [INFO] [stderr] 63 | | message: "State file not found".to_string() [INFO] [stderr] 64 | | }) [INFO] [stderr] 65 | | }; [INFO] [stderr] | |______^ [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] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 59 | match File::open(state_path) { [INFO] [stderr] 60 | Ok(file) => Ok(serde_json::from_reader(file).unwrap()), [INFO] [stderr] 61 | Err(_) => Err(Error { [INFO] [stderr] 62 | code: 0, [INFO] [stderr] 63 | message: "State file not found".to_string() [INFO] [stderr] 64 | }) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/logger/mod.rs:54:33 [INFO] [stderr] | [INFO] [stderr] 54 | const AWS_MAX_BATCH_SIZE: u64 = 788576; // 1048576 - (10000 * 26) [INFO] [stderr] | ^^^^^^ help: consider: `788_576` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/logger/mod.rs:147:46 [INFO] [stderr] | [INFO] [stderr] 147 | delay = Duration::new(0, 400*1000000); [INFO] [stderr] | ^^^^^^^ help: consider: `1_000_000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/logger/mod.rs:234:13 [INFO] [stderr] | [INFO] [stderr] 234 | return content; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: remove `return` as shown: `content` [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/logger/mod.rs:285:5 [INFO] [stderr] | [INFO] [stderr] 285 | / return match result_log { [INFO] [stderr] 286 | | Err(why) => { [INFO] [stderr] 287 | | match why { [INFO] [stderr] 288 | | PutLogEventsError::InvalidSequenceToken(cause) => { [INFO] [stderr] ... | [INFO] [stderr] 309 | | }, [INFO] [stderr] 310 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 285 | match result_log { [INFO] [stderr] 286 | Err(why) => { [INFO] [stderr] 287 | match why { [INFO] [stderr] 288 | PutLogEventsError::InvalidSequenceToken(cause) => { [INFO] [stderr] 289 | let pat = "expected sequenceToken is: "; [INFO] [stderr] 290 | let token = match cause.find(pat) { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/config/parser.rs:54:5 [INFO] [stderr] | [INFO] [stderr] 54 | return content; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: remove `return` as shown: `content` [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: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/config/configuration.rs:38:29 [INFO] [stderr] | [INFO] [stderr] 38 | const DEFAULT_CONFIG_PATH: &'static str = "/usr/share/awatchlog/config.toml"; [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [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: unneeded return statement [INFO] [stderr] --> src/config/configuration.rs:75:5 [INFO] [stderr] | [INFO] [stderr] 75 | return toml::from_str(&content).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `toml::from_str(&content).unwrap()` [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: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/config/credentials.rs:40:34 [INFO] [stderr] | [INFO] [stderr] 40 | const DEFAULT_CREDENTIALS_PATH: &'static str = "/etc/awatchlog/credentials.toml"; [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [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: unneeded return statement [INFO] [stderr] --> src/config/credentials.rs:68:5 [INFO] [stderr] | [INFO] [stderr] 68 | / return Some(StaticProvider::new( [INFO] [stderr] 69 | | credentials.aws_access_key_id, [INFO] [stderr] 70 | | credentials.aws_secret_access_key, [INFO] [stderr] 71 | | None, [INFO] [stderr] 72 | | None, [INFO] [stderr] 73 | | )); [INFO] [stderr] | |_______^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 68 | Some(StaticProvider::new( [INFO] [stderr] 69 | credentials.aws_access_key_id, [INFO] [stderr] 70 | credentials.aws_secret_access_key, [INFO] [stderr] 71 | None, [INFO] [stderr] 72 | None, [INFO] [stderr] 73 | )) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/awatchlog.rs:93:5 [INFO] [stderr] | [INFO] [stderr] 93 | / return match credentials::parse(credentials_file) { [INFO] [stderr] 94 | | None => { [INFO] [stderr] 95 | | let credentials = DefaultCredentialsProvider::new().unwrap(); [INFO] [stderr] 96 | | Box::new(CloudWatchLogsClient::new( [INFO] [stderr] ... | [INFO] [stderr] 108 | | }, [INFO] [stderr] 109 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 93 | match credentials::parse(credentials_file) { [INFO] [stderr] 94 | None => { [INFO] [stderr] 95 | let credentials = DefaultCredentialsProvider::new().unwrap(); [INFO] [stderr] 96 | Box::new(CloudWatchLogsClient::new( [INFO] [stderr] 97 | default_tls_client().unwrap(), [INFO] [stderr] 98 | credentials, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: function is never used: `metadata` [INFO] [stderr] --> src/config/discovery.rs:38:1 [INFO] [stderr] | [INFO] [stderr] 38 | pub fn metadata() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/logger/state.rs:81:9 [INFO] [stderr] | [INFO] [stderr] 81 | writer.write_all(json.as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/logger/state.rs:94:8 [INFO] [stderr] | [INFO] [stderr] 94 | if false == state_path.exists() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!state_path.exists()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::bool_comparison)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: Err(_) will match all errors, maybe not a good idea [INFO] [stderr] --> src/logger/state.rs:98:13 [INFO] [stderr] | [INFO] [stderr] 98 | Err(_) => panic!("Cannot create sates path at {}", state_path_dir) [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_wild_err_arm)] on by default [INFO] [stderr] = note: to remove this warning, match each error separately or use unreachable macro [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_wild_err_arm [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/logger/mod.rs:57:47 [INFO] [stderr] | [INFO] [stderr] 57 | pub fn watch(log_file: ConfigLogFile, client: &Box) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `&CloudWatchLogs` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::borrowed_box)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/logger/mod.rs:71:47 [INFO] [stderr] | [INFO] [stderr] 71 | fn consumer(log_file: &ConfigLogFile, client: &Box) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `&CloudWatchLogs` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/logger/mod.rs:111:17 [INFO] [stderr] | [INFO] [stderr] 111 | buffer_size = buffer_size / 2; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `buffer_size /= 2` [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: variable `LogEventResponse` should have a snake case name such as `log_event_response` [INFO] [stderr] --> src/logger/mod.rs:139:16 [INFO] [stderr] | [INFO] [stderr] 139 | Ok(LogEventResponse) => { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable `LogEventError` should have a snake case name such as `log_event_error` [INFO] [stderr] --> src/logger/mod.rs:150:17 [INFO] [stderr] | [INFO] [stderr] 150 | Err(LogEventError) => { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/logger/mod.rs:162:33 [INFO] [stderr] | [INFO] [stderr] 162 | fn create_group(log_group_name: &String, client: &Box) { [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: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/logger/mod.rs:162:50 [INFO] [stderr] | [INFO] [stderr] 162 | fn create_group(log_group_name: &String, client: &Box) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `&CloudWatchLogs` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/logger/mod.rs:178:21 [INFO] [stderr] | [INFO] [stderr] 178 | log_group_name: &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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/logger/mod.rs:179:22 [INFO] [stderr] | [INFO] [stderr] 179 | log_stream_name: &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: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/logger/mod.rs:180:13 [INFO] [stderr] | [INFO] [stderr] 180 | client: &Box [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `&CloudWatchLogs` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/logger/mod.rs:201:25 [INFO] [stderr] | [INFO] [stderr] 201 | fn read_file(file_name: &String, offset: &mut u64, buf_size: u64) -> 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: single-character string constant used as pattern [INFO] [stderr] --> src/logger/mod.rs:223:59 [INFO] [stderr] | [INFO] [stderr] 223 | if let Some(line_feed_offset) = content.rfind("\n") { [INFO] [stderr] | ^^^^ help: try using a char instead: `'\n'` [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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/logger/mod.rs:251:14 [INFO] [stderr] | [INFO] [stderr] 251 | message: &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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/logger/mod.rs:252:21 [INFO] [stderr] | [INFO] [stderr] 252 | log_group_name: &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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/logger/mod.rs:253:22 [INFO] [stderr] | [INFO] [stderr] 253 | log_stream_name: &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: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/logger/mod.rs:255:13 [INFO] [stderr] | [INFO] [stderr] 255 | client: &Box [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `&CloudWatchLogs` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [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/config/parser.rs:49:5 [INFO] [stderr] | [INFO] [stderr] 49 | / match file.read_to_string(&mut content) { [INFO] [stderr] 50 | | Err(why) => panic!("Couldn't read file: {}", why.description()), [INFO] [stderr] 51 | | Ok(_) => {}, [INFO] [stderr] 52 | | } [INFO] [stderr] | |_____^ help: try this: `if let Err(why) = file.read_to_string(&mut content) { panic!("Couldn't read file: {}", why.description()) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/config/configuration.rs:67:12 [INFO] [stderr] | [INFO] [stderr] 67 | if false == default_path.exists() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!default_path.exists()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/awatchlog.rs:88:9 [INFO] [stderr] | [INFO] [stderr] 88 | handle.join(); [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 47.05s [INFO] running `"docker" "inspect" "ddec164db5e8e7287858909c81440b157b86e29840a26451bcce0cd8cbb6c75e"` [INFO] running `"docker" "rm" "-f" "ddec164db5e8e7287858909c81440b157b86e29840a26451bcce0cd8cbb6c75e"` [INFO] [stdout] ddec164db5e8e7287858909c81440b157b86e29840a26451bcce0cd8cbb6c75e