[INFO] updating cached repository JacekPrzemieniecki/earley_parser [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/JacekPrzemieniecki/earley_parser [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/JacekPrzemieniecki/earley_parser" "work/ex/clippy-test-run/sources/stable/gh/JacekPrzemieniecki/earley_parser"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/JacekPrzemieniecki/earley_parser'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/JacekPrzemieniecki/earley_parser" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/JacekPrzemieniecki/earley_parser"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/JacekPrzemieniecki/earley_parser'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 338e5c0bf2007c79f62a2f7a880f1d1448a3060d [INFO] sha for GitHub repo JacekPrzemieniecki/earley_parser: 338e5c0bf2007c79f62a2f7a880f1d1448a3060d [INFO] validating manifest of JacekPrzemieniecki/earley_parser 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 JacekPrzemieniecki/earley_parser 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 JacekPrzemieniecki/earley_parser [INFO] finished frobbing JacekPrzemieniecki/earley_parser [INFO] frobbed toml for JacekPrzemieniecki/earley_parser written to work/ex/clippy-test-run/sources/stable/gh/JacekPrzemieniecki/earley_parser/Cargo.toml [INFO] started frobbing JacekPrzemieniecki/earley_parser [INFO] finished frobbing JacekPrzemieniecki/earley_parser [INFO] frobbed toml for JacekPrzemieniecki/earley_parser written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/JacekPrzemieniecki/earley_parser/Cargo.toml [INFO] crate JacekPrzemieniecki/earley_parser 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 JacekPrzemieniecki/earley_parser against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-5/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/JacekPrzemieniecki/earley_parser:/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] 3ed12ee8155a19131cbb1a159c4921eef2c6d1b23df25346f0a1af29e0b5b5b6 [INFO] running `"docker" "start" "-a" "3ed12ee8155a19131cbb1a159c4921eef2c6d1b23df25346f0a1af29e0b5b5b6"` [INFO] [stderr] Checking earley_parser v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/grammar.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | write!(&mut s, "Symbols: \n").unwrap(); [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/grammar.rs:33:13 [INFO] [stderr] | [INFO] [stderr] 33 | write!(&mut s, "{}\n", symbol).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: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/grammar.rs:35:9 [INFO] [stderr] | [INFO] [stderr] 35 | write!(&mut s, "Rules: \n").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: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/grammar.rs:38:13 [INFO] [stderr] | [INFO] [stderr] 38 | write!(s, "\n").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/grammar.rs:76:42 [INFO] [stderr] | [INFO] [stderr] 76 | let new_symbol = Symbol {id: id, name: &head, is_terminal: false}; [INFO] [stderr] | ^^^^^^ help: replace it with: `id` [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/grammar.rs:102:46 [INFO] [stderr] | [INFO] [stderr] 102 | let new_symbol = Symbol {id: id, name: &name, is_terminal: is_terminal}; [INFO] [stderr] | ^^^^^^ help: replace it with: `id` [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/grammar.rs:102:67 [INFO] [stderr] | [INFO] [stderr] 102 | let new_symbol = Symbol {id: id, name: &name, is_terminal: is_terminal}; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `is_terminal` [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/grammar.rs:117:32 [INFO] [stderr] | [INFO] [stderr] 117 | let g = Grammar {start: 1, rules: rules, symbols: symbols}; [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/grammar.rs:117:46 [INFO] [stderr] | [INFO] [stderr] 117 | let g = Grammar {start: 1, rules: rules, symbols: symbols}; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `symbols` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser.rs:208:34 [INFO] [stderr] | [INFO] [stderr] 208 | return Some(ASTNode {children: children, value: root_symbol}); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `children` [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/parser.rs:232:9 [INFO] [stderr] | [INFO] [stderr] 232 | write!(s, "{}\n", &gram.symbols[self.value].name); [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/grammar.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | write!(&mut s, "Symbols: \n").unwrap(); [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/grammar.rs:33:13 [INFO] [stderr] | [INFO] [stderr] 33 | write!(&mut s, "{}\n", symbol).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: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/grammar.rs:35:9 [INFO] [stderr] | [INFO] [stderr] 35 | write!(&mut s, "Rules: \n").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: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/grammar.rs:38:13 [INFO] [stderr] | [INFO] [stderr] 38 | write!(s, "\n").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/grammar.rs:76:42 [INFO] [stderr] | [INFO] [stderr] 76 | let new_symbol = Symbol {id: id, name: &head, is_terminal: false}; [INFO] [stderr] | ^^^^^^ help: replace it with: `id` [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/grammar.rs:102:46 [INFO] [stderr] | [INFO] [stderr] 102 | let new_symbol = Symbol {id: id, name: &name, is_terminal: is_terminal}; [INFO] [stderr] | ^^^^^^ help: replace it with: `id` [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/grammar.rs:102:67 [INFO] [stderr] | [INFO] [stderr] 102 | let new_symbol = Symbol {id: id, name: &name, is_terminal: is_terminal}; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `is_terminal` [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/grammar.rs:117:32 [INFO] [stderr] | [INFO] [stderr] 117 | let g = Grammar {start: 1, rules: rules, symbols: symbols}; [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/grammar.rs:117:46 [INFO] [stderr] | [INFO] [stderr] 117 | let g = Grammar {start: 1, rules: rules, symbols: symbols}; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `symbols` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser.rs:208:34 [INFO] [stderr] | [INFO] [stderr] 208 | return Some(ASTNode {children: children, value: root_symbol}); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `children` [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/parser.rs:232:9 [INFO] [stderr] | [INFO] [stderr] 232 | write!(s, "{}\n", &gram.symbols[self.value].name); [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: unneeded return statement [INFO] [stderr] --> src/grammar.rs:40:9 [INFO] [stderr] | [INFO] [stderr] 40 | return formatter.pad(&s); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `formatter.pad(&s)` [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: unneeded return statement [INFO] [stderr] --> src/grammar.rs:53:9 [INFO] [stderr] | [INFO] [stderr] 53 | return formatter.pad(&s); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `formatter.pad(&s)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/grammar.rs:118:5 [INFO] [stderr] | [INFO] [stderr] 118 | return g; [INFO] [stderr] | ^^^^^^^^^ help: remove `return` as shown: `g` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/tokenizer.rs:27:5 [INFO] [stderr] | [INFO] [stderr] 27 | return result; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `result` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:17:9 [INFO] [stderr] | [INFO] [stderr] 17 | return &gram.symbols[current_symbol as usize]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `&gram.symbols[current_symbol as usize]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:51:9 [INFO] [stderr] | [INFO] [stderr] 51 | return f; [INFO] [stderr] | ^^^^^^^^^ help: remove `return` as shown: `f` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:118:5 [INFO] [stderr] | [INFO] [stderr] 118 | return result; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `result` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:165:5 [INFO] [stderr] | [INFO] [stderr] 165 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:184:5 [INFO] [stderr] | [INFO] [stderr] 184 | return Some(ast_children); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Some(ast_children)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:221:5 [INFO] [stderr] | [INFO] [stderr] 221 | return None [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:236:9 [INFO] [stderr] | [INFO] [stderr] 236 | return s; [INFO] [stderr] | ^^^^^^^^^ help: remove `return` as shown: `s` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unused import: `grammar::build_grammar` [INFO] [stderr] --> src/main.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | use grammar::build_grammar; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/main.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | return buffer; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `buffer` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/grammar.rs:40:9 [INFO] [stderr] | [INFO] [stderr] 40 | return formatter.pad(&s); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `formatter.pad(&s)` [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: unneeded return statement [INFO] [stderr] --> src/grammar.rs:53:9 [INFO] [stderr] | [INFO] [stderr] 53 | return formatter.pad(&s); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `formatter.pad(&s)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/grammar.rs:118:5 [INFO] [stderr] | [INFO] [stderr] 118 | return g; [INFO] [stderr] | ^^^^^^^^^ help: remove `return` as shown: `g` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/tokenizer.rs:27:5 [INFO] [stderr] | [INFO] [stderr] 27 | return result; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `result` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:17:9 [INFO] [stderr] | [INFO] [stderr] 17 | return &gram.symbols[current_symbol as usize]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `&gram.symbols[current_symbol as usize]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:51:9 [INFO] [stderr] | [INFO] [stderr] 51 | return f; [INFO] [stderr] | ^^^^^^^^^ help: remove `return` as shown: `f` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:118:5 [INFO] [stderr] | [INFO] [stderr] 118 | return result; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `result` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:165:5 [INFO] [stderr] | [INFO] [stderr] 165 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:184:5 [INFO] [stderr] | [INFO] [stderr] 184 | return Some(ast_children); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Some(ast_children)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:221:5 [INFO] [stderr] | [INFO] [stderr] 221 | return None [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:236:9 [INFO] [stderr] | [INFO] [stderr] 236 | return s; [INFO] [stderr] | ^^^^^^^^^ help: remove `return` as shown: `s` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unused import: `grammar::build_grammar` [INFO] [stderr] --> src/main.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | use grammar::build_grammar; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/main.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | return buffer; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `buffer` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/grammar.rs:57:1 [INFO] [stderr] | [INFO] [stderr] 57 | / pub fn build_grammar<'a>(bn_form: &'a str) -> Grammar<'a> { [INFO] [stderr] 58 | | let mut symbols = Vec::::new(); [INFO] [stderr] 59 | | symbols.push(Symbol {name: "End of input", id: 0, is_terminal: true}); [INFO] [stderr] 60 | | let mut symbols_lut = HashSet::<&str>::new(); [INFO] [stderr] ... | [INFO] [stderr] 118 | | return g; [INFO] [stderr] 119 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/grammar.rs:63:36 [INFO] [stderr] | [INFO] [stderr] 63 | let mut split = line.split(" "); [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 seem to be trying to match on a boolean expression [INFO] [stderr] --> src/grammar.rs:71:37 [INFO] [stderr] | [INFO] [stderr] 71 | let head_symbol_id: usize = match symbols_lut.contains(head) [INFO] [stderr] | _____________________________________^ [INFO] [stderr] 72 | | { [INFO] [stderr] 73 | | true => symbols.iter().find(|e| e.name == head).expect("Error building grammar {}: 164361").id, [INFO] [stderr] 74 | | false => { [INFO] [stderr] ... | [INFO] [stderr] 79 | | } [INFO] [stderr] 80 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] help: consider using an if/else expression [INFO] [stderr] | [INFO] [stderr] 71 | let head_symbol_id: usize = if symbols_lut.contains(head) { symbols.iter().find(|e| e.name == head).expect("Error building grammar {}: 164361").id } else { [INFO] [stderr] 72 | let id = symbols.len(); [INFO] [stderr] 73 | let new_symbol = Symbol {id: id, name: &head, is_terminal: false}; [INFO] [stderr] 74 | symbols.push(new_symbol); [INFO] [stderr] 75 | id [INFO] [stderr] 76 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/grammar.rs:92:39 [INFO] [stderr] | [INFO] [stderr] 92 | let tail_elem_id: usize = match symbols_lut.contains(elem) [INFO] [stderr] | _______________________________________^ [INFO] [stderr] 93 | | { [INFO] [stderr] 94 | | true => match symbols.iter().find(|e| e.name == elem_trimmed) { [INFO] [stderr] 95 | | Some(x) => x.id, [INFO] [stderr] ... | [INFO] [stderr] 105 | | } [INFO] [stderr] 106 | | }; [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] help: consider using an if/else expression [INFO] [stderr] | [INFO] [stderr] 92 | let tail_elem_id: usize = if symbols_lut.contains(elem) { match symbols.iter().find(|e| e.name == elem_trimmed) { [INFO] [stderr] 93 | Some(x) => x.id, [INFO] [stderr] 94 | None => panic!("Error building grammar, searching for {}", elem) [INFO] [stderr] 95 | } } else { [INFO] [stderr] 96 | let id = symbols.len(); [INFO] [stderr] 97 | let is_terminal = elem.starts_with("'"); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/grammar.rs:100:56 [INFO] [stderr] | [INFO] [stderr] 100 | let is_terminal = elem.starts_with("'"); [INFO] [stderr] | ^^^ help: try using a char instead: `'''` [INFO] [stderr] | [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: this lifetime isn't used in the function definition [INFO] [stderr] --> src/tokenizer.rs:9:21 [INFO] [stderr] | [INFO] [stderr] 9 | pub fn tokenize<'a, 'b>(grammar: &Grammar, text: &'a str) -> Vec>{ [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::extra_unused_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/tokenizer.rs:20:33 [INFO] [stderr] | [INFO] [stderr] 20 | for c in text_trimmed.split(" ") { [INFO] [stderr] | ^^^ help: try using a char instead: `' '` [INFO] [stderr] | [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:46:43 [INFO] [stderr] | [INFO] [stderr] 46 | write!(f, "{} ", gram.symbols[sym.clone()].name).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^ help: try dereferencing it: `*sym` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/parser.rs:105:33 [INFO] [stderr] | [INFO] [stderr] 105 | fn reverse_and_sort(state_sets: &Vec>, gram: &Grammar) -> Vec> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[Vec]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/parser.rs:121:33 [INFO] [stderr] | [INFO] [stderr] 121 | fn print_state_sets(state_sets: &Vec>, gram: &Grammar, tokens: &Vec, print_tokens: bool) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[Vec]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/parser.rs:121:80 [INFO] [stderr] | [INFO] [stderr] 121 | fn print_state_sets(state_sets: &Vec>, gram: &Grammar, tokens: &Vec, print_tokens: bool) { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[Token]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/parser.rs:146:18 [INFO] [stderr] | [INFO] [stderr] 146 | lookup_sets: &'a Vec>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[Vec]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/parser.rs:150:22 [INFO] [stderr] | [INFO] [stderr] 150 | if from == to && symbols.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `symbols.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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/parser.rs:160:9 [INFO] [stderr] | [INFO] [stderr] 160 | / match find_split(item.start, to, rest, &lookup_sets, &gram) { [INFO] [stderr] 161 | | Some(mut v) => { v.push(item); return Some(v);} [INFO] [stderr] 162 | | None => {} [INFO] [stderr] 163 | | } [INFO] [stderr] | |_________^ help: try this: `if let Some(mut v) = find_split(item.start, to, rest, &lookup_sets, &gram) { v.push(item); return Some(v);}` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/parser.rs:170:12 [INFO] [stderr] | [INFO] [stderr] 170 | split: &Vec<&EarleyItem>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: change this to: `&[&EarleyItem]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/parser.rs:171:18 [INFO] [stderr] | [INFO] [stderr] 171 | lookup_sets: &Vec>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[Vec]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/parser.rs:191:18 [INFO] [stderr] | [INFO] [stderr] 191 | lookup_sets: &Vec>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[Vec]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:203:73 [INFO] [stderr] | [INFO] [stderr] 203 | if gram.rules[edge.rule_id].symbols.iter().all(|i| gram.symbols[i.clone()].is_terminal) { [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*i` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:206:69 [INFO] [stderr] | [INFO] [stderr] 206 | children.push(ASTNode {children: Vec::new(), value: terminal.clone()}); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try dereferencing it: `*terminal` [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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/parser.rs:227:9 [INFO] [stderr] | [INFO] [stderr] 227 | write!(s, "{}", indent); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/parser.rs:228:26 [INFO] [stderr] | [INFO] [stderr] 228 | let new_indent = match last { [INFO] [stderr] | __________________________^ [INFO] [stderr] 229 | | true => { write!(s, "\\-"); indent.to_string() + " "}, [INFO] [stderr] 230 | | false => { write!(s, "|-"); indent.to_string() + "| "} [INFO] [stderr] 231 | | }; [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if last { write!(s, "\\-"); indent.to_string() + " "} else { write!(s, "|-"); indent.to_string() + "| "}` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/parser.rs:229:23 [INFO] [stderr] | [INFO] [stderr] 229 | true => { write!(s, "\\-"); indent.to_string() + " "}, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/parser.rs:230:24 [INFO] [stderr] | [INFO] [stderr] 230 | false => { write!(s, "|-"); indent.to_string() + "| "} [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/parser.rs:232:9 [INFO] [stderr] | [INFO] [stderr] 232 | write!(s, "{}\n", &gram.symbols[self.value].name); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/parser.rs:234:13 [INFO] [stderr] | [INFO] [stderr] 234 | write!(s, "{}", node.to_string(&gram, &new_indent, i == self.children.len() -1)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/grammar.rs:57:1 [INFO] [stderr] | [INFO] [stderr] 57 | / pub fn build_grammar<'a>(bn_form: &'a str) -> Grammar<'a> { [INFO] [stderr] 58 | | let mut symbols = Vec::::new(); [INFO] [stderr] 59 | | symbols.push(Symbol {name: "End of input", id: 0, is_terminal: true}); [INFO] [stderr] 60 | | let mut symbols_lut = HashSet::<&str>::new(); [INFO] [stderr] ... | [INFO] [stderr] 118 | | return g; [INFO] [stderr] 119 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/grammar.rs:63:36 [INFO] [stderr] | [INFO] [stderr] 63 | let mut split = line.split(" "); [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 seem to be trying to match on a boolean expression [INFO] [stderr] --> src/grammar.rs:71:37 [INFO] [stderr] | [INFO] [stderr] 71 | let head_symbol_id: usize = match symbols_lut.contains(head) [INFO] [stderr] | _____________________________________^ [INFO] [stderr] 72 | | { [INFO] [stderr] 73 | | true => symbols.iter().find(|e| e.name == head).expect("Error building grammar {}: 164361").id, [INFO] [stderr] 74 | | false => { [INFO] [stderr] ... | [INFO] [stderr] 79 | | } [INFO] [stderr] 80 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] help: consider using an if/else expression [INFO] [stderr] | [INFO] [stderr] 71 | let head_symbol_id: usize = if symbols_lut.contains(head) { symbols.iter().find(|e| e.name == head).expect("Error building grammar {}: 164361").id } else { [INFO] [stderr] 72 | let id = symbols.len(); [INFO] [stderr] 73 | let new_symbol = Symbol {id: id, name: &head, is_terminal: false}; [INFO] [stderr] 74 | symbols.push(new_symbol); [INFO] [stderr] 75 | id [INFO] [stderr] 76 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/grammar.rs:92:39 [INFO] [stderr] | [INFO] [stderr] 92 | let tail_elem_id: usize = match symbols_lut.contains(elem) [INFO] [stderr] | _______________________________________^ [INFO] [stderr] 93 | | { [INFO] [stderr] 94 | | true => match symbols.iter().find(|e| e.name == elem_trimmed) { [INFO] [stderr] 95 | | Some(x) => x.id, [INFO] [stderr] ... | [INFO] [stderr] 105 | | } [INFO] [stderr] 106 | | }; [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] help: consider using an if/else expression [INFO] [stderr] | [INFO] [stderr] 92 | let tail_elem_id: usize = if symbols_lut.contains(elem) { match symbols.iter().find(|e| e.name == elem_trimmed) { [INFO] [stderr] 93 | Some(x) => x.id, [INFO] [stderr] 94 | None => panic!("Error building grammar, searching for {}", elem) [INFO] [stderr] 95 | } } else { [INFO] [stderr] 96 | let id = symbols.len(); [INFO] [stderr] 97 | let is_terminal = elem.starts_with("'"); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/grammar.rs:100:56 [INFO] [stderr] | [INFO] [stderr] 100 | let is_terminal = elem.starts_with("'"); [INFO] [stderr] | ^^^ help: try using a char instead: `'''` [INFO] [stderr] | [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: this lifetime isn't used in the function definition [INFO] [stderr] --> src/tokenizer.rs:9:21 [INFO] [stderr] | [INFO] [stderr] 9 | pub fn tokenize<'a, 'b>(grammar: &Grammar, text: &'a str) -> Vec>{ [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::extra_unused_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/tokenizer.rs:20:33 [INFO] [stderr] | [INFO] [stderr] 20 | for c in text_trimmed.split(" ") { [INFO] [stderr] | ^^^ help: try using a char instead: `' '` [INFO] [stderr] | [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:46:43 [INFO] [stderr] | [INFO] [stderr] 46 | write!(f, "{} ", gram.symbols[sym.clone()].name).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^ help: try dereferencing it: `*sym` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/parser.rs:105:33 [INFO] [stderr] | [INFO] [stderr] 105 | fn reverse_and_sort(state_sets: &Vec>, gram: &Grammar) -> Vec> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[Vec]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/parser.rs:121:33 [INFO] [stderr] | [INFO] [stderr] 121 | fn print_state_sets(state_sets: &Vec>, gram: &Grammar, tokens: &Vec, print_tokens: bool) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[Vec]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/parser.rs:121:80 [INFO] [stderr] | [INFO] [stderr] 121 | fn print_state_sets(state_sets: &Vec>, gram: &Grammar, tokens: &Vec, print_tokens: bool) { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[Token]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/parser.rs:146:18 [INFO] [stderr] | [INFO] [stderr] 146 | lookup_sets: &'a Vec>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[Vec]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/parser.rs:150:22 [INFO] [stderr] | [INFO] [stderr] 150 | if from == to && symbols.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `symbols.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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/parser.rs:160:9 [INFO] [stderr] | [INFO] [stderr] 160 | / match find_split(item.start, to, rest, &lookup_sets, &gram) { [INFO] [stderr] 161 | | Some(mut v) => { v.push(item); return Some(v);} [INFO] [stderr] 162 | | None => {} [INFO] [stderr] 163 | | } [INFO] [stderr] | |_________^ help: try this: `if let Some(mut v) = find_split(item.start, to, rest, &lookup_sets, &gram) { v.push(item); return Some(v);}` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/parser.rs:170:12 [INFO] [stderr] | [INFO] [stderr] 170 | split: &Vec<&EarleyItem>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: change this to: `&[&EarleyItem]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/parser.rs:171:18 [INFO] [stderr] | [INFO] [stderr] 171 | lookup_sets: &Vec>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[Vec]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/parser.rs:191:18 [INFO] [stderr] | [INFO] [stderr] 191 | lookup_sets: &Vec>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[Vec]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:203:73 [INFO] [stderr] | [INFO] [stderr] 203 | if gram.rules[edge.rule_id].symbols.iter().all(|i| gram.symbols[i.clone()].is_terminal) { [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*i` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:206:69 [INFO] [stderr] | [INFO] [stderr] 206 | children.push(ASTNode {children: Vec::new(), value: terminal.clone()}); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try dereferencing it: `*terminal` [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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/parser.rs:227:9 [INFO] [stderr] | [INFO] [stderr] 227 | write!(s, "{}", indent); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/parser.rs:228:26 [INFO] [stderr] | [INFO] [stderr] 228 | let new_indent = match last { [INFO] [stderr] | __________________________^ [INFO] [stderr] 229 | | true => { write!(s, "\\-"); indent.to_string() + " "}, [INFO] [stderr] 230 | | false => { write!(s, "|-"); indent.to_string() + "| "} [INFO] [stderr] 231 | | }; [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if last { write!(s, "\\-"); indent.to_string() + " "} else { write!(s, "|-"); indent.to_string() + "| "}` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/parser.rs:229:23 [INFO] [stderr] | [INFO] [stderr] 229 | true => { write!(s, "\\-"); indent.to_string() + " "}, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/parser.rs:230:24 [INFO] [stderr] | [INFO] [stderr] 230 | false => { write!(s, "|-"); indent.to_string() + "| "} [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/parser.rs:232:9 [INFO] [stderr] | [INFO] [stderr] 232 | write!(s, "{}\n", &gram.symbols[self.value].name); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/parser.rs:234:13 [INFO] [stderr] | [INFO] [stderr] 234 | write!(s, "{}", node.to_string(&gram, &new_indent, i == self.children.len() -1)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 0.96s [INFO] running `"docker" "inspect" "3ed12ee8155a19131cbb1a159c4921eef2c6d1b23df25346f0a1af29e0b5b5b6"` [INFO] running `"docker" "rm" "-f" "3ed12ee8155a19131cbb1a159c4921eef2c6d1b23df25346f0a1af29e0b5b5b6"` [INFO] [stdout] 3ed12ee8155a19131cbb1a159c4921eef2c6d1b23df25346f0a1af29e0b5b5b6