[INFO] updating cached repository nurelin/rust2email [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/nurelin/rust2email [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/nurelin/rust2email" "work/ex/clippy-test-run/sources/stable/gh/nurelin/rust2email"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/nurelin/rust2email'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/nurelin/rust2email" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/nurelin/rust2email"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/nurelin/rust2email'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 264a266117ae7b750223d6eae07ed5adca854d64 [INFO] sha for GitHub repo nurelin/rust2email: 264a266117ae7b750223d6eae07ed5adca854d64 [INFO] validating manifest of nurelin/rust2email 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 nurelin/rust2email 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 nurelin/rust2email [INFO] finished frobbing nurelin/rust2email [INFO] frobbed toml for nurelin/rust2email written to work/ex/clippy-test-run/sources/stable/gh/nurelin/rust2email/Cargo.toml [INFO] started frobbing nurelin/rust2email [INFO] finished frobbing nurelin/rust2email [INFO] frobbed toml for nurelin/rust2email written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/nurelin/rust2email/Cargo.toml [INFO] crate nurelin/rust2email 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 nurelin/rust2email against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-5/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/nurelin/rust2email:/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] cd308415b3222c03476e448fbeb9db7d28f3bbe2be5a0a3de119fae0ed1b623f [INFO] running `"docker" "start" "-a" "cd308415b3222c03476e448fbeb9db7d28f3bbe2be5a0a3de119fae0ed1b623f"` [INFO] [stderr] Compiling crc-core v0.1.0 [INFO] [stderr] Checking serde v0.8.23 [INFO] [stderr] Compiling derive_builder v0.5.0 [INFO] [stderr] Checking serde v1.0.19 [INFO] [stderr] Checking build_const v0.2.0 [INFO] [stderr] Checking slog v2.0.12 [INFO] [stderr] Checking take_mut v0.1.3 [INFO] [stderr] Compiling rand v0.3.18 [INFO] [stderr] Checking isatty v0.1.5 [INFO] [stderr] Checking encoding_rs v0.6.11 [INFO] [stderr] Checking relay v0.1.0 [INFO] [stderr] Checking xml-rs v0.6.1 [INFO] [stderr] Checking utf-8 v0.6.0 [INFO] [stderr] Compiling syn v0.9.2 [INFO] [stderr] Checking base64 v0.7.0 [INFO] [stderr] Compiling crc v1.5.0 [INFO] [stderr] Checking futures-cpupool v0.1.7 [INFO] [stderr] Checking uuid v0.5.1 [INFO] [stderr] Checking trackable v0.2.8 [INFO] [stderr] Compiling email v0.0.18 [INFO] [stderr] Checking slog-scope v3.0.0 [INFO] [stderr] Compiling phf_generator v0.7.21 [INFO] [stderr] Compiling derive_builder_core v0.1.7 [INFO] [stderr] Checking slog-async v2.1.0 [INFO] [stderr] Checking url v1.6.0 [INFO] [stderr] Checking rust-crypto v0.2.36 [INFO] [stderr] Compiling serde_derive v1.0.19 [INFO] [stderr] Checking slog-stdlog v2.0.0 [INFO] [stderr] Checking tendril v0.2.4 [INFO] [stderr] Compiling string_cache_codegen v0.3.1 [INFO] [stderr] Compiling phf_codegen v0.7.21 [INFO] [stderr] Compiling string_cache v0.2.29 [INFO] [stderr] Checking backtrace v0.2.3 [INFO] [stderr] Checking tokio-proto v0.1.1 [INFO] [stderr] Checking libflate v0.1.12 [INFO] [stderr] Checking slog-term v2.2.0 [INFO] [stderr] Compiling html5ever v0.9.0 [INFO] [stderr] Compiling string_cache v0.3.0 [INFO] [stderr] Compiling html5ever-atoms v0.1.3 [INFO] [stderr] Checking quick-xml v0.7.3 [INFO] [stderr] Checking quick-xml v0.8.1 [INFO] [stderr] Checking hyper v0.11.6 [INFO] [stderr] Checking serde_json v1.0.5 [INFO] [stderr] Checking serde_urlencoded v0.5.1 [INFO] [stderr] Checking toml v0.4.5 [INFO] [stderr] Checking sloggers v0.2.1 [INFO] [stderr] Checking atom_syndication v0.5.5 [INFO] [stderr] Checking rss v0.7.0 [INFO] [stderr] Checking lettre v0.7.0 [INFO] [stderr] Checking lettre_email v0.7.0 [INFO] [stderr] Checking hyper-tls v0.1.2 [INFO] [stderr] Checking reqwest v0.7.3 [INFO] [stderr] Checking html2text v0.1.6 [INFO] [stderr] Checking rust2email v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/settings.rs:108:16 [INFO] [stderr] | [INFO] [stderr] 108 | mail: mail [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `mail` [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/settings.rs:108:16 [INFO] [stderr] | [INFO] [stderr] 108 | mail: mail [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `mail` [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: unneeded return statement [INFO] [stderr] --> src/feeds.rs:90:9 [INFO] [stderr] | [INFO] [stderr] 90 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [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: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/message.rs:65:20 [INFO] [stderr] | [INFO] [stderr] 65 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 66 | | if let Some(text) = item.description().clone() { [INFO] [stderr] 67 | | text [INFO] [stderr] 68 | | } else { [INFO] [stderr] 69 | | "" [INFO] [stderr] 70 | | } [INFO] [stderr] 71 | | }; [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] 65 | } else if let Some(text) = item.description().clone() { [INFO] [stderr] 66 | text [INFO] [stderr] 67 | } else { [INFO] [stderr] 68 | "" [INFO] [stderr] 69 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/feeds.rs:90:9 [INFO] [stderr] | [INFO] [stderr] 90 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [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: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/message.rs:65:20 [INFO] [stderr] | [INFO] [stderr] 65 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 66 | | if let Some(text) = item.description().clone() { [INFO] [stderr] 67 | | text [INFO] [stderr] 68 | | } else { [INFO] [stderr] 69 | | "" [INFO] [stderr] 70 | | } [INFO] [stderr] 71 | | }; [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] 65 | } else if let Some(text) = item.description().clone() { [INFO] [stderr] 66 | text [INFO] [stderr] 67 | } else { [INFO] [stderr] 68 | "" [INFO] [stderr] 69 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused variable: `logger` [INFO] [stderr] --> src/main.rs:225:9 [INFO] [stderr] | [INFO] [stderr] 225 | let logger = builder.build().unwrap(); [INFO] [stderr] | ^^^^^^ help: consider using `_logger` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/feeds.rs:37:9 [INFO] [stderr] | [INFO] [stderr] 37 | / let mut config = Feeds { [INFO] [stderr] 38 | | version: 1, [INFO] [stderr] 39 | | feeds: Vec::new(), [INFO] [stderr] 40 | | }; [INFO] [stderr] ... | [INFO] [stderr] 46 | | config = serde_json::from_str(data.as_str()).unwrap(); [INFO] [stderr] 47 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] help: it is more idiomatic to write [INFO] [stderr] | [INFO] [stderr] 37 | let config = if f.metadata().unwrap().len() != 0 { ..; serde_json::from_str(data.as_str()).unwrap() } else { Feeds { [INFO] [stderr] 38 | version: 1, [INFO] [stderr] 39 | feeds: Vec::new(), [INFO] [stderr] 40 | } }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/feeds.rs:75:13 [INFO] [stderr] | [INFO] [stderr] 75 | f.write(data.as_bytes()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/feeds.rs:85:13 [INFO] [stderr] | [INFO] [stderr] 85 | for ref feed in &self.feeds { [INFO] [stderr] | ^^^^^^^^ ----------- help: try: `let feed = &&self.feeds;` [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: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/message.rs:51:17 [INFO] [stderr] | [INFO] [stderr] 51 | email = match settings.text { [INFO] [stderr] | _________________^ [INFO] [stderr] 52 | | true => email.text(body.as_str()), [INFO] [stderr] 53 | | false => email.html(body.as_str()), [INFO] [stderr] 54 | | }; [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if settings.text { email.text(body.as_str()) } else { email.html(body.as_str()) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/message.rs:62:24 [INFO] [stderr] | [INFO] [stderr] 62 | let link = item.link().clone().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `item.link()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/message.rs:63:44 [INFO] [stderr] | [INFO] [stderr] 63 | let text = if let Some(text) = item.content().clone() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `item.content()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/message.rs:66:37 [INFO] [stderr] | [INFO] [stderr] 66 | if let Some(text) = item.description().clone() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `item.description()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/message.rs:87:22 [INFO] [stderr] | [INFO] [stderr] 87 | let id = entry.id().clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::clone_double_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 87 | let id = &(*entry.id()).clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 87 | let id = &str::clone(entry.id()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/opml.rs:43:9 [INFO] [stderr] | [INFO] [stderr] 43 | for ref feed in &feeds.feeds { [INFO] [stderr] | ^^^^^^^^ ------------ help: try: `let feed = &&feeds.feeds;` [INFO] [stderr] | [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: the variable `index` is used as a loop counter. Consider using `for (index, item) in &feeds.feeds.enumerate()` or similar iterators [INFO] [stderr] --> src/main.rs:51:21 [INFO] [stderr] | [INFO] [stderr] 51 | for ref feed in &feeds.feeds { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_counter_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/main.rs:51:9 [INFO] [stderr] | [INFO] [stderr] 51 | for ref feed in &feeds.feeds { [INFO] [stderr] | ^^^^^^^^ ------------ help: try: `let feed = &&feeds.feeds;` [INFO] [stderr] | [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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/main.rs:69:13 [INFO] [stderr] | [INFO] [stderr] 69 | for ref mut feed in &mut feeds.feeds { [INFO] [stderr] | ^^^^^^^^^^^^ ---------------- help: try: `let feed = &mut &mut feeds.feeds;` [INFO] [stderr] | [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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/main.rs:82:13 [INFO] [stderr] | [INFO] [stderr] 82 | for ref mut feed in &mut feeds.feeds { [INFO] [stderr] | ^^^^^^^^^^^^ ---------------- help: try: `let feed = &mut &mut feeds.feeds;` [INFO] [stderr] | [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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/main.rs:108:13 [INFO] [stderr] | [INFO] [stderr] 108 | for ref mut feed in &mut feeds.feeds { [INFO] [stderr] | ^^^^^^^^^^^^ ---------------- help: try: `let feed = &mut &mut feeds.feeds;` [INFO] [stderr] | [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: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/main.rs:130:22 [INFO] [stderr] | [INFO] [stderr] 130 | let mut sender = match &settings.mail { [INFO] [stderr] | ______________________^ [INFO] [stderr] 131 | | &MailBackend::File{ref path} => Lt::FileEmailTransport(FileEmailTransport::new(path)), [INFO] [stderr] 132 | | &MailBackend::SendMail{ref path} => match path { [INFO] [stderr] 133 | | &Some(ref path) => Lt::SendmailTransport(SendmailTransport::new_with_command(path.clone())), [INFO] [stderr] 134 | | &None => Lt::SendmailTransport(SendmailTransport::new()) [INFO] [stderr] 135 | | } [INFO] [stderr] 136 | | }; [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 130 | let mut sender = match settings.mail { [INFO] [stderr] 131 | MailBackend::File{ref path} => Lt::FileEmailTransport(FileEmailTransport::new(path)), [INFO] [stderr] 132 | MailBackend::SendMail{ref path} => match path { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/main.rs:132:45 [INFO] [stderr] | [INFO] [stderr] 132 | &MailBackend::SendMail{ref path} => match path { [INFO] [stderr] | _____________________________________________^ [INFO] [stderr] 133 | | &Some(ref path) => Lt::SendmailTransport(SendmailTransport::new_with_command(path.clone())), [INFO] [stderr] 134 | | &None => Lt::SendmailTransport(SendmailTransport::new()) [INFO] [stderr] 135 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 132 | &MailBackend::SendMail{ref path} => match *path { [INFO] [stderr] 133 | Some(ref path) => Lt::SendmailTransport(SendmailTransport::new_with_command(path.clone())), [INFO] [stderr] 134 | None => Lt::SendmailTransport(SendmailTransport::new()) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/main.rs:137:9 [INFO] [stderr] | [INFO] [stderr] 137 | for ref mut feed in &mut feeds.feeds { [INFO] [stderr] | ^^^^^^^^^^^^ ---------------- help: try: `let feed = &mut &mut feeds.feeds;` [INFO] [stderr] | [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/main.rs:154:37 [INFO] [stderr] | [INFO] [stderr] 154 | / match &mut sender { [INFO] [stderr] 155 | | &mut Lt::FileEmailTransport(ref mut i) => match i.send(&message) { [INFO] [stderr] 156 | | Ok(_) => (), [INFO] [stderr] 157 | | Err(e) => eprintln!("{}", e) [INFO] [stderr] ... | [INFO] [stderr] 162 | | } [INFO] [stderr] 163 | | } [INFO] [stderr] | |_____________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 154 | match *(&mut sender) { [INFO] [stderr] 155 | Lt::FileEmailTransport(ref mut i) => match i.send(&message) { [INFO] [stderr] 156 | Ok(_) => (), [INFO] [stderr] 157 | Err(e) => eprintln!("{}", e) [INFO] [stderr] 158 | }, [INFO] [stderr] 159 | Lt::SendmailTransport(ref mut i) => match i.send(&message) { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: The function/method `list` doesn't need a mutable reference [INFO] [stderr] --> src/main.rs:238:35 [INFO] [stderr] | [INFO] [stderr] 238 | ("list", Some(_)) => list(&mut feeds), [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_mut_passed)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `rust2email`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: unused variable: `logger` [INFO] [stderr] --> src/main.rs:225:9 [INFO] [stderr] | [INFO] [stderr] 225 | let logger = builder.build().unwrap(); [INFO] [stderr] | ^^^^^^ help: consider using `_logger` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/feeds.rs:37:9 [INFO] [stderr] | [INFO] [stderr] 37 | / let mut config = Feeds { [INFO] [stderr] 38 | | version: 1, [INFO] [stderr] 39 | | feeds: Vec::new(), [INFO] [stderr] 40 | | }; [INFO] [stderr] ... | [INFO] [stderr] 46 | | config = serde_json::from_str(data.as_str()).unwrap(); [INFO] [stderr] 47 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] help: it is more idiomatic to write [INFO] [stderr] | [INFO] [stderr] 37 | let config = if f.metadata().unwrap().len() != 0 { ..; serde_json::from_str(data.as_str()).unwrap() } else { Feeds { [INFO] [stderr] 38 | version: 1, [INFO] [stderr] 39 | feeds: Vec::new(), [INFO] [stderr] 40 | } }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/feeds.rs:75:13 [INFO] [stderr] | [INFO] [stderr] 75 | f.write(data.as_bytes()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/feeds.rs:85:13 [INFO] [stderr] | [INFO] [stderr] 85 | for ref feed in &self.feeds { [INFO] [stderr] | ^^^^^^^^ ----------- help: try: `let feed = &&self.feeds;` [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: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/message.rs:51:17 [INFO] [stderr] | [INFO] [stderr] 51 | email = match settings.text { [INFO] [stderr] | _________________^ [INFO] [stderr] 52 | | true => email.text(body.as_str()), [INFO] [stderr] 53 | | false => email.html(body.as_str()), [INFO] [stderr] 54 | | }; [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if settings.text { email.text(body.as_str()) } else { email.html(body.as_str()) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/message.rs:62:24 [INFO] [stderr] | [INFO] [stderr] 62 | let link = item.link().clone().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `item.link()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/message.rs:63:44 [INFO] [stderr] | [INFO] [stderr] 63 | let text = if let Some(text) = item.content().clone() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `item.content()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/message.rs:66:37 [INFO] [stderr] | [INFO] [stderr] 66 | if let Some(text) = item.description().clone() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `item.description()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/message.rs:87:22 [INFO] [stderr] | [INFO] [stderr] 87 | let id = entry.id().clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::clone_double_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 87 | let id = &(*entry.id()).clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 87 | let id = &str::clone(entry.id()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/opml.rs:43:9 [INFO] [stderr] | [INFO] [stderr] 43 | for ref feed in &feeds.feeds { [INFO] [stderr] | ^^^^^^^^ ------------ help: try: `let feed = &&feeds.feeds;` [INFO] [stderr] | [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: the variable `index` is used as a loop counter. Consider using `for (index, item) in &feeds.feeds.enumerate()` or similar iterators [INFO] [stderr] --> src/main.rs:51:21 [INFO] [stderr] | [INFO] [stderr] 51 | for ref feed in &feeds.feeds { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_counter_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/main.rs:51:9 [INFO] [stderr] | [INFO] [stderr] 51 | for ref feed in &feeds.feeds { [INFO] [stderr] | ^^^^^^^^ ------------ help: try: `let feed = &&feeds.feeds;` [INFO] [stderr] | [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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/main.rs:69:13 [INFO] [stderr] | [INFO] [stderr] 69 | for ref mut feed in &mut feeds.feeds { [INFO] [stderr] | ^^^^^^^^^^^^ ---------------- help: try: `let feed = &mut &mut feeds.feeds;` [INFO] [stderr] | [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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/main.rs:82:13 [INFO] [stderr] | [INFO] [stderr] 82 | for ref mut feed in &mut feeds.feeds { [INFO] [stderr] | ^^^^^^^^^^^^ ---------------- help: try: `let feed = &mut &mut feeds.feeds;` [INFO] [stderr] | [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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/main.rs:108:13 [INFO] [stderr] | [INFO] [stderr] 108 | for ref mut feed in &mut feeds.feeds { [INFO] [stderr] | ^^^^^^^^^^^^ ---------------- help: try: `let feed = &mut &mut feeds.feeds;` [INFO] [stderr] | [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: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/main.rs:130:22 [INFO] [stderr] | [INFO] [stderr] 130 | let mut sender = match &settings.mail { [INFO] [stderr] | ______________________^ [INFO] [stderr] 131 | | &MailBackend::File{ref path} => Lt::FileEmailTransport(FileEmailTransport::new(path)), [INFO] [stderr] 132 | | &MailBackend::SendMail{ref path} => match path { [INFO] [stderr] 133 | | &Some(ref path) => Lt::SendmailTransport(SendmailTransport::new_with_command(path.clone())), [INFO] [stderr] 134 | | &None => Lt::SendmailTransport(SendmailTransport::new()) [INFO] [stderr] 135 | | } [INFO] [stderr] 136 | | }; [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 130 | let mut sender = match settings.mail { [INFO] [stderr] 131 | MailBackend::File{ref path} => Lt::FileEmailTransport(FileEmailTransport::new(path)), [INFO] [stderr] 132 | MailBackend::SendMail{ref path} => match path { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/main.rs:132:45 [INFO] [stderr] | [INFO] [stderr] 132 | &MailBackend::SendMail{ref path} => match path { [INFO] [stderr] | _____________________________________________^ [INFO] [stderr] 133 | | &Some(ref path) => Lt::SendmailTransport(SendmailTransport::new_with_command(path.clone())), [INFO] [stderr] 134 | | &None => Lt::SendmailTransport(SendmailTransport::new()) [INFO] [stderr] 135 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 132 | &MailBackend::SendMail{ref path} => match *path { [INFO] [stderr] 133 | Some(ref path) => Lt::SendmailTransport(SendmailTransport::new_with_command(path.clone())), [INFO] [stderr] 134 | None => Lt::SendmailTransport(SendmailTransport::new()) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/main.rs:137:9 [INFO] [stderr] | [INFO] [stderr] 137 | for ref mut feed in &mut feeds.feeds { [INFO] [stderr] | ^^^^^^^^^^^^ ---------------- help: try: `let feed = &mut &mut feeds.feeds;` [INFO] [stderr] | [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/main.rs:154:37 [INFO] [stderr] | [INFO] [stderr] 154 | / match &mut sender { [INFO] [stderr] 155 | | &mut Lt::FileEmailTransport(ref mut i) => match i.send(&message) { [INFO] [stderr] 156 | | Ok(_) => (), [INFO] [stderr] 157 | | Err(e) => eprintln!("{}", e) [INFO] [stderr] ... | [INFO] [stderr] 162 | | } [INFO] [stderr] 163 | | } [INFO] [stderr] | |_____________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 154 | match *(&mut sender) { [INFO] [stderr] 155 | Lt::FileEmailTransport(ref mut i) => match i.send(&message) { [INFO] [stderr] 156 | Ok(_) => (), [INFO] [stderr] 157 | Err(e) => eprintln!("{}", e) [INFO] [stderr] 158 | }, [INFO] [stderr] 159 | Lt::SendmailTransport(ref mut i) => match i.send(&message) { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: The function/method `list` doesn't need a mutable reference [INFO] [stderr] --> src/main.rs:238:35 [INFO] [stderr] | [INFO] [stderr] 238 | ("list", Some(_)) => list(&mut feeds), [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_mut_passed)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `rust2email`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "cd308415b3222c03476e448fbeb9db7d28f3bbe2be5a0a3de119fae0ed1b623f"` [INFO] running `"docker" "rm" "-f" "cd308415b3222c03476e448fbeb9db7d28f3bbe2be5a0a3de119fae0ed1b623f"` [INFO] [stdout] cd308415b3222c03476e448fbeb9db7d28f3bbe2be5a0a3de119fae0ed1b623f