[INFO] updating cached repository lonnng/lua-rs [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/lonnng/lua-rs [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/lonnng/lua-rs" "work/ex/clippy-test-run/sources/stable/gh/lonnng/lua-rs"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/lonnng/lua-rs'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/lonnng/lua-rs" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/lonnng/lua-rs"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/lonnng/lua-rs'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 26e9264506ac60648fefe7ab18d8610d41169280 [INFO] sha for GitHub repo lonnng/lua-rs: 26e9264506ac60648fefe7ab18d8610d41169280 [INFO] validating manifest of lonnng/lua-rs 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 lonnng/lua-rs 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 lonnng/lua-rs [INFO] finished frobbing lonnng/lua-rs [INFO] frobbed toml for lonnng/lua-rs written to work/ex/clippy-test-run/sources/stable/gh/lonnng/lua-rs/Cargo.toml [INFO] started frobbing lonnng/lua-rs [INFO] finished frobbing lonnng/lua-rs [INFO] frobbed toml for lonnng/lua-rs written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/lonnng/lua-rs/Cargo.toml [INFO] crate lonnng/lua-rs 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 lonnng/lua-rs against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-6/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/lonnng/lua-rs:/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] 5d823f3e3cc4995d65407adf22c8e398cce0d35c4ab2fbef9eb81769edec9996 [INFO] running `"docker" "start" "-a" "5d823f3e3cc4995d65407adf22c8e398cce0d35c4ab2fbef9eb81769edec9996"` [INFO] [stderr] Checking libc v0.2.42 [INFO] [stderr] Checking byteorder v1.2.3 [INFO] [stderr] Checking iovec v0.1.2 [INFO] [stderr] Checking bytes v0.4.8 [INFO] [stderr] Checking lua v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: this is a decimal constant [INFO] [stderr] --> src/state.rs:49:33 [INFO] [stderr] | [INFO] [stderr] 49 | let chunk = if magic == 033 { [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::zero_prefixed_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zero_prefixed_literal [INFO] [stderr] help: if you mean to use a decimal constant, remove the `0` to remove confusion [INFO] [stderr] | [INFO] [stderr] 49 | let chunk = if magic == 33 { [INFO] [stderr] | ^^ [INFO] [stderr] help: if you mean to use an octal constant, use `0o` [INFO] [stderr] | [INFO] [stderr] 49 | let chunk = if magic == 0o33 { [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `state::State` [INFO] [stderr] --> src/scanner.rs:3:5 [INFO] [stderr] | [INFO] [stderr] 3 | use state::State; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::mem` [INFO] [stderr] --> src/scanner.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | use std::mem; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/scanner.rs:416:9 [INFO] [stderr] | [INFO] [stderr] 416 | return Ok(Token::String(ret)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(Token::String(ret))` [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: doc comment not used by rustdoc [INFO] [stderr] --> src/scanner.rs:368:25 [INFO] [stderr] | [INFO] [stderr] 368 | /// Escape charactors [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_doc_comments)] on by default [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:177:9 [INFO] [stderr] | [INFO] [stderr] 177 | return Ok(stmts); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(stmts)` [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: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/parser.rs:342:17 [INFO] [stderr] | [INFO] [stderr] 342 | expr [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/parser.rs:341:28 [INFO] [stderr] | [INFO] [stderr] 341 | let expr = ExprNode::new(Expr::Ident(s.clone()), (line, line)); [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/parser.rs:408:25 [INFO] [stderr] | [INFO] [stderr] 408 | obj [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/parser.rs:407:39 [INFO] [stderr] | [INFO] [stderr] 407 | let mut obj = Expr::AttrGet(Box::new(exprnode), Box::new(key)); [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: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:4:38 [INFO] [stderr] | [INFO] [stderr] 4 | pub const INVALID_INSTRUCTION: u32 = 0xFFFFFFFF; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xFFFF_FFFF` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/instruction.rs:15:37 [INFO] [stderr] | [INFO] [stderr] 15 | pub const OPCODE_MAXA: OpCodeSize = 1 << OPCODE_SIZEA - 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider parenthesizing your expression: `1 << (OPCODE_SIZEA - 1)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::precedence)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/instruction.rs:16:37 [INFO] [stderr] | [INFO] [stderr] 16 | pub const OPCODE_MAXB: OpCodeSize = 1 << OPCODE_SIZEB - 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider parenthesizing your expression: `1 << (OPCODE_SIZEB - 1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/instruction.rs:17:37 [INFO] [stderr] | [INFO] [stderr] 17 | pub const OPCODE_MAXC: OpCodeSize = 1 << OPCODE_SIZEC - 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider parenthesizing your expression: `1 << (OPCODE_SIZEC - 1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/instruction.rs:18:38 [INFO] [stderr] | [INFO] [stderr] 18 | pub const OPCODE_MAXBx: OpCodeSize = 1 << OPCODE_SIZEBx - 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider parenthesizing your expression: `1 << (OPCODE_SIZEBx - 1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:217:22 [INFO] [stderr] | [INFO] [stderr] 217 | *inst = (*inst & 0x3ffffff) | (op as u32) << 26 [INFO] [stderr] | ^^^^^^^^^ help: consider: `0x03ff_ffff` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:227:22 [INFO] [stderr] | [INFO] [stderr] 227 | *inst = (*inst & 0xfc03ffff) | ((a & 0xff) as u32) << 18 [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xfc03_ffff` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:237:22 [INFO] [stderr] | [INFO] [stderr] 237 | *inst = (*inst & 0xfffffe00) | ((b as u32) & 0x1ff) [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xffff_fe00` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:247:22 [INFO] [stderr] | [INFO] [stderr] 247 | *inst = (*inst & 0xfffc01ff) | ((c & 0x1ff) as u32) << 9 [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xfffc_01ff` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:257:22 [INFO] [stderr] | [INFO] [stderr] 257 | *inst = (*inst & 0xfffc0000) | (bx & 0x3ffff) as u32 [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xfffc_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: this is a decimal constant [INFO] [stderr] --> src/state.rs:49:33 [INFO] [stderr] | [INFO] [stderr] 49 | let chunk = if magic == 033 { [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::zero_prefixed_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zero_prefixed_literal [INFO] [stderr] help: if you mean to use a decimal constant, remove the `0` to remove confusion [INFO] [stderr] | [INFO] [stderr] 49 | let chunk = if magic == 33 { [INFO] [stderr] | ^^ [INFO] [stderr] help: if you mean to use an octal constant, use `0o` [INFO] [stderr] | [INFO] [stderr] 49 | let chunk = if magic == 0o33 { [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `state::State` [INFO] [stderr] --> src/scanner.rs:3:5 [INFO] [stderr] | [INFO] [stderr] 3 | use state::State; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::mem` [INFO] [stderr] --> src/scanner.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | use std::mem; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/scanner.rs:416:9 [INFO] [stderr] | [INFO] [stderr] 416 | return Ok(Token::String(ret)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(Token::String(ret))` [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: doc comment not used by rustdoc [INFO] [stderr] --> src/scanner.rs:368:25 [INFO] [stderr] | [INFO] [stderr] 368 | /// Escape charactors [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_doc_comments)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Read`, `Write` [INFO] [stderr] --> src/scanner.rs:643:19 [INFO] [stderr] | [INFO] [stderr] 643 | use std::io::{Read, Write}; [INFO] [stderr] | ^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:177:9 [INFO] [stderr] | [INFO] [stderr] 177 | return Ok(stmts); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(stmts)` [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: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/parser.rs:342:17 [INFO] [stderr] | [INFO] [stderr] 342 | expr [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/parser.rs:341:28 [INFO] [stderr] | [INFO] [stderr] 341 | let expr = ExprNode::new(Expr::Ident(s.clone()), (line, line)); [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/parser.rs:408:25 [INFO] [stderr] | [INFO] [stderr] 408 | obj [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/parser.rs:407:39 [INFO] [stderr] | [INFO] [stderr] 407 | let mut obj = Expr::AttrGet(Box::new(exprnode), Box::new(key)); [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: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:4:38 [INFO] [stderr] | [INFO] [stderr] 4 | pub const INVALID_INSTRUCTION: u32 = 0xFFFFFFFF; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xFFFF_FFFF` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/instruction.rs:15:37 [INFO] [stderr] | [INFO] [stderr] 15 | pub const OPCODE_MAXA: OpCodeSize = 1 << OPCODE_SIZEA - 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider parenthesizing your expression: `1 << (OPCODE_SIZEA - 1)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::precedence)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/instruction.rs:16:37 [INFO] [stderr] | [INFO] [stderr] 16 | pub const OPCODE_MAXB: OpCodeSize = 1 << OPCODE_SIZEB - 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider parenthesizing your expression: `1 << (OPCODE_SIZEB - 1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/instruction.rs:17:37 [INFO] [stderr] | [INFO] [stderr] 17 | pub const OPCODE_MAXC: OpCodeSize = 1 << OPCODE_SIZEC - 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider parenthesizing your expression: `1 << (OPCODE_SIZEC - 1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/instruction.rs:18:38 [INFO] [stderr] | [INFO] [stderr] 18 | pub const OPCODE_MAXBx: OpCodeSize = 1 << OPCODE_SIZEBx - 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider parenthesizing your expression: `1 << (OPCODE_SIZEBx - 1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:217:22 [INFO] [stderr] | [INFO] [stderr] 217 | *inst = (*inst & 0x3ffffff) | (op as u32) << 26 [INFO] [stderr] | ^^^^^^^^^ help: consider: `0x03ff_ffff` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:227:22 [INFO] [stderr] | [INFO] [stderr] 227 | *inst = (*inst & 0xfc03ffff) | ((a & 0xff) as u32) << 18 [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xfc03_ffff` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:237:22 [INFO] [stderr] | [INFO] [stderr] 237 | *inst = (*inst & 0xfffffe00) | ((b as u32) & 0x1ff) [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xffff_fe00` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:247:22 [INFO] [stderr] | [INFO] [stderr] 247 | *inst = (*inst & 0xfffc01ff) | ((c & 0x1ff) as u32) << 9 [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xfffc_01ff` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:257:22 [INFO] [stderr] | [INFO] [stderr] 257 | *inst = (*inst & 0xfffc0000) | (bx & 0x3ffff) as u32 [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xfffc_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: this is a decimal constant [INFO] [stderr] --> src/state.rs:49:33 [INFO] [stderr] | [INFO] [stderr] 49 | let chunk = if magic == 033 { [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::zero_prefixed_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zero_prefixed_literal [INFO] [stderr] help: if you mean to use a decimal constant, remove the `0` to remove confusion [INFO] [stderr] | [INFO] [stderr] 49 | let chunk = if magic == 33 { [INFO] [stderr] | ^^ [INFO] [stderr] help: if you mean to use an octal constant, use `0o` [INFO] [stderr] | [INFO] [stderr] 49 | let chunk = if magic == 0o33 { [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `state::State` [INFO] [stderr] --> src/scanner.rs:3:5 [INFO] [stderr] | [INFO] [stderr] 3 | use state::State; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::mem` [INFO] [stderr] --> src/scanner.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | use std::mem; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/scanner.rs:416:9 [INFO] [stderr] | [INFO] [stderr] 416 | return Ok(Token::String(ret)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(Token::String(ret))` [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: doc comment not used by rustdoc [INFO] [stderr] --> src/scanner.rs:368:25 [INFO] [stderr] | [INFO] [stderr] 368 | /// Escape charactors [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_doc_comments)] on by default [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:177:9 [INFO] [stderr] | [INFO] [stderr] 177 | return Ok(stmts); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(stmts)` [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: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/parser.rs:342:17 [INFO] [stderr] | [INFO] [stderr] 342 | expr [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/parser.rs:341:28 [INFO] [stderr] | [INFO] [stderr] 341 | let expr = ExprNode::new(Expr::Ident(s.clone()), (line, line)); [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/parser.rs:408:25 [INFO] [stderr] | [INFO] [stderr] 408 | obj [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/parser.rs:407:39 [INFO] [stderr] | [INFO] [stderr] 407 | let mut obj = Expr::AttrGet(Box::new(exprnode), Box::new(key)); [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: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:4:38 [INFO] [stderr] | [INFO] [stderr] 4 | pub const INVALID_INSTRUCTION: u32 = 0xFFFFFFFF; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xFFFF_FFFF` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/instruction.rs:15:37 [INFO] [stderr] | [INFO] [stderr] 15 | pub const OPCODE_MAXA: OpCodeSize = 1 << OPCODE_SIZEA - 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider parenthesizing your expression: `1 << (OPCODE_SIZEA - 1)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::precedence)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/instruction.rs:16:37 [INFO] [stderr] | [INFO] [stderr] 16 | pub const OPCODE_MAXB: OpCodeSize = 1 << OPCODE_SIZEB - 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider parenthesizing your expression: `1 << (OPCODE_SIZEB - 1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/instruction.rs:17:37 [INFO] [stderr] | [INFO] [stderr] 17 | pub const OPCODE_MAXC: OpCodeSize = 1 << OPCODE_SIZEC - 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider parenthesizing your expression: `1 << (OPCODE_SIZEC - 1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] [INFO] [stderr] warning: operator precedence can trip the unwary [INFO] [stderr] --> src/instruction.rs:18:38 [INFO] [stderr] | [INFO] [stderr] 18 | pub const OPCODE_MAXBx: OpCodeSize = 1 << OPCODE_SIZEBx - 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider parenthesizing your expression: `1 << (OPCODE_SIZEBx - 1)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:217:22 [INFO] [stderr] | [INFO] [stderr] 217 | *inst = (*inst & 0x3ffffff) | (op as u32) << 26 [INFO] [stderr] | ^^^^^^^^^ help: consider: `0x03ff_ffff` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:227:22 [INFO] [stderr] | [INFO] [stderr] 227 | *inst = (*inst & 0xfc03ffff) | ((a & 0xff) as u32) << 18 [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xfc03_ffff` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:237:22 [INFO] [stderr] | [INFO] [stderr] 237 | *inst = (*inst & 0xfffffe00) | ((b as u32) & 0x1ff) [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xffff_fe00` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:247:22 [INFO] [stderr] | [INFO] [stderr] 247 | *inst = (*inst & 0xfffc01ff) | ((c & 0x1ff) as u32) << 9 [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xfffc_01ff` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/instruction.rs:257:22 [INFO] [stderr] | [INFO] [stderr] 257 | *inst = (*inst & 0xfffc0000) | (bx & 0x3ffff) as u32 [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xfffc_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unreachable expression [INFO] [stderr] --> src/scanner.rs:238:9 [INFO] [stderr] | [INFO] [stderr] 238 | unreachable!() [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_code)] on by default [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: unreachable expression [INFO] [stderr] --> src/scanner.rs:355:9 [INFO] [stderr] | [INFO] [stderr] 355 | unreachable!() [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [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: unreachable expression [INFO] [stderr] --> src/scanner.rs:238:9 [INFO] [stderr] | [INFO] [stderr] 238 | unreachable!() [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_code)] on by default [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: unreachable expression [INFO] [stderr] --> src/scanner.rs:355:9 [INFO] [stderr] | [INFO] [stderr] 355 | unreachable!() [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [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: unreachable expression [INFO] [stderr] --> src/scanner.rs:238:9 [INFO] [stderr] | [INFO] [stderr] 238 | unreachable!() [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_code)] on by default [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: unreachable expression [INFO] [stderr] --> src/scanner.rs:355:9 [INFO] [stderr] | [INFO] [stderr] 355 | unreachable!() [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [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: value assigned to `reg` is never read [INFO] [stderr] --> src/compiler.rs:933:21 [INFO] [stderr] | [INFO] [stderr] 933 | reg += self.compile_expr(reg, expr, expr_ctx); [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_assignments)] on by default [INFO] [stderr] [INFO] [stderr] warning: value assigned to `reg` is never read [INFO] [stderr] --> src/compiler.rs:937:21 [INFO] [stderr] | [INFO] [stderr] 937 | reg += self.compile_expr(reg, expr, &ExprContext::with_opt(0)); [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: value assigned to `reg` is never read [INFO] [stderr] --> src/compiler.rs:1020:17 [INFO] [stderr] | [INFO] [stderr] 1020 | reg += self.compile_expr(reg, rhs, &ExprContext::with_opt(0)); [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: value assigned to `reg` is never read [INFO] [stderr] --> src/compiler.rs:1676:21 [INFO] [stderr] | [INFO] [stderr] 1676 | reg += self.compile_expr(reg, &exprs[0], &ExprContext::with_opt(-2)); [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/scanner.rs:475:17 [INFO] [stderr] | [INFO] [stderr] 475 | let mut cvalue = c as u32; [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/scanner.rs:517:49 [INFO] [stderr] | [INFO] [stderr] 517 | let (mut fraction, mut latest_char, mut count) = self.read_hexadecimal(0.0); [INFO] [stderr] | ----^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `res` [INFO] [stderr] --> src/scanner.rs:732:13 [INFO] [stderr] | [INFO] [stderr] 732 | let res = scanner.scan(); [INFO] [stderr] | ^^^ help: consider using `_res` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: value assigned to `reg` is never read [INFO] [stderr] --> src/compiler.rs:933:21 [INFO] [stderr] | [INFO] [stderr] 933 | reg += self.compile_expr(reg, expr, expr_ctx); [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_assignments)] on by default [INFO] [stderr] [INFO] [stderr] warning: value assigned to `reg` is never read [INFO] [stderr] --> src/compiler.rs:937:21 [INFO] [stderr] | [INFO] [stderr] 937 | reg += self.compile_expr(reg, expr, &ExprContext::with_opt(0)); [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: value assigned to `reg` is never read [INFO] [stderr] --> src/compiler.rs:1020:17 [INFO] [stderr] | [INFO] [stderr] 1020 | reg += self.compile_expr(reg, rhs, &ExprContext::with_opt(0)); [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: value assigned to `reg` is never read [INFO] [stderr] --> src/compiler.rs:1676:21 [INFO] [stderr] | [INFO] [stderr] 1676 | reg += self.compile_expr(reg, &exprs[0], &ExprContext::with_opt(-2)); [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/scanner.rs:475:17 [INFO] [stderr] | [INFO] [stderr] 475 | let mut cvalue = c as u32; [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/scanner.rs:517:49 [INFO] [stderr] | [INFO] [stderr] 517 | let (mut fraction, mut latest_char, mut count) = self.read_hexadecimal(0.0); [INFO] [stderr] | ----^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: value assigned to `reg` is never read [INFO] [stderr] --> src/compiler.rs:933:21 [INFO] [stderr] | [INFO] [stderr] 933 | reg += self.compile_expr(reg, expr, expr_ctx); [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_assignments)] on by default [INFO] [stderr] [INFO] [stderr] warning: value assigned to `reg` is never read [INFO] [stderr] --> src/compiler.rs:937:21 [INFO] [stderr] | [INFO] [stderr] 937 | reg += self.compile_expr(reg, expr, &ExprContext::with_opt(0)); [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: value assigned to `reg` is never read [INFO] [stderr] --> src/compiler.rs:1020:17 [INFO] [stderr] | [INFO] [stderr] 1020 | reg += self.compile_expr(reg, rhs, &ExprContext::with_opt(0)); [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: value assigned to `reg` is never read [INFO] [stderr] --> src/compiler.rs:1676:21 [INFO] [stderr] | [INFO] [stderr] 1676 | reg += self.compile_expr(reg, &exprs[0], &ExprContext::with_opt(-2)); [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/scanner.rs:475:17 [INFO] [stderr] | [INFO] [stderr] 475 | let mut cvalue = c as u32; [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/scanner.rs:517:49 [INFO] [stderr] | [INFO] [stderr] 517 | let (mut fraction, mut latest_char, mut count) = self.read_hexadecimal(0.0); [INFO] [stderr] | ----^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `state::State` [INFO] [stderr] --> src/state.rs:23:5 [INFO] [stderr] | [INFO] [stderr] 23 | / pub fn new() -> State { [INFO] [stderr] 24 | | State {} [INFO] [stderr] 25 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 11 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/state.rs:45:16 [INFO] [stderr] | [INFO] [stderr] 45 | if buf.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!buf.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: length comparison to zero [INFO] [stderr] --> src/scanner.rs:243:28 [INFO] [stderr] | [INFO] [stderr] 243 | Ok(ref buf) if buf.len() > 0 => { [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!buf.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/scanner.rs:283:9 [INFO] [stderr] | [INFO] [stderr] 283 | self.line_number = self.line_number + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.line_number += 1` [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: manual implementation of an assign operation [INFO] [stderr] --> src/scanner.rs:430:46 [INFO] [stderr] | [INFO] [stderr] 430 | _ if '0' <= c && c <= '9' => cvalue = cvalue - ('0' as u8), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `cvalue -= ('0' as u8)` [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: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/scanner.rs:430:64 [INFO] [stderr] | [INFO] [stderr] 430 | _ if '0' <= c && c <= '9' => cvalue = cvalue - ('0' as u8), [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::char_lit_as_u8)] on by default [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'0' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/scanner.rs:431:64 [INFO] [stderr] | [INFO] [stderr] 431 | _ if 'a' <= c && c <= 'z' => cvalue = cvalue - ('a' as u8) + 10, [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'a' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/scanner.rs:432:64 [INFO] [stderr] | [INFO] [stderr] 432 | _ if 'A' <= c && c <= 'z' => cvalue = cvalue - ('A' as u8) + 10, [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'A' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/scanner.rs:437:13 [INFO] [stderr] | [INFO] [stderr] 437 | 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: manual implementation of an assign operation [INFO] [stderr] --> src/scanner.rs:454:46 [INFO] [stderr] | [INFO] [stderr] 454 | _ if '0' <= c && c <= '9' => cvalue = cvalue - ('0' as u32), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `cvalue -= ('0' as u32)` [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: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/scanner.rs:460:28 [INFO] [stderr] | [INFO] [stderr] 460 | n = n * 16.0 + (cvalue as f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `f64::from(cvalue)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/scanner.rs:462:13 [INFO] [stderr] | [INFO] [stderr] 462 | count = count + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `count += 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: manual implementation of an assign operation [INFO] [stderr] --> src/scanner.rs:479:13 [INFO] [stderr] | [INFO] [stderr] 479 | 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: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/scanner.rs:481:16 [INFO] [stderr] | [INFO] [stderr] 481 | if r > (u8::MAX as u32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `u32::from(u8::MAX)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/scanner.rs:531:13 [INFO] [stderr] | [INFO] [stderr] 531 | exponent = exponent * -4; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `exponent *= -4` [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: single-character string constant used as pattern [INFO] [stderr] --> src/scanner.rs:579:26 [INFO] [stderr] | [INFO] [stderr] 579 | if s.starts_with("0") { [INFO] [stderr] | ^^^ help: try using a char instead: `'0'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/scanner.rs:580:41 [INFO] [stderr] | [INFO] [stderr] 580 | let r = s.trim_left_matches("0").to_string(); [INFO] [stderr] | ^^^ help: try using a char instead: `'0'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/scanner.rs:581:16 [INFO] [stderr] | [INFO] [stderr] 581 | if r.len() < 1 || r == "" || !is_decimal(r.as_bytes()[0] as char) { [INFO] [stderr] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `r.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: length comparison to zero [INFO] [stderr] --> src/scanner.rs:609:23 [INFO] [stderr] | [INFO] [stderr] 609 | debug_assert!(s.len() > 0); [INFO] [stderr] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!s.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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/parser.rs:348:17 [INFO] [stderr] | [INFO] [stderr] 348 | / match expr.inner_mut() { [INFO] [stderr] 349 | | Expr::FuncCall(ref mut call) => call.adj = true, [INFO] [stderr] 350 | | _ => {} [INFO] [stderr] 351 | | } [INFO] [stderr] | |_________________^ help: try this: `if let Expr::FuncCall(ref mut call) = expr.inner_mut() { call.adj = true }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/parser.rs:527:27 [INFO] [stderr] | [INFO] [stderr] 527 | for mut elseif in elseifs.into_iter().rev().into_iter() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `elseifs.into_iter().rev()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:709:20 [INFO] [stderr] | [INFO] [stderr] 709 | let stmt = match expr.inner() { [INFO] [stderr] | ____________________^ [INFO] [stderr] 710 | | &Expr::FuncCall(_) => Stmt::FuncCall(expr), [INFO] [stderr] 711 | | &Expr::MethodCall(_) => Stmt::MethodCall(expr), [INFO] [stderr] 712 | | _ => { [INFO] [stderr] ... | [INFO] [stderr] 720 | | } [INFO] [stderr] 721 | | }; [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] 709 | let stmt = match *expr.inner() { [INFO] [stderr] 710 | Expr::FuncCall(_) => Stmt::FuncCall(expr), [INFO] [stderr] 711 | Expr::MethodCall(_) => Stmt::MethodCall(expr), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `state::State` [INFO] [stderr] --> src/state.rs:23:5 [INFO] [stderr] | [INFO] [stderr] 23 | / pub fn new() -> State { [INFO] [stderr] 24 | | State {} [INFO] [stderr] 25 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 11 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/instruction.rs:141:9 [INFO] [stderr] | [INFO] [stderr] 141 | / match self { [INFO] [stderr] 142 | | &OpType::ABC => "ABC".to_string(), [INFO] [stderr] 143 | | &OpType::ABx => "ABx".to_string(), [INFO] [stderr] 144 | | &OpType::ASBx => "ASBx".to_string(), [INFO] [stderr] 145 | | } [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] 141 | match *self { [INFO] [stderr] 142 | OpType::ABC => "ABC".to_string(), [INFO] [stderr] 143 | OpType::ABx => "ABx".to_string(), [INFO] [stderr] 144 | OpType::ASBx => "ASBx".to_string(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/state.rs:45:16 [INFO] [stderr] | [INFO] [stderr] 45 | if buf.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!buf.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: length comparison to zero [INFO] [stderr] --> src/scanner.rs:243:28 [INFO] [stderr] | [INFO] [stderr] 243 | Ok(ref buf) if buf.len() > 0 => { [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!buf.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/scanner.rs:283:9 [INFO] [stderr] | [INFO] [stderr] 283 | self.line_number = self.line_number + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.line_number += 1` [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: manual implementation of an assign operation [INFO] [stderr] --> src/scanner.rs:430:46 [INFO] [stderr] | [INFO] [stderr] 430 | _ if '0' <= c && c <= '9' => cvalue = cvalue - ('0' as u8), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `cvalue -= ('0' as u8)` [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: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/scanner.rs:430:64 [INFO] [stderr] | [INFO] [stderr] 430 | _ if '0' <= c && c <= '9' => cvalue = cvalue - ('0' as u8), [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::char_lit_as_u8)] on by default [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'0' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/scanner.rs:431:64 [INFO] [stderr] | [INFO] [stderr] 431 | _ if 'a' <= c && c <= 'z' => cvalue = cvalue - ('a' as u8) + 10, [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'a' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/scanner.rs:432:64 [INFO] [stderr] | [INFO] [stderr] 432 | _ if 'A' <= c && c <= 'z' => cvalue = cvalue - ('A' as u8) + 10, [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'A' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/scanner.rs:437:13 [INFO] [stderr] | [INFO] [stderr] 437 | 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: manual implementation of an assign operation [INFO] [stderr] --> src/scanner.rs:454:46 [INFO] [stderr] | [INFO] [stderr] 454 | _ if '0' <= c && c <= '9' => cvalue = cvalue - ('0' as u32), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `cvalue -= ('0' as u32)` [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: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/scanner.rs:460:28 [INFO] [stderr] | [INFO] [stderr] 460 | n = n * 16.0 + (cvalue as f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `f64::from(cvalue)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/scanner.rs:462:13 [INFO] [stderr] | [INFO] [stderr] 462 | count = count + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `count += 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: manual implementation of an assign operation [INFO] [stderr] --> src/scanner.rs:479:13 [INFO] [stderr] | [INFO] [stderr] 479 | 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: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/scanner.rs:481:16 [INFO] [stderr] | [INFO] [stderr] 481 | if r > (u8::MAX as u32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `u32::from(u8::MAX)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/scanner.rs:531:13 [INFO] [stderr] | [INFO] [stderr] 531 | exponent = exponent * -4; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `exponent *= -4` [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: single-character string constant used as pattern [INFO] [stderr] --> src/scanner.rs:579:26 [INFO] [stderr] | [INFO] [stderr] 579 | if s.starts_with("0") { [INFO] [stderr] | ^^^ help: try using a char instead: `'0'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/scanner.rs:580:41 [INFO] [stderr] | [INFO] [stderr] 580 | let r = s.trim_left_matches("0").to_string(); [INFO] [stderr] | ^^^ help: try using a char instead: `'0'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/scanner.rs:581:16 [INFO] [stderr] | [INFO] [stderr] 581 | if r.len() < 1 || r == "" || !is_decimal(r.as_bytes()[0] as char) { [INFO] [stderr] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `r.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: length comparison to zero [INFO] [stderr] --> src/scanner.rs:609:23 [INFO] [stderr] | [INFO] [stderr] 609 | debug_assert!(s.len() > 0); [INFO] [stderr] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!s.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: useless use of `format!` [INFO] [stderr] --> src/instruction.rs:371:19 [INFO] [stderr] | [INFO] [stderr] 371 | OP_NOP => format!("{}", ops), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `ops.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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:101:9 [INFO] [stderr] | [INFO] [stderr] 101 | / match self { [INFO] [stderr] 102 | | &Expr::Dots => true, [INFO] [stderr] 103 | | &Expr::FuncCall(ref call) => !call.adj, [INFO] [stderr] 104 | | _ => false, [INFO] [stderr] 105 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 101 | match *self { [INFO] [stderr] 102 | Expr::Dots => true, [INFO] [stderr] 103 | Expr::FuncCall(ref call) => !call.adj, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `ast::ParList` [INFO] [stderr] --> src/ast.rs:126:5 [INFO] [stderr] | [INFO] [stderr] 126 | / pub fn new() -> ParList { [INFO] [stderr] 127 | | ParList { [INFO] [stderr] 128 | | vargs: false, [INFO] [stderr] 129 | | names: Vec::new(), [INFO] [stderr] 130 | | } [INFO] [stderr] 131 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 120 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/compiler.rs:23:8 [INFO] [stderr] | [INFO] [stderr] 23 | if lhs < 0.0 || rhs < 0.0 && !(lhs < 0.0 && rhs < 0.0) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::nonminimal_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 23 | if rhs < 0.0 || lhs < 0.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] 23 | if !(!lhs < 0.0 && !rhs < 0.0) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/parser.rs:348:17 [INFO] [stderr] | [INFO] [stderr] 348 | / match expr.inner_mut() { [INFO] [stderr] 349 | | Expr::FuncCall(ref mut call) => call.adj = true, [INFO] [stderr] 350 | | _ => {} [INFO] [stderr] 351 | | } [INFO] [stderr] | |_________________^ help: try this: `if let Expr::FuncCall(ref mut call) = expr.inner_mut() { call.adj = true }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false [INFO] [stderr] --> src/compiler.rs:172:12 [INFO] [stderr] | [INFO] [stderr] 172 | if len <= 0 || self.pc == len { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::absurd_extreme_comparisons)] on by default [INFO] [stderr] = help: because 0 is the minimum value for this type, the case where the two sides are not equal never occurs, consider using len == 0 instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/compiler.rs:339:26 [INFO] [stderr] | [INFO] [stderr] 339 | fn find(&self, name: &String) -> Option { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/compiler.rs:383:40 [INFO] [stderr] | [INFO] [stderr] 383 | fn find_var_block(&mut self, name: &String) -> Option<&mut Block> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/parser.rs:527:27 [INFO] [stderr] | [INFO] [stderr] 527 | for mut elseif in elseifs.into_iter().rev().into_iter() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `elseifs.into_iter().rev()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/compiler.rs:570:36 [INFO] [stderr] | [INFO] [stderr] 570 | fn find_local_var(&self, name: &String) -> Option { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:623:40 [INFO] [stderr] | [INFO] [stderr] 623 | fn compile_chunk(&mut self, chunk: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[StmtNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:629:40 [INFO] [stderr] | [INFO] [stderr] 629 | fn compile_block(&mut self, block: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[StmtNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/compiler.rs:630:12 [INFO] [stderr] | [INFO] [stderr] 630 | if block.len() < 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `block.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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/compiler.rs:642:39 [INFO] [stderr] | [INFO] [stderr] 642 | fn get_ident_reftype(&self, name: &String) -> ExprScope { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (8/7) [INFO] [stderr] --> src/compiler.rs:821:5 [INFO] [stderr] | [INFO] [stderr] 821 | / fn compile_binary_rel_expr_aux(&mut self, mut reg: usize, [INFO] [stderr] 822 | | opr: BinaryOpr, lhs: &ExprNode, rhs: &ExprNode, [INFO] [stderr] 823 | | flip: i32, jumplabel: i32, line: u32) { [INFO] [stderr] 824 | | let mut b = reg; [INFO] [stderr] ... | [INFO] [stderr] 839 | | self.code.add_ASBx(OP_JMP, 0, jumplabel, line); [INFO] [stderr] 840 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::too_many_arguments)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:709:20 [INFO] [stderr] | [INFO] [stderr] 709 | let stmt = match expr.inner() { [INFO] [stderr] | ____________________^ [INFO] [stderr] 710 | | &Expr::FuncCall(_) => Stmt::FuncCall(expr), [INFO] [stderr] 711 | | &Expr::MethodCall(_) => Stmt::MethodCall(expr), [INFO] [stderr] 712 | | _ => { [INFO] [stderr] ... | [INFO] [stderr] 720 | | } [INFO] [stderr] 721 | | }; [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] 709 | let stmt = match *expr.inner() { [INFO] [stderr] 710 | Expr::FuncCall(_) => Stmt::FuncCall(expr), [INFO] [stderr] 711 | Expr::MethodCall(_) => Stmt::MethodCall(expr), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:830:41 [INFO] [stderr] | [INFO] [stderr] 830 | BinaryOpr::Eq => ABC(OP_EQ, 0 ^ flip, b as i32, c as i32), [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:832:41 [INFO] [stderr] | [INFO] [stderr] 832 | BinaryOpr::LT => ABC(OP_LT, 0 ^ flip, b as i32, c as i32), [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:833:41 [INFO] [stderr] | [INFO] [stderr] 833 | BinaryOpr::GT => ABC(OP_LT, 0 ^ flip, c as i32, b as i32), [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:834:41 [INFO] [stderr] | [INFO] [stderr] 834 | BinaryOpr::LE => ABC(OP_LE, 0 ^ flip, b as i32, c as i32), [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:835:41 [INFO] [stderr] | [INFO] [stderr] 835 | BinaryOpr::GE => ABC(OP_LE, 0 ^ flip, c as i32, b as i32), [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (8/7) [INFO] [stderr] --> src/compiler.rs:854:5 [INFO] [stderr] | [INFO] [stderr] 854 | / fn compile_binary_log_expr_aux(&mut self, mut reg: usize, [INFO] [stderr] 855 | | expr: &ExprNode, expr_ctx: &ExprContext, [INFO] [stderr] 856 | | thenlabel: i32, elselabel: i32, hasnextcond: bool, lb: &mut Lblabels) { [INFO] [stderr] 857 | | let mut flip = 0; [INFO] [stderr] ... | [INFO] [stderr] 946 | | } [INFO] [stderr] 947 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/compiler.rs:858:9 [INFO] [stderr] | [INFO] [stderr] 858 | / let mut jumplabel = elselabel; [INFO] [stderr] 859 | | if hasnextcond { [INFO] [stderr] 860 | | flip = 1; [INFO] [stderr] 861 | | jumplabel = thenlabel; [INFO] [stderr] 862 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let jumplabel = if hasnextcond { ..; thenlabel } else { elselabel };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:939:65 [INFO] [stderr] | [INFO] [stderr] 939 | self.code.add_ABC(OP_TEST, a as i32, 0, 0 ^ flip, start_line(expr)); [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:941:78 [INFO] [stderr] | [INFO] [stderr] 941 | self.code.add_ABC(OP_TESTSET, sreg as i32, a as i32, 0 ^ flip, start_line(expr)); [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/compiler.rs:1008:17 [INFO] [stderr] | [INFO] [stderr] 1008 | / loop { [INFO] [stderr] 1009 | | match current.inner() { [INFO] [stderr] 1010 | | Expr::BinaryOp(BinaryOpr::Concat, ref sublhs, ref subrhs) => { [INFO] [stderr] 1011 | | crange += 1; [INFO] [stderr] ... | [INFO] [stderr] 1015 | | } [INFO] [stderr] 1016 | | } [INFO] [stderr] | |_________________^ help: try: `while let Expr::BinaryOp(BinaryOpr::Concat, ref sublhs, ref subrhs) = current.inner() { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler.rs:1047:17 [INFO] [stderr] | [INFO] [stderr] 1047 | / match subexpr.inner() { [INFO] [stderr] 1048 | | &Expr::True => { [INFO] [stderr] 1049 | | self.code.add_ABC(OP_LOADBOOL, expr_ctx.savereg(reg) as i32, 0, 0, start_line(expr)); [INFO] [stderr] 1050 | | return; [INFO] [stderr] ... | [INFO] [stderr] 1056 | | _ => (OP_NOT, subexpr) [INFO] [stderr] 1057 | | } [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] 1047 | match *subexpr.inner() { [INFO] [stderr] 1048 | Expr::True => { [INFO] [stderr] 1049 | self.code.add_ABC(OP_LOADBOOL, expr_ctx.savereg(reg) as i32, 0, 0, start_line(expr)); [INFO] [stderr] 1050 | return; [INFO] [stderr] 1051 | } [INFO] [stderr] 1052 | Expr::False | Expr::Nil => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/instruction.rs:141:9 [INFO] [stderr] | [INFO] [stderr] 141 | / match self { [INFO] [stderr] 142 | | &OpType::ABC => "ABC".to_string(), [INFO] [stderr] 143 | | &OpType::ABx => "ABx".to_string(), [INFO] [stderr] 144 | | &OpType::ASBx => "ASBx".to_string(), [INFO] [stderr] 145 | | } [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] 141 | match *self { [INFO] [stderr] 142 | OpType::ABC => "ABC".to_string(), [INFO] [stderr] 143 | OpType::ABx => "ABx".to_string(), [INFO] [stderr] 144 | OpType::ASBx => "ASBx".to_string(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler.rs:1108:33 [INFO] [stderr] | [INFO] [stderr] 1108 | let v = match opr { [INFO] [stderr] | _________________________________^ [INFO] [stderr] 1109 | | &BinaryOpr::Add => { l + r } [INFO] [stderr] 1110 | | &BinaryOpr::Sub => { l - r } [INFO] [stderr] 1111 | | &BinaryOpr::Mul => { l * r } [INFO] [stderr] ... | [INFO] [stderr] 1115 | | _ => unreachable!() [INFO] [stderr] 1116 | | }; [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] 1108 | let v = match *opr { [INFO] [stderr] 1109 | BinaryOpr::Add => { l + r } [INFO] [stderr] 1110 | BinaryOpr::Sub => { l - r } [INFO] [stderr] 1111 | BinaryOpr::Mul => { l * r } [INFO] [stderr] 1112 | BinaryOpr::Div => { l / r } [INFO] [stderr] 1113 | BinaryOpr::Mod => { lua_modulo(*l, *r) } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler.rs:1137:9 [INFO] [stderr] | [INFO] [stderr] 1137 | / match expr.inner() { [INFO] [stderr] 1138 | | &Expr::True => self.code.add_ABC(OP_LOADBOOL, svreg, 1, 0, start_line(expr)), [INFO] [stderr] 1139 | | &Expr::False => self.code.add_ABC(OP_LOADBOOL, svreg, 0, 0, start_line(expr)), [INFO] [stderr] 1140 | | &Expr::Nil => self.code.add_ABC(OP_LOADNIL, svreg, svreg, 0, start_line(expr)), [INFO] [stderr] ... | [INFO] [stderr] 1226 | | } [INFO] [stderr] 1227 | | }; [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] 1137 | match *expr.inner() { [INFO] [stderr] 1138 | Expr::True => self.code.add_ABC(OP_LOADBOOL, svreg, 1, 0, start_line(expr)), [INFO] [stderr] 1139 | Expr::False => self.code.add_ABC(OP_LOADBOOL, svreg, 0, 0, start_line(expr)), [INFO] [stderr] 1140 | Expr::Nil => self.code.add_ABC(OP_LOADNIL, svreg, svreg, 0, start_line(expr)), [INFO] [stderr] 1141 | Expr::Number(f) => { [INFO] [stderr] 1142 | let num = self.const_index(Rc::new(Value::Number(f))); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/compiler.rs:1181:29 [INFO] [stderr] | [INFO] [stderr] 1181 | let mut b = reg.clone(); [INFO] [stderr] | ^^^^^^^^^^^ help: try removing the `clone` call: `reg` [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/compiler.rs:1183:29 [INFO] [stderr] | [INFO] [stderr] 1183 | let mut c = reg.clone(); [INFO] [stderr] | ^^^^^^^^^^^ help: try removing the `clone` call: `reg` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler.rs:1185:30 [INFO] [stderr] | [INFO] [stderr] 1185 | let opcode = if let &Expr::String(_) = key.inner() { OP_GETTABLEKS } else { OP_GETTABLE }; [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] 1185 | let opcode = if let Expr::String(_) = *key.inner() { OP_GETTABLEKS } else { OP_GETTABLE }; [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/compiler.rs:1253:49 [INFO] [stderr] | [INFO] [stderr] 1253 | fn compile_assign_stmt_left(&mut self, lhs: &Vec) -> (usize, Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler.rs:1259:13 [INFO] [stderr] | [INFO] [stderr] 1259 | / match expr.inner() { [INFO] [stderr] 1260 | | &Expr::Ident(ref s) => { [INFO] [stderr] 1261 | | let identtype = self.get_ident_reftype(s); [INFO] [stderr] 1262 | | let mut expr_ctx = ExprContext::new(identtype, REG_UNDEFINED, 0); [INFO] [stderr] ... | [INFO] [stderr] 1288 | | _ => unreachable!("invalid left expression:{:#?}", expr.inner()) [INFO] [stderr] 1289 | | } [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] 1259 | match *expr.inner() { [INFO] [stderr] 1260 | Expr::Ident(ref s) => { [INFO] [stderr] 1261 | let identtype = self.get_ident_reftype(s); [INFO] [stderr] 1262 | let mut expr_ctx = ExprContext::new(identtype, REG_UNDEFINED, 0); [INFO] [stderr] 1263 | match identtype { [INFO] [stderr] 1264 | ExprScope::Global => { [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/compiler.rs:1296:39 [INFO] [stderr] | [INFO] [stderr] 1296 | lhs: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:1297:39 [INFO] [stderr] | [INFO] [stderr] 1297 | rhs: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false [INFO] [stderr] --> src/compiler.rs:1304:87 [INFO] [stderr] | [INFO] [stderr] 1304 | if namesassigned < rhs.len() && rhs[namesassigned].inner().is_vararg() && (lenexprs - namesassigned - 1) <= 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: because 0 is the minimum value for this type, the case where the two sides are not equal never occurs, consider using (lenexprs - namesassigned - 1) == 0 instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `acs` [INFO] [stderr] --> src/compiler.rs:1309:26 [INFO] [stderr] | [INFO] [stderr] 1309 | for i in namesassigned..(namesassigned + incr) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 1309 | for (i, ) in acs.iter_mut().enumerate().skip(namesassigned).take(incr) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `rhs` [INFO] [stderr] --> src/compiler.rs:1351:18 [INFO] [stderr] | [INFO] [stderr] 1351 | for i in namesassigned..lenexprs { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 1351 | for (i, ) in rhs.iter().enumerate().take(lenexprs).skip(namesassigned) { [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/compiler.rs:1358:44 [INFO] [stderr] | [INFO] [stderr] 1358 | fn compile_assign_stmt(&mut self, lhs: &Vec, rhs: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:1358:65 [INFO] [stderr] | [INFO] [stderr] 1358 | fn compile_assign_stmt(&mut self, lhs: &Vec, rhs: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:1412:49 [INFO] [stderr] | [INFO] [stderr] 1412 | fn compile_reg_assignment(&mut self, names: &Vec, exprs: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:1412:70 [INFO] [stderr] | [INFO] [stderr] 1412 | fn compile_reg_assignment(&mut self, names: &Vec, exprs: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false [INFO] [stderr] --> src/compiler.rs:1420:60 [INFO] [stderr] | [INFO] [stderr] 1420 | if exprs[namesassigned].inner().is_vararg() && (lenexprs - namesassigned - 1) <= 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: because 0 is the minimum value for this type, the case where the two sides are not equal never occurs, consider using (lenexprs - namesassigned - 1) == 0 instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `exprs` [INFO] [stderr] --> src/compiler.rs:1440:18 [INFO] [stderr] | [INFO] [stderr] 1440 | for i in namesassigned..lenexprs { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 1440 | for (i, ) in exprs.iter().enumerate().take(lenexprs).skip(namesassigned) { [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/compiler.rs:1447:52 [INFO] [stderr] | [INFO] [stderr] 1447 | fn compile_local_assign_stmt(&mut self, names: &Vec, values: &Vec, line: u32) { [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:1447:74 [INFO] [stderr] | [INFO] [stderr] 1447 | fn compile_local_assign_stmt(&mut self, names: &Vec, values: &Vec, line: u32) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler.rs:1467:9 [INFO] [stderr] | [INFO] [stderr] 1467 | / match expr.inner() { [INFO] [stderr] 1468 | | &Expr::False | &Expr::Nil => { [INFO] [stderr] 1469 | | if !hasnextcond { [INFO] [stderr] 1470 | | self.code.add_ASBx(OP_JMP, 0, elselabel, startline); [INFO] [stderr] ... | [INFO] [stderr] 1508 | | _ => {} [INFO] [stderr] 1509 | | } [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] 1467 | match *expr.inner() { [INFO] [stderr] 1468 | Expr::False | Expr::Nil => { [INFO] [stderr] 1469 | if !hasnextcond { [INFO] [stderr] 1470 | self.code.add_ASBx(OP_JMP, 0, elselabel, startline); [INFO] [stderr] 1471 | } [INFO] [stderr] 1472 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:1513:49 [INFO] [stderr] | [INFO] [stderr] 1513 | self.code.add_ABC(OP_TEST, a as i32, 0, 0 ^ flip, startline); [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [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/compiler.rs:1517:62 [INFO] [stderr] | [INFO] [stderr] 1517 | fn compile_while_stmt(&mut self, cond: &ExprNode, stmts: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[StmtNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:1538:63 [INFO] [stderr] | [INFO] [stderr] 1538 | fn compile_repeat_stmt(&mut self, cond: &ExprNode, stmts: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[StmtNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/compiler.rs:1556:9 [INFO] [stderr] | [INFO] [stderr] 1556 | / match self.leave_block() { [INFO] [stderr] 1557 | | Some(n) => { [INFO] [stderr] 1558 | | let label = self.new_label(); [INFO] [stderr] 1559 | | self.code.add_ASBx(OP_JMP, 0, label, end_line); [INFO] [stderr] ... | [INFO] [stderr] 1567 | | None => {} [INFO] [stderr] 1568 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 1556 | if let Some(n) = self.leave_block() { [INFO] [stderr] 1557 | let label = self.new_label(); [INFO] [stderr] 1558 | self.code.add_ASBx(OP_JMP, 0, label, end_line); [INFO] [stderr] 1559 | let lastpc = self.code.last_pc(); [INFO] [stderr] 1560 | self.set_label_pc(elselabel, lastpc); [INFO] [stderr] 1561 | self.code.add_ABC(OP_CLOSE, n as i32, 0, 0, end_line); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/compiler.rs:1581:12 [INFO] [stderr] | [INFO] [stderr] 1581 | if ifelsethen.els.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!ifelsethen.els.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: length comparison to zero [INFO] [stderr] --> src/compiler.rs:1587:12 [INFO] [stderr] | [INFO] [stderr] 1587 | if ifelsethen.els.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!ifelsethen.els.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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:1661:46 [INFO] [stderr] | [INFO] [stderr] 1661 | fn compile_return_stmt(&mut self, exprs: &Vec, startline: u32, endline: u32) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/instruction.rs:371:19 [INFO] [stderr] | [INFO] [stderr] 371 | OP_NOP => format!("{}", ops), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `ops.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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler.rs:1725:9 [INFO] [stderr] | [INFO] [stderr] 1725 | / match stmt.inner() { [INFO] [stderr] 1726 | | &Stmt::Assign(ref lhs, ref rhs) => self.compile_assign_stmt(lhs, rhs), [INFO] [stderr] 1727 | | &Stmt::LocalAssign(ref names, ref values) => self.compile_local_assign_stmt(names, values, startline), [INFO] [stderr] 1728 | | &Stmt::FuncCall(ref expr) | &Stmt::MethodCall(ref expr) => { [INFO] [stderr] ... | [INFO] [stderr] 1752 | | &Stmt::Break => self.compile_break_stmt(startline), [INFO] [stderr] 1753 | | } [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] 1725 | match *stmt.inner() { [INFO] [stderr] 1726 | Stmt::Assign(ref lhs, ref rhs) => self.compile_assign_stmt(lhs, rhs), [INFO] [stderr] 1727 | Stmt::LocalAssign(ref names, ref values) => self.compile_local_assign_stmt(names, values, startline), [INFO] [stderr] 1728 | Stmt::FuncCall(ref expr) | Stmt::MethodCall(ref expr) => { [INFO] [stderr] 1729 | let regtop = self.reg_top(); [INFO] [stderr] 1730 | self.compile_fncall_expr(regtop, expr, &ExprContext::with_opt(-1)); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/compiler.rs:1757:58 [INFO] [stderr] | [INFO] [stderr] 1757 | let mut maxreg = if self.proto.param_count > 1 { self.proto.param_count as i32 } else { 1 }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(self.proto.param_count)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [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/compiler.rs:1848:62 [INFO] [stderr] | [INFO] [stderr] 1848 | fn compile_func_expr(&mut self, params: &ParList, stmts: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[StmtNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/compiler.rs:1867:20 [INFO] [stderr] | [INFO] [stderr] 1867 | if let Some(_) = self.parent { [INFO] [stderr] | _____________- ^^^^^^^ [INFO] [stderr] 1868 | | self.register_local_var(String::from("arg")); [INFO] [stderr] 1869 | | } [INFO] [stderr] | |_____________- help: try this: `if self.parent.is_some()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/compiler.rs:1897:23 [INFO] [stderr] | [INFO] [stderr] 1897 | let lineinfo = if stmts.len() > 0 { (start_line(&stmts[0]), end_line(&stmts[stmts.len() - 1])) } else { (1, 1) }; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!stmts.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.rs:101:9 [INFO] [stderr] | [INFO] [stderr] 101 | / match self { [INFO] [stderr] 102 | | &Expr::Dots => true, [INFO] [stderr] 103 | | &Expr::FuncCall(ref call) => !call.adj, [INFO] [stderr] 104 | | _ => false, [INFO] [stderr] 105 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 101 | match *self { [INFO] [stderr] 102 | Expr::Dots => true, [INFO] [stderr] 103 | Expr::FuncCall(ref call) => !call.adj, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `ast::ParList` [INFO] [stderr] --> src/ast.rs:126:5 [INFO] [stderr] | [INFO] [stderr] 126 | / pub fn new() -> ParList { [INFO] [stderr] 127 | | ParList { [INFO] [stderr] 128 | | vargs: false, [INFO] [stderr] 129 | | names: Vec::new(), [INFO] [stderr] 130 | | } [INFO] [stderr] 131 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 120 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: aborting due to 3 previous errors [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/compiler.rs:23:8 [INFO] [stderr] | [INFO] [stderr] 23 | if lhs < 0.0 || rhs < 0.0 && !(lhs < 0.0 && rhs < 0.0) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::nonminimal_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 23 | if rhs < 0.0 || lhs < 0.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] 23 | if !(!lhs < 0.0 && !rhs < 0.0) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: Could not compile `lua`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false [INFO] [stderr] --> src/compiler.rs:172:12 [INFO] [stderr] | [INFO] [stderr] 172 | if len <= 0 || self.pc == len { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::absurd_extreme_comparisons)] on by default [INFO] [stderr] = help: because 0 is the minimum value for this type, the case where the two sides are not equal never occurs, consider using len == 0 instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/compiler.rs:339:26 [INFO] [stderr] | [INFO] [stderr] 339 | fn find(&self, name: &String) -> Option { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/compiler.rs:383:40 [INFO] [stderr] | [INFO] [stderr] 383 | fn find_var_block(&mut self, name: &String) -> Option<&mut Block> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/compiler.rs:570:36 [INFO] [stderr] | [INFO] [stderr] 570 | fn find_local_var(&self, name: &String) -> Option { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:623:40 [INFO] [stderr] | [INFO] [stderr] 623 | fn compile_chunk(&mut self, chunk: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[StmtNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:629:40 [INFO] [stderr] | [INFO] [stderr] 629 | fn compile_block(&mut self, block: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[StmtNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/compiler.rs:630:12 [INFO] [stderr] | [INFO] [stderr] 630 | if block.len() < 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `block.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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/compiler.rs:642:39 [INFO] [stderr] | [INFO] [stderr] 642 | fn get_ident_reftype(&self, name: &String) -> ExprScope { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (8/7) [INFO] [stderr] --> src/compiler.rs:821:5 [INFO] [stderr] | [INFO] [stderr] 821 | / fn compile_binary_rel_expr_aux(&mut self, mut reg: usize, [INFO] [stderr] 822 | | opr: BinaryOpr, lhs: &ExprNode, rhs: &ExprNode, [INFO] [stderr] 823 | | flip: i32, jumplabel: i32, line: u32) { [INFO] [stderr] 824 | | let mut b = reg; [INFO] [stderr] ... | [INFO] [stderr] 839 | | self.code.add_ASBx(OP_JMP, 0, jumplabel, line); [INFO] [stderr] 840 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::too_many_arguments)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:830:41 [INFO] [stderr] | [INFO] [stderr] 830 | BinaryOpr::Eq => ABC(OP_EQ, 0 ^ flip, b as i32, c as i32), [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:832:41 [INFO] [stderr] | [INFO] [stderr] 832 | BinaryOpr::LT => ABC(OP_LT, 0 ^ flip, b as i32, c as i32), [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:833:41 [INFO] [stderr] | [INFO] [stderr] 833 | BinaryOpr::GT => ABC(OP_LT, 0 ^ flip, c as i32, b as i32), [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:834:41 [INFO] [stderr] | [INFO] [stderr] 834 | BinaryOpr::LE => ABC(OP_LE, 0 ^ flip, b as i32, c as i32), [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:835:41 [INFO] [stderr] | [INFO] [stderr] 835 | BinaryOpr::GE => ABC(OP_LE, 0 ^ flip, c as i32, b as i32), [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (8/7) [INFO] [stderr] --> src/compiler.rs:854:5 [INFO] [stderr] | [INFO] [stderr] 854 | / fn compile_binary_log_expr_aux(&mut self, mut reg: usize, [INFO] [stderr] 855 | | expr: &ExprNode, expr_ctx: &ExprContext, [INFO] [stderr] 856 | | thenlabel: i32, elselabel: i32, hasnextcond: bool, lb: &mut Lblabels) { [INFO] [stderr] 857 | | let mut flip = 0; [INFO] [stderr] ... | [INFO] [stderr] 946 | | } [INFO] [stderr] 947 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/compiler.rs:858:9 [INFO] [stderr] | [INFO] [stderr] 858 | / let mut jumplabel = elselabel; [INFO] [stderr] 859 | | if hasnextcond { [INFO] [stderr] 860 | | flip = 1; [INFO] [stderr] 861 | | jumplabel = thenlabel; [INFO] [stderr] 862 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let jumplabel = if hasnextcond { ..; thenlabel } else { elselabel };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:939:65 [INFO] [stderr] | [INFO] [stderr] 939 | self.code.add_ABC(OP_TEST, a as i32, 0, 0 ^ flip, start_line(expr)); [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:941:78 [INFO] [stderr] | [INFO] [stderr] 941 | self.code.add_ABC(OP_TESTSET, sreg as i32, a as i32, 0 ^ flip, start_line(expr)); [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `state::State` [INFO] [stderr] --> src/state.rs:23:5 [INFO] [stderr] | [INFO] [stderr] 23 | / pub fn new() -> State { [INFO] [stderr] 24 | | State {} [INFO] [stderr] 25 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/compiler.rs:1008:17 [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] 11 | #[derive(Default)] [INFO] [stderr] 1008 | / loop { [INFO] [stderr] | [INFO] [stderr] 1009 | | match current.inner() { [INFO] [stderr] 1010 | | Expr::BinaryOp(BinaryOpr::Concat, ref sublhs, ref subrhs) => { [INFO] [stderr] 1011 | | crange += 1; [INFO] [stderr] ... | [INFO] [stderr] 1015 | | } [INFO] [stderr] 1016 | | } [INFO] [stderr] | |_________________^ help: try: `while let Expr::BinaryOp(BinaryOpr::Concat, ref sublhs, ref subrhs) = current.inner() { .. }` [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler.rs:1047:17 [INFO] [stderr] | [INFO] [stderr] 1047 | / match subexpr.inner() { [INFO] [stderr] 1048 | | &Expr::True => { [INFO] [stderr] 1049 | | self.code.add_ABC(OP_LOADBOOL, expr_ctx.savereg(reg) as i32, 0, 0, start_line(expr)); [INFO] [stderr] 1050 | | return; [INFO] [stderr] ... | [INFO] [stderr] 1056 | | _ => (OP_NOT, subexpr) [INFO] [stderr] 1057 | | } [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] 1047 | match *subexpr.inner() { [INFO] [stderr] 1048 | Expr::True => { [INFO] [stderr] 1049 | self.code.add_ABC(OP_LOADBOOL, expr_ctx.savereg(reg) as i32, 0, 0, start_line(expr)); [INFO] [stderr] 1050 | return; [INFO] [stderr] 1051 | } [INFO] [stderr] 1052 | Expr::False | Expr::Nil => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/state.rs:45:16 [INFO] [stderr] | [INFO] [stderr] 45 | if buf.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!buf.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler.rs:1108:33 [INFO] [stderr] | [INFO] [stderr] 1108 | let v = match opr { [INFO] [stderr] | _________________________________^ [INFO] [stderr] 1109 | | &BinaryOpr::Add => { l + r } [INFO] [stderr] 1110 | | &BinaryOpr::Sub => { l - r } [INFO] [stderr] 1111 | | &BinaryOpr::Mul => { l * r } [INFO] [stderr] ... | [INFO] [stderr] 1115 | | _ => unreachable!() [INFO] [stderr] 1116 | | }; [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] 1108 | let v = match *opr { [INFO] [stderr] 1109 | BinaryOpr::Add => { l + r } [INFO] [stderr] 1110 | BinaryOpr::Sub => { l - r } [INFO] [stderr] 1111 | BinaryOpr::Mul => { l * r } [INFO] [stderr] 1112 | BinaryOpr::Div => { l / r } [INFO] [stderr] 1113 | BinaryOpr::Mod => { lua_modulo(*l, *r) } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler.rs:1137:9 [INFO] [stderr] | [INFO] [stderr] 1137 | / match expr.inner() { [INFO] [stderr] 1138 | | &Expr::True => self.code.add_ABC(OP_LOADBOOL, svreg, 1, 0, start_line(expr)), [INFO] [stderr] 1139 | | &Expr::False => self.code.add_ABC(OP_LOADBOOL, svreg, 0, 0, start_line(expr)), [INFO] [stderr] 1140 | | &Expr::Nil => self.code.add_ABC(OP_LOADNIL, svreg, svreg, 0, start_line(expr)), [INFO] [stderr] ... | [INFO] [stderr] 1226 | | } [INFO] [stderr] 1227 | | }; [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] 1137 | match *expr.inner() { [INFO] [stderr] 1138 | Expr::True => self.code.add_ABC(OP_LOADBOOL, svreg, 1, 0, start_line(expr)), [INFO] [stderr] 1139 | Expr::False => self.code.add_ABC(OP_LOADBOOL, svreg, 0, 0, start_line(expr)), [INFO] [stderr] 1140 | Expr::Nil => self.code.add_ABC(OP_LOADNIL, svreg, svreg, 0, start_line(expr)), [INFO] [stderr] 1141 | Expr::Number(f) => { [INFO] [stderr] 1142 | let num = self.const_index(Rc::new(Value::Number(f))); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/compiler.rs:1181:29 [INFO] [stderr] | [INFO] [stderr] 1181 | let mut b = reg.clone(); [INFO] [stderr] | ^^^^^^^^^^^ help: try removing the `clone` call: `reg` [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/compiler.rs:1183:29 [INFO] [stderr] | [INFO] [stderr] 1183 | let mut c = reg.clone(); [INFO] [stderr] | ^^^^^^^^^^^ help: try removing the `clone` call: `reg` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler.rs:1185:30 [INFO] [stderr] | [INFO] [stderr] 1185 | let opcode = if let &Expr::String(_) = key.inner() { OP_GETTABLEKS } else { OP_GETTABLE }; [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] 1185 | let opcode = if let Expr::String(_) = *key.inner() { OP_GETTABLEKS } else { OP_GETTABLE }; [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/compiler.rs:1253:49 [INFO] [stderr] | [INFO] [stderr] 1253 | fn compile_assign_stmt_left(&mut self, lhs: &Vec) -> (usize, Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/scanner.rs:243:28 [INFO] [stderr] | [INFO] [stderr] 243 | Ok(ref buf) if buf.len() > 0 => { [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!buf.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/scanner.rs:283:9 [INFO] [stderr] | [INFO] [stderr] 283 | self.line_number = self.line_number + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.line_number += 1` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler.rs:1259:13 [INFO] [stderr] | [INFO] [stderr] 1259 | / match expr.inner() { [INFO] [stderr] 1260 | | &Expr::Ident(ref s) => { [INFO] [stderr] 1261 | | let identtype = self.get_ident_reftype(s); [INFO] [stderr] 1262 | | let mut expr_ctx = ExprContext::new(identtype, REG_UNDEFINED, 0); [INFO] [stderr] ... | [INFO] [stderr] 1288 | | _ => unreachable!("invalid left expression:{:#?}", expr.inner()) [INFO] [stderr] 1289 | | } [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] 1259 | match *expr.inner() { [INFO] [stderr] 1260 | Expr::Ident(ref s) => { [INFO] [stderr] 1261 | let identtype = self.get_ident_reftype(s); [INFO] [stderr] 1262 | let mut expr_ctx = ExprContext::new(identtype, REG_UNDEFINED, 0); [INFO] [stderr] 1263 | match identtype { [INFO] [stderr] 1264 | ExprScope::Global => { [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/compiler.rs:1296:39 [INFO] [stderr] | [INFO] [stderr] 1296 | lhs: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:1297:39 [INFO] [stderr] | [INFO] [stderr] 1297 | rhs: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false [INFO] [stderr] --> src/compiler.rs:1304:87 [INFO] [stderr] | [INFO] [stderr] 1304 | if namesassigned < rhs.len() && rhs[namesassigned].inner().is_vararg() && (lenexprs - namesassigned - 1) <= 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: because 0 is the minimum value for this type, the case where the two sides are not equal never occurs, consider using (lenexprs - namesassigned - 1) == 0 instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `acs` [INFO] [stderr] --> src/compiler.rs:1309:26 [INFO] [stderr] | [INFO] [stderr] 1309 | for i in namesassigned..(namesassigned + incr) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 1309 | for (i, ) in acs.iter_mut().enumerate().skip(namesassigned).take(incr) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `rhs` [INFO] [stderr] --> src/compiler.rs:1351:18 [INFO] [stderr] | [INFO] [stderr] 1351 | for i in namesassigned..lenexprs { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 1351 | for (i, ) in rhs.iter().enumerate().take(lenexprs).skip(namesassigned) { [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/compiler.rs:1358:44 [INFO] [stderr] | [INFO] [stderr] 1358 | fn compile_assign_stmt(&mut self, lhs: &Vec, rhs: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:1358:65 [INFO] [stderr] | [INFO] [stderr] 1358 | fn compile_assign_stmt(&mut self, lhs: &Vec, rhs: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:1412:49 [INFO] [stderr] | [INFO] [stderr] 1412 | fn compile_reg_assignment(&mut self, names: &Vec, exprs: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:1412:70 [INFO] [stderr] | [INFO] [stderr] 1412 | fn compile_reg_assignment(&mut self, names: &Vec, exprs: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false [INFO] [stderr] --> src/compiler.rs:1420:60 [INFO] [stderr] | [INFO] [stderr] 1420 | if exprs[namesassigned].inner().is_vararg() && (lenexprs - namesassigned - 1) <= 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: because 0 is the minimum value for this type, the case where the two sides are not equal never occurs, consider using (lenexprs - namesassigned - 1) == 0 instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/scanner.rs:430:46 [INFO] [stderr] | [INFO] [stderr] 430 | _ if '0' <= c && c <= '9' => cvalue = cvalue - ('0' as u8), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `cvalue -= ('0' as u8)` [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: the loop variable `i` is used to index `exprs` [INFO] [stderr] --> src/compiler.rs:1440:18 [INFO] [stderr] | [INFO] [stderr] 1440 | for i in namesassigned..lenexprs { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/scanner.rs:430:64 [INFO] [stderr] | [INFO] [stderr] 430 | _ if '0' <= c && c <= '9' => cvalue = cvalue - ('0' as u8), [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 1440 | for (i, ) in exprs.iter().enumerate().take(lenexprs).skip(namesassigned) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] = note: #[warn(clippy::char_lit_as_u8)] on by default [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'0' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/scanner.rs:431:64 [INFO] [stderr] | [INFO] [stderr] 431 | _ if 'a' <= c && c <= 'z' => cvalue = cvalue - ('a' as u8) + 10, [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'a' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/scanner.rs:432:64 [INFO] [stderr] | [INFO] [stderr] 432 | _ if 'A' <= c && c <= 'z' => cvalue = cvalue - ('A' as u8) + 10, [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'A' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:1447:52 [INFO] [stderr] | [INFO] [stderr] 1447 | fn compile_local_assign_stmt(&mut self, names: &Vec, values: &Vec, line: u32) { [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:1447:74 [INFO] [stderr] | [INFO] [stderr] 1447 | fn compile_local_assign_stmt(&mut self, names: &Vec, values: &Vec, line: u32) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/scanner.rs:437:13 [INFO] [stderr] | [INFO] [stderr] 437 | i = i + 1; [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `i += 1` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [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: manual implementation of an assign operation [INFO] [stderr] --> src/scanner.rs:454:46 [INFO] [stderr] | [INFO] [stderr] 454 | _ if '0' <= c && c <= '9' => cvalue = cvalue - ('0' as u32), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `cvalue -= ('0' as u32)` [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: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/scanner.rs:460:28 [INFO] [stderr] | [INFO] [stderr] 460 | n = n * 16.0 + (cvalue as f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `f64::from(cvalue)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/scanner.rs:462:13 [INFO] [stderr] | [INFO] [stderr] 462 | count = count + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `count += 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: manual implementation of an assign operation [INFO] [stderr] --> src/scanner.rs:479:13 [INFO] [stderr] | [INFO] [stderr] 479 | 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: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/scanner.rs:481:16 [INFO] [stderr] | [INFO] [stderr] 481 | if r > (u8::MAX as u32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `u32::from(u8::MAX)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler.rs:1467:9 [INFO] [stderr] | [INFO] [stderr] 1467 | / match expr.inner() { [INFO] [stderr] 1468 | | &Expr::False | &Expr::Nil => { [INFO] [stderr] 1469 | | if !hasnextcond { [INFO] [stderr] 1470 | | self.code.add_ASBx(OP_JMP, 0, elselabel, startline); [INFO] [stderr] ... | [INFO] [stderr] 1508 | | _ => {} [INFO] [stderr] 1509 | | } [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] 1467 | match *expr.inner() { [INFO] [stderr] 1468 | Expr::False | Expr::Nil => { [INFO] [stderr] 1469 | if !hasnextcond { [INFO] [stderr] 1470 | self.code.add_ASBx(OP_JMP, 0, elselabel, startline); [INFO] [stderr] 1471 | } [INFO] [stderr] 1472 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:1513:49 [INFO] [stderr] | [INFO] [stderr] 1513 | self.code.add_ABC(OP_TEST, a as i32, 0, 0 ^ flip, startline); [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [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/compiler.rs:1517:62 [INFO] [stderr] | [INFO] [stderr] 1517 | fn compile_while_stmt(&mut self, cond: &ExprNode, stmts: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[StmtNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:1538:63 [INFO] [stderr] | [INFO] [stderr] 1538 | fn compile_repeat_stmt(&mut self, cond: &ExprNode, stmts: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[StmtNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/compiler.rs:1556:9 [INFO] [stderr] | [INFO] [stderr] 1556 | / match self.leave_block() { [INFO] [stderr] 1557 | | Some(n) => { [INFO] [stderr] 1558 | | let label = self.new_label(); [INFO] [stderr] 1559 | | self.code.add_ASBx(OP_JMP, 0, label, end_line); [INFO] [stderr] ... | [INFO] [stderr] 1567 | | None => {} [INFO] [stderr] 1568 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 1556 | if let Some(n) = self.leave_block() { [INFO] [stderr] 1557 | let label = self.new_label(); [INFO] [stderr] 1558 | self.code.add_ASBx(OP_JMP, 0, label, end_line); [INFO] [stderr] 1559 | let lastpc = self.code.last_pc(); [INFO] [stderr] 1560 | self.set_label_pc(elselabel, lastpc); [INFO] [stderr] 1561 | self.code.add_ABC(OP_CLOSE, n as i32, 0, 0, end_line); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/scanner.rs:531:13 [INFO] [stderr] | [INFO] [stderr] 531 | exponent = exponent * -4; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `exponent *= -4` [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/compiler.rs:1581:12 [INFO] [stderr] | [INFO] [stderr] 1581 | if ifelsethen.els.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!ifelsethen.els.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: length comparison to zero [INFO] [stderr] --> src/compiler.rs:1587:12 [INFO] [stderr] | [INFO] [stderr] 1587 | if ifelsethen.els.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!ifelsethen.els.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: single-character string constant used as pattern [INFO] [stderr] --> src/scanner.rs:579:26 [INFO] [stderr] | [INFO] [stderr] 579 | if s.starts_with("0") { [INFO] [stderr] | ^^^ help: try using a char instead: `'0'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/scanner.rs:580:41 [INFO] [stderr] | [INFO] [stderr] 580 | let r = s.trim_left_matches("0").to_string(); [INFO] [stderr] | ^^^ help: try using a char instead: `'0'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/scanner.rs:581:16 [INFO] [stderr] | [INFO] [stderr] 581 | if r.len() < 1 || r == "" || !is_decimal(r.as_bytes()[0] as char) { [INFO] [stderr] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `r.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: length comparison to zero [INFO] [stderr] --> src/scanner.rs:609:23 [INFO] [stderr] | [INFO] [stderr] 609 | debug_assert!(s.len() > 0); [INFO] [stderr] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!s.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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:1661:46 [INFO] [stderr] | [INFO] [stderr] 1661 | fn compile_return_stmt(&mut self, exprs: &Vec, startline: u32, endline: u32) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler.rs:1725:9 [INFO] [stderr] | [INFO] [stderr] 1725 | / match stmt.inner() { [INFO] [stderr] 1726 | | &Stmt::Assign(ref lhs, ref rhs) => self.compile_assign_stmt(lhs, rhs), [INFO] [stderr] 1727 | | &Stmt::LocalAssign(ref names, ref values) => self.compile_local_assign_stmt(names, values, startline), [INFO] [stderr] 1728 | | &Stmt::FuncCall(ref expr) | &Stmt::MethodCall(ref expr) => { [INFO] [stderr] ... | [INFO] [stderr] 1752 | | &Stmt::Break => self.compile_break_stmt(startline), [INFO] [stderr] 1753 | | } [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] 1725 | match *stmt.inner() { [INFO] [stderr] 1726 | Stmt::Assign(ref lhs, ref rhs) => self.compile_assign_stmt(lhs, rhs), [INFO] [stderr] 1727 | Stmt::LocalAssign(ref names, ref values) => self.compile_local_assign_stmt(names, values, startline), [INFO] [stderr] 1728 | Stmt::FuncCall(ref expr) | Stmt::MethodCall(ref expr) => { [INFO] [stderr] 1729 | let regtop = self.reg_top(); [INFO] [stderr] 1730 | self.compile_fncall_expr(regtop, expr, &ExprContext::with_opt(-1)); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/compiler.rs:1757:58 [INFO] [stderr] | [INFO] [stderr] 1757 | let mut maxreg = if self.proto.param_count > 1 { self.proto.param_count as i32 } else { 1 }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(self.proto.param_count)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [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/compiler.rs:1848:62 [INFO] [stderr] | [INFO] [stderr] 1848 | fn compile_func_expr(&mut self, params: &ParList, stmts: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[StmtNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/compiler.rs:1867:20 [INFO] [stderr] | [INFO] [stderr] 1867 | if let Some(_) = self.parent { [INFO] [stderr] | _____________- ^^^^^^^ [INFO] [stderr] 1868 | | self.register_local_var(String::from("arg")); [INFO] [stderr] 1869 | | } [INFO] [stderr] | |_____________- help: try this: `if self.parent.is_some()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/compiler.rs:1897:23 [INFO] [stderr] | [INFO] [stderr] 1897 | let lineinfo = if stmts.len() > 0 { (start_line(&stmts[0]), end_line(&stmts[stmts.len() - 1])) } else { (1, 1) }; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!stmts.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] error: aborting due to 3 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `lua`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/parser.rs:348:17 [INFO] [stderr] | [INFO] [stderr] 348 | / match expr.inner_mut() { [INFO] [stderr] 349 | | Expr::FuncCall(ref mut call) => call.adj = true, [INFO] [stderr] 350 | | _ => {} [INFO] [stderr] 351 | | } [INFO] [stderr] | |_________________^ help: try this: `if let Expr::FuncCall(ref mut call) = expr.inner_mut() { call.adj = true }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/parser.rs:527:27 [INFO] [stderr] | [INFO] [stderr] 527 | for mut elseif in elseifs.into_iter().rev().into_iter() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `elseifs.into_iter().rev()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:709:20 [INFO] [stderr] | [INFO] [stderr] 709 | let stmt = match expr.inner() { [INFO] [stderr] | ____________________^ [INFO] [stderr] 710 | | &Expr::FuncCall(_) => Stmt::FuncCall(expr), [INFO] [stderr] 711 | | &Expr::MethodCall(_) => Stmt::MethodCall(expr), [INFO] [stderr] 712 | | _ => { [INFO] [stderr] ... | [INFO] [stderr] 720 | | } [INFO] [stderr] 721 | | }; [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] 709 | let stmt = match *expr.inner() { [INFO] [stderr] 710 | Expr::FuncCall(_) => Stmt::FuncCall(expr), [INFO] [stderr] 711 | Expr::MethodCall(_) => Stmt::MethodCall(expr), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/instruction.rs:141:9 [INFO] [stderr] | [INFO] [stderr] 141 | / match self { [INFO] [stderr] 142 | | &OpType::ABC => "ABC".to_string(), [INFO] [stderr] 143 | | &OpType::ABx => "ABx".to_string(), [INFO] [stderr] 144 | | &OpType::ASBx => "ASBx".to_string(), [INFO] [stderr] 145 | | } [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] 141 | match *self { [INFO] [stderr] 142 | OpType::ABC => "ABC".to_string(), [INFO] [stderr] 143 | OpType::ABx => "ABx".to_string(), [INFO] [stderr] 144 | OpType::ASBx => "ASBx".to_string(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/instruction.rs:371:19 [INFO] [stderr] | [INFO] [stderr] 371 | OP_NOP => format!("{}", ops), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `ops.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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:101:9 [INFO] [stderr] | [INFO] [stderr] 101 | / match self { [INFO] [stderr] 102 | | &Expr::Dots => true, [INFO] [stderr] 103 | | &Expr::FuncCall(ref call) => !call.adj, [INFO] [stderr] 104 | | _ => false, [INFO] [stderr] 105 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 101 | match *self { [INFO] [stderr] 102 | Expr::Dots => true, [INFO] [stderr] 103 | Expr::FuncCall(ref call) => !call.adj, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `ast::ParList` [INFO] [stderr] --> src/ast.rs:126:5 [INFO] [stderr] | [INFO] [stderr] 126 | / pub fn new() -> ParList { [INFO] [stderr] 127 | | ParList { [INFO] [stderr] 128 | | vargs: false, [INFO] [stderr] 129 | | names: Vec::new(), [INFO] [stderr] 130 | | } [INFO] [stderr] 131 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 120 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/compiler.rs:23:8 [INFO] [stderr] | [INFO] [stderr] 23 | if lhs < 0.0 || rhs < 0.0 && !(lhs < 0.0 && rhs < 0.0) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::nonminimal_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 23 | if rhs < 0.0 || lhs < 0.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] 23 | if !(!lhs < 0.0 && !rhs < 0.0) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false [INFO] [stderr] --> src/compiler.rs:172:12 [INFO] [stderr] | [INFO] [stderr] 172 | if len <= 0 || self.pc == len { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::absurd_extreme_comparisons)] on by default [INFO] [stderr] = help: because 0 is the minimum value for this type, the case where the two sides are not equal never occurs, consider using len == 0 instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/compiler.rs:339:26 [INFO] [stderr] | [INFO] [stderr] 339 | fn find(&self, name: &String) -> Option { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/compiler.rs:383:40 [INFO] [stderr] | [INFO] [stderr] 383 | fn find_var_block(&mut self, name: &String) -> Option<&mut Block> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/compiler.rs:570:36 [INFO] [stderr] | [INFO] [stderr] 570 | fn find_local_var(&self, name: &String) -> Option { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:623:40 [INFO] [stderr] | [INFO] [stderr] 623 | fn compile_chunk(&mut self, chunk: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[StmtNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:629:40 [INFO] [stderr] | [INFO] [stderr] 629 | fn compile_block(&mut self, block: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[StmtNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/compiler.rs:630:12 [INFO] [stderr] | [INFO] [stderr] 630 | if block.len() < 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `block.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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/compiler.rs:642:39 [INFO] [stderr] | [INFO] [stderr] 642 | fn get_ident_reftype(&self, name: &String) -> ExprScope { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (8/7) [INFO] [stderr] --> src/compiler.rs:821:5 [INFO] [stderr] | [INFO] [stderr] 821 | / fn compile_binary_rel_expr_aux(&mut self, mut reg: usize, [INFO] [stderr] 822 | | opr: BinaryOpr, lhs: &ExprNode, rhs: &ExprNode, [INFO] [stderr] 823 | | flip: i32, jumplabel: i32, line: u32) { [INFO] [stderr] 824 | | let mut b = reg; [INFO] [stderr] ... | [INFO] [stderr] 839 | | self.code.add_ASBx(OP_JMP, 0, jumplabel, line); [INFO] [stderr] 840 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::too_many_arguments)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:830:41 [INFO] [stderr] | [INFO] [stderr] 830 | BinaryOpr::Eq => ABC(OP_EQ, 0 ^ flip, b as i32, c as i32), [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:832:41 [INFO] [stderr] | [INFO] [stderr] 832 | BinaryOpr::LT => ABC(OP_LT, 0 ^ flip, b as i32, c as i32), [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:833:41 [INFO] [stderr] | [INFO] [stderr] 833 | BinaryOpr::GT => ABC(OP_LT, 0 ^ flip, c as i32, b as i32), [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:834:41 [INFO] [stderr] | [INFO] [stderr] 834 | BinaryOpr::LE => ABC(OP_LE, 0 ^ flip, b as i32, c as i32), [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:835:41 [INFO] [stderr] | [INFO] [stderr] 835 | BinaryOpr::GE => ABC(OP_LE, 0 ^ flip, c as i32, b as i32), [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (8/7) [INFO] [stderr] --> src/compiler.rs:854:5 [INFO] [stderr] | [INFO] [stderr] 854 | / fn compile_binary_log_expr_aux(&mut self, mut reg: usize, [INFO] [stderr] 855 | | expr: &ExprNode, expr_ctx: &ExprContext, [INFO] [stderr] 856 | | thenlabel: i32, elselabel: i32, hasnextcond: bool, lb: &mut Lblabels) { [INFO] [stderr] 857 | | let mut flip = 0; [INFO] [stderr] ... | [INFO] [stderr] 946 | | } [INFO] [stderr] 947 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/compiler.rs:858:9 [INFO] [stderr] | [INFO] [stderr] 858 | / let mut jumplabel = elselabel; [INFO] [stderr] 859 | | if hasnextcond { [INFO] [stderr] 860 | | flip = 1; [INFO] [stderr] 861 | | jumplabel = thenlabel; [INFO] [stderr] 862 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let jumplabel = if hasnextcond { ..; thenlabel } else { elselabel };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:939:65 [INFO] [stderr] | [INFO] [stderr] 939 | self.code.add_ABC(OP_TEST, a as i32, 0, 0 ^ flip, start_line(expr)); [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:941:78 [INFO] [stderr] | [INFO] [stderr] 941 | self.code.add_ABC(OP_TESTSET, sreg as i32, a as i32, 0 ^ flip, start_line(expr)); [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/compiler.rs:1008:17 [INFO] [stderr] | [INFO] [stderr] 1008 | / loop { [INFO] [stderr] 1009 | | match current.inner() { [INFO] [stderr] 1010 | | Expr::BinaryOp(BinaryOpr::Concat, ref sublhs, ref subrhs) => { [INFO] [stderr] 1011 | | crange += 1; [INFO] [stderr] ... | [INFO] [stderr] 1015 | | } [INFO] [stderr] 1016 | | } [INFO] [stderr] | |_________________^ help: try: `while let Expr::BinaryOp(BinaryOpr::Concat, ref sublhs, ref subrhs) = current.inner() { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler.rs:1047:17 [INFO] [stderr] | [INFO] [stderr] 1047 | / match subexpr.inner() { [INFO] [stderr] 1048 | | &Expr::True => { [INFO] [stderr] 1049 | | self.code.add_ABC(OP_LOADBOOL, expr_ctx.savereg(reg) as i32, 0, 0, start_line(expr)); [INFO] [stderr] 1050 | | return; [INFO] [stderr] ... | [INFO] [stderr] 1056 | | _ => (OP_NOT, subexpr) [INFO] [stderr] 1057 | | } [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] 1047 | match *subexpr.inner() { [INFO] [stderr] 1048 | Expr::True => { [INFO] [stderr] 1049 | self.code.add_ABC(OP_LOADBOOL, expr_ctx.savereg(reg) as i32, 0, 0, start_line(expr)); [INFO] [stderr] 1050 | return; [INFO] [stderr] 1051 | } [INFO] [stderr] 1052 | Expr::False | Expr::Nil => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler.rs:1108:33 [INFO] [stderr] | [INFO] [stderr] 1108 | let v = match opr { [INFO] [stderr] | _________________________________^ [INFO] [stderr] 1109 | | &BinaryOpr::Add => { l + r } [INFO] [stderr] 1110 | | &BinaryOpr::Sub => { l - r } [INFO] [stderr] 1111 | | &BinaryOpr::Mul => { l * r } [INFO] [stderr] ... | [INFO] [stderr] 1115 | | _ => unreachable!() [INFO] [stderr] 1116 | | }; [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] 1108 | let v = match *opr { [INFO] [stderr] 1109 | BinaryOpr::Add => { l + r } [INFO] [stderr] 1110 | BinaryOpr::Sub => { l - r } [INFO] [stderr] 1111 | BinaryOpr::Mul => { l * r } [INFO] [stderr] 1112 | BinaryOpr::Div => { l / r } [INFO] [stderr] 1113 | BinaryOpr::Mod => { lua_modulo(*l, *r) } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler.rs:1137:9 [INFO] [stderr] | [INFO] [stderr] 1137 | / match expr.inner() { [INFO] [stderr] 1138 | | &Expr::True => self.code.add_ABC(OP_LOADBOOL, svreg, 1, 0, start_line(expr)), [INFO] [stderr] 1139 | | &Expr::False => self.code.add_ABC(OP_LOADBOOL, svreg, 0, 0, start_line(expr)), [INFO] [stderr] 1140 | | &Expr::Nil => self.code.add_ABC(OP_LOADNIL, svreg, svreg, 0, start_line(expr)), [INFO] [stderr] ... | [INFO] [stderr] 1226 | | } [INFO] [stderr] 1227 | | }; [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] 1137 | match *expr.inner() { [INFO] [stderr] 1138 | Expr::True => self.code.add_ABC(OP_LOADBOOL, svreg, 1, 0, start_line(expr)), [INFO] [stderr] 1139 | Expr::False => self.code.add_ABC(OP_LOADBOOL, svreg, 0, 0, start_line(expr)), [INFO] [stderr] 1140 | Expr::Nil => self.code.add_ABC(OP_LOADNIL, svreg, svreg, 0, start_line(expr)), [INFO] [stderr] 1141 | Expr::Number(f) => { [INFO] [stderr] 1142 | let num = self.const_index(Rc::new(Value::Number(f))); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/compiler.rs:1181:29 [INFO] [stderr] | [INFO] [stderr] 1181 | let mut b = reg.clone(); [INFO] [stderr] | ^^^^^^^^^^^ help: try removing the `clone` call: `reg` [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/compiler.rs:1183:29 [INFO] [stderr] | [INFO] [stderr] 1183 | let mut c = reg.clone(); [INFO] [stderr] | ^^^^^^^^^^^ help: try removing the `clone` call: `reg` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler.rs:1185:30 [INFO] [stderr] | [INFO] [stderr] 1185 | let opcode = if let &Expr::String(_) = key.inner() { OP_GETTABLEKS } else { OP_GETTABLE }; [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] 1185 | let opcode = if let Expr::String(_) = *key.inner() { OP_GETTABLEKS } else { OP_GETTABLE }; [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/compiler.rs:1253:49 [INFO] [stderr] | [INFO] [stderr] 1253 | fn compile_assign_stmt_left(&mut self, lhs: &Vec) -> (usize, Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler.rs:1259:13 [INFO] [stderr] | [INFO] [stderr] 1259 | / match expr.inner() { [INFO] [stderr] 1260 | | &Expr::Ident(ref s) => { [INFO] [stderr] 1261 | | let identtype = self.get_ident_reftype(s); [INFO] [stderr] 1262 | | let mut expr_ctx = ExprContext::new(identtype, REG_UNDEFINED, 0); [INFO] [stderr] ... | [INFO] [stderr] 1288 | | _ => unreachable!("invalid left expression:{:#?}", expr.inner()) [INFO] [stderr] 1289 | | } [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] 1259 | match *expr.inner() { [INFO] [stderr] 1260 | Expr::Ident(ref s) => { [INFO] [stderr] 1261 | let identtype = self.get_ident_reftype(s); [INFO] [stderr] 1262 | let mut expr_ctx = ExprContext::new(identtype, REG_UNDEFINED, 0); [INFO] [stderr] 1263 | match identtype { [INFO] [stderr] 1264 | ExprScope::Global => { [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/compiler.rs:1296:39 [INFO] [stderr] | [INFO] [stderr] 1296 | lhs: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:1297:39 [INFO] [stderr] | [INFO] [stderr] 1297 | rhs: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false [INFO] [stderr] --> src/compiler.rs:1304:87 [INFO] [stderr] | [INFO] [stderr] 1304 | if namesassigned < rhs.len() && rhs[namesassigned].inner().is_vararg() && (lenexprs - namesassigned - 1) <= 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: because 0 is the minimum value for this type, the case where the two sides are not equal never occurs, consider using (lenexprs - namesassigned - 1) == 0 instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `acs` [INFO] [stderr] --> src/compiler.rs:1309:26 [INFO] [stderr] | [INFO] [stderr] 1309 | for i in namesassigned..(namesassigned + incr) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 1309 | for (i, ) in acs.iter_mut().enumerate().skip(namesassigned).take(incr) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `rhs` [INFO] [stderr] --> src/compiler.rs:1351:18 [INFO] [stderr] | [INFO] [stderr] 1351 | for i in namesassigned..lenexprs { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 1351 | for (i, ) in rhs.iter().enumerate().take(lenexprs).skip(namesassigned) { [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/compiler.rs:1358:44 [INFO] [stderr] | [INFO] [stderr] 1358 | fn compile_assign_stmt(&mut self, lhs: &Vec, rhs: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:1358:65 [INFO] [stderr] | [INFO] [stderr] 1358 | fn compile_assign_stmt(&mut self, lhs: &Vec, rhs: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:1412:49 [INFO] [stderr] | [INFO] [stderr] 1412 | fn compile_reg_assignment(&mut self, names: &Vec, exprs: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:1412:70 [INFO] [stderr] | [INFO] [stderr] 1412 | fn compile_reg_assignment(&mut self, names: &Vec, exprs: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false [INFO] [stderr] --> src/compiler.rs:1420:60 [INFO] [stderr] | [INFO] [stderr] 1420 | if exprs[namesassigned].inner().is_vararg() && (lenexprs - namesassigned - 1) <= 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: because 0 is the minimum value for this type, the case where the two sides are not equal never occurs, consider using (lenexprs - namesassigned - 1) == 0 instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `exprs` [INFO] [stderr] --> src/compiler.rs:1440:18 [INFO] [stderr] | [INFO] [stderr] 1440 | for i in namesassigned..lenexprs { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 1440 | for (i, ) in exprs.iter().enumerate().take(lenexprs).skip(namesassigned) { [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/compiler.rs:1447:52 [INFO] [stderr] | [INFO] [stderr] 1447 | fn compile_local_assign_stmt(&mut self, names: &Vec, values: &Vec, line: u32) { [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:1447:74 [INFO] [stderr] | [INFO] [stderr] 1447 | fn compile_local_assign_stmt(&mut self, names: &Vec, values: &Vec, line: u32) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler.rs:1467:9 [INFO] [stderr] | [INFO] [stderr] 1467 | / match expr.inner() { [INFO] [stderr] 1468 | | &Expr::False | &Expr::Nil => { [INFO] [stderr] 1469 | | if !hasnextcond { [INFO] [stderr] 1470 | | self.code.add_ASBx(OP_JMP, 0, elselabel, startline); [INFO] [stderr] ... | [INFO] [stderr] 1508 | | _ => {} [INFO] [stderr] 1509 | | } [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] 1467 | match *expr.inner() { [INFO] [stderr] 1468 | Expr::False | Expr::Nil => { [INFO] [stderr] 1469 | if !hasnextcond { [INFO] [stderr] 1470 | self.code.add_ASBx(OP_JMP, 0, elselabel, startline); [INFO] [stderr] 1471 | } [INFO] [stderr] 1472 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `flip` [INFO] [stderr] --> src/compiler.rs:1513:49 [INFO] [stderr] | [INFO] [stderr] 1513 | self.code.add_ABC(OP_TEST, a as i32, 0, 0 ^ flip, startline); [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [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/compiler.rs:1517:62 [INFO] [stderr] | [INFO] [stderr] 1517 | fn compile_while_stmt(&mut self, cond: &ExprNode, stmts: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[StmtNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:1538:63 [INFO] [stderr] | [INFO] [stderr] 1538 | fn compile_repeat_stmt(&mut self, cond: &ExprNode, stmts: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[StmtNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/compiler.rs:1556:9 [INFO] [stderr] | [INFO] [stderr] 1556 | / match self.leave_block() { [INFO] [stderr] 1557 | | Some(n) => { [INFO] [stderr] 1558 | | let label = self.new_label(); [INFO] [stderr] 1559 | | self.code.add_ASBx(OP_JMP, 0, label, end_line); [INFO] [stderr] ... | [INFO] [stderr] 1567 | | None => {} [INFO] [stderr] 1568 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 1556 | if let Some(n) = self.leave_block() { [INFO] [stderr] 1557 | let label = self.new_label(); [INFO] [stderr] 1558 | self.code.add_ASBx(OP_JMP, 0, label, end_line); [INFO] [stderr] 1559 | let lastpc = self.code.last_pc(); [INFO] [stderr] 1560 | self.set_label_pc(elselabel, lastpc); [INFO] [stderr] 1561 | self.code.add_ABC(OP_CLOSE, n as i32, 0, 0, end_line); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/compiler.rs:1581:12 [INFO] [stderr] | [INFO] [stderr] 1581 | if ifelsethen.els.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!ifelsethen.els.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: length comparison to zero [INFO] [stderr] --> src/compiler.rs:1587:12 [INFO] [stderr] | [INFO] [stderr] 1587 | if ifelsethen.els.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!ifelsethen.els.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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/compiler.rs:1661:46 [INFO] [stderr] | [INFO] [stderr] 1661 | fn compile_return_stmt(&mut self, exprs: &Vec, startline: u32, endline: u32) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[ExprNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler.rs:1725:9 [INFO] [stderr] | [INFO] [stderr] 1725 | / match stmt.inner() { [INFO] [stderr] 1726 | | &Stmt::Assign(ref lhs, ref rhs) => self.compile_assign_stmt(lhs, rhs), [INFO] [stderr] 1727 | | &Stmt::LocalAssign(ref names, ref values) => self.compile_local_assign_stmt(names, values, startline), [INFO] [stderr] 1728 | | &Stmt::FuncCall(ref expr) | &Stmt::MethodCall(ref expr) => { [INFO] [stderr] ... | [INFO] [stderr] 1752 | | &Stmt::Break => self.compile_break_stmt(startline), [INFO] [stderr] 1753 | | } [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] 1725 | match *stmt.inner() { [INFO] [stderr] 1726 | Stmt::Assign(ref lhs, ref rhs) => self.compile_assign_stmt(lhs, rhs), [INFO] [stderr] 1727 | Stmt::LocalAssign(ref names, ref values) => self.compile_local_assign_stmt(names, values, startline), [INFO] [stderr] 1728 | Stmt::FuncCall(ref expr) | Stmt::MethodCall(ref expr) => { [INFO] [stderr] 1729 | let regtop = self.reg_top(); [INFO] [stderr] 1730 | self.compile_fncall_expr(regtop, expr, &ExprContext::with_opt(-1)); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/compiler.rs:1757:58 [INFO] [stderr] | [INFO] [stderr] 1757 | let mut maxreg = if self.proto.param_count > 1 { self.proto.param_count as i32 } else { 1 }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(self.proto.param_count)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [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/compiler.rs:1848:62 [INFO] [stderr] | [INFO] [stderr] 1848 | fn compile_func_expr(&mut self, params: &ParList, stmts: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[StmtNode]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/compiler.rs:1867:20 [INFO] [stderr] | [INFO] [stderr] 1867 | if let Some(_) = self.parent { [INFO] [stderr] | _____________- ^^^^^^^ [INFO] [stderr] 1868 | | self.register_local_var(String::from("arg")); [INFO] [stderr] 1869 | | } [INFO] [stderr] | |_____________- help: try this: `if self.parent.is_some()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/compiler.rs:1897:23 [INFO] [stderr] | [INFO] [stderr] 1897 | let lineinfo = if stmts.len() > 0 { (start_line(&stmts[0]), end_line(&stmts[stmts.len() - 1])) } else { (1, 1) }; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!stmts.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] error: aborting due to 3 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `lua`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "5d823f3e3cc4995d65407adf22c8e398cce0d35c4ab2fbef9eb81769edec9996"` [INFO] running `"docker" "rm" "-f" "5d823f3e3cc4995d65407adf22c8e398cce0d35c4ab2fbef9eb81769edec9996"` [INFO] [stdout] 5d823f3e3cc4995d65407adf22c8e398cce0d35c4ab2fbef9eb81769edec9996