[INFO] updating cached repository fennekki/cbLIA [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/fennekki/cbLIA [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/fennekki/cbLIA" "work/ex/clippy-test-run/sources/stable/gh/fennekki/cbLIA"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/fennekki/cbLIA'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/fennekki/cbLIA" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/fennekki/cbLIA"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/fennekki/cbLIA'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] e1dd36e4a5e5437bc6d17cda39e31e7f26291daf [INFO] sha for GitHub repo fennekki/cbLIA: e1dd36e4a5e5437bc6d17cda39e31e7f26291daf [INFO] validating manifest of fennekki/cbLIA 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 fennekki/cbLIA 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 fennekki/cbLIA [INFO] finished frobbing fennekki/cbLIA [INFO] frobbed toml for fennekki/cbLIA written to work/ex/clippy-test-run/sources/stable/gh/fennekki/cbLIA/Cargo.toml [INFO] started frobbing fennekki/cbLIA [INFO] finished frobbing fennekki/cbLIA [INFO] frobbed toml for fennekki/cbLIA written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/fennekki/cbLIA/Cargo.toml [INFO] crate fennekki/cbLIA 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 fennekki/cbLIA 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/fennekki/cbLIA:/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] 03f0cdd93e222c73654f2b86dd02bc0554e93480b980fd55acc334aea6af7c2a [INFO] running `"docker" "start" "-a" "03f0cdd93e222c73654f2b86dd02bc0554e93480b980fd55acc334aea6af7c2a"` [INFO] [stderr] Checking memchr v0.1.11 [INFO] [stderr] Checking thread-id v2.0.0 [INFO] [stderr] Checking aho-corasick v0.5.3 [INFO] [stderr] Checking thread_local v0.2.7 [INFO] [stderr] Checking regex v0.1.80 [INFO] [stderr] Checking docopt v0.6.86 [INFO] [stderr] Checking cbLIA v0.0.1 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser.rs:159:30 [INFO] [stderr] | [INFO] [stderr] 159 | Some(Ok(Node::Argument { name: name, datatype: datatype })) [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] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser.rs:159:30 [INFO] [stderr] | [INFO] [stderr] 159 | Some(Ok(Node::Argument { name: name, datatype: datatype })) [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/parser.rs:159:42 [INFO] [stderr] | [INFO] [stderr] 159 | Some(Ok(Node::Argument { name: name, datatype: datatype })) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `datatype` [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] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser.rs:290:9 [INFO] [stderr] | [INFO] [stderr] 290 | datatype: datatype, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `datatype` [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:291:9 [INFO] [stderr] | [INFO] [stderr] 291 | arguments: arguments [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `arguments` [INFO] [stderr] | [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser.rs:159:42 [INFO] [stderr] | [INFO] [stderr] 159 | Some(Ok(Node::Argument { name: name, datatype: datatype })) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `datatype` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] | [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:315:30 [INFO] [stderr] | [INFO] [stderr] 315 | Some(Ok(Node::Root { functions: functions })) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `functions` [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:290:9 [INFO] [stderr] | [INFO] [stderr] 290 | datatype: datatype, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `datatype` [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:291:9 [INFO] [stderr] | [INFO] [stderr] 291 | arguments: arguments [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `arguments` [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:315:30 [INFO] [stderr] | [INFO] [stderr] 315 | Some(Ok(Node::Root { functions: functions })) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `functions` [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: unused import: `std::io::Bytes` [INFO] [stderr] --> src/tokenizer.rs:1:5 [INFO] [stderr] | [INFO] [stderr] 1 | use std::io::Bytes; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: You matched a field with a wildcard pattern. Consider using `..` instead [INFO] [stderr] --> src/generator.rs:253:21 [INFO] [stderr] | [INFO] [stderr] 253 | datatype: _ [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unneeded_field_pattern)] on by default [INFO] [stderr] = help: Try with `Argument { name: ref n, .. }` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'std::ascii::AsciiExt': use inherent methods instead [INFO] [stderr] --> src/parser.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use std::ascii::AsciiExt; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::ascii::AsciiExt` [INFO] [stderr] --> src/parser.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use std::ascii::AsciiExt; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::io::Read` [INFO] [stderr] --> src/main.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | use std::io::Read; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::io::Bytes` [INFO] [stderr] --> src/tokenizer.rs:1:5 [INFO] [stderr] | [INFO] [stderr] 1 | use std::io::Bytes; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: You matched a field with a wildcard pattern. Consider using `..` instead [INFO] [stderr] --> src/generator.rs:253:21 [INFO] [stderr] | [INFO] [stderr] 253 | datatype: _ [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unneeded_field_pattern)] on by default [INFO] [stderr] = help: Try with `Argument { name: ref n, .. }` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'std::ascii::AsciiExt': use inherent methods instead [INFO] [stderr] --> src/parser.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use std::ascii::AsciiExt; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: struct is never constructed: `ByteResultIterator` [INFO] [stderr] --> src/tokenizer.rs:55:1 [INFO] [stderr] | [INFO] [stderr] 55 | struct ByteResultIterator { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/tokenizer.rs:60:5 [INFO] [stderr] | [INFO] [stderr] 60 | pub fn new + 'static>(iter: T) -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `from_bytes` [INFO] [stderr] --> src/tokenizer.rs:87:5 [INFO] [stderr] | [INFO] [stderr] 87 | pub fn from_bytes(bytes: &[u8]) -> TokenIterator { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: crate `cbLIA` should have a snake case name such as `cb_lia` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: the `b @ _` pattern can be written as just `b` [INFO] [stderr] --> src/tokenizer.rs:259:21 [INFO] [stderr] | [INFO] [stderr] 259 | b @ _ => { [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: the `c @ _` pattern can be written as just `c` [INFO] [stderr] --> src/tokenizer.rs:369:25 [INFO] [stderr] | [INFO] [stderr] 369 | c @ _ => { [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [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:100:5 [INFO] [stderr] | [INFO] [stderr] 100 | / match &it.peek() { [INFO] [stderr] 101 | | &Some(&Ok(tokenizer::Token::Equals)) => { [INFO] [stderr] 102 | | // Consume that [INFO] [stderr] 103 | | { [INFO] [stderr] ... | [INFO] [stderr] 128 | | _ => {} [INFO] [stderr] 129 | | } [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] 100 | if let &Some(&Ok(tokenizer::Token::Equals)) = &it.peek() { [INFO] [stderr] 101 | // Consume that [INFO] [stderr] 102 | { [INFO] [stderr] 103 | it.next(); [INFO] [stderr] 104 | } [INFO] [stderr] 105 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/parser.rs:100:5 [INFO] [stderr] | [INFO] [stderr] 100 | / match &it.peek() { [INFO] [stderr] 101 | | &Some(&Ok(tokenizer::Token::Equals)) => { [INFO] [stderr] 102 | | // Consume that [INFO] [stderr] 103 | | { [INFO] [stderr] ... | [INFO] [stderr] 128 | | _ => {} [INFO] [stderr] 129 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 100 | match it.peek() { [INFO] [stderr] 101 | Some(&Ok(tokenizer::Token::Equals)) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the `e @ _` pattern can be written as just `e` [INFO] [stderr] --> src/parser.rs:188:22 [INFO] [stderr] | [INFO] [stderr] 188 | Some(Err(e @ _)) => return Some(Err(e)), [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: the `val @ _` pattern can be written as just `val` [INFO] [stderr] --> src/parser.rs:221:44 [INFO] [stderr] | [INFO] [stderr] 221 | Some(Ok(tokenizer::Token::Text(val @ _))) => val, [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: the `val @ _` pattern can be written as just `val` [INFO] [stderr] --> src/parser.rs:248:44 [INFO] [stderr] | [INFO] [stderr] 248 | Some(Ok(tokenizer::Token::Text(val @ _))) => val, [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: the `e @ _` pattern can be written as just `e` [INFO] [stderr] --> src/parser.rs:265:18 [INFO] [stderr] | [INFO] [stderr] 265 | Some(Err(e @ _)) => return Some(Err(e)), [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:12:21 [INFO] [stderr] | [INFO] [stderr] 12 | let functions = match root { [INFO] [stderr] | _____________________^ [INFO] [stderr] 13 | | &parser::Node::Root { functions: ref value } => value, [INFO] [stderr] 14 | | _ => unreachable!() [INFO] [stderr] 15 | | }; [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] 12 | let functions = match *root { [INFO] [stderr] 13 | parser::Node::Root { functions: ref value } => value, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:22:43 [INFO] [stderr] | [INFO] [stderr] 22 | let (name, datatype, arguments) = match function { [INFO] [stderr] | ___________________________________________^ [INFO] [stderr] 23 | | &parser::Node::Function { [INFO] [stderr] 24 | | name: ref n, [INFO] [stderr] 25 | | datatype: ref d, [INFO] [stderr] ... | [INFO] [stderr] 28 | | _ => unreachable!() [INFO] [stderr] 29 | | }; [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] 22 | let (name, datatype, arguments) = match *function { [INFO] [stderr] 23 | parser::Node::Function { [INFO] [stderr] 24 | name: ref n, [INFO] [stderr] 25 | datatype: ref d, [INFO] [stderr] 26 | arguments: ref a [INFO] [stderr] 27 | } => (n, d, a), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:34:27 [INFO] [stderr] | [INFO] [stderr] 34 | outfile.write_all(match datatype { [INFO] [stderr] | ___________________________^ [INFO] [stderr] 35 | | &parser::Datatype::Integer => { [INFO] [stderr] 36 | | b"" [INFO] [stderr] 37 | | }, [INFO] [stderr] ... | [INFO] [stderr] 50 | | } [INFO] [stderr] 51 | | }).unwrap(); [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] 34 | outfile.write_all(match *datatype { [INFO] [stderr] 35 | parser::Datatype::Integer => { [INFO] [stderr] 36 | b"" [INFO] [stderr] 37 | }, [INFO] [stderr] 38 | [INFO] [stderr] 39 | parser::Datatype::Float => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:57:36 [INFO] [stderr] | [INFO] [stderr] 57 | let (name, datatype) = match argument { [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 58 | | &parser::Node::Argument { [INFO] [stderr] 59 | | name: ref n, [INFO] [stderr] 60 | | datatype: ref d [INFO] [stderr] 61 | | } => (n, d), [INFO] [stderr] 62 | | _ => unreachable!() [INFO] [stderr] 63 | | }; [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] 57 | let (name, datatype) = match *argument { [INFO] [stderr] 58 | parser::Node::Argument { [INFO] [stderr] 59 | name: ref n, [INFO] [stderr] 60 | datatype: ref d [INFO] [stderr] 61 | } => (n, d), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:74:31 [INFO] [stderr] | [INFO] [stderr] 74 | outfile.write_all(match datatype { [INFO] [stderr] | _______________________________^ [INFO] [stderr] 75 | | &parser::Datatype::Integer => { [INFO] [stderr] 76 | | b"" [INFO] [stderr] 77 | | }, [INFO] [stderr] ... | [INFO] [stderr] 91 | | [INFO] [stderr] 92 | | }).unwrap(); [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] 74 | outfile.write_all(match *datatype { [INFO] [stderr] 75 | parser::Datatype::Integer => { [INFO] [stderr] 76 | b"" [INFO] [stderr] 77 | }, [INFO] [stderr] 78 | [INFO] [stderr] 79 | parser::Datatype::Float => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:101:36 [INFO] [stderr] | [INFO] [stderr] 101 | let (name, datatype) = match argument { [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 102 | | &parser::Node::Argument { [INFO] [stderr] 103 | | name: ref n, [INFO] [stderr] 104 | | datatype: ref d [INFO] [stderr] 105 | | } => (n, d), [INFO] [stderr] 106 | | _ => unreachable!() [INFO] [stderr] 107 | | }; [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] 101 | let (name, datatype) = match *argument { [INFO] [stderr] 102 | parser::Node::Argument { [INFO] [stderr] 103 | name: ref n, [INFO] [stderr] 104 | datatype: ref d [INFO] [stderr] 105 | } => (n, d), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:109:31 [INFO] [stderr] | [INFO] [stderr] 109 | outfile.write_all(match datatype { [INFO] [stderr] | _______________________________^ [INFO] [stderr] 110 | | &parser::Datatype::Integer => b" _DLL_PutInt(", [INFO] [stderr] 111 | | &parser::Datatype::Float => b" _DLL_PutFloat(", [INFO] [stderr] 112 | | &parser::Datatype::String => b" _DLL_PutString(", [INFO] [stderr] ... | [INFO] [stderr] 116 | | } [INFO] [stderr] 117 | | }).unwrap(); [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] 109 | outfile.write_all(match *datatype { [INFO] [stderr] 110 | parser::Datatype::Integer => b" _DLL_PutInt(", [INFO] [stderr] 111 | parser::Datatype::Float => b" _DLL_PutFloat(", [INFO] [stderr] 112 | parser::Datatype::String => b" _DLL_PutString(", [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:128:27 [INFO] [stderr] | [INFO] [stderr] 128 | outfile.write_all(match datatype { [INFO] [stderr] | ___________________________^ [INFO] [stderr] 129 | | &parser::Datatype::Integer => b" ret = _DLL_GetInt()\r\n", [INFO] [stderr] 130 | | &parser::Datatype::Float => b" ret# = _DLL_GetFloat()\r\n", [INFO] [stderr] 131 | | &parser::Datatype::String => b" ret$ = _DLL_GetString()\r\n", [INFO] [stderr] ... | [INFO] [stderr] 135 | | } [INFO] [stderr] 136 | | }).unwrap(); [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] 128 | outfile.write_all(match *datatype { [INFO] [stderr] 129 | parser::Datatype::Integer => b" ret = _DLL_GetInt()\r\n", [INFO] [stderr] 130 | parser::Datatype::Float => b" ret# = _DLL_GetFloat()\r\n", [INFO] [stderr] 131 | parser::Datatype::String => b" ret$ = _DLL_GetString()\r\n", [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:145:21 [INFO] [stderr] | [INFO] [stderr] 145 | let functions = match root { [INFO] [stderr] | _____________________^ [INFO] [stderr] 146 | | &parser::Node::Root { functions: ref value } => value, [INFO] [stderr] 147 | | _ => unreachable!() [INFO] [stderr] 148 | | }; [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] 145 | let functions = match *root { [INFO] [stderr] 146 | parser::Node::Root { functions: ref value } => value, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:155:43 [INFO] [stderr] | [INFO] [stderr] 155 | let (name, datatype, arguments) = match function { [INFO] [stderr] | ___________________________________________^ [INFO] [stderr] 156 | | &parser::Node::Function { [INFO] [stderr] 157 | | name: ref n, [INFO] [stderr] 158 | | datatype: ref d, [INFO] [stderr] ... | [INFO] [stderr] 161 | | _ => unreachable!() [INFO] [stderr] 162 | | }; [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] 155 | let (name, datatype, arguments) = match *function { [INFO] [stderr] 156 | parser::Node::Function { [INFO] [stderr] 157 | name: ref n, [INFO] [stderr] 158 | datatype: ref d, [INFO] [stderr] 159 | arguments: ref a [INFO] [stderr] 160 | } => (n, d, a), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:169:27 [INFO] [stderr] | [INFO] [stderr] 169 | outfile.write_all(match datatype { [INFO] [stderr] | ___________________________^ [INFO] [stderr] 170 | | &parser::Datatype::Integer => b"\tint ret;\n", [INFO] [stderr] 171 | | &parser::Datatype::Float => b"\tfloat ret;\n", [INFO] [stderr] 172 | | &parser::Datatype::String => { [INFO] [stderr] ... | [INFO] [stderr] 178 | | } [INFO] [stderr] 179 | | }).unwrap(); [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] 169 | outfile.write_all(match *datatype { [INFO] [stderr] 170 | parser::Datatype::Integer => b"\tint ret;\n", [INFO] [stderr] 171 | parser::Datatype::Float => b"\tfloat ret;\n", [INFO] [stderr] 172 | parser::Datatype::String => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:186:36 [INFO] [stderr] | [INFO] [stderr] 186 | let (name, datatype) = match argument { [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 187 | | &parser::Node::Argument { [INFO] [stderr] 188 | | name: ref n, [INFO] [stderr] 189 | | datatype: ref d [INFO] [stderr] 190 | | } => (n, d), [INFO] [stderr] 191 | | _ => unreachable!() [INFO] [stderr] 192 | | }; [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] 186 | let (name, datatype) = match *argument { [INFO] [stderr] 187 | parser::Node::Argument { [INFO] [stderr] 188 | name: ref n, [INFO] [stderr] 189 | datatype: ref d [INFO] [stderr] 190 | } => (n, d), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:194:31 [INFO] [stderr] | [INFO] [stderr] 194 | outfile.write_all(match datatype { [INFO] [stderr] | _______________________________^ [INFO] [stderr] 195 | | &parser::Datatype::Integer => b"\tint ", [INFO] [stderr] 196 | | &parser::Datatype::Float => b"\tfloat ", [INFO] [stderr] 197 | | &parser::Datatype::String => b"\tchar *", [INFO] [stderr] ... | [INFO] [stderr] 201 | | } [INFO] [stderr] 202 | | }).unwrap(); [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] 194 | outfile.write_all(match *datatype { [INFO] [stderr] 195 | parser::Datatype::Integer => b"\tint ", [INFO] [stderr] 196 | parser::Datatype::Float => b"\tfloat ", [INFO] [stderr] 197 | parser::Datatype::String => b"\tchar *", [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:206:31 [INFO] [stderr] | [INFO] [stderr] 206 | outfile.write_all(match datatype { [INFO] [stderr] | _______________________________^ [INFO] [stderr] 207 | | &parser::Datatype::Integer => b"*((int *)(&(", [INFO] [stderr] 208 | | &parser::Datatype::Float => b"*((float *)(&(", [INFO] [stderr] 209 | | &parser::Datatype::String => b"((char *)(&(", [INFO] [stderr] ... | [INFO] [stderr] 213 | | } [INFO] [stderr] 214 | | }).unwrap(); [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] 206 | outfile.write_all(match *datatype { [INFO] [stderr] 207 | parser::Datatype::Integer => b"*((int *)(&(", [INFO] [stderr] 208 | parser::Datatype::Float => b"*((float *)(&(", [INFO] [stderr] 209 | parser::Datatype::String => b"((char *)(&(", [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:216:31 [INFO] [stderr] | [INFO] [stderr] 216 | let temp_offset = match datatype { [INFO] [stderr] | _______________________________^ [INFO] [stderr] 217 | | // This needs to be done BEFORE we read the string [INFO] [stderr] 218 | | &parser::Datatype::String => { [INFO] [stderr] 219 | | offset.clone() + " + sizeof(int)" [INFO] [stderr] ... | [INFO] [stderr] 223 | | } [INFO] [stderr] 224 | | }; [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] 216 | let temp_offset = match *datatype { [INFO] [stderr] 217 | // This needs to be done BEFORE we read the string [INFO] [stderr] 218 | parser::Datatype::String => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:230:40 [INFO] [stderr] | [INFO] [stderr] 230 | offset = offset.clone() + &match datatype { [INFO] [stderr] | ________________________________________^ [INFO] [stderr] 231 | | &parser::Datatype::Integer => " + sizeof(int)".to_string(), [INFO] [stderr] 232 | | &parser::Datatype::Float => " + sizeof(float)".to_string(), [INFO] [stderr] 233 | | &parser::Datatype::String => { [INFO] [stderr] ... | [INFO] [stderr] 240 | | } [INFO] [stderr] 241 | | }[..]; [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] 230 | offset = offset.clone() + &match *datatype { [INFO] [stderr] 231 | parser::Datatype::Integer => " + sizeof(int)".to_string(), [INFO] [stderr] 232 | parser::Datatype::Float => " + sizeof(float)".to_string(), [INFO] [stderr] 233 | parser::Datatype::String => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:250:24 [INFO] [stderr] | [INFO] [stderr] 250 | let name = match argument { [INFO] [stderr] | ________________________^ [INFO] [stderr] 251 | | &parser::Node::Argument { [INFO] [stderr] 252 | | name: ref n, [INFO] [stderr] 253 | | datatype: _ [INFO] [stderr] 254 | | } => n, [INFO] [stderr] 255 | | _ => unreachable!() [INFO] [stderr] 256 | | }; [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] 250 | let name = match *argument { [INFO] [stderr] 251 | parser::Node::Argument { [INFO] [stderr] 252 | name: ref n, [INFO] [stderr] 253 | datatype: _ [INFO] [stderr] 254 | } => n, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:272:27 [INFO] [stderr] | [INFO] [stderr] 272 | outfile.write_all(match datatype { [INFO] [stderr] | ___________________________^ [INFO] [stderr] 273 | | &parser::Datatype::String => b"\tstrncpy(_data, ret, len);", [INFO] [stderr] 274 | | _ => b"\tmemcpy(_data, &ret, sizeof(ret));" [INFO] [stderr] 275 | | }).unwrap(); [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] 272 | outfile.write_all(match *datatype { [INFO] [stderr] 273 | parser::Datatype::String => b"\tstrncpy(_data, ret, len);", [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/main.rs:38:36 [INFO] [stderr] | [INFO] [stderr] 38 | .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: length comparison to zero [INFO] [stderr] --> src/main.rs:49:28 [INFO] [stderr] | [INFO] [stderr] 49 | let base_filename = if filename_stem.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!filename_stem.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: unused import: `std::ascii::AsciiExt` [INFO] [stderr] --> src/parser.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use std::ascii::AsciiExt; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::io::Read` [INFO] [stderr] --> src/main.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | use std::io::Read; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct is never constructed: `ByteResultIterator` [INFO] [stderr] --> src/tokenizer.rs:55:1 [INFO] [stderr] | [INFO] [stderr] 55 | struct ByteResultIterator { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/tokenizer.rs:60:5 [INFO] [stderr] | [INFO] [stderr] 60 | pub fn new + 'static>(iter: T) -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `from_bytes` [INFO] [stderr] --> src/tokenizer.rs:87:5 [INFO] [stderr] | [INFO] [stderr] 87 | pub fn from_bytes(bytes: &[u8]) -> TokenIterator { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: crate `cbLIA` should have a snake case name such as `cb_lia` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: the `b @ _` pattern can be written as just `b` [INFO] [stderr] --> src/tokenizer.rs:259:21 [INFO] [stderr] | [INFO] [stderr] 259 | b @ _ => { [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: the `c @ _` pattern can be written as just `c` [INFO] [stderr] --> src/tokenizer.rs:369:25 [INFO] [stderr] | [INFO] [stderr] 369 | c @ _ => { [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [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:100:5 [INFO] [stderr] | [INFO] [stderr] 100 | / match &it.peek() { [INFO] [stderr] 101 | | &Some(&Ok(tokenizer::Token::Equals)) => { [INFO] [stderr] 102 | | // Consume that [INFO] [stderr] 103 | | { [INFO] [stderr] ... | [INFO] [stderr] 128 | | _ => {} [INFO] [stderr] 129 | | } [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] 100 | if let &Some(&Ok(tokenizer::Token::Equals)) = &it.peek() { [INFO] [stderr] 101 | // Consume that [INFO] [stderr] 102 | { [INFO] [stderr] 103 | it.next(); [INFO] [stderr] 104 | } [INFO] [stderr] 105 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/parser.rs:100:5 [INFO] [stderr] | [INFO] [stderr] 100 | / match &it.peek() { [INFO] [stderr] 101 | | &Some(&Ok(tokenizer::Token::Equals)) => { [INFO] [stderr] 102 | | // Consume that [INFO] [stderr] 103 | | { [INFO] [stderr] ... | [INFO] [stderr] 128 | | _ => {} [INFO] [stderr] 129 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 100 | match it.peek() { [INFO] [stderr] 101 | Some(&Ok(tokenizer::Token::Equals)) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the `e @ _` pattern can be written as just `e` [INFO] [stderr] --> src/parser.rs:188:22 [INFO] [stderr] | [INFO] [stderr] 188 | Some(Err(e @ _)) => return Some(Err(e)), [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: the `val @ _` pattern can be written as just `val` [INFO] [stderr] --> src/parser.rs:221:44 [INFO] [stderr] | [INFO] [stderr] 221 | Some(Ok(tokenizer::Token::Text(val @ _))) => val, [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: the `val @ _` pattern can be written as just `val` [INFO] [stderr] --> src/parser.rs:248:44 [INFO] [stderr] | [INFO] [stderr] 248 | Some(Ok(tokenizer::Token::Text(val @ _))) => val, [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: the `e @ _` pattern can be written as just `e` [INFO] [stderr] --> src/parser.rs:265:18 [INFO] [stderr] | [INFO] [stderr] 265 | Some(Err(e @ _)) => return Some(Err(e)), [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:12:21 [INFO] [stderr] | [INFO] [stderr] 12 | let functions = match root { [INFO] [stderr] | _____________________^ [INFO] [stderr] 13 | | &parser::Node::Root { functions: ref value } => value, [INFO] [stderr] 14 | | _ => unreachable!() [INFO] [stderr] 15 | | }; [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] 12 | let functions = match *root { [INFO] [stderr] 13 | parser::Node::Root { functions: ref value } => value, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:22:43 [INFO] [stderr] | [INFO] [stderr] 22 | let (name, datatype, arguments) = match function { [INFO] [stderr] | ___________________________________________^ [INFO] [stderr] 23 | | &parser::Node::Function { [INFO] [stderr] 24 | | name: ref n, [INFO] [stderr] 25 | | datatype: ref d, [INFO] [stderr] ... | [INFO] [stderr] 28 | | _ => unreachable!() [INFO] [stderr] 29 | | }; [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] 22 | let (name, datatype, arguments) = match *function { [INFO] [stderr] 23 | parser::Node::Function { [INFO] [stderr] 24 | name: ref n, [INFO] [stderr] 25 | datatype: ref d, [INFO] [stderr] 26 | arguments: ref a [INFO] [stderr] 27 | } => (n, d, a), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:34:27 [INFO] [stderr] | [INFO] [stderr] 34 | outfile.write_all(match datatype { [INFO] [stderr] | ___________________________^ [INFO] [stderr] 35 | | &parser::Datatype::Integer => { [INFO] [stderr] 36 | | b"" [INFO] [stderr] 37 | | }, [INFO] [stderr] ... | [INFO] [stderr] 50 | | } [INFO] [stderr] 51 | | }).unwrap(); [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] 34 | outfile.write_all(match *datatype { [INFO] [stderr] 35 | parser::Datatype::Integer => { [INFO] [stderr] 36 | b"" [INFO] [stderr] 37 | }, [INFO] [stderr] 38 | [INFO] [stderr] 39 | parser::Datatype::Float => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:57:36 [INFO] [stderr] | [INFO] [stderr] 57 | let (name, datatype) = match argument { [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 58 | | &parser::Node::Argument { [INFO] [stderr] 59 | | name: ref n, [INFO] [stderr] 60 | | datatype: ref d [INFO] [stderr] 61 | | } => (n, d), [INFO] [stderr] 62 | | _ => unreachable!() [INFO] [stderr] 63 | | }; [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] 57 | let (name, datatype) = match *argument { [INFO] [stderr] 58 | parser::Node::Argument { [INFO] [stderr] 59 | name: ref n, [INFO] [stderr] 60 | datatype: ref d [INFO] [stderr] 61 | } => (n, d), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:74:31 [INFO] [stderr] | [INFO] [stderr] 74 | outfile.write_all(match datatype { [INFO] [stderr] | _______________________________^ [INFO] [stderr] 75 | | &parser::Datatype::Integer => { [INFO] [stderr] 76 | | b"" [INFO] [stderr] 77 | | }, [INFO] [stderr] ... | [INFO] [stderr] 91 | | [INFO] [stderr] 92 | | }).unwrap(); [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] 74 | outfile.write_all(match *datatype { [INFO] [stderr] 75 | parser::Datatype::Integer => { [INFO] [stderr] 76 | b"" [INFO] [stderr] 77 | }, [INFO] [stderr] 78 | [INFO] [stderr] 79 | parser::Datatype::Float => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:101:36 [INFO] [stderr] | [INFO] [stderr] 101 | let (name, datatype) = match argument { [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 102 | | &parser::Node::Argument { [INFO] [stderr] 103 | | name: ref n, [INFO] [stderr] 104 | | datatype: ref d [INFO] [stderr] 105 | | } => (n, d), [INFO] [stderr] 106 | | _ => unreachable!() [INFO] [stderr] 107 | | }; [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] 101 | let (name, datatype) = match *argument { [INFO] [stderr] 102 | parser::Node::Argument { [INFO] [stderr] 103 | name: ref n, [INFO] [stderr] 104 | datatype: ref d [INFO] [stderr] 105 | } => (n, d), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:109:31 [INFO] [stderr] | [INFO] [stderr] 109 | outfile.write_all(match datatype { [INFO] [stderr] | _______________________________^ [INFO] [stderr] 110 | | &parser::Datatype::Integer => b" _DLL_PutInt(", [INFO] [stderr] 111 | | &parser::Datatype::Float => b" _DLL_PutFloat(", [INFO] [stderr] 112 | | &parser::Datatype::String => b" _DLL_PutString(", [INFO] [stderr] ... | [INFO] [stderr] 116 | | } [INFO] [stderr] 117 | | }).unwrap(); [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] 109 | outfile.write_all(match *datatype { [INFO] [stderr] 110 | parser::Datatype::Integer => b" _DLL_PutInt(", [INFO] [stderr] 111 | parser::Datatype::Float => b" _DLL_PutFloat(", [INFO] [stderr] 112 | parser::Datatype::String => b" _DLL_PutString(", [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:128:27 [INFO] [stderr] | [INFO] [stderr] 128 | outfile.write_all(match datatype { [INFO] [stderr] | ___________________________^ [INFO] [stderr] 129 | | &parser::Datatype::Integer => b" ret = _DLL_GetInt()\r\n", [INFO] [stderr] 130 | | &parser::Datatype::Float => b" ret# = _DLL_GetFloat()\r\n", [INFO] [stderr] 131 | | &parser::Datatype::String => b" ret$ = _DLL_GetString()\r\n", [INFO] [stderr] ... | [INFO] [stderr] 135 | | } [INFO] [stderr] 136 | | }).unwrap(); [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] 128 | outfile.write_all(match *datatype { [INFO] [stderr] 129 | parser::Datatype::Integer => b" ret = _DLL_GetInt()\r\n", [INFO] [stderr] 130 | parser::Datatype::Float => b" ret# = _DLL_GetFloat()\r\n", [INFO] [stderr] 131 | parser::Datatype::String => b" ret$ = _DLL_GetString()\r\n", [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:145:21 [INFO] [stderr] | [INFO] [stderr] 145 | let functions = match root { [INFO] [stderr] | _____________________^ [INFO] [stderr] 146 | | &parser::Node::Root { functions: ref value } => value, [INFO] [stderr] 147 | | _ => unreachable!() [INFO] [stderr] 148 | | }; [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] 145 | let functions = match *root { [INFO] [stderr] 146 | parser::Node::Root { functions: ref value } => value, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:155:43 [INFO] [stderr] | [INFO] [stderr] 155 | let (name, datatype, arguments) = match function { [INFO] [stderr] | ___________________________________________^ [INFO] [stderr] 156 | | &parser::Node::Function { [INFO] [stderr] 157 | | name: ref n, [INFO] [stderr] 158 | | datatype: ref d, [INFO] [stderr] ... | [INFO] [stderr] 161 | | _ => unreachable!() [INFO] [stderr] 162 | | }; [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] 155 | let (name, datatype, arguments) = match *function { [INFO] [stderr] 156 | parser::Node::Function { [INFO] [stderr] 157 | name: ref n, [INFO] [stderr] 158 | datatype: ref d, [INFO] [stderr] 159 | arguments: ref a [INFO] [stderr] 160 | } => (n, d, a), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:169:27 [INFO] [stderr] | [INFO] [stderr] 169 | outfile.write_all(match datatype { [INFO] [stderr] | ___________________________^ [INFO] [stderr] 170 | | &parser::Datatype::Integer => b"\tint ret;\n", [INFO] [stderr] 171 | | &parser::Datatype::Float => b"\tfloat ret;\n", [INFO] [stderr] 172 | | &parser::Datatype::String => { [INFO] [stderr] ... | [INFO] [stderr] 178 | | } [INFO] [stderr] 179 | | }).unwrap(); [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] 169 | outfile.write_all(match *datatype { [INFO] [stderr] 170 | parser::Datatype::Integer => b"\tint ret;\n", [INFO] [stderr] 171 | parser::Datatype::Float => b"\tfloat ret;\n", [INFO] [stderr] 172 | parser::Datatype::String => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:186:36 [INFO] [stderr] | [INFO] [stderr] 186 | let (name, datatype) = match argument { [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 187 | | &parser::Node::Argument { [INFO] [stderr] 188 | | name: ref n, [INFO] [stderr] 189 | | datatype: ref d [INFO] [stderr] 190 | | } => (n, d), [INFO] [stderr] 191 | | _ => unreachable!() [INFO] [stderr] 192 | | }; [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] 186 | let (name, datatype) = match *argument { [INFO] [stderr] 187 | parser::Node::Argument { [INFO] [stderr] 188 | name: ref n, [INFO] [stderr] 189 | datatype: ref d [INFO] [stderr] 190 | } => (n, d), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:194:31 [INFO] [stderr] | [INFO] [stderr] 194 | outfile.write_all(match datatype { [INFO] [stderr] | _______________________________^ [INFO] [stderr] 195 | | &parser::Datatype::Integer => b"\tint ", [INFO] [stderr] 196 | | &parser::Datatype::Float => b"\tfloat ", [INFO] [stderr] 197 | | &parser::Datatype::String => b"\tchar *", [INFO] [stderr] ... | [INFO] [stderr] 201 | | } [INFO] [stderr] 202 | | }).unwrap(); [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] 194 | outfile.write_all(match *datatype { [INFO] [stderr] 195 | parser::Datatype::Integer => b"\tint ", [INFO] [stderr] 196 | parser::Datatype::Float => b"\tfloat ", [INFO] [stderr] 197 | parser::Datatype::String => b"\tchar *", [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:206:31 [INFO] [stderr] | [INFO] [stderr] 206 | outfile.write_all(match datatype { [INFO] [stderr] | _______________________________^ [INFO] [stderr] 207 | | &parser::Datatype::Integer => b"*((int *)(&(", [INFO] [stderr] 208 | | &parser::Datatype::Float => b"*((float *)(&(", [INFO] [stderr] 209 | | &parser::Datatype::String => b"((char *)(&(", [INFO] [stderr] ... | [INFO] [stderr] 213 | | } [INFO] [stderr] 214 | | }).unwrap(); [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] 206 | outfile.write_all(match *datatype { [INFO] [stderr] 207 | parser::Datatype::Integer => b"*((int *)(&(", [INFO] [stderr] 208 | parser::Datatype::Float => b"*((float *)(&(", [INFO] [stderr] 209 | parser::Datatype::String => b"((char *)(&(", [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:216:31 [INFO] [stderr] | [INFO] [stderr] 216 | let temp_offset = match datatype { [INFO] [stderr] | _______________________________^ [INFO] [stderr] 217 | | // This needs to be done BEFORE we read the string [INFO] [stderr] 218 | | &parser::Datatype::String => { [INFO] [stderr] 219 | | offset.clone() + " + sizeof(int)" [INFO] [stderr] ... | [INFO] [stderr] 223 | | } [INFO] [stderr] 224 | | }; [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] 216 | let temp_offset = match *datatype { [INFO] [stderr] 217 | // This needs to be done BEFORE we read the string [INFO] [stderr] 218 | parser::Datatype::String => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:230:40 [INFO] [stderr] | [INFO] [stderr] 230 | offset = offset.clone() + &match datatype { [INFO] [stderr] | ________________________________________^ [INFO] [stderr] 231 | | &parser::Datatype::Integer => " + sizeof(int)".to_string(), [INFO] [stderr] 232 | | &parser::Datatype::Float => " + sizeof(float)".to_string(), [INFO] [stderr] 233 | | &parser::Datatype::String => { [INFO] [stderr] ... | [INFO] [stderr] 240 | | } [INFO] [stderr] 241 | | }[..]; [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] 230 | offset = offset.clone() + &match *datatype { [INFO] [stderr] 231 | parser::Datatype::Integer => " + sizeof(int)".to_string(), [INFO] [stderr] 232 | parser::Datatype::Float => " + sizeof(float)".to_string(), [INFO] [stderr] 233 | parser::Datatype::String => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:250:24 [INFO] [stderr] | [INFO] [stderr] 250 | let name = match argument { [INFO] [stderr] | ________________________^ [INFO] [stderr] 251 | | &parser::Node::Argument { [INFO] [stderr] 252 | | name: ref n, [INFO] [stderr] 253 | | datatype: _ [INFO] [stderr] 254 | | } => n, [INFO] [stderr] 255 | | _ => unreachable!() [INFO] [stderr] 256 | | }; [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] 250 | let name = match *argument { [INFO] [stderr] 251 | parser::Node::Argument { [INFO] [stderr] 252 | name: ref n, [INFO] [stderr] 253 | datatype: _ [INFO] [stderr] 254 | } => n, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/generator.rs:272:27 [INFO] [stderr] | [INFO] [stderr] 272 | outfile.write_all(match datatype { [INFO] [stderr] | ___________________________^ [INFO] [stderr] 273 | | &parser::Datatype::String => b"\tstrncpy(_data, ret, len);", [INFO] [stderr] 274 | | _ => b"\tmemcpy(_data, &ret, sizeof(ret));" [INFO] [stderr] 275 | | }).unwrap(); [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] 272 | outfile.write_all(match *datatype { [INFO] [stderr] 273 | parser::Datatype::String => b"\tstrncpy(_data, ret, len);", [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/main.rs:38:36 [INFO] [stderr] | [INFO] [stderr] 38 | .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: length comparison to zero [INFO] [stderr] --> src/main.rs:49:28 [INFO] [stderr] | [INFO] [stderr] 49 | let base_filename = if filename_stem.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!filename_stem.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] Finished dev [unoptimized + debuginfo] target(s) in 7.75s [INFO] running `"docker" "inspect" "03f0cdd93e222c73654f2b86dd02bc0554e93480b980fd55acc334aea6af7c2a"` [INFO] running `"docker" "rm" "-f" "03f0cdd93e222c73654f2b86dd02bc0554e93480b980fd55acc334aea6af7c2a"` [INFO] [stdout] 03f0cdd93e222c73654f2b86dd02bc0554e93480b980fd55acc334aea6af7c2a