[INFO] crate pvm 0.1.0 is already in cache [INFO] extracting crate pvm 0.1.0 into work/ex/clippy-test-run/sources/stable/reg/pvm/0.1.0 [INFO] extracting crate pvm 0.1.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/pvm/0.1.0 [INFO] validating manifest of pvm-0.1.0 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 pvm-0.1.0 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 pvm-0.1.0 [INFO] finished frobbing pvm-0.1.0 [INFO] frobbed toml for pvm-0.1.0 written to work/ex/clippy-test-run/sources/stable/reg/pvm/0.1.0/Cargo.toml [INFO] started frobbing pvm-0.1.0 [INFO] finished frobbing pvm-0.1.0 [INFO] frobbed toml for pvm-0.1.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/pvm/0.1.0/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting pvm-0.1.0 against stable+rustflags=-Dclippy::into_iter_on_array for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-0/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/pvm/0.1.0:/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 -Dclippy::into_iter_on_array" "-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] 36237ccd7ced7c21da2d29b116b7fe920c9c6b657e2602f2ed59906453d22215 [INFO] running `"docker" "start" "-a" "36237ccd7ced7c21da2d29b116b7fe920c9c6b657e2602f2ed59906453d22215"` [INFO] [stderr] Compiling libc v0.2.48 [INFO] [stderr] Checking pvm v0.1.0 (/opt/crater/workdir) [INFO] [stderr] error[E0602]: unknown lint: `clippy::into_iter_on_array` [INFO] [stderr] | [INFO] [stderr] = note: requested on the command line with `-D clippy::into_iter_on_array` [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/ast.rs:357:13 [INFO] [stderr] | [INFO] [stderr] 357 | program: program, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `program` [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/ast.rs:358:13 [INFO] [stderr] | [INFO] [stderr] 358 | rule_names: rule_names, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `rule_names` [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/ast.rs:361:13 [INFO] [stderr] | [INFO] [stderr] 361 | jump_table: jump_table, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `jump_table` [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: 5th binding whose name is just one char [INFO] [stderr] --> src/machine.rs:96:63 [INFO] [stderr] | [INFO] [stderr] 96 | PrecedenceBacktrack(ret, a, j, jp, k, f, is_left) => { [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::many_single_char_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#many_single_char_names [INFO] [stderr] [INFO] [stderr] warning: 5th binding whose name is just one char [INFO] [stderr] --> src/machine.rs:190:71 [INFO] [stderr] | [INFO] [stderr] 190 | StackFrame::PrecedenceBacktrack(_, a, j, _, _, _, _) => { [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#many_single_char_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/machine.rs:337:13 [INFO] [stderr] | [INFO] [stderr] 337 | program: program, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `program` [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/machine.rs:341:13 [INFO] [stderr] | [INFO] [stderr] 341 | jump_table: jump_table, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `jump_table` [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/machine.rs:365:13 [INFO] [stderr] | [INFO] [stderr] 365 | program: program, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `program` [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/machine.rs:366:13 [INFO] [stderr] | [INFO] [stderr] 366 | rule_names: rule_names, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `rule_names` [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/machine.rs:369:13 [INFO] [stderr] | [INFO] [stderr] 369 | jump_table: jump_table, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `jump_table` [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/machine.rs:390:13 [INFO] [stderr] | [INFO] [stderr] 390 | program: program, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `program` [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/machine.rs:391:13 [INFO] [stderr] | [INFO] [stderr] 391 | rule_names: rule_names, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `rule_names` [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/machine.rs:394:13 [INFO] [stderr] | [INFO] [stderr] 394 | jump_table: jump_table, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `jump_table` [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] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] For more information about this error, try `rustc --explain E0602`. [INFO] [stderr] error: Could not compile `libc`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: the variable `id` is used as a loop counter. Consider using `for (id, item) in rules.enumerate()` or similar iterators [INFO] [stderr] --> src/ast.rs:44:25 [INFO] [stderr] | [INFO] [stderr] 44 | for mut rule in rules { [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_counter_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `result` [INFO] [stderr] --> src/ast.rs:54:18 [INFO] [stderr] | [INFO] [stderr] 54 | for i in 0..result.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 54 | for (i, ) in result.iter_mut().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:68:9 [INFO] [stderr] | [INFO] [stderr] 68 | / match p { [INFO] [stderr] 69 | | &Pattern::CharClass(ref data) => Grammar::compile_char_class(data), [INFO] [stderr] 70 | | &Pattern::CharSequence(ref data) => Grammar::compile_char_sequence(data), [INFO] [stderr] 71 | | &Pattern::CharAny => Grammar::compile_char_any(), [INFO] [stderr] ... | [INFO] [stderr] 78 | | &Pattern::Lookahead(flag, ref data) => Grammar::compile_lookahead(flag, data) [INFO] [stderr] 79 | | } [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] 68 | match *p { [INFO] [stderr] 69 | Pattern::CharClass(ref data) => Grammar::compile_char_class(data), [INFO] [stderr] 70 | Pattern::CharSequence(ref data) => Grammar::compile_char_sequence(data), [INFO] [stderr] 71 | Pattern::CharAny => Grammar::compile_char_any(), [INFO] [stderr] 72 | Pattern::Variable(id, precedence, _, is_left) => Grammar::compile_variable(id, precedence, is_left), [INFO] [stderr] 73 | Pattern::Choice(ref le, ref ri) => Grammar::compile_choice(le, ri), [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/ast.rs:82:34 [INFO] [stderr] | [INFO] [stderr] 82 | fn compile_char_class(data : &Vec<(u8, Option)>) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[(u8, Option)]` [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/ast.rs:100:37 [INFO] [stderr] | [INFO] [stderr] 100 | fn compile_char_sequence(data : &Vec) -> Vec { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [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: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/ast.rs:120:30 [INFO] [stderr] | [INFO] [stderr] 120 | fn compile_choice(left : &Box, right : &Box) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `&Pattern` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::borrowed_box)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/ast.rs:120:53 [INFO] [stderr] | [INFO] [stderr] 120 | fn compile_choice(left : &Box, right : &Box) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `&Pattern` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/ast.rs:131:36 [INFO] [stderr] | [INFO] [stderr] 131 | fn compile_zero_or_more(data : &Box) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `&Pattern` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/ast.rs:141:35 [INFO] [stderr] | [INFO] [stderr] 141 | fn compile_one_or_more(data : &Box) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `&Pattern` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [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/ast.rs:153:32 [INFO] [stderr] | [INFO] [stderr] 153 | fn compile_sequence(data : &Vec>) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: change this to: `&[Box]` [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: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/ast.rs:163:32 [INFO] [stderr] | [INFO] [stderr] 163 | fn compile_optional(data : &Box) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `&Pattern` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/ast.rs:173:49 [INFO] [stderr] | [INFO] [stderr] 173 | fn compile_lookahead(success : bool, data : &Box) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `&Pattern` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:287:9 [INFO] [stderr] | [INFO] [stderr] 287 | / match pattern { [INFO] [stderr] 288 | | &CharClass(_) | &CharSequence(_) | &CharAny => { consumed = true; }, [INFO] [stderr] 289 | | &Variable(r, _, id, _) => { [INFO] [stderr] 290 | | if left_calls.contains(&id) { [INFO] [stderr] ... | [INFO] [stderr] 341 | | } [INFO] [stderr] 342 | | } [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] 287 | match *pattern { [INFO] [stderr] 288 | CharClass(_) | CharSequence(_) | CharAny => { consumed = true; }, [INFO] [stderr] 289 | Variable(r, _, id, _) => { [INFO] [stderr] 290 | if left_calls.contains(&id) { [INFO] [stderr] 291 | [INFO] [stderr] 292 | } else if right_calls.contains(&id) { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: called `is_some()` after searching an `Iterator` with find. This is more succinctly expressed by calling `any()`. [INFO] [stderr] --> src/ast.rs:294:27 [INFO] [stderr] | [INFO] [stderr] 294 | } else if stack.iter().find(|&&x| x.0 == id).is_some() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::search_is_some)] on by default [INFO] [stderr] = note: replace `find(|&&x| x.0 == id).is_some()` with `any(|&&x| x.0 == id)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#search_is_some [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/ast.rs:297:51 [INFO] [stderr] | [INFO] [stderr] 297 | .skip_while(|x| x.0 != id) [INFO] [stderr] | ___________________________________________________^ [INFO] [stderr] 298 | | .fold(false, |acc, &x| acc || x.1); [INFO] [stderr] | |__________________________________________________________^ help: try: `.any(|x| x.1)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_fold)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `for` loop [INFO] [stderr] --> src/parser.rs:40:28 [INFO] [stderr] | [INFO] [stderr] 40 | while let Some(item) = iterator.next() { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `for item in iterator { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_on_iterator)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_on_iterator [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/parser.rs:56:55 [INFO] [stderr] | [INFO] [stderr] 56 | tokens.push(Token::Letter('-' as u8)); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::char_lit_as_u8)] on by default [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'-' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/parser.rs:76:58 [INFO] [stderr] | [INFO] [stderr] 76 | if !item.is_alphanumeric() && item != '_' && name.len() != 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!name.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: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/parser.rs:81:33 [INFO] [stderr] | [INFO] [stderr] 81 | let n = (x - b'0') as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `i32::from(x - b'0')` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:147:9 [INFO] [stderr] | [INFO] [stderr] 147 | / if let &Token::Name(id) = token { [INFO] [stderr] 148 | | i += 1; [INFO] [stderr] 149 | | if let Some(brace_token) = tokens.get(i) { [INFO] [stderr] 150 | | i += 1; [INFO] [stderr] ... | [INFO] [stderr] 168 | | return Err(i); [INFO] [stderr] 169 | | } [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] 147 | if let Token::Name(id) = *token { [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/parser.rs:182:46 [INFO] [stderr] | [INFO] [stderr] 182 | fn parse_expression(i : &mut usize, tokens : &Vec) -> Result { [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:213:44 [INFO] [stderr] | [INFO] [stderr] 213 | fn parse_sequence(i : &mut usize, tokens : &Vec) -> Result { [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: redundant closure found [INFO] [stderr] --> src/parser.rs:235:53 [INFO] [stderr] | [INFO] [stderr] 235 | let boxed_patterns = patterns.drain(..).map(|x| Box::new(x)).collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: remove closure as shown: `Box::new` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [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:242:42 [INFO] [stderr] | [INFO] [stderr] 242 | fn parse_prefix(i : &mut usize, tokens : &Vec) -> Result { [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:264:42 [INFO] [stderr] | [INFO] [stderr] 264 | fn parse_suffix(i : &mut usize, tokens : &Vec) -> Result { [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:268:17 [INFO] [stderr] | [INFO] [stderr] 268 | / match token { [INFO] [stderr] 269 | | &Token::Plus => { [INFO] [stderr] 270 | | *i += 1; [INFO] [stderr] 271 | | Ok(ast::Pattern::OneOrMore(Box::new(p))) [INFO] [stderr] ... | [INFO] [stderr] 281 | | _ => Ok(p) [INFO] [stderr] 282 | | } [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] 268 | match *token { [INFO] [stderr] 269 | Token::Plus => { [INFO] [stderr] 270 | *i += 1; [INFO] [stderr] 271 | Ok(ast::Pattern::OneOrMore(Box::new(p))) [INFO] [stderr] 272 | }, [INFO] [stderr] 273 | Token::Asterik => { [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/parser.rs:289:43 [INFO] [stderr] | [INFO] [stderr] 289 | fn parse_primary(i : &mut usize, tokens : &Vec) -> Result { [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:292:9 [INFO] [stderr] | [INFO] [stderr] 292 | / match token { [INFO] [stderr] 293 | | &Token::Name(id) => { [INFO] [stderr] 294 | | *i += 1; [INFO] [stderr] 295 | | if tokens.get(*i) != Some(&Token::OpenBrace) { [INFO] [stderr] ... | [INFO] [stderr] 352 | | _ => Err(*i) [INFO] [stderr] 353 | | } [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] 292 | match *token { [INFO] [stderr] 293 | Token::Name(id) => { [INFO] [stderr] 294 | *i += 1; [INFO] [stderr] 295 | if tokens.get(*i) != Some(&Token::OpenBrace) { [INFO] [stderr] 296 | if tokens.get(*i) == Some(&Token::Colon) { [INFO] [stderr] 297 | *i += 1; [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/parser.rs:359:43 [INFO] [stderr] | [INFO] [stderr] 359 | fn parse_literal(i : &mut usize, tokens : &Vec) -> Result { [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:364:9 [INFO] [stderr] | [INFO] [stderr] 364 | / match token { [INFO] [stderr] 365 | | &Token::Letter(x) => { [INFO] [stderr] 366 | | *i += 1; [INFO] [stderr] 367 | | letters.push(x); [INFO] [stderr] 368 | | }, [INFO] [stderr] 369 | | _ => break [INFO] [stderr] 370 | | } [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] 364 | match *token { [INFO] [stderr] 365 | Token::Letter(x) => { [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/parser.rs:387:41 [INFO] [stderr] | [INFO] [stderr] 387 | fn parse_class(i : &mut usize, tokens : &Vec) -> Result { [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: this loop could be written as a `while let` loop [INFO] [stderr] --> src/parser.rs:394:5 [INFO] [stderr] | [INFO] [stderr] 394 | / loop { [INFO] [stderr] 395 | | let left_letter = match tokens.get(*i) { [INFO] [stderr] 396 | | Some(&Token::Letter(x)) => x, [INFO] [stderr] 397 | | _ => break [INFO] [stderr] ... | [INFO] [stderr] 410 | | ranges.push((left_letter, right_letter)); [INFO] [stderr] 411 | | } [INFO] [stderr] | |_____^ help: try: `while let Some(&Token::Letter(x)) = tokens.get(*i) { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/parser.rs:418:8 [INFO] [stderr] | [INFO] [stderr] 418 | if ranges.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!ranges.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/machine.rs:71:51 [INFO] [stderr] | [INFO] [stderr] 71 | pub fn execute(&mut self, input : Vec) -> Result, Error> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 35 [INFO] [stderr] --> src/machine.rs:71:5 [INFO] [stderr] | [INFO] [stderr] 71 | / pub fn execute(&mut self, input : Vec) -> Result, Error> { [INFO] [stderr] 72 | | let mut stack = Vec::new(); [INFO] [stderr] 73 | | let mut pos_stack = Vec::new(); [INFO] [stderr] 74 | | let mut result = HashSet::new(); [INFO] [stderr] ... | [INFO] [stderr] 309 | | } [INFO] [stderr] 310 | | } [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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/machine.rs:263:29 [INFO] [stderr] | [INFO] [stderr] 263 | / match stack[pos] { [INFO] [stderr] 264 | | StackFrame::Backtrack(p, _) => { [INFO] [stderr] 265 | | stack[pos] = StackFrame::Backtrack(p, i); [INFO] [stderr] 266 | | }, [INFO] [stderr] 267 | | _ => { } [INFO] [stderr] 268 | | } [INFO] [stderr] | |_____________________________^ [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] help: try this [INFO] [stderr] | [INFO] [stderr] 263 | if let StackFrame::Backtrack(p, _) = stack[pos] { [INFO] [stderr] 264 | stack[pos] = StackFrame::Backtrack(p, i); [INFO] [stderr] 265 | } [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/machine.rs:312:37 [INFO] [stderr] | [INFO] [stderr] 312 | pub fn get_jump_table(program : &Vec) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: change this to: `&[Instruction]` [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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/machine.rs:317:13 [INFO] [stderr] | [INFO] [stderr] 317 | / match program[i] { [INFO] [stderr] 318 | | Instruction::Return => current = i as isize, [INFO] [stderr] 319 | | _ => { } [INFO] [stderr] 320 | | } [INFO] [stderr] | |_____________^ help: try this: `if let Instruction::Return = program[i] { current = i as isize }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> src/machine.rs:347:24 [INFO] [stderr] | [INFO] [stderr] 347 | let mut file = File::open(path).ok().expect("rip"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ok_expect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stderr] [INFO] [stderr] error: build failed [INFO] running `"docker" "inspect" "36237ccd7ced7c21da2d29b116b7fe920c9c6b657e2602f2ed59906453d22215"` [INFO] running `"docker" "rm" "-f" "36237ccd7ced7c21da2d29b116b7fe920c9c6b657e2602f2ed59906453d22215"` [INFO] [stdout] 36237ccd7ced7c21da2d29b116b7fe920c9c6b657e2602f2ed59906453d22215