[INFO] crate hamlrs 0.4.2 is already in cache [INFO] extracting crate hamlrs 0.4.2 into work/ex/clippy-test-run/sources/stable/reg/hamlrs/0.4.2 [INFO] extracting crate hamlrs 0.4.2 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/hamlrs/0.4.2 [INFO] validating manifest of hamlrs-0.4.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 hamlrs-0.4.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 hamlrs-0.4.2 [INFO] finished frobbing hamlrs-0.4.2 [INFO] frobbed toml for hamlrs-0.4.2 written to work/ex/clippy-test-run/sources/stable/reg/hamlrs/0.4.2/Cargo.toml [INFO] started frobbing hamlrs-0.4.2 [INFO] finished frobbing hamlrs-0.4.2 [INFO] frobbed toml for hamlrs-0.4.2 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/hamlrs/0.4.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 hamlrs-0.4.2 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-2/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/hamlrs/0.4.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] 3627beea7496605ed9c3dc129d67741d05c4cebb2755eb832ca8d429cee70c7f [INFO] running `"docker" "start" "-a" "3627beea7496605ed9c3dc129d67741d05c4cebb2755eb832ca8d429cee70c7f"` [INFO] [stderr] Checking hamlrs v0.4.2 (/opt/crater/workdir) [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/scanner.rs:47:16 [INFO] [stderr] | [INFO] [stderr] 47 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 48 | | if let Some(ch) = self.chars.next() { [INFO] [stderr] 49 | | current_char = ch; [INFO] [stderr] 50 | | } else { [INFO] [stderr] 51 | | return None; [INFO] [stderr] 52 | | } [INFO] [stderr] 53 | | } [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] 47 | } else if let Some(ch) = self.chars.next() { [INFO] [stderr] 48 | current_char = ch; [INFO] [stderr] 49 | } else { [INFO] [stderr] 50 | return None; [INFO] [stderr] 51 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/scanner.rs:143:28 [INFO] [stderr] | [INFO] [stderr] 143 | } else { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 144 | | if Token::is_delim(&next_char) && next_char != '.' { [INFO] [stderr] 145 | | self.current_char = Some(next_char); [INFO] [stderr] 146 | | break; [INFO] [stderr] ... | [INFO] [stderr] 149 | | } [INFO] [stderr] 150 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [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] 143 | } else if Token::is_delim(&next_char) && next_char != '.' { [INFO] [stderr] 144 | self.current_char = Some(next_char); [INFO] [stderr] 145 | break; [INFO] [stderr] 146 | } else { [INFO] [stderr] 147 | text_builder.push(next_char); [INFO] [stderr] 148 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/scanner.rs:154:24 [INFO] [stderr] | [INFO] [stderr] 154 | } else { [INFO] [stderr] | ________________________^ [INFO] [stderr] 155 | | if &text_builder == "!!!" { [INFO] [stderr] 156 | | Some(Token::DocType()) [INFO] [stderr] 157 | | } else { [INFO] [stderr] 158 | | Some(Token::Text(text_builder)) [INFO] [stderr] 159 | | } [INFO] [stderr] 160 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [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] 154 | } else if &text_builder == "!!!" { [INFO] [stderr] 155 | Some(Token::DocType()) [INFO] [stderr] 156 | } else { [INFO] [stderr] 157 | Some(Token::Text(text_builder)) [INFO] [stderr] 158 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/scanner.rs:47:16 [INFO] [stderr] | [INFO] [stderr] 47 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 48 | | if let Some(ch) = self.chars.next() { [INFO] [stderr] 49 | | current_char = ch; [INFO] [stderr] 50 | | } else { [INFO] [stderr] 51 | | return None; [INFO] [stderr] 52 | | } [INFO] [stderr] 53 | | } [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] 47 | } else if let Some(ch) = self.chars.next() { [INFO] [stderr] 48 | current_char = ch; [INFO] [stderr] 49 | } else { [INFO] [stderr] 50 | return None; [INFO] [stderr] 51 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/scanner.rs:143:28 [INFO] [stderr] | [INFO] [stderr] 143 | } else { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 144 | | if Token::is_delim(&next_char) && next_char != '.' { [INFO] [stderr] 145 | | self.current_char = Some(next_char); [INFO] [stderr] 146 | | break; [INFO] [stderr] ... | [INFO] [stderr] 149 | | } [INFO] [stderr] 150 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [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] 143 | } else if Token::is_delim(&next_char) && next_char != '.' { [INFO] [stderr] 144 | self.current_char = Some(next_char); [INFO] [stderr] 145 | break; [INFO] [stderr] 146 | } else { [INFO] [stderr] 147 | text_builder.push(next_char); [INFO] [stderr] 148 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/scanner.rs:154:24 [INFO] [stderr] | [INFO] [stderr] 154 | } else { [INFO] [stderr] | ________________________^ [INFO] [stderr] 155 | | if &text_builder == "!!!" { [INFO] [stderr] 156 | | Some(Token::DocType()) [INFO] [stderr] 157 | | } else { [INFO] [stderr] 158 | | Some(Token::Text(text_builder)) [INFO] [stderr] 159 | | } [INFO] [stderr] 160 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [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] 154 | } else if &text_builder == "!!!" { [INFO] [stderr] 155 | Some(Token::DocType()) [INFO] [stderr] 156 | } else { [INFO] [stderr] 157 | Some(Token::Text(text_builder)) [INFO] [stderr] 158 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: value assigned to `token` is never read [INFO] [stderr] --> src/parser.rs:71:17 [INFO] [stderr] | [INFO] [stderr] 71 | let mut token: Option<&Token> = None; [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_assignments)] on by default [INFO] [stderr] [INFO] [stderr] warning: value assigned to `class` is never read [INFO] [stderr] --> src/parser.rs:86:33 [INFO] [stderr] | [INFO] [stderr] 86 | let mut class = String::new(); [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: value assigned to `id` is never read [INFO] [stderr] --> src/parser.rs:101:33 [INFO] [stderr] | [INFO] [stderr] 101 | let mut id = String::new(); [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: value assigned to `value` is never read [INFO] [stderr] --> src/scanner.rs:68:25 [INFO] [stderr] | [INFO] [stderr] 68 | let mut value: Option = None; [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: value assigned to `token` is never read [INFO] [stderr] --> src/parser.rs:71:17 [INFO] [stderr] | [INFO] [stderr] 71 | let mut token: Option<&Token> = None; [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_assignments)] on by default [INFO] [stderr] [INFO] [stderr] warning: value assigned to `class` is never read [INFO] [stderr] --> src/parser.rs:86:33 [INFO] [stderr] | [INFO] [stderr] 86 | let mut class = String::new(); [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: value assigned to `id` is never read [INFO] [stderr] --> src/parser.rs:101:33 [INFO] [stderr] | [INFO] [stderr] 101 | let mut id = String::new(); [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: value assigned to `value` is never read [INFO] [stderr] --> src/scanner.rs:68:25 [INFO] [stderr] | [INFO] [stderr] 68 | let mut value: Option = None; [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/ast.rs:34:26 [INFO] [stderr] | [INFO] [stderr] 34 | let values = self.attributes.get(key).unwrap().join(" "); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.attributes[key]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ast.rs:135:12 [INFO] [stderr] | [INFO] [stderr] 135 | if self.nodes.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.nodes.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: useless use of `format!` [INFO] [stderr] --> src/ast.rs:196:44 [INFO] [stderr] | [INFO] [stderr] 196 | html_builder.push_str(&format!("{}", self.node_to_html(*child_id))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `self.node_to_html(*child_id).to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/ast.rs:215:40 [INFO] [stderr] | [INFO] [stderr] 215 | html_builder.push_str(&format!("{}", self.node_to_html(sibling_id))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `self.node_to_html(sibling_id).to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ast.rs:225:12 [INFO] [stderr] | [INFO] [stderr] 225 | if self.nodes.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.nodes.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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/ast.rs:34:26 [INFO] [stderr] | [INFO] [stderr] 34 | let values = self.attributes.get(key).unwrap().join(" "); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.attributes[key]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ast.rs:235:12 [INFO] [stderr] | [INFO] [stderr] 235 | if self.nodes.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.nodes.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/parser.rs:14:24 [INFO] [stderr] | [INFO] [stderr] 14 | pub fn new(tokens: &'a Vec) -> Parser<'a> { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[Token]` [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: length comparison to zero [INFO] [stderr] --> src/ast.rs:135:12 [INFO] [stderr] | [INFO] [stderr] 135 | if self.nodes.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.nodes.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: this loop could be written as a `while let` loop [INFO] [stderr] --> src/parser.rs:177:9 [INFO] [stderr] | [INFO] [stderr] 177 | / loop { [INFO] [stderr] 178 | | match self.tokens.next() { [INFO] [stderr] 179 | | Some(tok) => match tok { [INFO] [stderr] 180 | | Token::ClosedCurlyBrace() => break, [INFO] [stderr] ... | [INFO] [stderr] 222 | | } [INFO] [stderr] 223 | | } [INFO] [stderr] | |_________^ help: try: `while let Some(tok) = self.tokens.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: useless use of `format!` [INFO] [stderr] --> src/ast.rs:196:44 [INFO] [stderr] | [INFO] [stderr] 196 | html_builder.push_str(&format!("{}", self.node_to_html(*child_id))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `self.node_to_html(*child_id).to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/ast.rs:215:40 [INFO] [stderr] | [INFO] [stderr] 215 | html_builder.push_str(&format!("{}", self.node_to_html(sibling_id))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `self.node_to_html(sibling_id).to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ast.rs:225:12 [INFO] [stderr] | [INFO] [stderr] 225 | if self.nodes.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.nodes.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ast.rs:235:12 [INFO] [stderr] | [INFO] [stderr] 235 | if self.nodes.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.nodes.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/parser.rs:14:24 [INFO] [stderr] | [INFO] [stderr] 14 | pub fn new(tokens: &'a Vec) -> Parser<'a> { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[Token]` [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: this loop could be written as a `while let` loop [INFO] [stderr] --> src/parser.rs:177:9 [INFO] [stderr] | [INFO] [stderr] 177 | / loop { [INFO] [stderr] 178 | | match self.tokens.next() { [INFO] [stderr] 179 | | Some(tok) => match tok { [INFO] [stderr] 180 | | Token::ClosedCurlyBrace() => break, [INFO] [stderr] ... | [INFO] [stderr] 222 | | } [INFO] [stderr] 223 | | } [INFO] [stderr] | |_________^ help: try: `while let Some(tok) = self.tokens.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: this loop could be written as a `while let` loop [INFO] [stderr] --> src/scanner.rs:28:9 [INFO] [stderr] | [INFO] [stderr] 28 | / loop { [INFO] [stderr] 29 | | if let Some(token) = self.next() { [INFO] [stderr] 30 | | self.tokens.push(token); [INFO] [stderr] 31 | | } else { [INFO] [stderr] 32 | | break; [INFO] [stderr] 33 | | } [INFO] [stderr] 34 | | } [INFO] [stderr] | |_________^ help: try: `while let Some(token) = self.next() { .. }` [INFO] [stderr] | [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: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/scanner.rs:101:17 [INFO] [stderr] | [INFO] [stderr] 101 | / let mut return_value = Some(Token::Whitespace()); [INFO] [stderr] 102 | | if Some(Token::EndLine()) == self.previous_token { [INFO] [stderr] 103 | | let mut count = 1; [INFO] [stderr] 104 | | loop { [INFO] [stderr] ... | [INFO] [stderr] 116 | | return_value = Some(Token::Indentation(count / 2)); [INFO] [stderr] 117 | | } [INFO] [stderr] | |_________________^ help: it is more idiomatic to write: `let return_value = if Some(Token::EndLine()) == self.previous_token { ..; Some(Token::Indentation(count / 2)) } else { Some(Token::Whitespace()) };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/values.rs:26:25 [INFO] [stderr] | [INFO] [stderr] 26 | pub fn is_delim(ch: &char) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `char` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/scanner.rs:28:9 [INFO] [stderr] | [INFO] [stderr] 28 | / loop { [INFO] [stderr] 29 | | if let Some(token) = self.next() { [INFO] [stderr] 30 | | self.tokens.push(token); [INFO] [stderr] 31 | | } else { [INFO] [stderr] 32 | | break; [INFO] [stderr] 33 | | } [INFO] [stderr] 34 | | } [INFO] [stderr] | |_________^ help: try: `while let Some(token) = self.next() { .. }` [INFO] [stderr] | [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: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/scanner.rs:101:17 [INFO] [stderr] | [INFO] [stderr] 101 | / let mut return_value = Some(Token::Whitespace()); [INFO] [stderr] 102 | | if Some(Token::EndLine()) == self.previous_token { [INFO] [stderr] 103 | | let mut count = 1; [INFO] [stderr] 104 | | loop { [INFO] [stderr] ... | [INFO] [stderr] 116 | | return_value = Some(Token::Indentation(count / 2)); [INFO] [stderr] 117 | | } [INFO] [stderr] | |_________________^ help: it is more idiomatic to write: `let return_value = if Some(Token::EndLine()) == self.previous_token { ..; Some(Token::Indentation(count / 2)) } else { Some(Token::Whitespace()) };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/values.rs:26:25 [INFO] [stderr] | [INFO] [stderr] 26 | pub fn is_delim(ch: &char) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `char` [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] Finished dev [unoptimized + debuginfo] target(s) in 6.74s [INFO] running `"docker" "inspect" "3627beea7496605ed9c3dc129d67741d05c4cebb2755eb832ca8d429cee70c7f"` [INFO] running `"docker" "rm" "-f" "3627beea7496605ed9c3dc129d67741d05c4cebb2755eb832ca8d429cee70c7f"` [INFO] [stdout] 3627beea7496605ed9c3dc129d67741d05c4cebb2755eb832ca8d429cee70c7f