[INFO] updating cached repository AntonioCarta/dragon_compiler [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/AntonioCarta/dragon_compiler [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/AntonioCarta/dragon_compiler" "work/ex/clippy-test-run/sources/stable/gh/AntonioCarta/dragon_compiler"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/AntonioCarta/dragon_compiler'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/AntonioCarta/dragon_compiler" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/AntonioCarta/dragon_compiler"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/AntonioCarta/dragon_compiler'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 63446519197371c6da920314494ad8a50b072833 [INFO] sha for GitHub repo AntonioCarta/dragon_compiler: 63446519197371c6da920314494ad8a50b072833 [INFO] validating manifest of AntonioCarta/dragon_compiler 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 AntonioCarta/dragon_compiler 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 AntonioCarta/dragon_compiler [INFO] finished frobbing AntonioCarta/dragon_compiler [INFO] frobbed toml for AntonioCarta/dragon_compiler written to work/ex/clippy-test-run/sources/stable/gh/AntonioCarta/dragon_compiler/Cargo.toml [INFO] started frobbing AntonioCarta/dragon_compiler [INFO] finished frobbing AntonioCarta/dragon_compiler [INFO] frobbed toml for AntonioCarta/dragon_compiler written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/AntonioCarta/dragon_compiler/Cargo.toml [INFO] crate AntonioCarta/dragon_compiler 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 AntonioCarta/dragon_compiler against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-2/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/AntonioCarta/dragon_compiler:/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] ba7d25ccaf49a65e0fc411ef0051f1f90e2b08cd50d30ac95e183335e5f09912 [INFO] running `"docker" "start" "-a" "ba7d25ccaf49a65e0fc411ef0051f1f90e2b08cd50d30ac95e183335e5f09912"` [INFO] [stderr] Checking mini_compiler v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lexer.rs:64:13 [INFO] [stderr] | [INFO] [stderr] 64 | tag : tag, [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `tag` [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/lexer.rs:65:13 [INFO] [stderr] | [INFO] [stderr] 65 | info : info, [INFO] [stderr] | ^^^^^^^^^^^ help: replace it with: `info` [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:23:13 [INFO] [stderr] | [INFO] [stderr] 23 | scanner : scanner, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `scanner` [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/test/parser_test.rs:65:17 [INFO] [stderr] | [INFO] [stderr] 65 | decls : decls, [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `decls` [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/test/parser_test.rs:66:17 [INFO] [stderr] | [INFO] [stderr] 66 | stmts : stmts, [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `stmts` [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/symbol_table.rs:40:13 [INFO] [stderr] | [INFO] [stderr] 40 | typeinfo : typeinfo, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: replace it with: `typeinfo` [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/symbol_table.rs:41:13 [INFO] [stderr] | [INFO] [stderr] 41 | address : address, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `address` [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/code_generator.rs:100:13 [INFO] [stderr] | [INFO] [stderr] 100 | parser : parser, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `parser` [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/code_generator.rs:115:13 [INFO] [stderr] | [INFO] [stderr] 115 | op : op, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `op` [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/code_generator.rs:116:13 [INFO] [stderr] | [INFO] [stderr] 116 | res : res, [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `res` [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/code_generator.rs:117:13 [INFO] [stderr] | [INFO] [stderr] 117 | x : x, [INFO] [stderr] | ^^^^^^^ help: replace it with: `x` [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/code_generator.rs:118:13 [INFO] [stderr] | [INFO] [stderr] 118 | y : y, [INFO] [stderr] | ^^^^^^^ help: replace it with: `y` [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/code_generator.rs:152:13 [INFO] [stderr] | [INFO] [stderr] 152 | op : op, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `op` [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/statement.rs:52:13 [INFO] [stderr] | [INFO] [stderr] 52 | decls : decls, [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `decls` [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/statement.rs:53:13 [INFO] [stderr] | [INFO] [stderr] 53 | stmts : stmts, [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `stmts` [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/statement.rs:71:13 [INFO] [stderr] | [INFO] [stderr] 71 | break_list : break_list, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `break_list` [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/statement.rs:230:13 [INFO] [stderr] | [INFO] [stderr] 230 | break_list : break_list, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `break_list` [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/lexer.rs:64:13 [INFO] [stderr] | [INFO] [stderr] 64 | tag : tag, [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `tag` [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/lexer.rs:65:13 [INFO] [stderr] | [INFO] [stderr] 65 | info : info, [INFO] [stderr] | ^^^^^^^^^^^ help: replace it with: `info` [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:23:13 [INFO] [stderr] | [INFO] [stderr] 23 | scanner : scanner, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `scanner` [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/test/parser_test.rs:65:17 [INFO] [stderr] | [INFO] [stderr] 65 | decls : decls, [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `decls` [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/test/parser_test.rs:66:17 [INFO] [stderr] | [INFO] [stderr] 66 | stmts : stmts, [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `stmts` [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/symbol_table.rs:40:13 [INFO] [stderr] | [INFO] [stderr] 40 | typeinfo : typeinfo, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: replace it with: `typeinfo` [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/symbol_table.rs:41:13 [INFO] [stderr] | [INFO] [stderr] 41 | address : address, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `address` [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/code_generator.rs:100:13 [INFO] [stderr] | [INFO] [stderr] 100 | parser : parser, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `parser` [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/code_generator.rs:115:13 [INFO] [stderr] | [INFO] [stderr] 115 | op : op, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `op` [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/code_generator.rs:116:13 [INFO] [stderr] | [INFO] [stderr] 116 | res : res, [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `res` [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/code_generator.rs:117:13 [INFO] [stderr] | [INFO] [stderr] 117 | x : x, [INFO] [stderr] | ^^^^^^^ help: replace it with: `x` [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/code_generator.rs:118:13 [INFO] [stderr] | [INFO] [stderr] 118 | y : y, [INFO] [stderr] | ^^^^^^^ help: replace it with: `y` [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/code_generator.rs:152:13 [INFO] [stderr] | [INFO] [stderr] 152 | op : op, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `op` [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/statement.rs:52:13 [INFO] [stderr] | [INFO] [stderr] 52 | decls : decls, [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `decls` [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/statement.rs:53:13 [INFO] [stderr] | [INFO] [stderr] 53 | stmts : stmts, [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `stmts` [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/statement.rs:71:13 [INFO] [stderr] | [INFO] [stderr] 71 | break_list : break_list, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `break_list` [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/statement.rs:230:13 [INFO] [stderr] | [INFO] [stderr] 230 | break_list : break_list, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `break_list` [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 imports: `AddressMode`, `Address` [INFO] [stderr] --> src/interpreter.rs:1:30 [INFO] [stderr] | [INFO] [stderr] 1 | use code_generator::{OpCode, AddressMode, AddressCode, Address, IntermediateRepresentation}; [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `Scanner` [INFO] [stderr] --> src/test/lexer_test.rs:4:13 [INFO] [stderr] | [INFO] [stderr] 4 | use lexer::{Scanner}; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/test/parser_test.rs:24:9 [INFO] [stderr] | [INFO] [stderr] 24 | res [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/test/parser_test.rs:23:19 [INFO] [stderr] | [INFO] [stderr] 23 | let res = S::parse(&mut parser); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/test/parser_test.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | res [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/test/parser_test.rs:30:19 [INFO] [stderr] | [INFO] [stderr] 30 | let res = B::parse(&mut parser); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/test/parser_test.rs:38:9 [INFO] [stderr] | [INFO] [stderr] 38 | res [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/test/parser_test.rs:37:19 [INFO] [stderr] | [INFO] [stderr] 37 | let res = N::parse(&mut parser); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/test/parser_test.rs:45:9 [INFO] [stderr] | [INFO] [stderr] 45 | res [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/test/parser_test.rs:44:19 [INFO] [stderr] | [INFO] [stderr] 44 | let res = D::parse(&mut parser); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AddressMode`, `Address` [INFO] [stderr] --> src/interpreter.rs:1:30 [INFO] [stderr] | [INFO] [stderr] 1 | use code_generator::{OpCode, AddressMode, AddressCode, Address, IntermediateRepresentation}; [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/lexer.rs:148:5 [INFO] [stderr] | [INFO] [stderr] 148 | pub fn new() -> Scanner { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: field is never used: `id` [INFO] [stderr] --> src/code_generator.rs:59:9 [INFO] [stderr] | [INFO] [stderr] 59 | id : i32, [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `stack` [INFO] [stderr] --> src/interpreter.rs:5:5 [INFO] [stderr] | [INFO] [stderr] 5 | stack : Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/lexer.rs:128:32 [INFO] [stderr] | [INFO] [stderr] 128 | Cow::Owned(format!("{}", x)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using .to_string(): `x.to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/lexer.rs:203:13 [INFO] [stderr] | [INFO] [stderr] 203 | v = v*10; [INFO] [stderr] | ^^^^^^^^ help: replace it with: `v *= 10` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:223:17 [INFO] [stderr] | [INFO] [stderr] 223 | if x == "if".as_bytes() { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"if"` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::string_lit_as_bytes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:225:24 [INFO] [stderr] | [INFO] [stderr] 225 | } else if x == "else".as_bytes() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"else"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:227:24 [INFO] [stderr] | [INFO] [stderr] 227 | } else if x == "while".as_bytes() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"while"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:229:24 [INFO] [stderr] | [INFO] [stderr] 229 | } else if x == "break".as_bytes() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"break"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:231:24 [INFO] [stderr] | [INFO] [stderr] 231 | } else if x == "True".as_bytes() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"True"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:233:24 [INFO] [stderr] | [INFO] [stderr] 233 | } else if x == "False".as_bytes() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"False"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:235:24 [INFO] [stderr] | [INFO] [stderr] 235 | } else if x == "int".as_bytes() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"int"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:237:24 [INFO] [stderr] | [INFO] [stderr] 237 | } else if x == "float".as_bytes() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"float"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lexer.rs:271:12 [INFO] [stderr] | [INFO] [stderr] 271 | if self.buffer.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.buffer.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: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/symbol_table.rs:44:57 [INFO] [stderr] | [INFO] [stderr] 44 | let array_width = info.typeinfo.dim_width.iter().fold(0, |sum, x| sum + x); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `.sum()` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/code_generator.rs:126:19 [INFO] [stderr] | [INFO] [stderr] 126 | let stp = self.stack_pointer.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.stack_pointer` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/code_generator.rs:133:19 [INFO] [stderr] | [INFO] [stderr] 133 | let stp = self.stack_pointer.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.stack_pointer` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/interpreter.rs:26:13 [INFO] [stderr] | [INFO] [stderr] 26 | i = i + 1; [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `i += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast/expression.rs:35:9 [INFO] [stderr] | [INFO] [stderr] 35 | / match self { [INFO] [stderr] 36 | | &BoolExpr::Or(ref e1, ref e2) => { [INFO] [stderr] 37 | | let a1 = e1.generate_code(code_gen); [INFO] [stderr] 38 | | let a2 = e2.generate_code(code_gen); [INFO] [stderr] ... | [INFO] [stderr] 90 | | }, [INFO] [stderr] 91 | | } [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] 35 | match *self { [INFO] [stderr] 36 | BoolExpr::Or(ref e1, ref e2) => { [INFO] [stderr] 37 | let a1 = e1.generate_code(code_gen); [INFO] [stderr] 38 | let a2 = e2.generate_code(code_gen); [INFO] [stderr] 39 | let tmp = code_gen.new_temp(); [INFO] [stderr] 40 | code_gen.emit(OpCode::Or, tmp, a1.place, a2.place); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast/expression.rs:70:17 [INFO] [stderr] | [INFO] [stderr] 70 | / match rel { [INFO] [stderr] 71 | | &Relop::Ge => { [INFO] [stderr] 72 | | code_gen.emit(OpCode::IsNeg, tmp, tmp, tmp); [INFO] [stderr] 73 | | code_gen.emit(OpCode::Not, tmp, tmp, tmp); [INFO] [stderr] ... | [INFO] [stderr] 84 | | }, [INFO] [stderr] 85 | | } [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] 70 | match *rel { [INFO] [stderr] 71 | Relop::Ge => { [INFO] [stderr] 72 | code_gen.emit(OpCode::IsNeg, tmp, tmp, tmp); [INFO] [stderr] 73 | code_gen.emit(OpCode::Not, tmp, tmp, tmp); [INFO] [stderr] 74 | }, [INFO] [stderr] 75 | Relop::Gr => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast/expression.rs:182:9 [INFO] [stderr] | [INFO] [stderr] 182 | / match self { [INFO] [stderr] 183 | | &NumExpr::Add(ref e1, ref e2) => { [INFO] [stderr] 184 | | let a1 = e1.generate_code(code_gen); [INFO] [stderr] 185 | | let a2 = e2.generate_code(code_gen); [INFO] [stderr] ... | [INFO] [stderr] 237 | | }, [INFO] [stderr] 238 | | } [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] 182 | match *self { [INFO] [stderr] 183 | NumExpr::Add(ref e1, ref e2) => { [INFO] [stderr] 184 | let a1 = e1.generate_code(code_gen); [INFO] [stderr] 185 | let a2 = e2.generate_code(code_gen); [INFO] [stderr] 186 | let tmp = code_gen.new_temp(); [INFO] [stderr] 187 | code_gen.emit(OpCode::Add, tmp, a1.place, a2.place); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast/expression.rs:342:9 [INFO] [stderr] | [INFO] [stderr] 342 | / match self { [INFO] [stderr] 343 | | &Loc::Index(ref s, ref v) => { [INFO] [stderr] 344 | | // TODO: cloning the array every time is not the best we can do. [INFO] [stderr] 345 | | let info = match code_gen.sym_table.get_ide(s) { [INFO] [stderr] ... | [INFO] [stderr] 371 | | } [INFO] [stderr] 372 | | } [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] 342 | match *self { [INFO] [stderr] 343 | Loc::Index(ref s, ref v) => { [INFO] [stderr] 344 | // TODO: cloning the array every time is not the best we can do. [INFO] [stderr] 345 | let info = match code_gen.sym_table.get_ide(s) { [INFO] [stderr] 346 | Some(info) => { [INFO] [stderr] 347 | info.typeinfo.dim_width.clone() [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ast/expression.rs:388:20 [INFO] [stderr] | [INFO] [stderr] 388 | if v.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!v.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: manual implementation of an assign operation [INFO] [stderr] --> src/ast/statement.rs:145:21 [INFO] [stderr] | [INFO] [stderr] 145 | w[j] = w[j] * dim; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `w[j] *= dim` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ast/statement.rs:149:20 [INFO] [stderr] | [INFO] [stderr] 149 | if w.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!w.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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast/statement.rs:178:9 [INFO] [stderr] | [INFO] [stderr] 178 | / match self { [INFO] [stderr] 179 | | &Statement::Assign(ref l, ref be) => { [INFO] [stderr] 180 | | let place = l.generate_code(code_gen); [INFO] [stderr] 181 | | let battr = be.generate_code(code_gen); [INFO] [stderr] ... | [INFO] [stderr] 226 | | }, [INFO] [stderr] 227 | | } [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] 178 | match *self { [INFO] [stderr] 179 | Statement::Assign(ref l, ref be) => { [INFO] [stderr] 180 | let place = l.generate_code(code_gen); [INFO] [stderr] 181 | let battr = be.generate_code(code_gen); [INFO] [stderr] 182 | code_gen.emit(OpCode::Mov, place.place, battr.place, battr.place); [INFO] [stderr] 183 | }, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/lexer.rs:148:5 [INFO] [stderr] | [INFO] [stderr] 148 | pub fn new() -> Scanner { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: type alias is never used: `SAst` [INFO] [stderr] --> src/test/parser_test.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | type SAst = Box; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `add` [INFO] [stderr] --> src/test/parser_test.rs:52:5 [INFO] [stderr] | [INFO] [stderr] 52 | fn add(e1 : NAst, e2 : NAst) -> NAst { nbox(N::Add(e1, e2)) } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `id` [INFO] [stderr] --> src/code_generator.rs:59:9 [INFO] [stderr] | [INFO] [stderr] 59 | id : i32, [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `stack` [INFO] [stderr] --> src/interpreter.rs:5:5 [INFO] [stderr] | [INFO] [stderr] 5 | stack : Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/lexer.rs:128:32 [INFO] [stderr] | [INFO] [stderr] 128 | Cow::Owned(format!("{}", x)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using .to_string(): `x.to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/lexer.rs:203:13 [INFO] [stderr] | [INFO] [stderr] 203 | v = v*10; [INFO] [stderr] | ^^^^^^^^ help: replace it with: `v *= 10` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:223:17 [INFO] [stderr] | [INFO] [stderr] 223 | if x == "if".as_bytes() { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"if"` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::string_lit_as_bytes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:225:24 [INFO] [stderr] | [INFO] [stderr] 225 | } else if x == "else".as_bytes() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"else"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:227:24 [INFO] [stderr] | [INFO] [stderr] 227 | } else if x == "while".as_bytes() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"while"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:229:24 [INFO] [stderr] | [INFO] [stderr] 229 | } else if x == "break".as_bytes() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"break"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:231:24 [INFO] [stderr] | [INFO] [stderr] 231 | } else if x == "True".as_bytes() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"True"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:233:24 [INFO] [stderr] | [INFO] [stderr] 233 | } else if x == "False".as_bytes() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"False"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:235:24 [INFO] [stderr] | [INFO] [stderr] 235 | } else if x == "int".as_bytes() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"int"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lexer.rs:237:24 [INFO] [stderr] | [INFO] [stderr] 237 | } else if x == "float".as_bytes() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"float"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lexer.rs:271:12 [INFO] [stderr] | [INFO] [stderr] 271 | if self.buffer.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.buffer.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: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/symbol_table.rs:44:57 [INFO] [stderr] | [INFO] [stderr] 44 | let array_width = info.typeinfo.dim_width.iter().fold(0, |sum, x| sum + x); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `.sum()` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/code_generator.rs:126:19 [INFO] [stderr] | [INFO] [stderr] 126 | let stp = self.stack_pointer.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.stack_pointer` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/code_generator.rs:133:19 [INFO] [stderr] | [INFO] [stderr] 133 | let stp = self.stack_pointer.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.stack_pointer` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/interpreter.rs:26:13 [INFO] [stderr] | [INFO] [stderr] 26 | i = i + 1; [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `i += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast/expression.rs:35:9 [INFO] [stderr] | [INFO] [stderr] 35 | / match self { [INFO] [stderr] 36 | | &BoolExpr::Or(ref e1, ref e2) => { [INFO] [stderr] 37 | | let a1 = e1.generate_code(code_gen); [INFO] [stderr] 38 | | let a2 = e2.generate_code(code_gen); [INFO] [stderr] ... | [INFO] [stderr] 90 | | }, [INFO] [stderr] 91 | | } [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] 35 | match *self { [INFO] [stderr] 36 | BoolExpr::Or(ref e1, ref e2) => { [INFO] [stderr] 37 | let a1 = e1.generate_code(code_gen); [INFO] [stderr] 38 | let a2 = e2.generate_code(code_gen); [INFO] [stderr] 39 | let tmp = code_gen.new_temp(); [INFO] [stderr] 40 | code_gen.emit(OpCode::Or, tmp, a1.place, a2.place); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast/expression.rs:70:17 [INFO] [stderr] | [INFO] [stderr] 70 | / match rel { [INFO] [stderr] 71 | | &Relop::Ge => { [INFO] [stderr] 72 | | code_gen.emit(OpCode::IsNeg, tmp, tmp, tmp); [INFO] [stderr] 73 | | code_gen.emit(OpCode::Not, tmp, tmp, tmp); [INFO] [stderr] ... | [INFO] [stderr] 84 | | }, [INFO] [stderr] 85 | | } [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] 70 | match *rel { [INFO] [stderr] 71 | Relop::Ge => { [INFO] [stderr] 72 | code_gen.emit(OpCode::IsNeg, tmp, tmp, tmp); [INFO] [stderr] 73 | code_gen.emit(OpCode::Not, tmp, tmp, tmp); [INFO] [stderr] 74 | }, [INFO] [stderr] 75 | Relop::Gr => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast/expression.rs:182:9 [INFO] [stderr] | [INFO] [stderr] 182 | / match self { [INFO] [stderr] 183 | | &NumExpr::Add(ref e1, ref e2) => { [INFO] [stderr] 184 | | let a1 = e1.generate_code(code_gen); [INFO] [stderr] 185 | | let a2 = e2.generate_code(code_gen); [INFO] [stderr] ... | [INFO] [stderr] 237 | | }, [INFO] [stderr] 238 | | } [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] 182 | match *self { [INFO] [stderr] 183 | NumExpr::Add(ref e1, ref e2) => { [INFO] [stderr] 184 | let a1 = e1.generate_code(code_gen); [INFO] [stderr] 185 | let a2 = e2.generate_code(code_gen); [INFO] [stderr] 186 | let tmp = code_gen.new_temp(); [INFO] [stderr] 187 | code_gen.emit(OpCode::Add, tmp, a1.place, a2.place); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast/expression.rs:342:9 [INFO] [stderr] | [INFO] [stderr] 342 | / match self { [INFO] [stderr] 343 | | &Loc::Index(ref s, ref v) => { [INFO] [stderr] 344 | | // TODO: cloning the array every time is not the best we can do. [INFO] [stderr] 345 | | let info = match code_gen.sym_table.get_ide(s) { [INFO] [stderr] ... | [INFO] [stderr] 371 | | } [INFO] [stderr] 372 | | } [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] 342 | match *self { [INFO] [stderr] 343 | Loc::Index(ref s, ref v) => { [INFO] [stderr] 344 | // TODO: cloning the array every time is not the best we can do. [INFO] [stderr] 345 | let info = match code_gen.sym_table.get_ide(s) { [INFO] [stderr] 346 | Some(info) => { [INFO] [stderr] 347 | info.typeinfo.dim_width.clone() [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ast/expression.rs:388:20 [INFO] [stderr] | [INFO] [stderr] 388 | if v.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!v.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: manual implementation of an assign operation [INFO] [stderr] --> src/ast/statement.rs:145:21 [INFO] [stderr] | [INFO] [stderr] 145 | w[j] = w[j] * dim; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `w[j] *= dim` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ast/statement.rs:149:20 [INFO] [stderr] | [INFO] [stderr] 149 | if w.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!w.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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast/statement.rs:178:9 [INFO] [stderr] | [INFO] [stderr] 178 | / match self { [INFO] [stderr] 179 | | &Statement::Assign(ref l, ref be) => { [INFO] [stderr] 180 | | let place = l.generate_code(code_gen); [INFO] [stderr] 181 | | let battr = be.generate_code(code_gen); [INFO] [stderr] ... | [INFO] [stderr] 226 | | }, [INFO] [stderr] 227 | | } [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] 178 | match *self { [INFO] [stderr] 179 | Statement::Assign(ref l, ref be) => { [INFO] [stderr] 180 | let place = l.generate_code(code_gen); [INFO] [stderr] 181 | let battr = be.generate_code(code_gen); [INFO] [stderr] 182 | code_gen.emit(OpCode::Mov, place.place, battr.place, battr.place); [INFO] [stderr] 183 | }, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 1.44s [INFO] running `"docker" "inspect" "ba7d25ccaf49a65e0fc411ef0051f1f90e2b08cd50d30ac95e183335e5f09912"` [INFO] running `"docker" "rm" "-f" "ba7d25ccaf49a65e0fc411ef0051f1f90e2b08cd50d30ac95e183335e5f09912"` [INFO] [stdout] ba7d25ccaf49a65e0fc411ef0051f1f90e2b08cd50d30ac95e183335e5f09912