[INFO] crate publicsuffix 1.5.2 is already in cache [INFO] extracting crate publicsuffix 1.5.2 into work/ex/clippy-test-run/sources/stable/reg/publicsuffix/1.5.2 [INFO] extracting crate publicsuffix 1.5.2 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/publicsuffix/1.5.2 [INFO] validating manifest of publicsuffix-1.5.2 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 publicsuffix-1.5.2 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 publicsuffix-1.5.2 [INFO] finished frobbing publicsuffix-1.5.2 [INFO] frobbed toml for publicsuffix-1.5.2 written to work/ex/clippy-test-run/sources/stable/reg/publicsuffix/1.5.2/Cargo.toml [INFO] started frobbing publicsuffix-1.5.2 [INFO] finished frobbing publicsuffix-1.5.2 [INFO] frobbed toml for publicsuffix-1.5.2 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/publicsuffix/1.5.2/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting publicsuffix-1.5.2 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/reg/publicsuffix/1.5.2:/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] e64427efe7460472da3cbf653ede8be32e1e38b8d19ea3aa0508626d2882e271 [INFO] running `"docker" "start" "-a" "e64427efe7460472da3cbf653ede8be32e1e38b8d19ea3aa0508626d2882e271"` [INFO] [stderr] Checking rspec v1.0.0-beta.3 [INFO] [stderr] Checking publicsuffix v1.5.2 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:274:25 [INFO] [stderr] | [INFO] [stderr] 274 | typ: typ, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `typ` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:667:13 [INFO] [stderr] | [INFO] [stderr] 667 | typ: typ, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `typ` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:668:13 [INFO] [stderr] | [INFO] [stderr] 668 | suffix: suffix, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `suffix` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:669:13 [INFO] [stderr] | [INFO] [stderr] 669 | registrable: registrable, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `registrable` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:274:25 [INFO] [stderr] | [INFO] [stderr] 274 | typ: typ, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `typ` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:667:13 [INFO] [stderr] | [INFO] [stderr] 667 | typ: typ, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `typ` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:668:13 [INFO] [stderr] | [INFO] [stderr] 668 | suffix: suffix, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `suffix` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:669:13 [INFO] [stderr] | [INFO] [stderr] 669 | registrable: registrable, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `registrable` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/lib.rs:103:22 [INFO] [stderr] | [INFO] [stderr] 103 | pub const LIST_URL: &'static str = "https://publicsuffix.org/list/public_suffix_list.dat"; [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: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:632:21 [INFO] [stderr] | [INFO] [stderr] 632 | / if i == s_labels.len()-1 { [INFO] [stderr] 633 | | if s_labels.len() >= num_labels { [INFO] [stderr] 634 | | num_labels = s_labels.len(); [INFO] [stderr] 635 | | typ = Some(candidate.typ); [INFO] [stderr] ... | [INFO] [stderr] 648 | | } [INFO] [stderr] 649 | | } [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] 632 | if i == s_labels.len()-1 && s_labels.len() >= num_labels { [INFO] [stderr] 633 | num_labels = s_labels.len(); [INFO] [stderr] 634 | typ = Some(candidate.typ); [INFO] [stderr] 635 | let s_len = if label.starts_with("!") { [INFO] [stderr] 636 | s_labels.len()-1 [INFO] [stderr] 637 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:264:14 [INFO] [stderr] | [INFO] [stderr] 264 | .ok_or(ErrorKind::InvalidRule(rule.into()).into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ErrorKind::InvalidRule(rule.into()).into())` [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:271:46 [INFO] [stderr] | [INFO] [stderr] 271 | self.rules.entry(tld.into()).or_insert(Vec::new()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(Vec::new)` [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: defining a method called `from_str` on this type; consider implementing the `std::str::FromStr` trait or choosing a less ambiguous name [INFO] [stderr] --> src/lib.rs:362:5 [INFO] [stderr] | [INFO] [stderr] 362 | / pub fn from_str(string: &str) -> Result { [INFO] [stderr] 363 | | Self::build(string) [INFO] [stderr] 364 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:455:44 [INFO] [stderr] | [INFO] [stderr] 455 | let mut parts = address.rsplitn(2, "@"); [INFO] [stderr] | ^^^ help: try using a char instead: `'@'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:480:35 [INFO] [stderr] | [INFO] [stderr] 480 | } else if string.contains("@") { [INFO] [stderr] | ^^^ help: try using a char instead: `'@'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:512:29 [INFO] [stderr] | [INFO] [stderr] 512 | if host.starts_with("[") [INFO] [stderr] | ^^^ help: try using a char instead: `'['` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:514:35 [INFO] [stderr] | [INFO] [stderr] 514 | && host.ends_with("]") [INFO] [stderr] | ^^^ help: try using a char instead: `']'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:519:45 [INFO] [stderr] | [INFO] [stderr] 519 | .trim_right_matches("]"); [INFO] [stderr] | ^^^ help: try using a char instead: `']'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:518:44 [INFO] [stderr] | [INFO] [stderr] 518 | .trim_left_matches("[") [INFO] [stderr] | ^^^ help: try using a char instead: `'['` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:529:9 [INFO] [stderr] | [INFO] [stderr] 529 | / if let &Host::Ip(_) = self { [INFO] [stderr] 530 | | return true; [INFO] [stderr] 531 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 529 | if let Host::Ip(_) = *self { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:537:9 [INFO] [stderr] | [INFO] [stderr] 537 | / if let &Host::Domain(_) = self { [INFO] [stderr] 538 | | return true; [INFO] [stderr] 539 | | } [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] 537 | if let Host::Domain(_) = *self { [INFO] [stderr] | ^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:546:9 [INFO] [stderr] | [INFO] [stderr] 546 | / match self { [INFO] [stderr] 547 | | &Host::Ip(ref ip) => write!(f, "{}", ip), [INFO] [stderr] 548 | | &Host::Domain(ref domain) => write!(f, "{}", domain), [INFO] [stderr] 549 | | } [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] 546 | match *self { [INFO] [stderr] 547 | Host::Ip(ref ip) => write!(f, "{}", ip), [INFO] [stderr] 548 | Host::Domain(ref domain) => write!(f, "{}", domain), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:571:29 [INFO] [stderr] | [INFO] [stderr] 571 | if domain.ends_with(".") { labels.pop(); } [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/lib.rs:611:9 [INFO] [stderr] | [INFO] [stderr] 611 | / (&d_labels[..s_len]).iter().rev() [INFO] [stderr] 612 | | .map(|part| *part) [INFO] [stderr] | |______________________________^ help: Consider calling the dedicated `cloned` method: `(&d_labels[..s_len]).iter().rev().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:636:62 [INFO] [stderr] | [INFO] [stderr] 636 | let s_len = if label.starts_with("!") { [INFO] [stderr] | ^^^ help: try using a char instead: `'!'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:656:32 [INFO] [stderr] | [INFO] [stderr] 656 | if suffix.is_none() && d_labels.len() > 0 && no_possible_matches_found { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!d_labels.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/lib.rs:673:17 [INFO] [stderr] | [INFO] [stderr] 673 | fn to_ascii(domain: &str) -> Result { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: use as_ref() instead [INFO] [stderr] --> src/lib.rs:697:9 [INFO] [stderr] | [INFO] [stderr] 697 | / match self.registrable { [INFO] [stderr] 698 | | Some(ref registrable) => Some(registrable), [INFO] [stderr] 699 | | None => None, [INFO] [stderr] 700 | | } [INFO] [stderr] | |_________^ help: try this: `self.registrable.as_ref()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_as_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_as_ref [INFO] [stderr] [INFO] [stderr] warning: use as_ref() instead [INFO] [stderr] --> src/lib.rs:705:9 [INFO] [stderr] | [INFO] [stderr] 705 | / match self.suffix { [INFO] [stderr] 706 | | Some(ref suffix) => Some(suffix), [INFO] [stderr] 707 | | None => None, [INFO] [stderr] 708 | | } [INFO] [stderr] | |_________^ help: try this: `self.suffix.as_ref()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_as_ref [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:749:54 [INFO] [stderr] | [INFO] [stderr] 749 | write!(f, "{}", self.full.trim_right_matches(".").to_lowercase()) [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/lib.rs:103:22 [INFO] [stderr] | [INFO] [stderr] 103 | pub const LIST_URL: &'static str = "https://publicsuffix.org/list/public_suffix_list.dat"; [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: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:632:21 [INFO] [stderr] | [INFO] [stderr] 632 | / if i == s_labels.len()-1 { [INFO] [stderr] 633 | | if s_labels.len() >= num_labels { [INFO] [stderr] 634 | | num_labels = s_labels.len(); [INFO] [stderr] 635 | | typ = Some(candidate.typ); [INFO] [stderr] ... | [INFO] [stderr] 648 | | } [INFO] [stderr] 649 | | } [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] 632 | if i == s_labels.len()-1 && s_labels.len() >= num_labels { [INFO] [stderr] 633 | num_labels = s_labels.len(); [INFO] [stderr] 634 | typ = Some(candidate.typ); [INFO] [stderr] 635 | let s_len = if label.starts_with("!") { [INFO] [stderr] 636 | s_labels.len()-1 [INFO] [stderr] 637 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/tests.rs:55:33 [INFO] [stderr] | [INFO] [stderr] 55 | / (&parts[..parts.len()-1]).iter().rev() [INFO] [stderr] 56 | | .map(|part| *part) [INFO] [stderr] | |______________________________________________________^ help: Consider calling the dedicated `cloned` method: `(&parts[..parts.len()-1]).iter().rev().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:264:14 [INFO] [stderr] | [INFO] [stderr] 264 | .ok_or(ErrorKind::InvalidRule(rule.into()).into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ErrorKind::InvalidRule(rule.into()).into())` [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:271:46 [INFO] [stderr] | [INFO] [stderr] 271 | self.rules.entry(tld.into()).or_insert(Vec::new()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(Vec::new)` [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: defining a method called `from_str` on this type; consider implementing the `std::str::FromStr` trait or choosing a less ambiguous name [INFO] [stderr] --> src/lib.rs:362:5 [INFO] [stderr] | [INFO] [stderr] 362 | / pub fn from_str(string: &str) -> Result { [INFO] [stderr] 363 | | Self::build(string) [INFO] [stderr] 364 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:455:44 [INFO] [stderr] | [INFO] [stderr] 455 | let mut parts = address.rsplitn(2, "@"); [INFO] [stderr] | ^^^ help: try using a char instead: `'@'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:480:35 [INFO] [stderr] | [INFO] [stderr] 480 | } else if string.contains("@") { [INFO] [stderr] | ^^^ help: try using a char instead: `'@'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:512:29 [INFO] [stderr] | [INFO] [stderr] 512 | if host.starts_with("[") [INFO] [stderr] | ^^^ help: try using a char instead: `'['` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:514:35 [INFO] [stderr] | [INFO] [stderr] 514 | && host.ends_with("]") [INFO] [stderr] | ^^^ help: try using a char instead: `']'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:519:45 [INFO] [stderr] | [INFO] [stderr] 519 | .trim_right_matches("]"); [INFO] [stderr] | ^^^ help: try using a char instead: `']'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:518:44 [INFO] [stderr] | [INFO] [stderr] 518 | .trim_left_matches("[") [INFO] [stderr] | ^^^ help: try using a char instead: `'['` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:529:9 [INFO] [stderr] | [INFO] [stderr] 529 | / if let &Host::Ip(_) = self { [INFO] [stderr] 530 | | return true; [INFO] [stderr] 531 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 529 | if let Host::Ip(_) = *self { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:537:9 [INFO] [stderr] | [INFO] [stderr] 537 | / if let &Host::Domain(_) = self { [INFO] [stderr] 538 | | return true; [INFO] [stderr] 539 | | } [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] 537 | if let Host::Domain(_) = *self { [INFO] [stderr] | ^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:546:9 [INFO] [stderr] | [INFO] [stderr] 546 | / match self { [INFO] [stderr] 547 | | &Host::Ip(ref ip) => write!(f, "{}", ip), [INFO] [stderr] 548 | | &Host::Domain(ref domain) => write!(f, "{}", domain), [INFO] [stderr] 549 | | } [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] 546 | match *self { [INFO] [stderr] 547 | Host::Ip(ref ip) => write!(f, "{}", ip), [INFO] [stderr] 548 | Host::Domain(ref domain) => write!(f, "{}", domain), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:571:29 [INFO] [stderr] | [INFO] [stderr] 571 | if domain.ends_with(".") { labels.pop(); } [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/lib.rs:611:9 [INFO] [stderr] | [INFO] [stderr] 611 | / (&d_labels[..s_len]).iter().rev() [INFO] [stderr] 612 | | .map(|part| *part) [INFO] [stderr] | |______________________________^ help: Consider calling the dedicated `cloned` method: `(&d_labels[..s_len]).iter().rev().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:636:62 [INFO] [stderr] | [INFO] [stderr] 636 | let s_len = if label.starts_with("!") { [INFO] [stderr] | ^^^ help: try using a char instead: `'!'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:656:32 [INFO] [stderr] | [INFO] [stderr] 656 | if suffix.is_none() && d_labels.len() > 0 && no_possible_matches_found { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!d_labels.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/lib.rs:673:17 [INFO] [stderr] | [INFO] [stderr] 673 | fn to_ascii(domain: &str) -> Result { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: use as_ref() instead [INFO] [stderr] --> src/lib.rs:697:9 [INFO] [stderr] | [INFO] [stderr] 697 | / match self.registrable { [INFO] [stderr] 698 | | Some(ref registrable) => Some(registrable), [INFO] [stderr] 699 | | None => None, [INFO] [stderr] 700 | | } [INFO] [stderr] | |_________^ help: try this: `self.registrable.as_ref()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_as_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_as_ref [INFO] [stderr] [INFO] [stderr] warning: use as_ref() instead [INFO] [stderr] --> src/lib.rs:705:9 [INFO] [stderr] | [INFO] [stderr] 705 | / match self.suffix { [INFO] [stderr] 706 | | Some(ref suffix) => Some(suffix), [INFO] [stderr] 707 | | None => None, [INFO] [stderr] 708 | | } [INFO] [stderr] | |_________^ help: try this: `self.suffix.as_ref()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_as_ref [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:749:54 [INFO] [stderr] | [INFO] [stderr] 749 | write!(f, "{}", self.full.trim_right_matches(".").to_lowercase()) [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 4.12s [INFO] running `"docker" "inspect" "e64427efe7460472da3cbf653ede8be32e1e38b8d19ea3aa0508626d2882e271"` [INFO] running `"docker" "rm" "-f" "e64427efe7460472da3cbf653ede8be32e1e38b8d19ea3aa0508626d2882e271"` [INFO] [stdout] e64427efe7460472da3cbf653ede8be32e1e38b8d19ea3aa0508626d2882e271