[INFO] cloning repository https://github.com/Saksunoob/neutrino-lang [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Saksunoob/neutrino-lang" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FSaksunoob%2Fneutrino-lang", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FSaksunoob%2Fneutrino-lang'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 5a3e81b3885d9d4c77842db52d666553ea922bca [INFO] linting Saksunoob/neutrino-lang against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FSaksunoob%2Fneutrino-lang" "/workspace/builds/worker-5-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/Saksunoob/neutrino-lang [INFO] finished tweaking git repo https://github.com/Saksunoob/neutrino-lang [INFO] tweaked toml for git repo https://github.com/Saksunoob/neutrino-lang written to /workspace/builds/worker-5-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/Saksunoob/neutrino-lang on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/Saksunoob/neutrino-lang already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] d4b33fbba55f3a5552271993a4d7854a59a808ae5ac61864474089469ef327d5 [INFO] running `Command { std: "docker" "start" "-a" "d4b33fbba55f3a5552271993a4d7854a59a808ae5ac61864474089469ef327d5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "d4b33fbba55f3a5552271993a4d7854a59a808ae5ac61864474089469ef327d5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "d4b33fbba55f3a5552271993a4d7854a59a808ae5ac61864474089469ef327d5", kill_on_drop: false }` [INFO] [stdout] d4b33fbba55f3a5552271993a4d7854a59a808ae5ac61864474089469ef327d5 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 3cfe4623156b20826d7376fd41a9d4ed3e0dbf0b8339c3e0352ed19db79a9ae3 [INFO] running `Command { std: "docker" "start" "-a" "3cfe4623156b20826d7376fd41a9d4ed3e0dbf0b8339c3e0352ed19db79a9ae3", kill_on_drop: false }` [INFO] [stderr] Checking neutrino-lang v0.0.1 (/opt/rustwide/workdir) [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/lexer.rs:5:23 [INFO] [stdout] | [INFO] [stdout] 5 | pub fn tokenize(file: &String) -> Tokens { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 5 - pub fn tokenize(file: &String) -> Tokens { [INFO] [stdout] 5 + pub fn tokenize(file: &str) -> Tokens { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/lexer.rs:26:20 [INFO] [stdout] | [INFO] [stdout] 26 | if buffer.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!buffer.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/lexer.rs:36:16 [INFO] [stdout] | [INFO] [stdout] 36 | if buffer.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!buffer.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `self.locations.get(0)` [INFO] [stdout] --> src/lexer.rs:73:9 [INFO] [stdout] | [INFO] [stdout] 73 | self.locations.get(0).copied().unwrap_or((0, 0)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `self.locations.front()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `EOF` contains a capitalized acronym [INFO] [stdout] --> src/lexer.rs:113:5 [INFO] [stdout] | [INFO] [stdout] 113 | EOF, [INFO] [stdout] | ^^^ help: consider making the acronym lowercase, except the initial letter (notice the capitalization): `Eof` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lexer.rs:145:9 [INFO] [stdout] | [INFO] [stdout] 145 | return None; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 145 - return None; [INFO] [stdout] 145 + None [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/lexer.rs:124:37 [INFO] [stdout] | [INFO] [stdout] 124 | let string: String = buffer.into_iter().collect(); [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/lexer.rs:147:32 [INFO] [stdout] | [INFO] [stdout] 147 | pub fn expect_char(buffer: &Vec, char: &char) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 147 ~ pub fn expect_char(buffer: &[char], char: &char) -> bool { [INFO] [stdout] 148 | if buffer.len() == 0 { [INFO] [stdout] 149 | return !char.is_whitespace(); [INFO] [stdout] 150 | } [INFO] [stdout] 151 ~ let mut buffer = buffer.to_owned(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/lexer.rs:148:12 [INFO] [stdout] | [INFO] [stdout] 148 | if buffer.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `buffer.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/lexer.rs:234:32 [INFO] [stdout] | [INFO] [stdout] 234 | pub fn from_string(string: &String) -> Option { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 234 ~ pub fn from_string(string: &str) -> Option { [INFO] [stdout] 235 ~ match string { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/lexer.rs:257:32 [INFO] [stdout] | [INFO] [stdout] 257 | pub fn from_string(string: &String) -> Option { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 257 ~ pub fn from_string(string: &str) -> Option { [INFO] [stdout] 258 ~ match string { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/lexer.rs:286:32 [INFO] [stdout] | [INFO] [stdout] 286 | pub fn from_string(string: &String) -> Option { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 286 ~ pub fn from_string(string: &str) -> Option { [INFO] [stdout] 287 | if string.chars().next().unwrap() == '+' { [INFO] [stdout] ... [INFO] [stdout] 295 | } [INFO] [stdout] 296 ~ match string { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should use the `starts_with` method [INFO] [stdout] --> src/lexer.rs:287:12 [INFO] [stdout] | [INFO] [stdout] 287 | if string.chars().next().unwrap() == '+' { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: like this: `string.starts_with('+')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#chars_next_cmp [INFO] [stdout] = note: `#[warn(clippy::chars_next_cmp)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: matching on `Some` with `ok()` is redundant [INFO] [stdout] --> src/lexer.rs:290:9 [INFO] [stdout] | [INFO] [stdout] 290 | if let Some(int) = string.parse::().ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_result_ok [INFO] [stdout] = note: `#[warn(clippy::match_result_ok)]` on by default [INFO] [stdout] help: consider matching on `Ok(int)` and removing the call to `ok` instead [INFO] [stdout] | [INFO] [stdout] 290 - if let Some(int) = string.parse::().ok() { [INFO] [stdout] 290 + if let Ok(int) = string.parse::() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: matching on `Some` with `ok()` is redundant [INFO] [stdout] --> src/lexer.rs:293:9 [INFO] [stdout] | [INFO] [stdout] 293 | if let Some(float) = string.parse::().ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_result_ok [INFO] [stdout] help: consider matching on `Ok(float)` and removing the call to `ok` instead [INFO] [stdout] | [INFO] [stdout] 293 - if let Some(float) = string.parse::().ok() { [INFO] [stdout] 293 + if let Ok(float) = string.parse::() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/lexer.rs:327:32 [INFO] [stdout] | [INFO] [stdout] 327 | pub fn from_string(string: &String) -> Option { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 327 ~ pub fn from_string(string: &str) -> Option { [INFO] [stdout] 328 ~ match string { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/lexer.rs:361:32 [INFO] [stdout] | [INFO] [stdout] 361 | pub fn from_string(string: &String) -> Option { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 361 - pub fn from_string(string: &String) -> Option { [INFO] [stdout] 361 + pub fn from_string(string: &str) -> Option { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lexer.rs:412:5 [INFO] [stdout] | [INFO] [stdout] 412 | return Some( id.clone() ); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 412 - return Some( id.clone() ); [INFO] [stdout] 412 + Some( id.clone() ) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:62:5 [INFO] [stdout] | [INFO] [stdout] 62 | return Ok(syntax_tree) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 62 - return Ok(syntax_tree) [INFO] [stdout] 62 + Ok(syntax_tree) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/parser.rs:41:21 [INFO] [stdout] | [INFO] [stdout] 41 | / match tokens.next() { [INFO] [stdout] 42 | | Token::SpecialSymbol(SpecialSymbol::Terminator) => break, [INFO] [stdout] 43 | | _ => (), [INFO] [stdout] 44 | | } [INFO] [stdout] | |_____________________^ help: try: `if let Token::SpecialSymbol(SpecialSymbol::Terminator) = tokens.next() { break }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/parser.rs:50:21 [INFO] [stdout] | [INFO] [stdout] 50 | / match tokens.next() { [INFO] [stdout] 51 | | Token::SpecialSymbol(SpecialSymbol::CloseBracket) => break, [INFO] [stdout] 52 | | _ => (), [INFO] [stdout] 53 | | } [INFO] [stdout] | |_____________________^ help: try: `if let Token::SpecialSymbol(SpecialSymbol::CloseBracket) = tokens.next() { break }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary map of the identity function [INFO] [stdout] --> src/parser.rs:124:42 [INFO] [stdout] | [INFO] [stdout] 124 | let arguments = arguments.into_iter().map(|(name, type_)| (name, type_)).collect(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove the call to `map` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_identity [INFO] [stdout] = note: `#[warn(clippy::map_identity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:150:5 [INFO] [stdout] | [INFO] [stdout] 150 | / return Ok(Block { [INFO] [stdout] 151 | | return_type, [INFO] [stdout] 152 | | instructions, [INFO] [stdout] 153 | | }); [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 150 ~ Ok(Block { [INFO] [stdout] 151 + return_type, [INFO] [stdout] 152 + instructions, [INFO] [stdout] 153 ~ }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/parser.rs:299:48 [INFO] [stdout] | [INFO] [stdout] 299 | return Err(ParseError::new(format!("Expected operator"), tokens.get_curr_location())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"Expected operator".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/parser.rs:330:48 [INFO] [stdout] | [INFO] [stdout] 330 | return Err(ParseError::new(format!("Expected operator"), tokens.get_prev_location())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"Expected operator".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/parser.rs:337:48 [INFO] [stdout] | [INFO] [stdout] 337 | return Err(ParseError::new(format!("Expected operator"), tokens.get_prev_location())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"Expected operator".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this loop could be written as a `while let` loop [INFO] [stdout] --> src/parser.rs:342:21 [INFO] [stdout] | [INFO] [stdout] 342 | / loop { [INFO] [stdout] 343 | | match tokens.peek() { [INFO] [stdout] 344 | | Token::SpecialSymbol(SpecialSymbol::Period) => { [INFO] [stdout] 345 | | tokens.next(); [INFO] [stdout] ... | [INFO] [stdout] 357 | | } [INFO] [stdout] | |_____________________^ help: try: `while let Token::SpecialSymbol(SpecialSymbol::Period) = tokens.peek() { .. }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stdout] = note: `#[warn(clippy::while_let_loop)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/parser.rs:361:48 [INFO] [stdout] | [INFO] [stdout] 361 | return Err(ParseError::new(format!("Expected identifier"), tokens.get_prev_location())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"Expected identifier".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/parser.rs:369:48 [INFO] [stdout] | [INFO] [stdout] 369 | return Err(ParseError::new(format!("Expected operator"), tokens.get_prev_location())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"Expected operator".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this loop could be written as a `while let` loop [INFO] [stdout] --> src/parser.rs:381:25 [INFO] [stdout] | [INFO] [stdout] 381 | / loop { [INFO] [stdout] 382 | | match tokens.peek() { [INFO] [stdout] 383 | | Token::SpecialSymbol(SpecialSymbol::Period) => { [INFO] [stdout] 384 | | tokens.next(); [INFO] [stdout] ... | [INFO] [stdout] 396 | | } [INFO] [stdout] | |_________________________^ help: try: `while let Token::SpecialSymbol(SpecialSymbol::Period) = tokens.peek() { .. }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/parser.rs:420:48 [INFO] [stdout] | [INFO] [stdout] 420 | return Err(ParseError::new(format!("Unexpected operator after operator"), tokens.get_prev_location())) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"Unexpected operator after operator".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/parser.rs:431:8 [INFO] [stdout] | [INFO] [stdout] 431 | if operands.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `operands.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/parser.rs:432:36 [INFO] [stdout] | [INFO] [stdout] 432 | return Err(ParseError::new(format!("Expected operand in expression"), tokens.get_curr_location())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"Expected operand in expression".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/parser.rs:435:36 [INFO] [stdout] | [INFO] [stdout] 435 | return Err(ParseError::new(format!("Expected one more operand in expression"), tokens.get_curr_location())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"Expected one more operand in expression".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `Option.and_then(|x| Some(y))`, which is more succinctly expressed as `map(|x| y)` [INFO] [stdout] --> src/parser.rs:441:21 [INFO] [stdout] | [INFO] [stdout] 441 | let index = operators.iter().enumerate().find(|(_, op)| { [INFO] [stdout] | _____________________^ [INFO] [stdout] 442 | | op.get_operation_order() == current_operator [INFO] [stdout] 443 | | }).and_then(|(index, _)| Some(index)); [INFO] [stdout] | |_____________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] = note: `#[warn(clippy::bind_instead_of_map)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 441 ~ let index = operators.iter().enumerate().find(|(_, op)| { [INFO] [stdout] 442 + op.get_operation_order() == current_operator [INFO] [stdout] 443 ~ }).map(|(index, _)| index); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/parser.rs:511:17 [INFO] [stdout] | [INFO] [stdout] 511 | / match tokens.peek() { [INFO] [stdout] 512 | | Token::SpecialSymbol(SpecialSymbol::Comma) => { [INFO] [stdout] 513 | | tokens.next(); [INFO] [stdout] 514 | | }, [INFO] [stdout] 515 | | _ => () [INFO] [stdout] 516 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 511 ~ if let Token::SpecialSymbol(SpecialSymbol::Comma) = tokens.peek() { [INFO] [stdout] 512 + tokens.next(); [INFO] [stdout] 513 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/parser.rs:559:12 [INFO] [stdout] | [INFO] [stdout] 559 | if path.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `path.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/parser.rs:569:12 [INFO] [stdout] | [INFO] [stdout] 569 | if path.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `path.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/parser.rs:718:12 [INFO] [stdout] | [INFO] [stdout] 718 | if path.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `path.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/parser.rs:728:12 [INFO] [stdout] | [INFO] [stdout] 728 | if path.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `path.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the method `validate` doesn't need a mutable reference [INFO] [stdout] --> src/parser.rs:767:70 [INFO] [stdout] | [INFO] [stdout] 767 | let field = field_type.validate(&init_struct_signatures, &mut global_info.struct_signatures).map_err(|err| { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stdout] = note: `#[warn(clippy::unnecessary_mut_passed)]` on by default [INFO] [stdout] help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] 767 - let field = field_type.validate(&init_struct_signatures, &mut global_info.struct_signatures).map_err(|err| { [INFO] [stdout] 767 + let field = field_type.validate(&init_struct_signatures, &global_info.struct_signatures).map_err(|err| { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:804:13 [INFO] [stdout] | [INFO] [stdout] 804 | return Err(ParseError::new("Expected function return type".to_string(), tokens.get_location_nth(*index))); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 804 - return Err(ParseError::new("Expected function return type".to_string(), tokens.get_location_nth(*index))); [INFO] [stdout] 804 + Err(ParseError::new("Expected function return type".to_string(), tokens.get_location_nth(*index))) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `ASM` contains a capitalized acronym [INFO] [stdout] --> src/codegen.rs:5:8 [INFO] [stdout] | [INFO] [stdout] 5 | struct ASM { [INFO] [stdout] | ^^^ help: consider making the acronym lowercase, except the initial letter: `Asm` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/codegen.rs:77:20 [INFO] [stdout] | [INFO] [stdout] 77 | if field_path.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `field_path.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/codegen.rs:135:9 [INFO] [stdout] | [INFO] [stdout] 135 | return variables [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 135 - return variables [INFO] [stdout] 135 + variables [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/codegen.rs:103:34 [INFO] [stdout] | [INFO] [stdout] 103 | pub fn new(input_parameters: &Vec<(String, Type)>, asm: &mut ASM) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 103 - pub fn new(input_parameters: &Vec<(String, Type)>, asm: &mut ASM) -> Self { [INFO] [stdout] 103 + pub fn new(input_parameters: &[(String, Type)], asm: &mut ASM) -> Self { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/lexer.rs:5:23 [INFO] [stdout] | [INFO] [stdout] 5 | pub fn tokenize(file: &String) -> Tokens { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 5 - pub fn tokenize(file: &String) -> Tokens { [INFO] [stdout] 5 + pub fn tokenize(file: &str) -> Tokens { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/lexer.rs:26:20 [INFO] [stdout] | [INFO] [stdout] 26 | if buffer.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!buffer.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/lexer.rs:36:16 [INFO] [stdout] | [INFO] [stdout] 36 | if buffer.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!buffer.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `self.locations.get(0)` [INFO] [stdout] --> src/lexer.rs:73:9 [INFO] [stdout] | [INFO] [stdout] 73 | self.locations.get(0).copied().unwrap_or((0, 0)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `self.locations.front()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `EOF` contains a capitalized acronym [INFO] [stdout] --> src/lexer.rs:113:5 [INFO] [stdout] | [INFO] [stdout] 113 | EOF, [INFO] [stdout] | ^^^ help: consider making the acronym lowercase, except the initial letter (notice the capitalization): `Eof` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/codegen.rs:272:20 [INFO] [stdout] | [INFO] [stdout] 272 | if path.len() != 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!path.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/codegen.rs:275:53 [INFO] [stdout] | [INFO] [stdout] 275 | self.load_field_value(path, &inner_type, asm); [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `inner_type` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/codegen.rs:281:36 [INFO] [stdout] | [INFO] [stdout] 281 | asm.push_instr(format!("MOV RAX, [RBX]")); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"MOV RAX, [RBX]".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lexer.rs:145:9 [INFO] [stdout] | [INFO] [stdout] 145 | return None; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 145 - return None; [INFO] [stdout] 145 + None [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/lexer.rs:124:37 [INFO] [stdout] | [INFO] [stdout] 124 | let string: String = buffer.into_iter().collect(); [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/lexer.rs:147:32 [INFO] [stdout] | [INFO] [stdout] 147 | pub fn expect_char(buffer: &Vec, char: &char) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 147 ~ pub fn expect_char(buffer: &[char], char: &char) -> bool { [INFO] [stdout] 148 | if buffer.len() == 0 { [INFO] [stdout] 149 | return !char.is_whitespace(); [INFO] [stdout] 150 | } [INFO] [stdout] 151 ~ let mut buffer = buffer.to_owned(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/codegen.rs:340:45 [INFO] [stdout] | [INFO] [stdout] 340 | variables.push_variable(&id, "RAX", &value_type, asm); [INFO] [stdout] | ^^^ help: change this to: `id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/lexer.rs:148:12 [INFO] [stdout] | [INFO] [stdout] 148 | if buffer.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `buffer.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/codegen.rs:343:44 [INFO] [stdout] | [INFO] [stdout] 343 | variables.reg_variable(&id, &value_type) [INFO] [stdout] | ^^^ help: change this to: `id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/lexer.rs:234:32 [INFO] [stdout] | [INFO] [stdout] 234 | pub fn from_string(string: &String) -> Option { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 234 ~ pub fn from_string(string: &str) -> Option { [INFO] [stdout] 235 ~ match string { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/codegen.rs:427:28 [INFO] [stdout] | [INFO] [stdout] 427 | asm.push_instr(format!("MOV RAX, RSP")); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"MOV RAX, RSP".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/lexer.rs:257:32 [INFO] [stdout] | [INFO] [stdout] 257 | pub fn from_string(string: &String) -> Option { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 257 ~ pub fn from_string(string: &str) -> Option { [INFO] [stdout] 258 ~ match string { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/lexer.rs:286:32 [INFO] [stdout] | [INFO] [stdout] 286 | pub fn from_string(string: &String) -> Option { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 286 ~ pub fn from_string(string: &str) -> Option { [INFO] [stdout] 287 | if string.chars().next().unwrap() == '+' { [INFO] [stdout] ... [INFO] [stdout] 295 | } [INFO] [stdout] 296 ~ match string { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should use the `starts_with` method [INFO] [stdout] --> src/lexer.rs:287:12 [INFO] [stdout] | [INFO] [stdout] 287 | if string.chars().next().unwrap() == '+' { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: like this: `string.starts_with('+')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#chars_next_cmp [INFO] [stdout] = note: `#[warn(clippy::chars_next_cmp)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/main.rs:22:8 [INFO] [stdout] | [INFO] [stdout] 22 | if !program_directory.extension().is_some_and(|ext| ext == "nu"){ [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `program_directory.extension().is_none_or(|ext| ext != "nu")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: matching on `Some` with `ok()` is redundant [INFO] [stdout] --> src/lexer.rs:290:9 [INFO] [stdout] | [INFO] [stdout] 290 | if let Some(int) = string.parse::().ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_result_ok [INFO] [stdout] = note: `#[warn(clippy::match_result_ok)]` on by default [INFO] [stdout] help: consider matching on `Ok(int)` and removing the call to `ok` instead [INFO] [stdout] | [INFO] [stdout] 290 - if let Some(int) = string.parse::().ok() { [INFO] [stdout] 290 + if let Ok(int) = string.parse::() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: matching on `Some` with `ok()` is redundant [INFO] [stdout] --> src/lexer.rs:293:9 [INFO] [stdout] | [INFO] [stdout] 293 | if let Some(float) = string.parse::().ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_result_ok [INFO] [stdout] help: consider matching on `Ok(float)` and removing the call to `ok` instead [INFO] [stdout] | [INFO] [stdout] 293 - if let Some(float) = string.parse::().ok() { [INFO] [stdout] 293 + if let Ok(float) = string.parse::() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/lexer.rs:327:32 [INFO] [stdout] | [INFO] [stdout] 327 | pub fn from_string(string: &String) -> Option { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 327 ~ pub fn from_string(string: &str) -> Option { [INFO] [stdout] 328 ~ match string { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/lexer.rs:361:32 [INFO] [stdout] | [INFO] [stdout] 361 | pub fn from_string(string: &String) -> Option { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 361 - pub fn from_string(string: &String) -> Option { [INFO] [stdout] 361 + pub fn from_string(string: &str) -> Option { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lexer.rs:412:5 [INFO] [stdout] | [INFO] [stdout] 412 | return Some( id.clone() ); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 412 - return Some( id.clone() ); [INFO] [stdout] 412 + Some( id.clone() ) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:110:5 [INFO] [stdout] | [INFO] [stdout] 110 | return true [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 110 - return true [INFO] [stdout] 110 + true [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:62:5 [INFO] [stdout] | [INFO] [stdout] 62 | return Ok(syntax_tree) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 62 - return Ok(syntax_tree) [INFO] [stdout] 62 + Ok(syntax_tree) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/parser.rs:41:21 [INFO] [stdout] | [INFO] [stdout] 41 | / match tokens.next() { [INFO] [stdout] 42 | | Token::SpecialSymbol(SpecialSymbol::Terminator) => break, [INFO] [stdout] 43 | | _ => (), [INFO] [stdout] 44 | | } [INFO] [stdout] | |_____________________^ help: try: `if let Token::SpecialSymbol(SpecialSymbol::Terminator) = tokens.next() { break }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/parser.rs:50:21 [INFO] [stdout] | [INFO] [stdout] 50 | / match tokens.next() { [INFO] [stdout] 51 | | Token::SpecialSymbol(SpecialSymbol::CloseBracket) => break, [INFO] [stdout] 52 | | _ => (), [INFO] [stdout] 53 | | } [INFO] [stdout] | |_____________________^ help: try: `if let Token::SpecialSymbol(SpecialSymbol::CloseBracket) = tokens.next() { break }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary map of the identity function [INFO] [stdout] --> src/parser.rs:124:42 [INFO] [stdout] | [INFO] [stdout] 124 | let arguments = arguments.into_iter().map(|(name, type_)| (name, type_)).collect(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove the call to `map` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_identity [INFO] [stdout] = note: `#[warn(clippy::map_identity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:150:5 [INFO] [stdout] | [INFO] [stdout] 150 | / return Ok(Block { [INFO] [stdout] 151 | | return_type, [INFO] [stdout] 152 | | instructions, [INFO] [stdout] 153 | | }); [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 150 ~ Ok(Block { [INFO] [stdout] 151 + return_type, [INFO] [stdout] 152 + instructions, [INFO] [stdout] 153 ~ }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/parser.rs:299:48 [INFO] [stdout] | [INFO] [stdout] 299 | return Err(ParseError::new(format!("Expected operator"), tokens.get_curr_location())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"Expected operator".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/parser.rs:330:48 [INFO] [stdout] | [INFO] [stdout] 330 | return Err(ParseError::new(format!("Expected operator"), tokens.get_prev_location())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"Expected operator".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/parser.rs:337:48 [INFO] [stdout] | [INFO] [stdout] 337 | return Err(ParseError::new(format!("Expected operator"), tokens.get_prev_location())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"Expected operator".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this loop could be written as a `while let` loop [INFO] [stdout] --> src/parser.rs:342:21 [INFO] [stdout] | [INFO] [stdout] 342 | / loop { [INFO] [stdout] 343 | | match tokens.peek() { [INFO] [stdout] 344 | | Token::SpecialSymbol(SpecialSymbol::Period) => { [INFO] [stdout] 345 | | tokens.next(); [INFO] [stdout] ... | [INFO] [stdout] 357 | | } [INFO] [stdout] | |_____________________^ help: try: `while let Token::SpecialSymbol(SpecialSymbol::Period) = tokens.peek() { .. }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stdout] = note: `#[warn(clippy::while_let_loop)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/parser.rs:361:48 [INFO] [stdout] | [INFO] [stdout] 361 | return Err(ParseError::new(format!("Expected identifier"), tokens.get_prev_location())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"Expected identifier".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/parser.rs:369:48 [INFO] [stdout] | [INFO] [stdout] 369 | return Err(ParseError::new(format!("Expected operator"), tokens.get_prev_location())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"Expected operator".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this loop could be written as a `while let` loop [INFO] [stdout] --> src/parser.rs:381:25 [INFO] [stdout] | [INFO] [stdout] 381 | / loop { [INFO] [stdout] 382 | | match tokens.peek() { [INFO] [stdout] 383 | | Token::SpecialSymbol(SpecialSymbol::Period) => { [INFO] [stdout] 384 | | tokens.next(); [INFO] [stdout] ... | [INFO] [stdout] 396 | | } [INFO] [stdout] | |_________________________^ help: try: `while let Token::SpecialSymbol(SpecialSymbol::Period) = tokens.peek() { .. }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/parser.rs:420:48 [INFO] [stdout] | [INFO] [stdout] 420 | return Err(ParseError::new(format!("Unexpected operator after operator"), tokens.get_prev_location())) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"Unexpected operator after operator".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/parser.rs:431:8 [INFO] [stdout] | [INFO] [stdout] 431 | if operands.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `operands.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/parser.rs:432:36 [INFO] [stdout] | [INFO] [stdout] 432 | return Err(ParseError::new(format!("Expected operand in expression"), tokens.get_curr_location())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"Expected operand in expression".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/parser.rs:435:36 [INFO] [stdout] | [INFO] [stdout] 435 | return Err(ParseError::new(format!("Expected one more operand in expression"), tokens.get_curr_location())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"Expected one more operand in expression".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `Option.and_then(|x| Some(y))`, which is more succinctly expressed as `map(|x| y)` [INFO] [stdout] --> src/parser.rs:441:21 [INFO] [stdout] | [INFO] [stdout] 441 | let index = operators.iter().enumerate().find(|(_, op)| { [INFO] [stdout] | _____________________^ [INFO] [stdout] 442 | | op.get_operation_order() == current_operator [INFO] [stdout] 443 | | }).and_then(|(index, _)| Some(index)); [INFO] [stdout] | |_____________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] = note: `#[warn(clippy::bind_instead_of_map)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 441 ~ let index = operators.iter().enumerate().find(|(_, op)| { [INFO] [stdout] 442 + op.get_operation_order() == current_operator [INFO] [stdout] 443 ~ }).map(|(index, _)| index); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/parser.rs:511:17 [INFO] [stdout] | [INFO] [stdout] 511 | / match tokens.peek() { [INFO] [stdout] 512 | | Token::SpecialSymbol(SpecialSymbol::Comma) => { [INFO] [stdout] 513 | | tokens.next(); [INFO] [stdout] 514 | | }, [INFO] [stdout] 515 | | _ => () [INFO] [stdout] 516 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 511 ~ if let Token::SpecialSymbol(SpecialSymbol::Comma) = tokens.peek() { [INFO] [stdout] 512 + tokens.next(); [INFO] [stdout] 513 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/parser.rs:559:12 [INFO] [stdout] | [INFO] [stdout] 559 | if path.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `path.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/parser.rs:569:12 [INFO] [stdout] | [INFO] [stdout] 569 | if path.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `path.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/parser.rs:718:12 [INFO] [stdout] | [INFO] [stdout] 718 | if path.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `path.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/parser.rs:728:12 [INFO] [stdout] | [INFO] [stdout] 728 | if path.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `path.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the method `validate` doesn't need a mutable reference [INFO] [stdout] --> src/parser.rs:767:70 [INFO] [stdout] | [INFO] [stdout] 767 | let field = field_type.validate(&init_struct_signatures, &mut global_info.struct_signatures).map_err(|err| { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stdout] = note: `#[warn(clippy::unnecessary_mut_passed)]` on by default [INFO] [stdout] help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] 767 - let field = field_type.validate(&init_struct_signatures, &mut global_info.struct_signatures).map_err(|err| { [INFO] [stdout] 767 + let field = field_type.validate(&init_struct_signatures, &global_info.struct_signatures).map_err(|err| { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:804:13 [INFO] [stdout] | [INFO] [stdout] 804 | return Err(ParseError::new("Expected function return type".to_string(), tokens.get_location_nth(*index))); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 804 - return Err(ParseError::new("Expected function return type".to_string(), tokens.get_location_nth(*index))); [INFO] [stdout] 804 + Err(ParseError::new("Expected function return type".to_string(), tokens.get_location_nth(*index))) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the function `extract_global_info` doesn't need a mutable reference [INFO] [stdout] --> src/parser.rs:1287:42 [INFO] [stdout] | [INFO] [stdout] 1287 | let result = extract_global_info(&mut tokens); [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stdout] help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] 1287 - let result = extract_global_info(&mut tokens); [INFO] [stdout] 1287 + let result = extract_global_info(&tokens); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the function `extract_global_info` doesn't need a mutable reference [INFO] [stdout] --> src/parser.rs:1314:42 [INFO] [stdout] | [INFO] [stdout] 1314 | let result = extract_global_info(&mut tokens); [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stdout] help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] 1314 - let result = extract_global_info(&mut tokens); [INFO] [stdout] 1314 + let result = extract_global_info(&tokens); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `ASM` contains a capitalized acronym [INFO] [stdout] --> src/codegen.rs:5:8 [INFO] [stdout] | [INFO] [stdout] 5 | struct ASM { [INFO] [stdout] | ^^^ help: consider making the acronym lowercase, except the initial letter: `Asm` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/codegen.rs:77:20 [INFO] [stdout] | [INFO] [stdout] 77 | if field_path.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `field_path.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/codegen.rs:135:9 [INFO] [stdout] | [INFO] [stdout] 135 | return variables [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 135 - return variables [INFO] [stdout] 135 + variables [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/codegen.rs:103:34 [INFO] [stdout] | [INFO] [stdout] 103 | pub fn new(input_parameters: &Vec<(String, Type)>, asm: &mut ASM) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 103 - pub fn new(input_parameters: &Vec<(String, Type)>, asm: &mut ASM) -> Self { [INFO] [stdout] 103 + pub fn new(input_parameters: &[(String, Type)], asm: &mut ASM) -> Self { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/codegen.rs:272:20 [INFO] [stdout] | [INFO] [stdout] 272 | if path.len() != 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!path.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/codegen.rs:275:53 [INFO] [stdout] | [INFO] [stdout] 275 | self.load_field_value(path, &inner_type, asm); [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `inner_type` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/codegen.rs:281:36 [INFO] [stdout] | [INFO] [stdout] 281 | asm.push_instr(format!("MOV RAX, [RBX]")); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"MOV RAX, [RBX]".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/codegen.rs:340:45 [INFO] [stdout] | [INFO] [stdout] 340 | variables.push_variable(&id, "RAX", &value_type, asm); [INFO] [stdout] | ^^^ help: change this to: `id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/codegen.rs:343:44 [INFO] [stdout] | [INFO] [stdout] 343 | variables.reg_variable(&id, &value_type) [INFO] [stdout] | ^^^ help: change this to: `id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/codegen.rs:427:28 [INFO] [stdout] | [INFO] [stdout] 427 | asm.push_instr(format!("MOV RAX, RSP")); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"MOV RAX, RSP".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/main.rs:22:8 [INFO] [stdout] | [INFO] [stdout] 22 | if !program_directory.extension().is_some_and(|ext| ext == "nu"){ [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `program_directory.extension().is_none_or(|ext| ext != "nu")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:110:5 [INFO] [stdout] | [INFO] [stdout] 110 | return true [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 110 - return true [INFO] [stdout] 110 + true [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.80s [INFO] running `Command { std: "docker" "inspect" "3cfe4623156b20826d7376fd41a9d4ed3e0dbf0b8339c3e0352ed19db79a9ae3", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "3cfe4623156b20826d7376fd41a9d4ed3e0dbf0b8339c3e0352ed19db79a9ae3", kill_on_drop: false }` [INFO] [stdout] 3cfe4623156b20826d7376fd41a9d4ed3e0dbf0b8339c3e0352ed19db79a9ae3