[INFO] crate binjs_meta 0.4.3 is already in cache [INFO] extracting crate binjs_meta 0.4.3 into work/ex/clippy-test-run/sources/stable/reg/binjs_meta/0.4.3 [INFO] extracting crate binjs_meta 0.4.3 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/binjs_meta/0.4.3 [INFO] validating manifest of binjs_meta-0.4.3 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 binjs_meta-0.4.3 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 binjs_meta-0.4.3 [INFO] finished frobbing binjs_meta-0.4.3 [INFO] frobbed toml for binjs_meta-0.4.3 written to work/ex/clippy-test-run/sources/stable/reg/binjs_meta/0.4.3/Cargo.toml [INFO] started frobbing binjs_meta-0.4.3 [INFO] finished frobbing binjs_meta-0.4.3 [INFO] frobbed toml for binjs_meta-0.4.3 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/binjs_meta/0.4.3/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 binjs_meta-0.4.3 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/reg/binjs_meta/0.4.3:/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] c84e46e89ac5ce7096c7c9eb3a3d40a8b78481f90109a4866dcb62090e55084a [INFO] running `"docker" "start" "-a" "c84e46e89ac5ce7096c7c9eb3a3d40a8b78481f90109a4866dcb62090e55084a"` [INFO] [stderr] Compiling byte-tools v0.3.1 [INFO] [stderr] Compiling opaque-debug v0.2.2 [INFO] [stderr] Compiling lalrpop-util v0.16.3 [INFO] [stderr] Compiling itertools v0.8.0 [INFO] [stderr] Compiling ena v0.11.0 [INFO] [stderr] Compiling byteorder v1.3.1 [INFO] [stderr] Compiling docopt v1.0.2 [INFO] [stderr] Compiling string_cache v0.7.3 [INFO] [stderr] Compiling block-padding v0.1.3 [INFO] [stderr] Compiling block-buffer v0.7.2 [INFO] [stderr] Compiling sha2 v0.8.0 [INFO] [stderr] Compiling lalrpop v0.16.3 [INFO] [stderr] Compiling webidl v0.8.0 [INFO] [stderr] Checking binjs_meta v0.4.3 (/opt/crater/workdir) [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/spec.rs:941:9 [INFO] [stderr] | [INFO] [stderr] 941 | spec [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/spec.rs:930:20 [INFO] [stderr] | [INFO] [stderr] 930 | let spec = Spec { [INFO] [stderr] | ____________________^ [INFO] [stderr] 931 | | interfaces_by_name, [INFO] [stderr] 932 | | string_enums_by_name, [INFO] [stderr] 933 | | typedefs_by_name, [INFO] [stderr] ... | [INFO] [stderr] 938 | | null: options.null.clone(), [INFO] [stderr] 939 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/spec.rs:941:9 [INFO] [stderr] | [INFO] [stderr] 941 | spec [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/spec.rs:930:20 [INFO] [stderr] | [INFO] [stderr] 930 | let spec = Spec { [INFO] [stderr] | ____________________^ [INFO] [stderr] 931 | | interfaces_by_name, [INFO] [stderr] 932 | | string_enums_by_name, [INFO] [stderr] 933 | | typedefs_by_name, [INFO] [stderr] ... | [INFO] [stderr] 938 | | null: options.null.clone(), [INFO] [stderr] 939 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: you seem to want to iterate on a map's values [INFO] [stderr] --> src/export.rs:83:26 [INFO] [stderr] | [INFO] [stderr] 83 | for (_, name) in spec.field_names() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::for_kv_map)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 83 | for name in spec.field_names().values() { [INFO] [stderr] | ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to want to iterate on a map's values [INFO] [stderr] --> src/export.rs:87:31 [INFO] [stderr] | [INFO] [stderr] 87 | for (_, interface) in spec.interfaces_by_name() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 87 | for interface in spec.interfaces_by_name().values() { [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/export.rs:117:44 [INFO] [stderr] | [INFO] [stderr] 117 | declaration.with_field(skip_name_map.get(field.name()).unwrap(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&skip_name_map[field.name()]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 34 [INFO] [stderr] --> src/export.rs:187:5 [INFO] [stderr] | [INFO] [stderr] 187 | / fn import_typespec(&mut self, spec: &Spec, type_spec: &TypeSpec, public_name: Option) -> (Option>, NodeName) { [INFO] [stderr] 188 | | debug!(target: "export_utils", "import_typespec {:?} => {:?}", public_name, type_spec); [INFO] [stderr] 189 | | match *type_spec { [INFO] [stderr] 190 | | TypeSpec::Boolean | [INFO] [stderr] ... | [INFO] [stderr] 352 | | } [INFO] [stderr] 353 | | } [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: redundant closure found [INFO] [stderr] --> src/export.rs:337:41 [INFO] [stderr] | [INFO] [stderr] 337 | .or_insert_with(|| HashSet::new()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: remove closure as shown: `HashSet::new` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/import.rs:65:24 [INFO] [stderr] | [INFO] [stderr] 65 | pub fn import(ast: &AST) -> SpecBuilder { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/import.rs:73:35 [INFO] [stderr] | [INFO] [stderr] 73 | fn import_ast(&mut self, ast: &AST) { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/import.rs:116:25 [INFO] [stderr] | [INFO] [stderr] 116 | let interface = if let &Interface::NonPartial(ref interface) = interface { [INFO] [stderr] | _________________________^ [INFO] [stderr] 117 | | interface [INFO] [stderr] 118 | | } else { [INFO] [stderr] 119 | | panic!("Expected a non-partial interface, got {:?}", interface); [INFO] [stderr] 120 | | }; [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] 116 | let interface = if let Interface::NonPartial(ref interface) = *interface { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: called `is_some()` after searching an `Iterator` with find. This is more succinctly expressed by calling `any()`. [INFO] [stderr] --> src/import.rs:151:31 [INFO] [stderr] | [INFO] [stderr] 151 | let is_lazy = attribute.extended_attributes.iter() [INFO] [stderr] | _______________________________^ [INFO] [stderr] 152 | | .find(|attribute| { [INFO] [stderr] 153 | | if let &NoArguments(Identifier(ref id)) = attribute.as_ref() { [INFO] [stderr] 154 | | if &*id == "Lazy" { [INFO] [stderr] ... | [INFO] [stderr] 159 | | }) [INFO] [stderr] 160 | | .is_some(); [INFO] [stderr] | |______________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::search_is_some)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#search_is_some [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/import.rs:153:25 [INFO] [stderr] | [INFO] [stderr] 153 | / if let &NoArguments(Identifier(ref id)) = attribute.as_ref() { [INFO] [stderr] 154 | | if &*id == "Lazy" { [INFO] [stderr] 155 | | return true; [INFO] [stderr] 156 | | } [INFO] [stderr] 157 | | } [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] 153 | if let NoArguments(Identifier(ref id)) = *attribute.as_ref() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/import.rs:176:13 [INFO] [stderr] | [INFO] [stderr] 176 | / if let &NoArguments(Identifier(ref id)) = extended_attribute.as_ref() { [INFO] [stderr] 177 | | if &*id == "Skippable" { [INFO] [stderr] 178 | | panic!("Encountered deprecated attribute [Skippable]"); [INFO] [stderr] 179 | | } [INFO] [stderr] ... | [INFO] [stderr] 182 | | } [INFO] [stderr] 183 | | } [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] 176 | if let NoArguments(Identifier(ref id)) = *extended_attribute.as_ref() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/import.rs:236:12 [INFO] [stderr] | [INFO] [stderr] 236 | if self.path.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.path.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] error: you are implementing `Hash` explicitly but have derived `PartialEq` [INFO] [stderr] --> src/spec.rs:136:1 [INFO] [stderr] | [INFO] [stderr] 136 | / impl Hash for Field { [INFO] [stderr] 137 | | fn hash(&self, state: &mut H) where H: Hasher { [INFO] [stderr] 138 | | self.name.hash(state) [INFO] [stderr] 139 | | } [INFO] [stderr] 140 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::derive_hash_xor_eq)] on by default [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/spec.rs:123:17 [INFO] [stderr] | [INFO] [stderr] 123 | #[derive(Clone, PartialEq, Eq, Debug)] [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] warning: called `cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable [INFO] [stderr] --> src/spec.rs:416:21 [INFO] [stderr] | [INFO] [stderr] 416 | let specs = types.iter() [INFO] [stderr] | _____________________^ [INFO] [stderr] 417 | | .cloned() [INFO] [stderr] 418 | | .collect(); [INFO] [stderr] | |______________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::iter_cloned_collect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `spec::Obj` [INFO] [stderr] --> src/spec.rs:493:5 [INFO] [stderr] | [INFO] [stderr] 493 | / pub fn new() -> Self { [INFO] [stderr] 494 | | Obj { [INFO] [stderr] 495 | | fields: Vec::new() [INFO] [stderr] 496 | | } [INFO] [stderr] 497 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 478 | #[derive(Default)] [INFO] [stderr] | [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/spec.rs:499:5 [INFO] [stderr] | [INFO] [stderr] 499 | / pub fn fields<'a>(&'a self) -> &'a [Field] { [INFO] [stderr] 500 | | &self.fields [INFO] [stderr] 501 | | } [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: you should consider deriving a `Default` implementation for `spec::SpecBuilder` [INFO] [stderr] --> src/spec.rs:626:5 [INFO] [stderr] | [INFO] [stderr] 626 | / pub fn new() -> Self { [INFO] [stderr] 627 | | SpecBuilder { [INFO] [stderr] 628 | | interfaces_by_name: HashMap::new(), [INFO] [stderr] 629 | | string_enums_by_name: HashMap::new(), [INFO] [stderr] ... | [INFO] [stderr] 632 | | } [INFO] [stderr] 633 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 613 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to want to iterate on a map's values [INFO] [stderr] --> src/export.rs:83:26 [INFO] [stderr] | [INFO] [stderr] 83 | for (_, name) in spec.field_names() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::for_kv_map)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 83 | for name in spec.field_names().values() { [INFO] [stderr] | ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to want to iterate on a map's values [INFO] [stderr] --> src/export.rs:87:31 [INFO] [stderr] | [INFO] [stderr] 87 | for (_, interface) in spec.interfaces_by_name() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 87 | for interface in spec.interfaces_by_name().values() { [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/export.rs:117:44 [INFO] [stderr] | [INFO] [stderr] 117 | declaration.with_field(skip_name_map.get(field.name()).unwrap(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&skip_name_map[field.name()]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/spec.rs:718:5 [INFO] [stderr] | [INFO] [stderr] 718 | / pub fn into_spec<'a>(self, options: SpecOptions<'a>) -> Spec { [INFO] [stderr] 719 | | // 1. Collect node names. [INFO] [stderr] 720 | | let mut interfaces_by_name = self.interfaces_by_name; [INFO] [stderr] 721 | | let interfaces_by_name : HashMap<_, _> = interfaces_by_name.drain() [INFO] [stderr] ... | [INFO] [stderr] 941 | | spec [INFO] [stderr] 942 | | } [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: the function has a cyclomatic complexity of 27 [INFO] [stderr] --> src/spec.rs:718:5 [INFO] [stderr] | [INFO] [stderr] 718 | / pub fn into_spec<'a>(self, options: SpecOptions<'a>) -> Spec { [INFO] [stderr] 719 | | // 1. Collect node names. [INFO] [stderr] 720 | | let mut interfaces_by_name = self.interfaces_by_name; [INFO] [stderr] 721 | | let interfaces_by_name : HashMap<_, _> = interfaces_by_name.drain() [INFO] [stderr] ... | [INFO] [stderr] 941 | | spec [INFO] [stderr] 942 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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: the function has a cyclomatic complexity of 34 [INFO] [stderr] --> src/export.rs:187:5 [INFO] [stderr] | [INFO] [stderr] 187 | / fn import_typespec(&mut self, spec: &Spec, type_spec: &TypeSpec, public_name: Option) -> (Option>, NodeName) { [INFO] [stderr] 188 | | debug!(target: "export_utils", "import_typespec {:?} => {:?}", public_name, type_spec); [INFO] [stderr] 189 | | match *type_spec { [INFO] [stderr] 190 | | TypeSpec::Boolean | [INFO] [stderr] ... | [INFO] [stderr] 352 | | } [INFO] [stderr] 353 | | } [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: length comparison to zero [INFO] [stderr] --> src/util.rs:15:12 [INFO] [stderr] | [INFO] [stderr] 15 | if s.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `s.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/util.rs:105:25 [INFO] [stderr] | [INFO] [stderr] 105 | assert!(result.to_str().len() != 0, "Could not convert '{}' to class case", other ); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!result.to_str().is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/export.rs:337:41 [INFO] [stderr] | [INFO] [stderr] 337 | .or_insert_with(|| HashSet::new()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: remove closure as shown: `HashSet::new` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: item `util::name_sorter::NameSorter` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/util.rs:357:5 [INFO] [stderr] | [INFO] [stderr] 357 | / impl NameSorter { [INFO] [stderr] 358 | | pub fn new() -> Self { [INFO] [stderr] 359 | | NameSorter { [INFO] [stderr] 360 | | per_length: HashMap::new(), [INFO] [stderr] ... | [INFO] [stderr] 441 | | } [INFO] [stderr] 442 | | } [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: you should consider deriving a `Default` implementation for `util::name_sorter::NameSorter` [INFO] [stderr] --> src/util.rs:358:9 [INFO] [stderr] | [INFO] [stderr] 358 | / pub fn new() -> Self { [INFO] [stderr] 359 | | NameSorter { [INFO] [stderr] 360 | | per_length: HashMap::new(), [INFO] [stderr] 361 | | len: 0, [INFO] [stderr] 362 | | } [INFO] [stderr] 363 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 353 | #[derive(Default)] [INFO] [stderr] 354 | pub struct NameSorter { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: in an 'if' condition, avoid complex blocks or closures with blocks; instead, move the block or closure higher and bind it with a 'let' [INFO] [stderr] --> src/util.rs:370:30 [INFO] [stderr] | [INFO] [stderr] 370 | .map(|v| { [INFO] [stderr] | ______________________________^ [INFO] [stderr] 371 | | match v { [INFO] [stderr] 372 | | &Node::Leaf(Some(_)) => 1, [INFO] [stderr] 373 | | &Node::Leaf(_) => panic!("Invariant error: empty leaf!"), [INFO] [stderr] 374 | | &Node::Internal { ref len, .. } => *len [INFO] [stderr] 375 | | } [INFO] [stderr] 376 | | }) [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::block_in_if_condition_stmt)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#block_in_if_condition_stmt [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/util.rs:376:23 [INFO] [stderr] | [INFO] [stderr] 376 | }) [INFO] [stderr] | _______________________^ [INFO] [stderr] 377 | | .fold(0, |x, y| (x + y)); [INFO] [stderr] | |____________________________________________^ help: try: `.sum()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_fold)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/util.rs:371:25 [INFO] [stderr] | [INFO] [stderr] 371 | / match v { [INFO] [stderr] 372 | | &Node::Leaf(Some(_)) => 1, [INFO] [stderr] 373 | | &Node::Leaf(_) => panic!("Invariant error: empty leaf!"), [INFO] [stderr] 374 | | &Node::Internal { ref len, .. } => *len [INFO] [stderr] 375 | | } [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] 371 | match *v { [INFO] [stderr] 372 | Node::Leaf(Some(_)) => 1, [INFO] [stderr] 373 | Node::Leaf(_) => panic!("Invariant error: empty leaf!"), [INFO] [stderr] 374 | Node::Internal { ref len, .. } => *len [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/util.rs:461:35 [INFO] [stderr] | [INFO] [stderr] 461 | debug_assert!(children.len() != 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!children.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/util.rs:492:35 [INFO] [stderr] | [INFO] [stderr] 492 | debug_assert!(children.len() != 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!children.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/util.rs:499:16 [INFO] [stderr] | [INFO] [stderr] 499 | if key.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `key.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/import.rs:65:24 [INFO] [stderr] | [INFO] [stderr] 65 | pub fn import(ast: &AST) -> SpecBuilder { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/import.rs:73:35 [INFO] [stderr] | [INFO] [stderr] 73 | fn import_ast(&mut self, ast: &AST) { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `binjs_meta`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/import.rs:116:25 [INFO] [stderr] | [INFO] [stderr] 116 | let interface = if let &Interface::NonPartial(ref interface) = interface { [INFO] [stderr] | _________________________^ [INFO] [stderr] 117 | | interface [INFO] [stderr] 118 | | } else { [INFO] [stderr] 119 | | panic!("Expected a non-partial interface, got {:?}", interface); [INFO] [stderr] 120 | | }; [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] 116 | let interface = if let Interface::NonPartial(ref interface) = *interface { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: called `is_some()` after searching an `Iterator` with find. This is more succinctly expressed by calling `any()`. [INFO] [stderr] --> src/import.rs:151:31 [INFO] [stderr] | [INFO] [stderr] 151 | let is_lazy = attribute.extended_attributes.iter() [INFO] [stderr] | _______________________________^ [INFO] [stderr] 152 | | .find(|attribute| { [INFO] [stderr] 153 | | if let &NoArguments(Identifier(ref id)) = attribute.as_ref() { [INFO] [stderr] 154 | | if &*id == "Lazy" { [INFO] [stderr] ... | [INFO] [stderr] 159 | | }) [INFO] [stderr] 160 | | .is_some(); [INFO] [stderr] | |______________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::search_is_some)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#search_is_some [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/import.rs:153:25 [INFO] [stderr] | [INFO] [stderr] 153 | / if let &NoArguments(Identifier(ref id)) = attribute.as_ref() { [INFO] [stderr] 154 | | if &*id == "Lazy" { [INFO] [stderr] 155 | | return true; [INFO] [stderr] 156 | | } [INFO] [stderr] 157 | | } [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] 153 | if let NoArguments(Identifier(ref id)) = *attribute.as_ref() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/import.rs:176:13 [INFO] [stderr] | [INFO] [stderr] 176 | / if let &NoArguments(Identifier(ref id)) = extended_attribute.as_ref() { [INFO] [stderr] 177 | | if &*id == "Skippable" { [INFO] [stderr] 178 | | panic!("Encountered deprecated attribute [Skippable]"); [INFO] [stderr] 179 | | } [INFO] [stderr] ... | [INFO] [stderr] 182 | | } [INFO] [stderr] 183 | | } [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] 176 | if let NoArguments(Identifier(ref id)) = *extended_attribute.as_ref() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/import.rs:236:12 [INFO] [stderr] | [INFO] [stderr] 236 | if self.path.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.path.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] error: you are implementing `Hash` explicitly but have derived `PartialEq` [INFO] [stderr] --> src/spec.rs:136:1 [INFO] [stderr] | [INFO] [stderr] 136 | / impl Hash for Field { [INFO] [stderr] 137 | | fn hash(&self, state: &mut H) where H: Hasher { [INFO] [stderr] 138 | | self.name.hash(state) [INFO] [stderr] 139 | | } [INFO] [stderr] 140 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::derive_hash_xor_eq)] on by default [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/spec.rs:123:17 [INFO] [stderr] | [INFO] [stderr] 123 | #[derive(Clone, PartialEq, Eq, Debug)] [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] warning: called `cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable [INFO] [stderr] --> src/spec.rs:416:21 [INFO] [stderr] | [INFO] [stderr] 416 | let specs = types.iter() [INFO] [stderr] | _____________________^ [INFO] [stderr] 417 | | .cloned() [INFO] [stderr] 418 | | .collect(); [INFO] [stderr] | |______________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::iter_cloned_collect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `spec::Obj` [INFO] [stderr] --> src/spec.rs:493:5 [INFO] [stderr] | [INFO] [stderr] 493 | / pub fn new() -> Self { [INFO] [stderr] 494 | | Obj { [INFO] [stderr] 495 | | fields: Vec::new() [INFO] [stderr] 496 | | } [INFO] [stderr] 497 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 478 | #[derive(Default)] [INFO] [stderr] | [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/spec.rs:499:5 [INFO] [stderr] | [INFO] [stderr] 499 | / pub fn fields<'a>(&'a self) -> &'a [Field] { [INFO] [stderr] 500 | | &self.fields [INFO] [stderr] 501 | | } [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: you should consider deriving a `Default` implementation for `spec::SpecBuilder` [INFO] [stderr] --> src/spec.rs:626:5 [INFO] [stderr] | [INFO] [stderr] 626 | / pub fn new() -> Self { [INFO] [stderr] 627 | | SpecBuilder { [INFO] [stderr] 628 | | interfaces_by_name: HashMap::new(), [INFO] [stderr] 629 | | string_enums_by_name: HashMap::new(), [INFO] [stderr] ... | [INFO] [stderr] 632 | | } [INFO] [stderr] 633 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 613 | #[derive(Default)] [INFO] [stderr] | [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/spec.rs:718:5 [INFO] [stderr] | [INFO] [stderr] 718 | / pub fn into_spec<'a>(self, options: SpecOptions<'a>) -> Spec { [INFO] [stderr] 719 | | // 1. Collect node names. [INFO] [stderr] 720 | | let mut interfaces_by_name = self.interfaces_by_name; [INFO] [stderr] 721 | | let interfaces_by_name : HashMap<_, _> = interfaces_by_name.drain() [INFO] [stderr] ... | [INFO] [stderr] 941 | | spec [INFO] [stderr] 942 | | } [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: the function has a cyclomatic complexity of 27 [INFO] [stderr] --> src/spec.rs:718:5 [INFO] [stderr] | [INFO] [stderr] 718 | / pub fn into_spec<'a>(self, options: SpecOptions<'a>) -> Spec { [INFO] [stderr] 719 | | // 1. Collect node names. [INFO] [stderr] 720 | | let mut interfaces_by_name = self.interfaces_by_name; [INFO] [stderr] 721 | | let interfaces_by_name : HashMap<_, _> = interfaces_by_name.drain() [INFO] [stderr] ... | [INFO] [stderr] 941 | | spec [INFO] [stderr] 942 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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: length comparison to zero [INFO] [stderr] --> src/util.rs:15:12 [INFO] [stderr] | [INFO] [stderr] 15 | if s.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `s.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/util.rs:105:25 [INFO] [stderr] | [INFO] [stderr] 105 | assert!(result.to_str().len() != 0, "Could not convert '{}' to class case", other ); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!result.to_str().is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: item `util::name_sorter::NameSorter` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/util.rs:357:5 [INFO] [stderr] | [INFO] [stderr] 357 | / impl NameSorter { [INFO] [stderr] 358 | | pub fn new() -> Self { [INFO] [stderr] 359 | | NameSorter { [INFO] [stderr] 360 | | per_length: HashMap::new(), [INFO] [stderr] ... | [INFO] [stderr] 441 | | } [INFO] [stderr] 442 | | } [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: you should consider deriving a `Default` implementation for `util::name_sorter::NameSorter` [INFO] [stderr] --> src/util.rs:358:9 [INFO] [stderr] | [INFO] [stderr] 358 | / pub fn new() -> Self { [INFO] [stderr] 359 | | NameSorter { [INFO] [stderr] 360 | | per_length: HashMap::new(), [INFO] [stderr] 361 | | len: 0, [INFO] [stderr] 362 | | } [INFO] [stderr] 363 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 353 | #[derive(Default)] [INFO] [stderr] 354 | pub struct NameSorter { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: in an 'if' condition, avoid complex blocks or closures with blocks; instead, move the block or closure higher and bind it with a 'let' [INFO] [stderr] --> src/util.rs:370:30 [INFO] [stderr] | [INFO] [stderr] 370 | .map(|v| { [INFO] [stderr] | ______________________________^ [INFO] [stderr] 371 | | match v { [INFO] [stderr] 372 | | &Node::Leaf(Some(_)) => 1, [INFO] [stderr] 373 | | &Node::Leaf(_) => panic!("Invariant error: empty leaf!"), [INFO] [stderr] 374 | | &Node::Internal { ref len, .. } => *len [INFO] [stderr] 375 | | } [INFO] [stderr] 376 | | }) [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::block_in_if_condition_stmt)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#block_in_if_condition_stmt [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/util.rs:376:23 [INFO] [stderr] | [INFO] [stderr] 376 | }) [INFO] [stderr] | _______________________^ [INFO] [stderr] 377 | | .fold(0, |x, y| (x + y)); [INFO] [stderr] | |____________________________________________^ help: try: `.sum()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_fold)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/util.rs:371:25 [INFO] [stderr] | [INFO] [stderr] 371 | / match v { [INFO] [stderr] 372 | | &Node::Leaf(Some(_)) => 1, [INFO] [stderr] 373 | | &Node::Leaf(_) => panic!("Invariant error: empty leaf!"), [INFO] [stderr] 374 | | &Node::Internal { ref len, .. } => *len [INFO] [stderr] 375 | | } [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] 371 | match *v { [INFO] [stderr] 372 | Node::Leaf(Some(_)) => 1, [INFO] [stderr] 373 | Node::Leaf(_) => panic!("Invariant error: empty leaf!"), [INFO] [stderr] 374 | Node::Internal { ref len, .. } => *len [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/util.rs:461:35 [INFO] [stderr] | [INFO] [stderr] 461 | debug_assert!(children.len() != 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!children.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/util.rs:492:35 [INFO] [stderr] | [INFO] [stderr] 492 | debug_assert!(children.len() != 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!children.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/util.rs:499:16 [INFO] [stderr] | [INFO] [stderr] 499 | if key.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `key.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `binjs_meta`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "c84e46e89ac5ce7096c7c9eb3a3d40a8b78481f90109a4866dcb62090e55084a"` [INFO] running `"docker" "rm" "-f" "c84e46e89ac5ce7096c7c9eb3a3d40a8b78481f90109a4866dcb62090e55084a"` [INFO] [stdout] c84e46e89ac5ce7096c7c9eb3a3d40a8b78481f90109a4866dcb62090e55084a