[INFO] cloning repository https://github.com/MarchMol/syntax_analyzer [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/MarchMol/syntax_analyzer" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FMarchMol%2Fsyntax_analyzer", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FMarchMol%2Fsyntax_analyzer'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] b594201055bcf578c9f3e4b38969f70f76071f4c [INFO] linting MarchMol/syntax_analyzer against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FMarchMol%2Fsyntax_analyzer" "/workspace/builds/worker-1-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/MarchMol/syntax_analyzer [INFO] finished tweaking git repo https://github.com/MarchMol/syntax_analyzer [INFO] tweaked toml for git repo https://github.com/MarchMol/syntax_analyzer written to /workspace/builds/worker-1-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/MarchMol/syntax_analyzer 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/MarchMol/syntax_analyzer 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] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded prettytable v0.10.0 [INFO] [stderr] Downloaded petgraph v0.8.1 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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] f8c80d1b0a542236b29b1f9d2fe3d71404bad743ea6743e3ae36d661fe30ff9d [INFO] running `Command { std: "docker" "start" "-a" "f8c80d1b0a542236b29b1f9d2fe3d71404bad743ea6743e3ae36d661fe30ff9d", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "f8c80d1b0a542236b29b1f9d2fe3d71404bad743ea6743e3ae36d661fe30ff9d", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "f8c80d1b0a542236b29b1f9d2fe3d71404bad743ea6743e3ae36d661fe30ff9d", kill_on_drop: false }` [INFO] [stdout] f8c80d1b0a542236b29b1f9d2fe3d71404bad743ea6743e3ae36d661fe30ff9d [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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] 7f3d998a2b95947c8ecff72f39fb4427e602ef83575adbb03c818a1c4a5497b0 [INFO] running `Command { std: "docker" "start" "-a" "7f3d998a2b95947c8ecff72f39fb4427e602ef83575adbb03c818a1c4a5497b0", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.95 [INFO] [stderr] Checking fixedbitset v0.5.7 [INFO] [stderr] Checking hashbrown v0.15.2 [INFO] [stderr] Checking csv-core v0.1.12 [INFO] [stderr] Checking dirs-sys-next v0.1.2 [INFO] [stderr] Checking is-terminal v0.4.16 [INFO] [stderr] Checking console v0.15.11 [INFO] [stderr] Checking dirs-next v2.0.0 [INFO] [stderr] Checking term v0.7.0 [INFO] [stderr] Compiling quote v1.0.40 [INFO] [stderr] Compiling syn v2.0.100 [INFO] [stderr] Checking indexmap v2.9.0 [INFO] [stderr] Checking petgraph v0.8.1 [INFO] [stderr] Compiling serde_derive v1.0.219 [INFO] [stderr] Checking serde v1.0.219 [INFO] [stderr] Checking csv v1.3.1 [INFO] [stderr] Checking bitflags v2.9.0 [INFO] [stderr] Checking serde_json v1.0.140 [INFO] [stderr] Checking ron v0.10.1 [INFO] [stderr] Checking prettytable v0.10.0 [INFO] [stderr] Checking syntax_analyzer v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused imports: `fs::File` and `path::Path` [INFO] [stdout] --> src/utility/read_config.rs:2:11 [INFO] [stdout] | [INFO] [stdout] 2 | use std::{fs::File, io::Read, path::Path}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `fs::File` and `path::Path` [INFO] [stdout] --> src/utility/read_config.rs:2:11 [INFO] [stdout] | [INFO] [stdout] 2 | use std::{fs::File, io::Read, path::Path}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `ron::error` [INFO] [stdout] --> src/lex/lex_analyzer.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use ron::error; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `ron::error` [INFO] [stdout] --> src/lex/lex_analyzer.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use ron::error; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/lex/lex_analyzer.rs:90:13 [INFO] [stdout] | [INFO] [stdout] 90 | token_list: token_list, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `token_list` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/lex/lex_analyzer.rs:90:13 [INFO] [stdout] | [INFO] [stdout] 90 | token_list: token_list, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `token_list` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/lex/lex_analyzer.rs:262:25 [INFO] [stdout] | [INFO] [stdout] 262 | line: line, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `line` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/lex/lex_analyzer.rs:292:21 [INFO] [stdout] | [INFO] [stdout] 292 | line: line, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `line` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/syn/yp_reader.rs:43:9 [INFO] [stdout] | [INFO] [stdout] 43 | name: name [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/syn/yp_reader.rs:171:9 [INFO] [stdout] | [INFO] [stdout] 171 | productions: productions, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `productions` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/lex/lex_analyzer.rs:262:25 [INFO] [stdout] | [INFO] [stdout] 262 | line: line, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `line` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/lex/lex_analyzer.rs:292:21 [INFO] [stdout] | [INFO] [stdout] 292 | line: line, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `line` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/syn/yp_reader.rs:43:9 [INFO] [stdout] | [INFO] [stdout] 43 | name: name [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/syn/yp_reader.rs:171:9 [INFO] [stdout] | [INFO] [stdout] 171 | productions: productions, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `productions` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/syn/yp_reader.rs:172:9 [INFO] [stdout] | [INFO] [stdout] 172 | terminals: terminals, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `terminals` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/syn/yp_reader.rs:173:9 [INFO] [stdout] | [INFO] [stdout] 173 | non_terminals: non_terminals, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `non_terminals` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/syn/yp_reader.rs:174:9 [INFO] [stdout] | [INFO] [stdout] 174 | ignore: ignore, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `ignore` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/syn/yp_reader.rs:175:9 [INFO] [stdout] | [INFO] [stdout] 175 | init_symbol: init_symbol, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `init_symbol` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/syn/yp_reader.rs:172:9 [INFO] [stdout] | [INFO] [stdout] 172 | terminals: terminals, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `terminals` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/syn/yp_reader.rs:173:9 [INFO] [stdout] | [INFO] [stdout] 173 | non_terminals: non_terminals, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `non_terminals` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/syn/yp_reader.rs:174:9 [INFO] [stdout] | [INFO] [stdout] 174 | ignore: ignore, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `ignore` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/syn/yp_reader.rs:175:9 [INFO] [stdout] | [INFO] [stdout] 175 | init_symbol: init_symbol, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `init_symbol` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/lex/lex_analyzer.rs:204:13 [INFO] [stdout] | [INFO] [stdout] 204 | let mut end: usize = 0; [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `start` [INFO] [stdout] --> src/lex/lex_analyzer.rs:203:32 [INFO] [stdout] | [INFO] [stdout] 203 | fn get_error_bounds(&self, start: usize, input: String) -> usize { [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_start` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `input` [INFO] [stdout] --> src/lex/lex_analyzer.rs:203:46 [INFO] [stdout] | [INFO] [stdout] 203 | fn get_error_bounds(&self, start: usize, input: String) -> usize { [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_input` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `errors` [INFO] [stdout] --> src/lex/lex_analyzer.rs:315:46 [INFO] [stdout] | [INFO] [stdout] 315 | fn print_lexic_errors(symbols: &Vec, errors: &Vec<(usize, usize)>) { [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_errors` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `lhs` [INFO] [stdout] --> src/syn/lalr_automata.rs:347:25 [INFO] [stdout] | [INFO] [stdout] 347 | let lhs = if let Element::NonTerminal(lhs) = &rhs[0] { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_lhs` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `green` [INFO] [stdout] --> src/syn/syn_analyzer.rs:39:13 [INFO] [stdout] | [INFO] [stdout] 39 | let green = Style::new().green().bold(); [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_green` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `flow` [INFO] [stdout] --> src/syn/syn_analyzer.rs:59:13 [INFO] [stdout] | [INFO] [stdout] 59 | let flow = &config.parse_method; [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_flow` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/syn/syn_analyzer.rs:180:13 [INFO] [stdout] | [INFO] [stdout] 180 | let mut base_slr = slr_automata::SLR::new( [INFO] [stdout] | ----^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `output` [INFO] [stdout] --> src/view/render.rs:108:12 [INFO] [stdout] | [INFO] [stdout] 108 | Ok(output) => { [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_output` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `err` [INFO] [stdout] --> src/view/render.rs:114:13 [INFO] [stdout] | [INFO] [stdout] 114 | Err(err) => { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_err` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `output` [INFO] [stdout] --> src/view/render.rs:348:12 [INFO] [stdout] | [INFO] [stdout] 348 | Ok(output) => { [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_output` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `err` [INFO] [stdout] --> src/view/render.rs:354:13 [INFO] [stdout] | [INFO] [stdout] 354 | Err(err) => { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_err` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/lex/lex_analyzer.rs:204:13 [INFO] [stdout] | [INFO] [stdout] 204 | let mut end: usize = 0; [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `start` [INFO] [stdout] --> src/lex/lex_analyzer.rs:203:32 [INFO] [stdout] | [INFO] [stdout] 203 | fn get_error_bounds(&self, start: usize, input: String) -> usize { [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_start` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `input` [INFO] [stdout] --> src/lex/lex_analyzer.rs:203:46 [INFO] [stdout] | [INFO] [stdout] 203 | fn get_error_bounds(&self, start: usize, input: String) -> usize { [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_input` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `errors` [INFO] [stdout] --> src/lex/lex_analyzer.rs:315:46 [INFO] [stdout] | [INFO] [stdout] 315 | fn print_lexic_errors(symbols: &Vec, errors: &Vec<(usize, usize)>) { [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_errors` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_error_bounds` is never used [INFO] [stdout] --> src/lex/lex_analyzer.rs:203:8 [INFO] [stdout] | [INFO] [stdout] 35 | impl LexAnalyzer { [INFO] [stdout] | ---------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 203 | fn get_error_bounds(&self, start: usize, input: String) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/lex/yl_reader.rs:85:13 [INFO] [stdout] | [INFO] [stdout] 85 | / if section == 1{ [INFO] [stdout] 86 | | if ch=='='{ [INFO] [stdout] 87 | | section=2; [INFO] [stdout] 88 | | } [INFO] [stdout] 89 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 85 ~ if section == 1 [INFO] [stdout] 86 ~ && ch=='='{ [INFO] [stdout] 87 | section=2; [INFO] [stdout] 88 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/lex/yl_reader.rs:90:13 [INFO] [stdout] | [INFO] [stdout] 90 | / if section ==2 { [INFO] [stdout] 91 | | if ch.is_whitespace(){ [INFO] [stdout] 92 | | section = 3; [INFO] [stdout] 93 | | continue; [INFO] [stdout] 94 | | } [INFO] [stdout] 95 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 90 ~ if section ==2 [INFO] [stdout] 91 ~ && ch.is_whitespace(){ [INFO] [stdout] 92 | section = 3; [INFO] [stdout] 93 | continue; [INFO] [stdout] 94 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/lex/yl_reader.rs:227:13 [INFO] [stdout] | [INFO] [stdout] 227 | / if section==1{ [INFO] [stdout] 228 | | if ch=='{'{ [INFO] [stdout] 229 | | section = 2; [INFO] [stdout] 230 | | continue; [INFO] [stdout] 231 | | } [INFO] [stdout] 232 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 227 ~ if section==1 [INFO] [stdout] 228 ~ && ch=='{'{ [INFO] [stdout] 229 | section = 2; [INFO] [stdout] 230 | continue; [INFO] [stdout] 231 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/lex/yl_reader.rs:240:40 [INFO] [stdout] | [INFO] [stdout] 240 | let cl_reg = replace_vars(reg, &vars); [INFO] [stdout] | ^^^^^ help: change this to: `vars` [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: unused variable: `lhs` [INFO] [stdout] --> src/syn/lalr_automata.rs:347:25 [INFO] [stdout] | [INFO] [stdout] 347 | let lhs = if let Element::NonTerminal(lhs) = &rhs[0] { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_lhs` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/lex/yl_reader.rs:316:5 [INFO] [stdout] | [INFO] [stdout] 315 | let lexdata = genereate_action_table(&rule_vec, header); [INFO] [stdout] | -------------------------------------------------------- unnecessary `let` binding [INFO] [stdout] 316 | lexdata [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 315 ~ [INFO] [stdout] 316 ~ genereate_action_table(&rule_vec, header) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> src/lex/yl_reader.rs:273:9 [INFO] [stdout] | [INFO] [stdout] 273 | / for line in lines{ [INFO] [stdout] 274 | | if let Ok(raw_content) = line{ [INFO] [stdout] 275 | | // Remove inital whitespace of line [INFO] [stdout] 276 | | let content = trim_ws(raw_content); [INFO] [stdout] ... | [INFO] [stdout] 302 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/lex/yl_reader.rs:274:13 [INFO] [stdout] | [INFO] [stdout] 274 | / if let Ok(raw_content) = line{ [INFO] [stdout] 275 | | // Remove inital whitespace of line [INFO] [stdout] 276 | | let content = trim_ws(raw_content); [INFO] [stdout] 277 | | if !content.clone().starts_with("(*"){ // if its not a comment [INFO] [stdout] ... | [INFO] [stdout] 301 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] = note: `#[warn(clippy::manual_flatten)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 273 ~ for raw_content in lines.flatten(){ [INFO] [stdout] 274 + // Remove inital whitespace of line [INFO] [stdout] 275 + let content = trim_ws(raw_content); [INFO] [stdout] 276 + if !content.clone().starts_with("(*"){ // if its not a comment [INFO] [stdout] 277 + if section == 0 { // Header section [INFO] [stdout] 278 + if !content.starts_with("{"){ [INFO] [stdout] 279 + if content.starts_with("}"){ [INFO] [stdout] 280 + section = 1; [INFO] [stdout] 281 + } else{ [INFO] [stdout] 282 + header.push(content.clone()); [INFO] [stdout] 283 + } [INFO] [stdout] 284 + } [INFO] [stdout] 285 + } [INFO] [stdout] 286 + if section == 1{ // Var section [INFO] [stdout] 287 + if content.starts_with("let"){ [INFO] [stdout] 288 + vars.push(content.clone()); [INFO] [stdout] 289 + } else { [INFO] [stdout] 290 + if content.starts_with("rule"){ [INFO] [stdout] 291 + section = 2; [INFO] [stdout] 292 + continue; [INFO] [stdout] 293 + } [INFO] [stdout] 294 + } [INFO] [stdout] 295 + } [INFO] [stdout] 296 + if section == 2{ // Rule section [INFO] [stdout] 297 + rule.push(content.clone()); [INFO] [stdout] 298 + } [INFO] [stdout] 299 + } [INFO] [stdout] 300 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `green` [INFO] [stdout] --> src/syn/syn_analyzer.rs:39:13 [INFO] [stdout] | [INFO] [stdout] 39 | let green = Style::new().green().bold(); [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_green` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `flow` [INFO] [stdout] --> src/syn/syn_analyzer.rs:59:13 [INFO] [stdout] | [INFO] [stdout] 59 | let flow = &config.parse_method; [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_flow` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/syn/syn_analyzer.rs:180:13 [INFO] [stdout] | [INFO] [stdout] 180 | let mut base_slr = slr_automata::SLR::new( [INFO] [stdout] | ----^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert` to construct default value [INFO] [stdout] --> src/lex/direct_afd.rs:422:50 [INFO] [stdout] | [INFO] [stdout] 422 | followpos_map.entry(key.clone()).or_insert(Vec::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/lex/direct_afd.rs:457:40 [INFO] [stdout] | [INFO] [stdout] 457 | pub fn create_states(&mut self) -> (HashMap>, HashSet, Vec) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to want to iterate on a map's values [INFO] [stdout] --> src/lex/direct_afd.rs:486:30 [INFO] [stdout] | [INFO] [stdout] 486 | for (_key, value) in &labels_map { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stdout] = note: `#[warn(clippy::for_kv_map)]` on by default [INFO] [stdout] help: use the corresponding method [INFO] [stdout] | [INFO] [stdout] 486 - for (_key, value) in &labels_map { [INFO] [stdout] 486 + for value in labels_map.values() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/lex/direct_afd.rs:578:30 [INFO] [stdout] | [INFO] [stdout] 578 | ... .or_insert_with(HashMap::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_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/lex/grammar_tree.rs:21:9 [INFO] [stdout] | [INFO] [stdout] 21 | / match self.left{ [INFO] [stdout] 22 | | Some(left)=>{ [INFO] [stdout] 23 | | let lret = (*left).clone().print_tree(level+1, "L----"); [INFO] [stdout] 24 | | ret+=&lret; [INFO] [stdout] ... | [INFO] [stdout] 28 | | } [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] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 21 ~ if let Some(left) = self.left { [INFO] [stdout] 22 + let lret = (*left).clone().print_tree(level+1, "L----"); [INFO] [stdout] 23 + ret+=&lret; [INFO] [stdout] 24 + } [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/lex/grammar_tree.rs:29:9 [INFO] [stdout] | [INFO] [stdout] 29 | / match self.right { [INFO] [stdout] 30 | | Some(right)=>{ [INFO] [stdout] 31 | | let rret = (*right).clone().print_tree(level+1,"R----"); [INFO] [stdout] 32 | | ret+=&rret; [INFO] [stdout] ... | [INFO] [stdout] 36 | | } [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] 29 ~ if let Some(right) = self.right { [INFO] [stdout] 30 + let rret = (*right).clone().print_tree(level+1,"R----"); [INFO] [stdout] 31 + ret+=&rret; [INFO] [stdout] 32 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Tree` [INFO] [stdout] --> src/lex/grammar_tree.rs:54:5 [INFO] [stdout] | [INFO] [stdout] 54 | / pub fn new()->Self{ [INFO] [stdout] 55 | | Self { nodes: Vec::new(), root: None } [INFO] [stdout] 56 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 53 + impl Default for Tree { [INFO] [stdout] 54 + fn default() -> Self { [INFO] [stdout] 55 + Self::new() [INFO] [stdout] 56 + } [INFO] [stdout] 57 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `output` [INFO] [stdout] --> src/view/render.rs:108:12 [INFO] [stdout] | [INFO] [stdout] 108 | Ok(output) => { [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_output` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `err` [INFO] [stdout] --> src/view/render.rs:114:13 [INFO] [stdout] | [INFO] [stdout] 114 | Err(err) => { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_err` [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/lex/grammar_tree.rs:72:21 [INFO] [stdout] | [INFO] [stdout] 72 | / match (stack.pop(), stack.pop()){ [INFO] [stdout] 73 | | (Some(second), Some(first))=>{ [INFO] [stdout] 74 | | let operator = TreeNode{ [INFO] [stdout] 75 | | value: tk, [INFO] [stdout] ... | [INFO] [stdout] 81 | | _=>{} [INFO] [stdout] 82 | | } [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] 72 ~ if let (Some(second), Some(first)) = (stack.pop(), stack.pop()) { [INFO] [stdout] 73 + let operator = TreeNode{ [INFO] [stdout] 74 + value: tk, [INFO] [stdout] 75 + left: Some(Rc::new(first)), [INFO] [stdout] 76 + right: Some(Rc::new(second)) [INFO] [stdout] 77 + }; [INFO] [stdout] 78 + stack.push(operator); [INFO] [stdout] 79 + } [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/lex/grammar_tree.rs:86:21 [INFO] [stdout] | [INFO] [stdout] 86 | / match stack.pop(){ [INFO] [stdout] 87 | | Some(first)=>{ [INFO] [stdout] 88 | | let operator = TreeNode{ [INFO] [stdout] 89 | | value: tk, [INFO] [stdout] ... | [INFO] [stdout] 95 | | _=>{} [INFO] [stdout] 96 | | } [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] 86 ~ if let Some(first) = stack.pop() { [INFO] [stdout] 87 + let operator = TreeNode{ [INFO] [stdout] 88 + value: tk, [INFO] [stdout] 89 + left: Some(Rc::new(first)), [INFO] [stdout] 90 + right:None [INFO] [stdout] 91 + }; [INFO] [stdout] 92 + stack.push(operator); [INFO] [stdout] 93 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `unwrap()` on `Some` value [INFO] [stdout] --> src/lex/grammar_tree.rs:120:9 [INFO] [stdout] | [INFO] [stdout] 120 | root_node.unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: remove the `Some` and `unwrap()` [INFO] [stdout] --> src/lex/grammar_tree.rs:118:25 [INFO] [stdout] | [INFO] [stdout] 118 | let root_node = Some(Rc::new(stack[0].clone())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_literal_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_literal_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lex/tokenizer.rs:24:5 [INFO] [stdout] | [INFO] [stdout] 24 | return both_char|| both_num [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] 24 - return both_char|| both_num [INFO] [stdout] 24 + both_char|| both_num [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this loop could be written as a `for` loop [INFO] [stdout] --> src/lex/tokenizer.rs:75:17 [INFO] [stdout] | [INFO] [stdout] 75 | while let Some(c) = chars.next() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `for c in chars.by_ref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_on_iterator [INFO] [stdout] = note: `#[warn(clippy::while_let_on_iterator)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/lex/tokenizer.rs:137:5 [INFO] [stdout] | [INFO] [stdout] 130 | / let prec = match token { [INFO] [stdout] 131 | | Token::Kleene => 3, [INFO] [stdout] 132 | | Token::Plus => 3, [INFO] [stdout] 133 | | Token::Concat => 2, [INFO] [stdout] 134 | | Token::Union => 1, [INFO] [stdout] 135 | | _ => 0, [INFO] [stdout] 136 | | }; [INFO] [stdout] | |______- unnecessary `let` binding [INFO] [stdout] 137 | prec [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 130 ~ [INFO] [stdout] 131 ~ match token { [INFO] [stdout] 132 + Token::Kleene => 3, [INFO] [stdout] 133 + Token::Plus => 3, [INFO] [stdout] 134 + Token::Concat => 2, [INFO] [stdout] 135 + Token::Union => 1, [INFO] [stdout] 136 + _ => 0, [INFO] [stdout] 137 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `output` [INFO] [stdout] --> src/view/render.rs:348:12 [INFO] [stdout] | [INFO] [stdout] 348 | Ok(output) => { [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_output` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `err` [INFO] [stdout] --> src/view/render.rs:354:13 [INFO] [stdout] | [INFO] [stdout] 354 | Err(err) => { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_err` [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/lex/tokenizer.rs:273:9 [INFO] [stdout] | [INFO] [stdout] 273 | / match stack.pop(){ [INFO] [stdout] 274 | | Some(tk) =>{ [INFO] [stdout] 275 | | queue.push_back(tk); [INFO] [stdout] 276 | | }, [INFO] [stdout] 277 | | _=>{} [INFO] [stdout] 278 | | } [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] 273 ~ if let Some(tk) = stack.pop() { [INFO] [stdout] 274 + queue.push_back(tk); [INFO] [stdout] 275 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to want to iterate on a map's keys [INFO] [stdout] --> src/lex/minimize.rs:22:24 [INFO] [stdout] | [INFO] [stdout] 22 | for (&state, _) in dfa { [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stdout] help: use the corresponding method [INFO] [stdout] | [INFO] [stdout] 22 - for (&state, _) in dfa { [INFO] [stdout] 22 + for &state in dfa.keys() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_error_bounds` is never used [INFO] [stdout] --> src/lex/lex_analyzer.rs:203:8 [INFO] [stdout] | [INFO] [stdout] 35 | impl LexAnalyzer { [INFO] [stdout] | ---------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 203 | fn get_error_bounds(&self, start: usize, input: String) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `print!()` with a format string that ends in a single newline [INFO] [stdout] --> src/lex/lex_analyzer.rs:44:13 [INFO] [stdout] | [INFO] [stdout] 44 | print!("\n"); [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_with_newline [INFO] [stdout] = note: `#[warn(clippy::print_with_newline)]` on by default [INFO] [stdout] help: use `println!` instead [INFO] [stdout] | [INFO] [stdout] 44 - print!("\n"); [INFO] [stdout] 44 + println!(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lex/lex_analyzer.rs:303:13 [INFO] [stdout] | [INFO] [stdout] 303 | return Some(symbols); [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] 303 - return Some(symbols); [INFO] [stdout] 303 + Some(symbols) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lex/lex_analyzer.rs:306:13 [INFO] [stdout] | [INFO] [stdout] 306 | 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] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 306 - return None [INFO] [stdout] 306 + None [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/lex/lex_analyzer.rs:311:9 [INFO] [stdout] | [INFO] [stdout] 310 | let mini = self.asignar_token(&input); [INFO] [stdout] | -------------------------------------- unnecessary `let` binding [INFO] [stdout] 311 | mini [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 310 ~ [INFO] [stdout] 311 ~ self.asignar_token(&input) [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/lex/lex_analyzer.rs:315:32 [INFO] [stdout] | [INFO] [stdout] 315 | fn print_lexic_errors(symbols: &Vec, errors: &Vec<(usize, usize)>) { [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] 315 - fn print_lexic_errors(symbols: &Vec, errors: &Vec<(usize, usize)>) { [INFO] [stdout] 315 + fn print_lexic_errors(symbols: &[Symbol], errors: &Vec<(usize, usize)>) { [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/lex/lex_analyzer.rs:315:54 [INFO] [stdout] | [INFO] [stdout] 315 | fn print_lexic_errors(symbols: &Vec, errors: &Vec<(usize, usize)>) { [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] 315 - fn print_lexic_errors(symbols: &Vec, errors: &Vec<(usize, usize)>) { [INFO] [stdout] 315 + fn print_lexic_errors(symbols: &Vec, errors: &[(usize, usize)]) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/lex/lex_analyzer.rs:380:24 [INFO] [stdout] | [INFO] [stdout] 380 | final_msg+=&s; [INFO] [stdout] | ^^ help: change this to: `s` [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 `if` statement can be collapsed [INFO] [stdout] --> src/syn/yp_reader.rs:31:9 [INFO] [stdout] | [INFO] [stdout] 31 | / if id == 0{ [INFO] [stdout] 32 | | if div == "%token"{ [INFO] [stdout] 33 | | action = false; [INFO] [stdout] 34 | | } [INFO] [stdout] 35 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 31 ~ if id == 0 [INFO] [stdout] 32 ~ && div == "%token"{ [INFO] [stdout] 33 | action = false; [INFO] [stdout] 34 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::str::Chars<'_>` [INFO] [stdout] --> src/syn/yp_reader.rs:60:21 [INFO] [stdout] | [INFO] [stdout] 60 | for (id, ch) in prod_string.chars().into_iter().enumerate(){ [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `prod_string.chars()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/lex/yl_reader.rs:85:13 [INFO] [stdout] | [INFO] [stdout] 85 | / if section == 1{ [INFO] [stdout] 86 | | if ch=='='{ [INFO] [stdout] 87 | | section=2; [INFO] [stdout] 88 | | } [INFO] [stdout] 89 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 85 ~ if section == 1 [INFO] [stdout] 86 ~ && ch=='='{ [INFO] [stdout] 87 | section=2; [INFO] [stdout] 88 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/lex/yl_reader.rs:90:13 [INFO] [stdout] | [INFO] [stdout] 90 | / if section ==2 { [INFO] [stdout] 91 | | if ch.is_whitespace(){ [INFO] [stdout] 92 | | section = 3; [INFO] [stdout] 93 | | continue; [INFO] [stdout] 94 | | } [INFO] [stdout] 95 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 90 ~ if section ==2 [INFO] [stdout] 91 ~ && ch.is_whitespace(){ [INFO] [stdout] 92 | section = 3; [INFO] [stdout] 93 | continue; [INFO] [stdout] 94 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/syn/yp_reader.rs:85:13 [INFO] [stdout] | [INFO] [stdout] 85 | / if !terminals.contains(t){ [INFO] [stdout] 86 | | if !non_terminals.contains(t){ [INFO] [stdout] 87 | | non_terminals.insert(t.to_string()); [INFO] [stdout] 88 | | } [INFO] [stdout] 89 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 85 ~ if !terminals.contains(t) [INFO] [stdout] 86 ~ && !non_terminals.contains(t){ [INFO] [stdout] 87 | non_terminals.insert(t.to_string()); [INFO] [stdout] 88 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` branch is empty [INFO] [stdout] --> src/syn/yp_reader.rs:154:9 [INFO] [stdout] | [INFO] [stdout] 154 | / if id == 0{ [INFO] [stdout] 155 | | [INFO] [stdout] 156 | | } [INFO] [stdout] | |_________^ help: you can remove it [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_ifs [INFO] [stdout] = note: `#[warn(clippy::needless_ifs)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/lex/yl_reader.rs:227:13 [INFO] [stdout] | [INFO] [stdout] 227 | / if section==1{ [INFO] [stdout] 228 | | if ch=='{'{ [INFO] [stdout] 229 | | section = 2; [INFO] [stdout] 230 | | continue; [INFO] [stdout] 231 | | } [INFO] [stdout] 232 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 227 ~ if section==1 [INFO] [stdout] 228 ~ && ch=='{'{ [INFO] [stdout] 229 | section = 2; [INFO] [stdout] 230 | continue; [INFO] [stdout] 231 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/lex/yl_reader.rs:240:40 [INFO] [stdout] | [INFO] [stdout] 240 | let cl_reg = replace_vars(reg, &vars); [INFO] [stdout] | ^^^^^ help: change this to: `vars` [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: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/syn/slr_automata.rs:48:22 [INFO] [stdout] | [INFO] [stdout] 48 | init_symbol: &String [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] 48 ~ init_symbol: &str [INFO] [stdout] 49 | ) -> Self { [INFO] [stdout] ... [INFO] [stdout] 56 | Element::NonTerminal("S\'".to_string()), [INFO] [stdout] 57 ~ Element::NonTerminal(init_symbol.to_owned()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/lex/yl_reader.rs:316:5 [INFO] [stdout] | [INFO] [stdout] 315 | let lexdata = genereate_action_table(&rule_vec, header); [INFO] [stdout] | -------------------------------------------------------- unnecessary `let` binding [INFO] [stdout] 316 | lexdata [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 315 ~ [INFO] [stdout] 316 ~ genereate_action_table(&rule_vec, header) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/syn/slr_automata.rs:83:26 [INFO] [stdout] | [INFO] [stdout] 83 | .or_insert_with(HashSet::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> src/lex/yl_reader.rs:273:9 [INFO] [stdout] | [INFO] [stdout] 273 | / for line in lines{ [INFO] [stdout] 274 | | if let Ok(raw_content) = line{ [INFO] [stdout] 275 | | // Remove inital whitespace of line [INFO] [stdout] 276 | | let content = trim_ws(raw_content); [INFO] [stdout] ... | [INFO] [stdout] 302 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/lex/yl_reader.rs:274:13 [INFO] [stdout] | [INFO] [stdout] 274 | / if let Ok(raw_content) = line{ [INFO] [stdout] 275 | | // Remove inital whitespace of line [INFO] [stdout] 276 | | let content = trim_ws(raw_content); [INFO] [stdout] 277 | | if !content.clone().starts_with("(*"){ // if its not a comment [INFO] [stdout] ... | [INFO] [stdout] 301 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] = note: `#[warn(clippy::manual_flatten)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 273 ~ for raw_content in lines.flatten(){ [INFO] [stdout] 274 + // Remove inital whitespace of line [INFO] [stdout] 275 + let content = trim_ws(raw_content); [INFO] [stdout] 276 + if !content.clone().starts_with("(*"){ // if its not a comment [INFO] [stdout] 277 + if section == 0 { // Header section [INFO] [stdout] 278 + if !content.starts_with("{"){ [INFO] [stdout] 279 + if content.starts_with("}"){ [INFO] [stdout] 280 + section = 1; [INFO] [stdout] 281 + } else{ [INFO] [stdout] 282 + header.push(content.clone()); [INFO] [stdout] 283 + } [INFO] [stdout] 284 + } [INFO] [stdout] 285 + } [INFO] [stdout] 286 + if section == 1{ // Var section [INFO] [stdout] 287 + if content.starts_with("let"){ [INFO] [stdout] 288 + vars.push(content.clone()); [INFO] [stdout] 289 + } else { [INFO] [stdout] 290 + if content.starts_with("rule"){ [INFO] [stdout] 291 + section = 2; [INFO] [stdout] 292 + continue; [INFO] [stdout] 293 + } [INFO] [stdout] 294 + } [INFO] [stdout] 295 + } [INFO] [stdout] 296 + if section == 2{ // Rule section [INFO] [stdout] 297 + rule.push(content.clone()); [INFO] [stdout] 298 + } [INFO] [stdout] 299 + } [INFO] [stdout] 300 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/syn/slr_automata.rs:132:14 [INFO] [stdout] | [INFO] [stdout] 132 | .or_insert_with(HashMap::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort` [INFO] [stdout] --> src/syn/slr_automata.rs:235:13 [INFO] [stdout] | [INFO] [stdout] 235 | sorted_vec.sort_by(|a, b| a.cmp(b)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] = note: `#[warn(clippy::unnecessary_sort_by)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 235 - sorted_vec.sort_by(|a, b| a.cmp(b)); [INFO] [stdout] 235 + sorted_vec.sort(); [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/syn/slr_automata.rs:398:21 [INFO] [stdout] | [INFO] [stdout] 398 | pub fn are_equal(a: &Vec<(u8, u8)>, b: &Vec<(u8, u8)>) -> 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] 398 ~ pub fn are_equal(a: &[(u8, u8)], b: &Vec<(u8, u8)>) -> bool { [INFO] [stdout] 399 ~ let mut a_sorted = a.to_owned(); [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/syn/slr_automata.rs:398:40 [INFO] [stdout] | [INFO] [stdout] 398 | pub fn are_equal(a: &Vec<(u8, u8)>, b: &Vec<(u8, u8)>) -> 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] 398 ~ pub fn are_equal(a: &Vec<(u8, u8)>, b: &[(u8, u8)]) -> bool { [INFO] [stdout] 399 | let mut a_sorted = a.clone(); [INFO] [stdout] 400 ~ let mut b_sorted = b.to_owned(); [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/syn/lalr_automata.rs:56:22 [INFO] [stdout] | [INFO] [stdout] 56 | init_symbol: &String, [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] 56 ~ init_symbol: &str, [INFO] [stdout] 57 | ) -> Self { [INFO] [stdout] ... [INFO] [stdout] 60 | terminals: terminals.clone(), [INFO] [stdout] 61 ~ init_symbol: init_symbol.to_owned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert` to construct default value [INFO] [stdout] --> src/lex/direct_afd.rs:422:50 [INFO] [stdout] | [INFO] [stdout] 422 | followpos_map.entry(key.clone()).or_insert(Vec::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/lex/direct_afd.rs:457:40 [INFO] [stdout] | [INFO] [stdout] 457 | pub fn create_states(&mut self) -> (HashMap>, HashSet, Vec) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to want to iterate on a map's values [INFO] [stdout] --> src/lex/direct_afd.rs:486:30 [INFO] [stdout] | [INFO] [stdout] 486 | for (_key, value) in &labels_map { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stdout] = note: `#[warn(clippy::for_kv_map)]` on by default [INFO] [stdout] help: use the corresponding method [INFO] [stdout] | [INFO] [stdout] 486 - for (_key, value) in &labels_map { [INFO] [stdout] 486 + for value in labels_map.values() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/lex/direct_afd.rs:578:30 [INFO] [stdout] | [INFO] [stdout] 578 | ... .or_insert_with(HashMap::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/syn/lalr_automata.rs:302:10 [INFO] [stdout] | [INFO] [stdout] 302 | ) -> (HashMap<(u8, String), String>, HashMap<(u8, String), u8>) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [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/lex/grammar_tree.rs:21:9 [INFO] [stdout] | [INFO] [stdout] 21 | / match self.left{ [INFO] [stdout] 22 | | Some(left)=>{ [INFO] [stdout] 23 | | let lret = (*left).clone().print_tree(level+1, "L----"); [INFO] [stdout] 24 | | ret+=&lret; [INFO] [stdout] ... | [INFO] [stdout] 28 | | } [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] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 21 ~ if let Some(left) = self.left { [INFO] [stdout] 22 + let lret = (*left).clone().print_tree(level+1, "L----"); [INFO] [stdout] 23 + ret+=&lret; [INFO] [stdout] 24 + } [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/lex/grammar_tree.rs:29:9 [INFO] [stdout] | [INFO] [stdout] 29 | / match self.right { [INFO] [stdout] 30 | | Some(right)=>{ [INFO] [stdout] 31 | | let rret = (*right).clone().print_tree(level+1,"R----"); [INFO] [stdout] 32 | | ret+=&rret; [INFO] [stdout] ... | [INFO] [stdout] 36 | | } [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] 29 ~ if let Some(right) = self.right { [INFO] [stdout] 30 + let rret = (*right).clone().print_tree(level+1,"R----"); [INFO] [stdout] 31 + ret+=&rret; [INFO] [stdout] 32 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Tree` [INFO] [stdout] --> src/lex/grammar_tree.rs:54:5 [INFO] [stdout] | [INFO] [stdout] 54 | / pub fn new()->Self{ [INFO] [stdout] 55 | | Self { nodes: Vec::new(), root: None } [INFO] [stdout] 56 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 53 + impl Default for Tree { [INFO] [stdout] 54 + fn default() -> Self { [INFO] [stdout] 55 + Self::new() [INFO] [stdout] 56 + } [INFO] [stdout] 57 + } [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/lex/grammar_tree.rs:72:21 [INFO] [stdout] | [INFO] [stdout] 72 | / match (stack.pop(), stack.pop()){ [INFO] [stdout] 73 | | (Some(second), Some(first))=>{ [INFO] [stdout] 74 | | let operator = TreeNode{ [INFO] [stdout] 75 | | value: tk, [INFO] [stdout] ... | [INFO] [stdout] 81 | | _=>{} [INFO] [stdout] 82 | | } [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] 72 ~ if let (Some(second), Some(first)) = (stack.pop(), stack.pop()) { [INFO] [stdout] 73 + let operator = TreeNode{ [INFO] [stdout] 74 + value: tk, [INFO] [stdout] 75 + left: Some(Rc::new(first)), [INFO] [stdout] 76 + right: Some(Rc::new(second)) [INFO] [stdout] 77 + }; [INFO] [stdout] 78 + stack.push(operator); [INFO] [stdout] 79 + } [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/lex/grammar_tree.rs:86:21 [INFO] [stdout] | [INFO] [stdout] 86 | / match stack.pop(){ [INFO] [stdout] 87 | | Some(first)=>{ [INFO] [stdout] 88 | | let operator = TreeNode{ [INFO] [stdout] 89 | | value: tk, [INFO] [stdout] ... | [INFO] [stdout] 95 | | _=>{} [INFO] [stdout] 96 | | } [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] 86 ~ if let Some(first) = stack.pop() { [INFO] [stdout] 87 + let operator = TreeNode{ [INFO] [stdout] 88 + value: tk, [INFO] [stdout] 89 + left: Some(Rc::new(first)), [INFO] [stdout] 90 + right:None [INFO] [stdout] 91 + }; [INFO] [stdout] 92 + stack.push(operator); [INFO] [stdout] 93 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `unwrap()` on `Some` value [INFO] [stdout] --> src/lex/grammar_tree.rs:120:9 [INFO] [stdout] | [INFO] [stdout] 120 | root_node.unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: remove the `Some` and `unwrap()` [INFO] [stdout] --> src/lex/grammar_tree.rs:118:25 [INFO] [stdout] | [INFO] [stdout] 118 | let root_node = Some(Rc::new(stack[0].clone())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_literal_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_literal_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lex/tokenizer.rs:24:5 [INFO] [stdout] | [INFO] [stdout] 24 | return both_char|| both_num [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] 24 - return both_char|| both_num [INFO] [stdout] 24 + both_char|| both_num [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this loop could be written as a `for` loop [INFO] [stdout] --> src/lex/tokenizer.rs:75:17 [INFO] [stdout] | [INFO] [stdout] 75 | while let Some(c) = chars.next() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `for c in chars.by_ref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_on_iterator [INFO] [stdout] = note: `#[warn(clippy::while_let_on_iterator)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/lex/tokenizer.rs:137:5 [INFO] [stdout] | [INFO] [stdout] 130 | / let prec = match token { [INFO] [stdout] 131 | | Token::Kleene => 3, [INFO] [stdout] 132 | | Token::Plus => 3, [INFO] [stdout] 133 | | Token::Concat => 2, [INFO] [stdout] 134 | | Token::Union => 1, [INFO] [stdout] 135 | | _ => 0, [INFO] [stdout] 136 | | }; [INFO] [stdout] | |______- unnecessary `let` binding [INFO] [stdout] 137 | prec [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 130 ~ [INFO] [stdout] 131 ~ match token { [INFO] [stdout] 132 + Token::Kleene => 3, [INFO] [stdout] 133 + Token::Plus => 3, [INFO] [stdout] 134 + Token::Concat => 2, [INFO] [stdout] 135 + Token::Union => 1, [INFO] [stdout] 136 + _ => 0, [INFO] [stdout] 137 + } [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/lex/tokenizer.rs:273:9 [INFO] [stdout] | [INFO] [stdout] 273 | / match stack.pop(){ [INFO] [stdout] 274 | | Some(tk) =>{ [INFO] [stdout] 275 | | queue.push_back(tk); [INFO] [stdout] 276 | | }, [INFO] [stdout] 277 | | _=>{} [INFO] [stdout] 278 | | } [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] 273 ~ if let Some(tk) = stack.pop() { [INFO] [stdout] 274 + queue.push_back(tk); [INFO] [stdout] 275 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `print!()` with a format string that ends in a single newline [INFO] [stdout] --> src/syn/syn_analyzer.rs:43:13 [INFO] [stdout] | [INFO] [stdout] 43 | print!("\n"); [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_with_newline [INFO] [stdout] help: use `println!` instead [INFO] [stdout] | [INFO] [stdout] 43 - print!("\n"); [INFO] [stdout] 43 + println!(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to want to iterate on a map's keys [INFO] [stdout] --> src/lex/minimize.rs:22:24 [INFO] [stdout] | [INFO] [stdout] 22 | for (&state, _) in dfa { [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stdout] help: use the corresponding method [INFO] [stdout] | [INFO] [stdout] 22 - for (&state, _) in dfa { [INFO] [stdout] 22 + for &state in dfa.keys() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/syn/syn_analyzer.rs:107:10 [INFO] [stdout] | [INFO] [stdout] 107 | ) -> ( [INFO] [stdout] | __________^ [INFO] [stdout] 108 | | HashMap<(u8, String), String>, // Action [INFO] [stdout] 109 | | HashMap<(u8, String), u8>, // GOTO [INFO] [stdout] 110 | | HashMap>, // Productions [INFO] [stdout] 111 | | ) { [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/syn/syn_analyzer.rs:122:13 [INFO] [stdout] | [INFO] [stdout] 122 | &first, [INFO] [stdout] | ^^^^^^ help: change this to: `first` [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/syn/syn_analyzer.rs:137:38 [INFO] [stdout] | [INFO] [stdout] 137 | render::render_png(&slr, &render_path); [INFO] [stdout] | ^^^^^^^^^^^^ help: change this to: `render_path` [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/syn/syn_analyzer.rs:152:17 [INFO] [stdout] | [INFO] [stdout] 152 | &path, [INFO] [stdout] | ^^^^^ help: change this to: `path` [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: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/syn/syn_analyzer.rs:164:10 [INFO] [stdout] | [INFO] [stdout] 164 | ) -> ( [INFO] [stdout] | __________^ [INFO] [stdout] 165 | | HashMap<(u8, String), String>, // Action table [INFO] [stdout] 166 | | HashMap<(u8, String), u8>, // GOTO table [INFO] [stdout] 167 | | HashMap>, // Productions [INFO] [stdout] 168 | | ) { [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/syn/syn_analyzer.rs:194:23 [INFO] [stdout] | [INFO] [stdout] 194 | lalr.generate(&first); [INFO] [stdout] | ^^^^^^ help: change this to: `first` [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: using `print!()` with a format string that ends in a single newline [INFO] [stdout] --> src/lex/lex_analyzer.rs:44:13 [INFO] [stdout] | [INFO] [stdout] 44 | print!("\n"); [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_with_newline [INFO] [stdout] = note: `#[warn(clippy::print_with_newline)]` on by default [INFO] [stdout] help: use `println!` instead [INFO] [stdout] | [INFO] [stdout] 44 - print!("\n"); [INFO] [stdout] 44 + println!(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for copying elements [INFO] [stdout] --> src/view/render.rs:14:31 [INFO] [stdout] | [INFO] [stdout] 14 | let acceptance: Vec = slr.acceptance_states.iter().map(|b| *b).collect(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider calling the dedicated `copied` method: `slr.acceptance_states.iter().copied()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] = note: `#[warn(clippy::map_clone)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/view/render.rs:26:30 [INFO] [stdout] | [INFO] [stdout] 26 | trans += &str; [INFO] [stdout] | ^^^^ help: change this to: `str` [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/view/render.rs:29:30 [INFO] [stdout] | [INFO] [stdout] 29 | trans += &str; [INFO] [stdout] | ^^^^ help: change this to: `str` [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: unneeded `return` statement [INFO] [stdout] --> src/lex/lex_analyzer.rs:303:13 [INFO] [stdout] | [INFO] [stdout] 303 | return Some(symbols); [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] 303 - return Some(symbols); [INFO] [stdout] 303 + Some(symbols) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lex/lex_analyzer.rs:306:13 [INFO] [stdout] | [INFO] [stdout] 306 | 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] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 306 - return None [INFO] [stdout] 306 + None [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/lex/lex_analyzer.rs:311:9 [INFO] [stdout] | [INFO] [stdout] 310 | let mini = self.asignar_token(&input); [INFO] [stdout] | -------------------------------------- unnecessary `let` binding [INFO] [stdout] 311 | mini [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 310 ~ [INFO] [stdout] 311 ~ self.asignar_token(&input) [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/lex/lex_analyzer.rs:315:32 [INFO] [stdout] | [INFO] [stdout] 315 | fn print_lexic_errors(symbols: &Vec, errors: &Vec<(usize, usize)>) { [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] 315 - fn print_lexic_errors(symbols: &Vec, errors: &Vec<(usize, usize)>) { [INFO] [stdout] 315 + fn print_lexic_errors(symbols: &[Symbol], errors: &Vec<(usize, usize)>) { [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/lex/lex_analyzer.rs:315:54 [INFO] [stdout] | [INFO] [stdout] 315 | fn print_lexic_errors(symbols: &Vec, errors: &Vec<(usize, usize)>) { [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] 315 - fn print_lexic_errors(symbols: &Vec, errors: &Vec<(usize, usize)>) { [INFO] [stdout] 315 + fn print_lexic_errors(symbols: &Vec, errors: &[(usize, usize)]) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/view/render.rs:183:36 [INFO] [stdout] | [INFO] [stdout] 183 | tem_line+=&format!("{}",la); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `la.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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/lex/lex_analyzer.rs:380:24 [INFO] [stdout] | [INFO] [stdout] 380 | final_msg+=&s; [INFO] [stdout] | ^^ help: change this to: `s` [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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/view/render.rs:249:9 [INFO] [stdout] | [INFO] [stdout] 249 | / match ginfo.get(from) { [INFO] [stdout] 250 | | Some(ts) => { [INFO] [stdout] 251 | | let dest = ts.values(); [INFO] [stdout] 252 | | for to in dest { [INFO] [stdout] ... | [INFO] [stdout] 258 | | _ => {} [INFO] [stdout] 259 | | } [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] 249 ~ if let Some(ts) = ginfo.get(from) { [INFO] [stdout] 250 + let dest = ts.values(); [INFO] [stdout] 251 + for to in dest { [INFO] [stdout] 252 + if !all_states.contains(&to.to_string()) { [INFO] [stdout] 253 + all_states.push(to.to_string()); [INFO] [stdout] 254 + } [INFO] [stdout] 255 + } [INFO] [stdout] 256 + } [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/view/render.rs:277:9 [INFO] [stdout] | [INFO] [stdout] 277 | / match ginfo.get(from_weight) { [INFO] [stdout] 278 | | Some(hash) => { [INFO] [stdout] 279 | | let trans = hash.keys(); [INFO] [stdout] 280 | | for tr in trans { [INFO] [stdout] ... | [INFO] [stdout] 293 | | _ => {} [INFO] [stdout] 294 | | } [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] 277 ~ if let Some(hash) = ginfo.get(from_weight) { [INFO] [stdout] 278 + let trans = hash.keys(); [INFO] [stdout] 279 + for tr in trans { [INFO] [stdout] 280 + match hash.get(tr) { [INFO] [stdout] 281 + Some(dest_weight) => { [INFO] [stdout] 282 + let to_node = graph [INFO] [stdout] 283 + .node_indices() [INFO] [stdout] 284 + .find(|&i| graph[i] == dest_weight.to_string()) [INFO] [stdout] 285 + .expect("Node not found"); [INFO] [stdout] 286 + graph.add_edge(n_index, to_node, tr.to_string()); [INFO] [stdout] 287 + } [INFO] [stdout] 288 + _ => {} [INFO] [stdout] 289 + } [INFO] [stdout] 290 + } [INFO] [stdout] 291 + } [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/view/render.rs:281:21 [INFO] [stdout] | [INFO] [stdout] 281 | / match hash.get(tr) { [INFO] [stdout] 282 | | Some(dest_weight) => { [INFO] [stdout] 283 | | let to_node = graph [INFO] [stdout] 284 | | .node_indices() [INFO] [stdout] ... | [INFO] [stdout] 289 | | _ => {} [INFO] [stdout] 290 | | } [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] 281 ~ if let Some(dest_weight) = hash.get(tr) { [INFO] [stdout] 282 + let to_node = graph [INFO] [stdout] 283 + .node_indices() [INFO] [stdout] 284 + .find(|&i| graph[i] == dest_weight.to_string()) [INFO] [stdout] 285 + .expect("Node not found"); [INFO] [stdout] 286 + graph.add_edge(n_index, to_node, tr.to_string()); [INFO] [stdout] 287 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/syn/yp_reader.rs:31:9 [INFO] [stdout] | [INFO] [stdout] 31 | / if id == 0{ [INFO] [stdout] 32 | | if div == "%token"{ [INFO] [stdout] 33 | | action = false; [INFO] [stdout] 34 | | } [INFO] [stdout] 35 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 31 ~ if id == 0 [INFO] [stdout] 32 ~ && div == "%token"{ [INFO] [stdout] 33 | action = false; [INFO] [stdout] 34 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/view/render.rs:305:37 [INFO] [stdout] | [INFO] [stdout] 305 | let all_states = get_all_states(&ginfo); [INFO] [stdout] | ^^^^^^ help: change this to: `ginfo` [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 boolean expression can be simplified [INFO] [stdout] --> src/view/print_table.rs:74:20 [INFO] [stdout] | [INFO] [stdout] 74 | if !rslt.is_ok(){ [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `rslt.is_err()` [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: this boolean expression can be simplified [INFO] [stdout] --> src/view/print_table.rs:86:20 [INFO] [stdout] | [INFO] [stdout] 86 | if !rslt.is_ok(){ [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `rslt.is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::str::Chars<'_>` [INFO] [stdout] --> src/syn/yp_reader.rs:60:21 [INFO] [stdout] | [INFO] [stdout] 60 | for (id, ch) in prod_string.chars().into_iter().enumerate(){ [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `prod_string.chars()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/syn/yp_reader.rs:85:13 [INFO] [stdout] | [INFO] [stdout] 85 | / if !terminals.contains(t){ [INFO] [stdout] 86 | | if !non_terminals.contains(t){ [INFO] [stdout] 87 | | non_terminals.insert(t.to_string()); [INFO] [stdout] 88 | | } [INFO] [stdout] 89 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 85 ~ if !terminals.contains(t) [INFO] [stdout] 86 ~ && !non_terminals.contains(t){ [INFO] [stdout] 87 | non_terminals.insert(t.to_string()); [INFO] [stdout] 88 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `usize` is unnecessary [INFO] [stdout] --> src/view/print_table.rs:73:52 [INFO] [stdout] | [INFO] [stdout] 73 | let rslt = table.set_element(ac, j+1 as usize, i as usize); [INFO] [stdout] | ^^^^^^^^^^ help: try: `1_usize` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `usize` is unnecessary [INFO] [stdout] --> src/view/print_table.rs:85:65 [INFO] [stdout] | [INFO] [stdout] 85 | let rslt = table.set_element(&ac.to_string(), j+1 as usize, i as usize); [INFO] [stdout] | ^^^^^^^^^^ help: try: `1_usize` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` branch is empty [INFO] [stdout] --> src/syn/yp_reader.rs:154:9 [INFO] [stdout] | [INFO] [stdout] 154 | / if id == 0{ [INFO] [stdout] 155 | | [INFO] [stdout] 156 | | } [INFO] [stdout] | |_________^ help: you can remove it [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_ifs [INFO] [stdout] = note: `#[warn(clippy::needless_ifs)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/syn/slr_automata.rs:48:22 [INFO] [stdout] | [INFO] [stdout] 48 | init_symbol: &String [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] 48 ~ init_symbol: &str [INFO] [stdout] 49 | ) -> Self { [INFO] [stdout] ... [INFO] [stdout] 56 | Element::NonTerminal("S\'".to_string()), [INFO] [stdout] 57 ~ Element::NonTerminal(init_symbol.to_owned()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `B` should have a snake case name [INFO] [stdout] --> src/syn/lalr_automata.rs:108:45 [INFO] [stdout] | [INFO] [stdout] 108 | if let Element::NonTerminal(B) = next_sym { [INFO] [stdout] | ^ help: convert the identifier to snake case: `b` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/syn/slr_automata.rs:83:26 [INFO] [stdout] | [INFO] [stdout] 83 | .or_insert_with(HashSet::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/syn/slr_automata.rs:132:14 [INFO] [stdout] | [INFO] [stdout] 132 | .or_insert_with(HashMap::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort` [INFO] [stdout] --> src/syn/slr_automata.rs:235:13 [INFO] [stdout] | [INFO] [stdout] 235 | sorted_vec.sort_by(|a, b| a.cmp(b)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] = note: `#[warn(clippy::unnecessary_sort_by)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 235 - sorted_vec.sort_by(|a, b| a.cmp(b)); [INFO] [stdout] 235 + sorted_vec.sort(); [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/syn/slr_automata.rs:398:21 [INFO] [stdout] | [INFO] [stdout] 398 | pub fn are_equal(a: &Vec<(u8, u8)>, b: &Vec<(u8, u8)>) -> 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] 398 ~ pub fn are_equal(a: &[(u8, u8)], b: &Vec<(u8, u8)>) -> bool { [INFO] [stdout] 399 ~ let mut a_sorted = a.to_owned(); [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/syn/slr_automata.rs:398:40 [INFO] [stdout] | [INFO] [stdout] 398 | pub fn are_equal(a: &Vec<(u8, u8)>, b: &Vec<(u8, u8)>) -> 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] 398 ~ pub fn are_equal(a: &Vec<(u8, u8)>, b: &[(u8, u8)]) -> bool { [INFO] [stdout] 399 | let mut a_sorted = a.clone(); [INFO] [stdout] 400 ~ let mut b_sorted = b.to_owned(); [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/syn/lalr_automata.rs:56:22 [INFO] [stdout] | [INFO] [stdout] 56 | init_symbol: &String, [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] 56 ~ init_symbol: &str, [INFO] [stdout] 57 | ) -> Self { [INFO] [stdout] ... [INFO] [stdout] 60 | terminals: terminals.clone(), [INFO] [stdout] 61 ~ init_symbol: init_symbol.to_owned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/syn/lalr_automata.rs:302:10 [INFO] [stdout] | [INFO] [stdout] 302 | ) -> (HashMap<(u8, String), String>, HashMap<(u8, String), u8>) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `print!()` with a format string that ends in a single newline [INFO] [stdout] --> src/syn/syn_analyzer.rs:43:13 [INFO] [stdout] | [INFO] [stdout] 43 | print!("\n"); [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_with_newline [INFO] [stdout] help: use `println!` instead [INFO] [stdout] | [INFO] [stdout] 43 - print!("\n"); [INFO] [stdout] 43 + println!(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/syn/syn_analyzer.rs:107:10 [INFO] [stdout] | [INFO] [stdout] 107 | ) -> ( [INFO] [stdout] | __________^ [INFO] [stdout] 108 | | HashMap<(u8, String), String>, // Action [INFO] [stdout] 109 | | HashMap<(u8, String), u8>, // GOTO [INFO] [stdout] 110 | | HashMap>, // Productions [INFO] [stdout] 111 | | ) { [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/syn/syn_analyzer.rs:122:13 [INFO] [stdout] | [INFO] [stdout] 122 | &first, [INFO] [stdout] | ^^^^^^ help: change this to: `first` [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/syn/syn_analyzer.rs:137:38 [INFO] [stdout] | [INFO] [stdout] 137 | render::render_png(&slr, &render_path); [INFO] [stdout] | ^^^^^^^^^^^^ help: change this to: `render_path` [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/syn/syn_analyzer.rs:152:17 [INFO] [stdout] | [INFO] [stdout] 152 | &path, [INFO] [stdout] | ^^^^^ help: change this to: `path` [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: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/syn/syn_analyzer.rs:164:10 [INFO] [stdout] | [INFO] [stdout] 164 | ) -> ( [INFO] [stdout] | __________^ [INFO] [stdout] 165 | | HashMap<(u8, String), String>, // Action table [INFO] [stdout] 166 | | HashMap<(u8, String), u8>, // GOTO table [INFO] [stdout] 167 | | HashMap>, // Productions [INFO] [stdout] 168 | | ) { [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/syn/syn_analyzer.rs:194:23 [INFO] [stdout] | [INFO] [stdout] 194 | lalr.generate(&first); [INFO] [stdout] | ^^^^^^ help: change this to: `first` [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: you are using an explicit closure for copying elements [INFO] [stdout] --> src/view/render.rs:14:31 [INFO] [stdout] | [INFO] [stdout] 14 | let acceptance: Vec = slr.acceptance_states.iter().map(|b| *b).collect(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider calling the dedicated `copied` method: `slr.acceptance_states.iter().copied()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] = note: `#[warn(clippy::map_clone)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/view/render.rs:26:30 [INFO] [stdout] | [INFO] [stdout] 26 | trans += &str; [INFO] [stdout] | ^^^^ help: change this to: `str` [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/view/render.rs:29:30 [INFO] [stdout] | [INFO] [stdout] 29 | trans += &str; [INFO] [stdout] | ^^^^ help: change this to: `str` [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/view/render.rs:183:36 [INFO] [stdout] | [INFO] [stdout] 183 | tem_line+=&format!("{}",la); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `la.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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/view/render.rs:249:9 [INFO] [stdout] | [INFO] [stdout] 249 | / match ginfo.get(from) { [INFO] [stdout] 250 | | Some(ts) => { [INFO] [stdout] 251 | | let dest = ts.values(); [INFO] [stdout] 252 | | for to in dest { [INFO] [stdout] ... | [INFO] [stdout] 258 | | _ => {} [INFO] [stdout] 259 | | } [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] 249 ~ if let Some(ts) = ginfo.get(from) { [INFO] [stdout] 250 + let dest = ts.values(); [INFO] [stdout] 251 + for to in dest { [INFO] [stdout] 252 + if !all_states.contains(&to.to_string()) { [INFO] [stdout] 253 + all_states.push(to.to_string()); [INFO] [stdout] 254 + } [INFO] [stdout] 255 + } [INFO] [stdout] 256 + } [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/view/render.rs:277:9 [INFO] [stdout] | [INFO] [stdout] 277 | / match ginfo.get(from_weight) { [INFO] [stdout] 278 | | Some(hash) => { [INFO] [stdout] 279 | | let trans = hash.keys(); [INFO] [stdout] 280 | | for tr in trans { [INFO] [stdout] ... | [INFO] [stdout] 293 | | _ => {} [INFO] [stdout] 294 | | } [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] 277 ~ if let Some(hash) = ginfo.get(from_weight) { [INFO] [stdout] 278 + let trans = hash.keys(); [INFO] [stdout] 279 + for tr in trans { [INFO] [stdout] 280 + match hash.get(tr) { [INFO] [stdout] 281 + Some(dest_weight) => { [INFO] [stdout] 282 + let to_node = graph [INFO] [stdout] 283 + .node_indices() [INFO] [stdout] 284 + .find(|&i| graph[i] == dest_weight.to_string()) [INFO] [stdout] 285 + .expect("Node not found"); [INFO] [stdout] 286 + graph.add_edge(n_index, to_node, tr.to_string()); [INFO] [stdout] 287 + } [INFO] [stdout] 288 + _ => {} [INFO] [stdout] 289 + } [INFO] [stdout] 290 + } [INFO] [stdout] 291 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:27:40 [INFO] [stdout] | [INFO] [stdout] 27 | let la_raw = LexAnalyzer::generate(&lex_path, &config); [INFO] [stdout] | ^^^^^^^^^ help: change this to: `lex_path` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:27:40 [INFO] [stdout] | [INFO] [stdout] 27 | let la_raw = LexAnalyzer::generate(&lex_path, &config); [INFO] [stdout] | ^^^^^^^^^ help: change this to: `lex_path` [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: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:15:7 [INFO] [stdout] | [INFO] [stdout] 15 | 0=>{return "INT";} [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] 15 - 0=>{return "INT";} [INFO] [stdout] 15 + 0=>{"INT"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:32:40 [INFO] [stdout] | [INFO] [stdout] 32 | let sa_raw = SynAnalyzer::generate(&syn_path, &config); [INFO] [stdout] | ^^^^^^^^^ help: change this to: `syn_path` [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: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:16:8 [INFO] [stdout] | [INFO] [stdout] 16 | 14=>{return "RPAREN";} [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] 16 - 14=>{return "RPAREN";} [INFO] [stdout] 16 + 14=>{"RPAREN"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:17:8 [INFO] [stdout] | [INFO] [stdout] 17 | 18=>{return "SEMICOLON";} [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] 17 - 18=>{return "SEMICOLON";} [INFO] [stdout] 17 + 18=>{"SEMICOLON"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:18:7 [INFO] [stdout] | [INFO] [stdout] 18 | 6=>{return "WHILE";} [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] 18 - 6=>{return "WHILE";} [INFO] [stdout] 18 + 6=>{"WHILE"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:32:40 [INFO] [stdout] | [INFO] [stdout] 32 | let sa_raw = SynAnalyzer::generate(&syn_path, &config); [INFO] [stdout] | ^^^^^^^^^ help: change this to: `syn_path` [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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/view/render.rs:281:21 [INFO] [stdout] | [INFO] [stdout] 281 | / match hash.get(tr) { [INFO] [stdout] 282 | | Some(dest_weight) => { [INFO] [stdout] 283 | | let to_node = graph [INFO] [stdout] 284 | | .node_indices() [INFO] [stdout] ... | [INFO] [stdout] 289 | | _ => {} [INFO] [stdout] 290 | | } [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] 281 ~ if let Some(dest_weight) = hash.get(tr) { [INFO] [stdout] 282 + let to_node = graph [INFO] [stdout] 283 + .node_indices() [INFO] [stdout] 284 + .find(|&i| graph[i] == dest_weight.to_string()) [INFO] [stdout] 285 + .expect("Node not found"); [INFO] [stdout] 286 + graph.add_edge(n_index, to_node, tr.to_string()); [INFO] [stdout] 287 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/view/render.rs:305:37 [INFO] [stdout] | [INFO] [stdout] 305 | let all_states = get_all_states(&ginfo); [INFO] [stdout] | ^^^^^^ help: change this to: `ginfo` [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: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:19:7 [INFO] [stdout] | [INFO] [stdout] 19 | 2=>{return "FLOAT";} [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] 19 - 2=>{return "FLOAT";} [INFO] [stdout] 19 + 2=>{"FLOAT"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:20:8 [INFO] [stdout] | [INFO] [stdout] 20 | 10=>{return "EQUAL";} [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] 20 - 10=>{return "EQUAL";} [INFO] [stdout] 20 + 10=>{"EQUAL"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:15:7 [INFO] [stdout] | [INFO] [stdout] 15 | 0=>{return "INT";} [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] 15 - 0=>{return "INT";} [INFO] [stdout] 15 + 0=>{"INT"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:21:8 [INFO] [stdout] | [INFO] [stdout] 21 | 13=>{return "LPAREN";} [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] 21 - 13=>{return "LPAREN";} [INFO] [stdout] 21 + 13=>{"LPAREN"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:16:8 [INFO] [stdout] | [INFO] [stdout] 16 | 14=>{return "RPAREN";} [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] 16 - 14=>{return "RPAREN";} [INFO] [stdout] 16 + 14=>{"RPAREN"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:22:8 [INFO] [stdout] | [INFO] [stdout] 22 | 11=>{return "LBRACKET";} [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] 22 - 11=>{return "LBRACKET";} [INFO] [stdout] 22 + 11=>{"LBRACKET"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:17:8 [INFO] [stdout] | [INFO] [stdout] 17 | 18=>{return "SEMICOLON";} [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] 17 - 18=>{return "SEMICOLON";} [INFO] [stdout] 17 + 18=>{"SEMICOLON"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:23:7 [INFO] [stdout] | [INFO] [stdout] 23 | 1=>{return "STRING";} [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] 23 - 1=>{return "STRING";} [INFO] [stdout] 23 + 1=>{"STRING"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:18:7 [INFO] [stdout] | [INFO] [stdout] 18 | 6=>{return "WHILE";} [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] 18 - 6=>{return "WHILE";} [INFO] [stdout] 18 + 6=>{"WHILE"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:24:7 [INFO] [stdout] | [INFO] [stdout] 24 | 4=>{return "RETURN";} [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] 24 - 4=>{return "RETURN";} [INFO] [stdout] 24 + 4=>{"RETURN"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:19:7 [INFO] [stdout] | [INFO] [stdout] 19 | 2=>{return "FLOAT";} [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] 19 - 2=>{return "FLOAT";} [INFO] [stdout] 19 + 2=>{"FLOAT"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:25:7 [INFO] [stdout] | [INFO] [stdout] 25 | 9=>{return "ASSIGN";} [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] 25 - 9=>{return "ASSIGN";} [INFO] [stdout] 25 + 9=>{"ASSIGN"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:20:8 [INFO] [stdout] | [INFO] [stdout] 20 | 10=>{return "EQUAL";} [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] 20 - 10=>{return "EQUAL";} [INFO] [stdout] 20 + 10=>{"EQUAL"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:26:8 [INFO] [stdout] | [INFO] [stdout] 26 | 12=>{return "RBRACKET";} [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] 26 - 12=>{return "RBRACKET";} [INFO] [stdout] 26 + 12=>{"RBRACKET"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:27:7 [INFO] [stdout] | [INFO] [stdout] 27 | 5=>{return "IF";} [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] 27 - 5=>{return "IF";} [INFO] [stdout] 27 + 5=>{"IF"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:21:8 [INFO] [stdout] | [INFO] [stdout] 21 | 13=>{return "LPAREN";} [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] 21 - 13=>{return "LPAREN";} [INFO] [stdout] 21 + 13=>{"LPAREN"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:28:7 [INFO] [stdout] | [INFO] [stdout] 28 | 3=>{return "SCINOT";} [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] 28 - 3=>{return "SCINOT";} [INFO] [stdout] 28 + 3=>{"SCINOT"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:22:8 [INFO] [stdout] | [INFO] [stdout] 22 | 11=>{return "LBRACKET";} [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] 22 - 11=>{return "LBRACKET";} [INFO] [stdout] 22 + 11=>{"LBRACKET"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:29:8 [INFO] [stdout] | [INFO] [stdout] 29 | 17=>{return "INCREMENT";} [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] 29 - 17=>{return "INCREMENT";} [INFO] [stdout] 29 + 17=>{"INCREMENT"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:23:7 [INFO] [stdout] | [INFO] [stdout] 23 | 1=>{return "STRING";} [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] 23 - 1=>{return "STRING";} [INFO] [stdout] 23 + 1=>{"STRING"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:30:8 [INFO] [stdout] | [INFO] [stdout] 30 | 16=>{return "MINUS";} [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] 30 - 16=>{return "MINUS";} [INFO] [stdout] 30 + 16=>{"MINUS"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:24:7 [INFO] [stdout] | [INFO] [stdout] 24 | 4=>{return "RETURN";} [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] 24 - 4=>{return "RETURN";} [INFO] [stdout] 24 + 4=>{"RETURN"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:31:8 [INFO] [stdout] | [INFO] [stdout] 31 | 19=>{return "ID";} [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] 31 - 19=>{return "ID";} [INFO] [stdout] 31 + 19=>{"ID"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:25:7 [INFO] [stdout] | [INFO] [stdout] 25 | 9=>{return "ASSIGN";} [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] 25 - 9=>{return "ASSIGN";} [INFO] [stdout] 25 + 9=>{"ASSIGN"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:32:8 [INFO] [stdout] | [INFO] [stdout] 32 | 15=>{return "PLUS";} [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] 32 - 15=>{return "PLUS";} [INFO] [stdout] 32 + 15=>{"PLUS"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:26:8 [INFO] [stdout] | [INFO] [stdout] 26 | 12=>{return "RBRACKET";} [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] 26 - 12=>{return "RBRACKET";} [INFO] [stdout] 26 + 12=>{"RBRACKET"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:27:7 [INFO] [stdout] | [INFO] [stdout] 27 | 5=>{return "IF";} [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] 27 - 5=>{return "IF";} [INFO] [stdout] 27 + 5=>{"IF"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:33:8 [INFO] [stdout] | [INFO] [stdout] 33 | 20=>{return "WS";} [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] 33 - 20=>{return "WS";} [INFO] [stdout] 33 + 20=>{"WS"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:28:7 [INFO] [stdout] | [INFO] [stdout] 28 | 3=>{return "SCINOT";} [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] 28 - 3=>{return "SCINOT";} [INFO] [stdout] 28 + 3=>{"SCINOT"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:34:8 [INFO] [stdout] | [INFO] [stdout] 34 | _=> {return "";} [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] 34 - _=> {return "";} [INFO] [stdout] 34 + _=> {""} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:29:8 [INFO] [stdout] | [INFO] [stdout] 29 | 17=>{return "INCREMENT";} [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] 29 - 17=>{return "INCREMENT";} [INFO] [stdout] 29 + 17=>{"INCREMENT"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:30:8 [INFO] [stdout] | [INFO] [stdout] 30 | 16=>{return "MINUS";} [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] 30 - 16=>{return "MINUS";} [INFO] [stdout] 30 + 16=>{"MINUS"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:31:8 [INFO] [stdout] | [INFO] [stdout] 31 | 19=>{return "ID";} [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] 31 - 19=>{return "ID";} [INFO] [stdout] 31 + 19=>{"ID"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:32:8 [INFO] [stdout] | [INFO] [stdout] 32 | 15=>{return "PLUS";} [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] 32 - 15=>{return "PLUS";} [INFO] [stdout] 32 + 15=>{"PLUS"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:33:8 [INFO] [stdout] | [INFO] [stdout] 33 | 20=>{return "WS";} [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] 33 - 20=>{return "WS";} [INFO] [stdout] 33 + 20=>{"WS"} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/parser.rs:34:8 [INFO] [stdout] | [INFO] [stdout] 34 | _=> {return "";} [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] 34 - _=> {return "";} [INFO] [stdout] 34 + _=> {""} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/view/print_table.rs:74:20 [INFO] [stdout] | [INFO] [stdout] 74 | if !rslt.is_ok(){ [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `rslt.is_err()` [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: this boolean expression can be simplified [INFO] [stdout] --> src/view/print_table.rs:86:20 [INFO] [stdout] | [INFO] [stdout] 86 | if !rslt.is_ok(){ [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `rslt.is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `usize` is unnecessary [INFO] [stdout] --> src/view/print_table.rs:73:52 [INFO] [stdout] | [INFO] [stdout] 73 | let rslt = table.set_element(ac, j+1 as usize, i as usize); [INFO] [stdout] | ^^^^^^^^^^ help: try: `1_usize` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `usize` is unnecessary [INFO] [stdout] --> src/view/print_table.rs:85:65 [INFO] [stdout] | [INFO] [stdout] 85 | let rslt = table.set_element(&ac.to_string(), j+1 as usize, i as usize); [INFO] [stdout] | ^^^^^^^^^^ help: try: `1_usize` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `B` should have a snake case name [INFO] [stdout] --> src/syn/lalr_automata.rs:108:45 [INFO] [stdout] | [INFO] [stdout] 108 | if let Element::NonTerminal(B) = next_sym { [INFO] [stdout] | ^ help: convert the identifier to snake case: `b` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 12.31s [INFO] running `Command { std: "docker" "inspect" "7f3d998a2b95947c8ecff72f39fb4427e602ef83575adbb03c818a1c4a5497b0", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "7f3d998a2b95947c8ecff72f39fb4427e602ef83575adbb03c818a1c4a5497b0", kill_on_drop: false }` [INFO] [stdout] 7f3d998a2b95947c8ecff72f39fb4427e602ef83575adbb03c818a1c4a5497b0