[INFO] updating cached repository sakateka/plt [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/sakateka/plt [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/sakateka/plt" "work/ex/clippy-test-run/sources/stable/gh/sakateka/plt"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/sakateka/plt'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/sakateka/plt" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/sakateka/plt"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/sakateka/plt'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] b91ec0f513fbac31d9920a4741d8b0baa0d6ace5 [INFO] sha for GitHub repo sakateka/plt: b91ec0f513fbac31d9920a4741d8b0baa0d6ace5 [INFO] validating manifest of sakateka/plt on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of sakateka/plt on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing sakateka/plt [INFO] finished frobbing sakateka/plt [INFO] frobbed toml for sakateka/plt written to work/ex/clippy-test-run/sources/stable/gh/sakateka/plt/Cargo.toml [INFO] started frobbing sakateka/plt [INFO] finished frobbing sakateka/plt [INFO] frobbed toml for sakateka/plt written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/sakateka/plt/Cargo.toml [INFO] crate sakateka/plt has a lockfile. skipping [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting sakateka/plt against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-6/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/sakateka/plt:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 7771eb8c54d54efddc2bef225d505370786f46185ca7c7ad2d71a89ad36a3ad8 [INFO] running `"docker" "start" "-a" "7771eb8c54d54efddc2bef225d505370786f46185ca7c7ad2d71a89ad36a3ad8"` [INFO] [stderr] Checking itertools v0.7.7 [INFO] [stderr] Checking serde_yaml v0.7.3 [INFO] [stderr] Checking plt v5.4.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cfg.rs:18:13 [INFO] [stderr] | [INFO] [stderr] 18 | name: name, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cfg.rs:19:13 [INFO] [stderr] | [INFO] [stderr] 19 | sub_index: sub_index, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `sub_index` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/cfg.rs:181:29 [INFO] [stderr] | [INFO] [stderr] 181 | if let Err(e) = write!(f, "{} -> {}\n", self.start, join(start, " | ")) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_with_newline)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/cfg.rs:187:24 [INFO] [stderr] | [INFO] [stderr] 187 | return write!(f, "{} -> \n", self.start); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/cfg.rs:193:33 [INFO] [stderr] | [INFO] [stderr] 193 | if let Err(e) = write!(f, "{} -> {}\n", rule.left, join(val, " | ")) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cfg.rs:205:13 [INFO] [stderr] | [INFO] [stderr] 205 | start: start, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `start` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/dfa.rs:68:13 [INFO] [stderr] | [INFO] [stderr] 68 | is_start: is_start, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `is_start` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/dfa.rs:69:13 [INFO] [stderr] | [INFO] [stderr] 69 | is_accept: is_accept, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `is_accept` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/dfa.rs:70:13 [INFO] [stderr] | [INFO] [stderr] 70 | row: row, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `row` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/dfa.rs:156:13 [INFO] [stderr] | [INFO] [stderr] 156 | finish: finish, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `finish` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/dfa.rs:157:13 [INFO] [stderr] | [INFO] [stderr] 157 | jump: jump, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `jump` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/earley.rs:32:13 [INFO] [stderr] | [INFO] [stderr] 32 | rule: rule, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `rule` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/earley.rs:34:13 [INFO] [stderr] | [INFO] [stderr] 34 | origin: origin, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `origin` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/earley.rs:79:13 [INFO] [stderr] | [INFO] [stderr] 79 | token: token, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `token` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/earley.rs:80:13 [INFO] [stderr] | [INFO] [stderr] 80 | index: index, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `index` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/earley.rs:85:13 [INFO] [stderr] | [INFO] [stderr] 85 | states: states, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `states` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/earley.rs:86:13 [INFO] [stderr] | [INFO] [stderr] 86 | token: token, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `token` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/earley.rs:87:13 [INFO] [stderr] | [INFO] [stderr] 87 | index: index, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `index` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/earley.rs:205:17 [INFO] [stderr] | [INFO] [stderr] 205 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::println_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/generator.rs:35:13 [INFO] [stderr] | [INFO] [stderr] 35 | write!(f, "{}\n", GeneratedItem(item)).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/generator.rs:59:13 [INFO] [stderr] | [INFO] [stderr] 59 | left: left, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `left` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/generator.rs:60:13 [INFO] [stderr] | [INFO] [stderr] 60 | rules: rules, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `rules` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/generator.rs:61:13 [INFO] [stderr] | [INFO] [stderr] 61 | queue: queue, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `queue` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pda.rs:81:13 [INFO] [stderr] | [INFO] [stderr] 81 | stack: stack, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `stack` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pda.rs:136:13 [INFO] [stderr] | [INFO] [stderr] 136 | character: character, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `character` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pda.rs:138:13 [INFO] [stderr] | [INFO] [stderr] 138 | pop_character: pop_character, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `pop_character` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pda.rs:139:13 [INFO] [stderr] | [INFO] [stderr] 139 | push_characters: push_characters, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `push_characters` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pda.rs:173:24 [INFO] [stderr] | [INFO] [stderr] 173 | DPDARulebook { rules: rules } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `rules` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pda.rs:225:13 [INFO] [stderr] | [INFO] [stderr] 225 | rulebook: rulebook, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `rulebook` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pda.rs:226:13 [INFO] [stderr] | [INFO] [stderr] 226 | accept_by_empty_stack: accept_by_empty_stack, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `accept_by_empty_stack` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pda.rs:227:13 [INFO] [stderr] | [INFO] [stderr] 227 | traversed_path: traversed_path, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `traversed_path` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pda.rs:317:13 [INFO] [stderr] | [INFO] [stderr] 317 | rulebook: rulebook, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `rulebook` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pda.rs:344:13 [INFO] [stderr] | [INFO] [stderr] 344 | eaten_part: eaten_part, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `eaten_part` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pdt.rs:91:13 [INFO] [stderr] | [INFO] [stderr] 91 | stack: stack, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `stack` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pdt.rs:145:13 [INFO] [stderr] | [INFO] [stderr] 145 | character: character, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `character` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pdt.rs:148:13 [INFO] [stderr] | [INFO] [stderr] 148 | pop_character: pop_character, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `pop_character` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pdt.rs:149:13 [INFO] [stderr] | [INFO] [stderr] 149 | push_characters: push_characters, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `push_characters` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pdt.rs:165:13 [INFO] [stderr] | [INFO] [stderr] 165 | translated: translated, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `translated` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pdt.rs:188:24 [INFO] [stderr] | [INFO] [stderr] 188 | DPDTRulebook { rules: rules } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `rules` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pdt.rs:238:13 [INFO] [stderr] | [INFO] [stderr] 238 | rulebook: rulebook, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `rulebook` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pdt.rs:239:13 [INFO] [stderr] | [INFO] [stderr] 239 | accept_by_empty_stack: accept_by_empty_stack, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `accept_by_empty_stack` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pdt.rs:328:13 [INFO] [stderr] | [INFO] [stderr] 328 | rulebook: rulebook, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `rulebook` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pdt.rs:354:13 [INFO] [stderr] | [INFO] [stderr] 354 | eaten_part: eaten_part, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `eaten_part` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cfg.rs:18:13 [INFO] [stderr] | [INFO] [stderr] 18 | name: name, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cfg.rs:19:13 [INFO] [stderr] | [INFO] [stderr] 19 | sub_index: sub_index, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `sub_index` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/cfg.rs:181:29 [INFO] [stderr] | [INFO] [stderr] 181 | if let Err(e) = write!(f, "{} -> {}\n", self.start, join(start, " | ")) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_with_newline)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/cfg.rs:187:24 [INFO] [stderr] | [INFO] [stderr] 187 | return write!(f, "{} -> \n", self.start); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/cfg.rs:193:33 [INFO] [stderr] | [INFO] [stderr] 193 | if let Err(e) = write!(f, "{} -> {}\n", rule.left, join(val, " | ")) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cfg.rs:205:13 [INFO] [stderr] | [INFO] [stderr] 205 | start: start, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `start` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/dfa.rs:68:13 [INFO] [stderr] | [INFO] [stderr] 68 | is_start: is_start, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `is_start` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/dfa.rs:69:13 [INFO] [stderr] | [INFO] [stderr] 69 | is_accept: is_accept, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `is_accept` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/dfa.rs:70:13 [INFO] [stderr] | [INFO] [stderr] 70 | row: row, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `row` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/dfa.rs:156:13 [INFO] [stderr] | [INFO] [stderr] 156 | finish: finish, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `finish` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/dfa.rs:157:13 [INFO] [stderr] | [INFO] [stderr] 157 | jump: jump, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `jump` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/earley.rs:32:13 [INFO] [stderr] | [INFO] [stderr] 32 | rule: rule, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `rule` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/earley.rs:34:13 [INFO] [stderr] | [INFO] [stderr] 34 | origin: origin, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `origin` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/earley.rs:79:13 [INFO] [stderr] | [INFO] [stderr] 79 | token: token, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `token` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/earley.rs:80:13 [INFO] [stderr] | [INFO] [stderr] 80 | index: index, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `index` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/earley.rs:85:13 [INFO] [stderr] | [INFO] [stderr] 85 | states: states, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `states` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/earley.rs:86:13 [INFO] [stderr] | [INFO] [stderr] 86 | token: token, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `token` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/earley.rs:87:13 [INFO] [stderr] | [INFO] [stderr] 87 | index: index, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `index` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/earley.rs:205:17 [INFO] [stderr] | [INFO] [stderr] 205 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::println_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/generator.rs:35:13 [INFO] [stderr] | [INFO] [stderr] 35 | write!(f, "{}\n", GeneratedItem(item)).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/generator.rs:59:13 [INFO] [stderr] | [INFO] [stderr] 59 | left: left, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `left` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/generator.rs:60:13 [INFO] [stderr] | [INFO] [stderr] 60 | rules: rules, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `rules` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/generator.rs:61:13 [INFO] [stderr] | [INFO] [stderr] 61 | queue: queue, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `queue` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pda.rs:81:13 [INFO] [stderr] | [INFO] [stderr] 81 | stack: stack, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `stack` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pda.rs:136:13 [INFO] [stderr] | [INFO] [stderr] 136 | character: character, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `character` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pda.rs:138:13 [INFO] [stderr] | [INFO] [stderr] 138 | pop_character: pop_character, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `pop_character` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pda.rs:139:13 [INFO] [stderr] | [INFO] [stderr] 139 | push_characters: push_characters, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `push_characters` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pda.rs:173:24 [INFO] [stderr] | [INFO] [stderr] 173 | DPDARulebook { rules: rules } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `rules` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pda.rs:225:13 [INFO] [stderr] | [INFO] [stderr] 225 | rulebook: rulebook, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `rulebook` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pda.rs:226:13 [INFO] [stderr] | [INFO] [stderr] 226 | accept_by_empty_stack: accept_by_empty_stack, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `accept_by_empty_stack` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pda.rs:227:13 [INFO] [stderr] | [INFO] [stderr] 227 | traversed_path: traversed_path, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `traversed_path` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pda.rs:317:13 [INFO] [stderr] | [INFO] [stderr] 317 | rulebook: rulebook, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `rulebook` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pda.rs:344:13 [INFO] [stderr] | [INFO] [stderr] 344 | eaten_part: eaten_part, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `eaten_part` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pdt.rs:91:13 [INFO] [stderr] | [INFO] [stderr] 91 | stack: stack, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `stack` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pdt.rs:145:13 [INFO] [stderr] | [INFO] [stderr] 145 | character: character, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `character` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pdt.rs:148:13 [INFO] [stderr] | [INFO] [stderr] 148 | pop_character: pop_character, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `pop_character` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pdt.rs:149:13 [INFO] [stderr] | [INFO] [stderr] 149 | push_characters: push_characters, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `push_characters` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pdt.rs:165:13 [INFO] [stderr] | [INFO] [stderr] 165 | translated: translated, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `translated` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pdt.rs:188:24 [INFO] [stderr] | [INFO] [stderr] 188 | DPDTRulebook { rules: rules } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `rules` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pdt.rs:238:13 [INFO] [stderr] | [INFO] [stderr] 238 | rulebook: rulebook, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `rulebook` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pdt.rs:239:13 [INFO] [stderr] | [INFO] [stderr] 239 | accept_by_empty_stack: accept_by_empty_stack, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `accept_by_empty_stack` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pdt.rs:328:13 [INFO] [stderr] | [INFO] [stderr] 328 | rulebook: rulebook, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `rulebook` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pdt.rs:354:13 [INFO] [stderr] | [INFO] [stderr] 354 | eaten_part: eaten_part, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `eaten_part` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/cfg.rs:184:16 [INFO] [stderr] | [INFO] [stderr] 184 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 185 | | if rules.is_empty() { [INFO] [stderr] 186 | | eprintln!("Empty rule set: {:?}", self); [INFO] [stderr] 187 | | return write!(f, "{} -> \n", self.start); [INFO] [stderr] 188 | | } [INFO] [stderr] 189 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 184 | } else if rules.is_empty() { [INFO] [stderr] 185 | eprintln!("Empty rule set: {:?}", self); [INFO] [stderr] 186 | return write!(f, "{} -> \n", self.start); [INFO] [stderr] 187 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/cfg.rs:359:9 [INFO] [stderr] | [INFO] [stderr] 359 | return nullable; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: remove `return` as shown: `nullable` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/cfg.rs:346:17 [INFO] [stderr] | [INFO] [stderr] 346 | / if rule.right.is_empty() || rule.right.iter().fold(true, |acc, x| { [INFO] [stderr] 347 | | if !acc { [INFO] [stderr] 348 | | acc [INFO] [stderr] 349 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 355 | | } [INFO] [stderr] 356 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 346 | if (rule.right.is_empty() || rule.right.iter().fold(true, |acc, x| { [INFO] [stderr] 347 | if !acc { [INFO] [stderr] 348 | acc [INFO] [stderr] 349 | } else { [INFO] [stderr] 350 | x.is_nonterminal() && nullable.contains(x.as_nonterminal().unwrap()) [INFO] [stderr] 351 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/cfg.rs:396:33 [INFO] [stderr] | [INFO] [stderr] 396 | / if [INFO] [stderr] 397 | | // skip new epsilon rule [INFO] [stderr] 398 | | !new.right.is_empty() [INFO] [stderr] 399 | | // skip new unit rule [INFO] [stderr] ... | [INFO] [stderr] 406 | | } [INFO] [stderr] 407 | | } [INFO] [stderr] | |_________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 396 | if !new.right.is_empty() [INFO] [stderr] 397 | // skip new unit rule [INFO] [stderr] 398 | && !(new.right.len() == 1 && new.right[0].is_nonterminal() [INFO] [stderr] 399 | && new.right[0].as_nonterminal().unwrap() == &new.left) && new_rules.insert(new.clone()) { [INFO] [stderr] 400 | changed = true; [INFO] [stderr] 401 | source2.insert(new); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/cfg.rs:443:21 [INFO] [stderr] | [INFO] [stderr] 443 | / if rule.right.len() == 1 && rule.right[0].is_nonterminal() { [INFO] [stderr] 444 | | if set.contains(&rule.left) { [INFO] [stderr] 445 | | // add rule.right into unit_sets[rule.left]{} set [INFO] [stderr] 446 | | let right = rule.right[0].as_nonterminal().unwrap(); [INFO] [stderr] ... | [INFO] [stderr] 450 | | } [INFO] [stderr] 451 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 443 | if rule.right.len() == 1 && rule.right[0].is_nonterminal() && set.contains(&rule.left) { [INFO] [stderr] 444 | // add rule.right into unit_sets[rule.left]{} set [INFO] [stderr] 445 | let right = rule.right[0].as_nonterminal().unwrap(); [INFO] [stderr] 446 | if set.insert(right.clone()) { [INFO] [stderr] 447 | changed = true [INFO] [stderr] 448 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/cyk.rs:89:13 [INFO] [stderr] | [INFO] [stderr] 89 | / if rule.left == self.cfg.start { [INFO] [stderr] 90 | | if rule.right.len() == 0 { [INFO] [stderr] 91 | | return Some(rule); [INFO] [stderr] 92 | | } [INFO] [stderr] 93 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 89 | if rule.left == self.cfg.start && rule.right.len() == 0 { [INFO] [stderr] 90 | return Some(rule); [INFO] [stderr] 91 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/cyk.rs:140:37 [INFO] [stderr] | [INFO] [stderr] 140 | / if rule.right[0].is_eq_nonterm(n1) [INFO] [stderr] 141 | | && rule.right[1].is_eq_nonterm(n2) [INFO] [stderr] 142 | | { [INFO] [stderr] 143 | | if table[i][j].insert(&rule.left) { [INFO] [stderr] 144 | | changed = true; [INFO] [stderr] 145 | | } [INFO] [stderr] 146 | | } [INFO] [stderr] | |_____________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 140 | if rule.right[0].is_eq_nonterm(n1) [INFO] [stderr] 141 | && rule.right[1].is_eq_nonterm(n2) && table[i][j].insert(&rule.left) { [INFO] [stderr] 142 | changed = true; [INFO] [stderr] 143 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/earley.rs:142:28 [INFO] [stderr] | [INFO] [stderr] 142 | } else { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 143 | | if state.nonterminal_here() { [INFO] [stderr] 144 | | self.predictor(state, idx, &mut chart[idx]); [INFO] [stderr] 145 | | } else if idx < chart_len - 1 { [INFO] [stderr] 146 | | self.scaner(state, &mut chart[idx + 1]); [INFO] [stderr] 147 | | } [INFO] [stderr] 148 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 142 | } else if state.nonterminal_here() { [INFO] [stderr] 143 | self.predictor(state, idx, &mut chart[idx]); [INFO] [stderr] 144 | } else if idx < chart_len - 1 { [INFO] [stderr] 145 | self.scaner(state, &mut chart[idx + 1]); [INFO] [stderr] 146 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/generator.rs:107:21 [INFO] [stderr] | [INFO] [stderr] 107 | / if new_seq.len() <= self.max_len { [INFO] [stderr] 108 | | if !self.visited.contains(&new_seq) { [INFO] [stderr] 109 | | self.visited.insert(new_seq.clone()); [INFO] [stderr] 110 | | self.queue.insert(new_seq); [INFO] [stderr] 111 | | } [INFO] [stderr] 112 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 107 | if new_seq.len() <= self.max_len && !self.visited.contains(&new_seq) { [INFO] [stderr] 108 | self.visited.insert(new_seq.clone()); [INFO] [stderr] 109 | self.queue.insert(new_seq); [INFO] [stderr] 110 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/main.rs:173:20 [INFO] [stderr] | [INFO] [stderr] 173 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 174 | | if cyk.accepts(&text) { [INFO] [stderr] 175 | | println!("- ACCEPT"); [INFO] [stderr] 176 | | } else { [INFO] [stderr] 177 | | println!("- REFUSE"); [INFO] [stderr] 178 | | } [INFO] [stderr] 179 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 173 | } else if cyk.accepts(&text) { [INFO] [stderr] 174 | println!("- ACCEPT"); [INFO] [stderr] 175 | } else { [INFO] [stderr] 176 | println!("- REFUSE"); [INFO] [stderr] 177 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/cfg.rs:184:16 [INFO] [stderr] | [INFO] [stderr] 184 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 185 | | if rules.is_empty() { [INFO] [stderr] 186 | | eprintln!("Empty rule set: {:?}", self); [INFO] [stderr] 187 | | return write!(f, "{} -> \n", self.start); [INFO] [stderr] 188 | | } [INFO] [stderr] 189 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 184 | } else if rules.is_empty() { [INFO] [stderr] 185 | eprintln!("Empty rule set: {:?}", self); [INFO] [stderr] 186 | return write!(f, "{} -> \n", self.start); [INFO] [stderr] 187 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/cfg.rs:359:9 [INFO] [stderr] | [INFO] [stderr] 359 | return nullable; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: remove `return` as shown: `nullable` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/cfg.rs:346:17 [INFO] [stderr] | [INFO] [stderr] 346 | / if rule.right.is_empty() || rule.right.iter().fold(true, |acc, x| { [INFO] [stderr] 347 | | if !acc { [INFO] [stderr] 348 | | acc [INFO] [stderr] 349 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 355 | | } [INFO] [stderr] 356 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 346 | if (rule.right.is_empty() || rule.right.iter().fold(true, |acc, x| { [INFO] [stderr] 347 | if !acc { [INFO] [stderr] 348 | acc [INFO] [stderr] 349 | } else { [INFO] [stderr] 350 | x.is_nonterminal() && nullable.contains(x.as_nonterminal().unwrap()) [INFO] [stderr] 351 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/cfg.rs:396:33 [INFO] [stderr] | [INFO] [stderr] 396 | / if [INFO] [stderr] 397 | | // skip new epsilon rule [INFO] [stderr] 398 | | !new.right.is_empty() [INFO] [stderr] 399 | | // skip new unit rule [INFO] [stderr] ... | [INFO] [stderr] 406 | | } [INFO] [stderr] 407 | | } [INFO] [stderr] | |_________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 396 | if !new.right.is_empty() [INFO] [stderr] 397 | // skip new unit rule [INFO] [stderr] 398 | && !(new.right.len() == 1 && new.right[0].is_nonterminal() [INFO] [stderr] 399 | && new.right[0].as_nonterminal().unwrap() == &new.left) && new_rules.insert(new.clone()) { [INFO] [stderr] 400 | changed = true; [INFO] [stderr] 401 | source2.insert(new); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/cfg.rs:443:21 [INFO] [stderr] | [INFO] [stderr] 443 | / if rule.right.len() == 1 && rule.right[0].is_nonterminal() { [INFO] [stderr] 444 | | if set.contains(&rule.left) { [INFO] [stderr] 445 | | // add rule.right into unit_sets[rule.left]{} set [INFO] [stderr] 446 | | let right = rule.right[0].as_nonterminal().unwrap(); [INFO] [stderr] ... | [INFO] [stderr] 450 | | } [INFO] [stderr] 451 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 443 | if rule.right.len() == 1 && rule.right[0].is_nonterminal() && set.contains(&rule.left) { [INFO] [stderr] 444 | // add rule.right into unit_sets[rule.left]{} set [INFO] [stderr] 445 | let right = rule.right[0].as_nonterminal().unwrap(); [INFO] [stderr] 446 | if set.insert(right.clone()) { [INFO] [stderr] 447 | changed = true [INFO] [stderr] 448 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/cyk.rs:89:13 [INFO] [stderr] | [INFO] [stderr] 89 | / if rule.left == self.cfg.start { [INFO] [stderr] 90 | | if rule.right.len() == 0 { [INFO] [stderr] 91 | | return Some(rule); [INFO] [stderr] 92 | | } [INFO] [stderr] 93 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 89 | if rule.left == self.cfg.start && rule.right.len() == 0 { [INFO] [stderr] 90 | return Some(rule); [INFO] [stderr] 91 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/cyk.rs:140:37 [INFO] [stderr] | [INFO] [stderr] 140 | / if rule.right[0].is_eq_nonterm(n1) [INFO] [stderr] 141 | | && rule.right[1].is_eq_nonterm(n2) [INFO] [stderr] 142 | | { [INFO] [stderr] 143 | | if table[i][j].insert(&rule.left) { [INFO] [stderr] 144 | | changed = true; [INFO] [stderr] 145 | | } [INFO] [stderr] 146 | | } [INFO] [stderr] | |_____________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 140 | if rule.right[0].is_eq_nonterm(n1) [INFO] [stderr] 141 | && rule.right[1].is_eq_nonterm(n2) && table[i][j].insert(&rule.left) { [INFO] [stderr] 142 | changed = true; [INFO] [stderr] 143 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/earley.rs:142:28 [INFO] [stderr] | [INFO] [stderr] 142 | } else { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 143 | | if state.nonterminal_here() { [INFO] [stderr] 144 | | self.predictor(state, idx, &mut chart[idx]); [INFO] [stderr] 145 | | } else if idx < chart_len - 1 { [INFO] [stderr] 146 | | self.scaner(state, &mut chart[idx + 1]); [INFO] [stderr] 147 | | } [INFO] [stderr] 148 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 142 | } else if state.nonterminal_here() { [INFO] [stderr] 143 | self.predictor(state, idx, &mut chart[idx]); [INFO] [stderr] 144 | } else if idx < chart_len - 1 { [INFO] [stderr] 145 | self.scaner(state, &mut chart[idx + 1]); [INFO] [stderr] 146 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/generator.rs:107:21 [INFO] [stderr] | [INFO] [stderr] 107 | / if new_seq.len() <= self.max_len { [INFO] [stderr] 108 | | if !self.visited.contains(&new_seq) { [INFO] [stderr] 109 | | self.visited.insert(new_seq.clone()); [INFO] [stderr] 110 | | self.queue.insert(new_seq); [INFO] [stderr] 111 | | } [INFO] [stderr] 112 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 107 | if new_seq.len() <= self.max_len && !self.visited.contains(&new_seq) { [INFO] [stderr] 108 | self.visited.insert(new_seq.clone()); [INFO] [stderr] 109 | self.queue.insert(new_seq); [INFO] [stderr] 110 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/main.rs:173:20 [INFO] [stderr] | [INFO] [stderr] 173 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 174 | | if cyk.accepts(&text) { [INFO] [stderr] 175 | | println!("- ACCEPT"); [INFO] [stderr] 176 | | } else { [INFO] [stderr] 177 | | println!("- REFUSE"); [INFO] [stderr] 178 | | } [INFO] [stderr] 179 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 173 | } else if cyk.accepts(&text) { [INFO] [stderr] 174 | println!("- ACCEPT"); [INFO] [stderr] 175 | } else { [INFO] [stderr] 176 | println!("- REFUSE"); [INFO] [stderr] 177 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused variable: `rules` [INFO] [stderr] --> src/sdt.rs:34:13 [INFO] [stderr] | [INFO] [stderr] 34 | let rules: SDTRules = match serde_yaml::from_reader(r) { [INFO] [stderr] | ^^^^^ help: consider using `_rules` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `rules` [INFO] [stderr] --> src/sdt.rs:34:13 [INFO] [stderr] | [INFO] [stderr] 34 | let rules: SDTRules = match serde_yaml::from_reader(r) { [INFO] [stderr] | ^^^^^ help: consider using `_rules` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: struct is never constructed: `SDT` [INFO] [stderr] --> src/sdt.rs:20:1 [INFO] [stderr] | [INFO] [stderr] 20 | pub struct SDT { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `load` [INFO] [stderr] --> src/sdt.rs:25:5 [INFO] [stderr] | [INFO] [stderr] 25 | pub fn load(input_path: &str) -> io::Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `load_from_reader` [INFO] [stderr] --> src/sdt.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | / pub fn load_from_reader(r: R) -> io::Result [INFO] [stderr] 31 | | where [INFO] [stderr] 32 | | R: ::std::marker::Sized, [INFO] [stderr] 33 | | { [INFO] [stderr] ... | [INFO] [stderr] 40 | | }) [INFO] [stderr] 41 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cfg.rs:99:9 [INFO] [stderr] | [INFO] [stderr] 99 | / match self { [INFO] [stderr] 100 | | &Symbol::T(_) => false, [INFO] [stderr] 101 | | &Symbol::N(_) => true, [INFO] [stderr] 102 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 99 | match *self { [INFO] [stderr] 100 | Symbol::T(_) => false, [INFO] [stderr] 101 | Symbol::N(_) => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cfg.rs:108:9 [INFO] [stderr] | [INFO] [stderr] 108 | / match self { [INFO] [stderr] 109 | | &Symbol::T(ref t) => t.is_a(c), [INFO] [stderr] 110 | | &Symbol::N(_) => false, [INFO] [stderr] 111 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 108 | match *self { [INFO] [stderr] 109 | Symbol::T(ref t) => t.is_a(c), [INFO] [stderr] 110 | Symbol::N(_) => false, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cfg.rs:115:9 [INFO] [stderr] | [INFO] [stderr] 115 | / match self { [INFO] [stderr] 116 | | &Symbol::T(_) => false, [INFO] [stderr] 117 | | &Symbol::N(ref n) => n == other, [INFO] [stderr] 118 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 115 | match *self { [INFO] [stderr] 116 | Symbol::T(_) => false, [INFO] [stderr] 117 | Symbol::N(ref n) => n == other, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cfg.rs:122:9 [INFO] [stderr] | [INFO] [stderr] 122 | / match self { [INFO] [stderr] 123 | | &Symbol::T(_) => None, [INFO] [stderr] 124 | | &Symbol::N(ref x) => Some(&x), [INFO] [stderr] 125 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 122 | match *self { [INFO] [stderr] 123 | Symbol::T(_) => None, [INFO] [stderr] 124 | Symbol::N(ref x) => Some(&x), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cfg.rs:135:9 [INFO] [stderr] | [INFO] [stderr] 135 | / match self { [INFO] [stderr] 136 | | &Symbol::T(ref t) => write!(f, "{}", t), [INFO] [stderr] 137 | | &Symbol::N(ref n) => write!(f, "{}", n), [INFO] [stderr] 138 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 135 | match *self { [INFO] [stderr] 136 | Symbol::T(ref t) => write!(f, "{}", t), [INFO] [stderr] 137 | Symbol::N(ref n) => write!(f, "{}", n), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/cfg.rs:270:29 [INFO] [stderr] | [INFO] [stderr] 270 | format!("Unexpected symbol '>'"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Unexpected symbol '>'".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/cfg.rs:279:29 [INFO] [stderr] | [INFO] [stderr] 279 | format!("Unexpected symbol '<'"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Unexpected symbol '<'".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/cfg.rs:290:16 [INFO] [stderr] | [INFO] [stderr] 290 | if read_long_name == true { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `read_long_name` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::bool_comparison)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/cfg.rs:293:21 [INFO] [stderr] | [INFO] [stderr] 293 | format!("Unterminated Nonterminal symbol name, expect '>'"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Unterminated Nonterminal symbol name, expect '>'".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: in an 'if' condition, avoid complex blocks or closures with blocks; instead, move the block or closure higher and bind it with a 'let' [INFO] [stderr] --> src/cfg.rs:346:83 [INFO] [stderr] | [INFO] [stderr] 346 | if rule.right.is_empty() || rule.right.iter().fold(true, |acc, x| { [INFO] [stderr] | ___________________________________________________________________________________^ [INFO] [stderr] 347 | | if !acc { [INFO] [stderr] 348 | | acc [INFO] [stderr] 349 | | } else { [INFO] [stderr] 350 | | x.is_nonterminal() && nullable.contains(x.as_nonterminal().unwrap()) [INFO] [stderr] 351 | | } [INFO] [stderr] 352 | | }) { [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::block_in_if_condition_stmt)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#block_in_if_condition_stmt [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/cfg.rs:398:33 [INFO] [stderr] | [INFO] [stderr] 398 | / !new.right.is_empty() [INFO] [stderr] 399 | | // skip new unit rule [INFO] [stderr] 400 | | && !(new.right.len() == 1 && new.right[0].is_nonterminal() [INFO] [stderr] 401 | | && new.right[0].as_nonterminal().unwrap() == &new.left) [INFO] [stderr] | |___________________________________________________________________________________________^ help: try: `!(new.right.len() == 1 && new.right[0].is_nonterminal() && new.right[0].as_nonterminal().unwrap() == &new.left || new.right.is_empty())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::nonminimal_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/cfg.rs:590:18 [INFO] [stderr] | [INFO] [stderr] 590 | Some(format!("Epsilon rules are not excluded from grammar")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Epsilon rules are not excluded from grammar".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/cfg.rs:595:18 [INFO] [stderr] | [INFO] [stderr] 595 | Some(format!("There are Unit rules in the grammar")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"There are Unit rules in the grammar".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/cfg.rs:601:18 [INFO] [stderr] | [INFO] [stderr] 601 | Some(format!( [INFO] [stderr] | __________________^ [INFO] [stderr] 602 | | "There are non-generating characters in the grammar" [INFO] [stderr] 603 | | )) [INFO] [stderr] | |_____________^ help: consider using .to_string(): `"There are non-generating characters in the grammar".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/cfg.rs:610:18 [INFO] [stderr] | [INFO] [stderr] 610 | Some(format!("There are unreachable characters in the grammar")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"There are unreachable characters in the grammar".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/cfg.rs:659:76 [INFO] [stderr] | [INFO] [stderr] 659 | } else if rule.right.len() == 1 && rule.right[0].is_terminal() { [INFO] [stderr] | ____________________________________________________________________________^ [INFO] [stderr] 660 | | productions.insert(rule); [INFO] [stderr] 661 | | } else { [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> src/cfg.rs:657:62 [INFO] [stderr] | [INFO] [stderr] 657 | if rule.right.iter().all(|x| x.is_nonterminal()) { [INFO] [stderr] | ______________________________________________________________^ [INFO] [stderr] 658 | | productions.insert(rule); [INFO] [stderr] 659 | | } else if rule.right.len() == 1 && rule.right[0].is_terminal() { [INFO] [stderr] | |_____________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] warning: use of `or_insert` followed by a function call [INFO] [stderr] --> src/cyk.rs:48:18 [INFO] [stderr] | [INFO] [stderr] 48 | .or_insert(HashSet::new()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(HashSet::new)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/cyk.rs:90:20 [INFO] [stderr] | [INFO] [stderr] 90 | if rule.right.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `rule.right.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: use of `or_insert` followed by a function call [INFO] [stderr] --> src/cyk.rs:115:18 [INFO] [stderr] | [INFO] [stderr] 115 | .or_insert(HashSet::new()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(HashSet::new)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/cyk.rs:193:16 [INFO] [stderr] | [INFO] [stderr] 193 | chars: &Vec, [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[char]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/dfa.rs:176:50 [INFO] [stderr] | [INFO] [stderr] 176 | if l.is_empty() || l.starts_with("#") { [INFO] [stderr] | ^^^ help: try using a char instead: `'#'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/earley.rs:171:25 [INFO] [stderr] | [INFO] [stderr] 171 | .filter(|r| match state.symbol().unwrap() { [INFO] [stderr] | _________________________^ [INFO] [stderr] 172 | | &cfg::Symbol::N(ref n) => n == &r.left, [INFO] [stderr] 173 | | &cfg::Symbol::T(_) => false, [INFO] [stderr] 174 | | }) [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 171 | .filter(|r| match *state.symbol().unwrap() { [INFO] [stderr] 172 | cfg::Symbol::N(ref n) => n == &r.left, [INFO] [stderr] 173 | cfg::Symbol::T(_) => false, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/earley.rs:186:32 [INFO] [stderr] | [INFO] [stderr] 186 | pub fn print(&self, chart: &Vec>) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: change this to: `&[Column<'er>]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] error: for loop over `rules.get(&cfg::Symbol::N(grammar.start))`, which is an `Option`. This is more readably written as an `if let` statement. [INFO] [stderr] --> src/generator.rs:53:22 [INFO] [stderr] | [INFO] [stderr] 53 | for cases in rules.get(&cfg::Symbol::N(grammar.start)) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::for_loop_over_option)] on by default [INFO] [stderr] = help: consider replacing `for cases in rules.get(&cfg::Symbol::N(grammar.start))` with `if let Some(cases) = rules.get(&cfg::Symbol::N(grammar.start))` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_loop_over_option [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pda.rs:27:13 [INFO] [stderr] | [INFO] [stderr] 27 | / match self { [INFO] [stderr] 28 | | &PDAState::State(num) => format!("{}", num), [INFO] [stderr] 29 | | &PDAState::Stuck => format!("STUCK"), [INFO] [stderr] 30 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 27 | match *self { [INFO] [stderr] 28 | PDAState::State(num) => format!("{}", num), [INFO] [stderr] 29 | PDAState::Stuck => format!("STUCK"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/pda.rs:29:37 [INFO] [stderr] | [INFO] [stderr] 29 | &PDAState::Stuck => format!("STUCK"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"STUCK".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/pda.rs:53:29 [INFO] [stderr] | [INFO] [stderr] 53 | if value <= ::std::u32::MAX as u64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(::std::u32::MAX)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/pda.rs:149:20 [INFO] [stderr] | [INFO] [stderr] 149 | state: self.next_state.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.next_state` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: called `cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable [INFO] [stderr] --> src/pda.rs:353:13 [INFO] [stderr] | [INFO] [stderr] 353 | self.accept_states.iter().cloned().collect(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::iter_cloned_collect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pdt.rs:27:13 [INFO] [stderr] | [INFO] [stderr] 27 | / match self { [INFO] [stderr] 28 | | &PDTState::State(num) => format!("{}", num), [INFO] [stderr] 29 | | &PDTState::Stuck => format!("STUCK"), [INFO] [stderr] 30 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 27 | match *self { [INFO] [stderr] 28 | PDTState::State(num) => format!("{}", num), [INFO] [stderr] 29 | PDTState::Stuck => format!("STUCK"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/pdt.rs:29:37 [INFO] [stderr] | [INFO] [stderr] 29 | &PDTState::Stuck => format!("STUCK"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"STUCK".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/pdt.rs:53:29 [INFO] [stderr] | [INFO] [stderr] 53 | if value <= ::std::u32::MAX as u64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(::std::u32::MAX)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/pdt.rs:163:20 [INFO] [stderr] | [INFO] [stderr] 163 | state: self.next_state.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.next_state` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: called `cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable [INFO] [stderr] --> src/pdt.rs:363:13 [INFO] [stderr] | [INFO] [stderr] 363 | self.accept_states.iter().cloned().collect(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 37 [INFO] [stderr] --> src/main.rs:54:1 [INFO] [stderr] | [INFO] [stderr] 54 | / fn main() { [INFO] [stderr] 55 | | let app = args::build_app("plt"); [INFO] [stderr] 56 | | [INFO] [stderr] 57 | | // [INFO] [stderr] ... | [INFO] [stderr] 388 | | } [INFO] [stderr] 389 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/main.rs:71:9 [INFO] [stderr] | [INFO] [stderr] 71 | / let mut min: u32 = 0; [INFO] [stderr] 72 | | if matches.is_present("len-min") { [INFO] [stderr] 73 | | min = value_t_or_exit!(matches, "len-min", u32); [INFO] [stderr] 74 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] help: it is more idiomatic to write [INFO] [stderr] | [INFO] [stderr] 71 | let min = if matches.is_present("len-min") { if let Some ( v ) = $ m . value_of ( $ v ) { [INFO] [stderr] 72 | match v . parse :: < $ t > ( ) { [INFO] [stderr] 73 | Ok ( val ) => val , Err ( _ ) => :: clap :: Error :: value_validation_auto ( [INFO] [stderr] 74 | format ! ( "The argument '{}' isn't a valid value" , v ) ) . exit ( ) , } } [INFO] [stderr] 75 | else { :: clap :: Error :: argument_not_found_auto ( $ v ) . exit ( ) } } else { 0 }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/main.rs:75:9 [INFO] [stderr] | [INFO] [stderr] 75 | / let mut max: u32 = 8; [INFO] [stderr] 76 | | if matches.is_present("len-max") { [INFO] [stderr] 77 | | max = value_t_or_exit!(matches, "len-max", u32); [INFO] [stderr] 78 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] help: it is more idiomatic to write [INFO] [stderr] | [INFO] [stderr] 75 | let max = if matches.is_present("len-max") { if let Some ( v ) = $ m . value_of ( $ v ) { [INFO] [stderr] 76 | match v . parse :: < $ t > ( ) { [INFO] [stderr] 77 | Ok ( val ) => val , Err ( _ ) => :: clap :: Error :: value_validation_auto ( [INFO] [stderr] 78 | format ! ( "The argument '{}' isn't a valid value" , v ) ) . exit ( ) , } } [INFO] [stderr] 79 | else { :: clap :: Error :: argument_not_found_auto ( $ v ) . exit ( ) } } else { 8 }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/main.rs:294:9 [INFO] [stderr] | [INFO] [stderr] 294 | / let mut min: u32 = 0; [INFO] [stderr] 295 | | if matches.is_present("len-min") { [INFO] [stderr] 296 | | min = value_t_or_exit!(matches, "len-min", u32); [INFO] [stderr] 297 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] help: it is more idiomatic to write [INFO] [stderr] | [INFO] [stderr] 294 | let min = if matches.is_present("len-min") { if let Some ( v ) = $ m . value_of ( $ v ) { [INFO] [stderr] 295 | match v . parse :: < $ t > ( ) { [INFO] [stderr] 296 | Ok ( val ) => val , Err ( _ ) => :: clap :: Error :: value_validation_auto ( [INFO] [stderr] 297 | format ! ( "The argument '{}' isn't a valid value" , v ) ) . exit ( ) , } } [INFO] [stderr] 298 | else { :: clap :: Error :: argument_not_found_auto ( $ v ) . exit ( ) } } else { 0 }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/main.rs:298:9 [INFO] [stderr] | [INFO] [stderr] 298 | / let mut max: u32 = 8; [INFO] [stderr] 299 | | if matches.is_present("len-max") { [INFO] [stderr] 300 | | max = value_t_or_exit!(matches, "len-max", u32); [INFO] [stderr] 301 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] help: it is more idiomatic to write [INFO] [stderr] | [INFO] [stderr] 298 | let max = if matches.is_present("len-max") { if let Some ( v ) = $ m . value_of ( $ v ) { [INFO] [stderr] 299 | match v . parse :: < $ t > ( ) { [INFO] [stderr] 300 | Ok ( val ) => val , Err ( _ ) => :: clap :: Error :: value_validation_auto ( [INFO] [stderr] 301 | format ! ( "The argument '{}' isn't a valid value" , v ) ) . exit ( ) , } } [INFO] [stderr] 302 | else { :: clap :: Error :: argument_not_found_auto ( $ v ) . exit ( ) } } else { 8 }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/main.rs:325:13 [INFO] [stderr] | [INFO] [stderr] 325 | / output_stream [INFO] [stderr] 326 | | .write(b"Sets of generated sequences do not match\n") [INFO] [stderr] 327 | | .unwrap(); [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/main.rs:341:13 [INFO] [stderr] | [INFO] [stderr] 341 | / output_stream [INFO] [stderr] 342 | | .write(b"OK! The generated sets are equal!\n") [INFO] [stderr] 343 | | .unwrap(); [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/main.rs:373:25 [INFO] [stderr] | [INFO] [stderr] 373 | let v = result.get(key).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&result[key]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] error: aborting due to 4 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `plt`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: struct is never constructed: `SDT` [INFO] [stderr] --> src/sdt.rs:20:1 [INFO] [stderr] | [INFO] [stderr] 20 | pub struct SDT { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `load` [INFO] [stderr] --> src/sdt.rs:25:5 [INFO] [stderr] | [INFO] [stderr] 25 | pub fn load(input_path: &str) -> io::Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `load_from_reader` [INFO] [stderr] --> src/sdt.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | / pub fn load_from_reader(r: R) -> io::Result [INFO] [stderr] 31 | | where [INFO] [stderr] 32 | | R: ::std::marker::Sized, [INFO] [stderr] 33 | | { [INFO] [stderr] ... | [INFO] [stderr] 40 | | }) [INFO] [stderr] 41 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cfg.rs:99:9 [INFO] [stderr] | [INFO] [stderr] 99 | / match self { [INFO] [stderr] 100 | | &Symbol::T(_) => false, [INFO] [stderr] 101 | | &Symbol::N(_) => true, [INFO] [stderr] 102 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 99 | match *self { [INFO] [stderr] 100 | Symbol::T(_) => false, [INFO] [stderr] 101 | Symbol::N(_) => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cfg.rs:108:9 [INFO] [stderr] | [INFO] [stderr] 108 | / match self { [INFO] [stderr] 109 | | &Symbol::T(ref t) => t.is_a(c), [INFO] [stderr] 110 | | &Symbol::N(_) => false, [INFO] [stderr] 111 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 108 | match *self { [INFO] [stderr] 109 | Symbol::T(ref t) => t.is_a(c), [INFO] [stderr] 110 | Symbol::N(_) => false, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cfg.rs:115:9 [INFO] [stderr] | [INFO] [stderr] 115 | / match self { [INFO] [stderr] 116 | | &Symbol::T(_) => false, [INFO] [stderr] 117 | | &Symbol::N(ref n) => n == other, [INFO] [stderr] 118 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 115 | match *self { [INFO] [stderr] 116 | Symbol::T(_) => false, [INFO] [stderr] 117 | Symbol::N(ref n) => n == other, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cfg.rs:122:9 [INFO] [stderr] | [INFO] [stderr] 122 | / match self { [INFO] [stderr] 123 | | &Symbol::T(_) => None, [INFO] [stderr] 124 | | &Symbol::N(ref x) => Some(&x), [INFO] [stderr] 125 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 122 | match *self { [INFO] [stderr] 123 | Symbol::T(_) => None, [INFO] [stderr] 124 | Symbol::N(ref x) => Some(&x), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cfg.rs:135:9 [INFO] [stderr] | [INFO] [stderr] 135 | / match self { [INFO] [stderr] 136 | | &Symbol::T(ref t) => write!(f, "{}", t), [INFO] [stderr] 137 | | &Symbol::N(ref n) => write!(f, "{}", n), [INFO] [stderr] 138 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 135 | match *self { [INFO] [stderr] 136 | Symbol::T(ref t) => write!(f, "{}", t), [INFO] [stderr] 137 | Symbol::N(ref n) => write!(f, "{}", n), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/cfg.rs:270:29 [INFO] [stderr] | [INFO] [stderr] 270 | format!("Unexpected symbol '>'"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Unexpected symbol '>'".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/cfg.rs:279:29 [INFO] [stderr] | [INFO] [stderr] 279 | format!("Unexpected symbol '<'"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Unexpected symbol '<'".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/cfg.rs:290:16 [INFO] [stderr] | [INFO] [stderr] 290 | if read_long_name == true { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `read_long_name` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::bool_comparison)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/cfg.rs:293:21 [INFO] [stderr] | [INFO] [stderr] 293 | format!("Unterminated Nonterminal symbol name, expect '>'"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Unterminated Nonterminal symbol name, expect '>'".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: in an 'if' condition, avoid complex blocks or closures with blocks; instead, move the block or closure higher and bind it with a 'let' [INFO] [stderr] --> src/cfg.rs:346:83 [INFO] [stderr] | [INFO] [stderr] 346 | if rule.right.is_empty() || rule.right.iter().fold(true, |acc, x| { [INFO] [stderr] | ___________________________________________________________________________________^ [INFO] [stderr] 347 | | if !acc { [INFO] [stderr] 348 | | acc [INFO] [stderr] 349 | | } else { [INFO] [stderr] 350 | | x.is_nonterminal() && nullable.contains(x.as_nonterminal().unwrap()) [INFO] [stderr] 351 | | } [INFO] [stderr] 352 | | }) { [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::block_in_if_condition_stmt)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#block_in_if_condition_stmt [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/cfg.rs:398:33 [INFO] [stderr] | [INFO] [stderr] 398 | / !new.right.is_empty() [INFO] [stderr] 399 | | // skip new unit rule [INFO] [stderr] 400 | | && !(new.right.len() == 1 && new.right[0].is_nonterminal() [INFO] [stderr] 401 | | && new.right[0].as_nonterminal().unwrap() == &new.left) [INFO] [stderr] | |___________________________________________________________________________________________^ help: try: `!(new.right.len() == 1 && new.right[0].is_nonterminal() && new.right[0].as_nonterminal().unwrap() == &new.left || new.right.is_empty())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::nonminimal_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/cfg.rs:590:18 [INFO] [stderr] | [INFO] [stderr] 590 | Some(format!("Epsilon rules are not excluded from grammar")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Epsilon rules are not excluded from grammar".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/cfg.rs:595:18 [INFO] [stderr] | [INFO] [stderr] 595 | Some(format!("There are Unit rules in the grammar")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"There are Unit rules in the grammar".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/cfg.rs:601:18 [INFO] [stderr] | [INFO] [stderr] 601 | Some(format!( [INFO] [stderr] | __________________^ [INFO] [stderr] 602 | | "There are non-generating characters in the grammar" [INFO] [stderr] 603 | | )) [INFO] [stderr] | |_____________^ help: consider using .to_string(): `"There are non-generating characters in the grammar".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/cfg.rs:610:18 [INFO] [stderr] | [INFO] [stderr] 610 | Some(format!("There are unreachable characters in the grammar")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"There are unreachable characters in the grammar".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/cfg.rs:659:76 [INFO] [stderr] | [INFO] [stderr] 659 | } else if rule.right.len() == 1 && rule.right[0].is_terminal() { [INFO] [stderr] | ____________________________________________________________________________^ [INFO] [stderr] 660 | | productions.insert(rule); [INFO] [stderr] 661 | | } else { [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> src/cfg.rs:657:62 [INFO] [stderr] | [INFO] [stderr] 657 | if rule.right.iter().all(|x| x.is_nonterminal()) { [INFO] [stderr] | ______________________________________________________________^ [INFO] [stderr] 658 | | productions.insert(rule); [INFO] [stderr] 659 | | } else if rule.right.len() == 1 && rule.right[0].is_terminal() { [INFO] [stderr] | |_____________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] warning: use of `or_insert` followed by a function call [INFO] [stderr] --> src/cyk.rs:48:18 [INFO] [stderr] | [INFO] [stderr] 48 | .or_insert(HashSet::new()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(HashSet::new)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/cyk.rs:90:20 [INFO] [stderr] | [INFO] [stderr] 90 | if rule.right.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `rule.right.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: use of `or_insert` followed by a function call [INFO] [stderr] --> src/cyk.rs:115:18 [INFO] [stderr] | [INFO] [stderr] 115 | .or_insert(HashSet::new()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(HashSet::new)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/cyk.rs:193:16 [INFO] [stderr] | [INFO] [stderr] 193 | chars: &Vec, [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[char]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/dfa.rs:176:50 [INFO] [stderr] | [INFO] [stderr] 176 | if l.is_empty() || l.starts_with("#") { [INFO] [stderr] | ^^^ help: try using a char instead: `'#'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/earley.rs:171:25 [INFO] [stderr] | [INFO] [stderr] 171 | .filter(|r| match state.symbol().unwrap() { [INFO] [stderr] | _________________________^ [INFO] [stderr] 172 | | &cfg::Symbol::N(ref n) => n == &r.left, [INFO] [stderr] 173 | | &cfg::Symbol::T(_) => false, [INFO] [stderr] 174 | | }) [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 171 | .filter(|r| match *state.symbol().unwrap() { [INFO] [stderr] 172 | cfg::Symbol::N(ref n) => n == &r.left, [INFO] [stderr] 173 | cfg::Symbol::T(_) => false, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/earley.rs:186:32 [INFO] [stderr] | [INFO] [stderr] 186 | pub fn print(&self, chart: &Vec>) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: change this to: `&[Column<'er>]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] error: for loop over `rules.get(&cfg::Symbol::N(grammar.start))`, which is an `Option`. This is more readably written as an `if let` statement. [INFO] [stderr] --> src/generator.rs:53:22 [INFO] [stderr] | [INFO] [stderr] 53 | for cases in rules.get(&cfg::Symbol::N(grammar.start)) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::for_loop_over_option)] on by default [INFO] [stderr] = help: consider replacing `for cases in rules.get(&cfg::Symbol::N(grammar.start))` with `if let Some(cases) = rules.get(&cfg::Symbol::N(grammar.start))` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_loop_over_option [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pda.rs:27:13 [INFO] [stderr] | [INFO] [stderr] 27 | / match self { [INFO] [stderr] 28 | | &PDAState::State(num) => format!("{}", num), [INFO] [stderr] 29 | | &PDAState::Stuck => format!("STUCK"), [INFO] [stderr] 30 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 27 | match *self { [INFO] [stderr] 28 | PDAState::State(num) => format!("{}", num), [INFO] [stderr] 29 | PDAState::Stuck => format!("STUCK"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/pda.rs:29:37 [INFO] [stderr] | [INFO] [stderr] 29 | &PDAState::Stuck => format!("STUCK"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"STUCK".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/pda.rs:53:29 [INFO] [stderr] | [INFO] [stderr] 53 | if value <= ::std::u32::MAX as u64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(::std::u32::MAX)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/pda.rs:149:20 [INFO] [stderr] | [INFO] [stderr] 149 | state: self.next_state.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.next_state` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: called `cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable [INFO] [stderr] --> src/pda.rs:353:13 [INFO] [stderr] | [INFO] [stderr] 353 | self.accept_states.iter().cloned().collect(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::iter_cloned_collect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pdt.rs:27:13 [INFO] [stderr] | [INFO] [stderr] 27 | / match self { [INFO] [stderr] 28 | | &PDTState::State(num) => format!("{}", num), [INFO] [stderr] 29 | | &PDTState::Stuck => format!("STUCK"), [INFO] [stderr] 30 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 27 | match *self { [INFO] [stderr] 28 | PDTState::State(num) => format!("{}", num), [INFO] [stderr] 29 | PDTState::Stuck => format!("STUCK"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/pdt.rs:29:37 [INFO] [stderr] | [INFO] [stderr] 29 | &PDTState::Stuck => format!("STUCK"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"STUCK".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/pdt.rs:53:29 [INFO] [stderr] | [INFO] [stderr] 53 | if value <= ::std::u32::MAX as u64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(::std::u32::MAX)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/pdt.rs:163:20 [INFO] [stderr] | [INFO] [stderr] 163 | state: self.next_state.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.next_state` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: called `cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable [INFO] [stderr] --> src/pdt.rs:363:13 [INFO] [stderr] | [INFO] [stderr] 363 | self.accept_states.iter().cloned().collect(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 37 [INFO] [stderr] --> src/main.rs:54:1 [INFO] [stderr] | [INFO] [stderr] 54 | / fn main() { [INFO] [stderr] 55 | | let app = args::build_app("plt"); [INFO] [stderr] 56 | | [INFO] [stderr] 57 | | // [INFO] [stderr] ... | [INFO] [stderr] 388 | | } [INFO] [stderr] 389 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/main.rs:71:9 [INFO] [stderr] | [INFO] [stderr] 71 | / let mut min: u32 = 0; [INFO] [stderr] 72 | | if matches.is_present("len-min") { [INFO] [stderr] 73 | | min = value_t_or_exit!(matches, "len-min", u32); [INFO] [stderr] 74 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] help: it is more idiomatic to write [INFO] [stderr] | [INFO] [stderr] 71 | let min = if matches.is_present("len-min") { if let Some ( v ) = $ m . value_of ( $ v ) { [INFO] [stderr] 72 | match v . parse :: < $ t > ( ) { [INFO] [stderr] 73 | Ok ( val ) => val , Err ( _ ) => :: clap :: Error :: value_validation_auto ( [INFO] [stderr] 74 | format ! ( "The argument '{}' isn't a valid value" , v ) ) . exit ( ) , } } [INFO] [stderr] 75 | else { :: clap :: Error :: argument_not_found_auto ( $ v ) . exit ( ) } } else { 0 }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/main.rs:75:9 [INFO] [stderr] | [INFO] [stderr] 75 | / let mut max: u32 = 8; [INFO] [stderr] 76 | | if matches.is_present("len-max") { [INFO] [stderr] 77 | | max = value_t_or_exit!(matches, "len-max", u32); [INFO] [stderr] 78 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] help: it is more idiomatic to write [INFO] [stderr] | [INFO] [stderr] 75 | let max = if matches.is_present("len-max") { if let Some ( v ) = $ m . value_of ( $ v ) { [INFO] [stderr] 76 | match v . parse :: < $ t > ( ) { [INFO] [stderr] 77 | Ok ( val ) => val , Err ( _ ) => :: clap :: Error :: value_validation_auto ( [INFO] [stderr] 78 | format ! ( "The argument '{}' isn't a valid value" , v ) ) . exit ( ) , } } [INFO] [stderr] 79 | else { :: clap :: Error :: argument_not_found_auto ( $ v ) . exit ( ) } } else { 8 }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/main.rs:294:9 [INFO] [stderr] | [INFO] [stderr] 294 | / let mut min: u32 = 0; [INFO] [stderr] 295 | | if matches.is_present("len-min") { [INFO] [stderr] 296 | | min = value_t_or_exit!(matches, "len-min", u32); [INFO] [stderr] 297 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] help: it is more idiomatic to write [INFO] [stderr] | [INFO] [stderr] 294 | let min = if matches.is_present("len-min") { if let Some ( v ) = $ m . value_of ( $ v ) { [INFO] [stderr] 295 | match v . parse :: < $ t > ( ) { [INFO] [stderr] 296 | Ok ( val ) => val , Err ( _ ) => :: clap :: Error :: value_validation_auto ( [INFO] [stderr] 297 | format ! ( "The argument '{}' isn't a valid value" , v ) ) . exit ( ) , } } [INFO] [stderr] 298 | else { :: clap :: Error :: argument_not_found_auto ( $ v ) . exit ( ) } } else { 0 }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/main.rs:298:9 [INFO] [stderr] | [INFO] [stderr] 298 | / let mut max: u32 = 8; [INFO] [stderr] 299 | | if matches.is_present("len-max") { [INFO] [stderr] 300 | | max = value_t_or_exit!(matches, "len-max", u32); [INFO] [stderr] 301 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] help: it is more idiomatic to write [INFO] [stderr] | [INFO] [stderr] 298 | let max = if matches.is_present("len-max") { if let Some ( v ) = $ m . value_of ( $ v ) { [INFO] [stderr] 299 | match v . parse :: < $ t > ( ) { [INFO] [stderr] 300 | Ok ( val ) => val , Err ( _ ) => :: clap :: Error :: value_validation_auto ( [INFO] [stderr] 301 | format ! ( "The argument '{}' isn't a valid value" , v ) ) . exit ( ) , } } [INFO] [stderr] 302 | else { :: clap :: Error :: argument_not_found_auto ( $ v ) . exit ( ) } } else { 8 }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/main.rs:325:13 [INFO] [stderr] | [INFO] [stderr] 325 | / output_stream [INFO] [stderr] 326 | | .write(b"Sets of generated sequences do not match\n") [INFO] [stderr] 327 | | .unwrap(); [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/main.rs:341:13 [INFO] [stderr] | [INFO] [stderr] 341 | / output_stream [INFO] [stderr] 342 | | .write(b"OK! The generated sets are equal!\n") [INFO] [stderr] 343 | | .unwrap(); [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/main.rs:373:25 [INFO] [stderr] | [INFO] [stderr] 373 | let v = result.get(key).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&result[key]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] error: aborting due to 4 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `plt`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "7771eb8c54d54efddc2bef225d505370786f46185ca7c7ad2d71a89ad36a3ad8"` [INFO] running `"docker" "rm" "-f" "7771eb8c54d54efddc2bef225d505370786f46185ca7c7ad2d71a89ad36a3ad8"` [INFO] [stdout] 7771eb8c54d54efddc2bef225d505370786f46185ca7c7ad2d71a89ad36a3ad8