[INFO] updating cached repository tkyk0317/rcc [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/tkyk0317/rcc [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/tkyk0317/rcc" "work/ex/clippy-test-run/sources/stable/gh/tkyk0317/rcc"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/tkyk0317/rcc'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/tkyk0317/rcc" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/tkyk0317/rcc"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/tkyk0317/rcc'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 114de612abd069ec64c21a9f7e5c66f2576d0ca7 [INFO] sha for GitHub repo tkyk0317/rcc: 114de612abd069ec64c21a9f7e5c66f2576d0ca7 [INFO] validating manifest of tkyk0317/rcc 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 tkyk0317/rcc 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 tkyk0317/rcc [INFO] finished frobbing tkyk0317/rcc [INFO] frobbed toml for tkyk0317/rcc written to work/ex/clippy-test-run/sources/stable/gh/tkyk0317/rcc/Cargo.toml [INFO] started frobbing tkyk0317/rcc [INFO] finished frobbing tkyk0317/rcc [INFO] frobbed toml for tkyk0317/rcc written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/tkyk0317/rcc/Cargo.toml [INFO] crate tkyk0317/rcc 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 tkyk0317/rcc 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-1/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/tkyk0317/rcc:/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] 175d1ea80932432c493c6f3d122b6016b3f1ab7abc8e40421a2b019327b4a002 [INFO] running `"docker" "start" "-a" "175d1ea80932432c493c6f3d122b6016b3f1ab7abc8e40421a2b019327b4a002"` [INFO] [stderr] Checking rcc v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/asm.rs:94:13 [INFO] [stderr] | [INFO] [stderr] 94 | var_table: var_table, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `var_table` [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/asm.rs:95:13 [INFO] [stderr] | [INFO] [stderr] 95 | func_table: func_table, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `func_table` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/ast.rs:116:19 [INFO] [stderr] | [INFO] [stderr] 116 | AstTree { tree: tree } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `tree` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/ast.rs:131:13 [INFO] [stderr] | [INFO] [stderr] 131 | tokens: tokens, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `tokens` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lexer.rs:17:13 [INFO] [stderr] | [INFO] [stderr] 17 | name: name, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lexer.rs:18:13 [INFO] [stderr] | [INFO] [stderr] 18 | input: input, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `input` [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/semantic.rs:26:13 [INFO] [stderr] | [INFO] [stderr] 26 | ast: ast, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `ast` [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/semantic.rs:27:13 [INFO] [stderr] | [INFO] [stderr] 27 | vars: vars, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `vars` [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/semantic.rs:28:13 [INFO] [stderr] | [INFO] [stderr] 28 | funcs: funcs, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `funcs` [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/token.rs:60:13 [INFO] [stderr] | [INFO] [stderr] 60 | name: name, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `name` [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/token.rs:61:13 [INFO] [stderr] | [INFO] [stderr] 61 | row: row, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `row` [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/token.rs:62:13 [INFO] [stderr] | [INFO] [stderr] 62 | col: col, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `col` [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/token.rs:80:13 [INFO] [stderr] | [INFO] [stderr] 80 | token: token, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `token` [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/token.rs:81:13 [INFO] [stderr] | [INFO] [stderr] 81 | val: val, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `val` [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/asm.rs:94:13 [INFO] [stderr] | [INFO] [stderr] 94 | var_table: var_table, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `var_table` [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/asm.rs:95:13 [INFO] [stderr] | [INFO] [stderr] 95 | func_table: func_table, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `func_table` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/ast.rs:116:19 [INFO] [stderr] | [INFO] [stderr] 116 | AstTree { tree: tree } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `tree` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/ast.rs:131:13 [INFO] [stderr] | [INFO] [stderr] 131 | tokens: tokens, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `tokens` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lexer.rs:17:13 [INFO] [stderr] | [INFO] [stderr] 17 | name: name, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lexer.rs:18:13 [INFO] [stderr] | [INFO] [stderr] 18 | input: input, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `input` [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/semantic.rs:26:13 [INFO] [stderr] | [INFO] [stderr] 26 | ast: ast, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `ast` [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/semantic.rs:27:13 [INFO] [stderr] | [INFO] [stderr] 27 | vars: vars, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `vars` [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/semantic.rs:28:13 [INFO] [stderr] | [INFO] [stderr] 28 | funcs: funcs, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `funcs` [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/token.rs:60:13 [INFO] [stderr] | [INFO] [stderr] 60 | name: name, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `name` [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/token.rs:61:13 [INFO] [stderr] | [INFO] [stderr] 61 | row: row, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `row` [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/token.rs:62:13 [INFO] [stderr] | [INFO] [stderr] 62 | col: col, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `col` [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/token.rs:80:13 [INFO] [stderr] | [INFO] [stderr] 80 | token: token, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `token` [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/token.rs:81:13 [INFO] [stderr] | [INFO] [stderr] 81 | val: val, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `val` [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: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/asm.rs:78:14 [INFO] [stderr] | [INFO] [stderr] 78 | const REGS: &'static [&str] = &["rdi", "rsi", "rdx", "rcx", "r8", "r9"]; [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: unneeded return statement [INFO] [stderr] --> src/lexer.rs:163:13 [INFO] [stderr] | [INFO] [stderr] 163 | return (d.0, d.1); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(d.0, d.1)` [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: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/asm.rs:78:14 [INFO] [stderr] | [INFO] [stderr] 78 | const REGS: &'static [&str] = &["rdi", "rsi", "rdx", "rcx", "r8", "r9"]; [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: unneeded return statement [INFO] [stderr] --> src/lexer.rs:163:13 [INFO] [stderr] | [INFO] [stderr] 163 | return (d.0, d.1); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(d.0, d.1)` [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: field is never used: `func_table` [INFO] [stderr] --> src/asm.rs:84:5 [INFO] [stderr] | [INFO] [stderr] 84 | func_table: &'a SymbolTable, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: struct is never constructed: `StringData` [INFO] [stderr] --> src/string.rs:2:1 [INFO] [stderr] | [INFO] [stderr] 2 | pub struct StringData { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/string.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 10 | pub fn new() -> StringData { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `push` [INFO] [stderr] --> src/string.rs:20:5 [INFO] [stderr] | [INFO] [stderr] 20 | pub fn push(&mut self, c: char) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/asm.rs:157:50 [INFO] [stderr] | [INFO] [stderr] 157 | fn generate_funcdef(&mut self, _t: &Type, a: &String, b: &AstType, c: &AstType) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/asm.rs:183:42 [INFO] [stderr] | [INFO] [stderr] 183 | fn generate_func_start(&mut self, a: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/asm.rs:196:21 [INFO] [stderr] | [INFO] [stderr] 196 | self.inst = format!("{}", start); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `start.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: casting i32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/asm.rs:219:58 [INFO] [stderr] | [INFO] [stderr] 219 | self.gen.movl_dst("eax", "rbp", -(p as i64)) [INFO] [stderr] | ^^^^^^^^^^ help: try: `i64::from(p)` [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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/asm.rs:476:50 [INFO] [stderr] | [INFO] [stderr] 476 | fn generate_variable(&mut self, t: &Type, v: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/asm.rs:507:27 [INFO] [stderr] | [INFO] [stderr] 507 | v.into_iter().rev().for_each(|d| self.generate(d)); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/asm.rs:530:39 [INFO] [stderr] | [INFO] [stderr] 530 | fn generate_func_symbol(&self, s: &String) -> String { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/ast.rs:128:24 [INFO] [stderr] | [INFO] [stderr] 128 | pub fn new(tokens: &'a Vec) -> AstGen<'a> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: change this to: `&[TokenInfo]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/ast.rs:195:22 [INFO] [stderr] | [INFO] [stderr] 195 | fn is_type_token(&mut self) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/ast.rs:232:12 [INFO] [stderr] | [INFO] [stderr] 232 | if false == self.is_type_token() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_type_token()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::bool_comparison)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [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/ast.rs:256:39 [INFO] [stderr] | [INFO] [stderr] 256 | fn sub_statement(&mut self, expr: &Vec) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 256 | fn sub_statement(&mut self, expr: &[AstType]) -> Vec { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] help: change `expr.clone()` to [INFO] [stderr] | [INFO] [stderr] 258 | let mut stmt = expr.to_owned(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:34:15 [INFO] [stderr] | [INFO] [stderr] 34 | while false == self.is_eof() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_eof()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [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/lexer.rs:39:13 [INFO] [stderr] | [INFO] [stderr] 39 | / match self.next() { [INFO] [stderr] 40 | | Some(v) => { [INFO] [stderr] 41 | | let token = match v { [INFO] [stderr] 42 | | s if true == s.is_alphabetic() || s == '_' => { [INFO] [stderr] ... | [INFO] [stderr] 134 | | _ => {} [INFO] [stderr] 135 | | } [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] 39 | if let Some(v) = self.next() { [INFO] [stderr] 40 | let token = match v { [INFO] [stderr] 41 | s if true == s.is_alphabetic() || s == '_' => { [INFO] [stderr] 42 | if let Some(t) = self.generate_type(s) { [INFO] [stderr] 43 | t [INFO] [stderr] 44 | } else if let Some(t) = self.generate_statement(s) { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:42:30 [INFO] [stderr] | [INFO] [stderr] 42 | s if true == s.is_alphabetic() || s == '_' => { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `s.is_alphabetic()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:52:32 [INFO] [stderr] | [INFO] [stderr] 52 | if true == self.is_equal(v) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_equal(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:61:32 [INFO] [stderr] | [INFO] [stderr] 61 | if true == self.is_not_equal(v) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_not_equal(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:70:32 [INFO] [stderr] | [INFO] [stderr] 70 | if true == self.is_greater_than_equal(v) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_greater_than_equal(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:75:39 [INFO] [stderr] | [INFO] [stderr] 75 | } else if true == self.is_right_shift(v) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_right_shift(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:84:32 [INFO] [stderr] | [INFO] [stderr] 84 | if true == self.is_less_than_equal(v) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_less_than_equal(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:88:39 [INFO] [stderr] | [INFO] [stderr] 88 | } else if true == self.is_left_shift(v) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_left_shift(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:97:32 [INFO] [stderr] | [INFO] [stderr] 97 | if true == self.is_logical_and(v) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_logical_and(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:105:32 [INFO] [stderr] | [INFO] [stderr] 105 | if true == self.is_logical_or(v) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_logical_or(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:179:15 [INFO] [stderr] | [INFO] [stderr] 179 | while false == self.is_eof() && self.read().is_ascii_whitespace() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_eof()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:216:15 [INFO] [stderr] | [INFO] [stderr] 216 | while false == self.is_eof() && true == self.read().is_digit(10) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_eof()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:216:41 [INFO] [stderr] | [INFO] [stderr] 216 | while false == self.is_eof() && true == self.read().is_digit(10) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.read().is_digit(10)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:227:15 [INFO] [stderr] | [INFO] [stderr] 227 | while false == self.is_eof() && self.is_variable(self.read()) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_eof()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:239:17 [INFO] [stderr] | [INFO] [stderr] 239 | fn is_equal(&mut self, v: char) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:244:21 [INFO] [stderr] | [INFO] [stderr] 244 | fn is_not_equal(&mut self, v: char) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:280:12 [INFO] [stderr] | [INFO] [stderr] 280 | if true == self.is_type_int(c) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_type_int(c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:303:20 [INFO] [stderr] | [INFO] [stderr] 303 | fn is_type_int(&mut self, c: char) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:309:16 [INFO] [stderr] | [INFO] [stderr] 309 | && false == self.is_variable(l.expect("lexer.rs(is_type_int): read error")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_variable(l.expect("lexer.rs(is_type_int): read error"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:313:19 [INFO] [stderr] | [INFO] [stderr] 313 | fn is_pointer(&mut self) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:321:12 [INFO] [stderr] | [INFO] [stderr] 321 | if true == self.is_statement_if(c) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_statement_if(c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:325:19 [INFO] [stderr] | [INFO] [stderr] 325 | } else if true == self.is_statement_else(c) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_statement_else(c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:329:19 [INFO] [stderr] | [INFO] [stderr] 329 | } else if true == self.is_statement_while(c) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_statement_while(c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:333:19 [INFO] [stderr] | [INFO] [stderr] 333 | } else if true == self.is_statement_for(c) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_statement_for(c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:337:19 [INFO] [stderr] | [INFO] [stderr] 337 | } else if true == self.is_statement_do(c) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_statement_do(c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:341:19 [INFO] [stderr] | [INFO] [stderr] 341 | } else if true == self.is_statement_continue(c) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_statement_continue(c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:345:19 [INFO] [stderr] | [INFO] [stderr] 345 | } else if true == self.is_statement_break(c) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_statement_break(c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:349:19 [INFO] [stderr] | [INFO] [stderr] 349 | } else if true == self.is_statement_return(c) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_statement_return(c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:359:24 [INFO] [stderr] | [INFO] [stderr] 359 | fn is_statement_if(&mut self, v: char) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:365:16 [INFO] [stderr] | [INFO] [stderr] 365 | && false == self.is_variable(l.expect("lexer.rs(is_statement_if): read error")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_variable(l.expect("lexer.rs(is_statement_if): read error"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:369:26 [INFO] [stderr] | [INFO] [stderr] 369 | fn is_statement_else(&mut self, v: char) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:375:16 [INFO] [stderr] | [INFO] [stderr] 375 | && false == self.is_variable(l.expect("lexer.rs(is_statement_else): read error")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_variable(l.expect("lexer.rs(is_statement_else): read error"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:379:27 [INFO] [stderr] | [INFO] [stderr] 379 | fn is_statement_while(&mut self, v: char) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:385:16 [INFO] [stderr] | [INFO] [stderr] 385 | && false == self.is_variable(l.expect("lexer.rs(is_statement_while): read error")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_variable(l.expect("lexer.rs(is_statement_while): read error"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:389:24 [INFO] [stderr] | [INFO] [stderr] 389 | fn is_statement_do(&mut self, v: char) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:395:16 [INFO] [stderr] | [INFO] [stderr] 395 | && false == self.is_variable(l.expect("lexer.rs(is_statement_do): read error")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_variable(l.expect("lexer.rs(is_statement_do): read error"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:399:25 [INFO] [stderr] | [INFO] [stderr] 399 | fn is_statement_for(&mut self, v: char) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:405:16 [INFO] [stderr] | [INFO] [stderr] 405 | && false == self.is_variable(l.expect("lexer.rs(is_statement_for): read error")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_variable(l.expect("lexer.rs(is_statement_for): read error"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:409:30 [INFO] [stderr] | [INFO] [stderr] 409 | fn is_statement_continue(&mut self, v: char) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:415:16 [INFO] [stderr] | [INFO] [stderr] 415 | && false == self.is_variable(l.expect("lexer.rs(is_statement_continue): read error")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_variable(l.expect("lexer.rs(is_statement_continue): read error"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:419:27 [INFO] [stderr] | [INFO] [stderr] 419 | fn is_statement_break(&mut self, v: char) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:425:16 [INFO] [stderr] | [INFO] [stderr] 425 | && false == self.is_variable(l.expect("lexer.rs(is_statement_break): read error")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_variable(l.expect("lexer.rs(is_statement_break): read error"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:429:28 [INFO] [stderr] | [INFO] [stderr] 429 | fn is_statement_return(&mut self, v: char) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:435:16 [INFO] [stderr] | [INFO] [stderr] 435 | && false == self.is_variable(l.expect("lexer.rs(is_statement_return): read error")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_variable(l.expect("lexer.rs(is_statement_return): read error"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/map.rs:41:29 [INFO] [stderr] | [INFO] [stderr] 41 | pub fn search(&self, k: &String) -> Option { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/semantic.rs:67:15 [INFO] [stderr] | [INFO] [stderr] 67 | name: &String, [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/semantic.rs:72:9 [INFO] [stderr] | [INFO] [stderr] 72 | / match t { [INFO] [stderr] 73 | | Type::Unknown(n) => errs.push(format!("Cannot found Type: {:?}", n)), [INFO] [stderr] 74 | | _ => {} [INFO] [stderr] 75 | | } [INFO] [stderr] | |_________^ help: try this: `if let Type::Unknown(n) = t { errs.push(format!("Cannot found Type: {:?}", n)) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [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/semantic.rs:89:38 [INFO] [stderr] | [INFO] [stderr] 89 | fn analysis_argment(&self, args: &Vec) -> Result<(), Vec> { [INFO] [stderr] | ^^^^^^^^^^^^^ help: change this to: `&[AstType]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/semantic.rs:103:40 [INFO] [stderr] | [INFO] [stderr] 103 | fn analysis_statement(&self, stmt: &Vec) -> Result<(), Vec> { [INFO] [stderr] | ^^^^^^^^^^^^^ help: change this to: `&[AstType]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/semantic.rs:152:46 [INFO] [stderr] | [INFO] [stderr] 152 | fn analysis_variable(&self, t: &Type, n: &String) -> Result<(), Vec> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/semantic.rs:154:9 [INFO] [stderr] | [INFO] [stderr] 154 | / match t { [INFO] [stderr] 155 | | Type::Unknown(n) => errs.push(format!("Cannot found Type: {:?}", n)), [INFO] [stderr] 156 | | _ => {} [INFO] [stderr] 157 | | } [INFO] [stderr] | |_________^ help: try this: `if let Type::Unknown(n) = t { errs.push(format!("Cannot found Type: {:?}", n)) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/string.rs:22:9 [INFO] [stderr] | [INFO] [stderr] 22 | self.len = self.len + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.len += 1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/string.rs:28:13 [INFO] [stderr] | [INFO] [stderr] 28 | self.size = self.size * 2; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.size *= 2` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/symbol.rs:40:29 [INFO] [stderr] | [INFO] [stderr] 40 | pub fn search(&self, k: &String) -> Option { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/main.rs:60:46 [INFO] [stderr] | [INFO] [stderr] 60 | let mut f = File::open(&args[1]).expect(&format!("not found file {}", args[1])); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("not found file {}", args[1]))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: field is never used: `func_table` [INFO] [stderr] --> src/asm.rs:84:5 [INFO] [stderr] | [INFO] [stderr] 84 | func_table: &'a SymbolTable, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/asm.rs:157:50 [INFO] [stderr] | [INFO] [stderr] 157 | fn generate_funcdef(&mut self, _t: &Type, a: &String, b: &AstType, c: &AstType) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/asm.rs:183:42 [INFO] [stderr] | [INFO] [stderr] 183 | fn generate_func_start(&mut self, a: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/asm.rs:196:21 [INFO] [stderr] | [INFO] [stderr] 196 | self.inst = format!("{}", start); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `start.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: casting i32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/asm.rs:219:58 [INFO] [stderr] | [INFO] [stderr] 219 | self.gen.movl_dst("eax", "rbp", -(p as i64)) [INFO] [stderr] | ^^^^^^^^^^ help: try: `i64::from(p)` [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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/asm.rs:476:50 [INFO] [stderr] | [INFO] [stderr] 476 | fn generate_variable(&mut self, t: &Type, v: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/asm.rs:507:27 [INFO] [stderr] | [INFO] [stderr] 507 | v.into_iter().rev().for_each(|d| self.generate(d)); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/asm.rs:530:39 [INFO] [stderr] | [INFO] [stderr] 530 | fn generate_func_symbol(&self, s: &String) -> String { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/ast.rs:128:24 [INFO] [stderr] | [INFO] [stderr] 128 | pub fn new(tokens: &'a Vec) -> AstGen<'a> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: change this to: `&[TokenInfo]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/ast.rs:195:22 [INFO] [stderr] | [INFO] [stderr] 195 | fn is_type_token(&mut self) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/ast.rs:232:12 [INFO] [stderr] | [INFO] [stderr] 232 | if false == self.is_type_token() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_type_token()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::bool_comparison)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [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/ast.rs:256:39 [INFO] [stderr] | [INFO] [stderr] 256 | fn sub_statement(&mut self, expr: &Vec) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 256 | fn sub_statement(&mut self, expr: &[AstType]) -> Vec { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] help: change `expr.clone()` to [INFO] [stderr] | [INFO] [stderr] 258 | let mut stmt = expr.to_owned(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:34:15 [INFO] [stderr] | [INFO] [stderr] 34 | while false == self.is_eof() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_eof()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [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/lexer.rs:39:13 [INFO] [stderr] | [INFO] [stderr] 39 | / match self.next() { [INFO] [stderr] 40 | | Some(v) => { [INFO] [stderr] 41 | | let token = match v { [INFO] [stderr] 42 | | s if true == s.is_alphabetic() || s == '_' => { [INFO] [stderr] ... | [INFO] [stderr] 134 | | _ => {} [INFO] [stderr] 135 | | } [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] 39 | if let Some(v) = self.next() { [INFO] [stderr] 40 | let token = match v { [INFO] [stderr] 41 | s if true == s.is_alphabetic() || s == '_' => { [INFO] [stderr] 42 | if let Some(t) = self.generate_type(s) { [INFO] [stderr] 43 | t [INFO] [stderr] 44 | } else if let Some(t) = self.generate_statement(s) { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:42:30 [INFO] [stderr] | [INFO] [stderr] 42 | s if true == s.is_alphabetic() || s == '_' => { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `s.is_alphabetic()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:52:32 [INFO] [stderr] | [INFO] [stderr] 52 | if true == self.is_equal(v) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_equal(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:61:32 [INFO] [stderr] | [INFO] [stderr] 61 | if true == self.is_not_equal(v) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_not_equal(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:70:32 [INFO] [stderr] | [INFO] [stderr] 70 | if true == self.is_greater_than_equal(v) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_greater_than_equal(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:75:39 [INFO] [stderr] | [INFO] [stderr] 75 | } else if true == self.is_right_shift(v) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_right_shift(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:84:32 [INFO] [stderr] | [INFO] [stderr] 84 | if true == self.is_less_than_equal(v) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_less_than_equal(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:88:39 [INFO] [stderr] | [INFO] [stderr] 88 | } else if true == self.is_left_shift(v) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_left_shift(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:97:32 [INFO] [stderr] | [INFO] [stderr] 97 | if true == self.is_logical_and(v) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_logical_and(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:105:32 [INFO] [stderr] | [INFO] [stderr] 105 | if true == self.is_logical_or(v) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_logical_or(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:179:15 [INFO] [stderr] | [INFO] [stderr] 179 | while false == self.is_eof() && self.read().is_ascii_whitespace() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_eof()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:216:15 [INFO] [stderr] | [INFO] [stderr] 216 | while false == self.is_eof() && true == self.read().is_digit(10) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_eof()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:216:41 [INFO] [stderr] | [INFO] [stderr] 216 | while false == self.is_eof() && true == self.read().is_digit(10) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.read().is_digit(10)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:227:15 [INFO] [stderr] | [INFO] [stderr] 227 | while false == self.is_eof() && self.is_variable(self.read()) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_eof()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:239:17 [INFO] [stderr] | [INFO] [stderr] 239 | fn is_equal(&mut self, v: char) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:244:21 [INFO] [stderr] | [INFO] [stderr] 244 | fn is_not_equal(&mut self, v: char) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:280:12 [INFO] [stderr] | [INFO] [stderr] 280 | if true == self.is_type_int(c) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_type_int(c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:303:20 [INFO] [stderr] | [INFO] [stderr] 303 | fn is_type_int(&mut self, c: char) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:309:16 [INFO] [stderr] | [INFO] [stderr] 309 | && false == self.is_variable(l.expect("lexer.rs(is_type_int): read error")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_variable(l.expect("lexer.rs(is_type_int): read error"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:313:19 [INFO] [stderr] | [INFO] [stderr] 313 | fn is_pointer(&mut self) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:321:12 [INFO] [stderr] | [INFO] [stderr] 321 | if true == self.is_statement_if(c) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_statement_if(c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:325:19 [INFO] [stderr] | [INFO] [stderr] 325 | } else if true == self.is_statement_else(c) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_statement_else(c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:329:19 [INFO] [stderr] | [INFO] [stderr] 329 | } else if true == self.is_statement_while(c) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_statement_while(c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:333:19 [INFO] [stderr] | [INFO] [stderr] 333 | } else if true == self.is_statement_for(c) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_statement_for(c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:337:19 [INFO] [stderr] | [INFO] [stderr] 337 | } else if true == self.is_statement_do(c) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_statement_do(c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:341:19 [INFO] [stderr] | [INFO] [stderr] 341 | } else if true == self.is_statement_continue(c) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_statement_continue(c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:345:19 [INFO] [stderr] | [INFO] [stderr] 345 | } else if true == self.is_statement_break(c) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_statement_break(c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:349:19 [INFO] [stderr] | [INFO] [stderr] 349 | } else if true == self.is_statement_return(c) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.is_statement_return(c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:359:24 [INFO] [stderr] | [INFO] [stderr] 359 | fn is_statement_if(&mut self, v: char) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:365:16 [INFO] [stderr] | [INFO] [stderr] 365 | && false == self.is_variable(l.expect("lexer.rs(is_statement_if): read error")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_variable(l.expect("lexer.rs(is_statement_if): read error"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:369:26 [INFO] [stderr] | [INFO] [stderr] 369 | fn is_statement_else(&mut self, v: char) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:375:16 [INFO] [stderr] | [INFO] [stderr] 375 | && false == self.is_variable(l.expect("lexer.rs(is_statement_else): read error")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_variable(l.expect("lexer.rs(is_statement_else): read error"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:379:27 [INFO] [stderr] | [INFO] [stderr] 379 | fn is_statement_while(&mut self, v: char) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:385:16 [INFO] [stderr] | [INFO] [stderr] 385 | && false == self.is_variable(l.expect("lexer.rs(is_statement_while): read error")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_variable(l.expect("lexer.rs(is_statement_while): read error"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:389:24 [INFO] [stderr] | [INFO] [stderr] 389 | fn is_statement_do(&mut self, v: char) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:395:16 [INFO] [stderr] | [INFO] [stderr] 395 | && false == self.is_variable(l.expect("lexer.rs(is_statement_do): read error")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_variable(l.expect("lexer.rs(is_statement_do): read error"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:399:25 [INFO] [stderr] | [INFO] [stderr] 399 | fn is_statement_for(&mut self, v: char) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:405:16 [INFO] [stderr] | [INFO] [stderr] 405 | && false == self.is_variable(l.expect("lexer.rs(is_statement_for): read error")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_variable(l.expect("lexer.rs(is_statement_for): read error"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:409:30 [INFO] [stderr] | [INFO] [stderr] 409 | fn is_statement_continue(&mut self, v: char) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:415:16 [INFO] [stderr] | [INFO] [stderr] 415 | && false == self.is_variable(l.expect("lexer.rs(is_statement_continue): read error")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_variable(l.expect("lexer.rs(is_statement_continue): read error"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:419:27 [INFO] [stderr] | [INFO] [stderr] 419 | fn is_statement_break(&mut self, v: char) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:425:16 [INFO] [stderr] | [INFO] [stderr] 425 | && false == self.is_variable(l.expect("lexer.rs(is_statement_break): read error")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_variable(l.expect("lexer.rs(is_statement_break): read error"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:429:28 [INFO] [stderr] | [INFO] [stderr] 429 | fn is_statement_return(&mut self, v: char) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/lexer.rs:435:16 [INFO] [stderr] | [INFO] [stderr] 435 | && false == self.is_variable(l.expect("lexer.rs(is_statement_return): read error")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.is_variable(l.expect("lexer.rs(is_statement_return): read error"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 115 [INFO] [stderr] --> src/lexer.rs:444:5 [INFO] [stderr] | [INFO] [stderr] 444 | / fn test_lexer() { [INFO] [stderr] 445 | | { [INFO] [stderr] 446 | | let input = "2 + 1 / 3 * 7".to_string(); [INFO] [stderr] 447 | | let mut lexer = LexicalAnalysis::new("test.c".to_string(), &input); [INFO] [stderr] ... | [INFO] [stderr] 1245 | | } [INFO] [stderr] 1246 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 61 [INFO] [stderr] --> src/lexer.rs:1291:5 [INFO] [stderr] | [INFO] [stderr] 1291 | / fn test_variable() { [INFO] [stderr] 1292 | | { [INFO] [stderr] 1293 | | let input = "int ifi = 0;".to_string(); [INFO] [stderr] 1294 | | let mut lexer = LexicalAnalysis::new("test.c".to_string(), &input); [INFO] [stderr] ... | [INFO] [stderr] 1743 | | } [INFO] [stderr] 1744 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/map.rs:41:29 [INFO] [stderr] | [INFO] [stderr] 41 | pub fn search(&self, k: &String) -> Option { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/semantic.rs:67:15 [INFO] [stderr] | [INFO] [stderr] 67 | name: &String, [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/semantic.rs:72:9 [INFO] [stderr] | [INFO] [stderr] 72 | / match t { [INFO] [stderr] 73 | | Type::Unknown(n) => errs.push(format!("Cannot found Type: {:?}", n)), [INFO] [stderr] 74 | | _ => {} [INFO] [stderr] 75 | | } [INFO] [stderr] | |_________^ help: try this: `if let Type::Unknown(n) = t { errs.push(format!("Cannot found Type: {:?}", n)) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [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/semantic.rs:89:38 [INFO] [stderr] | [INFO] [stderr] 89 | fn analysis_argment(&self, args: &Vec) -> Result<(), Vec> { [INFO] [stderr] | ^^^^^^^^^^^^^ help: change this to: `&[AstType]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/semantic.rs:103:40 [INFO] [stderr] | [INFO] [stderr] 103 | fn analysis_statement(&self, stmt: &Vec) -> Result<(), Vec> { [INFO] [stderr] | ^^^^^^^^^^^^^ help: change this to: `&[AstType]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/semantic.rs:152:46 [INFO] [stderr] | [INFO] [stderr] 152 | fn analysis_variable(&self, t: &Type, n: &String) -> Result<(), Vec> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/semantic.rs:154:9 [INFO] [stderr] | [INFO] [stderr] 154 | / match t { [INFO] [stderr] 155 | | Type::Unknown(n) => errs.push(format!("Cannot found Type: {:?}", n)), [INFO] [stderr] 156 | | _ => {} [INFO] [stderr] 157 | | } [INFO] [stderr] | |_________^ help: try this: `if let Type::Unknown(n) = t { errs.push(format!("Cannot found Type: {:?}", n)) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/string.rs:22:9 [INFO] [stderr] | [INFO] [stderr] 22 | self.len = self.len + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.len += 1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/string.rs:28:13 [INFO] [stderr] | [INFO] [stderr] 28 | self.size = self.size * 2; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.size *= 2` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/symbol.rs:40:29 [INFO] [stderr] | [INFO] [stderr] 40 | pub fn search(&self, k: &String) -> Option { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/main.rs:60:46 [INFO] [stderr] | [INFO] [stderr] 60 | let mut f = File::open(&args[1]).expect(&format!("not found file {}", args[1])); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("not found file {}", args[1]))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 5.09s [INFO] running `"docker" "inspect" "175d1ea80932432c493c6f3d122b6016b3f1ab7abc8e40421a2b019327b4a002"` [INFO] running `"docker" "rm" "-f" "175d1ea80932432c493c6f3d122b6016b3f1ab7abc8e40421a2b019327b4a002"` [INFO] [stdout] 175d1ea80932432c493c6f3d122b6016b3f1ab7abc8e40421a2b019327b4a002