[INFO] updating cached repository nilq/sabri [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/nilq/sabri [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/nilq/sabri" "work/ex/clippy-test-run/sources/stable/gh/nilq/sabri"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/nilq/sabri'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/nilq/sabri" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/nilq/sabri"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/nilq/sabri'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 0c1918e28f1cd29be9e927dc31308c81665ff259 [INFO] sha for GitHub repo nilq/sabri: 0c1918e28f1cd29be9e927dc31308c81665ff259 [INFO] validating manifest of nilq/sabri 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 nilq/sabri 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 nilq/sabri [INFO] finished frobbing nilq/sabri [INFO] frobbed toml for nilq/sabri written to work/ex/clippy-test-run/sources/stable/gh/nilq/sabri/Cargo.toml [INFO] started frobbing nilq/sabri [INFO] finished frobbing nilq/sabri [INFO] frobbed toml for nilq/sabri written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/nilq/sabri/Cargo.toml [INFO] crate nilq/sabri 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 nilq/sabri against stable+rustflags=-Dclippy::into_iter_on_array for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-5/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/nilq/sabri:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid -Dclippy::into_iter_on_array" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 86512d3ca505c60cbe13f62c9c64a7ab20bb9bd966a74bb752cc085547978e09 [INFO] running `"docker" "start" "-a" "86512d3ca505c60cbe13f62c9c64a7ab20bb9bd966a74bb752cc085547978e09"` [INFO] [stderr] Checking memchr v1.0.1 [INFO] [stderr] Checking thread-id v3.1.0 [INFO] [stderr] Checking nix v0.5.1 [INFO] [stderr] Checking thread_local v0.3.3 [INFO] [stderr] Checking aho-corasick v0.6.3 [INFO] [stderr] Checking regex v0.2.2 [INFO] [stderr] Checking rustyline v1.0.0 [INFO] [stderr] Checking docopt v0.7.0 [INFO] [stderr] Checking sabri v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sabri/syntax/lexer/tokenizer.rs:13:13 [INFO] [stderr] | [INFO] [stderr] 13 | index: index, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `index` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sabri/syntax/lexer/tokenizer.rs:14:13 [INFO] [stderr] | [INFO] [stderr] 14 | pos: pos, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `pos` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sabri/syntax/lexer/matcher.rs:169:13 [INFO] [stderr] | [INFO] [stderr] 169 | token_type: token_type, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `token_type` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sabri/syntax/lexer/matcher.rs:170:13 [INFO] [stderr] | [INFO] [stderr] 170 | constants: constants, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `constants` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sabri/syntax/lexer/lexer.rs:135:13 [INFO] [stderr] | [INFO] [stderr] 135 | tokenizer: tokenizer, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `tokenizer` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:243:17 [INFO] [stderr] | [INFO] [stderr] 243 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::println_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:296:13 [INFO] [stderr] | [INFO] [stderr] 296 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sabri/bytecode/closure.rs:18:13 [INFO] [stderr] | [INFO] [stderr] 18 | addr: addr, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `addr` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sabri/bytecode/closure.rs:19:13 [INFO] [stderr] | [INFO] [stderr] 19 | num_params: num_params, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `num_params` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sabri/bytecode/closure.rs:20:13 [INFO] [stderr] | [INFO] [stderr] 20 | env: env, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `env` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sabri/native.rs:16:22 [INFO] [stderr] | [INFO] [stderr] 16 | NativeFunc { f: f } [INFO] [stderr] | ^^^^ help: replace it with: `f` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sabri/syntax/lexer/tokenizer.rs:13:13 [INFO] [stderr] | [INFO] [stderr] 13 | index: index, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `index` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sabri/syntax/lexer/tokenizer.rs:14:13 [INFO] [stderr] | [INFO] [stderr] 14 | pos: pos, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `pos` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sabri/syntax/lexer/matcher.rs:169:13 [INFO] [stderr] | [INFO] [stderr] 169 | token_type: token_type, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `token_type` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sabri/syntax/lexer/matcher.rs:170:13 [INFO] [stderr] | [INFO] [stderr] 170 | constants: constants, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `constants` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sabri/syntax/lexer/lexer.rs:135:13 [INFO] [stderr] | [INFO] [stderr] 135 | tokenizer: tokenizer, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `tokenizer` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:243:17 [INFO] [stderr] | [INFO] [stderr] 243 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::println_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:296:13 [INFO] [stderr] | [INFO] [stderr] 296 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sabri/bytecode/closure.rs:18:13 [INFO] [stderr] | [INFO] [stderr] 18 | addr: addr, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `addr` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sabri/bytecode/closure.rs:19:13 [INFO] [stderr] | [INFO] [stderr] 19 | num_params: num_params, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `num_params` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sabri/bytecode/closure.rs:20:13 [INFO] [stderr] | [INFO] [stderr] 20 | env: env, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `env` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sabri/native.rs:16:22 [INFO] [stderr] | [INFO] [stderr] 16 | NativeFunc { f: f } [INFO] [stderr] | ^^^^ help: replace it with: `f` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::io` [INFO] [stderr] --> src/main.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | use std::io; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/sabri/syntax/lexer/matcher.rs:132:20 [INFO] [stderr] | [INFO] [stderr] 132 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 133 | | if found_escape { [INFO] [stderr] 134 | | string.push( [INFO] [stderr] 135 | | match tokenizer.next().unwrap() { [INFO] [stderr] ... | [INFO] [stderr] 153 | | } [INFO] [stderr] 154 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 132 | } else if found_escape { [INFO] [stderr] 133 | string.push( [INFO] [stderr] 134 | match tokenizer.next().unwrap() { [INFO] [stderr] 135 | c @ '\\' | c @ '\'' | c @ '"' => c, [INFO] [stderr] 136 | 'n' => '\n', [INFO] [stderr] 137 | 'r' => '\r', [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/sabri/syntax/lexer/mod.rs:6:1 [INFO] [stderr] | [INFO] [stderr] 6 | mod lexer; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::module_inception)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: unused import: `sabri::bytecode` [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | use sabri::bytecode; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:166:21 [INFO] [stderr] | [INFO] [stderr] 166 | return Ok(()) [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:169:25 [INFO] [stderr] | [INFO] [stderr] 169 | None => return Err(ParserError::new(&format!("can't assign undefined variable: {}", s))), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err(ParserError::new(&format!("can't assign undefined variable: {}", s)))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:226:9 [INFO] [stderr] | [INFO] [stderr] 226 | return Ok((addr, self.params.len())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok((addr, self.params.len()))` [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: module has the same name as its containing module [INFO] [stderr] --> src/sabri/syntax/parser/mod.rs:4:1 [INFO] [stderr] | [INFO] [stderr] 4 | pub mod parser; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: unused import: `ParserErrorValue` [INFO] [stderr] --> src/sabri/syntax/parser/parser.rs:4:27 [INFO] [stderr] | [INFO] [stderr] 4 | use parser::{ParserError, ParserErrorValue}; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/sabri/bytecode/op.rs:1:22 [INFO] [stderr] | [INFO] [stderr] 1 | pub const HALT: u8 = 0b111111; [INFO] [stderr] | ^^^^^^^^ help: consider: `0b11_1111` [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: unused import: `self::bytecode::TokenPosition` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | use self::bytecode::TokenPosition; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/sabri/bytecode/gen.rs:163:46 [INFO] [stderr] | [INFO] [stderr] 163 | self.instr.push(instr::c_op_26(HALT, 0x3ffffff)); [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: unused import: `Addr` [INFO] [stderr] --> src/sabri/bytecode/run.rs:11:22 [INFO] [stderr] | [INFO] [stderr] 11 | use self::bytecode::{Addr, INVALID}; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `RefCell`, `Ref` [INFO] [stderr] --> src/sabri/value.rs:1:17 [INFO] [stderr] | [INFO] [stderr] 1 | use std::cell::{Ref, RefCell}; [INFO] [stderr] | ^^^ ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `sabri::Value` [INFO] [stderr] --> src/sabri/error.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use sabri::Value; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `sabri::Env` [INFO] [stderr] --> src/sabri/symtab.rs:5:5 [INFO] [stderr] | [INFO] [stderr] 5 | use sabri::Env; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/main.rs:27:15 [INFO] [stderr] | [INFO] [stderr] 27 | const USAGE: &'static str = " [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::io` [INFO] [stderr] --> src/main.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | use std::io; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/sabri/syntax/lexer/matcher.rs:132:20 [INFO] [stderr] | [INFO] [stderr] 132 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 133 | | if found_escape { [INFO] [stderr] 134 | | string.push( [INFO] [stderr] 135 | | match tokenizer.next().unwrap() { [INFO] [stderr] ... | [INFO] [stderr] 153 | | } [INFO] [stderr] 154 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 132 | } else if found_escape { [INFO] [stderr] 133 | string.push( [INFO] [stderr] 134 | match tokenizer.next().unwrap() { [INFO] [stderr] 135 | c @ '\\' | c @ '\'' | c @ '"' => c, [INFO] [stderr] 136 | 'n' => '\n', [INFO] [stderr] 137 | 'r' => '\r', [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/sabri/syntax/lexer/mod.rs:6:1 [INFO] [stderr] | [INFO] [stderr] 6 | mod lexer; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::module_inception)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: unused import: `sabri::bytecode` [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | use sabri::bytecode; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:166:21 [INFO] [stderr] | [INFO] [stderr] 166 | return Ok(()) [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:169:25 [INFO] [stderr] | [INFO] [stderr] 169 | None => return Err(ParserError::new(&format!("can't assign undefined variable: {}", s))), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err(ParserError::new(&format!("can't assign undefined variable: {}", s)))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:226:9 [INFO] [stderr] | [INFO] [stderr] 226 | return Ok((addr, self.params.len())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok((addr, self.params.len()))` [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: module has the same name as its containing module [INFO] [stderr] --> src/sabri/syntax/parser/mod.rs:4:1 [INFO] [stderr] | [INFO] [stderr] 4 | pub mod parser; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: unused import: `ParserErrorValue` [INFO] [stderr] --> src/sabri/syntax/parser/parser.rs:4:27 [INFO] [stderr] | [INFO] [stderr] 4 | use parser::{ParserError, ParserErrorValue}; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/sabri/bytecode/op.rs:1:22 [INFO] [stderr] | [INFO] [stderr] 1 | pub const HALT: u8 = 0b111111; [INFO] [stderr] | ^^^^^^^^ help: consider: `0b11_1111` [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: unused import: `self::bytecode::TokenPosition` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | use self::bytecode::TokenPosition; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/sabri/bytecode/gen.rs:163:46 [INFO] [stderr] | [INFO] [stderr] 163 | self.instr.push(instr::c_op_26(HALT, 0x3ffffff)); [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: unused import: `Addr` [INFO] [stderr] --> src/sabri/bytecode/run.rs:11:22 [INFO] [stderr] | [INFO] [stderr] 11 | use self::bytecode::{Addr, INVALID}; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `RefCell`, `Ref` [INFO] [stderr] --> src/sabri/value.rs:1:17 [INFO] [stderr] | [INFO] [stderr] 1 | use std::cell::{Ref, RefCell}; [INFO] [stderr] | ^^^ ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `sabri::Value` [INFO] [stderr] --> src/sabri/error.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use sabri::Value; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `sabri::Env` [INFO] [stderr] --> src/sabri/symtab.rs:5:5 [INFO] [stderr] | [INFO] [stderr] 5 | use sabri::Env; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/main.rs:27:15 [INFO] [stderr] | [INFO] [stderr] 27 | const USAGE: &'static str = " [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:251:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] 250 | [INFO] [stderr] 251 | OP_NEWENV => { [INFO] [stderr] | ^^^^^^^^^ unreachable pattern [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_patterns)] on by default [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:257:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 257 | OP_POPENV => print!("popenv {}", instr::d_op_12(instr)), [INFO] [stderr] | ^^^^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:259:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 259 | OP_GETVAR => { [INFO] [stderr] | ^^^^^^^^^ unreachable pattern [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:251:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] 250 | [INFO] [stderr] 251 | OP_NEWENV => { [INFO] [stderr] | ^^^^^^^^^ unreachable pattern [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_patterns)] on by default [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:257:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 257 | OP_POPENV => print!("popenv {}", instr::d_op_12(instr)), [INFO] [stderr] | ^^^^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:259:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 259 | OP_GETVAR => { [INFO] [stderr] | ^^^^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:265:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 265 | OP_SETVAR => { [INFO] [stderr] | ^^^^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:271:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 271 | OP_GETELEM => print!("getelem "), [INFO] [stderr] | ^^^^^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:272:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 272 | OP_SETELEM => print!("setelem "), [INFO] [stderr] | ^^^^^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:273:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 273 | OP_PUSHLIT => print!("pushlit {}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:275:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 275 | OP_ADD => print!("add "), [INFO] [stderr] | ^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:276:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 276 | OP_SUB => print!("sub "), [INFO] [stderr] | ^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:277:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 277 | OP_MUL => print!("mul "), [INFO] [stderr] | ^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:278:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 278 | OP_DIV => print!("div "), [INFO] [stderr] | ^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:280:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 280 | OP_TEST => print!("test "), [INFO] [stderr] | ^^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:281:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 281 | OP_JMP => print!("jmp {:08x}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:282:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 282 | OP_JT => print!("jt {:08x}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:283:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 283 | OP_JF => print!("jf {:08x}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:285:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 285 | OP_CALL => print!("call {}", instr::d_op_12(instr)), [INFO] [stderr] | ^^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:286:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 286 | OP_RET => print!("ret "), [INFO] [stderr] | ^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:288:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 288 | OP_POPVAL => print!("popval {}", instr::d_op_12(instr)), [INFO] [stderr] | ^^^^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:290:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 290 | _ => print!("??? "), [INFO] [stderr] | ^ unreachable pattern [INFO] [stderr] [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:265:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 265 | OP_SETVAR => { [INFO] [stderr] | ^^^^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:271:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 271 | OP_GETELEM => print!("getelem "), [INFO] [stderr] | ^^^^^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:272:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 272 | OP_SETELEM => print!("setelem "), [INFO] [stderr] | ^^^^^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:273:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 273 | OP_PUSHLIT => print!("pushlit {}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:275:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 275 | OP_ADD => print!("add "), [INFO] [stderr] | ^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:276:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 276 | OP_SUB => print!("sub "), [INFO] [stderr] | ^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:277:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 277 | OP_MUL => print!("mul "), [INFO] [stderr] | ^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:278:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 278 | OP_DIV => print!("div "), [INFO] [stderr] | ^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:280:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 280 | OP_TEST => print!("test "), [INFO] [stderr] | ^^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:281:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 281 | OP_JMP => print!("jmp {:08x}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:282:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 282 | OP_JT => print!("jt {:08x}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:283:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 283 | OP_JF => print!("jf {:08x}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:285:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 285 | OP_CALL => print!("call {}", instr::d_op_12(instr)), [INFO] [stderr] | ^^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:286:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 286 | OP_RET => print!("ret "), [INFO] [stderr] | ^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:288:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 288 | OP_POPVAL => print!("popval {}", instr::d_op_12(instr)), [INFO] [stderr] | ^^^^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/sabri/bytecode/gen.rs:290:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ------- matches any value [INFO] [stderr] ... [INFO] [stderr] 290 | _ => print!("??? "), [INFO] [stderr] | ^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unused variable: `v` [INFO] [stderr] --> src/sabri/native.rs:150:17 [INFO] [stderr] | [INFO] [stderr] 150 | if let Some(v) = args.get(0) { [INFO] [stderr] | ^ help: consider using `_v` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `v` [INFO] [stderr] --> src/sabri/native.rs:150:17 [INFO] [stderr] | [INFO] [stderr] 150 | if let Some(v) = args.get(0) { [INFO] [stderr] | ^ help: consider using `_v` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `l` [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:69:36 [INFO] [stderr] | [INFO] [stderr] 69 | Expression::Lambda(ref l) => return Ok(()), [INFO] [stderr] | ^ help: consider using `_l` instead [INFO] [stderr] [INFO] [stderr] warning: variable `fix_newenv_addr` is assigned to, but never used [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:85:25 [INFO] [stderr] | [INFO] [stderr] 85 | let mut fix_newenv_addr = 0; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: consider using `_fix_newenv_addr` instead [INFO] [stderr] [INFO] [stderr] warning: value assigned to `fix_newenv_addr` is never read [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:103:33 [INFO] [stderr] | [INFO] [stderr] 103 | fix_newenv_addr = program.addr(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_assignments)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `l` [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:69:36 [INFO] [stderr] | [INFO] [stderr] 69 | Expression::Lambda(ref l) => return Ok(()), [INFO] [stderr] | ^ help: consider using `_l` instead [INFO] [stderr] [INFO] [stderr] warning: variable `fix_newenv_addr` is assigned to, but never used [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:85:25 [INFO] [stderr] | [INFO] [stderr] 85 | let mut fix_newenv_addr = 0; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: consider using `_fix_newenv_addr` instead [INFO] [stderr] [INFO] [stderr] warning: value assigned to `fix_newenv_addr` is never read [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:103:33 [INFO] [stderr] | [INFO] [stderr] 103 | fix_newenv_addr = program.addr(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_assignments)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_HALT` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:249:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ^^^^^^^ help: consider using `_OP_HALT` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_NEWENV` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:251:17 [INFO] [stderr] | [INFO] [stderr] 251 | OP_NEWENV => { [INFO] [stderr] | ^^^^^^^^^ help: consider using `_OP_NEWENV` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_POPENV` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:257:17 [INFO] [stderr] | [INFO] [stderr] 257 | OP_POPENV => print!("popenv {}", instr::d_op_12(instr)), [INFO] [stderr] | ^^^^^^^^^ help: consider using `_OP_POPENV` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_GETVAR` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:259:17 [INFO] [stderr] | [INFO] [stderr] 259 | OP_GETVAR => { [INFO] [stderr] | ^^^^^^^^^ help: consider using `_OP_GETVAR` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_SETVAR` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:265:17 [INFO] [stderr] | [INFO] [stderr] 265 | OP_SETVAR => { [INFO] [stderr] | ^^^^^^^^^ help: consider using `_OP_SETVAR` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_GETELEM` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:271:17 [INFO] [stderr] | [INFO] [stderr] 271 | OP_GETELEM => print!("getelem "), [INFO] [stderr] | ^^^^^^^^^^ help: consider using `_OP_GETELEM` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_SETELEM` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:272:17 [INFO] [stderr] | [INFO] [stderr] 272 | OP_SETELEM => print!("setelem "), [INFO] [stderr] | ^^^^^^^^^^ help: consider using `_OP_SETELEM` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_PUSHLIT` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:273:17 [INFO] [stderr] | [INFO] [stderr] 273 | OP_PUSHLIT => print!("pushlit {}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^^^^^^ help: consider using `_OP_PUSHLIT` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_ADD` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:275:17 [INFO] [stderr] | [INFO] [stderr] 275 | OP_ADD => print!("add "), [INFO] [stderr] | ^^^^^^ help: consider using `_OP_ADD` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_SUB` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:276:17 [INFO] [stderr] | [INFO] [stderr] 276 | OP_SUB => print!("sub "), [INFO] [stderr] | ^^^^^^ help: consider using `_OP_SUB` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_MUL` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:277:17 [INFO] [stderr] | [INFO] [stderr] 277 | OP_MUL => print!("mul "), [INFO] [stderr] | ^^^^^^ help: consider using `_OP_MUL` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_DIV` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:278:17 [INFO] [stderr] | [INFO] [stderr] 278 | OP_DIV => print!("div "), [INFO] [stderr] | ^^^^^^ help: consider using `_OP_DIV` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_TEST` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:280:17 [INFO] [stderr] | [INFO] [stderr] 280 | OP_TEST => print!("test "), [INFO] [stderr] | ^^^^^^^ help: consider using `_OP_TEST` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_JMP` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:281:17 [INFO] [stderr] | [INFO] [stderr] 281 | OP_JMP => print!("jmp {:08x}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^^ help: consider using `_OP_JMP` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_JT` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:282:17 [INFO] [stderr] | [INFO] [stderr] 282 | OP_JT => print!("jt {:08x}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^ help: consider using `_OP_JT` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_JF` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:283:17 [INFO] [stderr] | [INFO] [stderr] 283 | OP_JF => print!("jf {:08x}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^ help: consider using `_OP_JF` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_CALL` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:285:17 [INFO] [stderr] | [INFO] [stderr] 285 | OP_CALL => print!("call {}", instr::d_op_12(instr)), [INFO] [stderr] | ^^^^^^^ help: consider using `_OP_CALL` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_RET` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:286:17 [INFO] [stderr] | [INFO] [stderr] 286 | OP_RET => print!("ret "), [INFO] [stderr] | ^^^^^^ help: consider using `_OP_RET` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_POPVAL` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:288:17 [INFO] [stderr] | [INFO] [stderr] 288 | OP_POPVAL => print!("popval {}", instr::d_op_12(instr)), [INFO] [stderr] | ^^^^^^^^^ help: consider using `_OP_POPVAL` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_HALT` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:249:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ^^^^^^^ help: consider using `_OP_HALT` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_NEWENV` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:251:17 [INFO] [stderr] | [INFO] [stderr] 251 | OP_NEWENV => { [INFO] [stderr] | ^^^^^^^^^ help: consider using `_OP_NEWENV` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_POPENV` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:257:17 [INFO] [stderr] | [INFO] [stderr] 257 | OP_POPENV => print!("popenv {}", instr::d_op_12(instr)), [INFO] [stderr] | ^^^^^^^^^ help: consider using `_OP_POPENV` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_GETVAR` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:259:17 [INFO] [stderr] | [INFO] [stderr] 259 | OP_GETVAR => { [INFO] [stderr] | ^^^^^^^^^ help: consider using `_OP_GETVAR` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_SETVAR` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:265:17 [INFO] [stderr] | [INFO] [stderr] 265 | OP_SETVAR => { [INFO] [stderr] | ^^^^^^^^^ help: consider using `_OP_SETVAR` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_GETELEM` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:271:17 [INFO] [stderr] | [INFO] [stderr] 271 | OP_GETELEM => print!("getelem "), [INFO] [stderr] | ^^^^^^^^^^ help: consider using `_OP_GETELEM` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_SETELEM` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:272:17 [INFO] [stderr] | [INFO] [stderr] 272 | OP_SETELEM => print!("setelem "), [INFO] [stderr] | ^^^^^^^^^^ help: consider using `_OP_SETELEM` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_PUSHLIT` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:273:17 [INFO] [stderr] | [INFO] [stderr] 273 | OP_PUSHLIT => print!("pushlit {}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^^^^^^ help: consider using `_OP_PUSHLIT` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_ADD` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:275:17 [INFO] [stderr] | [INFO] [stderr] 275 | OP_ADD => print!("add "), [INFO] [stderr] | ^^^^^^ help: consider using `_OP_ADD` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_SUB` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:276:17 [INFO] [stderr] | [INFO] [stderr] 276 | OP_SUB => print!("sub "), [INFO] [stderr] | ^^^^^^ help: consider using `_OP_SUB` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_MUL` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:277:17 [INFO] [stderr] | [INFO] [stderr] 277 | OP_MUL => print!("mul "), [INFO] [stderr] | ^^^^^^ help: consider using `_OP_MUL` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_DIV` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:278:17 [INFO] [stderr] | [INFO] [stderr] 278 | OP_DIV => print!("div "), [INFO] [stderr] | ^^^^^^ help: consider using `_OP_DIV` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_TEST` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:280:17 [INFO] [stderr] | [INFO] [stderr] 280 | OP_TEST => print!("test "), [INFO] [stderr] | ^^^^^^^ help: consider using `_OP_TEST` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_JMP` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:281:17 [INFO] [stderr] | [INFO] [stderr] 281 | OP_JMP => print!("jmp {:08x}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^^ help: consider using `_OP_JMP` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_JT` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:282:17 [INFO] [stderr] | [INFO] [stderr] 282 | OP_JT => print!("jt {:08x}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^ help: consider using `_OP_JT` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_JF` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:283:17 [INFO] [stderr] | [INFO] [stderr] 283 | OP_JF => print!("jf {:08x}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^ help: consider using `_OP_JF` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_CALL` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:285:17 [INFO] [stderr] | [INFO] [stderr] 285 | OP_CALL => print!("call {}", instr::d_op_12(instr)), [INFO] [stderr] | ^^^^^^^ help: consider using `_OP_CALL` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_RET` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:286:17 [INFO] [stderr] | [INFO] [stderr] 286 | OP_RET => print!("ret "), [INFO] [stderr] | ^^^^^^ help: consider using `_OP_RET` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `OP_POPVAL` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:288:17 [INFO] [stderr] | [INFO] [stderr] 288 | OP_POPVAL => print!("popval {}", instr::d_op_12(instr)), [INFO] [stderr] | ^^^^^^^^^ help: consider using `_OP_POPVAL` instead [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Lambda` [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:20:5 [INFO] [stderr] | [INFO] [stderr] 20 | Lambda(Lambda), [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Assignment` [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:184:5 [INFO] [stderr] | [INFO] [stderr] 184 | Assignment(Box, Box), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `compile` [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:209:5 [INFO] [stderr] | [INFO] [stderr] 209 | pub fn compile(&self, sym: &Rc, program: &mut Program) -> ParserResult<(u32, usize)> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `compile` [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:243:5 [INFO] [stderr] | [INFO] [stderr] 243 | pub fn compile(&self, sym: &Rc, program: &mut Program) -> ParserResult<(u32, usize)> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `PUSHENV` [INFO] [stderr] --> src/sabri/bytecode/op.rs:2:1 [INFO] [stderr] | [INFO] [stderr] 2 | pub const PUSHENV: u8 = 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `GETELEM` [INFO] [stderr] --> src/sabri/bytecode/op.rs:7:1 [INFO] [stderr] | [INFO] [stderr] 7 | pub const GETELEM: u8 = 5; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `SETELEM` [INFO] [stderr] --> src/sabri/bytecode/op.rs:8:1 [INFO] [stderr] | [INFO] [stderr] 8 | pub const SETELEM: u8 = 6; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `f_op_12_12` [INFO] [stderr] --> src/sabri/bytecode/instr.rs:43:1 [INFO] [stderr] | [INFO] [stderr] 43 | pub fn f_op_12_12(instr : u32, t1 : u16, t2 : u16) -> u32 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `f_op_26` [INFO] [stderr] --> src/sabri/bytecode/instr.rs:47:1 [INFO] [stderr] | [INFO] [stderr] 47 | pub fn f_op_26(instr : u32, t : u32) -> u32 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:20:5 [INFO] [stderr] | [INFO] [stderr] 20 | pub fn new(init_level: u32) -> FixupContext { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `add` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:27:5 [INFO] [stderr] | [INFO] [stderr] 27 | pub fn add(&mut self, instr_addr: Addr) -> ParserResult<()> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `close` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:32:5 [INFO] [stderr] | [INFO] [stderr] 32 | pub fn close(self, instr: &mut [u32], fixed_addr: Addr) -> ParserResult<()> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `while_context` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:44:5 [INFO] [stderr] | [INFO] [stderr] 44 | while_context: Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `func_context` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:45:5 [INFO] [stderr] | [INFO] [stderr] 45 | func_context: Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `add_label` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:70:5 [INFO] [stderr] | [INFO] [stderr] 70 | pub fn add_label(&mut self, addr: Addr, comment: &str) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `decrement_env_level` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:78:5 [INFO] [stderr] | [INFO] [stderr] 78 | pub fn decrement_env_level(&mut self, n: u32) -> ParserResult<()> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_env_level` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:87:5 [INFO] [stderr] | [INFO] [stderr] 87 | pub fn get_env_level(&mut self) -> u32 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `set_env_level` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:91:5 [INFO] [stderr] | [INFO] [stderr] 91 | pub fn set_env_level(&mut self, n: u32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new_func_context` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:106:5 [INFO] [stderr] | [INFO] [stderr] 106 | pub fn new_func_context(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `close_func_context` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:111:5 [INFO] [stderr] | [INFO] [stderr] 111 | pub fn close_func_context(&mut self, fixed_addr: Addr) -> ParserResult<()> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `add_return_fixup` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:118:5 [INFO] [stderr] | [INFO] [stderr] 118 | pub fn add_return_fixup(&mut self, addr: Addr) -> ParserResult<()> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new_while_context` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:125:5 [INFO] [stderr] | [INFO] [stderr] 125 | pub fn new_while_context(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `close_while_context` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:130:5 [INFO] [stderr] | [INFO] [stderr] 130 | pub fn close_while_context(&mut self, fixed_addr: Addr) -> ParserResult<()> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `add_break_fixup` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:137:5 [INFO] [stderr] | [INFO] [stderr] 137 | pub fn add_break_fixup(&mut self, addr: Addr) -> ParserResult<()> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_while_env_level` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:144:5 [INFO] [stderr] | [INFO] [stderr] 144 | pub fn get_while_env_level(&self) -> ParserResult { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `fix_newenv` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:152:5 [INFO] [stderr] | [INFO] [stderr] 152 | pub fn fix_newenv(&mut self, instr_addr: Addr, n_vals: u16, n_total: u16) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `fix_jump` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:157:5 [INFO] [stderr] | [INFO] [stderr] 157 | pub fn fix_jump(&mut self, instr_addr: Addr, target_addr: Addr) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `emit_halt` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:162:5 [INFO] [stderr] | [INFO] [stderr] 162 | pub fn emit_halt(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `emit_popenv` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:170:5 [INFO] [stderr] | [INFO] [stderr] 170 | pub fn emit_popenv(&mut self, envs: u16) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `emit_getelem` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:182:5 [INFO] [stderr] | [INFO] [stderr] 182 | pub fn emit_getelem(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `emit_test` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:210:5 [INFO] [stderr] | [INFO] [stderr] 210 | pub fn emit_test(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `emit_jmp` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:214:5 [INFO] [stderr] | [INFO] [stderr] 214 | pub fn emit_jmp(&mut self, addr: Addr) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `emit_jf` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:222:5 [INFO] [stderr] | [INFO] [stderr] 222 | pub fn emit_jf(&mut self, addr: Addr) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `emit_ret` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:230:5 [INFO] [stderr] | [INFO] [stderr] 230 | pub fn emit_ret(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `emit_popval` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:234:5 [INFO] [stderr] | [INFO] [stderr] 234 | pub fn emit_popval(&mut self, values: u16) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `reset` [INFO] [stderr] --> src/sabri/bytecode/run.rs:34:5 [INFO] [stderr] | [INFO] [stderr] 34 | pub fn reset(&mut self, env: Rc) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/sabri/bytecode/closure.rs:16:5 [INFO] [stderr] | [INFO] [stderr] 16 | pub fn new(addr: Addr, num_params: usize, env: Rc) -> Closure { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Closure` [INFO] [stderr] --> src/sabri/value.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | Closure(bytecode::Closure), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `as_string` [INFO] [stderr] --> src/sabri/value.rs:60:5 [INFO] [stderr] | [INFO] [stderr] 60 | pub fn as_string(&self) -> String { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new_pos` [INFO] [stderr] --> src/sabri/error.rs:24:5 [INFO] [stderr] | [INFO] [stderr] 24 | pub fn new_pos(position: TokenPosition, value: &str) -> RunError { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/sabri/env.rs:14:5 [INFO] [stderr] | [INFO] [stderr] 14 | pub fn new(parent: Rc, values: &[Value]) -> Env { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `func_dump_env` [INFO] [stderr] --> src/sabri/native.rs:144:1 [INFO] [stderr] | [INFO] [stderr] 144 | pub fn func_dump_env(_args: &[Value], env: &Rc) -> RunResult { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `func_error` [INFO] [stderr] --> src/sabri/native.rs:149:1 [INFO] [stderr] | [INFO] [stderr] 149 | pub fn func_error(args: &[Value], _env: &Rc) -> RunResult { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_var` [INFO] [stderr] --> src/sabri/mod.rs:49:5 [INFO] [stderr] | [INFO] [stderr] 49 | pub fn get_var(&self, var: &str) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: re-implementing `PartialEq::ne` is unnecessary [INFO] [stderr] --> src/sabri/syntax/lexer/token.rs:78:5 [INFO] [stderr] | [INFO] [stderr] 78 | / fn ne(&self, other: &Token) -> bool { [INFO] [stderr] 79 | | self.token_type != other.token_type [INFO] [stderr] 80 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::partialeq_ne_impl)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_ne_impl [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `for` loop [INFO] [stderr] --> src/sabri/syntax/lexer/block_tree.rs:58:32 [INFO] [stderr] | [INFO] [stderr] 58 | while let Some(line) = lines.next() { [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `for line in lines { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_on_iterator)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_on_iterator [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/sabri/syntax/lexer/block_tree.rs:59:47 [INFO] [stderr] | [INFO] [stderr] 59 | let parts: Vec<&str> = line.split("~").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `'~'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/sabri/syntax/lexer/block_tree.rs:60:22 [INFO] [stderr] | [INFO] [stderr] 60 | let ln = parts.get(0).unwrap().trim(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try this: `&parts[0]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/sabri/syntax/lexer/block_tree.rs:62:16 [INFO] [stderr] | [INFO] [stderr] 62 | if ln.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!ln.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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/sabri/syntax/lexer/block_tree.rs:83:37 [INFO] [stderr] | [INFO] [stderr] 83 | pub fn tree(&mut self, indents: &Vec<(usize, &'a str)>) -> Branch { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[(usize, &'a 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: this creates an owned instance just for comparison [INFO] [stderr] --> src/sabri/syntax/lexer/matcher.rs:91:21 [INFO] [stderr] | [INFO] [stderr] 91 | if accum == "0.".to_owned() { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `"0."` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cmp_owned)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Lambda` [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:20:5 [INFO] [stderr] | [INFO] [stderr] 20 | Lambda(Lambda), [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Assignment` [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:184:5 [INFO] [stderr] | [INFO] [stderr] 184 | Assignment(Box, Box), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `compile` [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:209:5 [INFO] [stderr] | [INFO] [stderr] 209 | pub fn compile(&self, sym: &Rc, program: &mut Program) -> ParserResult<(u32, usize)> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `compile` [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:243:5 [INFO] [stderr] | [INFO] [stderr] 243 | pub fn compile(&self, sym: &Rc, program: &mut Program) -> ParserResult<(u32, usize)> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `PUSHENV` [INFO] [stderr] --> src/sabri/bytecode/op.rs:2:1 [INFO] [stderr] | [INFO] [stderr] 2 | pub const PUSHENV: u8 = 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `GETELEM` [INFO] [stderr] --> src/sabri/bytecode/op.rs:7:1 [INFO] [stderr] | [INFO] [stderr] 7 | pub const GETELEM: u8 = 5; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `SETELEM` [INFO] [stderr] --> src/sabri/bytecode/op.rs:8:1 [INFO] [stderr] | [INFO] [stderr] 8 | pub const SETELEM: u8 = 6; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `f_op_12_12` [INFO] [stderr] --> src/sabri/bytecode/instr.rs:43:1 [INFO] [stderr] | [INFO] [stderr] 43 | pub fn f_op_12_12(instr : u32, t1 : u16, t2 : u16) -> u32 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `f_op_26` [INFO] [stderr] --> src/sabri/bytecode/instr.rs:47:1 [INFO] [stderr] | [INFO] [stderr] 47 | pub fn f_op_26(instr : u32, t : u32) -> u32 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:20:5 [INFO] [stderr] | [INFO] [stderr] 20 | pub fn new(init_level: u32) -> FixupContext { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `add` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:27:5 [INFO] [stderr] | [INFO] [stderr] 27 | pub fn add(&mut self, instr_addr: Addr) -> ParserResult<()> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `close` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:32:5 [INFO] [stderr] | [INFO] [stderr] 32 | pub fn close(self, instr: &mut [u32], fixed_addr: Addr) -> ParserResult<()> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `while_context` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:44:5 [INFO] [stderr] | [INFO] [stderr] 44 | while_context: Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `func_context` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:45:5 [INFO] [stderr] | [INFO] [stderr] 45 | func_context: Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `add_label` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:70:5 [INFO] [stderr] | [INFO] [stderr] 70 | pub fn add_label(&mut self, addr: Addr, comment: &str) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `decrement_env_level` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:78:5 [INFO] [stderr] | [INFO] [stderr] 78 | pub fn decrement_env_level(&mut self, n: u32) -> ParserResult<()> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_env_level` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:87:5 [INFO] [stderr] | [INFO] [stderr] 87 | pub fn get_env_level(&mut self) -> u32 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `set_env_level` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:91:5 [INFO] [stderr] | [INFO] [stderr] 91 | pub fn set_env_level(&mut self, n: u32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new_func_context` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:106:5 [INFO] [stderr] | [INFO] [stderr] 106 | pub fn new_func_context(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `close_func_context` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:111:5 [INFO] [stderr] | [INFO] [stderr] 111 | pub fn close_func_context(&mut self, fixed_addr: Addr) -> ParserResult<()> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `add_return_fixup` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:118:5 [INFO] [stderr] | [INFO] [stderr] 118 | pub fn add_return_fixup(&mut self, addr: Addr) -> ParserResult<()> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new_while_context` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:125:5 [INFO] [stderr] | [INFO] [stderr] 125 | pub fn new_while_context(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `close_while_context` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:130:5 [INFO] [stderr] | [INFO] [stderr] 130 | pub fn close_while_context(&mut self, fixed_addr: Addr) -> ParserResult<()> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `add_break_fixup` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:137:5 [INFO] [stderr] | [INFO] [stderr] 137 | pub fn add_break_fixup(&mut self, addr: Addr) -> ParserResult<()> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_while_env_level` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:144:5 [INFO] [stderr] | [INFO] [stderr] 144 | pub fn get_while_env_level(&self) -> ParserResult { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `fix_newenv` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:152:5 [INFO] [stderr] | [INFO] [stderr] 152 | pub fn fix_newenv(&mut self, instr_addr: Addr, n_vals: u16, n_total: u16) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `fix_jump` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:157:5 [INFO] [stderr] | [INFO] [stderr] 157 | pub fn fix_jump(&mut self, instr_addr: Addr, target_addr: Addr) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `emit_halt` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:162:5 [INFO] [stderr] | [INFO] [stderr] 162 | pub fn emit_halt(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `emit_popenv` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:170:5 [INFO] [stderr] | [INFO] [stderr] 170 | pub fn emit_popenv(&mut self, envs: u16) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `emit_getelem` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:182:5 [INFO] [stderr] | [INFO] [stderr] 182 | pub fn emit_getelem(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `emit_test` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:210:5 [INFO] [stderr] | [INFO] [stderr] 210 | pub fn emit_test(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `emit_jmp` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:214:5 [INFO] [stderr] | [INFO] [stderr] 214 | pub fn emit_jmp(&mut self, addr: Addr) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `emit_jf` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:222:5 [INFO] [stderr] | [INFO] [stderr] 222 | pub fn emit_jf(&mut self, addr: Addr) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `emit_ret` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:230:5 [INFO] [stderr] | [INFO] [stderr] 230 | pub fn emit_ret(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `emit_popval` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:234:5 [INFO] [stderr] | [INFO] [stderr] 234 | pub fn emit_popval(&mut self, values: u16) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `reset` [INFO] [stderr] --> src/sabri/bytecode/run.rs:34:5 [INFO] [stderr] | [INFO] [stderr] 34 | pub fn reset(&mut self, env: Rc) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/sabri/bytecode/closure.rs:16:5 [INFO] [stderr] | [INFO] [stderr] 16 | pub fn new(addr: Addr, num_params: usize, env: Rc) -> Closure { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/sabri/syntax/lexer/matcher.rs:106:26 [INFO] [stderr] | [INFO] [stderr] 106 | let delimeter = match tokenizer.peek().unwrap() { [INFO] [stderr] | __________________________^ [INFO] [stderr] 107 | | &'"' => Some('"'), [INFO] [stderr] 108 | | &'\'' => Some('\''), [INFO] [stderr] 109 | | &'r' => match *tokenizer.peek_n(1).unwrap() { [INFO] [stderr] ... | [INFO] [stderr] 117 | | _ => return None, [INFO] [stderr] 118 | | }; [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] [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 106 | let delimeter = match *tokenizer.peek().unwrap() { [INFO] [stderr] 107 | '"' => Some('"'), [INFO] [stderr] 108 | '\'' => Some('\''), [INFO] [stderr] 109 | 'r' => match *tokenizer.peek_n(1).unwrap() { [INFO] [stderr] | [INFO] [stderr] warning: variant is never constructed: `Closure` [INFO] [stderr] --> src/sabri/value.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | Closure(bytecode::Closure), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] [INFO] [stderr] warning: method is never used: `as_string` [INFO] [stderr] --> src/sabri/value.rs:60:5 [INFO] [stderr] | [INFO] [stderr] 60 | pub fn as_string(&self) -> String { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new_pos` [INFO] [stderr] --> src/sabri/error.rs:24:5 [INFO] [stderr] | [INFO] [stderr] 24 | pub fn new_pos(position: TokenPosition, value: &str) -> RunError { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/sabri/env.rs:14:5 [INFO] [stderr] | [INFO] [stderr] 14 | pub fn new(parent: Rc, values: &[Value]) -> Env { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `func_dump_env` [INFO] [stderr] --> src/sabri/native.rs:144:1 [INFO] [stderr] | [INFO] [stderr] 144 | pub fn func_dump_env(_args: &[Value], env: &Rc) -> RunResult { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `func_error` [INFO] [stderr] --> src/sabri/native.rs:149:1 [INFO] [stderr] | [INFO] [stderr] 149 | pub fn func_error(args: &[Value], _env: &Rc) -> RunResult { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_var` [INFO] [stderr] --> src/sabri/mod.rs:49:5 [INFO] [stderr] | [INFO] [stderr] 49 | pub fn get_var(&self, var: &str) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/sabri/syntax/lexer/matcher.rs:145:21 [INFO] [stderr] | [INFO] [stderr] 145 | / match tokenizer.peek().unwrap() { [INFO] [stderr] 146 | | &'\\' => { [INFO] [stderr] 147 | | tokenizer.next(); [INFO] [stderr] 148 | | found_escape = true [INFO] [stderr] ... | [INFO] [stderr] 151 | | _ => string.push(tokenizer.next().unwrap()), [INFO] [stderr] 152 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 145 | match *tokenizer.peek().unwrap() { [INFO] [stderr] 146 | '\\' => { [INFO] [stderr] 147 | tokenizer.next(); [INFO] [stderr] 148 | found_escape = true [INFO] [stderr] 149 | }, [INFO] [stderr] 150 | c if &c == &delimeter.unwrap() => break, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of both operands [INFO] [stderr] --> src/sabri/syntax/lexer/matcher.rs:150:31 [INFO] [stderr] | [INFO] [stderr] 150 | &c if &c == &delimeter.unwrap() => break, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] help: use the values directly [INFO] [stderr] | [INFO] [stderr] 150 | &c if c == delimeter.unwrap() => break, [INFO] [stderr] | ^ ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/sabri/syntax/lexer/lexer.rs:92:9 [INFO] [stderr] | [INFO] [stderr] 92 | / match c.value() { [INFO] [stderr] 93 | | &ChunkValue::Source(ref s) => { [INFO] [stderr] 94 | | let mut line: Vec = lexer(&mut s.clone().chars()).collect(); [INFO] [stderr] 95 | | line.push(Token::new(TokenType::EOL, TokenPosition::default(), "\n".to_owned())); [INFO] [stderr] ... | [INFO] [stderr] 104 | | _ => (), [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] 92 | match *c.value() { [INFO] [stderr] 93 | ChunkValue::Source(ref s) => { [INFO] [stderr] 94 | let mut line: Vec = lexer(&mut s.clone().chars()).collect(); [INFO] [stderr] 95 | line.push(Token::new(TokenType::EOL, TokenPosition::default(), "\n".to_owned())); [INFO] [stderr] 96 | [INFO] [stderr] 97 | let chunk = ChunkValue::Tokens(line); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: re-implementing `PartialEq::ne` is unnecessary [INFO] [stderr] --> src/sabri/syntax/lexer/token.rs:78:5 [INFO] [stderr] | [INFO] [stderr] 78 | / fn ne(&self, other: &Token) -> bool { [INFO] [stderr] 79 | | self.token_type != other.token_type [INFO] [stderr] 80 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::partialeq_ne_impl)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_ne_impl [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/sabri/syntax/lexer/lexer.rs:113:9 [INFO] [stderr] | [INFO] [stderr] 113 | / match c.value() { [INFO] [stderr] 114 | | &ChunkValue::Tokens(ref t) => flat.append(&mut t.clone()), [INFO] [stderr] 115 | | &ChunkValue::Block(ref b) => flat.push(Token::new(TokenType::Block(flatten_branch(b)), TokenPosition::new(0, 0), "".to_string())), [INFO] [stderr] 116 | | _ => continue, [INFO] [stderr] 117 | | } [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] 113 | match *c.value() { [INFO] [stderr] 114 | ChunkValue::Tokens(ref t) => flat.append(&mut t.clone()), [INFO] [stderr] 115 | ChunkValue::Block(ref b) => flat.push(Token::new(TokenType::Block(flatten_branch(b)), TokenPosition::new(0, 0), "".to_string())), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `Box>`. Consider using just `Vec` [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:13:11 [INFO] [stderr] | [INFO] [stderr] 13 | Block(Box>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::box_vec)] on by default [INFO] [stderr] = help: `Vec` is already on the heap, `Box>` makes an extra allocation. [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#box_vec [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `Box>`. Consider using just `Vec` [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:25:15 [INFO] [stderr] | [INFO] [stderr] 25 | args: Box>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: `Vec` is already on the heap, `Box>` makes an extra allocation. [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#box_vec [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `for` loop [INFO] [stderr] --> src/sabri/syntax/lexer/block_tree.rs:58:32 [INFO] [stderr] | [INFO] [stderr] 58 | while let Some(line) = lines.next() { [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `for line in lines { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_on_iterator)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_on_iterator [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/sabri/syntax/lexer/block_tree.rs:59:47 [INFO] [stderr] | [INFO] [stderr] 59 | let parts: Vec<&str> = line.split("~").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `'~'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/sabri/syntax/lexer/block_tree.rs:60:22 [INFO] [stderr] | [INFO] [stderr] 60 | let ln = parts.get(0).unwrap().trim(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try this: `&parts[0]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/sabri/syntax/lexer/block_tree.rs:62:16 [INFO] [stderr] | [INFO] [stderr] 62 | if ln.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!ln.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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/sabri/syntax/lexer/block_tree.rs:83:37 [INFO] [stderr] | [INFO] [stderr] 83 | pub fn tree(&mut self, indents: &Vec<(usize, &'a str)>) -> Branch { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[(usize, &'a 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: useless use of `format!` [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:55:38 [INFO] [stderr] | [INFO] [stderr] 55 | program.add_comment(&format!("{}", *n)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `*n.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/sabri/syntax/parser/ast.rs:88:21 [INFO] [stderr] | [INFO] [stderr] 88 | / match statement { [INFO] [stderr] 89 | | &Statement::Definition { ref var, ref val } => { [INFO] [stderr] 90 | | match *val { [INFO] [stderr] 91 | | Some(ref e) => try!(e.compile(&cur_sym, program)), [INFO] [stderr] ... | [INFO] [stderr] 109 | | _ => try!(statement.compile(&cur_sym, program)), [INFO] [stderr] 110 | | } [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] 88 | match *statement { [INFO] [stderr] 89 | Statement::Definition { ref var, ref val } => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:124:25 [INFO] [stderr] | [INFO] [stderr] 124 | / match op { [INFO] [stderr] 125 | | &Operand::Add => program.emit_add(), [INFO] [stderr] 126 | | &Operand::Sub => program.emit_sub(), [INFO] [stderr] 127 | | &Operand::Mul => program.emit_mul(), [INFO] [stderr] 128 | | &Operand::Div => program.emit_div(), [INFO] [stderr] 129 | | _ => return Err(ParserError::new(&format!("unhandled operator: {}", op))), [INFO] [stderr] 130 | | } [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] 124 | match *op { [INFO] [stderr] 125 | Operand::Add => program.emit_add(), [INFO] [stderr] 126 | Operand::Sub => program.emit_sub(), [INFO] [stderr] 127 | Operand::Mul => program.emit_mul(), [INFO] [stderr] 128 | Operand::Div => program.emit_div(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `Box>`. Consider using just `Vec` [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:199:13 [INFO] [stderr] | [INFO] [stderr] 199 | block: Box>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: `Vec` is already on the heap, `Box>` makes an extra allocation. [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#box_vec [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `Box>`. Consider using just `Vec` [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:203:48 [INFO] [stderr] | [INFO] [stderr] 203 | pub fn new(params: Vec>, block: Box>) -> Lambda { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: `Vec` is already on the heap, `Box>` makes an extra allocation. [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#box_vec [INFO] [stderr] [INFO] [stderr] warning: this creates an owned instance just for comparison [INFO] [stderr] --> src/sabri/syntax/lexer/matcher.rs:91:21 [INFO] [stderr] | [INFO] [stderr] 91 | if accum == "0.".to_owned() { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `"0."` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cmp_owned)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/sabri/syntax/lexer/matcher.rs:106:26 [INFO] [stderr] | [INFO] [stderr] 106 | let delimeter = match tokenizer.peek().unwrap() { [INFO] [stderr] | __________________________^ [INFO] [stderr] 107 | | &'"' => Some('"'), [INFO] [stderr] 108 | | &'\'' => Some('\''), [INFO] [stderr] 109 | | &'r' => match *tokenizer.peek_n(1).unwrap() { [INFO] [stderr] ... | [INFO] [stderr] 117 | | _ => return None, [INFO] [stderr] 118 | | }; [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] 106 | let delimeter = match *tokenizer.peek().unwrap() { [INFO] [stderr] 107 | '"' => Some('"'), [INFO] [stderr] 108 | '\'' => Some('\''), [INFO] [stderr] 109 | 'r' => match *tokenizer.peek_n(1).unwrap() { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/sabri/syntax/lexer/matcher.rs:145:21 [INFO] [stderr] | [INFO] [stderr] 145 | / match tokenizer.peek().unwrap() { [INFO] [stderr] 146 | | &'\\' => { [INFO] [stderr] 147 | | tokenizer.next(); [INFO] [stderr] 148 | | found_escape = true [INFO] [stderr] ... | [INFO] [stderr] 151 | | _ => string.push(tokenizer.next().unwrap()), [INFO] [stderr] 152 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] warning: needlessly taken reference of left operand [INFO] [stderr] --> src/sabri/syntax/parser/traveler.rs:64:12 [INFO] [stderr] | [INFO] [stderr] 64 | if &self.current_content() == content { [INFO] [stderr] | -----------------------^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: use the left value directly: `self.current_content()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: the variable `accum` is used as a loop counter. Consider using `for (accum, item) in sequence.enumerate()` or similar iterators [INFO] [stderr] --> src/sabri/syntax/parser/traveler.rs:76:18 [INFO] [stderr] | [INFO] [stderr] 76 | for c in sequence { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_counter_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 145 | match *tokenizer.peek().unwrap() { [INFO] [stderr] 146 | '\\' => { [INFO] [stderr] 147 | tokenizer.next(); [INFO] [stderr] 148 | found_escape = true [INFO] [stderr] 149 | }, [INFO] [stderr] 150 | c if &c == &delimeter.unwrap() => break, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of both operands [INFO] [stderr] --> src/sabri/syntax/lexer/matcher.rs:150:31 [INFO] [stderr] | [INFO] [stderr] 150 | &c if &c == &delimeter.unwrap() => break, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] help: use the values directly [INFO] [stderr] | [INFO] [stderr] 150 | &c if c == delimeter.unwrap() => break, [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/sabri/syntax/parser/parser.rs:62:9 [INFO] [stderr] | [INFO] [stderr] 62 | / match self.traveler.current().token_type { [INFO] [stderr] 63 | | TokenType::EOL => { [INFO] [stderr] 64 | | self.traveler.next(); [INFO] [stderr] 65 | | match self.traveler.current().token_type { [INFO] [stderr] ... | [INFO] [stderr] 71 | | _ => (), [INFO] [stderr] 72 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 62 | if let TokenType::EOL = self.traveler.current().token_type { [INFO] [stderr] 63 | self.traveler.next(); [INFO] [stderr] 64 | match self.traveler.current().token_type { [INFO] [stderr] 65 | TokenType::Block(_) => return Ok(Expression::Block(Box::new(try!(self.block())))), [INFO] [stderr] 66 | TokenType::EOL => return Ok(Expression::EOF), [INFO] [stderr] 67 | _ => (), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/sabri/syntax/parser/parser.rs:104:21 [INFO] [stderr] | [INFO] [stderr] 104 | self.traveler.expect_content(")"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/sabri/syntax/lexer/lexer.rs:92:9 [INFO] [stderr] | [INFO] [stderr] 92 | / match c.value() { [INFO] [stderr] 93 | | &ChunkValue::Source(ref s) => { [INFO] [stderr] 94 | | let mut line: Vec = lexer(&mut s.clone().chars()).collect(); [INFO] [stderr] 95 | | line.push(Token::new(TokenType::EOL, TokenPosition::default(), "\n".to_owned())); [INFO] [stderr] ... | [INFO] [stderr] 104 | | _ => (), [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] 92 | match *c.value() { [INFO] [stderr] 93 | ChunkValue::Source(ref s) => { [INFO] [stderr] 94 | let mut line: Vec = lexer(&mut s.clone().chars()).collect(); [INFO] [stderr] 95 | line.push(Token::new(TokenType::EOL, TokenPosition::default(), "\n".to_owned())); [INFO] [stderr] 96 | [INFO] [stderr] 97 | let chunk = ChunkValue::Tokens(line); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/sabri/syntax/lexer/lexer.rs:113:9 [INFO] [stderr] | [INFO] [stderr] 113 | / match c.value() { [INFO] [stderr] 114 | | &ChunkValue::Tokens(ref t) => flat.append(&mut t.clone()), [INFO] [stderr] 115 | | &ChunkValue::Block(ref b) => flat.push(Token::new(TokenType::Block(flatten_branch(b)), TokenPosition::new(0, 0), "".to_string())), [INFO] [stderr] 116 | | _ => continue, [INFO] [stderr] 117 | | } [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] 113 | match *c.value() { [INFO] [stderr] 114 | ChunkValue::Tokens(ref t) => flat.append(&mut t.clone()), [INFO] [stderr] 115 | ChunkValue::Block(ref b) => flat.push(Token::new(TokenType::Block(flatten_branch(b)), TokenPosition::new(0, 0), "".to_string())), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `Box>`. Consider using just `Vec` [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:13:11 [INFO] [stderr] | [INFO] [stderr] 13 | Block(Box>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::box_vec)] on by default [INFO] [stderr] = help: `Vec` is already on the heap, `Box>` makes an extra allocation. [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#box_vec [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `Box>`. Consider using just `Vec` [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:25:15 [INFO] [stderr] | [INFO] [stderr] 25 | args: Box>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: `Vec` is already on the heap, `Box>` makes an extra allocation. [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#box_vec [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/sabri/bytecode/instr.rs:22:5 [INFO] [stderr] | [INFO] [stderr] 22 | (op as u32) << 26 [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(op)` [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: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/sabri/bytecode/instr.rs:26:6 [INFO] [stderr] | [INFO] [stderr] 26 | ((op as u32) << 26) | ((t as u32) & 0x0fff) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(op)` [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: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/sabri/bytecode/instr.rs:26:28 [INFO] [stderr] | [INFO] [stderr] 26 | ((op as u32) << 26) | ((t as u32) & 0x0fff) [INFO] [stderr] | ^^^^^^^^^^ help: try: `u32::from(t)` [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: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/sabri/bytecode/instr.rs:30:6 [INFO] [stderr] | [INFO] [stderr] 30 | ((op as u32) << 26) | (((t1 as u32) & 0x0fff) << 12) | ((t2 as u32) & 0x0fff) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(op)` [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: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/sabri/bytecode/instr.rs:30:29 [INFO] [stderr] | [INFO] [stderr] 30 | ((op as u32) << 26) | (((t1 as u32) & 0x0fff) << 12) | ((t2 as u32) & 0x0fff) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(t1)` [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: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/sabri/bytecode/instr.rs:30:61 [INFO] [stderr] | [INFO] [stderr] 30 | ((op as u32) << 26) | (((t1 as u32) & 0x0fff) << 12) | ((t2 as u32) & 0x0fff) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(t2)` [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: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/sabri/bytecode/instr.rs:34:6 [INFO] [stderr] | [INFO] [stderr] 34 | ((op as u32) << 26) | (t & 0x03ff_ffff) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(op)` [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: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/sabri/bytecode/instr.rs:40:30 [INFO] [stderr] | [INFO] [stderr] 40 | (instr & 0xfc00_0000) | ((t as u32) & 0x0fff) [INFO] [stderr] | ^^^^^^^^^^ help: try: `u32::from(t)` [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: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/sabri/bytecode/instr.rs:44:31 [INFO] [stderr] | [INFO] [stderr] 44 | (instr & 0xfc00_0000) | (((t1 as u32) & 0x0fff) << 12) | ((t2 as u32) & 0x0fff) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(t1)` [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: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/sabri/bytecode/instr.rs:44:63 [INFO] [stderr] | [INFO] [stderr] 44 | (instr & 0xfc00_0000) | (((t1 as u32) & 0x0fff) << 12) | ((t2 as u32) & 0x0fff) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(t2)` [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: useless use of `format!` [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:55:38 [INFO] [stderr] | [INFO] [stderr] 55 | program.add_comment(&format!("{}", *n)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `*n.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/sabri/syntax/parser/ast.rs:88:21 [INFO] [stderr] | [INFO] [stderr] 88 | / match statement { [INFO] [stderr] 89 | | &Statement::Definition { ref var, ref val } => { [INFO] [stderr] 90 | | match *val { [INFO] [stderr] 91 | | Some(ref e) => try!(e.compile(&cur_sym, program)), [INFO] [stderr] ... | [INFO] [stderr] 109 | | _ => try!(statement.compile(&cur_sym, program)), [INFO] [stderr] 110 | | } [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] 88 | match *statement { [INFO] [stderr] 89 | Statement::Definition { ref var, ref val } => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:124:25 [INFO] [stderr] | [INFO] [stderr] 124 | / match op { [INFO] [stderr] 125 | | &Operand::Add => program.emit_add(), [INFO] [stderr] 126 | | &Operand::Sub => program.emit_sub(), [INFO] [stderr] 127 | | &Operand::Mul => program.emit_mul(), [INFO] [stderr] 128 | | &Operand::Div => program.emit_div(), [INFO] [stderr] 129 | | _ => return Err(ParserError::new(&format!("unhandled operator: {}", op))), [INFO] [stderr] 130 | | } [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] 124 | match *op { [INFO] [stderr] 125 | Operand::Add => program.emit_add(), [INFO] [stderr] 126 | Operand::Sub => program.emit_sub(), [INFO] [stderr] 127 | Operand::Mul => program.emit_mul(), [INFO] [stderr] 128 | Operand::Div => program.emit_div(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: variable `OP_HALT` should have a snake case name such as `op_halt` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:249:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable `OP_NEWENV` should have a snake case name such as `op_newenv` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:251:17 [INFO] [stderr] | [INFO] [stderr] 251 | OP_NEWENV => { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_POPENV` should have a snake case name such as `op_popenv` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:257:17 [INFO] [stderr] | [INFO] [stderr] 257 | OP_POPENV => print!("popenv {}", instr::d_op_12(instr)), [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_GETVAR` should have a snake case name such as `op_getvar` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:259:17 [INFO] [stderr] | [INFO] [stderr] 259 | OP_GETVAR => { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_SETVAR` should have a snake case name such as `op_setvar` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:265:17 [INFO] [stderr] | [INFO] [stderr] 265 | OP_SETVAR => { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_GETELEM` should have a snake case name such as `op_getelem` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:271:17 [INFO] [stderr] | [INFO] [stderr] 271 | OP_GETELEM => print!("getelem "), [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_SETELEM` should have a snake case name such as `op_setelem` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:272:17 [INFO] [stderr] | [INFO] [stderr] 272 | OP_SETELEM => print!("setelem "), [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_PUSHLIT` should have a snake case name such as `op_pushlit` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:273:17 [INFO] [stderr] | [INFO] [stderr] 273 | OP_PUSHLIT => print!("pushlit {}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_ADD` should have a snake case name such as `op_add` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:275:17 [INFO] [stderr] | [INFO] [stderr] 275 | OP_ADD => print!("add "), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_SUB` should have a snake case name such as `op_sub` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:276:17 [INFO] [stderr] | [INFO] [stderr] 276 | OP_SUB => print!("sub "), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_MUL` should have a snake case name such as `op_mul` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:277:17 [INFO] [stderr] | [INFO] [stderr] 277 | OP_MUL => print!("mul "), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_DIV` should have a snake case name such as `op_div` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:278:17 [INFO] [stderr] | [INFO] [stderr] 278 | OP_DIV => print!("div "), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_TEST` should have a snake case name such as `op_test` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:280:17 [INFO] [stderr] | [INFO] [stderr] 280 | OP_TEST => print!("test "), [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_JMP` should have a snake case name such as `op_jmp` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:281:17 [INFO] [stderr] | [INFO] [stderr] 281 | OP_JMP => print!("jmp {:08x}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_JT` should have a snake case name such as `op_jt` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:282:17 [INFO] [stderr] | [INFO] [stderr] 282 | OP_JT => print!("jt {:08x}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_JF` should have a snake case name such as `op_jf` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:283:17 [INFO] [stderr] | [INFO] [stderr] 283 | OP_JF => print!("jf {:08x}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_CALL` should have a snake case name such as `op_call` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:285:17 [INFO] [stderr] | [INFO] [stderr] 285 | OP_CALL => print!("call {}", instr::d_op_12(instr)), [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_RET` should have a snake case name such as `op_ret` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:286:17 [INFO] [stderr] | [INFO] [stderr] 286 | OP_RET => print!("ret "), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_POPVAL` should have a snake case name such as `op_popval` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:288:17 [INFO] [stderr] | [INFO] [stderr] 288 | OP_POPVAL => print!("popval {}", instr::d_op_12(instr)), [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/sabri/bytecode/gen.rs:299:12 [INFO] [stderr] | [INFO] [stderr] 299 | if self.literals.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.literals.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 `Box>`. Consider using just `Vec` [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:199:13 [INFO] [stderr] | [INFO] [stderr] 199 | block: Box>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: `Vec` is already on the heap, `Box>` makes an extra allocation. [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#box_vec [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `Box>`. Consider using just `Vec` [INFO] [stderr] --> src/sabri/syntax/parser/ast.rs:203:48 [INFO] [stderr] | [INFO] [stderr] 203 | pub fn new(params: Vec>, block: Box>) -> Lambda { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: `Vec` is already on the heap, `Box>` makes an extra allocation. [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#box_vec [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of left operand [INFO] [stderr] --> src/sabri/syntax/parser/traveler.rs:64:12 [INFO] [stderr] | [INFO] [stderr] 64 | if &self.current_content() == content { [INFO] [stderr] | -----------------------^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: use the left value directly: `self.current_content()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: the variable `accum` is used as a loop counter. Consider using `for (accum, item) in sequence.enumerate()` or similar iterators [INFO] [stderr] --> src/sabri/syntax/parser/traveler.rs:76:18 [INFO] [stderr] | [INFO] [stderr] 76 | for c in sequence { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_counter_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/sabri/native.rs:19:17 [INFO] [stderr] | [INFO] [stderr] 19 | pub fn call(&self, args: &[Value], env: &Rc) -> RunResult { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/sabri/syntax/parser/parser.rs:62:9 [INFO] [stderr] | [INFO] [stderr] 62 | / match self.traveler.current().token_type { [INFO] [stderr] 63 | | TokenType::EOL => { [INFO] [stderr] 64 | | self.traveler.next(); [INFO] [stderr] 65 | | match self.traveler.current().token_type { [INFO] [stderr] ... | [INFO] [stderr] 71 | | _ => (), [INFO] [stderr] 72 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 62 | if let TokenType::EOL = self.traveler.current().token_type { [INFO] [stderr] 63 | self.traveler.next(); [INFO] [stderr] 64 | match self.traveler.current().token_type { [INFO] [stderr] 65 | TokenType::Block(_) => return Ok(Expression::Block(Box::new(try!(self.block())))), [INFO] [stderr] 66 | TokenType::EOL => return Ok(Expression::EOF), [INFO] [stderr] 67 | _ => (), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/sabri/syntax/parser/parser.rs:104:21 [INFO] [stderr] | [INFO] [stderr] 104 | self.traveler.expect_content(")"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/sabri/bytecode/instr.rs:22:5 [INFO] [stderr] | [INFO] [stderr] 22 | (op as u32) << 26 [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(op)` [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: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/sabri/bytecode/instr.rs:26:6 [INFO] [stderr] | [INFO] [stderr] 26 | ((op as u32) << 26) | ((t as u32) & 0x0fff) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(op)` [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: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/sabri/bytecode/instr.rs:26:28 [INFO] [stderr] | [INFO] [stderr] 26 | ((op as u32) << 26) | ((t as u32) & 0x0fff) [INFO] [stderr] | ^^^^^^^^^^ help: try: `u32::from(t)` [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: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/sabri/bytecode/instr.rs:30:6 [INFO] [stderr] | [INFO] [stderr] 30 | ((op as u32) << 26) | (((t1 as u32) & 0x0fff) << 12) | ((t2 as u32) & 0x0fff) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(op)` [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: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/sabri/bytecode/instr.rs:30:29 [INFO] [stderr] | [INFO] [stderr] 30 | ((op as u32) << 26) | (((t1 as u32) & 0x0fff) << 12) | ((t2 as u32) & 0x0fff) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(t1)` [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: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/sabri/bytecode/instr.rs:30:61 [INFO] [stderr] | [INFO] [stderr] 30 | ((op as u32) << 26) | (((t1 as u32) & 0x0fff) << 12) | ((t2 as u32) & 0x0fff) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(t2)` [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: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/sabri/bytecode/instr.rs:34:6 [INFO] [stderr] | [INFO] [stderr] 34 | ((op as u32) << 26) | (t & 0x03ff_ffff) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(op)` [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: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/sabri/bytecode/instr.rs:40:30 [INFO] [stderr] | [INFO] [stderr] 40 | (instr & 0xfc00_0000) | ((t as u32) & 0x0fff) [INFO] [stderr] | ^^^^^^^^^^ help: try: `u32::from(t)` [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: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/sabri/bytecode/instr.rs:44:31 [INFO] [stderr] | [INFO] [stderr] 44 | (instr & 0xfc00_0000) | (((t1 as u32) & 0x0fff) << 12) | ((t2 as u32) & 0x0fff) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(t1)` [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: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/sabri/bytecode/instr.rs:44:63 [INFO] [stderr] | [INFO] [stderr] 44 | (instr & 0xfc00_0000) | (((t1 as u32) & 0x0fff) << 12) | ((t2 as u32) & 0x0fff) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::from(t2)` [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: variable `OP_HALT` should have a snake case name such as `op_halt` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:249:17 [INFO] [stderr] | [INFO] [stderr] 249 | OP_HALT => print!("halt "), [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable `OP_NEWENV` should have a snake case name such as `op_newenv` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:251:17 [INFO] [stderr] | [INFO] [stderr] 251 | OP_NEWENV => { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_POPENV` should have a snake case name such as `op_popenv` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:257:17 [INFO] [stderr] | [INFO] [stderr] 257 | OP_POPENV => print!("popenv {}", instr::d_op_12(instr)), [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_GETVAR` should have a snake case name such as `op_getvar` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:259:17 [INFO] [stderr] | [INFO] [stderr] 259 | OP_GETVAR => { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_SETVAR` should have a snake case name such as `op_setvar` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:265:17 [INFO] [stderr] | [INFO] [stderr] 265 | OP_SETVAR => { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_GETELEM` should have a snake case name such as `op_getelem` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:271:17 [INFO] [stderr] | [INFO] [stderr] 271 | OP_GETELEM => print!("getelem "), [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_SETELEM` should have a snake case name such as `op_setelem` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:272:17 [INFO] [stderr] | [INFO] [stderr] 272 | OP_SETELEM => print!("setelem "), [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_PUSHLIT` should have a snake case name such as `op_pushlit` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:273:17 [INFO] [stderr] | [INFO] [stderr] 273 | OP_PUSHLIT => print!("pushlit {}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_ADD` should have a snake case name such as `op_add` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:275:17 [INFO] [stderr] | [INFO] [stderr] 275 | OP_ADD => print!("add "), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_SUB` should have a snake case name such as `op_sub` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:276:17 [INFO] [stderr] | [INFO] [stderr] 276 | OP_SUB => print!("sub "), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_MUL` should have a snake case name such as `op_mul` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:277:17 [INFO] [stderr] | [INFO] [stderr] 277 | OP_MUL => print!("mul "), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_DIV` should have a snake case name such as `op_div` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:278:17 [INFO] [stderr] | [INFO] [stderr] 278 | OP_DIV => print!("div "), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_TEST` should have a snake case name such as `op_test` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:280:17 [INFO] [stderr] | [INFO] [stderr] 280 | OP_TEST => print!("test "), [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_JMP` should have a snake case name such as `op_jmp` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:281:17 [INFO] [stderr] | [INFO] [stderr] 281 | OP_JMP => print!("jmp {:08x}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_JT` should have a snake case name such as `op_jt` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:282:17 [INFO] [stderr] | [INFO] [stderr] 282 | OP_JT => print!("jt {:08x}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_JF` should have a snake case name such as `op_jf` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:283:17 [INFO] [stderr] | [INFO] [stderr] 283 | OP_JF => print!("jf {:08x}", instr::d_op_26(instr)), [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_CALL` should have a snake case name such as `op_call` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:285:17 [INFO] [stderr] | [INFO] [stderr] 285 | OP_CALL => print!("call {}", instr::d_op_12(instr)), [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_RET` should have a snake case name such as `op_ret` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:286:17 [INFO] [stderr] | [INFO] [stderr] 286 | OP_RET => print!("ret "), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `OP_POPVAL` should have a snake case name such as `op_popval` [INFO] [stderr] --> src/sabri/bytecode/gen.rs:288:17 [INFO] [stderr] | [INFO] [stderr] 288 | OP_POPVAL => print!("popval {}", instr::d_op_12(instr)), [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/sabri/bytecode/gen.rs:299:12 [INFO] [stderr] | [INFO] [stderr] 299 | if self.literals.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.literals.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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/sabri/native.rs:19:17 [INFO] [stderr] | [INFO] [stderr] 19 | pub fn call(&self, args: &[Value], env: &Rc) -> RunResult { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 8.97s [INFO] running `"docker" "inspect" "86512d3ca505c60cbe13f62c9c64a7ab20bb9bd966a74bb752cc085547978e09"` [INFO] running `"docker" "rm" "-f" "86512d3ca505c60cbe13f62c9c64a7ab20bb9bd966a74bb752cc085547978e09"` [INFO] [stdout] 86512d3ca505c60cbe13f62c9c64a7ab20bb9bd966a74bb752cc085547978e09