[INFO] crate irc-bot 0.2.1 is already in cache [INFO] extracting crate irc-bot 0.2.1 into work/ex/clippy-test-run/sources/stable/reg/irc-bot/0.2.1 [INFO] extracting crate irc-bot 0.2.1 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/irc-bot/0.2.1 [INFO] validating manifest of irc-bot-0.2.1 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 irc-bot-0.2.1 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 irc-bot-0.2.1 [INFO] finished frobbing irc-bot-0.2.1 [INFO] frobbed toml for irc-bot-0.2.1 written to work/ex/clippy-test-run/sources/stable/reg/irc-bot/0.2.1/Cargo.toml [INFO] started frobbing irc-bot-0.2.1 [INFO] finished frobbing irc-bot-0.2.1 [INFO] frobbed toml for irc-bot-0.2.1 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/irc-bot/0.2.1/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 irc-bot-0.2.1 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-3/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/irc-bot/0.2.1:/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] 8aa8d222c5960725a308290567ef0b072958d4e882bed12a1dbf83740ad49da8 [INFO] running `"docker" "start" "-a" "8aa8d222c5960725a308290567ef0b072958d4e882bed12a1dbf83740ad49da8"` [INFO] [stderr] Compiling strum v0.8.0 [INFO] [stderr] Checking iter-trait v0.3.1 [INFO] [stderr] Checking len-trait v0.6.1 [INFO] [stderr] Compiling strum_macros v0.8.0 [INFO] [stderr] Compiling error-chain v0.11.0 [INFO] [stderr] Checking irc v0.13.6 [INFO] [stderr] Checking get-trait v0.1.0 [INFO] [stderr] Checking rando v0.2.0 [INFO] [stderr] Compiling foreman v0.4.0 [INFO] [stderr] Compiling irc-bot v0.2.1 (/opt/crater/workdir) [INFO] [stderr] warning: Error running `git describe`: fatal: Not a git repository (or any parent up to mount point /opt/crater/workdir) [INFO] [stderr] warning: lint `unused_doc_comment` has been renamed to `unused_doc_comments` [INFO] [stderr] --> src/lib.rs:3:10 [INFO] [stderr] | [INFO] [stderr] 3 | #![allow(unused_doc_comment)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: use the new name: `unused_doc_comments` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(renamed_and_removed_lints)] on by default [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/core/irc_msgs.rs:34:13 [INFO] [stderr] | [INFO] [stderr] 34 | user: user, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `user` [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/core/irc_msgs.rs:35:13 [INFO] [stderr] | [INFO] [stderr] 35 | host: host, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `host` [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/core/irc_msgs.rs:74:9 [INFO] [stderr] | [INFO] [stderr] 74 | nick: nick, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `nick` [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/core/irc_msgs.rs:75:9 [INFO] [stderr] | [INFO] [stderr] 75 | user: user, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `user` [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/core/irc_msgs.rs:76:9 [INFO] [stderr] | [INFO] [stderr] 76 | host: host, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `host` [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/core/modl_sys.rs:98:13 [INFO] [stderr] | [INFO] [stderr] 98 | name: name, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `name` [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/core/modl_sys.rs:102:13 [INFO] [stderr] | [INFO] [stderr] 102 | auth_lvl: auth_lvl, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `auth_lvl` [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/core/modl_sys.rs:161:13 [INFO] [stderr] | [INFO] [stderr] 161 | name: name, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `name` [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/core/modl_sys.rs:163:13 [INFO] [stderr] | [INFO] [stderr] 163 | features: features, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `features` [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/core/modl_sys.rs:389:25 [INFO] [stderr] | [INFO] [stderr] 389 | provider: provider, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `provider` [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/core/mod.rs:123:13 [INFO] [stderr] | [INFO] [stderr] 123 | config: config, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `config` [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: lint `unused_doc_comment` has been renamed to `unused_doc_comments` [INFO] [stderr] --> src/lib.rs:3:10 [INFO] [stderr] | [INFO] [stderr] 3 | #![allow(unused_doc_comment)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: use the new name: `unused_doc_comments` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(renamed_and_removed_lints)] on by default [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/core/irc_msgs.rs:34:13 [INFO] [stderr] | [INFO] [stderr] 34 | user: user, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `user` [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/core/irc_msgs.rs:35:13 [INFO] [stderr] | [INFO] [stderr] 35 | host: host, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `host` [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/core/irc_msgs.rs:74:9 [INFO] [stderr] | [INFO] [stderr] 74 | nick: nick, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `nick` [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/core/irc_msgs.rs:75:9 [INFO] [stderr] | [INFO] [stderr] 75 | user: user, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `user` [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/core/irc_msgs.rs:76:9 [INFO] [stderr] | [INFO] [stderr] 76 | host: host, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `host` [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/core/modl_sys.rs:98:13 [INFO] [stderr] | [INFO] [stderr] 98 | name: name, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `name` [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/core/modl_sys.rs:102:13 [INFO] [stderr] | [INFO] [stderr] 102 | auth_lvl: auth_lvl, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `auth_lvl` [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/core/modl_sys.rs:161:13 [INFO] [stderr] | [INFO] [stderr] 161 | name: name, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `name` [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/core/modl_sys.rs:163:13 [INFO] [stderr] | [INFO] [stderr] 163 | features: features, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `features` [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/core/modl_sys.rs:389:25 [INFO] [stderr] | [INFO] [stderr] 389 | provider: provider, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `provider` [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/core/mod.rs:123:13 [INFO] [stderr] | [INFO] [stderr] 123 | config: config, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `config` [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/modules/test.rs:36:26 [INFO] [stderr] | [INFO] [stderr] 36 | const LOREM_IPSUM_TEXT: &'static str = [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: You matched a field with a wildcard pattern. Consider using `..` instead [INFO] [stderr] --> src/core/bot_cmd.rs:89:9 [INFO] [stderr] | [INFO] [stderr] 89 | usage_str: _, [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unneeded_field_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: You matched a field with a wildcard pattern. Consider using `..` instead [INFO] [stderr] --> src/core/bot_cmd.rs:90:9 [INFO] [stderr] | [INFO] [stderr] 90 | help_msg: _, [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Try with `BotCommand { ref name, ref provider, ref auth_lvl, ref handler, ref usage_yaml, .. }` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/core/irc_comm.rs:30:31 [INFO] [stderr] | [INFO] [stderr] 30 | const UPDATE_MSG_PREFIX_STR: &'static str = "!!! UPDATE MESSAGE PREFIX !!!"; [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: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/modules/test.rs:36:26 [INFO] [stderr] | [INFO] [stderr] 36 | const LOREM_IPSUM_TEXT: &'static str = [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: You matched a field with a wildcard pattern. Consider using `..` instead [INFO] [stderr] --> src/core/bot_cmd.rs:89:9 [INFO] [stderr] | [INFO] [stderr] 89 | usage_str: _, [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unneeded_field_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: You matched a field with a wildcard pattern. Consider using `..` instead [INFO] [stderr] --> src/core/bot_cmd.rs:90:9 [INFO] [stderr] | [INFO] [stderr] 90 | help_msg: _, [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Try with `BotCommand { ref name, ref provider, ref auth_lvl, ref handler, ref usage_yaml, .. }` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/core/irc_comm.rs:30:31 [INFO] [stderr] | [INFO] [stderr] 30 | const UPDATE_MSG_PREFIX_STR: &'static str = "!!! UPDATE MESSAGE PREFIX !!!"; [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: struct is never constructed: `TemporaryTrigger` [INFO] [stderr] --> src/core/trigger.rs:28:1 [INFO] [stderr] | [INFO] [stderr] 28 | pub(super) struct TemporaryTrigger { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/modules/default.rs:108:49 [INFO] [stderr] | [INFO] [stderr] 108 | (None, t) if t == state.nick(server_id).unwrap_or("".into()) => { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| "".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: identical conversion [INFO] [stderr] --> src/util/lock.rs:35:67 [INFO] [stderr] | [INFO] [stderr] 35 | .map_err(|PoisonError { .. }| ErrorKind::LockPoisoned(description.into().into()).into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `description.into()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/util/lock.rs:43:67 [INFO] [stderr] | [INFO] [stderr] 43 | .map_err(|PoisonError { .. }| ErrorKind::LockPoisoned(description.into().into()).into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `description.into()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/util/lock.rs:63:67 [INFO] [stderr] | [INFO] [stderr] 63 | .map_err(|PoisonError { .. }| ErrorKind::LockPoisoned(description.into().into()).into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `description.into()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/util/yaml.rs:63:9 [INFO] [stderr] | [INFO] [stderr] 63 | / match ty { [INFO] [stderr] 64 | | &AugmentedTy::Scalar => Kind::Scalar, [INFO] [stderr] 65 | | &AugmentedTy::Sequence => Kind::Sequence, [INFO] [stderr] 66 | | &AugmentedTy::Mapping(_) => Kind::Mapping, [INFO] [stderr] 67 | | &AugmentedTy::Other => Kind::__Nonexhaustive, [INFO] [stderr] 68 | | } [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] 63 | match *ty { [INFO] [stderr] 64 | AugmentedTy::Scalar => Kind::Scalar, [INFO] [stderr] 65 | AugmentedTy::Sequence => Kind::Sequence, [INFO] [stderr] 66 | AugmentedTy::Mapping(_) => Kind::Mapping, [INFO] [stderr] 67 | AugmentedTy::Other => Kind::__Nonexhaustive, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/util/yaml.rs:82:9 [INFO] [stderr] | [INFO] [stderr] 82 | / match node { [INFO] [stderr] 83 | | &Yaml::Real(_) [INFO] [stderr] 84 | | | &Yaml::Integer(_) [INFO] [stderr] 85 | | | &Yaml::String(_) [INFO] [stderr] ... | [INFO] [stderr] 90 | | &Yaml::Alias(_) | &Yaml::BadValue => AugmentedTy::Other, [INFO] [stderr] 91 | | } [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] 82 | match *node { [INFO] [stderr] 83 | Yaml::Real(_) [INFO] [stderr] 84 | | Yaml::Integer(_) [INFO] [stderr] 85 | | Yaml::String(_) [INFO] [stderr] 86 | | Yaml::Boolean(_) [INFO] [stderr] 87 | | Yaml::Null => AugmentedTy::Scalar, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/util/yaml.rs:252:59 [INFO] [stderr] | [INFO] [stderr] 252 | (&Yaml::String(ref s), None) if s.starts_with("[") && s.ends_with("]") => { [INFO] [stderr] | ^^^ help: try using a char instead: `'['` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/util/yaml.rs:252:79 [INFO] [stderr] | [INFO] [stderr] 252 | (&Yaml::String(ref s), None) if s.starts_with("[") && s.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: large size difference between variants [INFO] [stderr] --> src/core/bot_cmd.rs:53:5 [INFO] [stderr] | [INFO] [stderr] 53 | LibErr(Error), [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::large_enum_variant)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] | [INFO] [stderr] 53 | LibErr(Box), [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/core/bot_cmd.rs:96:27 [INFO] [stderr] | [INFO] [stderr] 96 | let user_authorized = match auth_lvl { [INFO] [stderr] | ___________________________^ [INFO] [stderr] 97 | | &BotCmdAuthLvl::Public => Ok(true), [INFO] [stderr] 98 | | &BotCmdAuthLvl::Admin => state.have_admin(metadata.prefix), [INFO] [stderr] 99 | | }; [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] 96 | let user_authorized = match *auth_lvl { [INFO] [stderr] 97 | BotCmdAuthLvl::Public => Ok(true), [INFO] [stderr] 98 | BotCmdAuthLvl::Admin => state.have_admin(metadata.prefix), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/core/err.rs:12:1 [INFO] [stderr] | [INFO] [stderr] 12 | / error_chain! { [INFO] [stderr] 13 | | foreign_links { [INFO] [stderr] 14 | | Io(io::Error); [INFO] [stderr] 15 | | [INFO] [stderr] ... | [INFO] [stderr] 106 | | } [INFO] [stderr] 107 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/core/irc_comm.rs:89:13 [INFO] [stderr] | [INFO] [stderr] 89 | / match self.compose_msg(dest, addressee.borrow(), msg)? { [INFO] [stderr] 90 | | Some(m) => output.push(m), [INFO] [stderr] 91 | | None => {} [INFO] [stderr] 92 | | } [INFO] [stderr] | |_____________^ help: try this: `if let Some(m) = self.compose_msg(dest, addressee.borrow(), msg)? { output.push(m) }` [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/core/irc_comm.rs:277:1 [INFO] [stderr] | [INFO] [stderr] 277 | / pub fn mk_quit<'a>(msg: Option>) -> LibReaction { [INFO] [stderr] 278 | | let quit = aatxe::Command::QUIT( [INFO] [stderr] 279 | | msg.map(Cow::into_owned) [INFO] [stderr] 280 | | .or_else(|| Some(pkg_info::BRIEF_CREDITS_STRING.clone())), [INFO] [stderr] ... | [INFO] [stderr] 283 | | LibReaction::RawMsg(quit) [INFO] [stderr] 284 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: item `core::irc_msgs::MsgPrefix<'a>` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/core/irc_msgs.rs:80:1 [INFO] [stderr] | [INFO] [stderr] 80 | / impl<'a> MsgPrefix<'a> { [INFO] [stderr] 81 | | /// Returns an upper bound on the length of the message prefix, accurate to within a few bytes. [INFO] [stderr] 82 | | pub fn len(&self) -> usize { [INFO] [stderr] 83 | | fn component_len(component: Option<&str>) -> usize { [INFO] [stderr] ... | [INFO] [stderr] 101 | | } [INFO] [stderr] 102 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/core/irc_msgs.rs:109:5 [INFO] [stderr] | [INFO] [stderr] 109 | / pub fn parse<'a>(&'a self) -> MsgPrefix<'a> { [INFO] [stderr] 110 | | parse_prefix(&self.backing) [INFO] [stderr] 111 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/core/modl_sys.rs:58:18 [INFO] [stderr] | [INFO] [stderr] 58 | pub fn mk_module<'modl, S>(name: S) -> ModuleBuilder [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::extra_unused_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/core/modl_sys.rs:95:14 [INFO] [stderr] | [INFO] [stderr] 95 | .unwrap_or(Yaml::Hash(Default::default())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| Yaml::Hash(Default::default()))` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/core/modl_sys.rs:133:13 [INFO] [stderr] | [INFO] [stderr] 133 | / match attr { [INFO] [stderr] 134 | | &TriggerAttr::AlwaysWatching => unimplemented!(), [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] 133 | match *attr { [INFO] [stderr] 134 | TriggerAttr::AlwaysWatching => unimplemented!(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/core/modl_sys.rs:199:19 [INFO] [stderr] | [INFO] [stderr] 199 | kind: match self { [INFO] [stderr] | ___________________^ [INFO] [stderr] 200 | | &ModuleFeature::Command { .. } => ModuleFeatureKind::Command, [INFO] [stderr] 201 | | &ModuleFeature::Trigger { .. } => ModuleFeatureKind::Trigger, [INFO] [stderr] 202 | | }, [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] 199 | kind: match *self { [INFO] [stderr] 200 | ModuleFeature::Command { .. } => ModuleFeatureKind::Command, [INFO] [stderr] 201 | ModuleFeature::Trigger { .. } => ModuleFeatureKind::Trigger, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/core/modl_sys.rs:223:9 [INFO] [stderr] | [INFO] [stderr] 223 | / match self { [INFO] [stderr] 224 | | &ModuleFeature::Command { ref name, .. } => name.as_ref(), [INFO] [stderr] 225 | | &ModuleFeature::Trigger { ref name, .. } => name.as_ref(), [INFO] [stderr] 226 | | } [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] 223 | match *self { [INFO] [stderr] 224 | ModuleFeature::Command { ref name, .. } => name.as_ref(), [INFO] [stderr] 225 | ModuleFeature::Trigger { ref name, .. } => name.as_ref(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/core/modl_sys.rs:350:41 [INFO] [stderr] | [INFO] [stderr] 350 | if let Some(existing_feature) = match feature { [INFO] [stderr] | _________________________________________^ [INFO] [stderr] 351 | | &ModuleFeature::Command { .. } => match (mode, self.commands.get(feature.name())) { [INFO] [stderr] 352 | | (_, None) | (ModuleLoadMode::Force, _) => None, [INFO] [stderr] 353 | | (ModuleLoadMode::Replace, Some(old)) if old.provider.name == provider.name => None, [INFO] [stderr] ... | [INFO] [stderr] 357 | | &ModuleFeature::Trigger { .. } => None, [INFO] [stderr] 358 | | } { [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] 350 | if let Some(existing_feature) = match *feature { [INFO] [stderr] 351 | ModuleFeature::Command { .. } => match (mode, self.commands.get(feature.name())) { [INFO] [stderr] 352 | (_, None) | (ModuleLoadMode::Force, _) => None, [INFO] [stderr] 353 | (ModuleLoadMode::Replace, Some(old)) if old.provider.name == provider.name => None, [INFO] [stderr] 354 | (ModuleLoadMode::Replace, Some(old)) => Some(old.dbg_info()), [INFO] [stderr] 355 | (ModuleLoadMode::Add, Some(old)) => Some(old.dbg_info()), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/core/modl_sys.rs:377:9 [INFO] [stderr] | [INFO] [stderr] 377 | / match feature { [INFO] [stderr] 378 | | &ModuleFeature::Command { [INFO] [stderr] 379 | | ref name, [INFO] [stderr] 380 | | ref handler, [INFO] [stderr] ... | [INFO] [stderr] 419 | | } [INFO] [stderr] 420 | | }; [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] 377 | match *feature { [INFO] [stderr] 378 | ModuleFeature::Command { [INFO] [stderr] 379 | ref name, [INFO] [stderr] 380 | ref handler, [INFO] [stderr] 381 | ref auth_lvl, [INFO] [stderr] 382 | ref usage_str, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/core/state.rs:21:14 [INFO] [stderr] | [INFO] [stderr] 21 | .ok_or(ErrorKind::NicknameUnknown.into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ErrorKind::NicknameUnknown.into())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: called `filter(p).next()` on an `Iterator`. This is more succinctly expressed by calling `.find(p)` instead. [INFO] [stderr] --> src/core/trigger.rs:90:26 [INFO] [stderr] | [INFO] [stderr] 90 | if let Some(t) = triggers [INFO] [stderr] | __________________________^ [INFO] [stderr] 91 | | .rand_iter() [INFO] [stderr] 92 | | .with_rng(state.rng()?.deref_mut()) [INFO] [stderr] 93 | | .filter(|t| t.read_regex().map(|rx| rx.is_match(text)).unwrap_or(false)) [INFO] [stderr] 94 | | .next() [INFO] [stderr] | |___________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::filter_next)] on by default [INFO] [stderr] = note: replace `filter(|t| t.read_regex().map(|rx| rx.is_match(text)).unwrap_or(false)).next()` with `find(|t| t.read_regex().map(|rx| rx.is_match(text)).unwrap_or(false))` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_next [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 31 [INFO] [stderr] --> src/core/mod.rs:169:1 [INFO] [stderr] | [INFO] [stderr] 169 | / pub fn run( [INFO] [stderr] 170 | | config: Cfg, [INFO] [stderr] 171 | | module_data_path: ModlData, [INFO] [stderr] 172 | | error_handler: ErrF, [INFO] [stderr] ... | [INFO] [stderr] 348 | | } [INFO] [stderr] 349 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/core/mod.rs:238:29 [INFO] [stderr] | [INFO] [stderr] 238 | (None, None) => format!(":"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `":".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: struct is never constructed: `TemporaryTrigger` [INFO] [stderr] --> src/core/trigger.rs:28:1 [INFO] [stderr] | [INFO] [stderr] 28 | pub(super) struct TemporaryTrigger { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/modules/default.rs:108:49 [INFO] [stderr] | [INFO] [stderr] 108 | (None, t) if t == state.nick(server_id).unwrap_or("".into()) => { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| "".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: identical conversion [INFO] [stderr] --> src/util/lock.rs:35:67 [INFO] [stderr] | [INFO] [stderr] 35 | .map_err(|PoisonError { .. }| ErrorKind::LockPoisoned(description.into().into()).into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `description.into()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/util/lock.rs:43:67 [INFO] [stderr] | [INFO] [stderr] 43 | .map_err(|PoisonError { .. }| ErrorKind::LockPoisoned(description.into().into()).into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `description.into()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/util/lock.rs:63:67 [INFO] [stderr] | [INFO] [stderr] 63 | .map_err(|PoisonError { .. }| ErrorKind::LockPoisoned(description.into().into()).into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `description.into()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/util/yaml.rs:63:9 [INFO] [stderr] | [INFO] [stderr] 63 | / match ty { [INFO] [stderr] 64 | | &AugmentedTy::Scalar => Kind::Scalar, [INFO] [stderr] 65 | | &AugmentedTy::Sequence => Kind::Sequence, [INFO] [stderr] 66 | | &AugmentedTy::Mapping(_) => Kind::Mapping, [INFO] [stderr] 67 | | &AugmentedTy::Other => Kind::__Nonexhaustive, [INFO] [stderr] 68 | | } [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] 63 | match *ty { [INFO] [stderr] 64 | AugmentedTy::Scalar => Kind::Scalar, [INFO] [stderr] 65 | AugmentedTy::Sequence => Kind::Sequence, [INFO] [stderr] 66 | AugmentedTy::Mapping(_) => Kind::Mapping, [INFO] [stderr] 67 | AugmentedTy::Other => Kind::__Nonexhaustive, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/util/yaml.rs:82:9 [INFO] [stderr] | [INFO] [stderr] 82 | / match node { [INFO] [stderr] 83 | | &Yaml::Real(_) [INFO] [stderr] 84 | | | &Yaml::Integer(_) [INFO] [stderr] 85 | | | &Yaml::String(_) [INFO] [stderr] ... | [INFO] [stderr] 90 | | &Yaml::Alias(_) | &Yaml::BadValue => AugmentedTy::Other, [INFO] [stderr] 91 | | } [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] 82 | match *node { [INFO] [stderr] 83 | Yaml::Real(_) [INFO] [stderr] 84 | | Yaml::Integer(_) [INFO] [stderr] 85 | | Yaml::String(_) [INFO] [stderr] 86 | | Yaml::Boolean(_) [INFO] [stderr] 87 | | Yaml::Null => AugmentedTy::Scalar, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/util/yaml.rs:252:59 [INFO] [stderr] | [INFO] [stderr] 252 | (&Yaml::String(ref s), None) if s.starts_with("[") && s.ends_with("]") => { [INFO] [stderr] | ^^^ help: try using a char instead: `'['` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/util/yaml.rs:252:79 [INFO] [stderr] | [INFO] [stderr] 252 | (&Yaml::String(ref s), None) if s.starts_with("[") && s.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: large size difference between variants [INFO] [stderr] --> src/core/bot_cmd.rs:53:5 [INFO] [stderr] | [INFO] [stderr] 53 | LibErr(Error), [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::large_enum_variant)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] | [INFO] [stderr] 53 | LibErr(Box), [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/core/bot_cmd.rs:96:27 [INFO] [stderr] | [INFO] [stderr] 96 | let user_authorized = match auth_lvl { [INFO] [stderr] | ___________________________^ [INFO] [stderr] 97 | | &BotCmdAuthLvl::Public => Ok(true), [INFO] [stderr] 98 | | &BotCmdAuthLvl::Admin => state.have_admin(metadata.prefix), [INFO] [stderr] 99 | | }; [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] 96 | let user_authorized = match *auth_lvl { [INFO] [stderr] 97 | BotCmdAuthLvl::Public => Ok(true), [INFO] [stderr] 98 | BotCmdAuthLvl::Admin => state.have_admin(metadata.prefix), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/core/err.rs:12:1 [INFO] [stderr] | [INFO] [stderr] 12 | / error_chain! { [INFO] [stderr] 13 | | foreign_links { [INFO] [stderr] 14 | | Io(io::Error); [INFO] [stderr] 15 | | [INFO] [stderr] ... | [INFO] [stderr] 106 | | } [INFO] [stderr] 107 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/core/irc_comm.rs:89:13 [INFO] [stderr] | [INFO] [stderr] 89 | / match self.compose_msg(dest, addressee.borrow(), msg)? { [INFO] [stderr] 90 | | Some(m) => output.push(m), [INFO] [stderr] 91 | | None => {} [INFO] [stderr] 92 | | } [INFO] [stderr] | |_____________^ help: try this: `if let Some(m) = self.compose_msg(dest, addressee.borrow(), msg)? { output.push(m) }` [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/core/irc_comm.rs:277:1 [INFO] [stderr] | [INFO] [stderr] 277 | / pub fn mk_quit<'a>(msg: Option>) -> LibReaction { [INFO] [stderr] 278 | | let quit = aatxe::Command::QUIT( [INFO] [stderr] 279 | | msg.map(Cow::into_owned) [INFO] [stderr] 280 | | .or_else(|| Some(pkg_info::BRIEF_CREDITS_STRING.clone())), [INFO] [stderr] ... | [INFO] [stderr] 283 | | LibReaction::RawMsg(quit) [INFO] [stderr] 284 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: item `core::irc_msgs::MsgPrefix<'a>` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/core/irc_msgs.rs:80:1 [INFO] [stderr] | [INFO] [stderr] 80 | / impl<'a> MsgPrefix<'a> { [INFO] [stderr] 81 | | /// Returns an upper bound on the length of the message prefix, accurate to within a few bytes. [INFO] [stderr] 82 | | pub fn len(&self) -> usize { [INFO] [stderr] 83 | | fn component_len(component: Option<&str>) -> usize { [INFO] [stderr] ... | [INFO] [stderr] 101 | | } [INFO] [stderr] 102 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/core/irc_msgs.rs:109:5 [INFO] [stderr] | [INFO] [stderr] 109 | / pub fn parse<'a>(&'a self) -> MsgPrefix<'a> { [INFO] [stderr] 110 | | parse_prefix(&self.backing) [INFO] [stderr] 111 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/core/modl_sys.rs:58:18 [INFO] [stderr] | [INFO] [stderr] 58 | pub fn mk_module<'modl, S>(name: S) -> ModuleBuilder [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::extra_unused_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/core/modl_sys.rs:95:14 [INFO] [stderr] | [INFO] [stderr] 95 | .unwrap_or(Yaml::Hash(Default::default())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| Yaml::Hash(Default::default()))` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/core/modl_sys.rs:133:13 [INFO] [stderr] | [INFO] [stderr] 133 | / match attr { [INFO] [stderr] 134 | | &TriggerAttr::AlwaysWatching => unimplemented!(), [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] 133 | match *attr { [INFO] [stderr] 134 | TriggerAttr::AlwaysWatching => unimplemented!(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/core/modl_sys.rs:199:19 [INFO] [stderr] | [INFO] [stderr] 199 | kind: match self { [INFO] [stderr] | ___________________^ [INFO] [stderr] 200 | | &ModuleFeature::Command { .. } => ModuleFeatureKind::Command, [INFO] [stderr] 201 | | &ModuleFeature::Trigger { .. } => ModuleFeatureKind::Trigger, [INFO] [stderr] 202 | | }, [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] 199 | kind: match *self { [INFO] [stderr] 200 | ModuleFeature::Command { .. } => ModuleFeatureKind::Command, [INFO] [stderr] 201 | ModuleFeature::Trigger { .. } => ModuleFeatureKind::Trigger, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/core/modl_sys.rs:223:9 [INFO] [stderr] | [INFO] [stderr] 223 | / match self { [INFO] [stderr] 224 | | &ModuleFeature::Command { ref name, .. } => name.as_ref(), [INFO] [stderr] 225 | | &ModuleFeature::Trigger { ref name, .. } => name.as_ref(), [INFO] [stderr] 226 | | } [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] 223 | match *self { [INFO] [stderr] 224 | ModuleFeature::Command { ref name, .. } => name.as_ref(), [INFO] [stderr] 225 | ModuleFeature::Trigger { ref name, .. } => name.as_ref(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/core/modl_sys.rs:350:41 [INFO] [stderr] | [INFO] [stderr] 350 | if let Some(existing_feature) = match feature { [INFO] [stderr] | _________________________________________^ [INFO] [stderr] 351 | | &ModuleFeature::Command { .. } => match (mode, self.commands.get(feature.name())) { [INFO] [stderr] 352 | | (_, None) | (ModuleLoadMode::Force, _) => None, [INFO] [stderr] 353 | | (ModuleLoadMode::Replace, Some(old)) if old.provider.name == provider.name => None, [INFO] [stderr] ... | [INFO] [stderr] 357 | | &ModuleFeature::Trigger { .. } => None, [INFO] [stderr] 358 | | } { [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] 350 | if let Some(existing_feature) = match *feature { [INFO] [stderr] 351 | ModuleFeature::Command { .. } => match (mode, self.commands.get(feature.name())) { [INFO] [stderr] 352 | (_, None) | (ModuleLoadMode::Force, _) => None, [INFO] [stderr] 353 | (ModuleLoadMode::Replace, Some(old)) if old.provider.name == provider.name => None, [INFO] [stderr] 354 | (ModuleLoadMode::Replace, Some(old)) => Some(old.dbg_info()), [INFO] [stderr] 355 | (ModuleLoadMode::Add, Some(old)) => Some(old.dbg_info()), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/core/modl_sys.rs:377:9 [INFO] [stderr] | [INFO] [stderr] 377 | / match feature { [INFO] [stderr] 378 | | &ModuleFeature::Command { [INFO] [stderr] 379 | | ref name, [INFO] [stderr] 380 | | ref handler, [INFO] [stderr] ... | [INFO] [stderr] 419 | | } [INFO] [stderr] 420 | | }; [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] 377 | match *feature { [INFO] [stderr] 378 | ModuleFeature::Command { [INFO] [stderr] 379 | ref name, [INFO] [stderr] 380 | ref handler, [INFO] [stderr] 381 | ref auth_lvl, [INFO] [stderr] 382 | ref usage_str, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/core/state.rs:21:14 [INFO] [stderr] | [INFO] [stderr] 21 | .ok_or(ErrorKind::NicknameUnknown.into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ErrorKind::NicknameUnknown.into())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: called `filter(p).next()` on an `Iterator`. This is more succinctly expressed by calling `.find(p)` instead. [INFO] [stderr] --> src/core/trigger.rs:90:26 [INFO] [stderr] | [INFO] [stderr] 90 | if let Some(t) = triggers [INFO] [stderr] | __________________________^ [INFO] [stderr] 91 | | .rand_iter() [INFO] [stderr] 92 | | .with_rng(state.rng()?.deref_mut()) [INFO] [stderr] 93 | | .filter(|t| t.read_regex().map(|rx| rx.is_match(text)).unwrap_or(false)) [INFO] [stderr] 94 | | .next() [INFO] [stderr] | |___________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::filter_next)] on by default [INFO] [stderr] = note: replace `filter(|t| t.read_regex().map(|rx| rx.is_match(text)).unwrap_or(false)).next()` with `find(|t| t.read_regex().map(|rx| rx.is_match(text)).unwrap_or(false))` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_next [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 31 [INFO] [stderr] --> src/core/mod.rs:169:1 [INFO] [stderr] | [INFO] [stderr] 169 | / pub fn run( [INFO] [stderr] 170 | | config: Cfg, [INFO] [stderr] 171 | | module_data_path: ModlData, [INFO] [stderr] 172 | | error_handler: ErrF, [INFO] [stderr] ... | [INFO] [stderr] 348 | | } [INFO] [stderr] 349 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/core/mod.rs:238:29 [INFO] [stderr] | [INFO] [stderr] 238 | (None, None) => format!(":"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `":".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 33.93s [INFO] running `"docker" "inspect" "8aa8d222c5960725a308290567ef0b072958d4e882bed12a1dbf83740ad49da8"` [INFO] running `"docker" "rm" "-f" "8aa8d222c5960725a308290567ef0b072958d4e882bed12a1dbf83740ad49da8"` [INFO] [stdout] 8aa8d222c5960725a308290567ef0b072958d4e882bed12a1dbf83740ad49da8