[INFO] crate figtree 0.2.2 is already in cache [INFO] extracting crate figtree 0.2.2 into work/ex/clippy-test-run/sources/stable/reg/figtree/0.2.2 [INFO] extracting crate figtree 0.2.2 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/figtree/0.2.2 [INFO] validating manifest of figtree-0.2.2 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 figtree-0.2.2 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 figtree-0.2.2 [INFO] finished frobbing figtree-0.2.2 [INFO] frobbed toml for figtree-0.2.2 written to work/ex/clippy-test-run/sources/stable/reg/figtree/0.2.2/Cargo.toml [INFO] started frobbing figtree-0.2.2 [INFO] finished frobbing figtree-0.2.2 [INFO] frobbed toml for figtree-0.2.2 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/figtree/0.2.2/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 figtree-0.2.2 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-6/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/figtree/0.2.2:/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] f1e9864b2d6cfe594568904601fd8c87993b97b4ee32e00cc65271c27c9903f3 [INFO] running `"docker" "start" "-a" "f1e9864b2d6cfe594568904601fd8c87993b97b4ee32e00cc65271c27c9903f3"` [INFO] [stderr] Checking figtree v0.2.2 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/utils.rs:59:13 [INFO] [stderr] | [INFO] [stderr] 59 | reader: reader, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `reader` [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/position.rs:18:20 [INFO] [stderr] | [INFO] [stderr] 18 | Position { line: line, pos: pos } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/position.rs:18:32 [INFO] [stderr] | [INFO] [stderr] 18 | Position { line: line, pos: pos } [INFO] [stderr] | ^^^^^^^^ help: replace it with: `pos` [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/position.rs:34:27 [INFO] [stderr] | [INFO] [stderr] 34 | MutablePosition { line: line, pos: pos, line_lengths: Vec::new() } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/position.rs:34:39 [INFO] [stderr] | [INFO] [stderr] 34 | MutablePosition { line: line, pos: pos, line_lengths: Vec::new() } [INFO] [stderr] | ^^^^^^^^ help: replace it with: `pos` [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/parser.rs:61:13 [INFO] [stderr] | [INFO] [stderr] 61 | lexer: lexer, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `lexer` [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/utils.rs:59:13 [INFO] [stderr] | [INFO] [stderr] 59 | reader: reader, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `reader` [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/position.rs:18:20 [INFO] [stderr] | [INFO] [stderr] 18 | Position { line: line, pos: pos } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/position.rs:18:32 [INFO] [stderr] | [INFO] [stderr] 18 | Position { line: line, pos: pos } [INFO] [stderr] | ^^^^^^^^ help: replace it with: `pos` [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/position.rs:34:27 [INFO] [stderr] | [INFO] [stderr] 34 | MutablePosition { line: line, pos: pos, line_lengths: Vec::new() } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/position.rs:34:39 [INFO] [stderr] | [INFO] [stderr] 34 | MutablePosition { line: line, pos: pos, line_lengths: Vec::new() } [INFO] [stderr] | ^^^^^^^^ help: replace it with: `pos` [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/parser.rs:61:13 [INFO] [stderr] | [INFO] [stderr] 61 | lexer: lexer, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `lexer` [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: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/position.rs:50:16 [INFO] [stderr] | [INFO] [stderr] 50 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 51 | | if let Some(length) = self.line_lengths.pop() { [INFO] [stderr] 52 | | let oldpos = self.pos; [INFO] [stderr] 53 | | self.pos = length; [INFO] [stderr] ... | [INFO] [stderr] 58 | | } [INFO] [stderr] 59 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 50 | } else if let Some(length) = self.line_lengths.pop() { [INFO] [stderr] 51 | let oldpos = self.pos; [INFO] [stderr] 52 | self.pos = length; [INFO] [stderr] 53 | self.line -= 1; [INFO] [stderr] 54 | self.unpush(amt - oldpos - 1); [INFO] [stderr] 55 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/position.rs:50:16 [INFO] [stderr] | [INFO] [stderr] 50 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 51 | | if let Some(length) = self.line_lengths.pop() { [INFO] [stderr] 52 | | let oldpos = self.pos; [INFO] [stderr] 53 | | self.pos = length; [INFO] [stderr] ... | [INFO] [stderr] 58 | | } [INFO] [stderr] 59 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 50 | } else if let Some(length) = self.line_lengths.pop() { [INFO] [stderr] 51 | let oldpos = self.pos; [INFO] [stderr] 52 | self.pos = length; [INFO] [stderr] 53 | self.line -= 1; [INFO] [stderr] 54 | self.unpush(amt - oldpos - 1); [INFO] [stderr] 55 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `position::Position` [INFO] [stderr] --> src/position.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | / pub fn new() -> Self { [INFO] [stderr] 13 | | Self::at(0, 0) [INFO] [stderr] 14 | | } [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] 3 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: re-implementing `PartialEq::ne` is unnecessary [INFO] [stderr] --> src/position.rs:86:5 [INFO] [stderr] | [INFO] [stderr] 86 | / fn ne(&self, other: &MutablePosition) -> bool { [INFO] [stderr] 87 | | self.pos != other.pos || self.line != other.line [INFO] [stderr] 88 | | } [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] error: this `if` has identical blocks [INFO] [stderr] --> src/lexer.rs:108:44 [INFO] [stderr] | [INFO] [stderr] 108 | } else if next_char == '_' { [INFO] [stderr] | ____________________________________________^ [INFO] [stderr] 109 | | ident.push(next_char); [INFO] [stderr] 110 | | } else { [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> src/lexer.rs:106:42 [INFO] [stderr] | [INFO] [stderr] 106 | if ident_body(next_char) { [INFO] [stderr] | __________________________________________^ [INFO] [stderr] 107 | | ident.push(next_char); [INFO] [stderr] 108 | | } else if next_char == '_' { [INFO] [stderr] | |_________________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lexer.rs:136:12 [INFO] [stderr] | [INFO] [stderr] 136 | if buffer.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `buffer.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: casting u32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/lexer.rs:252:46 [INFO] [stderr] | [INFO] [stderr] 252 | Some(Ok(LexToken::IntegerLit(next_char.to_digit(10).unwrap() as i64))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(next_char.to_digit(10).unwrap())` [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 u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/lexer.rs:271:67 [INFO] [stderr] | [INFO] [stderr] 271 | return Err(LexError::InvalidUnicodeEscape(uvalue as u32)); [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u32::from(uvalue)` [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 u32 may become silently lossy if types change [INFO] [stderr] --> src/lexer.rs:279:43 [INFO] [stderr] | [INFO] [stderr] 279 | if let Some(next_char) = from_u32(uvalue as u32) { [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u32::from(uvalue)` [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 u32 may become silently lossy if types change [INFO] [stderr] --> src/lexer.rs:282:48 [INFO] [stderr] | [INFO] [stderr] 282 | Err(LexError::InvalidUnicodeEscape(uvalue as u32)) [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u32::from(uvalue)` [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 loop could be written as a `while let` loop [INFO] [stderr] --> src/lexer.rs:497:9 [INFO] [stderr] | [INFO] [stderr] 497 | / loop { [INFO] [stderr] 498 | | // take first character, test if it's either whitespace or '/' [INFO] [stderr] 499 | | if let Some(ch) = self.pop_next() { [INFO] [stderr] 500 | | if ch.is_whitespace() { [INFO] [stderr] ... | [INFO] [stderr] 544 | | } [INFO] [stderr] 545 | | } [INFO] [stderr] | |_________^ help: try: `while let Some(ch) = self.pop_next() { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `types::Node` [INFO] [stderr] --> src/types.rs:208:5 [INFO] [stderr] | [INFO] [stderr] 208 | / pub fn new() -> Self { [INFO] [stderr] 209 | | Node { [INFO] [stderr] 210 | | subnodes: HashMap::new(), [INFO] [stderr] 211 | | attributes: HashMap::new(), [INFO] [stderr] 212 | | } [INFO] [stderr] 213 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 201 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `or_insert` followed by a function call [INFO] [stderr] --> src/types.rs:221:42 [INFO] [stderr] | [INFO] [stderr] 221 | self.subnodes.entry(name.into()).or_insert(Self::new()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(Self::new)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/types.rs:299:34 [INFO] [stderr] | [INFO] [stderr] 299 | pub fn has_node(&self, name: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/types.rs:314:34 [INFO] [stderr] | [INFO] [stderr] 314 | pub fn has_attr(&self, name: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `types::Document` [INFO] [stderr] --> src/types.rs:360:5 [INFO] [stderr] | [INFO] [stderr] 360 | / pub fn new() -> Self { [INFO] [stderr] 361 | | Document { [INFO] [stderr] 362 | | nodes: HashMap::new(), [INFO] [stderr] 363 | | } [INFO] [stderr] 364 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 354 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `or_insert` followed by a function call [INFO] [stderr] --> src/types.rs:372:39 [INFO] [stderr] | [INFO] [stderr] 372 | self.nodes.entry(name.into()).or_insert(Node::new()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(Node::new)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/types.rs:421:34 [INFO] [stderr] | [INFO] [stderr] 421 | pub fn has_node(&self, name: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `figtree`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/utils.rs:89:54 [INFO] [stderr] | [INFO] [stderr] 89 | let mut reader = CharReader::new(Cursor::new("text".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"text"` [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] warning: you should consider deriving a `Default` implementation for `position::Position` [INFO] [stderr] --> src/position.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | / pub fn new() -> Self { [INFO] [stderr] 13 | | Self::at(0, 0) [INFO] [stderr] 14 | | } [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] 3 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: re-implementing `PartialEq::ne` is unnecessary [INFO] [stderr] --> src/position.rs:86:5 [INFO] [stderr] | [INFO] [stderr] 86 | / fn ne(&self, other: &MutablePosition) -> bool { [INFO] [stderr] 87 | | self.pos != other.pos || self.line != other.line [INFO] [stderr] 88 | | } [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] error: this `if` has identical blocks [INFO] [stderr] --> src/lexer.rs:108:44 [INFO] [stderr] | [INFO] [stderr] 108 | } else if next_char == '_' { [INFO] [stderr] | ____________________________________________^ [INFO] [stderr] 109 | | ident.push(next_char); [INFO] [stderr] 110 | | } else { [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> src/lexer.rs:106:42 [INFO] [stderr] | [INFO] [stderr] 106 | if ident_body(next_char) { [INFO] [stderr] | __________________________________________^ [INFO] [stderr] 107 | | ident.push(next_char); [INFO] [stderr] 108 | | } else if next_char == '_' { [INFO] [stderr] | |_________________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lexer.rs:136:12 [INFO] [stderr] | [INFO] [stderr] 136 | if buffer.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `buffer.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: casting u32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/lexer.rs:252:46 [INFO] [stderr] | [INFO] [stderr] 252 | Some(Ok(LexToken::IntegerLit(next_char.to_digit(10).unwrap() as i64))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(next_char.to_digit(10).unwrap())` [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 u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/lexer.rs:271:67 [INFO] [stderr] | [INFO] [stderr] 271 | return Err(LexError::InvalidUnicodeEscape(uvalue as u32)); [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u32::from(uvalue)` [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 u32 may become silently lossy if types change [INFO] [stderr] --> src/lexer.rs:279:43 [INFO] [stderr] | [INFO] [stderr] 279 | if let Some(next_char) = from_u32(uvalue as u32) { [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u32::from(uvalue)` [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 u32 may become silently lossy if types change [INFO] [stderr] --> src/lexer.rs:282:48 [INFO] [stderr] | [INFO] [stderr] 282 | Err(LexError::InvalidUnicodeEscape(uvalue as u32)) [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u32::from(uvalue)` [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 loop could be written as a `while let` loop [INFO] [stderr] --> src/lexer.rs:497:9 [INFO] [stderr] | [INFO] [stderr] 497 | / loop { [INFO] [stderr] 498 | | // take first character, test if it's either whitespace or '/' [INFO] [stderr] 499 | | if let Some(ch) = self.pop_next() { [INFO] [stderr] 500 | | if ch.is_whitespace() { [INFO] [stderr] ... | [INFO] [stderr] 544 | | } [INFO] [stderr] 545 | | } [INFO] [stderr] | |_________^ help: try: `while let Some(ch) = self.pop_next() { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 41 [INFO] [stderr] --> src/lexer.rs:619:5 [INFO] [stderr] | [INFO] [stderr] 619 | / fn iterator() { [INFO] [stderr] 620 | | let cursor = Cursor::new( [INFO] [stderr] 621 | | "ident { } [ ! ] : , 34 3.5 'str' true r/raw string/" [INFO] [stderr] 622 | | .as_bytes()); [INFO] [stderr] ... | [INFO] [stderr] 669 | | assert!(lexer.next().is_none()); [INFO] [stderr] 670 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:621:13 [INFO] [stderr] | [INFO] [stderr] 621 | / "ident { } [ ! ] : , 34 3.5 'str' true r/raw string/" [INFO] [stderr] 622 | | .as_bytes()); [INFO] [stderr] | |___________________^ help: consider using a byte string literal instead: `b"ident { } [ ! ] : , 34 3.5 'str' true r/raw string/"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:674:48 [INFO] [stderr] | [INFO] [stderr] 674 | let mut lexer = Lexer::lex(Cursor::new(" [INFO] [stderr] | ________________________________________________^ [INFO] [stderr] 675 | | 1 [INFO] [stderr] 676 | | // hello [INFO] [stderr] 677 | | 2".as_bytes())); [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] help: consider using a byte string literal instead [INFO] [stderr] | [INFO] [stderr] 674 | let mut lexer = Lexer::lex(Cursor::new(b" [INFO] [stderr] 675 | 1 [INFO] [stderr] 676 | // hello [INFO] [stderr] 677 | 2")); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:682:48 [INFO] [stderr] | [INFO] [stderr] 682 | let mut lexer = Lexer::lex(Cursor::new(" [INFO] [stderr] | ________________________________________________^ [INFO] [stderr] 683 | | 1 [INFO] [stderr] 684 | | // hello".as_bytes())); [INFO] [stderr] | |________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] help: consider using a byte string literal instead [INFO] [stderr] | [INFO] [stderr] 682 | let mut lexer = Lexer::lex(Cursor::new(b" [INFO] [stderr] 683 | 1 [INFO] [stderr] 684 | // hello")); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:688:48 [INFO] [stderr] | [INFO] [stderr] 688 | let mut lexer = Lexer::lex(Cursor::new(" [INFO] [stderr] | ________________________________________________^ [INFO] [stderr] 689 | | 1 /* [INFO] [stderr] 690 | | hello [INFO] [stderr] 691 | | */ 2".as_bytes())); [INFO] [stderr] | |____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] help: consider using a byte string literal instead [INFO] [stderr] | [INFO] [stderr] 688 | let mut lexer = Lexer::lex(Cursor::new(b" [INFO] [stderr] 689 | 1 /* [INFO] [stderr] 690 | hello [INFO] [stderr] 691 | */ 2")); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:697:48 [INFO] [stderr] | [INFO] [stderr] 697 | let mut lexer = Lexer::lex(Cursor::new(" [INFO] [stderr] | ________________________________________________^ [INFO] [stderr] 698 | | 1 /* /* [INFO] [stderr] 699 | | hello [INFO] [stderr] 700 | | */ */ 2".as_bytes())); [INFO] [stderr] | |_______________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] help: consider using a byte string literal instead [INFO] [stderr] | [INFO] [stderr] 697 | let mut lexer = Lexer::lex(Cursor::new(b" [INFO] [stderr] 698 | 1 /* /* [INFO] [stderr] 699 | hello [INFO] [stderr] 700 | */ */ 2")); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:706:48 [INFO] [stderr] | [INFO] [stderr] 706 | let mut lexer = Lexer::lex(Cursor::new("1 /*".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"1 /*"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:714:48 [INFO] [stderr] | [INFO] [stderr] 714 | let mut lexer = Lexer::lex(Cursor::new("&".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"&"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:725:48 [INFO] [stderr] | [INFO] [stderr] 725 | let mut lexer = Lexer::lex(Cursor::new("ThisIsAnIdent".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"ThisIsAnIdent"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:729:48 [INFO] [stderr] | [INFO] [stderr] 729 | let mut lexer = Lexer::lex(Cursor::new("this_is_an_ident".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"this_is_an_ident"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:733:48 [INFO] [stderr] | [INFO] [stderr] 733 | let mut lexer = Lexer::lex(Cursor::new("th15_1s_an_1d3n7".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"th15_1s_an_1d3n7"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:737:48 [INFO] [stderr] | [INFO] [stderr] 737 | let mut lexer = Lexer::lex(Cursor::new("7h15_1s_an_1d3n7".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"7h15_1s_an_1d3n7"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:740:48 [INFO] [stderr] | [INFO] [stderr] 740 | let mut lexer = Lexer::lex(Cursor::new("th15_1s_an_1d3n7".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"th15_1s_an_1d3n7"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:748:48 [INFO] [stderr] | [INFO] [stderr] 748 | let mut lexer = Lexer::lex(Cursor::new("`ident`".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"`ident`"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:768:48 [INFO] [stderr] | [INFO] [stderr] 768 | let mut lexer = Lexer::lex(Cursor::new("`string".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"`string"` [INFO] [stderr] | [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] warning: Err(_) will match all errors, maybe not a good idea [INFO] [stderr] --> src/lexer.rs:772:13 [INFO] [stderr] | [INFO] [stderr] 772 | Err(_) => panic!("wrong error raised"), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_wild_err_arm)] on by default [INFO] [stderr] = note: to remove this warning, match each error separately or use unreachable macro [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_wild_err_arm [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:778:48 [INFO] [stderr] | [INFO] [stderr] 778 | let mut lexer = Lexer::lex(Cursor::new("12345".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"12345"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:782:48 [INFO] [stderr] | [INFO] [stderr] 782 | let mut lexer = Lexer::lex(Cursor::new("0".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"0"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:786:48 [INFO] [stderr] | [INFO] [stderr] 786 | let mut lexer = Lexer::lex(Cursor::new("0d10".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"0d10"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:790:48 [INFO] [stderr] | [INFO] [stderr] 790 | let mut lexer = Lexer::lex(Cursor::new("0b10".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"0b10"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:794:48 [INFO] [stderr] | [INFO] [stderr] 794 | let mut lexer = Lexer::lex(Cursor::new("0x10".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"0x10"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:798:48 [INFO] [stderr] | [INFO] [stderr] 798 | let mut lexer = Lexer::lex(Cursor::new("0o10".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"0o10"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:802:48 [INFO] [stderr] | [INFO] [stderr] 802 | let mut lexer = Lexer::lex(Cursor::new("0d10e5".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"0d10e5"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:806:48 [INFO] [stderr] | [INFO] [stderr] 806 | let mut lexer = Lexer::lex(Cursor::new("10e5".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"10e5"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:810:48 [INFO] [stderr] | [INFO] [stderr] 810 | let mut lexer = Lexer::lex(Cursor::new("10.5".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"10.5"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:814:48 [INFO] [stderr] | [INFO] [stderr] 814 | let mut lexer = Lexer::lex(Cursor::new("105".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"105"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:818:48 [INFO] [stderr] | [INFO] [stderr] 818 | let mut lexer = Lexer::lex(Cursor::new("1_0__5___".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"1_0__5___"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:822:48 [INFO] [stderr] | [INFO] [stderr] 822 | let mut lexer = Lexer::lex(Cursor::new("0x".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"0x"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:829:48 [INFO] [stderr] | [INFO] [stderr] 829 | let mut lexer = Lexer::lex(Cursor::new("'string'".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"'string'"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:857:48 [INFO] [stderr] | [INFO] [stderr] 857 | let mut lexer = Lexer::lex(Cursor::new("'string".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"'string"` [INFO] [stderr] | [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] warning: Err(_) will match all errors, maybe not a good idea [INFO] [stderr] --> src/lexer.rs:861:13 [INFO] [stderr] | [INFO] [stderr] 861 | Err(_) => panic!("wrong error raised"), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: to remove this warning, match each error separately or use unreachable macro [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_wild_err_arm [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:867:48 [INFO] [stderr] | [INFO] [stderr] 867 | let mut lexer = Lexer::lex(Cursor::new("r/hello/".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"r/hello/"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:871:48 [INFO] [stderr] | [INFO] [stderr] 871 | let mut lexer = Lexer::lex(Cursor::new("r////hello////".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"r////hello////"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:875:48 [INFO] [stderr] | [INFO] [stderr] 875 | let mut lexer = Lexer::lex(Cursor::new("r////hel///lo////".as_bytes())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"r////hel///lo////"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/parser.rs:365:32 [INFO] [stderr] | [INFO] [stderr] 365 | let file = Cursor::new("".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b""` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/parser.rs:374:32 [INFO] [stderr] | [INFO] [stderr] 374 | let file = Cursor::new("node { }".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"node { }"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/parser.rs:385:32 [INFO] [stderr] | [INFO] [stderr] 385 | let file = Cursor::new("node { subnode {} }".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"node { subnode {} }"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/parser.rs:395:32 [INFO] [stderr] | [INFO] [stderr] 395 | let file = Cursor::new("node { subnode { sub { sub { sub {} } } } }".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"node { subnode { sub { sub { sub {} } } } }"` [INFO] [stderr] | [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] warning: the function has a cyclomatic complexity of 50 [INFO] [stderr] --> src/parser.rs:412:5 [INFO] [stderr] | [INFO] [stderr] 412 | / fn handle_key_value_pair() { [INFO] [stderr] 413 | | let file = Cursor::new("node { 'key': 'value' }".as_bytes()); [INFO] [stderr] 414 | | let mut parser = Parser::parse(Lexer::lex(file)); [INFO] [stderr] 415 | | assert_eq!(parser.next().unwrap().unwrap().0, ParseEvent::FileStart); [INFO] [stderr] ... | [INFO] [stderr] 481 | | assert!(parser.next().is_none()); [INFO] [stderr] 482 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/parser.rs:413:32 [INFO] [stderr] | [INFO] [stderr] 413 | let file = Cursor::new("node { 'key': 'value' }".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"node { 'key': 'value' }"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/parser.rs:423:32 [INFO] [stderr] | [INFO] [stderr] 423 | let file = Cursor::new("node { 'key': 3 }".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"node { 'key': 3 }"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/parser.rs:433:32 [INFO] [stderr] | [INFO] [stderr] 433 | let file = Cursor::new("node { 'key': 3.5 }".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"node { 'key': 3.5 }"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/parser.rs:443:32 [INFO] [stderr] | [INFO] [stderr] 443 | let file = Cursor::new("node { 'key': true }".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"node { 'key': true }"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/parser.rs:453:32 [INFO] [stderr] | [INFO] [stderr] 453 | let file = Cursor::new("node { 'key': false }".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"node { 'key': false }"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/parser.rs:463:32 [INFO] [stderr] | [INFO] [stderr] 463 | let file = Cursor::new("node { 'key': !my_ident }".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"node { 'key': !my_ident }"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/parser.rs:473:32 [INFO] [stderr] | [INFO] [stderr] 473 | let file = Cursor::new("node { 'key': null }".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"node { 'key': null }"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/parser.rs:486:32 [INFO] [stderr] | [INFO] [stderr] 486 | let file = Cursor::new("node { 'key': 'value 1' 'value 2' }".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"node { 'key': 'value 1' 'value 2' }"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/parser.rs:500:32 [INFO] [stderr] | [INFO] [stderr] 500 | let file = Cursor::new("node { 'key1': true, 'key2': 'val' }".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"node { 'key1': true, 'key2': 'val' }"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/parser.rs:513:32 [INFO] [stderr] | [INFO] [stderr] 513 | let file = Cursor::new("node { 'key1': true 'key2': 'val' }".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"node { 'key1': true 'key2': 'val' }"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/parser.rs:521:32 [INFO] [stderr] | [INFO] [stderr] 521 | let file = Cursor::new("node { 'key1': 'true' 'key2': 'val' }".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"node { 'key1': 'true' 'key2': 'val' }"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/parser.rs:533:32 [INFO] [stderr] | [INFO] [stderr] 533 | let file = Cursor::new("node { 'key': ['val1', 2, 3.4, false, !ident] }".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"node { 'key': ['val1', 2, 3.4, false, !ident] }"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/parser.rs:552:32 [INFO] [stderr] | [INFO] [stderr] 552 | let file = Cursor::new("node { 'key': ['lista', ['listb', []]] }".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"node { 'key': ['lista', ['listb', []]] }"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/parser.rs:572:32 [INFO] [stderr] | [INFO] [stderr] 572 | let file = Cursor::new("node { 'key': [1, 2,], subnode {} }".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"node { 'key': [1, 2,], subnode {} }"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/parser.rs:587:32 [INFO] [stderr] | [INFO] [stderr] 587 | let file = Cursor::new("node { , }".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"node { , }"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/parser.rs:597:32 [INFO] [stderr] | [INFO] [stderr] 597 | let file = Cursor::new("node { 'key': {'1': 2, '3': 4} }".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"node { 'key': {'1': 2, '3': 4} }"` [INFO] [stderr] | [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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/parser.rs:615:32 [INFO] [stderr] | [INFO] [stderr] 615 | let file = Cursor::new("node { 'key': {'1': {'b': {} } } }".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"node { 'key': {'1': {'b': {} } } }"` [INFO] [stderr] | [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] warning: you should consider deriving a `Default` implementation for `types::Node` [INFO] [stderr] --> src/types.rs:208:5 [INFO] [stderr] | [INFO] [stderr] 208 | / pub fn new() -> Self { [INFO] [stderr] 209 | | Node { [INFO] [stderr] 210 | | subnodes: HashMap::new(), [INFO] [stderr] 211 | | attributes: HashMap::new(), [INFO] [stderr] 212 | | } [INFO] [stderr] 213 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 201 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `or_insert` followed by a function call [INFO] [stderr] --> src/types.rs:221:42 [INFO] [stderr] | [INFO] [stderr] 221 | self.subnodes.entry(name.into()).or_insert(Self::new()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(Self::new)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/types.rs:299:34 [INFO] [stderr] | [INFO] [stderr] 299 | pub fn has_node(&self, name: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/types.rs:314:34 [INFO] [stderr] | [INFO] [stderr] 314 | pub fn has_attr(&self, name: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `types::Document` [INFO] [stderr] --> src/types.rs:360:5 [INFO] [stderr] | [INFO] [stderr] 360 | / pub fn new() -> Self { [INFO] [stderr] 361 | | Document { [INFO] [stderr] 362 | | nodes: HashMap::new(), [INFO] [stderr] 363 | | } [INFO] [stderr] 364 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 354 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `or_insert` followed by a function call [INFO] [stderr] --> src/types.rs:372:39 [INFO] [stderr] | [INFO] [stderr] 372 | self.nodes.entry(name.into()).or_insert(Node::new()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(Node::new)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/types.rs:421:34 [INFO] [stderr] | [INFO] [stderr] 421 | pub fn has_node(&self, name: &String) -> bool { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 27 [INFO] [stderr] --> src/types.rs:513:5 [INFO] [stderr] | [INFO] [stderr] 513 | / fn node_with_attributes() { [INFO] [stderr] 514 | | let mut node = Node::new(); [INFO] [stderr] 515 | | assert!(node.is_empty()); [INFO] [stderr] 516 | | assert!(!node.has_nodes()); [INFO] [stderr] ... | [INFO] [stderr] 547 | | assert_eq!(iterable.next(), None); [INFO] [stderr] 548 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `figtree`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "f1e9864b2d6cfe594568904601fd8c87993b97b4ee32e00cc65271c27c9903f3"` [INFO] running `"docker" "rm" "-f" "f1e9864b2d6cfe594568904601fd8c87993b97b4ee32e00cc65271c27c9903f3"` [INFO] [stdout] f1e9864b2d6cfe594568904601fd8c87993b97b4ee32e00cc65271c27c9903f3