[INFO] updating cached repository keatinge/rust-to-mips-compiler [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/keatinge/rust-to-mips-compiler [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/keatinge/rust-to-mips-compiler" "work/ex/clippy-test-run/sources/stable/gh/keatinge/rust-to-mips-compiler"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/keatinge/rust-to-mips-compiler'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/keatinge/rust-to-mips-compiler" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/keatinge/rust-to-mips-compiler"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/keatinge/rust-to-mips-compiler'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 42e1328fb446ba0d7ed35d3b48b1355ba57d55e6 [INFO] sha for GitHub repo keatinge/rust-to-mips-compiler: 42e1328fb446ba0d7ed35d3b48b1355ba57d55e6 [INFO] validating manifest of keatinge/rust-to-mips-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 keatinge/rust-to-mips-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 keatinge/rust-to-mips-compiler [INFO] finished frobbing keatinge/rust-to-mips-compiler [INFO] frobbed toml for keatinge/rust-to-mips-compiler written to work/ex/clippy-test-run/sources/stable/gh/keatinge/rust-to-mips-compiler/Cargo.toml [INFO] started frobbing keatinge/rust-to-mips-compiler [INFO] finished frobbing keatinge/rust-to-mips-compiler [INFO] frobbed toml for keatinge/rust-to-mips-compiler written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/keatinge/rust-to-mips-compiler/Cargo.toml [INFO] crate keatinge/rust-to-mips-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 keatinge/rust-to-mips-compiler against stable+rustflags=-Dclippy::into_iter_on_array for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-4/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/keatinge/rust-to-mips-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 -Dclippy::into_iter_on_array" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 2fc08d176eb18f8ac30a04aa2a2d6da4ca0c17a5dd87bb4109507187f10e31c7 [INFO] running `"docker" "start" "-a" "2fc08d176eb18f8ac30a04aa2a2d6da4ca0c17a5dd87bb4109507187f10e31c7"` [INFO] [stderr] Checking mipscompiler v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lexer.rs:42:9 [INFO] [stderr] | [INFO] [stderr] 42 | return self.index >= self.chars.len() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.index >= self.chars.len()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lexer.rs:63:9 [INFO] [stderr] | [INFO] [stderr] 63 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lexer.rs:88:9 [INFO] [stderr] | [INFO] [stderr] 88 | return tok [INFO] [stderr] | ^^^^^^^^^^ help: remove `return` as shown: `tok` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lexer.rs:147:9 [INFO] [stderr] | [INFO] [stderr] 147 | / return match as_str.as_ref() { [INFO] [stderr] 148 | | "fn" => Token::Fn, [INFO] [stderr] 149 | | "let" => Token::Let, [INFO] [stderr] 150 | | "for" => Token::For, [INFO] [stderr] ... | [INFO] [stderr] 157 | | _=> Token::Ident(&self.src[start_i..self.index]) [INFO] [stderr] 158 | | }; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 147 | match as_str.as_ref() { [INFO] [stderr] 148 | "fn" => Token::Fn, [INFO] [stderr] 149 | "let" => Token::Let, [INFO] [stderr] 150 | "for" => Token::For, [INFO] [stderr] 151 | "in" => Token::In, [INFO] [stderr] 152 | "if" => Token::If, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:124:13 [INFO] [stderr] | [INFO] [stderr] 124 | return true; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `true` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:127:13 [INFO] [stderr] | [INFO] [stderr] 127 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:181:17 [INFO] [stderr] | [INFO] [stderr] 181 | return Expr::VarLookup(self.force_eat_return_ident()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Expr::VarLookup(self.force_eat_return_ident())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:270:9 [INFO] [stderr] | [INFO] [stderr] 270 | return Statement::If(IfData{condition: inner_condition, block}) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Statement::If(IfData{condition: inner_condition, block})` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:306:9 [INFO] [stderr] | [INFO] [stderr] 306 | return stmt; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `stmt` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::rc::Rc` [INFO] [stderr] --> src/mips.rs:3:5 [INFO] [stderr] | [INFO] [stderr] 3 | use std::rc::Rc; [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: Variant name ends with the enum's name [INFO] [stderr] --> src/mips.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | TempRegister(u8), [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::enum_variant_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stderr] [INFO] [stderr] warning: Variant name ends with the enum's name [INFO] [stderr] --> src/mips.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | SaveRegister(u8), [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stderr] [INFO] [stderr] warning: Variant name ends with the enum's name [INFO] [stderr] --> src/mips.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 10 | ArgRegister(u8), [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/mips.rs:116:9 [INFO] [stderr] | [INFO] [stderr] 116 | return None [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lexer.rs:42:9 [INFO] [stderr] | [INFO] [stderr] 42 | return self.index >= self.chars.len() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.index >= self.chars.len()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lexer.rs:63:9 [INFO] [stderr] | [INFO] [stderr] 63 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lexer.rs:88:9 [INFO] [stderr] | [INFO] [stderr] 88 | return tok [INFO] [stderr] | ^^^^^^^^^^ help: remove `return` as shown: `tok` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lexer.rs:147:9 [INFO] [stderr] | [INFO] [stderr] 147 | / return match as_str.as_ref() { [INFO] [stderr] 148 | | "fn" => Token::Fn, [INFO] [stderr] 149 | | "let" => Token::Let, [INFO] [stderr] 150 | | "for" => Token::For, [INFO] [stderr] ... | [INFO] [stderr] 157 | | _=> Token::Ident(&self.src[start_i..self.index]) [INFO] [stderr] 158 | | }; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 147 | match as_str.as_ref() { [INFO] [stderr] 148 | "fn" => Token::Fn, [INFO] [stderr] 149 | "let" => Token::Let, [INFO] [stderr] 150 | "for" => Token::For, [INFO] [stderr] 151 | "in" => Token::In, [INFO] [stderr] 152 | "if" => Token::If, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:124:13 [INFO] [stderr] | [INFO] [stderr] 124 | return true; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `true` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:127:13 [INFO] [stderr] | [INFO] [stderr] 127 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:181:17 [INFO] [stderr] | [INFO] [stderr] 181 | return Expr::VarLookup(self.force_eat_return_ident()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Expr::VarLookup(self.force_eat_return_ident())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:270:9 [INFO] [stderr] | [INFO] [stderr] 270 | return Statement::If(IfData{condition: inner_condition, block}) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Statement::If(IfData{condition: inner_condition, block})` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:306:9 [INFO] [stderr] | [INFO] [stderr] 306 | return stmt; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `stmt` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::rc::Rc` [INFO] [stderr] --> src/mips.rs:3:5 [INFO] [stderr] | [INFO] [stderr] 3 | use std::rc::Rc; [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: Variant name ends with the enum's name [INFO] [stderr] --> src/mips.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | TempRegister(u8), [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::enum_variant_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stderr] [INFO] [stderr] warning: Variant name ends with the enum's name [INFO] [stderr] --> src/mips.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | SaveRegister(u8), [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stderr] [INFO] [stderr] warning: Variant name ends with the enum's name [INFO] [stderr] --> src/mips.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 10 | ArgRegister(u8), [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/mips.rs:116:9 [INFO] [stderr] | [INFO] [stderr] 116 | return None [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unused variable: `s` [INFO] [stderr] --> src/parser.rs:179:34 [INFO] [stderr] | [INFO] [stderr] 179 | &lexer::Token::Ident(s) if next == Some(&lexer::Token::OpenParen) => { self.parse_fn_call() } [INFO] [stderr] | ^ help: consider using `_s` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `s` [INFO] [stderr] --> src/parser.rs:180:34 [INFO] [stderr] | [INFO] [stderr] 180 | &lexer::Token::Ident(s) => { [INFO] [stderr] | ^ help: consider using `_s` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `s` [INFO] [stderr] --> src/parser.rs:290:38 [INFO] [stderr] | [INFO] [stderr] 290 | if let (&lexer::Token::Ident(s), Some(&lexer::Token::Equal)) = (self.current_tok(), self.peek()) { [INFO] [stderr] | ^ help: consider using `_s` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `s` [INFO] [stderr] --> src/parser.rs:179:34 [INFO] [stderr] | [INFO] [stderr] 179 | &lexer::Token::Ident(s) if next == Some(&lexer::Token::OpenParen) => { self.parse_fn_call() } [INFO] [stderr] | ^ help: consider using `_s` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `s` [INFO] [stderr] --> src/parser.rs:180:34 [INFO] [stderr] | [INFO] [stderr] 180 | &lexer::Token::Ident(s) => { [INFO] [stderr] | ^ help: consider using `_s` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `s` [INFO] [stderr] --> src/parser.rs:290:38 [INFO] [stderr] | [INFO] [stderr] 290 | if let (&lexer::Token::Ident(s), Some(&lexer::Token::Equal)) = (self.current_tok(), self.peek()) { [INFO] [stderr] | ^ help: consider using `_s` instead [INFO] [stderr] [INFO] [stderr] warning: function is never used: `is_identifier` [INFO] [stderr] --> src/lexer.rs:180:1 [INFO] [stderr] | [INFO] [stderr] 180 | pub fn is_identifier(t: &Token) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `expect` [INFO] [stderr] --> src/parser.rs:132:5 [INFO] [stderr] | [INFO] [stderr] 132 | fn expect(&self, t: &lexer::Token) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `force_eat_return_i32_lit` [INFO] [stderr] --> src/parser.rs:157:5 [INFO] [stderr] | [INFO] [stderr] 157 | fn force_eat_return_i32_lit(&mut self) -> i32 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `BeqLit` [INFO] [stderr] --> src/mips.rs:61:5 [INFO] [stderr] | [INFO] [stderr] 61 | BeqLit(Register, i32, &'a str), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the `a @ _` pattern can be written as just `a` [INFO] [stderr] --> src/lexer.rs:84:13 [INFO] [stderr] | [INFO] [stderr] 84 | a@ _=> panic!("Unrecognized token {:?}", a) [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lexer.rs:181:5 [INFO] [stderr] | [INFO] [stderr] 181 | / match t { [INFO] [stderr] 182 | | &Token::Ident(_) => true, [INFO] [stderr] 183 | | _ => false [INFO] [stderr] 184 | | } [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] 181 | match *t { [INFO] [stderr] 182 | Token::Ident(_) => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: variant `i32` should have a camel case name such as `I32` [INFO] [stderr] --> src/parser.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | i32 [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_camel_case_types)] on by default [INFO] [stderr] [INFO] [stderr] warning: variant `I32_lit` should have a camel case name such as `I32Lit` [INFO] [stderr] --> src/parser.rs:24:5 [INFO] [stderr] | [INFO] [stderr] 24 | I32_lit(i32) [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the `a @ _` pattern can be written as just `a` [INFO] [stderr] --> src/parser.rs:153:13 [INFO] [stderr] | [INFO] [stderr] 153 | a@ _ => panic!("Expected an ident but found a {:?}", a), [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 `a @ _` pattern can be written as just `a` [INFO] [stderr] --> src/parser.rs:162:13 [INFO] [stderr] | [INFO] [stderr] 162 | a@ _ => panic!("Expected an i32lit but found a {:?}", a) [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/parser.rs:177:9 [INFO] [stderr] | [INFO] [stderr] 177 | / match self.current_tok() { [INFO] [stderr] 178 | | &lexer::Token::I32Literal(i) => { self.bump(); Expr::I32_lit(i)} [INFO] [stderr] 179 | | &lexer::Token::Ident(s) if next == Some(&lexer::Token::OpenParen) => { self.parse_fn_call() } [INFO] [stderr] 180 | | &lexer::Token::Ident(s) => { [INFO] [stderr] ... | [INFO] [stderr] 184 | | [INFO] [stderr] 185 | | } [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] 177 | match *self.current_tok() { [INFO] [stderr] 178 | lexer::Token::I32Literal(i) => { self.bump(); Expr::I32_lit(i)} [INFO] [stderr] 179 | lexer::Token::Ident(s) if next == Some(&lexer::Token::OpenParen) => { self.parse_fn_call() } [INFO] [stderr] 180 | lexer::Token::Ident(s) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:254:9 [INFO] [stderr] | [INFO] [stderr] 254 | / match op { [INFO] [stderr] 255 | | &lexer::Token::EqualEqual => Condition::Equals(lhs, rhs), [INFO] [stderr] 256 | | _ => unimplemented!("Condition's other than == are not implemented") [INFO] [stderr] 257 | | [INFO] [stderr] 258 | | } [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] 254 | match *op { [INFO] [stderr] 255 | lexer::Token::EqualEqual => Condition::Equals(lhs, rhs), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/mips.rs:18:18 [INFO] [stderr] | [INFO] [stderr] 18 | fn to_string(&self) -> String { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/mips.rs:19:9 [INFO] [stderr] | [INFO] [stderr] 19 | / match self { [INFO] [stderr] 20 | | &Register::TempRegister(n) => format!("$t{}", n), [INFO] [stderr] 21 | | &Register::SaveRegister(n) => format!("$s{}", n), [INFO] [stderr] 22 | | &Register::ArgRegister(n) => format!("$a{}", n), [INFO] [stderr] ... | [INFO] [stderr] 26 | | [INFO] [stderr] 27 | | } [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] 19 | match *self { [INFO] [stderr] 20 | Register::TempRegister(n) => format!("$t{}", n), [INFO] [stderr] 21 | Register::SaveRegister(n) => format!("$s{}", n), [INFO] [stderr] 22 | Register::ArgRegister(n) => format!("$a{}", n), [INFO] [stderr] 23 | Register::V0 => "$v0".to_owned(), [INFO] [stderr] 24 | Register::Ra => "$ra".to_owned(), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/mips.rs:72:9 [INFO] [stderr] | [INFO] [stderr] 72 | / match self { [INFO] [stderr] 73 | | &Instruction::Li(LiData{src, data}) => format!("li {}, {}", src.to_string(), data), [INFO] [stderr] 74 | | &Instruction::Move(SrcDest {src, dest}) => format!("move {}, {}", dest.to_string(), src.to_string()), [INFO] [stderr] 75 | | [INFO] [stderr] ... | [INFO] [stderr] 89 | | &Instruction::LoadWord(SrcDestOffset {src, dest, offset}) => format!("lw {}, {}({})", dest.to_string(), offset, src.to_string()), [INFO] [stderr] 90 | | } [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] 72 | match *self { [INFO] [stderr] 73 | Instruction::Li(LiData{src, data}) => format!("li {}, {}", src.to_string(), data), [INFO] [stderr] 74 | Instruction::Move(SrcDest {src, dest}) => format!("move {}, {}", dest.to_string(), src.to_string()), [INFO] [stderr] 75 | [INFO] [stderr] 76 | Instruction::FnDecl(name) => format!("{}:", name), [INFO] [stderr] 77 | Instruction::FnDeclOwned(ref name) => format!("{}:", name), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/mips.rs:164:9 [INFO] [stderr] | [INFO] [stderr] 164 | self.var_lookups.get(name).expect(&format!("Expected to lookup register for {} but found nothing!", name)).clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*self.var_lookups.get(name).expect(&format!("Expected to lookup register for {} but found nothing!", name))` [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: use of `expect` followed by a function call [INFO] [stderr] --> src/mips.rs:164:36 [INFO] [stderr] | [INFO] [stderr] 164 | self.var_lookups.get(name).expect(&format!("Expected to lookup register for {} but found nothing!", name)).clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("Expected to lookup register for {} but found nothing!", name))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/mips.rs:252:9 [INFO] [stderr] | [INFO] [stderr] 252 | / match cond { [INFO] [stderr] 253 | | &parser::Condition::Equals(ref expr1, ref expr2) => { [INFO] [stderr] 254 | | let lhs_reg = self.reg_ctr.request_anonymous_register(); [INFO] [stderr] 255 | | let lhs_eval_inst = self.evaluate_into_register(lhs_reg, expr1); [INFO] [stderr] ... | [INFO] [stderr] 282 | | } [INFO] [stderr] 283 | | } [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] 252 | match *cond { [INFO] [stderr] 253 | parser::Condition::Equals(ref expr1, ref expr2) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/mips.rs:325:54 [INFO] [stderr] | [INFO] [stderr] 325 | fn call_function(&mut self, name: &'a str, args: &Vec>) -> Vec> { // Calls the function and leaves the result in v0 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[parser::Expr<'a>]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/mips.rs:369:9 [INFO] [stderr] | [INFO] [stderr] 369 | / match expr { [INFO] [stderr] 370 | | &parser::Expr::I32_lit(the_i32) => { [INFO] [stderr] 371 | | vec![Instruction::Li(LiData {src: reg, data: the_i32})] [INFO] [stderr] 372 | | } [INFO] [stderr] ... | [INFO] [stderr] 381 | | [INFO] [stderr] 382 | | } [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] 369 | match *expr { [INFO] [stderr] 370 | parser::Expr::I32_lit(the_i32) => { [INFO] [stderr] 371 | vec![Instruction::Li(LiData {src: reg, data: the_i32})] [INFO] [stderr] 372 | } [INFO] [stderr] 373 | parser::Expr::VarLookup(var_name) => { [INFO] [stderr] 374 | vec![Instruction::Move(SrcDest {src: self.reg_ctr.get_register(var_name), dest: reg})] [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/mips.rs:402:30 [INFO] [stderr] | [INFO] [stderr] 402 | let new_instrs = match statement { [INFO] [stderr] | ______________________________^ [INFO] [stderr] 403 | | &parser::Statement::Declaration(ref DeclData) => { [INFO] [stderr] 404 | | self.declaration_to_mips(DeclData) [INFO] [stderr] 405 | | } [INFO] [stderr] ... | [INFO] [stderr] 420 | | } [INFO] [stderr] 421 | | }; [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] 402 | let new_instrs = match *statement { [INFO] [stderr] 403 | parser::Statement::Declaration(ref DeclData) => { [INFO] [stderr] 404 | self.declaration_to_mips(DeclData) [INFO] [stderr] 405 | } [INFO] [stderr] 406 | parser::Statement::Evaluation(parser::Expr::Funcall(name, ref args)) => { [INFO] [stderr] 407 | self.call_function(name, args) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: variable `DeclData` should have a snake case name such as `decl_data` [INFO] [stderr] --> src/mips.rs:403:49 [INFO] [stderr] | [INFO] [stderr] 403 | &parser::Statement::Declaration(ref DeclData) => { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/main.rs:29:5 [INFO] [stderr] | [INFO] [stderr] 29 | output.write_all(mips_str.as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: function is never used: `is_identifier` [INFO] [stderr] --> src/lexer.rs:180:1 [INFO] [stderr] | [INFO] [stderr] 180 | pub fn is_identifier(t: &Token) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `expect` [INFO] [stderr] --> src/parser.rs:132:5 [INFO] [stderr] | [INFO] [stderr] 132 | fn expect(&self, t: &lexer::Token) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `force_eat_return_i32_lit` [INFO] [stderr] --> src/parser.rs:157:5 [INFO] [stderr] | [INFO] [stderr] 157 | fn force_eat_return_i32_lit(&mut self) -> i32 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `BeqLit` [INFO] [stderr] --> src/mips.rs:61:5 [INFO] [stderr] | [INFO] [stderr] 61 | BeqLit(Register, i32, &'a str), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the `a @ _` pattern can be written as just `a` [INFO] [stderr] --> src/lexer.rs:84:13 [INFO] [stderr] | [INFO] [stderr] 84 | a@ _=> panic!("Unrecognized token {:?}", a) [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lexer.rs:181:5 [INFO] [stderr] | [INFO] [stderr] 181 | / match t { [INFO] [stderr] 182 | | &Token::Ident(_) => true, [INFO] [stderr] 183 | | _ => false [INFO] [stderr] 184 | | } [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] 181 | match *t { [INFO] [stderr] 182 | Token::Ident(_) => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: variant `i32` should have a camel case name such as `I32` [INFO] [stderr] --> src/parser.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | i32 [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_camel_case_types)] on by default [INFO] [stderr] [INFO] [stderr] warning: variant `I32_lit` should have a camel case name such as `I32Lit` [INFO] [stderr] --> src/parser.rs:24:5 [INFO] [stderr] | [INFO] [stderr] 24 | I32_lit(i32) [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the `a @ _` pattern can be written as just `a` [INFO] [stderr] --> src/parser.rs:153:13 [INFO] [stderr] | [INFO] [stderr] 153 | a@ _ => panic!("Expected an ident but found a {:?}", a), [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 `a @ _` pattern can be written as just `a` [INFO] [stderr] --> src/parser.rs:162:13 [INFO] [stderr] | [INFO] [stderr] 162 | a@ _ => panic!("Expected an i32lit but found a {:?}", a) [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/parser.rs:177:9 [INFO] [stderr] | [INFO] [stderr] 177 | / match self.current_tok() { [INFO] [stderr] 178 | | &lexer::Token::I32Literal(i) => { self.bump(); Expr::I32_lit(i)} [INFO] [stderr] 179 | | &lexer::Token::Ident(s) if next == Some(&lexer::Token::OpenParen) => { self.parse_fn_call() } [INFO] [stderr] 180 | | &lexer::Token::Ident(s) => { [INFO] [stderr] ... | [INFO] [stderr] 184 | | [INFO] [stderr] 185 | | } [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] 177 | match *self.current_tok() { [INFO] [stderr] 178 | lexer::Token::I32Literal(i) => { self.bump(); Expr::I32_lit(i)} [INFO] [stderr] 179 | lexer::Token::Ident(s) if next == Some(&lexer::Token::OpenParen) => { self.parse_fn_call() } [INFO] [stderr] 180 | lexer::Token::Ident(s) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:254:9 [INFO] [stderr] | [INFO] [stderr] 254 | / match op { [INFO] [stderr] 255 | | &lexer::Token::EqualEqual => Condition::Equals(lhs, rhs), [INFO] [stderr] 256 | | _ => unimplemented!("Condition's other than == are not implemented") [INFO] [stderr] 257 | | [INFO] [stderr] 258 | | } [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] 254 | match *op { [INFO] [stderr] 255 | lexer::Token::EqualEqual => Condition::Equals(lhs, rhs), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/mips.rs:18:18 [INFO] [stderr] | [INFO] [stderr] 18 | fn to_string(&self) -> String { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/mips.rs:19:9 [INFO] [stderr] | [INFO] [stderr] 19 | / match self { [INFO] [stderr] 20 | | &Register::TempRegister(n) => format!("$t{}", n), [INFO] [stderr] 21 | | &Register::SaveRegister(n) => format!("$s{}", n), [INFO] [stderr] 22 | | &Register::ArgRegister(n) => format!("$a{}", n), [INFO] [stderr] ... | [INFO] [stderr] 26 | | [INFO] [stderr] 27 | | } [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] 19 | match *self { [INFO] [stderr] 20 | Register::TempRegister(n) => format!("$t{}", n), [INFO] [stderr] 21 | Register::SaveRegister(n) => format!("$s{}", n), [INFO] [stderr] 22 | Register::ArgRegister(n) => format!("$a{}", n), [INFO] [stderr] 23 | Register::V0 => "$v0".to_owned(), [INFO] [stderr] 24 | Register::Ra => "$ra".to_owned(), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/mips.rs:72:9 [INFO] [stderr] | [INFO] [stderr] 72 | / match self { [INFO] [stderr] 73 | | &Instruction::Li(LiData{src, data}) => format!("li {}, {}", src.to_string(), data), [INFO] [stderr] 74 | | &Instruction::Move(SrcDest {src, dest}) => format!("move {}, {}", dest.to_string(), src.to_string()), [INFO] [stderr] 75 | | [INFO] [stderr] ... | [INFO] [stderr] 89 | | &Instruction::LoadWord(SrcDestOffset {src, dest, offset}) => format!("lw {}, {}({})", dest.to_string(), offset, src.to_string()), [INFO] [stderr] 90 | | } [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] 72 | match *self { [INFO] [stderr] 73 | Instruction::Li(LiData{src, data}) => format!("li {}, {}", src.to_string(), data), [INFO] [stderr] 74 | Instruction::Move(SrcDest {src, dest}) => format!("move {}, {}", dest.to_string(), src.to_string()), [INFO] [stderr] 75 | [INFO] [stderr] 76 | Instruction::FnDecl(name) => format!("{}:", name), [INFO] [stderr] 77 | Instruction::FnDeclOwned(ref name) => format!("{}:", name), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/mips.rs:164:9 [INFO] [stderr] | [INFO] [stderr] 164 | self.var_lookups.get(name).expect(&format!("Expected to lookup register for {} but found nothing!", name)).clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*self.var_lookups.get(name).expect(&format!("Expected to lookup register for {} but found nothing!", name))` [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: use of `expect` followed by a function call [INFO] [stderr] --> src/mips.rs:164:36 [INFO] [stderr] | [INFO] [stderr] 164 | self.var_lookups.get(name).expect(&format!("Expected to lookup register for {} but found nothing!", name)).clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("Expected to lookup register for {} but found nothing!", name))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/mips.rs:252:9 [INFO] [stderr] | [INFO] [stderr] 252 | / match cond { [INFO] [stderr] 253 | | &parser::Condition::Equals(ref expr1, ref expr2) => { [INFO] [stderr] 254 | | let lhs_reg = self.reg_ctr.request_anonymous_register(); [INFO] [stderr] 255 | | let lhs_eval_inst = self.evaluate_into_register(lhs_reg, expr1); [INFO] [stderr] ... | [INFO] [stderr] 282 | | } [INFO] [stderr] 283 | | } [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] 252 | match *cond { [INFO] [stderr] 253 | parser::Condition::Equals(ref expr1, ref expr2) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/mips.rs:325:54 [INFO] [stderr] | [INFO] [stderr] 325 | fn call_function(&mut self, name: &'a str, args: &Vec>) -> Vec> { // Calls the function and leaves the result in v0 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[parser::Expr<'a>]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/mips.rs:369:9 [INFO] [stderr] | [INFO] [stderr] 369 | / match expr { [INFO] [stderr] 370 | | &parser::Expr::I32_lit(the_i32) => { [INFO] [stderr] 371 | | vec![Instruction::Li(LiData {src: reg, data: the_i32})] [INFO] [stderr] 372 | | } [INFO] [stderr] ... | [INFO] [stderr] 381 | | [INFO] [stderr] 382 | | } [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] 369 | match *expr { [INFO] [stderr] 370 | parser::Expr::I32_lit(the_i32) => { [INFO] [stderr] 371 | vec![Instruction::Li(LiData {src: reg, data: the_i32})] [INFO] [stderr] 372 | } [INFO] [stderr] 373 | parser::Expr::VarLookup(var_name) => { [INFO] [stderr] 374 | vec![Instruction::Move(SrcDest {src: self.reg_ctr.get_register(var_name), dest: reg})] [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/mips.rs:402:30 [INFO] [stderr] | [INFO] [stderr] 402 | let new_instrs = match statement { [INFO] [stderr] | ______________________________^ [INFO] [stderr] 403 | | &parser::Statement::Declaration(ref DeclData) => { [INFO] [stderr] 404 | | self.declaration_to_mips(DeclData) [INFO] [stderr] 405 | | } [INFO] [stderr] ... | [INFO] [stderr] 420 | | } [INFO] [stderr] 421 | | }; [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] 402 | let new_instrs = match *statement { [INFO] [stderr] 403 | parser::Statement::Declaration(ref DeclData) => { [INFO] [stderr] 404 | self.declaration_to_mips(DeclData) [INFO] [stderr] 405 | } [INFO] [stderr] 406 | parser::Statement::Evaluation(parser::Expr::Funcall(name, ref args)) => { [INFO] [stderr] 407 | self.call_function(name, args) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: variable `DeclData` should have a snake case name such as `decl_data` [INFO] [stderr] --> src/mips.rs:403:49 [INFO] [stderr] | [INFO] [stderr] 403 | &parser::Statement::Declaration(ref DeclData) => { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/main.rs:29:5 [INFO] [stderr] | [INFO] [stderr] 29 | output.write_all(mips_str.as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 1.47s [INFO] running `"docker" "inspect" "2fc08d176eb18f8ac30a04aa2a2d6da4ca0c17a5dd87bb4109507187f10e31c7"` [INFO] running `"docker" "rm" "-f" "2fc08d176eb18f8ac30a04aa2a2d6da4ca0c17a5dd87bb4109507187f10e31c7"` [INFO] [stdout] 2fc08d176eb18f8ac30a04aa2a2d6da4ca0c17a5dd87bb4109507187f10e31c7