[INFO] crate lopdf 0.19.0 is already in cache [INFO] extracting crate lopdf 0.19.0 into work/ex/clippy-test-run/sources/stable/reg/lopdf/0.19.0 [INFO] extracting crate lopdf 0.19.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/lopdf/0.19.0 [INFO] validating manifest of lopdf-0.19.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 lopdf-0.19.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 lopdf-0.19.0 [INFO] finished frobbing lopdf-0.19.0 [INFO] frobbed toml for lopdf-0.19.0 written to work/ex/clippy-test-run/sources/stable/reg/lopdf/0.19.0/Cargo.toml [INFO] started frobbing lopdf-0.19.0 [INFO] finished frobbing lopdf-0.19.0 [INFO] frobbed toml for lopdf-0.19.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/lopdf/0.19.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 lopdf-0.19.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-1/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/lopdf/0.19.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] 8df69fc5129241d8d3e5caab2c76aae71f436ae3a45ad2fd30f67d67576bac22 [INFO] running `"docker" "start" "-a" "8df69fc5129241d8d3e5caab2c76aae71f436ae3a45ad2fd30f67d67576bac22"` [INFO] [stderr] Checking lopdf v0.19.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/object.rs:348:4 [INFO] [stderr] | [INFO] [stderr] 348 | dict: dict, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `dict` [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/object.rs:349:4 [INFO] [stderr] | [INFO] [stderr] 349 | content: content, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `content` [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/object.rs:357:4 [INFO] [stderr] | [INFO] [stderr] 357 | dict: dict, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `dict` [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/xref.rs:102:9 [INFO] [stderr] | [INFO] [stderr] 102 | 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/xref.rs:103:9 [INFO] [stderr] | [INFO] [stderr] 103 | generation: generation, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `generation` [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/xref.rs:111:63 [INFO] [stderr] | [INFO] [stderr] 111 | xref.insert((start + j) as u32, XrefEntry::Compressed { container: container, index: index }); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `container` [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/xref.rs:111:85 [INFO] [stderr] | [INFO] [stderr] 111 | xref.insert((start + j) as u32, XrefEntry::Compressed { container: container, index: index }); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `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/content.rs:17:4 [INFO] [stderr] | [INFO] [stderr] 17 | operands: operands, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `operands` [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/reader.rs:32:4 [INFO] [stderr] | [INFO] [stderr] 32 | buffer: buffer, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `buffer` [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/object.rs:348:4 [INFO] [stderr] | [INFO] [stderr] 348 | dict: dict, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `dict` [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/object.rs:349:4 [INFO] [stderr] | [INFO] [stderr] 349 | content: content, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `content` [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/object.rs:357:4 [INFO] [stderr] | [INFO] [stderr] 357 | dict: dict, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `dict` [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/xref.rs:102:9 [INFO] [stderr] | [INFO] [stderr] 102 | 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/xref.rs:103:9 [INFO] [stderr] | [INFO] [stderr] 103 | generation: generation, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `generation` [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/xref.rs:111:63 [INFO] [stderr] | [INFO] [stderr] 111 | xref.insert((start + j) as u32, XrefEntry::Compressed { container: container, index: index }); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `container` [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/xref.rs:111:85 [INFO] [stderr] | [INFO] [stderr] 111 | xref.insert((start + j) as u32, XrefEntry::Compressed { container: container, index: index }); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `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/content.rs:17:4 [INFO] [stderr] | [INFO] [stderr] 17 | operands: operands, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `operands` [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/reader.rs:32:4 [INFO] [stderr] | [INFO] [stderr] 32 | buffer: buffer, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `buffer` [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: unneeded return statement [INFO] [stderr] --> src/object.rs:443:3 [INFO] [stderr] | [INFO] [stderr] 443 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/encodings/mod.rs:1:1 [INFO] [stderr] | [INFO] [stderr] 1 | pub mod encodings; [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: operator precedence can trip the unwary [INFO] [stderr] --> src/parser.rs:11:2 [INFO] [stderr] | [INFO] [stderr] 11 | sym(b'\r') * sym(b'\n') | sym(b'\n') | sym(b'\r') [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider parenthesizing your expression: `(sym(b'\r') * sym(b'\n')) | sym(b'\n')` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::precedence)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/parser.rs:32:38 [INFO] [stderr] | [INFO] [stderr] 32 | let number = one_of(b"+-").opt() + (one_of(b"0123456789").repeat(1..) * sym(b'.') - one_of(b"0123456789").repeat(0..) | sym(b'.') - one_of(b"0123456789").repeat(1..)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider parenthesizing your expression: `(one_of(b"0123456789").repeat(1..) * sym(b'.') - one_of(b"0123456789").repeat(0..)) | (sym(b'.') - one_of(b"0123456789").repeat(1..))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/parser.rs:47:15 [INFO] [stderr] | [INFO] [stderr] 47 | sym(b'/') * (none_of(b" \t\n\r\x0C()<>[]{}/%#") | sym(b'#') * hex_char()).repeat(0..) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider parenthesizing your expression: `none_of(b" \t\n\r\x0C()<>[]{}/%#") | (sym(b'#') * hex_char())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/parser.rs:105:2 [INFO] [stderr] | [INFO] [stderr] 105 | dictionary() - space() - seq(b"stream") - eol() >> move |dict: Dictionary| { [INFO] [stderr] | _____^ [INFO] [stderr] 106 | | if let Some(length) = dict.get(b"Length").and_then(|value| { [INFO] [stderr] 107 | | if let Some(id) = value.as_reference() { [INFO] [stderr] 108 | | return reader.get_object(id).and_then(|value| value.as_i64()); [INFO] [stderr] ... | [INFO] [stderr] 116 | | } [INFO] [stderr] 117 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] help: consider parenthesizing your expression [INFO] [stderr] | [INFO] [stderr] 105 | (dictionary() - space() - seq(b"stream") - eol()) >> move |dict: Dictionary| { [INFO] [stderr] 106 | if let Some(length) = dict.get(b"Length").and_then(|value| { [INFO] [stderr] 107 | if let Some(id) = value.as_reference() { [INFO] [stderr] 108 | return reader.get_object(id).and_then(|value| value.as_i64()); [INFO] [stderr] 109 | } [INFO] [stderr] 110 | return value.as_i64(); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:110:4 [INFO] [stderr] | [INFO] [stderr] 110 | return value.as_i64(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `value.as_i64()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/parser.rs:127:3 [INFO] [stderr] | [INFO] [stderr] 127 | (seq(b"null").map(|_| Object::Null) [INFO] [stderr] | ______^ [INFO] [stderr] 128 | | | seq(b"true").map(|_| Object::Boolean(true)) [INFO] [stderr] 129 | | | seq(b"false").map(|_| Object::Boolean(false)) [INFO] [stderr] 130 | | | object_id().map(Object::Reference) - sym(b'R') [INFO] [stderr] | |________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] help: consider parenthesizing your expression [INFO] [stderr] | [INFO] [stderr] 127 | (seq(b"null").map(|_| Object::Null) [INFO] [stderr] 128 | | seq(b"true").map(|_| Object::Boolean(true)) [INFO] [stderr] 129 | | seq(b"false").map(|_| Object::Boolean(false)) | (object_id().map(Object::Reference) - sym(b'R')) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/parser.rs:142:3 [INFO] [stderr] | [INFO] [stderr] 142 | (seq(b"null").map(|_| Object::Null) [INFO] [stderr] | ______^ [INFO] [stderr] 143 | | | seq(b"true").map(|_| Object::Boolean(true)) [INFO] [stderr] 144 | | | seq(b"false").map(|_| Object::Boolean(false)) [INFO] [stderr] 145 | | | object_id().map(Object::Reference) - sym(b'R') [INFO] [stderr] | |________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] help: consider parenthesizing your expression [INFO] [stderr] | [INFO] [stderr] 142 | (seq(b"null").map(|_| Object::Null) [INFO] [stderr] 143 | | seq(b"true").map(|_| Object::Boolean(true)) [INFO] [stderr] 144 | | seq(b"false").map(|_| Object::Boolean(false)) | (object_id().map(Object::Reference) - sym(b'R')) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/reader.rs:139:5 [INFO] [stderr] | [INFO] [stderr] 139 | return value.as_i64(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `value.as_i64()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/object.rs:443:3 [INFO] [stderr] | [INFO] [stderr] 443 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/encodings/mod.rs:1:1 [INFO] [stderr] | [INFO] [stderr] 1 | pub mod encodings; [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: operator precedence can trip the unwary [INFO] [stderr] --> src/parser.rs:11:2 [INFO] [stderr] | [INFO] [stderr] 11 | sym(b'\r') * sym(b'\n') | sym(b'\n') | sym(b'\r') [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider parenthesizing your expression: `(sym(b'\r') * sym(b'\n')) | sym(b'\n')` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::precedence)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/parser.rs:32:38 [INFO] [stderr] | [INFO] [stderr] 32 | let number = one_of(b"+-").opt() + (one_of(b"0123456789").repeat(1..) * sym(b'.') - one_of(b"0123456789").repeat(0..) | sym(b'.') - one_of(b"0123456789").repeat(1..)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider parenthesizing your expression: `(one_of(b"0123456789").repeat(1..) * sym(b'.') - one_of(b"0123456789").repeat(0..)) | (sym(b'.') - one_of(b"0123456789").repeat(1..))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/parser.rs:47:15 [INFO] [stderr] | [INFO] [stderr] 47 | sym(b'/') * (none_of(b" \t\n\r\x0C()<>[]{}/%#") | sym(b'#') * hex_char()).repeat(0..) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider parenthesizing your expression: `none_of(b" \t\n\r\x0C()<>[]{}/%#") | (sym(b'#') * hex_char())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/parser.rs:105:2 [INFO] [stderr] | [INFO] [stderr] 105 | dictionary() - space() - seq(b"stream") - eol() >> move |dict: Dictionary| { [INFO] [stderr] | _____^ [INFO] [stderr] 106 | | if let Some(length) = dict.get(b"Length").and_then(|value| { [INFO] [stderr] 107 | | if let Some(id) = value.as_reference() { [INFO] [stderr] 108 | | return reader.get_object(id).and_then(|value| value.as_i64()); [INFO] [stderr] ... | [INFO] [stderr] 116 | | } [INFO] [stderr] 117 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] help: consider parenthesizing your expression [INFO] [stderr] | [INFO] [stderr] 105 | (dictionary() - space() - seq(b"stream") - eol()) >> move |dict: Dictionary| { [INFO] [stderr] 106 | if let Some(length) = dict.get(b"Length").and_then(|value| { [INFO] [stderr] 107 | if let Some(id) = value.as_reference() { [INFO] [stderr] 108 | return reader.get_object(id).and_then(|value| value.as_i64()); [INFO] [stderr] 109 | } [INFO] [stderr] 110 | return value.as_i64(); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:110:4 [INFO] [stderr] | [INFO] [stderr] 110 | return value.as_i64(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `value.as_i64()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/parser.rs:127:3 [INFO] [stderr] | [INFO] [stderr] 127 | (seq(b"null").map(|_| Object::Null) [INFO] [stderr] | ______^ [INFO] [stderr] 128 | | | seq(b"true").map(|_| Object::Boolean(true)) [INFO] [stderr] 129 | | | seq(b"false").map(|_| Object::Boolean(false)) [INFO] [stderr] 130 | | | object_id().map(Object::Reference) - sym(b'R') [INFO] [stderr] | |________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] help: consider parenthesizing your expression [INFO] [stderr] | [INFO] [stderr] 127 | (seq(b"null").map(|_| Object::Null) [INFO] [stderr] 128 | | seq(b"true").map(|_| Object::Boolean(true)) [INFO] [stderr] 129 | | seq(b"false").map(|_| Object::Boolean(false)) | (object_id().map(Object::Reference) - sym(b'R')) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/parser.rs:142:3 [INFO] [stderr] | [INFO] [stderr] 142 | (seq(b"null").map(|_| Object::Null) [INFO] [stderr] | ______^ [INFO] [stderr] 143 | | | seq(b"true").map(|_| Object::Boolean(true)) [INFO] [stderr] 144 | | | seq(b"false").map(|_| Object::Boolean(false)) [INFO] [stderr] 145 | | | object_id().map(Object::Reference) - sym(b'R') [INFO] [stderr] | |________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] help: consider parenthesizing your expression [INFO] [stderr] | [INFO] [stderr] 142 | (seq(b"null").map(|_| Object::Null) [INFO] [stderr] 143 | | seq(b"true").map(|_| Object::Boolean(true)) [INFO] [stderr] 144 | | seq(b"false").map(|_| Object::Boolean(false)) | (object_id().map(Object::Reference) - sym(b'R')) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/reader.rs:139:5 [INFO] [stderr] | [INFO] [stderr] 139 | return value.as_i64(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `value.as_i64()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: casting i8 to i64 may become silently lossy if types change [INFO] [stderr] --> src/object.rs:73:22 [INFO] [stderr] | [INFO] [stderr] 73 | Object::Integer(number as i64) [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `i64::from(number)` [INFO] [stderr] ... [INFO] [stderr] 80 | / from_smaller_ints! { [INFO] [stderr] 81 | | i8 i16 i32 [INFO] [stderr] 82 | | u8 u16 u32 [INFO] [stderr] 83 | | } [INFO] [stderr] | |_- in this macro invocation [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: casting i16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/object.rs:73:22 [INFO] [stderr] | [INFO] [stderr] 73 | Object::Integer(number as i64) [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `i64::from(number)` [INFO] [stderr] ... [INFO] [stderr] 80 | / from_smaller_ints! { [INFO] [stderr] 81 | | i8 i16 i32 [INFO] [stderr] 82 | | u8 u16 u32 [INFO] [stderr] 83 | | } [INFO] [stderr] | |_- in this macro invocation [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 i32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/object.rs:73:22 [INFO] [stderr] | [INFO] [stderr] 73 | Object::Integer(number as i64) [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `i64::from(number)` [INFO] [stderr] ... [INFO] [stderr] 80 | / from_smaller_ints! { [INFO] [stderr] 81 | | i8 i16 i32 [INFO] [stderr] 82 | | u8 u16 u32 [INFO] [stderr] 83 | | } [INFO] [stderr] | |_- in this macro invocation [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 u8 to i64 may become silently lossy if types change [INFO] [stderr] --> src/object.rs:73:22 [INFO] [stderr] | [INFO] [stderr] 73 | Object::Integer(number as i64) [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `i64::from(number)` [INFO] [stderr] ... [INFO] [stderr] 80 | / from_smaller_ints! { [INFO] [stderr] 81 | | i8 i16 i32 [INFO] [stderr] 82 | | u8 u16 u32 [INFO] [stderr] 83 | | } [INFO] [stderr] | |_- in this macro invocation [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 u16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/object.rs:73:22 [INFO] [stderr] | [INFO] [stderr] 73 | Object::Integer(number as i64) [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `i64::from(number)` [INFO] [stderr] ... [INFO] [stderr] 80 | / from_smaller_ints! { [INFO] [stderr] 81 | | i8 i16 i32 [INFO] [stderr] 82 | | u8 u16 u32 [INFO] [stderr] 83 | | } [INFO] [stderr] | |_- in this macro invocation [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 u32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/object.rs:73:22 [INFO] [stderr] | [INFO] [stderr] 73 | Object::Integer(number as i64) [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `i64::from(number)` [INFO] [stderr] ... [INFO] [stderr] 80 | / from_smaller_ints! { [INFO] [stderr] 81 | | i8 i16 i32 [INFO] [stderr] 82 | | u8 u16 u32 [INFO] [stderr] 83 | | } [INFO] [stderr] | |_- in this macro invocation [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/object.rs:93:16 [INFO] [stderr] | [INFO] [stderr] 93 | Object::Real(number as f64) [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `f64::from(number)` [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: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/object.rs:240:23 [INFO] [stderr] | [INFO] [stderr] 240 | let items = array.into_iter().map(|item| format!("{:?}", item)).collect::>(); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: item `object::Dictionary` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/object.rs:250:1 [INFO] [stderr] | [INFO] [stderr] 250 | / impl Dictionary { [INFO] [stderr] 251 | | pub fn new() -> Dictionary { [INFO] [stderr] 252 | | Dictionary(LinkedHashMap::new()) [INFO] [stderr] 253 | | } [INFO] [stderr] ... | [INFO] [stderr] 297 | | } [INFO] [stderr] 298 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `object::Dictionary` [INFO] [stderr] --> src/object.rs:251:2 [INFO] [stderr] | [INFO] [stderr] 251 | pub fn new() -> Dictionary { [INFO] [stderr] | _____^ [INFO] [stderr] 252 | | Dictionary(LinkedHashMap::new()) [INFO] [stderr] 253 | | } [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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/object.rs:415:4 [INFO] [stderr] | [INFO] [stderr] 415 | match filter.as_str() { [INFO] [stderr] | _____________^ [INFO] [stderr] 416 | | "FlateDecode" => { [INFO] [stderr] 417 | | if self.dict.get(b"Subtype").and_then(|v| v.as_name_str()) == Some("Image") { [INFO] [stderr] 418 | | return None; [INFO] [stderr] ... | [INFO] [stderr] 440 | | _ => {} [INFO] [stderr] 441 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 415 | if let "FlateDecode" = filter.as_str() { [INFO] [stderr] 416 | if self.dict.get(b"Subtype").and_then(|v| v.as_name_str()) == Some("Image") { [INFO] [stderr] 417 | return None; [INFO] [stderr] 418 | } [INFO] [stderr] 419 | let mut data = Vec::new(); [INFO] [stderr] 420 | if !self.content.is_empty() { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `document::Document` [INFO] [stderr] --> src/document.rs:32:2 [INFO] [stderr] | [INFO] [stderr] 32 | pub fn new() -> Document { [INFO] [stderr] | _____^ [INFO] [stderr] 33 | | Document { [INFO] [stderr] 34 | | version: "1.4".to_string(), [INFO] [stderr] 35 | | trailer: Dictionary::new(), [INFO] [stderr] ... | [INFO] [stderr] 39 | | } [INFO] [stderr] 40 | | } [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] 30 | impl Default for document::Document { [INFO] [stderr] 31 | fn default() -> Self { [INFO] [stderr] 32 | Self::new() [INFO] [stderr] 33 | } [INFO] [stderr] 34 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/document.rs:158:7 [INFO] [stderr] | [INFO] [stderr] 158 | content.as_reference().map(|id| streams.push(id)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- [INFO] [stderr] | | [INFO] [stderr] | help: try this: `if let Some(id) = content.as_reference() { streams.push(id) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_map_unit_fn)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/document.rs:173:5 [INFO] [stderr] | [INFO] [stderr] 173 | match *content_stream { [INFO] [stderr] | _________________^ [INFO] [stderr] 174 | | Object::Stream(ref stream) => { [INFO] [stderr] 175 | | if let Some(data) = stream.decompressed_content() { [INFO] [stderr] 176 | | content.write_all(&data)?; [INFO] [stderr] ... | [INFO] [stderr] 181 | | _ => {} [INFO] [stderr] 182 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 173 | if let Object::Stream(ref stream) = *content_stream { [INFO] [stderr] 174 | if let Some(data) = stream.decompressed_content() { [INFO] [stderr] 175 | content.write_all(&data)?; [INFO] [stderr] 176 | } else { [INFO] [stderr] 177 | content.write_all(&stream.content)?; [INFO] [stderr] 178 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/document.rs:219:17 [INFO] [stderr] | [INFO] [stderr] 219 | let font = match value { [INFO] [stderr] | ________________________________^ [INFO] [stderr] 220 | | &Object::Reference(id) => doc.get_dictionary(id), [INFO] [stderr] 221 | | &Object::Dictionary(ref dict) => Some(dict), [INFO] [stderr] 222 | | _ => None, [INFO] [stderr] 223 | | }; [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] 219 | let font = match *value { [INFO] [stderr] 220 | Object::Reference(id) => doc.get_dictionary(id), [INFO] [stderr] 221 | Object::Dictionary(ref dict) => Some(dict), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting i8 to i64 may become silently lossy if types change [INFO] [stderr] --> src/object.rs:73:22 [INFO] [stderr] | [INFO] [stderr] 73 | Object::Integer(number as i64) [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `i64::from(number)` [INFO] [stderr] ... [INFO] [stderr] 80 | / from_smaller_ints! { [INFO] [stderr] 81 | | i8 i16 i32 [INFO] [stderr] 82 | | u8 u16 u32 [INFO] [stderr] 83 | | } [INFO] [stderr] | |_- in this macro invocation [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: casting i16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/object.rs:73:22 [INFO] [stderr] | [INFO] [stderr] 73 | Object::Integer(number as i64) [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `i64::from(number)` [INFO] [stderr] ... [INFO] [stderr] 80 | / from_smaller_ints! { [INFO] [stderr] 81 | | i8 i16 i32 [INFO] [stderr] 82 | | u8 u16 u32 [INFO] [stderr] 83 | | } [INFO] [stderr] | |_- in this macro invocation [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 i32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/object.rs:73:22 [INFO] [stderr] | [INFO] [stderr] 73 | Object::Integer(number as i64) [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `i64::from(number)` [INFO] [stderr] ... [INFO] [stderr] 80 | / from_smaller_ints! { [INFO] [stderr] 81 | | i8 i16 i32 [INFO] [stderr] 82 | | u8 u16 u32 [INFO] [stderr] 83 | | } [INFO] [stderr] | |_- in this macro invocation [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 u8 to i64 may become silently lossy if types change [INFO] [stderr] --> src/object.rs:73:22 [INFO] [stderr] | [INFO] [stderr] 73 | Object::Integer(number as i64) [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `i64::from(number)` [INFO] [stderr] ... [INFO] [stderr] 80 | / from_smaller_ints! { [INFO] [stderr] 81 | | i8 i16 i32 [INFO] [stderr] 82 | | u8 u16 u32 [INFO] [stderr] 83 | | } [INFO] [stderr] | |_- in this macro invocation [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 u16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/object.rs:73:22 [INFO] [stderr] | [INFO] [stderr] 73 | Object::Integer(number as i64) [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `i64::from(number)` [INFO] [stderr] ... [INFO] [stderr] 80 | / from_smaller_ints! { [INFO] [stderr] 81 | | i8 i16 i32 [INFO] [stderr] 82 | | u8 u16 u32 [INFO] [stderr] 83 | | } [INFO] [stderr] | |_- in this macro invocation [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 u32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/object.rs:73:22 [INFO] [stderr] | [INFO] [stderr] 73 | Object::Integer(number as i64) [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `i64::from(number)` [INFO] [stderr] ... [INFO] [stderr] 80 | / from_smaller_ints! { [INFO] [stderr] 81 | | i8 i16 i32 [INFO] [stderr] 82 | | u8 u16 u32 [INFO] [stderr] 83 | | } [INFO] [stderr] | |_- in this macro invocation [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/object.rs:93:16 [INFO] [stderr] | [INFO] [stderr] 93 | Object::Real(number as f64) [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `f64::from(number)` [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: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/object.rs:240:23 [INFO] [stderr] | [INFO] [stderr] 240 | let items = array.into_iter().map(|item| format!("{:?}", item)).collect::>(); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: item `object::Dictionary` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/object.rs:250:1 [INFO] [stderr] | [INFO] [stderr] 250 | / impl Dictionary { [INFO] [stderr] 251 | | pub fn new() -> Dictionary { [INFO] [stderr] 252 | | Dictionary(LinkedHashMap::new()) [INFO] [stderr] 253 | | } [INFO] [stderr] ... | [INFO] [stderr] 297 | | } [INFO] [stderr] 298 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `object::Dictionary` [INFO] [stderr] --> src/object.rs:251:2 [INFO] [stderr] | [INFO] [stderr] 251 | pub fn new() -> Dictionary { [INFO] [stderr] | _____^ [INFO] [stderr] 252 | | Dictionary(LinkedHashMap::new()) [INFO] [stderr] 253 | | } [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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/object.rs:415:4 [INFO] [stderr] | [INFO] [stderr] 415 | match filter.as_str() { [INFO] [stderr] | _____________^ [INFO] [stderr] 416 | | "FlateDecode" => { [INFO] [stderr] 417 | | if self.dict.get(b"Subtype").and_then(|v| v.as_name_str()) == Some("Image") { [INFO] [stderr] 418 | | return None; [INFO] [stderr] ... | [INFO] [stderr] 440 | | _ => {} [INFO] [stderr] 441 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 415 | if let "FlateDecode" = filter.as_str() { [INFO] [stderr] 416 | if self.dict.get(b"Subtype").and_then(|v| v.as_name_str()) == Some("Image") { [INFO] [stderr] 417 | return None; [INFO] [stderr] 418 | } [INFO] [stderr] 419 | let mut data = Vec::new(); [INFO] [stderr] 420 | if !self.content.is_empty() { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/object_stream.rs:17:6 [INFO] [stderr] | [INFO] [stderr] 17 | if stream.content.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!stream.content.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: identical conversion [INFO] [stderr] --> src/object_stream.rs:26:22 [INFO] [stderr] | [INFO] [stderr] 26 | let mut numbers = numbers.into_iter(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `numbers` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `document::Document` [INFO] [stderr] --> src/document.rs:32:2 [INFO] [stderr] | [INFO] [stderr] 32 | pub fn new() -> Document { [INFO] [stderr] | _____^ [INFO] [stderr] 33 | | Document { [INFO] [stderr] 34 | | version: "1.4".to_string(), [INFO] [stderr] 35 | | trailer: Dictionary::new(), [INFO] [stderr] ... | [INFO] [stderr] 39 | | } [INFO] [stderr] 40 | | } [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] 30 | impl Default for document::Document { [INFO] [stderr] 31 | fn default() -> Self { [INFO] [stderr] 32 | Self::new() [INFO] [stderr] 33 | } [INFO] [stderr] 34 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/document.rs:158:7 [INFO] [stderr] | [INFO] [stderr] 158 | content.as_reference().map(|id| streams.push(id)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- [INFO] [stderr] | | [INFO] [stderr] | help: try this: `if let Some(id) = content.as_reference() { streams.push(id) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_map_unit_fn)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/document.rs:173:5 [INFO] [stderr] | [INFO] [stderr] 173 | match *content_stream { [INFO] [stderr] | _________________^ [INFO] [stderr] 174 | | Object::Stream(ref stream) => { [INFO] [stderr] 175 | | if let Some(data) = stream.decompressed_content() { [INFO] [stderr] 176 | | content.write_all(&data)?; [INFO] [stderr] ... | [INFO] [stderr] 181 | | _ => {} [INFO] [stderr] 182 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 173 | if let Object::Stream(ref stream) = *content_stream { [INFO] [stderr] 174 | if let Some(data) = stream.decompressed_content() { [INFO] [stderr] 175 | content.write_all(&data)?; [INFO] [stderr] 176 | } else { [INFO] [stderr] 177 | content.write_all(&stream.content)?; [INFO] [stderr] 178 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/xref.rs:98:27 [INFO] [stderr] | [INFO] [stderr] 98 | let generation = if bytes3.len() > 0 { read_big_endian_interger(&mut reader, bytes3.as_mut_slice()) } else { 0 } as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!bytes3.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: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/xref.rs:128:26 [INFO] [stderr] | [INFO] [stderr] 128 | value = (value << 8) + byte as u32; [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(byte)` [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/document.rs:219:17 [INFO] [stderr] | [INFO] [stderr] 219 | let font = match value { [INFO] [stderr] | ________________________________^ [INFO] [stderr] 220 | | &Object::Reference(id) => doc.get_dictionary(id), [INFO] [stderr] 221 | | &Object::Dictionary(ref dict) => Some(dict), [INFO] [stderr] 222 | | _ => None, [INFO] [stderr] 223 | | }; [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] 219 | let font = match *value { [INFO] [stderr] 220 | Object::Reference(id) => doc.get_dictionary(id), [INFO] [stderr] 221 | Object::Dictionary(ref dict) => Some(dict), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/object_stream.rs:17:6 [INFO] [stderr] | [INFO] [stderr] 17 | if stream.content.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!stream.content.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: identical conversion [INFO] [stderr] --> src/object_stream.rs:26:22 [INFO] [stderr] | [INFO] [stderr] 26 | let mut numbers = numbers.into_iter(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `numbers` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/xref.rs:98:27 [INFO] [stderr] | [INFO] [stderr] 98 | let generation = if bytes3.len() > 0 { read_big_endian_interger(&mut reader, bytes3.as_mut_slice()) } else { 0 } as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!bytes3.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: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/xref.rs:128:26 [INFO] [stderr] | [INFO] [stderr] 128 | value = (value << 8) + byte as u32; [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(byte)` [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 u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/filters/png.rs:26:20 [INFO] [stderr] | [INFO] [stderr] 26 | let expand_left = left as i16; [INFO] [stderr] | ^^^^^^^^^^^ help: try: `i16::from(left)` [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 u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/filters/png.rs:27:21 [INFO] [stderr] | [INFO] [stderr] 27 | let expand_above = above as i16; [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `i16::from(above)` [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 u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/filters/png.rs:28:25 [INFO] [stderr] | [INFO] [stderr] 28 | let expand_upperleft = upperleft as i16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `i16::from(upperleft)` [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 u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/filters/png.rs:67:44 [INFO] [stderr] | [INFO] [stderr] 67 | current[i] = current[i].wrapping_add(((current[i - bpp] as i16 + previous[i] as i16) / 2) as u8); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i16::from(current[i - bpp])` [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 u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/filters/png.rs:67:70 [INFO] [stderr] | [INFO] [stderr] 67 | current[i] = current[i].wrapping_add(((current[i - bpp] as i16 + previous[i] as i16) / 2) as u8); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `i16::from(previous[i])` [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/parser.rs:28:27 [INFO] [stderr] | [INFO] [stderr] 28 | number.collect().convert(|v| String::from_utf8(v)).convert(|s| i64::from_str(&s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `String::from_utf8` [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/parser.rs:104:1 [INFO] [stderr] | [INFO] [stderr] 104 | / fn stream<'a>(reader: &'a Reader) -> parser::Parser<'a, u8, Stream> { [INFO] [stderr] 105 | | dictionary() - space() - seq(b"stream") - eol() >> move |dict: Dictionary| { [INFO] [stderr] 106 | | if let Some(length) = dict.get(b"Length").and_then(|value| { [INFO] [stderr] 107 | | if let Some(id) = value.as_reference() { [INFO] [stderr] ... | [INFO] [stderr] 117 | | } [INFO] [stderr] 118 | | } [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/parser.rs:141:1 [INFO] [stderr] | [INFO] [stderr] 141 | / fn object<'a>(reader: &'a Reader) -> parser::Parser<'a, u8, Object> { [INFO] [stderr] 142 | | (seq(b"null").map(|_| Object::Null) [INFO] [stderr] 143 | | | seq(b"true").map(|_| Object::Boolean(true)) [INFO] [stderr] 144 | | | seq(b"false").map(|_| Object::Boolean(false)) [INFO] [stderr] ... | [INFO] [stderr] 154 | | - space() [INFO] [stderr] 155 | | } [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/parser.rs:157:1 [INFO] [stderr] | [INFO] [stderr] 157 | / pub fn indirect_object<'a>(reader: &'a Reader) -> parser::Parser<'a, u8, (ObjectId, Object)> { [INFO] [stderr] 158 | | object_id() - seq(b"obj") - space() + object(reader) - space() - seq(b"endobj").opt() - space() [INFO] [stderr] 159 | | } [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: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/parser.rs:172:69 [INFO] [stderr] | [INFO] [stderr] 172 | .fold(Xref::new(0), |mut xref: Xref, ((start, _count), entries): ((usize, i64), Vec<((u32, u16), bool)>)| { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [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/parser.rs:187:1 [INFO] [stderr] | [INFO] [stderr] 187 | / pub fn xref_and_trailer<'a>(reader: &'a Reader) -> parser::Parser<'a, u8, (Xref, Dictionary)> { [INFO] [stderr] 188 | | (xref() + trailer()).map(|(mut xref, trailer)| { [INFO] [stderr] 189 | | xref.size = trailer.get(b"Size").and_then(|value| value.as_i64()).expect("Size is absent in trailer.") as u32; [INFO] [stderr] 190 | | (xref, trailer) [INFO] [stderr] ... | [INFO] [stderr] 194 | | }) [INFO] [stderr] 195 | | } [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 u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/filters/png.rs:26:20 [INFO] [stderr] | [INFO] [stderr] 26 | let expand_left = left as i16; [INFO] [stderr] | ^^^^^^^^^^^ help: try: `i16::from(left)` [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 u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/filters/png.rs:27:21 [INFO] [stderr] | [INFO] [stderr] 27 | let expand_above = above as i16; [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `i16::from(above)` [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 u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/filters/png.rs:28:25 [INFO] [stderr] | [INFO] [stderr] 28 | let expand_upperleft = upperleft as i16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `i16::from(upperleft)` [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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/processor.rs:24:4 [INFO] [stderr] | [INFO] [stderr] 24 | match *object { [INFO] [stderr] | _____________^ [INFO] [stderr] 25 | | Object::Stream(ref mut stream) => { [INFO] [stderr] 26 | | if stream.allows_compression { [INFO] [stderr] 27 | | stream.compress() [INFO] [stderr] ... | [INFO] [stderr] 30 | | _ => (), [INFO] [stderr] 31 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 24 | if let Object::Stream(ref mut stream) = *object { [INFO] [stderr] 25 | if stream.allows_compression { [INFO] [stderr] 26 | stream.compress() [INFO] [stderr] 27 | } [INFO] [stderr] 28 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/processor.rs:38:4 [INFO] [stderr] | [INFO] [stderr] 38 | match *object { [INFO] [stderr] | _____________^ [INFO] [stderr] 39 | | Object::Stream(ref mut stream) => stream.decompress(), [INFO] [stderr] 40 | | _ => (), [INFO] [stderr] 41 | | } [INFO] [stderr] | |_____________^ help: try this: `if let Object::Stream(ref mut stream) = *object { stream.decompress() }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/processor.rs:53:7 [INFO] [stderr] | [INFO] [stderr] 53 | page_tree.get(b"Count").and_then(|obj| obj.as_i64()).map(|count| { [INFO] [stderr] | _________________________^ [INFO] [stderr] | |_________________________| [INFO] [stderr] | || [INFO] [stderr] 54 | || page_tree.set("Count", count - 1); [INFO] [stderr] 55 | || }); [INFO] [stderr] | ||__________________________^- help: try this: `if let Some(count) = page_tree.get(b"Count").and_then(|obj| obj.as_i64()) { page_tree.set("Count", count - 1); }` [INFO] [stderr] | |___________________________| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/processor.rs:79:38 [INFO] [stderr] | [INFO] [stderr] 79 | pub fn delete_object(&mut self, id: &ObjectId) -> Option { [INFO] [stderr] | ^^^^^^^^^ help: consider passing by value instead: `ObjectId` [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: casting u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/filters/png.rs:67:44 [INFO] [stderr] | [INFO] [stderr] 67 | current[i] = current[i].wrapping_add(((current[i - bpp] as i16 + previous[i] as i16) / 2) as u8); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i16::from(current[i - bpp])` [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 u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/filters/png.rs:67:70 [INFO] [stderr] | [INFO] [stderr] 67 | current[i] = current[i].wrapping_add(((current[i - bpp] as i16 + previous[i] as i16) / 2) as u8); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `i16::from(previous[i])` [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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/processor.rs:140:38 [INFO] [stderr] | [INFO] [stderr] 140 | let action = |object: &mut Object| match *object { [INFO] [stderr] | ____________________________________________^ [INFO] [stderr] 141 | | Object::Reference(ref mut id) => { [INFO] [stderr] 142 | | if replace.contains_key(&id) { [INFO] [stderr] 143 | | *id = replace[id]; [INFO] [stderr] ... | [INFO] [stderr] 146 | | _ => {} [INFO] [stderr] 147 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 140 | let action = |object: &mut Object| if let Object::Reference(ref mut id) = *object { [INFO] [stderr] 141 | if replace.contains_key(&id) { [INFO] [stderr] 142 | *id = replace[id]; [INFO] [stderr] 143 | } [INFO] [stderr] 144 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/parser.rs:28:27 [INFO] [stderr] | [INFO] [stderr] 28 | number.collect().convert(|v| String::from_utf8(v)).convert(|s| i64::from_str(&s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `String::from_utf8` [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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/processor.rs:198:4 [INFO] [stderr] | [INFO] [stderr] 198 | match *content_stream { [INFO] [stderr] | _____________^ [INFO] [stderr] 199 | | Object::Stream(ref mut stream) => { [INFO] [stderr] 200 | | stream.set_plain_content(content); [INFO] [stderr] 201 | | stream.compress(); [INFO] [stderr] 202 | | } [INFO] [stderr] 203 | | _ => (), [INFO] [stderr] 204 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 198 | if let Object::Stream(ref mut stream) = *content_stream { [INFO] [stderr] 199 | stream.set_plain_content(content); [INFO] [stderr] 200 | stream.compress(); [INFO] [stderr] 201 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/processor.rs:214:6 [INFO] [stderr] | [INFO] [stderr] 214 | arr[0].as_reference().map(|id| self.change_content_stream(id, content)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- [INFO] [stderr] | | [INFO] [stderr] | help: try this: `if let Some(id) = arr[0].as_reference() { self.change_content_stream(id, content) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/processor.rs:218:7 [INFO] [stderr] | [INFO] [stderr] 218 | match *page { [INFO] [stderr] | _________________________^ [INFO] [stderr] 219 | | Object::Dictionary(ref mut dict) => { [INFO] [stderr] 220 | | dict.set("Contents", new_stream); [INFO] [stderr] 221 | | } [INFO] [stderr] 222 | | _ => {} [INFO] [stderr] 223 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 218 | if let Object::Dictionary(ref mut dict) = *page { [INFO] [stderr] 219 | dict.set("Contents", new_stream); [INFO] [stderr] 220 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/processor.rs:249:6 [INFO] [stderr] | [INFO] [stderr] 249 | match *operand { [INFO] [stderr] | _____________________^ [INFO] [stderr] 250 | | Object::String(ref mut bytes, _) => { [INFO] [stderr] 251 | | let decoded_text = Document::decode_text(current_encoding, bytes); [INFO] [stderr] 252 | | println!("{}", decoded_text); [INFO] [stderr] ... | [INFO] [stderr] 258 | | _ => {} [INFO] [stderr] 259 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 249 | if let Object::String(ref mut bytes, _) = *operand { [INFO] [stderr] 250 | let decoded_text = Document::decode_text(current_encoding, bytes); [INFO] [stderr] 251 | println!("{}", decoded_text); [INFO] [stderr] 252 | if decoded_text == text { [INFO] [stderr] 253 | let encoded_bytes = Document::encode_text(current_encoding, other_text); [INFO] [stderr] 254 | *bytes = encoded_bytes; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/processor.rs:271:4 [INFO] [stderr] | [INFO] [stderr] 271 | match *stream_obj { [INFO] [stderr] | _____________^ [INFO] [stderr] 272 | | Object::Stream(ref stream) => { [INFO] [stderr] 273 | | if decompress { [INFO] [stderr] 274 | | if let Some(data) = stream.decompressed_content() { [INFO] [stderr] ... | [INFO] [stderr] 283 | | _ => {} [INFO] [stderr] 284 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 271 | if let Object::Stream(ref stream) = *stream_obj { [INFO] [stderr] 272 | if decompress { [INFO] [stderr] 273 | if let Some(data) = stream.decompressed_content() { [INFO] [stderr] 274 | file.write_all(&data)?; [INFO] [stderr] 275 | } else { [INFO] [stderr] 276 | file.write_all(&stream.content)?; [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/parser.rs:104:1 [INFO] [stderr] | [INFO] [stderr] 104 | / fn stream<'a>(reader: &'a Reader) -> parser::Parser<'a, u8, Stream> { [INFO] [stderr] 105 | | dictionary() - space() - seq(b"stream") - eol() >> move |dict: Dictionary| { [INFO] [stderr] 106 | | if let Some(length) = dict.get(b"Length").and_then(|value| { [INFO] [stderr] 107 | | if let Some(id) = value.as_reference() { [INFO] [stderr] ... | [INFO] [stderr] 117 | | } [INFO] [stderr] 118 | | } [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/parser.rs:141:1 [INFO] [stderr] | [INFO] [stderr] 141 | / fn object<'a>(reader: &'a Reader) -> parser::Parser<'a, u8, Object> { [INFO] [stderr] 142 | | (seq(b"null").map(|_| Object::Null) [INFO] [stderr] 143 | | | seq(b"true").map(|_| Object::Boolean(true)) [INFO] [stderr] 144 | | | seq(b"false").map(|_| Object::Boolean(false)) [INFO] [stderr] ... | [INFO] [stderr] 154 | | - space() [INFO] [stderr] 155 | | } [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/parser.rs:157:1 [INFO] [stderr] | [INFO] [stderr] 157 | / pub fn indirect_object<'a>(reader: &'a Reader) -> parser::Parser<'a, u8, (ObjectId, Object)> { [INFO] [stderr] 158 | | object_id() - seq(b"obj") - space() + object(reader) - space() - seq(b"endobj").opt() - space() [INFO] [stderr] 159 | | } [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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/reader.rs:90:4 [INFO] [stderr] | [INFO] [stderr] 90 | match *entry { [INFO] [stderr] | _____________^ [INFO] [stderr] 91 | | XrefEntry::Normal { offset, .. } => { [INFO] [stderr] 92 | | let read_result = self.read_object(offset as usize); [INFO] [stderr] 93 | | match read_result { [INFO] [stderr] ... | [INFO] [stderr] 111 | | _ => {} [INFO] [stderr] 112 | | }; [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 90 | if let XrefEntry::Normal { offset, .. } = *entry { [INFO] [stderr] 91 | let read_result = self.read_object(offset as usize); [INFO] [stderr] 92 | match read_result { [INFO] [stderr] 93 | Ok((object_id, mut object)) => { [INFO] [stderr] 94 | match object { [INFO] [stderr] 95 | Object::Stream(ref mut stream) => if stream.dict.type_is(b"ObjStm") { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/reader.rs:95:8 [INFO] [stderr] | [INFO] [stderr] 95 | match object { [INFO] [stderr] | _____________________________^ [INFO] [stderr] 96 | | Object::Stream(ref mut stream) => if stream.dict.type_is(b"ObjStm") { [INFO] [stderr] 97 | | let mut obj_stream = ObjectStream::new(stream); [INFO] [stderr] 98 | | self.document.objects.append(&mut obj_stream.objects); [INFO] [stderr] ... | [INFO] [stderr] 102 | | _ => {} [INFO] [stderr] 103 | | } [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 95 | if let Object::Stream(ref mut stream) = object { if stream.dict.type_is(b"ObjStm") { [INFO] [stderr] 96 | let mut obj_stream = ObjectStream::new(stream); [INFO] [stderr] 97 | self.document.objects.append(&mut obj_stream.objects); [INFO] [stderr] 98 | } else if stream.content.is_empty() { [INFO] [stderr] 99 | zero_length_streams.push(object_id); [INFO] [stderr] 100 | } } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/reader.rs:118:6 [INFO] [stderr] | [INFO] [stderr] 118 | match object { [INFO] [stderr] | _____________________^ [INFO] [stderr] 119 | | Object::Stream(ref mut stream) => if let Some(start) = stream.start_position { [INFO] [stderr] 120 | | let end = start + length as usize; [INFO] [stderr] 121 | | stream.set_content(self.buffer[start..end].to_vec()); [INFO] [stderr] 122 | | }, [INFO] [stderr] 123 | | _ => {} [INFO] [stderr] 124 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 118 | if let Object::Stream(ref mut stream) = object { if let Some(start) = stream.start_position { [INFO] [stderr] 119 | let end = start + length as usize; [INFO] [stderr] 120 | stream.set_content(self.buffer[start..end].to_vec()); [INFO] [stderr] 121 | } } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/parser.rs:172:69 [INFO] [stderr] | [INFO] [stderr] 172 | .fold(Xref::new(0), |mut xref: Xref, ((start, _count), entries): ((usize, i64), Vec<((u32, u16), bool)>)| { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [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/parser.rs:187:1 [INFO] [stderr] | [INFO] [stderr] 187 | / pub fn xref_and_trailer<'a>(reader: &'a Reader) -> parser::Parser<'a, u8, (Xref, Dictionary)> { [INFO] [stderr] 188 | | (xref() + trailer()).map(|(mut xref, trailer)| { [INFO] [stderr] 189 | | xref.size = trailer.get(b"Size").and_then(|value| value.as_i64()).expect("Size is absent in trailer.") as u32; [INFO] [stderr] 190 | | (xref, trailer) [INFO] [stderr] ... | [INFO] [stderr] 194 | | }) [INFO] [stderr] 195 | | } [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 i64 may become silently lossy if types change [INFO] [stderr] --> src/writer.rs:44:28 [INFO] [stderr] | [INFO] [stderr] 44 | self.trailer.set("Size", (self.max_id + 1) as i64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(self.max_id + 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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/writer.rs:88:5 [INFO] [stderr] | [INFO] [stderr] 88 | match *entry { [INFO] [stderr] | _________________^ [INFO] [stderr] 89 | | XrefEntry::Normal { offset, generation } => { [INFO] [stderr] 90 | | write_xref_entry(offset, generation, 'n')?; [INFO] [stderr] 91 | | } [INFO] [stderr] 92 | | _ => {} [INFO] [stderr] 93 | | }; [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 88 | if let XrefEntry::Normal { offset, generation } = *entry { [INFO] [stderr] 89 | write_xref_entry(offset, generation, 'n')?; [INFO] [stderr] 90 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/writer.rs:163:32 [INFO] [stderr] | [INFO] [stderr] 163 | for (index, &byte) in text.into_iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/writer.rs:181:33 [INFO] [stderr] | [INFO] [stderr] 181 | for (index, &byte) in text.into_iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/processor.rs:24:4 [INFO] [stderr] | [INFO] [stderr] 24 | match *object { [INFO] [stderr] | _____________^ [INFO] [stderr] 25 | | Object::Stream(ref mut stream) => { [INFO] [stderr] 26 | | if stream.allows_compression { [INFO] [stderr] 27 | | stream.compress() [INFO] [stderr] ... | [INFO] [stderr] 30 | | _ => (), [INFO] [stderr] 31 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 24 | if let Object::Stream(ref mut stream) = *object { [INFO] [stderr] 25 | if stream.allows_compression { [INFO] [stderr] 26 | stream.compress() [INFO] [stderr] 27 | } [INFO] [stderr] 28 | } [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/writer.rs:205:46 [INFO] [stderr] | [INFO] [stderr] 205 | fn write_array<'a>(file: &mut Write, array: &'a Vec) -> Result<()> { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: change this to: `&[Object]` [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/processor.rs:38:4 [INFO] [stderr] | [INFO] [stderr] 38 | match *object { [INFO] [stderr] | _____________^ [INFO] [stderr] 39 | | Object::Stream(ref mut stream) => stream.decompress(), [INFO] [stderr] 40 | | _ => (), [INFO] [stderr] 41 | | } [INFO] [stderr] | |_____________^ help: try this: `if let Object::Stream(ref mut stream) = *object { stream.decompress() }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/processor.rs:53:7 [INFO] [stderr] | [INFO] [stderr] 53 | page_tree.get(b"Count").and_then(|obj| obj.as_i64()).map(|count| { [INFO] [stderr] | _________________________^ [INFO] [stderr] | |_________________________| [INFO] [stderr] | || [INFO] [stderr] 54 | || page_tree.set("Count", count - 1); [INFO] [stderr] 55 | || }); [INFO] [stderr] | ||__________________________^- help: try this: `if let Some(count) = page_tree.get(b"Count").and_then(|obj| obj.as_i64()) { page_tree.set("Count", count - 1); }` [INFO] [stderr] | |___________________________| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/processor.rs:79:38 [INFO] [stderr] | [INFO] [stderr] 79 | pub fn delete_object(&mut self, id: &ObjectId) -> Option { [INFO] [stderr] | ^^^^^^^^^ help: consider passing by value instead: `ObjectId` [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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/processor.rs:140:38 [INFO] [stderr] | [INFO] [stderr] 140 | let action = |object: &mut Object| match *object { [INFO] [stderr] | ____________________________________________^ [INFO] [stderr] 141 | | Object::Reference(ref mut id) => { [INFO] [stderr] 142 | | if replace.contains_key(&id) { [INFO] [stderr] 143 | | *id = replace[id]; [INFO] [stderr] ... | [INFO] [stderr] 146 | | _ => {} [INFO] [stderr] 147 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 140 | let action = |object: &mut Object| if let Object::Reference(ref mut id) = *object { [INFO] [stderr] 141 | if replace.contains_key(&id) { [INFO] [stderr] 142 | *id = replace[id]; [INFO] [stderr] 143 | } [INFO] [stderr] 144 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/processor.rs:198:4 [INFO] [stderr] | [INFO] [stderr] 198 | match *content_stream { [INFO] [stderr] | _____________^ [INFO] [stderr] 199 | | Object::Stream(ref mut stream) => { [INFO] [stderr] 200 | | stream.set_plain_content(content); [INFO] [stderr] 201 | | stream.compress(); [INFO] [stderr] 202 | | } [INFO] [stderr] 203 | | _ => (), [INFO] [stderr] 204 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 198 | if let Object::Stream(ref mut stream) = *content_stream { [INFO] [stderr] 199 | stream.set_plain_content(content); [INFO] [stderr] 200 | stream.compress(); [INFO] [stderr] 201 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/processor.rs:214:6 [INFO] [stderr] | [INFO] [stderr] 214 | arr[0].as_reference().map(|id| self.change_content_stream(id, content)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- [INFO] [stderr] | | [INFO] [stderr] | help: try this: `if let Some(id) = arr[0].as_reference() { self.change_content_stream(id, content) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/processor.rs:218:7 [INFO] [stderr] | [INFO] [stderr] 218 | match *page { [INFO] [stderr] | _________________________^ [INFO] [stderr] 219 | | Object::Dictionary(ref mut dict) => { [INFO] [stderr] 220 | | dict.set("Contents", new_stream); [INFO] [stderr] 221 | | } [INFO] [stderr] 222 | | _ => {} [INFO] [stderr] 223 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 218 | if let Object::Dictionary(ref mut dict) = *page { [INFO] [stderr] 219 | dict.set("Contents", new_stream); [INFO] [stderr] 220 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/processor.rs:249:6 [INFO] [stderr] | [INFO] [stderr] 249 | match *operand { [INFO] [stderr] | _____________________^ [INFO] [stderr] 250 | | Object::String(ref mut bytes, _) => { [INFO] [stderr] 251 | | let decoded_text = Document::decode_text(current_encoding, bytes); [INFO] [stderr] 252 | | println!("{}", decoded_text); [INFO] [stderr] ... | [INFO] [stderr] 258 | | _ => {} [INFO] [stderr] 259 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 249 | if let Object::String(ref mut bytes, _) = *operand { [INFO] [stderr] 250 | let decoded_text = Document::decode_text(current_encoding, bytes); [INFO] [stderr] 251 | println!("{}", decoded_text); [INFO] [stderr] 252 | if decoded_text == text { [INFO] [stderr] 253 | let encoded_bytes = Document::encode_text(current_encoding, other_text); [INFO] [stderr] 254 | *bytes = encoded_bytes; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/processor.rs:271:4 [INFO] [stderr] | [INFO] [stderr] 271 | match *stream_obj { [INFO] [stderr] | _____________^ [INFO] [stderr] 272 | | Object::Stream(ref stream) => { [INFO] [stderr] 273 | | if decompress { [INFO] [stderr] 274 | | if let Some(data) = stream.decompressed_content() { [INFO] [stderr] ... | [INFO] [stderr] 283 | | _ => {} [INFO] [stderr] 284 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 271 | if let Object::Stream(ref stream) = *stream_obj { [INFO] [stderr] 272 | if decompress { [INFO] [stderr] 273 | if let Some(data) = stream.decompressed_content() { [INFO] [stderr] 274 | file.write_all(&data)?; [INFO] [stderr] 275 | } else { [INFO] [stderr] 276 | file.write_all(&stream.content)?; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/reader.rs:90:4 [INFO] [stderr] | [INFO] [stderr] 90 | match *entry { [INFO] [stderr] | _____________^ [INFO] [stderr] 91 | | XrefEntry::Normal { offset, .. } => { [INFO] [stderr] 92 | | let read_result = self.read_object(offset as usize); [INFO] [stderr] 93 | | match read_result { [INFO] [stderr] ... | [INFO] [stderr] 111 | | _ => {} [INFO] [stderr] 112 | | }; [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 90 | if let XrefEntry::Normal { offset, .. } = *entry { [INFO] [stderr] 91 | let read_result = self.read_object(offset as usize); [INFO] [stderr] 92 | match read_result { [INFO] [stderr] 93 | Ok((object_id, mut object)) => { [INFO] [stderr] 94 | match object { [INFO] [stderr] 95 | Object::Stream(ref mut stream) => if stream.dict.type_is(b"ObjStm") { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/reader.rs:95:8 [INFO] [stderr] | [INFO] [stderr] 95 | match object { [INFO] [stderr] | _____________________________^ [INFO] [stderr] 96 | | Object::Stream(ref mut stream) => if stream.dict.type_is(b"ObjStm") { [INFO] [stderr] 97 | | let mut obj_stream = ObjectStream::new(stream); [INFO] [stderr] 98 | | self.document.objects.append(&mut obj_stream.objects); [INFO] [stderr] ... | [INFO] [stderr] 102 | | _ => {} [INFO] [stderr] 103 | | } [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 95 | if let Object::Stream(ref mut stream) = object { if stream.dict.type_is(b"ObjStm") { [INFO] [stderr] 96 | let mut obj_stream = ObjectStream::new(stream); [INFO] [stderr] 97 | self.document.objects.append(&mut obj_stream.objects); [INFO] [stderr] 98 | } else if stream.content.is_empty() { [INFO] [stderr] 99 | zero_length_streams.push(object_id); [INFO] [stderr] 100 | } } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/reader.rs:118:6 [INFO] [stderr] | [INFO] [stderr] 118 | match object { [INFO] [stderr] | _____________________^ [INFO] [stderr] 119 | | Object::Stream(ref mut stream) => if let Some(start) = stream.start_position { [INFO] [stderr] 120 | | let end = start + length as usize; [INFO] [stderr] 121 | | stream.set_content(self.buffer[start..end].to_vec()); [INFO] [stderr] 122 | | }, [INFO] [stderr] 123 | | _ => {} [INFO] [stderr] 124 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 118 | if let Object::Stream(ref mut stream) = object { if let Some(start) = stream.start_position { [INFO] [stderr] 119 | let end = start + length as usize; [INFO] [stderr] 120 | stream.set_content(self.buffer[start..end].to_vec()); [INFO] [stderr] 121 | } } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/writer.rs:44:28 [INFO] [stderr] | [INFO] [stderr] 44 | self.trailer.set("Size", (self.max_id + 1) as i64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(self.max_id + 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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/writer.rs:88:5 [INFO] [stderr] | [INFO] [stderr] 88 | match *entry { [INFO] [stderr] | _________________^ [INFO] [stderr] 89 | | XrefEntry::Normal { offset, generation } => { [INFO] [stderr] 90 | | write_xref_entry(offset, generation, 'n')?; [INFO] [stderr] 91 | | } [INFO] [stderr] 92 | | _ => {} [INFO] [stderr] 93 | | }; [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 88 | if let XrefEntry::Normal { offset, generation } = *entry { [INFO] [stderr] 89 | write_xref_entry(offset, generation, 'n')?; [INFO] [stderr] 90 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/writer.rs:163:32 [INFO] [stderr] | [INFO] [stderr] 163 | for (index, &byte) in text.into_iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/writer.rs:181:33 [INFO] [stderr] | [INFO] [stderr] 181 | for (index, &byte) in text.into_iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [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/writer.rs:205:46 [INFO] [stderr] | [INFO] [stderr] 205 | fn write_array<'a>(file: &mut Write, array: &'a Vec) -> Result<()> { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: change this to: `&[Object]` [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] error[E0554]: #![feature] may not be used on the stable release channel [INFO] [stderr] --> benches/datetime.rs:1:1 [INFO] [stderr] | [INFO] [stderr] 1 | #![feature(test)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] For more information about this error, try `rustc --explain E0554`. [INFO] [stderr] error: Could not compile `lopdf`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> examples/add_barcode.rs:46:2 [INFO] [stderr] | [INFO] [stderr] 46 | return rects; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `rects` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> tests/modify.rs:10:3 [INFO] [stderr] | [INFO] [stderr] 10 | match *content_stream { [INFO] [stderr] | _________^ [INFO] [stderr] 11 | | Object::Stream(ref mut stream) => { [INFO] [stderr] 12 | | let mut content = stream.decode_content().unwrap(); [INFO] [stderr] 13 | | content.operations[3].operands[0] = Object::string_literal("Modified text!"); [INFO] [stderr] ... | [INFO] [stderr] 16 | | _ => (), [INFO] [stderr] 17 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 10 | if let Object::Stream(ref mut stream) = *content_stream { [INFO] [stderr] 11 | let mut content = stream.decode_content().unwrap(); [INFO] [stderr] 12 | content.operations[3].operands[0] = Object::string_literal("Modified text!"); [INFO] [stderr] 13 | stream.set_content(content.encode().unwrap()); [INFO] [stderr] 14 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> tests/modify.rs:51:77 [INFO] [stderr] | [INFO] [stderr] 51 | let id2 = doc.add_object(Object::Stream(LoStream::new(LoDictionary::new(), "stream".as_bytes().to_vec()))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"stream"` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::string_lit_as_bytes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] error: build failed [INFO] running `"docker" "inspect" "8df69fc5129241d8d3e5caab2c76aae71f436ae3a45ad2fd30f67d67576bac22"` [INFO] running `"docker" "rm" "-f" "8df69fc5129241d8d3e5caab2c76aae71f436ae3a45ad2fd30f67d67576bac22"` [INFO] [stdout] 8df69fc5129241d8d3e5caab2c76aae71f436ae3a45ad2fd30f67d67576bac22