[INFO] crate strcursor 0.2.5 is already in cache [INFO] extracting crate strcursor 0.2.5 into work/ex/clippy-test-run/sources/stable/reg/strcursor/0.2.5 [INFO] extracting crate strcursor 0.2.5 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/strcursor/0.2.5 [INFO] validating manifest of strcursor-0.2.5 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 strcursor-0.2.5 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 strcursor-0.2.5 [INFO] finished frobbing strcursor-0.2.5 [INFO] frobbed toml for strcursor-0.2.5 written to work/ex/clippy-test-run/sources/stable/reg/strcursor/0.2.5/Cargo.toml [INFO] started frobbing strcursor-0.2.5 [INFO] finished frobbing strcursor-0.2.5 [INFO] frobbed toml for strcursor-0.2.5 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/strcursor/0.2.5/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 strcursor-0.2.5 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-0/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/strcursor/0.2.5:/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] 99582c687303dab557fd887395931da2e1ec21150124fcb43b52d976174fe5fd [INFO] running `"docker" "start" "-a" "99582c687303dab557fd887395931da2e1ec21150124fcb43b52d976174fe5fd"` [INFO] [stderr] Compiling strcursor v0.2.5 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:105:13 [INFO] [stderr] | [INFO] [stderr] 105 | s: s, [INFO] [stderr] | ^^^^ help: replace it with: `s` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:116:13 [INFO] [stderr] | [INFO] [stderr] 116 | s: s, [INFO] [stderr] | ^^^^ help: replace it with: `s` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:170:13 [INFO] [stderr] | [INFO] [stderr] 170 | s: s, [INFO] [stderr] | ^^^^ help: replace it with: `s` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:185:13 [INFO] [stderr] | [INFO] [stderr] 185 | s: s, [INFO] [stderr] | ^^^^ help: replace it with: `s` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:105:13 [INFO] [stderr] | [INFO] [stderr] 105 | s: s, [INFO] [stderr] | ^^^^ help: replace it with: `s` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:116:13 [INFO] [stderr] | [INFO] [stderr] 116 | s: s, [INFO] [stderr] | ^^^^ help: replace it with: `s` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:170:13 [INFO] [stderr] | [INFO] [stderr] 170 | s: s, [INFO] [stderr] | ^^^^ help: replace it with: `s` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:185:13 [INFO] [stderr] | [INFO] [stderr] 185 | s: s, [INFO] [stderr] | ^^^^ help: replace it with: `s` [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: digits grouped inconsistently by underscores [INFO] [stderr] --> src/lib.rs:1131:34 [INFO] [stderr] | [INFO] [stderr] 1131 | while from > beg && (*from & 0b11_00_0000 == 0b10_00_0000) { [INFO] [stderr] | ^^^^^^^^^^^^ help: consider: `0b1100_0000` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::inconsistent_digit_grouping)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inconsistent_digit_grouping [INFO] [stderr] [INFO] [stderr] warning: digits grouped inconsistently by underscores [INFO] [stderr] --> src/lib.rs:1131:50 [INFO] [stderr] | [INFO] [stderr] 1131 | while from > beg && (*from & 0b11_00_0000 == 0b10_00_0000) { [INFO] [stderr] | ^^^^^^^^^^^^ help: consider: `0b1000_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inconsistent_digit_grouping [INFO] [stderr] [INFO] [stderr] warning: digits grouped inconsistently by underscores [INFO] [stderr] --> src/lib.rs:1153:34 [INFO] [stderr] | [INFO] [stderr] 1153 | while from < end && (*from & 0b11_00_0000 == 0b10_00_0000) { [INFO] [stderr] | ^^^^^^^^^^^^ help: consider: `0b1100_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inconsistent_digit_grouping [INFO] [stderr] [INFO] [stderr] warning: digits grouped inconsistently by underscores [INFO] [stderr] --> src/lib.rs:1153:50 [INFO] [stderr] | [INFO] [stderr] 1153 | while from < end && (*from & 0b11_00_0000 == 0b10_00_0000) { [INFO] [stderr] | ^^^^^^^^^^^^ help: consider: `0b1000_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inconsistent_digit_grouping [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'core::str::::slice_unchecked': use `get_unchecked(begin..end)` instead [INFO] [stderr] --> src/lib.rs:404:20 [INFO] [stderr] | [INFO] [stderr] 404 | self.s.slice_unchecked(0, self.byte_pos()) [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'core::str::::slice_unchecked': use `get_unchecked(begin..end)` instead [INFO] [stderr] --> src/lib.rs:414:20 [INFO] [stderr] | [INFO] [stderr] 414 | self.s.slice_unchecked(self.byte_pos(), self.s.len()) [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'core::str::::slice_unchecked': use `get_unchecked(begin..end)` instead [INFO] [stderr] --> src/grapheme.rs:86:49 [INFO] [stderr] | [INFO] [stderr] 86 | Some((Gc::from_str_unchecked(gr), s.slice_unchecked(gr.len(), s.len()))) [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'core::str::::slice_unchecked': use `get_unchecked(begin..end)` instead [INFO] [stderr] --> src/grapheme.rs:143:43 [INFO] [stderr] | [INFO] [stderr] 143 | Gc::from_str_unchecked(self.0.slice_unchecked(base_len, self.0.len())) [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'core::str::::slice_unchecked': use `get_unchecked(begin..end)` instead [INFO] [stderr] --> src/grapheme.rs:156:20 [INFO] [stderr] | [INFO] [stderr] 156 | self.0.slice_unchecked(base_len, self.0.len()) [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: digits grouped inconsistently by underscores [INFO] [stderr] --> src/lib.rs:1131:34 [INFO] [stderr] | [INFO] [stderr] 1131 | while from > beg && (*from & 0b11_00_0000 == 0b10_00_0000) { [INFO] [stderr] | ^^^^^^^^^^^^ help: consider: `0b1100_0000` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::inconsistent_digit_grouping)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inconsistent_digit_grouping [INFO] [stderr] [INFO] [stderr] warning: digits grouped inconsistently by underscores [INFO] [stderr] --> src/lib.rs:1131:50 [INFO] [stderr] | [INFO] [stderr] 1131 | while from > beg && (*from & 0b11_00_0000 == 0b10_00_0000) { [INFO] [stderr] | ^^^^^^^^^^^^ help: consider: `0b1000_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inconsistent_digit_grouping [INFO] [stderr] [INFO] [stderr] warning: digits grouped inconsistently by underscores [INFO] [stderr] --> src/lib.rs:1153:34 [INFO] [stderr] | [INFO] [stderr] 1153 | while from < end && (*from & 0b11_00_0000 == 0b10_00_0000) { [INFO] [stderr] | ^^^^^^^^^^^^ help: consider: `0b1100_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inconsistent_digit_grouping [INFO] [stderr] [INFO] [stderr] warning: digits grouped inconsistently by underscores [INFO] [stderr] --> src/lib.rs:1153:50 [INFO] [stderr] | [INFO] [stderr] 1153 | while from < end && (*from & 0b11_00_0000 == 0b10_00_0000) { [INFO] [stderr] | ^^^^^^^^^^^^ help: consider: `0b1000_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inconsistent_digit_grouping [INFO] [stderr] [INFO] [stderr] error: you are deriving `Hash` but have implemented `PartialEq` explicitly [INFO] [stderr] --> src/grapheme.rs:48:42 [INFO] [stderr] | [INFO] [stderr] 48 | #[derive(Eq, PartialEq, Ord, PartialOrd, Hash)] [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::derive_hash_xor_eq)] on by default [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/grapheme.rs:226:1 [INFO] [stderr] | [INFO] [stderr] 226| / impl<'a> PartialEq for &'a Gc { [INFO] [stderr] 227| | fn eq(&self, other: &Gc) -> bool { [INFO] [stderr] 228| | (*self).eq(other) [INFO] [stderr] 229| | } [INFO] [stderr] 230| | } [INFO] [stderr] | |_^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] warning: item `grapheme::Gc` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/grapheme.rs:51:1 [INFO] [stderr] | [INFO] [stderr] 51 | / impl Gc { [INFO] [stderr] 52 | | /** [INFO] [stderr] 53 | | Create a new `Gc` from the given string slice. [INFO] [stderr] 54 | | [INFO] [stderr] ... | [INFO] [stderr] 193 | | } [INFO] [stderr] 194 | | } [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: defining a method called `from_str` on this type; consider implementing the `std::str::FromStr` trait or choosing a less ambiguous name [INFO] [stderr] --> src/grapheme.rs:59:5 [INFO] [stderr] | [INFO] [stderr] 59 | / pub fn from_str(s: &str) -> Option<&Gc> { [INFO] [stderr] 60 | | match Gc::split_from(s) { [INFO] [stderr] 61 | | Some((gc, tail)) => if tail.len() == 0 { Some(gc) } else { None }, [INFO] [stderr] 62 | | None => None [INFO] [stderr] 63 | | } [INFO] [stderr] 64 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/grapheme.rs:61:36 [INFO] [stderr] | [INFO] [stderr] 61 | Some((gc, tail)) => if tail.len() == 0 { Some(gc) } else { None }, [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `tail.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: transmute from a reference to a reference [INFO] [stderr] --> src/grapheme.rs:72:9 [INFO] [stderr] | [INFO] [stderr] 72 | transmute(s) [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `&*(s as *const str as *const grapheme::Gc)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::transmute_ptr_to_ptr)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ptr [INFO] [stderr] [INFO] [stderr] warning: transmute from a `&[u8]` to a `&str` [INFO] [stderr] --> src/grapheme.rs:621:27 [INFO] [stderr] | [INFO] [stderr] 621 | let s: &str = transmute(bs); [INFO] [stderr] | ^^^^^^^^^^^^^ help: consider using: `std::str::from_utf8(bs).unwrap()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::transmute_bytes_to_str)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_bytes_to_str [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/lib.rs:195:9 [INFO] [stderr] | [INFO] [stderr] 195 | / match self.try_seek_left_gr() { [INFO] [stderr] 196 | | true => Some(self), [INFO] [stderr] 197 | | false => None [INFO] [stderr] 198 | | } [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if self.try_seek_left_gr() { Some(self) } else { None }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/lib.rs:206:9 [INFO] [stderr] | [INFO] [stderr] 206 | / match self.try_seek_right_gr() { [INFO] [stderr] 207 | | true => Some(self), [INFO] [stderr] 208 | | false => None [INFO] [stderr] 209 | | } [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if self.try_seek_right_gr() { Some(self) } else { None }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/lib.rs:221:9 [INFO] [stderr] | [INFO] [stderr] 221 | / match self.try_seek_left_cp() { [INFO] [stderr] 222 | | true => Some(self), [INFO] [stderr] 223 | | false => None [INFO] [stderr] 224 | | } [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if self.try_seek_left_cp() { Some(self) } else { None }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/lib.rs:236:9 [INFO] [stderr] | [INFO] [stderr] 236 | / match self.try_seek_right_cp() { [INFO] [stderr] 237 | | true => Some(self), [INFO] [stderr] 238 | | false => None [INFO] [stderr] 239 | | } [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if self.try_seek_right_cp() { Some(self) } else { None }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'core::str::::slice_unchecked': use `get_unchecked(begin..end)` instead [INFO] [stderr] --> src/lib.rs:404:20 [INFO] [stderr] | [INFO] [stderr] 404 | self.s.slice_unchecked(0, self.byte_pos()) [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'core::str::::slice_unchecked': use `get_unchecked(begin..end)` instead [INFO] [stderr] --> src/lib.rs:414:20 [INFO] [stderr] | [INFO] [stderr] 414 | self.s.slice_unchecked(self.byte_pos(), self.s.len()) [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of `offset` with a `usize` casted to an `isize` [INFO] [stderr] --> src/lib.rs:521:31 [INFO] [stderr] | [INFO] [stderr] 521 | self.at = self.at.offset(len as isize); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.at.add(len)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_offset_with_cast)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast [INFO] [stderr] [INFO] [stderr] warning: use of `offset` with a `usize` casted to an `isize` [INFO] [stderr] --> src/lib.rs:542:19 [INFO] [stderr] | [INFO] [stderr] 542 | self.at = self.at.offset(bytes as isize); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.at.add(bytes)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast [INFO] [stderr] [INFO] [stderr] warning: re-implementing `PartialEq::ne` is unnecessary [INFO] [stderr] --> src/lib.rs:577:5 [INFO] [stderr] | [INFO] [stderr] 577 | / fn ne(&self, other: &StrCursor<'a>) -> bool { [INFO] [stderr] 578 | | (self.at != other.at) [INFO] [stderr] 579 | | || (self.s.as_ptr() != other.s.as_ptr()) [INFO] [stderr] 580 | | || (self.s.len() != other.s.len()) [INFO] [stderr] 581 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::partialeq_ne_impl)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_ne_impl [INFO] [stderr] [INFO] [stderr] warning: use of `offset` with a `usize` casted to an `isize` [INFO] [stderr] --> src/lib.rs:1125:14 [INFO] [stderr] | [INFO] [stderr] 1125 | unsafe { s.as_ptr().offset(byte_pos as isize) } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `s.as_ptr().add(byte_pos)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast [INFO] [stderr] [INFO] [stderr] warning: use of `offset` with a `usize` casted to an `isize` [INFO] [stderr] --> src/lib.rs:1152:15 [INFO] [stderr] | [INFO] [stderr] 1152 | let end = s.as_ptr().offset(s.len() as isize); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `s.as_ptr().add(s.len())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `strcursor`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: use of deprecated item 'core::str::::slice_unchecked': use `get_unchecked(begin..end)` instead [INFO] [stderr] --> src/grapheme.rs:86:49 [INFO] [stderr] | [INFO] [stderr] 86 | Some((Gc::from_str_unchecked(gr), s.slice_unchecked(gr.len(), s.len()))) [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'core::str::::slice_unchecked': use `get_unchecked(begin..end)` instead [INFO] [stderr] --> src/grapheme.rs:143:43 [INFO] [stderr] | [INFO] [stderr] 143 | Gc::from_str_unchecked(self.0.slice_unchecked(base_len, self.0.len())) [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'core::str::::slice_unchecked': use `get_unchecked(begin..end)` instead [INFO] [stderr] --> src/grapheme.rs:156:20 [INFO] [stderr] | [INFO] [stderr] 156 | self.0.slice_unchecked(base_len, self.0.len()) [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: you are deriving `Hash` but have implemented `PartialEq` explicitly [INFO] [stderr] --> src/grapheme.rs:48:42 [INFO] [stderr] | [INFO] [stderr] 48 | #[derive(Eq, PartialEq, Ord, PartialOrd, Hash)] [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::derive_hash_xor_eq)] on by default [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/grapheme.rs:226:1 [INFO] [stderr] | [INFO] [stderr] 226| / impl<'a> PartialEq for &'a Gc { [INFO] [stderr] 227| | fn eq(&self, other: &Gc) -> bool { [INFO] [stderr] 228| | (*self).eq(other) [INFO] [stderr] 229| | } [INFO] [stderr] 230| | } [INFO] [stderr] | |_^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] warning: item `grapheme::Gc` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/grapheme.rs:51:1 [INFO] [stderr] | [INFO] [stderr] 51 | / impl Gc { [INFO] [stderr] 52 | | /** [INFO] [stderr] 53 | | Create a new `Gc` from the given string slice. [INFO] [stderr] 54 | | [INFO] [stderr] ... | [INFO] [stderr] 193 | | } [INFO] [stderr] 194 | | } [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: defining a method called `from_str` on this type; consider implementing the `std::str::FromStr` trait or choosing a less ambiguous name [INFO] [stderr] --> src/grapheme.rs:59:5 [INFO] [stderr] | [INFO] [stderr] 59 | / pub fn from_str(s: &str) -> Option<&Gc> { [INFO] [stderr] 60 | | match Gc::split_from(s) { [INFO] [stderr] 61 | | Some((gc, tail)) => if tail.len() == 0 { Some(gc) } else { None }, [INFO] [stderr] 62 | | None => None [INFO] [stderr] 63 | | } [INFO] [stderr] 64 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/grapheme.rs:61:36 [INFO] [stderr] | [INFO] [stderr] 61 | Some((gc, tail)) => if tail.len() == 0 { Some(gc) } else { None }, [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `tail.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: transmute from a reference to a reference [INFO] [stderr] --> src/grapheme.rs:72:9 [INFO] [stderr] | [INFO] [stderr] 72 | transmute(s) [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `&*(s as *const str as *const grapheme::Gc)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::transmute_ptr_to_ptr)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ptr [INFO] [stderr] [INFO] [stderr] warning: transmute from a `&[u8]` to a `&str` [INFO] [stderr] --> src/grapheme.rs:621:27 [INFO] [stderr] | [INFO] [stderr] 621 | let s: &str = transmute(bs); [INFO] [stderr] | ^^^^^^^^^^^^^ help: consider using: `std::str::from_utf8(bs).unwrap()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::transmute_bytes_to_str)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_bytes_to_str [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/lib.rs:195:9 [INFO] [stderr] | [INFO] [stderr] 195 | / match self.try_seek_left_gr() { [INFO] [stderr] 196 | | true => Some(self), [INFO] [stderr] 197 | | false => None [INFO] [stderr] 198 | | } [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if self.try_seek_left_gr() { Some(self) } else { None }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/lib.rs:206:9 [INFO] [stderr] | [INFO] [stderr] 206 | / match self.try_seek_right_gr() { [INFO] [stderr] 207 | | true => Some(self), [INFO] [stderr] 208 | | false => None [INFO] [stderr] 209 | | } [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if self.try_seek_right_gr() { Some(self) } else { None }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/lib.rs:221:9 [INFO] [stderr] | [INFO] [stderr] 221 | / match self.try_seek_left_cp() { [INFO] [stderr] 222 | | true => Some(self), [INFO] [stderr] 223 | | false => None [INFO] [stderr] 224 | | } [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if self.try_seek_left_cp() { Some(self) } else { None }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/lib.rs:236:9 [INFO] [stderr] | [INFO] [stderr] 236 | / match self.try_seek_right_cp() { [INFO] [stderr] 237 | | true => Some(self), [INFO] [stderr] 238 | | false => None [INFO] [stderr] 239 | | } [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if self.try_seek_right_cp() { Some(self) } else { None }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: use of `offset` with a `usize` casted to an `isize` [INFO] [stderr] --> src/lib.rs:521:31 [INFO] [stderr] | [INFO] [stderr] 521 | self.at = self.at.offset(len as isize); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.at.add(len)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_offset_with_cast)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast [INFO] [stderr] [INFO] [stderr] warning: use of `offset` with a `usize` casted to an `isize` [INFO] [stderr] --> src/lib.rs:542:19 [INFO] [stderr] | [INFO] [stderr] 542 | self.at = self.at.offset(bytes as isize); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.at.add(bytes)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast [INFO] [stderr] [INFO] [stderr] warning: re-implementing `PartialEq::ne` is unnecessary [INFO] [stderr] --> src/lib.rs:577:5 [INFO] [stderr] | [INFO] [stderr] 577 | / fn ne(&self, other: &StrCursor<'a>) -> bool { [INFO] [stderr] 578 | | (self.at != other.at) [INFO] [stderr] 579 | | || (self.s.as_ptr() != other.s.as_ptr()) [INFO] [stderr] 580 | | || (self.s.len() != other.s.len()) [INFO] [stderr] 581 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::partialeq_ne_impl)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_ne_impl [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/lib.rs:642:13 [INFO] [stderr] | [INFO] [stderr] 642 | let r = (0..s.len()+1).map(|i| (i, StrCursor::new_at_left_of_byte_pos(s, i))) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: use: `(0..=s.len())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/lib.rs:687:13 [INFO] [stderr] | [INFO] [stderr] 687 | let r = (0..s.len()+1).map(|i| (i, StrCursor::new_at_right_of_byte_pos(s, i))) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: use: `(0..=s.len())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: use of `offset` with a `usize` casted to an `isize` [INFO] [stderr] --> src/lib.rs:1125:14 [INFO] [stderr] | [INFO] [stderr] 1125 | unsafe { s.as_ptr().offset(byte_pos as isize) } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `s.as_ptr().add(byte_pos)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast [INFO] [stderr] [INFO] [stderr] warning: use of `offset` with a `usize` casted to an `isize` [INFO] [stderr] --> src/lib.rs:1152:15 [INFO] [stderr] | [INFO] [stderr] 1152 | let end = s.as_ptr().offset(s.len() as isize); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `s.as_ptr().add(s.len())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `strcursor`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "99582c687303dab557fd887395931da2e1ec21150124fcb43b52d976174fe5fd"` [INFO] running `"docker" "rm" "-f" "99582c687303dab557fd887395931da2e1ec21150124fcb43b52d976174fe5fd"` [INFO] [stdout] 99582c687303dab557fd887395931da2e1ec21150124fcb43b52d976174fe5fd