[INFO] crate flo_animation 0.1.0 is already in cache [INFO] extracting crate flo_animation 0.1.0 into work/ex/clippy-test-run/sources/stable/reg/flo_animation/0.1.0 [INFO] extracting crate flo_animation 0.1.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/flo_animation/0.1.0 [INFO] validating manifest of flo_animation-0.1.0 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 flo_animation-0.1.0 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 flo_animation-0.1.0 [INFO] finished frobbing flo_animation-0.1.0 [INFO] frobbed toml for flo_animation-0.1.0 written to work/ex/clippy-test-run/sources/stable/reg/flo_animation/0.1.0/Cargo.toml [INFO] started frobbing flo_animation-0.1.0 [INFO] finished frobbing flo_animation-0.1.0 [INFO] frobbed toml for flo_animation-0.1.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/flo_animation/0.1.0/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 flo_animation-0.1.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-4/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/flo_animation/0.1.0:/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] 4d3e8c07f7e49adf4dfaf90e37d9c8c5e5ecf9515fa00b56173c1e75b3b40471 [INFO] running `"docker" "start" "-a" "4d3e8c07f7e49adf4dfaf90e37d9c8c5e5ecf9515fa00b56173c1e75b3b40471"` [INFO] [stderr] Checking rust-hsluv v0.1.3 [INFO] [stderr] Checking flo_float_encoder v0.1.0 [INFO] [stderr] Checking desync v0.1.2 [INFO] [stderr] Checking rulinalg v0.4.2 [INFO] [stderr] Checking flo_curves v0.1.0 [INFO] [stderr] Checking flo_canvas v0.1.0 [INFO] [stderr] Checking flo_animation v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/traits/vector/brush_element.rs:27:13 [INFO] [stderr] | [INFO] [stderr] 27 | id: id, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `id` [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/traits/vector/brush_element.rs:28:13 [INFO] [stderr] | [INFO] [stderr] 28 | points: points [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `points` [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/traits/vector/brush_properties_element.rs:24:13 [INFO] [stderr] | [INFO] [stderr] 24 | id: id, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `id` [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/traits/vector/brush_properties_element.rs:25:13 [INFO] [stderr] | [INFO] [stderr] 25 | new_properties: new_properties [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `new_properties` [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/traits/vector/brush_definition_element.rs:29:13 [INFO] [stderr] | [INFO] [stderr] 29 | id: id, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `id` [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/traits/vector/brush_definition_element.rs:30:13 [INFO] [stderr] | [INFO] [stderr] 30 | new_definition: new_definition, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `new_definition` [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/traits/vector/brush_definition_element.rs:31:13 [INFO] [stderr] | [INFO] [stderr] 31 | drawing_style: drawing_style [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `drawing_style` [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/inmemory/empty_frame.rs:20:13 [INFO] [stderr] | [INFO] [stderr] 20 | time_index: time_index [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `time_index` [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/inmemory/vector_frame.rs:26:13 [INFO] [stderr] | [INFO] [stderr] 26 | keyframe: keyframe, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `keyframe` [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/inmemory/vector_frame.rs:27:13 [INFO] [stderr] | [INFO] [stderr] 27 | offset: offset [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `offset` [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/inmemory/vector_keyframe.rs:79:13 [INFO] [stderr] | [INFO] [stderr] 79 | start_time: start_time, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `start_time` [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/inmemory/vector_layer_core/mod.rs:26:13 [INFO] [stderr] | [INFO] [stderr] 26 | id: id, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `id` [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/inmemory/pending_log.rs:24:13 [INFO] [stderr] | [INFO] [stderr] 24 | on_commit: on_commit [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `on_commit` [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/brushes/ink.rs:47:13 [INFO] [stderr] | [INFO] [stderr] 47 | blend_mode: blend_mode, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `blend_mode` [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/deref_map.rs:31:13 [INFO] [stderr] | [INFO] [stderr] 31 | source: source, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `source` [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/deref_map.rs:32:13 [INFO] [stderr] | [INFO] [stderr] 32 | map: map, [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: replace it with: `map` [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/traits/vector/brush_element.rs:27:13 [INFO] [stderr] | [INFO] [stderr] 27 | id: id, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `id` [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/traits/vector/brush_element.rs:28:13 [INFO] [stderr] | [INFO] [stderr] 28 | points: points [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `points` [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/traits/vector/brush_properties_element.rs:24:13 [INFO] [stderr] | [INFO] [stderr] 24 | id: id, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `id` [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/traits/vector/brush_properties_element.rs:25:13 [INFO] [stderr] | [INFO] [stderr] 25 | new_properties: new_properties [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `new_properties` [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/traits/vector/brush_definition_element.rs:29:13 [INFO] [stderr] | [INFO] [stderr] 29 | id: id, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `id` [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/traits/vector/brush_definition_element.rs:30:13 [INFO] [stderr] | [INFO] [stderr] 30 | new_definition: new_definition, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `new_definition` [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/traits/vector/brush_definition_element.rs:31:13 [INFO] [stderr] | [INFO] [stderr] 31 | drawing_style: drawing_style [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `drawing_style` [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/inmemory/empty_frame.rs:20:13 [INFO] [stderr] | [INFO] [stderr] 20 | time_index: time_index [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `time_index` [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/inmemory/vector_frame.rs:26:13 [INFO] [stderr] | [INFO] [stderr] 26 | keyframe: keyframe, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `keyframe` [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/inmemory/vector_frame.rs:27:13 [INFO] [stderr] | [INFO] [stderr] 27 | offset: offset [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `offset` [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/inmemory/vector_keyframe.rs:79:13 [INFO] [stderr] | [INFO] [stderr] 79 | start_time: start_time, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `start_time` [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/inmemory/vector_layer_core/mod.rs:26:13 [INFO] [stderr] | [INFO] [stderr] 26 | id: id, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `id` [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/inmemory/pending_log.rs:24:13 [INFO] [stderr] | [INFO] [stderr] 24 | on_commit: on_commit [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `on_commit` [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/brushes/ink.rs:47:13 [INFO] [stderr] | [INFO] [stderr] 47 | blend_mode: blend_mode, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `blend_mode` [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/deref_map.rs:31:13 [INFO] [stderr] | [INFO] [stderr] 31 | source: source, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `source` [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/deref_map.rs:32:13 [INFO] [stderr] | [INFO] [stderr] 32 | map: map, [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: replace it with: `map` [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: module has the same name as its containing module [INFO] [stderr] --> src/traits/path/mod.rs:3:1 [INFO] [stderr] | [INFO] [stderr] 3 | mod path; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::module_inception)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [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/traits/editable.rs:83:1 [INFO] [stderr] | [INFO] [stderr] 83 | / pub fn open_read<'a, EditorType: ?Sized>(editable: &'a Editable) -> Option> { [INFO] [stderr] 84 | | editable.read() [INFO] [stderr] 85 | | } [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/traits/editable.rs:90:1 [INFO] [stderr] | [INFO] [stderr] 90 | / pub fn open_edit<'a, EditorType: ?Sized>(editable: &'a Editable) -> Option> { [INFO] [stderr] 91 | | editable.edit() [INFO] [stderr] 92 | | } [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/traits/edit/element_id.rs:23:9 [INFO] [stderr] | [INFO] [stderr] 23 | / match self { [INFO] [stderr] 24 | | &Unassigned => false, [INFO] [stderr] 25 | | &Assigned(_) => true [INFO] [stderr] 26 | | } [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] 23 | match *self { [INFO] [stderr] 24 | Unassigned => false, [INFO] [stderr] 25 | Assigned(_) => true [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/traits/edit/element_id.rs:44:9 [INFO] [stderr] | [INFO] [stderr] 44 | / match self { [INFO] [stderr] 45 | | &Unassigned => None, [INFO] [stderr] 46 | | &Assigned(id) => Some(id) [INFO] [stderr] 47 | | } [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] 44 | match *self { [INFO] [stderr] 45 | Unassigned => None, [INFO] [stderr] 46 | Assigned(id) => Some(id) [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/traits/animation.rs:35:5 [INFO] [stderr] | [INFO] [stderr] 35 | fn get_layer_with_id<'a>(&'a self, layer_id: u64) -> Option>; [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/traits/animation.rs:40:5 [INFO] [stderr] | [INFO] [stderr] 40 | fn get_log<'a>(&'a self) -> Reader<'a, EditLog>; [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/traits/animation.rs:45:5 [INFO] [stderr] | [INFO] [stderr] 45 | fn edit<'a>(&'a self) -> Editor<'a, PendingEditLog>; [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/traits/animation.rs:50:5 [INFO] [stderr] | [INFO] [stderr] 50 | fn edit_layer<'a>(&'a self, layer_id: u64) -> Editor<'a, PendingEditLog>; [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/traits/animation.rs:82:5 [INFO] [stderr] | [INFO] [stderr] 82 | fn edit_layer<'a>(&'a mut self, layer_id: u64) -> Option>; [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: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/traits/layer/mod.rs:37:142 [INFO] [stderr] | [INFO] [stderr] 37 | fn get_key_frames(&self) -> Box> { self.get_key_frames_during_time(Duration::from_millis(0)..Duration::from_secs(u32::MAX as u64)) } [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `u64::from(u32::MAX)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [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/traits/layer/mod.rs:57:5 [INFO] [stderr] | [INFO] [stderr] 57 | fn as_vector_layer<'a>(&'a self) -> Option>; [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/traits/layer/mod.rs:62:5 [INFO] [stderr] | [INFO] [stderr] 62 | fn edit_vectors<'a>(&'a mut self) -> Option>; [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: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:39:27 [INFO] [stderr] | [INFO] [stderr] 39 | squish_float(tgt, last_position.0 as f64, point.position.0 as f64)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_position.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:39:51 [INFO] [stderr] | [INFO] [stderr] 39 | squish_float(tgt, last_position.0 as f64, point.position.0 as f64)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(point.position.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:40:27 [INFO] [stderr] | [INFO] [stderr] 40 | squish_float(tgt, last_position.1 as f64, point.position.1 as f64)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_position.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:40:51 [INFO] [stderr] | [INFO] [stderr] 40 | squish_float(tgt, last_position.1 as f64, point.position.1 as f64)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(point.position.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:41:27 [INFO] [stderr] | [INFO] [stderr] 41 | squish_float(tgt, last_pressure as f64, point.pressure as f64)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_pressure)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:41:49 [INFO] [stderr] | [INFO] [stderr] 41 | squish_float(tgt, last_pressure as f64, point.pressure as f64)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(point.pressure)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:42:27 [INFO] [stderr] | [INFO] [stderr] 42 | squish_float(tgt, last_tilt.0 as f64, point.tilt.0 as f64)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_tilt.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:42:47 [INFO] [stderr] | [INFO] [stderr] 42 | squish_float(tgt, last_tilt.0 as f64, point.tilt.0 as f64)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(point.tilt.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:43:27 [INFO] [stderr] | [INFO] [stderr] 43 | squish_float(tgt, last_tilt.1 as f64, point.tilt.1 as f64)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_tilt.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:43:47 [INFO] [stderr] | [INFO] [stderr] 43 | squish_float(tgt, last_tilt.1 as f64, point.tilt.1 as f64)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(point.tilt.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:66:41 [INFO] [stderr] | [INFO] [stderr] 66 | let x_pos = unsquish_float(src, last_position.0 as f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_position.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:73:61 [INFO] [stderr] | [INFO] [stderr] 73 | position: (x_pos? as f32, unsquish_float(src, last_position.1 as f64)? as f32), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_position.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:74:45 [INFO] [stderr] | [INFO] [stderr] 74 | pressure: unsquish_float(src, last_pressure as f64)? as f32, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_pressure)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:75:46 [INFO] [stderr] | [INFO] [stderr] 75 | tilt: (unsquish_float(src, last_tilt.0 as f64)? as f32, unsquish_float(src, last_tilt.1 as f64)? as f32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_tilt.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:75:95 [INFO] [stderr] | [INFO] [stderr] 75 | tilt: (unsquish_float(src, last_tilt.0 as f64)? as f32, unsquish_float(src, last_tilt.1 as f64)? as f32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_tilt.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [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/traits/brush.rs:44:76 [INFO] [stderr] | [INFO] [stderr] 44 | fn render_brush<'a>(&'a self, properties: &'a BrushProperties, points: &'a Vec) -> Box<'a+Iterator>; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: change this to: `&[BrushPoint]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `traits::brush_properties::BrushProperties` [INFO] [stderr] --> src/traits/brush_properties.rs:25:5 [INFO] [stderr] | [INFO] [stderr] 25 | / pub fn new() -> BrushProperties { [INFO] [stderr] 26 | | BrushProperties { [INFO] [stderr] 27 | | size: 5.0, [INFO] [stderr] 28 | | opacity: 1.0, [INFO] [stderr] 29 | | color: Color::Rgba(0.0, 0.0, 0.0, 1.0) [INFO] [stderr] 30 | | } [INFO] [stderr] 31 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 21 | impl Default for traits::brush_properties::BrushProperties { [INFO] [stderr] 22 | fn default() -> Self { [INFO] [stderr] 23 | Self::new() [INFO] [stderr] 24 | } [INFO] [stderr] 25 | } [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/traits/vector/brush_properties_element.rs:32:5 [INFO] [stderr] | [INFO] [stderr] 32 | / pub fn brush_properties<'a>(&'a self) -> &BrushProperties { [INFO] [stderr] 33 | | &self.new_properties [INFO] [stderr] 34 | | } [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/traits/vector/brush_properties_element.rs:63:39 [INFO] [stderr] | [INFO] [stderr] 63 | properties.brush_properties = self.new_properties.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.new_properties` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/traits/vector/brush_definition_element.rs:38:5 [INFO] [stderr] | [INFO] [stderr] 38 | / pub fn definition<'a>(&'a self) -> &'a BrushDefinition { [INFO] [stderr] 39 | | &self.new_definition [INFO] [stderr] 40 | | } [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/traits/vector/mod.rs:56:9 [INFO] [stderr] | [INFO] [stderr] 56 | / match self { [INFO] [stderr] 57 | | &BrushDefinition(ref defn) => defn, [INFO] [stderr] 58 | | &BrushProperties(ref props) => props, [INFO] [stderr] 59 | | &BrushStroke(ref elem) => elem [INFO] [stderr] 60 | | } [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] 56 | match *self { [INFO] [stderr] 57 | BrushDefinition(ref defn) => defn, [INFO] [stderr] 58 | BrushProperties(ref props) => props, [INFO] [stderr] 59 | BrushStroke(ref elem) => elem [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/traits/path/point.rs:25:14 [INFO] [stderr] | [INFO] [stderr] 25 | pub fn x(&self) -> f32 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/traits/path/point.rs:29:14 [INFO] [stderr] | [INFO] [stderr] 29 | pub fn y(&self) -> f32 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/path/point.rs:103:18 [INFO] [stderr] | [INFO] [stderr] 103 | 0 => self.position.0 as f64, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.position.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/path/point.rs:104:18 [INFO] [stderr] | [INFO] [stderr] 104 | 1 => self.position.1 as f64, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.position.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `traits::path::path::Path` [INFO] [stderr] --> src/traits/path/path.rs:18:5 [INFO] [stderr] | [INFO] [stderr] 18 | / pub fn new() -> Path { [INFO] [stderr] 19 | | Path { elements: vec![] } [INFO] [stderr] 20 | | } [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] 10 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/traits/path/path.rs:96:17 [INFO] [stderr] | [INFO] [stderr] 96 | / match path { [INFO] [stderr] 97 | | &PathElement::Move(point) => Move(point.x(), point.y()), [INFO] [stderr] 98 | | &PathElement::Line(point) => Line(point.x(), point.y()), [INFO] [stderr] 99 | | &PathElement::Bezier(p, c1, c2) => BezierCurve(p.position, c1.position, c2.position), [INFO] [stderr] 100 | | &PathElement::Close => ClosePath [INFO] [stderr] 101 | | } [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 | match *path { [INFO] [stderr] 97 | PathElement::Move(point) => Move(point.x(), point.y()), [INFO] [stderr] 98 | PathElement::Line(point) => Line(point.x(), point.y()), [INFO] [stderr] 99 | PathElement::Bezier(p, c1, c2) => BezierCurve(p.position, c1.position, c2.position), [INFO] [stderr] 100 | PathElement::Close => ClosePath [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/rect.rs:80:9 [INFO] [stderr] | [INFO] [stderr] 80 | self.x1 == self.x2 && self.y1 == self.y2 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(self.x1 - self.x2).abs() < error` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::float_cmp)] on by default [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/rect.rs:80:9 [INFO] [stderr] | [INFO] [stderr] 80 | self.x1 == self.x2 && self.y1 == self.y2 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/rect.rs:80:31 [INFO] [stderr] | [INFO] [stderr] 80 | self.x1 == self.x2 && self.y1 == self.y2 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(self.y1 - self.y2).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/rect.rs:80:31 [INFO] [stderr] | [INFO] [stderr] 80 | self.x1 == self.x2 && self.y1 == self.y2 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/traits/path/curve.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / match self { [INFO] [stderr] 32 | | &PathCurve(_, Move(point)) | [INFO] [stderr] 33 | | &PathCurve(_, Line(point)) => point, [INFO] [stderr] 34 | | &PathCurve(_, Bezier(point, _cp1, _cp2)) => point, [INFO] [stderr] 35 | | &PathCurve(start, Close) => start [INFO] [stderr] 36 | | } [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] 31 | match *self { [INFO] [stderr] 32 | PathCurve(_, Move(point)) | [INFO] [stderr] 33 | PathCurve(_, Line(point)) => point, [INFO] [stderr] 34 | PathCurve(_, Bezier(point, _cp1, _cp2)) => point, [INFO] [stderr] 35 | PathCurve(start, Close) => start [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/traits/path/curve.rs:43:9 [INFO] [stderr] | [INFO] [stderr] 43 | / match self { [INFO] [stderr] 44 | | &PathCurve(start, Move(end)) | [INFO] [stderr] 45 | | &PathCurve(start, Line(end)) => { [INFO] [stderr] 46 | | let distance = end - start; [INFO] [stderr] ... | [INFO] [stderr] 52 | | &PathCurve(start, Close) => (start, start) [INFO] [stderr] 53 | | } [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] 43 | match *self { [INFO] [stderr] 44 | PathCurve(start, Move(end)) | [INFO] [stderr] 45 | PathCurve(start, Line(end)) => { [INFO] [stderr] 46 | let distance = end - start; [INFO] [stderr] 47 | let one_third = distance * 0.3; [INFO] [stderr] 48 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `editor::animation_editor::AnimationEditor` [INFO] [stderr] --> src/editor/animation_editor.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | / pub fn new() -> AnimationEditor { [INFO] [stderr] 16 | | AnimationEditor { [INFO] [stderr] 17 | | layer_editor: LayerEditor::new() [INFO] [stderr] 18 | | } [INFO] [stderr] 19 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 11 | impl Default for editor::animation_editor::AnimationEditor { [INFO] [stderr] 12 | fn default() -> Self { [INFO] [stderr] 13 | Self::new() [INFO] [stderr] 14 | } [INFO] [stderr] 15 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `editor::layer_editor::LayerEditor` [INFO] [stderr] --> src/editor/layer_editor.rs:16:5 [INFO] [stderr] | [INFO] [stderr] 16 | / pub fn new() -> LayerEditor { [INFO] [stderr] 17 | | LayerEditor { } [INFO] [stderr] 18 | | } [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] 9 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/traits/path/mod.rs:3:1 [INFO] [stderr] | [INFO] [stderr] 3 | mod path; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::module_inception)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/traits/path/bounds.rs:188:62 [INFO] [stderr] | [INFO] [stderr] 188 | Bezier(PathPoint::new(2.0, 3.0), PathPoint::new(-1.1875291, 1.5), PathPoint::new(1.5, 2.5)) [INFO] [stderr] | ^^^^^^^^^ help: consider: `1.187_529_1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `inmemory::animation::InMemoryAnimation` [INFO] [stderr] --> src/inmemory/animation.rs:42:5 [INFO] [stderr] | [INFO] [stderr] 42 | / pub fn new() -> InMemoryAnimation { [INFO] [stderr] 43 | | // Create the core (30fps by default) [INFO] [stderr] 44 | | let core = AnimationCore { [INFO] [stderr] 45 | | edit_log: InMemoryEditLog::new(), [INFO] [stderr] ... | [INFO] [stderr] 54 | | } [INFO] [stderr] 55 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 38 | impl Default for inmemory::animation::InMemoryAnimation { [INFO] [stderr] 39 | fn default() -> Self { [INFO] [stderr] 40 | Self::new() [INFO] [stderr] 41 | } [INFO] [stderr] 42 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/inmemory/animation.rs:79:12 [INFO] [stderr] | [INFO] [stderr] 79 | &**self.0.layers.get(&self.1).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.0.layers[&self.1]` [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/inmemory/animation.rs:107:5 [INFO] [stderr] | [INFO] [stderr] 107 | / fn get_layer_with_id<'a>(&'a self, layer_id: u64) -> Option> { [INFO] [stderr] 108 | | let core = (*self.core).lock().unwrap(); [INFO] [stderr] 109 | | [INFO] [stderr] 110 | | if core.layers.contains_key(&layer_id) { [INFO] [stderr] ... | [INFO] [stderr] 117 | | } [INFO] [stderr] 118 | | } [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/inmemory/animation.rs:120:5 [INFO] [stderr] | [INFO] [stderr] 120 | / fn get_log<'a>(&'a self) -> Reader<'a, EditLog> { [INFO] [stderr] 121 | | let core: &Mutex> = &*self.core; [INFO] [stderr] 122 | | [INFO] [stderr] 123 | | Reader::new(core.lock().unwrap()) [INFO] [stderr] 124 | | } [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/inmemory/animation.rs:212:5 [INFO] [stderr] | [INFO] [stderr] 212 | / fn edit_layer<'a>(&'a mut self, layer_id: u64) -> Option> { [INFO] [stderr] 213 | | if self.layers.contains_key(&layer_id) { [INFO] [stderr] 214 | | let layer_ref = CoreLayerRef(self, layer_id, PhantomData); [INFO] [stderr] 215 | | let reader = Editor::new(layer_ref); [INFO] [stderr] ... | [INFO] [stderr] 220 | | } [INFO] [stderr] 221 | | } [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/inmemory/vector_layer.rs:68:5 [INFO] [stderr] | [INFO] [stderr] 68 | / fn as_vector_layer<'a>(&'a self) -> Option> { [INFO] [stderr] 69 | | let core: &Mutex = &self.core; [INFO] [stderr] 70 | | [INFO] [stderr] 71 | | Some(Reader::new(core.lock().unwrap())) [INFO] [stderr] 72 | | } [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/inmemory/vector_layer.rs:74:5 [INFO] [stderr] | [INFO] [stderr] 74 | / fn edit_vectors<'a>(&'a mut self) -> Option> { [INFO] [stderr] 75 | | let core: &Mutex = &self.core; [INFO] [stderr] 76 | | [INFO] [stderr] 77 | | Some(Editor::new(core.lock().unwrap())) [INFO] [stderr] 78 | | } [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: you should consider deriving a `Default` implementation for `inmemory::empty_iterator::EmptyIterator` [INFO] [stderr] --> src/inmemory/empty_iterator.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | / pub fn new() -> EmptyIterator { [INFO] [stderr] 12 | | EmptyIterator { phantom: PhantomData } [INFO] [stderr] 13 | | } [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] 6 | #[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/inmemory/vector_keyframe.rs:97:5 [INFO] [stderr] | [INFO] [stderr] 97 | / pub fn active_properties<'a>(&'a self) -> &'a VectorProperties { [INFO] [stderr] 98 | | &self.active_properties [INFO] [stderr] 99 | | } [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: you should consider deriving a `Default` implementation for `inmemory::edit_log::InMemoryEditLog` [INFO] [stderr] --> src/inmemory/edit_log.rs:17:5 [INFO] [stderr] | [INFO] [stderr] 17 | / pub fn new() -> InMemoryEditLog { [INFO] [stderr] 18 | | InMemoryEditLog { [INFO] [stderr] 19 | | edits: vec![], [INFO] [stderr] 20 | | } [INFO] [stderr] 21 | | } [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] 8 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/inmemory/pending_log.rs:36:24 [INFO] [stderr] | [INFO] [stderr] 36 | self.pending = edits.iter().map(|edit| edit.clone()).collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `edits.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `brushes::simple::SimpleBrush` [INFO] [stderr] --> src/brushes/simple.rs:17:5 [INFO] [stderr] | [INFO] [stderr] 17 | / pub fn new() -> SimpleBrush { [INFO] [stderr] 18 | | SimpleBrush { } [INFO] [stderr] 19 | | } [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] 12 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/simple.rs:42:63 [INFO] [stderr] | [INFO] [stderr] 42 | let coords: Vec<_> = points.iter().map(|point| Coord2(point.position.0 as f64, point.position.1 as f64)).collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(point.position.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/simple.rs:42:88 [INFO] [stderr] | [INFO] [stderr] 42 | let coords: Vec<_> = points.iter().map(|point| Coord2(point.position.0 as f64, point.position.1 as f64)).collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(point.position.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the loop variable `x` is only used to index `coords`. [INFO] [stderr] --> src/brushes/simple.rs:49:18 [INFO] [stderr] | [INFO] [stderr] 49 | for x in 1..coords.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 49 | for in coords.iter().skip(1) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:79:16 [INFO] [stderr] | [INFO] [stderr] 79 | x: src.position.0 as f64, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(src.position.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:80:16 [INFO] [stderr] | [INFO] [stderr] 80 | y: src.position.1 as f64, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(src.position.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:81:23 [INFO] [stderr] | [INFO] [stderr] 81 | pressure: (src.pressure as f64)*INK_PRESSURE_SCALE [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(src.pressure)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:89:16 [INFO] [stderr] | [INFO] [stderr] 89 | x: src.position.0 as f64, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(src.position.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:90:16 [INFO] [stderr] | [INFO] [stderr] 90 | y: src.position.1 as f64, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(src.position.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:91:23 [INFO] [stderr] | [INFO] [stderr] 91 | pressure: (src.width as f64)*INK_PRESSURE_SCALE [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `f64::from(src.width)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:206:43 [INFO] [stderr] | [INFO] [stderr] 206 | start_point: InkCoord { x: last_point.position.0 as f64, y: last_point.position.1 as f64, pressure: last_point.width as f64 }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_point.position.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:206:76 [INFO] [stderr] | [INFO] [stderr] 206 | start_point: InkCoord { x: last_point.position.0 as f64, y: last_point.position.1 as f64, pressure: last_point.width as f64 }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_point.position.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:206:116 [INFO] [stderr] | [INFO] [stderr] 206 | start_point: InkCoord { x: last_point.position.0 as f64, y: last_point.position.1 as f64, pressure: last_point.width as f64 }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_point.width)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:207:43 [INFO] [stderr] | [INFO] [stderr] 207 | end_point: InkCoord { x: next_point.position.0 as f64, y: next_point.position.1 as f64, pressure: next_point.width as f64 }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(next_point.position.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:207:76 [INFO] [stderr] | [INFO] [stderr] 207 | end_point: InkCoord { x: next_point.position.0 as f64, y: next_point.position.1 as f64, pressure: next_point.width as f64 }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(next_point.position.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:207:116 [INFO] [stderr] | [INFO] [stderr] 207 | end_point: InkCoord { x: next_point.position.0 as f64, y: next_point.position.1 as f64, pressure: next_point.width as f64 }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(next_point.width)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:209:31 [INFO] [stderr] | [INFO] [stderr] 209 | InkCoord { x: next_point.cp1.0 as f64, y: next_point.cp1.1 as f64, pressure: next_point.width as f64 }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(next_point.cp1.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:209:59 [INFO] [stderr] | [INFO] [stderr] 209 | InkCoord { x: next_point.cp1.0 as f64, y: next_point.cp1.1 as f64, pressure: next_point.width as f64 }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(next_point.cp1.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:209:94 [INFO] [stderr] | [INFO] [stderr] 209 | InkCoord { x: next_point.cp1.0 as f64, y: next_point.cp1.1 as f64, pressure: next_point.width as f64 }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(next_point.width)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:210:31 [INFO] [stderr] | [INFO] [stderr] 210 | InkCoord { x: next_point.cp2.0 as f64, y: next_point.cp2.1 as f64, pressure: next_point.width as f64 } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(next_point.cp2.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:210:59 [INFO] [stderr] | [INFO] [stderr] 210 | InkCoord { x: next_point.cp2.0 as f64, y: next_point.cp2.1 as f64, pressure: next_point.width as f64 } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(next_point.cp2.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:210:94 [INFO] [stderr] | [INFO] [stderr] 210 | InkCoord { x: next_point.cp2.0 as f64, y: next_point.cp2.1 as f64, pressure: next_point.width as f64 } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(next_point.width)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/brushes/ink.rs:272:52 [INFO] [stderr] | [INFO] [stderr] 272 | let ink_points: Vec<_> = points.iter().map(|point| InkCoord::from(point)).collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `InkCoord::from` [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: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:311:33 [INFO] [stderr] | [INFO] [stderr] 311 | let scale_up_distance = self.scale_up_distance as f64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.scale_up_distance)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:403:57 [INFO] [stderr] | [INFO] [stderr] 403 | .map(|ink_curve| ink_curve.to_offset_curves((self.min_width*size_ratio) as f64, (self.max_width*size_ratio) as f64)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.min_width*size_ratio)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:403:93 [INFO] [stderr] | [INFO] [stderr] 403 | .map(|ink_curve| ink_curve.to_offset_curves((self.min_width*size_ratio) as f64, (self.max_width*size_ratio) as f64)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.max_width*size_ratio)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `brushes::preview::BrushPreview` [INFO] [stderr] --> src/brushes/preview.rs:19:5 [INFO] [stderr] | [INFO] [stderr] 19 | / pub fn new() -> BrushPreview { [INFO] [stderr] 20 | | BrushPreview { [INFO] [stderr] 21 | | current_brush: create_brush_from_definition(&BrushDefinition::Simple, BrushDrawingStyle::Draw), [INFO] [stderr] 22 | | brush_properties: BrushProperties::new(), [INFO] [stderr] 23 | | points: vec![] [INFO] [stderr] 24 | | } [INFO] [stderr] 25 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 18 | impl Default for brushes::preview::BrushPreview { [INFO] [stderr] 19 | fn default() -> Self { [INFO] [stderr] 20 | Self::new() [INFO] [stderr] 21 | } [INFO] [stderr] 22 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/brushes/preview.rs:142:77 [INFO] [stderr] | [INFO] [stderr] 142 | actions.push(Paint(when, BrushProperties(ElementId::Unassigned, self.brush_properties.clone()))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.brush_properties` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/brushes/mod.rs:18:5 [INFO] [stderr] | [INFO] [stderr] 18 | / match definition { [INFO] [stderr] 19 | | &Simple => Arc::new(SimpleBrush::new()), [INFO] [stderr] 20 | | &Ink(ref ink_definition) => Arc::new(InkBrush::new(ink_definition, drawing_style)) [INFO] [stderr] 21 | | } [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] 18 | match *definition { [INFO] [stderr] 19 | Simple => Arc::new(SimpleBrush::new()), [INFO] [stderr] 20 | Ink(ref ink_definition) => Arc::new(InkBrush::new(ink_definition, drawing_style)) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `flo_animation`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [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/traits/editable.rs:83:1 [INFO] [stderr] | [INFO] [stderr] 83 | / pub fn open_read<'a, EditorType: ?Sized>(editable: &'a Editable) -> Option> { [INFO] [stderr] 84 | | editable.read() [INFO] [stderr] 85 | | } [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/traits/editable.rs:90:1 [INFO] [stderr] | [INFO] [stderr] 90 | / pub fn open_edit<'a, EditorType: ?Sized>(editable: &'a Editable) -> Option> { [INFO] [stderr] 91 | | editable.edit() [INFO] [stderr] 92 | | } [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/traits/edit/element_id.rs:23:9 [INFO] [stderr] | [INFO] [stderr] 23 | / match self { [INFO] [stderr] 24 | | &Unassigned => false, [INFO] [stderr] 25 | | &Assigned(_) => true [INFO] [stderr] 26 | | } [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] 23 | match *self { [INFO] [stderr] 24 | Unassigned => false, [INFO] [stderr] 25 | Assigned(_) => true [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/traits/edit/element_id.rs:44:9 [INFO] [stderr] | [INFO] [stderr] 44 | / match self { [INFO] [stderr] 45 | | &Unassigned => None, [INFO] [stderr] 46 | | &Assigned(id) => Some(id) [INFO] [stderr] 47 | | } [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] 44 | match *self { [INFO] [stderr] 45 | Unassigned => None, [INFO] [stderr] 46 | Assigned(id) => Some(id) [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/traits/animation.rs:35:5 [INFO] [stderr] | [INFO] [stderr] 35 | fn get_layer_with_id<'a>(&'a self, layer_id: u64) -> Option>; [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/traits/animation.rs:40:5 [INFO] [stderr] | [INFO] [stderr] 40 | fn get_log<'a>(&'a self) -> Reader<'a, EditLog>; [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/traits/animation.rs:45:5 [INFO] [stderr] | [INFO] [stderr] 45 | fn edit<'a>(&'a self) -> Editor<'a, PendingEditLog>; [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/traits/animation.rs:50:5 [INFO] [stderr] | [INFO] [stderr] 50 | fn edit_layer<'a>(&'a self, layer_id: u64) -> Editor<'a, PendingEditLog>; [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/traits/animation.rs:82:5 [INFO] [stderr] | [INFO] [stderr] 82 | fn edit_layer<'a>(&'a mut self, layer_id: u64) -> Option>; [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: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/traits/layer/mod.rs:37:142 [INFO] [stderr] | [INFO] [stderr] 37 | fn get_key_frames(&self) -> Box> { self.get_key_frames_during_time(Duration::from_millis(0)..Duration::from_secs(u32::MAX as u64)) } [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `u64::from(u32::MAX)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [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/traits/layer/mod.rs:57:5 [INFO] [stderr] | [INFO] [stderr] 57 | fn as_vector_layer<'a>(&'a self) -> Option>; [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/traits/layer/mod.rs:62:5 [INFO] [stderr] | [INFO] [stderr] 62 | fn edit_vectors<'a>(&'a mut self) -> Option>; [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: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:39:27 [INFO] [stderr] | [INFO] [stderr] 39 | squish_float(tgt, last_position.0 as f64, point.position.0 as f64)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_position.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:39:51 [INFO] [stderr] | [INFO] [stderr] 39 | squish_float(tgt, last_position.0 as f64, point.position.0 as f64)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(point.position.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:40:27 [INFO] [stderr] | [INFO] [stderr] 40 | squish_float(tgt, last_position.1 as f64, point.position.1 as f64)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_position.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:40:51 [INFO] [stderr] | [INFO] [stderr] 40 | squish_float(tgt, last_position.1 as f64, point.position.1 as f64)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(point.position.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:41:27 [INFO] [stderr] | [INFO] [stderr] 41 | squish_float(tgt, last_pressure as f64, point.pressure as f64)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_pressure)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:41:49 [INFO] [stderr] | [INFO] [stderr] 41 | squish_float(tgt, last_pressure as f64, point.pressure as f64)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(point.pressure)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:42:27 [INFO] [stderr] | [INFO] [stderr] 42 | squish_float(tgt, last_tilt.0 as f64, point.tilt.0 as f64)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_tilt.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:42:47 [INFO] [stderr] | [INFO] [stderr] 42 | squish_float(tgt, last_tilt.0 as f64, point.tilt.0 as f64)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(point.tilt.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:43:27 [INFO] [stderr] | [INFO] [stderr] 43 | squish_float(tgt, last_tilt.1 as f64, point.tilt.1 as f64)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_tilt.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:43:47 [INFO] [stderr] | [INFO] [stderr] 43 | squish_float(tgt, last_tilt.1 as f64, point.tilt.1 as f64)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(point.tilt.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:66:41 [INFO] [stderr] | [INFO] [stderr] 66 | let x_pos = unsquish_float(src, last_position.0 as f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_position.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:73:61 [INFO] [stderr] | [INFO] [stderr] 73 | position: (x_pos? as f32, unsquish_float(src, last_position.1 as f64)? as f32), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_position.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:74:45 [INFO] [stderr] | [INFO] [stderr] 74 | pressure: unsquish_float(src, last_pressure as f64)? as f32, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_pressure)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:75:46 [INFO] [stderr] | [INFO] [stderr] 75 | tilt: (unsquish_float(src, last_tilt.0 as f64)? as f32, unsquish_float(src, last_tilt.1 as f64)? as f32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_tilt.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/raw_point.rs:75:95 [INFO] [stderr] | [INFO] [stderr] 75 | tilt: (unsquish_float(src, last_tilt.0 as f64)? as f32, unsquish_float(src, last_tilt.1 as f64)? as f32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_tilt.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: useless use of `vec!` [INFO] [stderr] --> src/traits/raw_point.rs:96:36 [INFO] [stderr] | [INFO] [stderr] 96 | write_raw_points(&mut tgt, &vec![ [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 97 | | RawPoint { position: (2.0, 2.0), pressure: 0.5, tilt: (0.0, 0.0) }, [INFO] [stderr] 98 | | RawPoint { position: (2.0, 2.4), pressure: 0.55, tilt: (20.0, 0.0) }, [INFO] [stderr] 99 | | RawPoint { position: (2.7, 4.2), pressure: 0.51, tilt: (20.0, 11.0) }, [INFO] [stderr] 100 | | RawPoint { position: (3.0, 2.0), pressure: 0.3, tilt: (3.0, 4.0) }, [INFO] [stderr] 101 | | ]).unwrap(); [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_vec)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stderr] help: you can use a slice directly [INFO] [stderr] | [INFO] [stderr] 96 | write_raw_points(&mut tgt, &[RawPoint { position: (2.0, 2.0), pressure: 0.5, tilt: (0.0, 0.0) }, [INFO] [stderr] 97 | RawPoint { position: (2.0, 2.4), pressure: 0.55, tilt: (20.0, 0.0) }, [INFO] [stderr] 98 | RawPoint { position: (2.7, 4.2), pressure: 0.51, tilt: (20.0, 11.0) }, [INFO] [stderr] 99 | RawPoint { position: (3.0, 2.0), pressure: 0.3, tilt: (3.0, 4.0) }]).unwrap(); [INFO] [stderr] | [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/traits/brush.rs:44:76 [INFO] [stderr] | [INFO] [stderr] 44 | fn render_brush<'a>(&'a self, properties: &'a BrushProperties, points: &'a Vec) -> Box<'a+Iterator>; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: change this to: `&[BrushPoint]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `traits::brush_properties::BrushProperties` [INFO] [stderr] --> src/traits/brush_properties.rs:25:5 [INFO] [stderr] | [INFO] [stderr] 25 | / pub fn new() -> BrushProperties { [INFO] [stderr] 26 | | BrushProperties { [INFO] [stderr] 27 | | size: 5.0, [INFO] [stderr] 28 | | opacity: 1.0, [INFO] [stderr] 29 | | color: Color::Rgba(0.0, 0.0, 0.0, 1.0) [INFO] [stderr] 30 | | } [INFO] [stderr] 31 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 21 | impl Default for traits::brush_properties::BrushProperties { [INFO] [stderr] 22 | fn default() -> Self { [INFO] [stderr] 23 | Self::new() [INFO] [stderr] 24 | } [INFO] [stderr] 25 | } [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/traits/vector/brush_properties_element.rs:32:5 [INFO] [stderr] | [INFO] [stderr] 32 | / pub fn brush_properties<'a>(&'a self) -> &BrushProperties { [INFO] [stderr] 33 | | &self.new_properties [INFO] [stderr] 34 | | } [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/traits/vector/brush_properties_element.rs:63:39 [INFO] [stderr] | [INFO] [stderr] 63 | properties.brush_properties = self.new_properties.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.new_properties` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/traits/vector/brush_definition_element.rs:38:5 [INFO] [stderr] | [INFO] [stderr] 38 | / pub fn definition<'a>(&'a self) -> &'a BrushDefinition { [INFO] [stderr] 39 | | &self.new_definition [INFO] [stderr] 40 | | } [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/traits/vector/mod.rs:56:9 [INFO] [stderr] | [INFO] [stderr] 56 | / match self { [INFO] [stderr] 57 | | &BrushDefinition(ref defn) => defn, [INFO] [stderr] 58 | | &BrushProperties(ref props) => props, [INFO] [stderr] 59 | | &BrushStroke(ref elem) => elem [INFO] [stderr] 60 | | } [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] 56 | match *self { [INFO] [stderr] 57 | BrushDefinition(ref defn) => defn, [INFO] [stderr] 58 | BrushProperties(ref props) => props, [INFO] [stderr] 59 | BrushStroke(ref elem) => elem [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/traits/path/point.rs:25:14 [INFO] [stderr] | [INFO] [stderr] 25 | pub fn x(&self) -> f32 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/traits/path/point.rs:29:14 [INFO] [stderr] | [INFO] [stderr] 29 | pub fn y(&self) -> f32 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/path/point.rs:103:18 [INFO] [stderr] | [INFO] [stderr] 103 | 0 => self.position.0 as f64, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.position.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/traits/path/point.rs:104:18 [INFO] [stderr] | [INFO] [stderr] 104 | 1 => self.position.1 as f64, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.position.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `traits::path::path::Path` [INFO] [stderr] --> src/traits/path/path.rs:18:5 [INFO] [stderr] | [INFO] [stderr] 18 | / pub fn new() -> Path { [INFO] [stderr] 19 | | Path { elements: vec![] } [INFO] [stderr] 20 | | } [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] 10 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/traits/path/path.rs:96:17 [INFO] [stderr] | [INFO] [stderr] 96 | / match path { [INFO] [stderr] 97 | | &PathElement::Move(point) => Move(point.x(), point.y()), [INFO] [stderr] 98 | | &PathElement::Line(point) => Line(point.x(), point.y()), [INFO] [stderr] 99 | | &PathElement::Bezier(p, c1, c2) => BezierCurve(p.position, c1.position, c2.position), [INFO] [stderr] 100 | | &PathElement::Close => ClosePath [INFO] [stderr] 101 | | } [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 | match *path { [INFO] [stderr] 97 | PathElement::Move(point) => Move(point.x(), point.y()), [INFO] [stderr] 98 | PathElement::Line(point) => Line(point.x(), point.y()), [INFO] [stderr] 99 | PathElement::Bezier(p, c1, c2) => BezierCurve(p.position, c1.position, c2.position), [INFO] [stderr] 100 | PathElement::Close => ClosePath [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/bounds.rs:114:17 [INFO] [stderr] | [INFO] [stderr] 114 | assert!(bounds.x1 == 30.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(bounds.x1 - 30.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::float_cmp)] on by default [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/bounds.rs:114:17 [INFO] [stderr] | [INFO] [stderr] 114 | assert!(bounds.x1 == 30.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/bounds.rs:115:17 [INFO] [stderr] | [INFO] [stderr] 115 | assert!(bounds.y1 == 20.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(bounds.y1 - 20.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/bounds.rs:115:17 [INFO] [stderr] | [INFO] [stderr] 115 | assert!(bounds.y1 == 20.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/bounds.rs:116:17 [INFO] [stderr] | [INFO] [stderr] 116 | assert!(bounds.x2 == 60.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(bounds.x2 - 60.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/bounds.rs:116:17 [INFO] [stderr] | [INFO] [stderr] 116 | assert!(bounds.x2 == 60.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/bounds.rs:117:17 [INFO] [stderr] | [INFO] [stderr] 117 | assert!(bounds.y2 == 30.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(bounds.y2 - 30.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/bounds.rs:117:17 [INFO] [stderr] | [INFO] [stderr] 117 | assert!(bounds.y2 == 30.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/bounds.rs:124:17 [INFO] [stderr] | [INFO] [stderr] 124 | assert!(bounds.x1 == 30.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(bounds.x1 - 30.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/bounds.rs:124:17 [INFO] [stderr] | [INFO] [stderr] 124 | assert!(bounds.x1 == 30.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/bounds.rs:125:17 [INFO] [stderr] | [INFO] [stderr] 125 | assert!(bounds.y1 == 20.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(bounds.y1 - 20.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/bounds.rs:125:17 [INFO] [stderr] | [INFO] [stderr] 125 | assert!(bounds.y1 == 20.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/bounds.rs:126:17 [INFO] [stderr] | [INFO] [stderr] 126 | assert!(bounds.x2 == 60.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(bounds.x2 - 60.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/bounds.rs:126:17 [INFO] [stderr] | [INFO] [stderr] 126 | assert!(bounds.x2 == 60.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/bounds.rs:127:17 [INFO] [stderr] | [INFO] [stderr] 127 | assert!(bounds.y2 == 30.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(bounds.y2 - 30.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/bounds.rs:127:17 [INFO] [stderr] | [INFO] [stderr] 127 | assert!(bounds.y2 == 30.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/bounds.rs:141:17 [INFO] [stderr] | [INFO] [stderr] 141 | assert!(bounds.x1 == 30.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(bounds.x1 - 30.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/bounds.rs:141:17 [INFO] [stderr] | [INFO] [stderr] 141 | assert!(bounds.x1 == 30.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/bounds.rs:142:17 [INFO] [stderr] | [INFO] [stderr] 142 | assert!(bounds.y1 == 20.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(bounds.y1 - 20.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/bounds.rs:142:17 [INFO] [stderr] | [INFO] [stderr] 142 | assert!(bounds.y1 == 20.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/bounds.rs:143:17 [INFO] [stderr] | [INFO] [stderr] 143 | assert!(bounds.x2 == 60.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(bounds.x2 - 60.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/bounds.rs:143:17 [INFO] [stderr] | [INFO] [stderr] 143 | assert!(bounds.x2 == 60.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/bounds.rs:144:17 [INFO] [stderr] | [INFO] [stderr] 144 | assert!(bounds.y2 == 30.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(bounds.y2 - 30.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/bounds.rs:144:17 [INFO] [stderr] | [INFO] [stderr] 144 | assert!(bounds.y2 == 30.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/bounds.rs:159:17 [INFO] [stderr] | [INFO] [stderr] 159 | assert!(bounds.x1 == 30.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(bounds.x1 - 30.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/bounds.rs:159:17 [INFO] [stderr] | [INFO] [stderr] 159 | assert!(bounds.x1 == 30.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/bounds.rs:160:17 [INFO] [stderr] | [INFO] [stderr] 160 | assert!(bounds.y1 == 20.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(bounds.y1 - 20.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/bounds.rs:160:17 [INFO] [stderr] | [INFO] [stderr] 160 | assert!(bounds.y1 == 20.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/bounds.rs:161:17 [INFO] [stderr] | [INFO] [stderr] 161 | assert!(bounds.x2 == 120.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(bounds.x2 - 120.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/bounds.rs:161:17 [INFO] [stderr] | [INFO] [stderr] 161 | assert!(bounds.x2 == 120.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/bounds.rs:162:17 [INFO] [stderr] | [INFO] [stderr] 162 | assert!(bounds.y2 == 50.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(bounds.y2 - 50.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/bounds.rs:162:17 [INFO] [stderr] | [INFO] [stderr] 162 | assert!(bounds.y2 == 50.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/bounds.rs:176:17 [INFO] [stderr] | [INFO] [stderr] 176 | assert!(bounds.x1 == 30.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(bounds.x1 - 30.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/bounds.rs:176:17 [INFO] [stderr] | [INFO] [stderr] 176 | assert!(bounds.x1 == 30.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/bounds.rs:177:17 [INFO] [stderr] | [INFO] [stderr] 177 | assert!(bounds.y1 == 30.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(bounds.y1 - 30.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/bounds.rs:177:17 [INFO] [stderr] | [INFO] [stderr] 177 | assert!(bounds.y1 == 30.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/bounds.rs:178:17 [INFO] [stderr] | [INFO] [stderr] 178 | assert!(bounds.x2 == 60.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(bounds.x2 - 60.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/bounds.rs:178:17 [INFO] [stderr] | [INFO] [stderr] 178 | assert!(bounds.x2 == 60.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/bounds.rs:179:17 [INFO] [stderr] | [INFO] [stderr] 179 | assert!(bounds.y2 == 60.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(bounds.y2 - 60.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/bounds.rs:179:17 [INFO] [stderr] | [INFO] [stderr] 179 | assert!(bounds.y2 == 60.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/rect.rs:80:9 [INFO] [stderr] | [INFO] [stderr] 80 | self.x1 == self.x2 && self.y1 == self.y2 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(self.x1 - self.x2).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/rect.rs:80:9 [INFO] [stderr] | [INFO] [stderr] 80 | self.x1 == self.x2 && self.y1 == self.y2 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/traits/path/rect.rs:80:31 [INFO] [stderr] | [INFO] [stderr] 80 | self.x1 == self.x2 && self.y1 == self.y2 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(self.y1 - self.y2).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/traits/path/rect.rs:80:31 [INFO] [stderr] | [INFO] [stderr] 80 | self.x1 == self.x2 && self.y1 == self.y2 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/traits/path/curve.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / match self { [INFO] [stderr] 32 | | &PathCurve(_, Move(point)) | [INFO] [stderr] 33 | | &PathCurve(_, Line(point)) => point, [INFO] [stderr] 34 | | &PathCurve(_, Bezier(point, _cp1, _cp2)) => point, [INFO] [stderr] 35 | | &PathCurve(start, Close) => start [INFO] [stderr] 36 | | } [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] 31 | match *self { [INFO] [stderr] 32 | PathCurve(_, Move(point)) | [INFO] [stderr] 33 | PathCurve(_, Line(point)) => point, [INFO] [stderr] 34 | PathCurve(_, Bezier(point, _cp1, _cp2)) => point, [INFO] [stderr] 35 | PathCurve(start, Close) => start [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/traits/path/curve.rs:43:9 [INFO] [stderr] | [INFO] [stderr] 43 | / match self { [INFO] [stderr] 44 | | &PathCurve(start, Move(end)) | [INFO] [stderr] 45 | | &PathCurve(start, Line(end)) => { [INFO] [stderr] 46 | | let distance = end - start; [INFO] [stderr] ... | [INFO] [stderr] 52 | | &PathCurve(start, Close) => (start, start) [INFO] [stderr] 53 | | } [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] 43 | match *self { [INFO] [stderr] 44 | PathCurve(start, Move(end)) | [INFO] [stderr] 45 | PathCurve(start, Line(end)) => { [INFO] [stderr] 46 | let distance = end - start; [INFO] [stderr] 47 | let one_third = distance * 0.3; [INFO] [stderr] 48 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `editor::animation_editor::AnimationEditor` [INFO] [stderr] --> src/editor/animation_editor.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | / pub fn new() -> AnimationEditor { [INFO] [stderr] 16 | | AnimationEditor { [INFO] [stderr] 17 | | layer_editor: LayerEditor::new() [INFO] [stderr] 18 | | } [INFO] [stderr] 19 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 11 | impl Default for editor::animation_editor::AnimationEditor { [INFO] [stderr] 12 | fn default() -> Self { [INFO] [stderr] 13 | Self::new() [INFO] [stderr] 14 | } [INFO] [stderr] 15 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `editor::layer_editor::LayerEditor` [INFO] [stderr] --> src/editor/layer_editor.rs:16:5 [INFO] [stderr] | [INFO] [stderr] 16 | / pub fn new() -> LayerEditor { [INFO] [stderr] 17 | | LayerEditor { } [INFO] [stderr] 18 | | } [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] 9 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `inmemory::animation::InMemoryAnimation` [INFO] [stderr] --> src/inmemory/animation.rs:42:5 [INFO] [stderr] | [INFO] [stderr] 42 | / pub fn new() -> InMemoryAnimation { [INFO] [stderr] 43 | | // Create the core (30fps by default) [INFO] [stderr] 44 | | let core = AnimationCore { [INFO] [stderr] 45 | | edit_log: InMemoryEditLog::new(), [INFO] [stderr] ... | [INFO] [stderr] 54 | | } [INFO] [stderr] 55 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 38 | impl Default for inmemory::animation::InMemoryAnimation { [INFO] [stderr] 39 | fn default() -> Self { [INFO] [stderr] 40 | Self::new() [INFO] [stderr] 41 | } [INFO] [stderr] 42 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/inmemory/animation.rs:79:12 [INFO] [stderr] | [INFO] [stderr] 79 | &**self.0.layers.get(&self.1).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.0.layers[&self.1]` [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/inmemory/animation.rs:107:5 [INFO] [stderr] | [INFO] [stderr] 107 | / fn get_layer_with_id<'a>(&'a self, layer_id: u64) -> Option> { [INFO] [stderr] 108 | | let core = (*self.core).lock().unwrap(); [INFO] [stderr] 109 | | [INFO] [stderr] 110 | | if core.layers.contains_key(&layer_id) { [INFO] [stderr] ... | [INFO] [stderr] 117 | | } [INFO] [stderr] 118 | | } [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/inmemory/animation.rs:120:5 [INFO] [stderr] | [INFO] [stderr] 120 | / fn get_log<'a>(&'a self) -> Reader<'a, EditLog> { [INFO] [stderr] 121 | | let core: &Mutex> = &*self.core; [INFO] [stderr] 122 | | [INFO] [stderr] 123 | | Reader::new(core.lock().unwrap()) [INFO] [stderr] 124 | | } [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/inmemory/animation.rs:212:5 [INFO] [stderr] | [INFO] [stderr] 212 | / fn edit_layer<'a>(&'a mut self, layer_id: u64) -> Option> { [INFO] [stderr] 213 | | if self.layers.contains_key(&layer_id) { [INFO] [stderr] 214 | | let layer_ref = CoreLayerRef(self, layer_id, PhantomData); [INFO] [stderr] 215 | | let reader = Editor::new(layer_ref); [INFO] [stderr] ... | [INFO] [stderr] 220 | | } [INFO] [stderr] 221 | | } [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: length comparison to zero [INFO] [stderr] --> src/inmemory/animation.rs:243:17 [INFO] [stderr] | [INFO] [stderr] 243 | assert!(animation.get_layer_ids().len() == 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `animation.get_layer_ids().is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/inmemory/animation.rs:301:17 [INFO] [stderr] | [INFO] [stderr] 301 | assert!(match &paint_edit[0] { &AnimationEdit::Layer(0, LayerEdit::Paint(_, _)) => true, _ => false }); [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: try [INFO] [stderr] | [INFO] [stderr] 301 | assert!(match paint_edit[0] { AnimationEdit::Layer(0, LayerEdit::Paint(_, _)) => true, _ => false }); [INFO] [stderr] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/inmemory/animation.rs:304:17 [INFO] [stderr] | [INFO] [stderr] 304 | assert!(match &paint_edit[0] { &AnimationEdit::Layer(0, LayerEdit::Paint(_, PaintEdit::BrushStroke(ElementId::Assigned(_), _))) => true, _ => false }); [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: try [INFO] [stderr] | [INFO] [stderr] 304 | assert!(match paint_edit[0] { AnimationEdit::Layer(0, LayerEdit::Paint(_, PaintEdit::BrushStroke(ElementId::Assigned(_), _))) => true, _ => false }); [INFO] [stderr] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: useless use of `vec!` [INFO] [stderr] --> src/inmemory/animation.rs:326:36 [INFO] [stderr] | [INFO] [stderr] 326 | layer_edit.set_pending(&vec![ [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 327 | | LayerEdit::Paint(Duration::from_millis(442), PaintEdit::BrushStroke(ElementId::Unassigned, Arc::new(vec![ [INFO] [stderr] 328 | | RawPoint::from((10.0, 10.0)), [INFO] [stderr] 329 | | RawPoint::from((20.0, 5.0)) [INFO] [stderr] 330 | | ]))) [INFO] [stderr] 331 | | ]); [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stderr] help: you can use a slice directly [INFO] [stderr] | [INFO] [stderr] 326 | layer_edit.set_pending(&[LayerEdit::Paint(Duration::from_millis(442), PaintEdit::BrushStroke(ElementId::Unassigned, Arc::new(vec![ [INFO] [stderr] 327 | RawPoint::from((10.0, 10.0)), [INFO] [stderr] 328 | RawPoint::from((20.0, 5.0)) [INFO] [stderr] 329 | ])))]); [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/inmemory/vector_layer.rs:68:5 [INFO] [stderr] | [INFO] [stderr] 68 | / fn as_vector_layer<'a>(&'a self) -> Option> { [INFO] [stderr] 69 | | let core: &Mutex = &self.core; [INFO] [stderr] 70 | | [INFO] [stderr] 71 | | Some(Reader::new(core.lock().unwrap())) [INFO] [stderr] 72 | | } [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/inmemory/vector_layer.rs:74:5 [INFO] [stderr] | [INFO] [stderr] 74 | / fn edit_vectors<'a>(&'a mut self) -> Option> { [INFO] [stderr] 75 | | let core: &Mutex = &self.core; [INFO] [stderr] 76 | | [INFO] [stderr] 77 | | Some(Editor::new(core.lock().unwrap())) [INFO] [stderr] 78 | | } [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: you should consider deriving a `Default` implementation for `inmemory::empty_iterator::EmptyIterator` [INFO] [stderr] --> src/inmemory/empty_iterator.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | / pub fn new() -> EmptyIterator { [INFO] [stderr] 12 | | EmptyIterator { phantom: PhantomData } [INFO] [stderr] 13 | | } [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] 6 | #[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/inmemory/vector_keyframe.rs:97:5 [INFO] [stderr] | [INFO] [stderr] 97 | / pub fn active_properties<'a>(&'a self) -> &'a VectorProperties { [INFO] [stderr] 98 | | &self.active_properties [INFO] [stderr] 99 | | } [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: you should consider deriving a `Default` implementation for `inmemory::edit_log::InMemoryEditLog` [INFO] [stderr] --> src/inmemory/edit_log.rs:17:5 [INFO] [stderr] | [INFO] [stderr] 17 | / pub fn new() -> InMemoryEditLog { [INFO] [stderr] 18 | | InMemoryEditLog { [INFO] [stderr] 19 | | edits: vec![], [INFO] [stderr] 20 | | } [INFO] [stderr] 21 | | } [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] 8 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/inmemory/edit_log.rs:66:17 [INFO] [stderr] | [INFO] [stderr] 66 | assert!(log.read_iter(0..4).len() == 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `log.read_iter(0..4).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/inmemory/edit_log.rs:128:17 [INFO] [stderr] | [INFO] [stderr] 128 | assert!(log.read_iter(100..300).len() == 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `log.read_iter(100..300).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: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/inmemory/pending_log.rs:36:24 [INFO] [stderr] | [INFO] [stderr] 36 | self.pending = edits.iter().map(|edit| edit.clone()).collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `edits.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `brushes::simple::SimpleBrush` [INFO] [stderr] --> src/brushes/simple.rs:17:5 [INFO] [stderr] | [INFO] [stderr] 17 | / pub fn new() -> SimpleBrush { [INFO] [stderr] 18 | | SimpleBrush { } [INFO] [stderr] 19 | | } [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] 12 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/simple.rs:42:63 [INFO] [stderr] | [INFO] [stderr] 42 | let coords: Vec<_> = points.iter().map(|point| Coord2(point.position.0 as f64, point.position.1 as f64)).collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(point.position.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/simple.rs:42:88 [INFO] [stderr] | [INFO] [stderr] 42 | let coords: Vec<_> = points.iter().map(|point| Coord2(point.position.0 as f64, point.position.1 as f64)).collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(point.position.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the loop variable `x` is only used to index `coords`. [INFO] [stderr] --> src/brushes/simple.rs:49:18 [INFO] [stderr] | [INFO] [stderr] 49 | for x in 1..coords.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 49 | for in coords.iter().skip(1) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:79:16 [INFO] [stderr] | [INFO] [stderr] 79 | x: src.position.0 as f64, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(src.position.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:80:16 [INFO] [stderr] | [INFO] [stderr] 80 | y: src.position.1 as f64, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(src.position.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:81:23 [INFO] [stderr] | [INFO] [stderr] 81 | pressure: (src.pressure as f64)*INK_PRESSURE_SCALE [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(src.pressure)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:89:16 [INFO] [stderr] | [INFO] [stderr] 89 | x: src.position.0 as f64, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(src.position.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:90:16 [INFO] [stderr] | [INFO] [stderr] 90 | y: src.position.1 as f64, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(src.position.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:91:23 [INFO] [stderr] | [INFO] [stderr] 91 | pressure: (src.width as f64)*INK_PRESSURE_SCALE [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `f64::from(src.width)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:206:43 [INFO] [stderr] | [INFO] [stderr] 206 | start_point: InkCoord { x: last_point.position.0 as f64, y: last_point.position.1 as f64, pressure: last_point.width as f64 }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_point.position.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:206:76 [INFO] [stderr] | [INFO] [stderr] 206 | start_point: InkCoord { x: last_point.position.0 as f64, y: last_point.position.1 as f64, pressure: last_point.width as f64 }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_point.position.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:206:116 [INFO] [stderr] | [INFO] [stderr] 206 | start_point: InkCoord { x: last_point.position.0 as f64, y: last_point.position.1 as f64, pressure: last_point.width as f64 }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(last_point.width)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:207:43 [INFO] [stderr] | [INFO] [stderr] 207 | end_point: InkCoord { x: next_point.position.0 as f64, y: next_point.position.1 as f64, pressure: next_point.width as f64 }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(next_point.position.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:207:76 [INFO] [stderr] | [INFO] [stderr] 207 | end_point: InkCoord { x: next_point.position.0 as f64, y: next_point.position.1 as f64, pressure: next_point.width as f64 }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(next_point.position.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:207:116 [INFO] [stderr] | [INFO] [stderr] 207 | end_point: InkCoord { x: next_point.position.0 as f64, y: next_point.position.1 as f64, pressure: next_point.width as f64 }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(next_point.width)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:209:31 [INFO] [stderr] | [INFO] [stderr] 209 | InkCoord { x: next_point.cp1.0 as f64, y: next_point.cp1.1 as f64, pressure: next_point.width as f64 }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(next_point.cp1.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:209:59 [INFO] [stderr] | [INFO] [stderr] 209 | InkCoord { x: next_point.cp1.0 as f64, y: next_point.cp1.1 as f64, pressure: next_point.width as f64 }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(next_point.cp1.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:209:94 [INFO] [stderr] | [INFO] [stderr] 209 | InkCoord { x: next_point.cp1.0 as f64, y: next_point.cp1.1 as f64, pressure: next_point.width as f64 }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(next_point.width)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:210:31 [INFO] [stderr] | [INFO] [stderr] 210 | InkCoord { x: next_point.cp2.0 as f64, y: next_point.cp2.1 as f64, pressure: next_point.width as f64 } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(next_point.cp2.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:210:59 [INFO] [stderr] | [INFO] [stderr] 210 | InkCoord { x: next_point.cp2.0 as f64, y: next_point.cp2.1 as f64, pressure: next_point.width as f64 } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(next_point.cp2.1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:210:94 [INFO] [stderr] | [INFO] [stderr] 210 | InkCoord { x: next_point.cp2.0 as f64, y: next_point.cp2.1 as f64, pressure: next_point.width as f64 } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(next_point.width)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/brushes/ink.rs:272:52 [INFO] [stderr] | [INFO] [stderr] 272 | let ink_points: Vec<_> = points.iter().map(|point| InkCoord::from(point)).collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `InkCoord::from` [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: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:311:33 [INFO] [stderr] | [INFO] [stderr] 311 | let scale_up_distance = self.scale_up_distance as f64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.scale_up_distance)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:403:57 [INFO] [stderr] | [INFO] [stderr] 403 | .map(|ink_curve| ink_curve.to_offset_curves((self.min_width*size_ratio) as f64, (self.max_width*size_ratio) as f64)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.min_width*size_ratio)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/brushes/ink.rs:403:93 [INFO] [stderr] | [INFO] [stderr] 403 | .map(|ink_curve| ink_curve.to_offset_curves((self.min_width*size_ratio) as f64, (self.max_width*size_ratio) as f64)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.max_width*size_ratio)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `brushes::preview::BrushPreview` [INFO] [stderr] --> src/brushes/preview.rs:19:5 [INFO] [stderr] | [INFO] [stderr] 19 | / pub fn new() -> BrushPreview { [INFO] [stderr] 20 | | BrushPreview { [INFO] [stderr] 21 | | current_brush: create_brush_from_definition(&BrushDefinition::Simple, BrushDrawingStyle::Draw), [INFO] [stderr] 22 | | brush_properties: BrushProperties::new(), [INFO] [stderr] 23 | | points: vec![] [INFO] [stderr] 24 | | } [INFO] [stderr] 25 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 18 | impl Default for brushes::preview::BrushPreview { [INFO] [stderr] 19 | fn default() -> Self { [INFO] [stderr] 20 | Self::new() [INFO] [stderr] 21 | } [INFO] [stderr] 22 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/brushes/preview.rs:142:77 [INFO] [stderr] | [INFO] [stderr] 142 | actions.push(Paint(when, BrushProperties(ElementId::Unassigned, self.brush_properties.clone()))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.brush_properties` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/brushes/mod.rs:18:5 [INFO] [stderr] | [INFO] [stderr] 18 | / match definition { [INFO] [stderr] 19 | | &Simple => Arc::new(SimpleBrush::new()), [INFO] [stderr] 20 | | &Ink(ref ink_definition) => Arc::new(InkBrush::new(ink_definition, drawing_style)) [INFO] [stderr] 21 | | } [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] 18 | match *definition { [INFO] [stderr] 19 | Simple => Arc::new(SimpleBrush::new()), [INFO] [stderr] 20 | Ink(ref ink_definition) => Arc::new(InkBrush::new(ink_definition, drawing_style)) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: aborting due to 22 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `flo_animation`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "4d3e8c07f7e49adf4dfaf90e37d9c8c5e5ecf9515fa00b56173c1e75b3b40471"` [INFO] running `"docker" "rm" "-f" "4d3e8c07f7e49adf4dfaf90e37d9c8c5e5ecf9515fa00b56173c1e75b3b40471"` [INFO] [stdout] 4d3e8c07f7e49adf4dfaf90e37d9c8c5e5ecf9515fa00b56173c1e75b3b40471