[INFO] crate ressa 0.2.1 is already in cache [INFO] extracting crate ressa 0.2.1 into work/ex/clippy-test-run/sources/stable/reg/ressa/0.2.1 [INFO] extracting crate ressa 0.2.1 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/ressa/0.2.1 [INFO] validating manifest of ressa-0.2.1 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 ressa-0.2.1 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 ressa-0.2.1 [INFO] finished frobbing ressa-0.2.1 [INFO] frobbed toml for ressa-0.2.1 written to work/ex/clippy-test-run/sources/stable/reg/ressa/0.2.1/Cargo.toml [INFO] started frobbing ressa-0.2.1 [INFO] finished frobbing ressa-0.2.1 [INFO] frobbed toml for ressa-0.2.1 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/ressa/0.2.1/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [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 ressa-0.2.1 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-4/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/ressa/0.2.1:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 5b1f9b69389a9223dce74ca4f4724538c208ba653bb126a265e164c9cb63db01 [INFO] running `"docker" "start" "-a" "5b1f9b69389a9223dce74ca4f4724538c208ba653bb126a265e164c9cb63db01"` [INFO] [stderr] Checking unic-ucd-ident v0.7.0 [INFO] [stderr] Checking combine v3.6.6 [INFO] [stderr] Checking docopt v1.0.2 [INFO] [stderr] Checking ress v0.5.3 [INFO] [stderr] Checking ressa v0.2.1 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/node.rs:544:13 [INFO] [stderr] | [INFO] [stderr] 544 | init: init, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `init` [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/node.rs:545:13 [INFO] [stderr] | [INFO] [stderr] 545 | test: test, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `test` [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/node.rs:546:13 [INFO] [stderr] | [INFO] [stderr] 546 | update: update, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `update` [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/node.rs:544:13 [INFO] [stderr] | [INFO] [stderr] 544 | init: init, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `init` [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/node.rs:545:13 [INFO] [stderr] | [INFO] [stderr] 545 | test: test, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `test` [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/node.rs:546:13 [INFO] [stderr] | [INFO] [stderr] 546 | update: update, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `update` [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: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/lib.rs:611:9 [INFO] [stderr] | [INFO] [stderr] 611 | ret [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/lib.rs:560:19 [INFO] [stderr] | [INFO] [stderr] 560 | let ret = match &tok { [INFO] [stderr] | ___________________^ [INFO] [stderr] 561 | | Token::Keyword(ref k) => match k { [INFO] [stderr] 562 | | &Keyword::Import => { [INFO] [stderr] 563 | | if self.at_import_call() { [INFO] [stderr] ... | [INFO] [stderr] 609 | | } [INFO] [stderr] 610 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:808:17 [INFO] [stderr] | [INFO] [stderr] 808 | / return self.expected_token_error( [INFO] [stderr] 809 | | &self.look_ahead, [INFO] [stderr] 810 | | &["let", "var", "const", "class", "function"], [INFO] [stderr] 811 | | ); [INFO] [stderr] | |__________________^ [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] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 808 | self.expected_token_error( [INFO] [stderr] 809 | &self.look_ahead, [INFO] [stderr] 810 | &["let", "var", "const", "class", "function"], [INFO] [stderr] 811 | ) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:1180:9 [INFO] [stderr] | [INFO] [stderr] 1180 | / if self.context.strict && self.at_keyword(Keyword::Function) { [INFO] [stderr] 1181 | | if !self.config.tolerant { [INFO] [stderr] 1182 | | return self.unexpected_token_error(&self.look_ahead, ""); [INFO] [stderr] 1183 | | } [INFO] [stderr] 1184 | | } [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] 1180 | if self.context.strict && self.at_keyword(Keyword::Function) && !self.config.tolerant { [INFO] [stderr] 1181 | return self.unexpected_token_error(&self.look_ahead, ""); [INFO] [stderr] 1182 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:1230:21 [INFO] [stderr] | [INFO] [stderr] 1230 | return Ok(node::Statement::ForIn(stmt)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(node::Statement::ForIn(stmt))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:1234:21 [INFO] [stderr] | [INFO] [stderr] 1234 | return Ok(node::Statement::ForOf(stmt)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(node::Statement::ForOf(stmt))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:1238:21 [INFO] [stderr] | [INFO] [stderr] 1238 | return Ok(node::Statement::For(stmt)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(node::Statement::For(stmt))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:1243:17 [INFO] [stderr] | [INFO] [stderr] 1243 | return Ok(node::Statement::For(stmt)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(node::Statement::For(stmt))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:1283:25 [INFO] [stderr] | [INFO] [stderr] 1283 | / return Ok(node::Statement::ForIn(node::ForInStatement { [INFO] [stderr] 1284 | | left, [INFO] [stderr] 1285 | | right, [INFO] [stderr] 1286 | | body: Box::new(self.parse_loop_body()?), [INFO] [stderr] 1287 | | })); [INFO] [stderr] | |____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 1283 | Ok(node::Statement::ForIn(node::ForInStatement { [INFO] [stderr] 1284 | left, [INFO] [stderr] 1285 | right, [INFO] [stderr] 1286 | body: Box::new(self.parse_loop_body()?), [INFO] [stderr] 1287 | })) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:1290:25 [INFO] [stderr] | [INFO] [stderr] 1290 | / return Ok(node::Statement::ForOf( [INFO] [stderr] 1291 | | self.parse_for_of_loop(left, is_await)?, [INFO] [stderr] 1292 | | )); [INFO] [stderr] | |___________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 1290 | Ok(node::Statement::ForOf( [INFO] [stderr] 1291 | self.parse_for_of_loop(left, is_await)?, [INFO] [stderr] 1292 | )) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:1296:25 [INFO] [stderr] | [INFO] [stderr] 1296 | return Ok(node::Statement::For(stmt)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(node::Statement::For(stmt))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:1301:21 [INFO] [stderr] | [INFO] [stderr] 1301 | return Ok(node::Statement::For(stmt)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(node::Statement::For(stmt))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:1316:17 [INFO] [stderr] | [INFO] [stderr] 1316 | / return Ok(node::Statement::ForIn(node::ForInStatement { [INFO] [stderr] 1317 | | left, [INFO] [stderr] 1318 | | right, [INFO] [stderr] 1319 | | body: Box::new(self.parse_loop_body()?), [INFO] [stderr] 1320 | | })); [INFO] [stderr] | |____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 1316 | Ok(node::Statement::ForIn(node::ForInStatement { [INFO] [stderr] 1317 | left, [INFO] [stderr] 1318 | right, [INFO] [stderr] 1319 | body: Box::new(self.parse_loop_body()?), [INFO] [stderr] 1320 | })) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:1327:17 [INFO] [stderr] | [INFO] [stderr] 1327 | / return Ok(node::Statement::ForOf(node::ForOfStatement::new( [INFO] [stderr] 1328 | | left, right, body, is_await, [INFO] [stderr] 1329 | | ))); [INFO] [stderr] | |____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 1327 | Ok(node::Statement::ForOf(node::ForOfStatement::new( [INFO] [stderr] 1328 | left, right, body, is_await, [INFO] [stderr] 1329 | ))) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:1343:17 [INFO] [stderr] | [INFO] [stderr] 1343 | return Ok(node::Statement::For(self.parse_for_loop_cont(Some(init))?)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(node::Statement::For(self.parse_for_loop_cont(Some(init))?))` [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: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:1614:9 [INFO] [stderr] | [INFO] [stderr] 1614 | / if self.context.strict && id.is_restricted() { [INFO] [stderr] 1615 | | if !self.config.tolerant { [INFO] [stderr] 1616 | | return self.unexpected_token_error(&start, "restricted word"); [INFO] [stderr] 1617 | | } [INFO] [stderr] 1618 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [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] 1614 | if self.context.strict && id.is_restricted() && !self.config.tolerant { [INFO] [stderr] 1615 | return self.unexpected_token_error(&start, "restricted word"); [INFO] [stderr] 1616 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:1847:13 [INFO] [stderr] | [INFO] [stderr] 1847 | / if token.is_ident() [INFO] [stderr] 1848 | | && !self.context.has_line_term [INFO] [stderr] 1849 | | && self.at_contextual_keyword("async") [INFO] [stderr] 1850 | | { [INFO] [stderr] ... | [INFO] [stderr] 1856 | | } [INFO] [stderr] 1857 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [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] 1847 | if token.is_ident() [INFO] [stderr] 1848 | && !self.context.has_line_term [INFO] [stderr] 1849 | && self.at_contextual_keyword("async") && !self.look_ahead.token.matches_punct(Punct::Colon) [INFO] [stderr] 1850 | && !self.look_ahead.token.matches_punct(Punct::OpenParen) [INFO] [stderr] 1851 | && !self.look_ahead.token.matches_punct(Punct::Asterisk) { [INFO] [stderr] 1852 | return self.expected_token_error(&self.look_ahead, &[":", "(", "*"]); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:2178:13 [INFO] [stderr] | [INFO] [stderr] 2178 | / if (self.context.is_module || self.context.await) && self.at_keyword(Keyword::Await) { [INFO] [stderr] 2179 | | if !self.config.tolerant { [INFO] [stderr] 2180 | | return self.unexpected_token_error( [INFO] [stderr] 2181 | | &self.look_ahead, [INFO] [stderr] ... | [INFO] [stderr] 2184 | | } [INFO] [stderr] 2185 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [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] 2178 | if (self.context.is_module || self.context.await) && self.at_keyword(Keyword::Await) && !self.config.tolerant { [INFO] [stderr] 2179 | return self.unexpected_token_error( [INFO] [stderr] 2180 | &self.look_ahead, [INFO] [stderr] 2181 | "Modules do not allow 'await' to be used as an identifier", [INFO] [stderr] 2182 | ); [INFO] [stderr] 2183 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/lib.rs:2498:16 [INFO] [stderr] | [INFO] [stderr] 2498 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 2499 | | if let Some(key) = key { [INFO] [stderr] 2500 | | let kind = node::PropertyKind::Init; [INFO] [stderr] 2501 | | if self.at_punct(Punct::Colon) && !is_async { [INFO] [stderr] ... | [INFO] [stderr] 2568 | | } [INFO] [stderr] 2569 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [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] 2498 | } else if let Some(key) = key { [INFO] [stderr] 2499 | let kind = node::PropertyKind::Init; [INFO] [stderr] 2500 | if self.at_punct(Punct::Colon) && !is_async { [INFO] [stderr] 2501 | if !computed && key.matches("__proto__") { [INFO] [stderr] 2502 | if has_proto { [INFO] [stderr] 2503 | let pos = self.get_item_position(&start); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:2951:13 [INFO] [stderr] | [INFO] [stderr] 2951 | return self.parse_yield_expr(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.parse_yield_expr()` [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/lib.rs:3069:13 [INFO] [stderr] | [INFO] [stderr] 3069 | return Ok(current); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(current)` [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: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/lib.rs:3000:20 [INFO] [stderr] | [INFO] [stderr] 3000 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 3001 | | if self.at_assign() { [INFO] [stderr] 3002 | | if !self.context.is_assignment_target { [INFO] [stderr] 3003 | | if !self.config.tolerant { [INFO] [stderr] ... | [INFO] [stderr] 3067 | | } [INFO] [stderr] 3068 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [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] 3000 | } else if self.at_assign() { [INFO] [stderr] 3001 | if !self.context.is_assignment_target { [INFO] [stderr] 3002 | if !self.config.tolerant { [INFO] [stderr] 3003 | return self.unexpected_token_error( [INFO] [stderr] 3004 | &self.look_ahead, [INFO] [stderr] 3005 | "Not at assignment target", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:3002:21 [INFO] [stderr] | [INFO] [stderr] 3002 | / if !self.context.is_assignment_target { [INFO] [stderr] 3003 | | if !self.config.tolerant { [INFO] [stderr] 3004 | | return self.unexpected_token_error( [INFO] [stderr] 3005 | | &self.look_ahead, [INFO] [stderr] ... | [INFO] [stderr] 3008 | | } [INFO] [stderr] 3009 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [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] 3002 | if !self.context.is_assignment_target && !self.config.tolerant { [INFO] [stderr] 3003 | return self.unexpected_token_error( [INFO] [stderr] 3004 | &self.look_ahead, [INFO] [stderr] 3005 | "Not at assignment target", [INFO] [stderr] 3006 | ); [INFO] [stderr] 3007 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:3392:13 [INFO] [stderr] | [INFO] [stderr] 3392 | / if op.token.matches_keyword(Keyword::Delete) && self.context.strict && arg.is_ident() { [INFO] [stderr] 3393 | | if !self.config.tolerant { [INFO] [stderr] 3394 | | return self.unexpected_token_error(&op, "Cannot delete ident in strict mode"); [INFO] [stderr] 3395 | | } [INFO] [stderr] 3396 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [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] 3392 | if op.token.matches_keyword(Keyword::Delete) && self.context.strict && arg.is_ident() && !self.config.tolerant { [INFO] [stderr] 3393 | return self.unexpected_token_error(&op, "Cannot delete ident in strict mode"); [INFO] [stderr] 3394 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:3465:13 [INFO] [stderr] | [INFO] [stderr] 3465 | / if !self.context.has_line_term && self.look_ahead.token.is_punct() { [INFO] [stderr] 3466 | | if self.at_punct(Punct::Increment) || self.at_punct(Punct::Decrement) { [INFO] [stderr] 3467 | | if self.context.strict { [INFO] [stderr] 3468 | | match &expr { [INFO] [stderr] ... | [INFO] [stderr] 3497 | | } [INFO] [stderr] 3498 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [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] 3465 | if !self.context.has_line_term && self.look_ahead.token.is_punct() && (self.at_punct(Punct::Increment) || self.at_punct(Punct::Decrement)) { [INFO] [stderr] 3466 | if self.context.strict { [INFO] [stderr] 3467 | match &expr { [INFO] [stderr] 3468 | &node::Expression::Ident(ref i) => if Self::is_restricted_word(i) { [INFO] [stderr] 3469 | return self.expected_token_error(&start, &[]); [INFO] [stderr] 3470 | }, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:4053:16 [INFO] [stderr] | [INFO] [stderr] 4053 | } else if !self.context.has_line_term { [INFO] [stderr] | ________________^ [INFO] [stderr] 4054 | | if !self.look_ahead.token.is_eof() && !self.at_punct(Punct::CloseBrace) { [INFO] [stderr] 4055 | | return self.expected_token_error(&self.look_ahead, &["eof", "}"]); [INFO] [stderr] 4056 | | } [INFO] [stderr] 4057 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [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] 4053 | } else if !self.context.has_line_term && !self.look_ahead.token.is_eof() && !self.at_punct(Punct::CloseBrace) { [INFO] [stderr] 4054 | return self.expected_token_error(&self.look_ahead, &["eof", "}"]); [INFO] [stderr] 4055 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/lib.rs:611:9 [INFO] [stderr] | [INFO] [stderr] 611 | ret [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/lib.rs:560:19 [INFO] [stderr] | [INFO] [stderr] 560 | let ret = match &tok { [INFO] [stderr] | ___________________^ [INFO] [stderr] 561 | | Token::Keyword(ref k) => match k { [INFO] [stderr] 562 | | &Keyword::Import => { [INFO] [stderr] 563 | | if self.at_import_call() { [INFO] [stderr] ... | [INFO] [stderr] 609 | | } [INFO] [stderr] 610 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:808:17 [INFO] [stderr] | [INFO] [stderr] 808 | / return self.expected_token_error( [INFO] [stderr] 809 | | &self.look_ahead, [INFO] [stderr] 810 | | &["let", "var", "const", "class", "function"], [INFO] [stderr] 811 | | ); [INFO] [stderr] | |__________________^ [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] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 808 | self.expected_token_error( [INFO] [stderr] 809 | &self.look_ahead, [INFO] [stderr] 810 | &["let", "var", "const", "class", "function"], [INFO] [stderr] 811 | ) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:1180:9 [INFO] [stderr] | [INFO] [stderr] 1180 | / if self.context.strict && self.at_keyword(Keyword::Function) { [INFO] [stderr] 1181 | | if !self.config.tolerant { [INFO] [stderr] 1182 | | return self.unexpected_token_error(&self.look_ahead, ""); [INFO] [stderr] 1183 | | } [INFO] [stderr] 1184 | | } [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] 1180 | if self.context.strict && self.at_keyword(Keyword::Function) && !self.config.tolerant { [INFO] [stderr] 1181 | return self.unexpected_token_error(&self.look_ahead, ""); [INFO] [stderr] 1182 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:1230:21 [INFO] [stderr] | [INFO] [stderr] 1230 | return Ok(node::Statement::ForIn(stmt)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(node::Statement::ForIn(stmt))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:1234:21 [INFO] [stderr] | [INFO] [stderr] 1234 | return Ok(node::Statement::ForOf(stmt)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(node::Statement::ForOf(stmt))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:1238:21 [INFO] [stderr] | [INFO] [stderr] 1238 | return Ok(node::Statement::For(stmt)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(node::Statement::For(stmt))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:1243:17 [INFO] [stderr] | [INFO] [stderr] 1243 | return Ok(node::Statement::For(stmt)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(node::Statement::For(stmt))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:1283:25 [INFO] [stderr] | [INFO] [stderr] 1283 | / return Ok(node::Statement::ForIn(node::ForInStatement { [INFO] [stderr] 1284 | | left, [INFO] [stderr] 1285 | | right, [INFO] [stderr] 1286 | | body: Box::new(self.parse_loop_body()?), [INFO] [stderr] 1287 | | })); [INFO] [stderr] | |____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 1283 | Ok(node::Statement::ForIn(node::ForInStatement { [INFO] [stderr] 1284 | left, [INFO] [stderr] 1285 | right, [INFO] [stderr] 1286 | body: Box::new(self.parse_loop_body()?), [INFO] [stderr] 1287 | })) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:1290:25 [INFO] [stderr] | [INFO] [stderr] 1290 | / return Ok(node::Statement::ForOf( [INFO] [stderr] 1291 | | self.parse_for_of_loop(left, is_await)?, [INFO] [stderr] 1292 | | )); [INFO] [stderr] | |___________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 1290 | Ok(node::Statement::ForOf( [INFO] [stderr] 1291 | self.parse_for_of_loop(left, is_await)?, [INFO] [stderr] 1292 | )) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:1296:25 [INFO] [stderr] | [INFO] [stderr] 1296 | return Ok(node::Statement::For(stmt)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(node::Statement::For(stmt))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:1301:21 [INFO] [stderr] | [INFO] [stderr] 1301 | return Ok(node::Statement::For(stmt)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(node::Statement::For(stmt))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:1316:17 [INFO] [stderr] | [INFO] [stderr] 1316 | / return Ok(node::Statement::ForIn(node::ForInStatement { [INFO] [stderr] 1317 | | left, [INFO] [stderr] 1318 | | right, [INFO] [stderr] 1319 | | body: Box::new(self.parse_loop_body()?), [INFO] [stderr] 1320 | | })); [INFO] [stderr] | |____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 1316 | Ok(node::Statement::ForIn(node::ForInStatement { [INFO] [stderr] 1317 | left, [INFO] [stderr] 1318 | right, [INFO] [stderr] 1319 | body: Box::new(self.parse_loop_body()?), [INFO] [stderr] 1320 | })) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:1327:17 [INFO] [stderr] | [INFO] [stderr] 1327 | / return Ok(node::Statement::ForOf(node::ForOfStatement::new( [INFO] [stderr] 1328 | | left, right, body, is_await, [INFO] [stderr] 1329 | | ))); [INFO] [stderr] | |____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 1327 | Ok(node::Statement::ForOf(node::ForOfStatement::new( [INFO] [stderr] 1328 | left, right, body, is_await, [INFO] [stderr] 1329 | ))) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:1343:17 [INFO] [stderr] | [INFO] [stderr] 1343 | return Ok(node::Statement::For(self.parse_for_loop_cont(Some(init))?)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(node::Statement::For(self.parse_for_loop_cont(Some(init))?))` [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: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:1614:9 [INFO] [stderr] | [INFO] [stderr] 1614 | / if self.context.strict && id.is_restricted() { [INFO] [stderr] 1615 | | if !self.config.tolerant { [INFO] [stderr] 1616 | | return self.unexpected_token_error(&start, "restricted word"); [INFO] [stderr] 1617 | | } [INFO] [stderr] 1618 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [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] 1614 | if self.context.strict && id.is_restricted() && !self.config.tolerant { [INFO] [stderr] 1615 | return self.unexpected_token_error(&start, "restricted word"); [INFO] [stderr] 1616 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:1847:13 [INFO] [stderr] | [INFO] [stderr] 1847 | / if token.is_ident() [INFO] [stderr] 1848 | | && !self.context.has_line_term [INFO] [stderr] 1849 | | && self.at_contextual_keyword("async") [INFO] [stderr] 1850 | | { [INFO] [stderr] ... | [INFO] [stderr] 1856 | | } [INFO] [stderr] 1857 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [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] 1847 | if token.is_ident() [INFO] [stderr] 1848 | && !self.context.has_line_term [INFO] [stderr] 1849 | && self.at_contextual_keyword("async") && !self.look_ahead.token.matches_punct(Punct::Colon) [INFO] [stderr] 1850 | && !self.look_ahead.token.matches_punct(Punct::OpenParen) [INFO] [stderr] 1851 | && !self.look_ahead.token.matches_punct(Punct::Asterisk) { [INFO] [stderr] 1852 | return self.expected_token_error(&self.look_ahead, &[":", "(", "*"]); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:2178:13 [INFO] [stderr] | [INFO] [stderr] 2178 | / if (self.context.is_module || self.context.await) && self.at_keyword(Keyword::Await) { [INFO] [stderr] 2179 | | if !self.config.tolerant { [INFO] [stderr] 2180 | | return self.unexpected_token_error( [INFO] [stderr] 2181 | | &self.look_ahead, [INFO] [stderr] ... | [INFO] [stderr] 2184 | | } [INFO] [stderr] 2185 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [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] 2178 | if (self.context.is_module || self.context.await) && self.at_keyword(Keyword::Await) && !self.config.tolerant { [INFO] [stderr] 2179 | return self.unexpected_token_error( [INFO] [stderr] 2180 | &self.look_ahead, [INFO] [stderr] 2181 | "Modules do not allow 'await' to be used as an identifier", [INFO] [stderr] 2182 | ); [INFO] [stderr] 2183 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/lib.rs:2498:16 [INFO] [stderr] | [INFO] [stderr] 2498 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 2499 | | if let Some(key) = key { [INFO] [stderr] 2500 | | let kind = node::PropertyKind::Init; [INFO] [stderr] 2501 | | if self.at_punct(Punct::Colon) && !is_async { [INFO] [stderr] ... | [INFO] [stderr] 2568 | | } [INFO] [stderr] 2569 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [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] 2498 | } else if let Some(key) = key { [INFO] [stderr] 2499 | let kind = node::PropertyKind::Init; [INFO] [stderr] 2500 | if self.at_punct(Punct::Colon) && !is_async { [INFO] [stderr] 2501 | if !computed && key.matches("__proto__") { [INFO] [stderr] 2502 | if has_proto { [INFO] [stderr] 2503 | let pos = self.get_item_position(&start); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:2951:13 [INFO] [stderr] | [INFO] [stderr] 2951 | return self.parse_yield_expr(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.parse_yield_expr()` [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/lib.rs:3069:13 [INFO] [stderr] | [INFO] [stderr] 3069 | return Ok(current); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(current)` [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: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/lib.rs:3000:20 [INFO] [stderr] | [INFO] [stderr] 3000 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 3001 | | if self.at_assign() { [INFO] [stderr] 3002 | | if !self.context.is_assignment_target { [INFO] [stderr] 3003 | | if !self.config.tolerant { [INFO] [stderr] ... | [INFO] [stderr] 3067 | | } [INFO] [stderr] 3068 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [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] 3000 | } else if self.at_assign() { [INFO] [stderr] 3001 | if !self.context.is_assignment_target { [INFO] [stderr] 3002 | if !self.config.tolerant { [INFO] [stderr] 3003 | return self.unexpected_token_error( [INFO] [stderr] 3004 | &self.look_ahead, [INFO] [stderr] 3005 | "Not at assignment target", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:3002:21 [INFO] [stderr] | [INFO] [stderr] 3002 | / if !self.context.is_assignment_target { [INFO] [stderr] 3003 | | if !self.config.tolerant { [INFO] [stderr] 3004 | | return self.unexpected_token_error( [INFO] [stderr] 3005 | | &self.look_ahead, [INFO] [stderr] ... | [INFO] [stderr] 3008 | | } [INFO] [stderr] 3009 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [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] 3002 | if !self.context.is_assignment_target && !self.config.tolerant { [INFO] [stderr] 3003 | return self.unexpected_token_error( [INFO] [stderr] 3004 | &self.look_ahead, [INFO] [stderr] 3005 | "Not at assignment target", [INFO] [stderr] 3006 | ); [INFO] [stderr] 3007 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:3392:13 [INFO] [stderr] | [INFO] [stderr] 3392 | / if op.token.matches_keyword(Keyword::Delete) && self.context.strict && arg.is_ident() { [INFO] [stderr] 3393 | | if !self.config.tolerant { [INFO] [stderr] 3394 | | return self.unexpected_token_error(&op, "Cannot delete ident in strict mode"); [INFO] [stderr] 3395 | | } [INFO] [stderr] 3396 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [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] 3392 | if op.token.matches_keyword(Keyword::Delete) && self.context.strict && arg.is_ident() && !self.config.tolerant { [INFO] [stderr] 3393 | return self.unexpected_token_error(&op, "Cannot delete ident in strict mode"); [INFO] [stderr] 3394 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:3465:13 [INFO] [stderr] | [INFO] [stderr] 3465 | / if !self.context.has_line_term && self.look_ahead.token.is_punct() { [INFO] [stderr] 3466 | | if self.at_punct(Punct::Increment) || self.at_punct(Punct::Decrement) { [INFO] [stderr] 3467 | | if self.context.strict { [INFO] [stderr] 3468 | | match &expr { [INFO] [stderr] ... | [INFO] [stderr] 3497 | | } [INFO] [stderr] 3498 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [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] 3465 | if !self.context.has_line_term && self.look_ahead.token.is_punct() && (self.at_punct(Punct::Increment) || self.at_punct(Punct::Decrement)) { [INFO] [stderr] 3466 | if self.context.strict { [INFO] [stderr] 3467 | match &expr { [INFO] [stderr] 3468 | &node::Expression::Ident(ref i) => if Self::is_restricted_word(i) { [INFO] [stderr] 3469 | return self.expected_token_error(&start, &[]); [INFO] [stderr] 3470 | }, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:4053:16 [INFO] [stderr] | [INFO] [stderr] 4053 | } else if !self.context.has_line_term { [INFO] [stderr] | ________________^ [INFO] [stderr] 4054 | | if !self.look_ahead.token.is_eof() && !self.at_punct(Punct::CloseBrace) { [INFO] [stderr] 4055 | | return self.expected_token_error(&self.look_ahead, &["eof", "}"]); [INFO] [stderr] 4056 | | } [INFO] [stderr] 4057 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [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] 4053 | } else if !self.context.has_line_term && !self.look_ahead.token.is_eof() && !self.at_punct(Punct::CloseBrace) { [INFO] [stderr] 4054 | return self.expected_token_error(&self.look_ahead, &["eof", "}"]); [INFO] [stderr] 4055 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/node.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | Statement(Statement), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::large_enum_variant)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] | [INFO] [stderr] 30 | Statement(Box), [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/node.rs:62:5 [INFO] [stderr] | [INFO] [stderr] 62 | Statement(Statement), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] | [INFO] [stderr] 62 | Statement(Box), [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/node.rs:410:5 [INFO] [stderr] | [INFO] [stderr] 410 | For(ForStatement), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] | [INFO] [stderr] 410 | For(Box), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/node.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | Statement(Statement), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::large_enum_variant)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] | [INFO] [stderr] 30 | Statement(Box), [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/node.rs:62:5 [INFO] [stderr] | [INFO] [stderr] 62 | Statement(Statement), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] | [INFO] [stderr] 62 | Statement(Box), [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/node.rs:410:5 [INFO] [stderr] | [INFO] [stderr] 410 | For(ForStatement), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] | [INFO] [stderr] 410 | For(Box), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/node.rs:838:9 [INFO] [stderr] | [INFO] [stderr] 838 | / match self { [INFO] [stderr] 839 | | &Expression::Ident(_) => true, [INFO] [stderr] 840 | | _ => false, [INFO] [stderr] 841 | | } [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] 838 | match *self { [INFO] [stderr] 839 | Expression::Ident(_) => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/node.rs:845:9 [INFO] [stderr] | [INFO] [stderr] 845 | / match self { [INFO] [stderr] 846 | | &Expression::Unary(_) => true, [INFO] [stderr] 847 | | _ => false, [INFO] [stderr] 848 | | } [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] 845 | match *self { [INFO] [stderr] 846 | Expression::Unary(_) => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/node.rs:852:9 [INFO] [stderr] | [INFO] [stderr] 852 | / match self { [INFO] [stderr] 853 | | &Expression::ArrowParamPlaceHolder(_, _) => true, [INFO] [stderr] 854 | | _ => false, [INFO] [stderr] 855 | | } [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] 852 | match *self { [INFO] [stderr] 853 | Expression::ArrowParamPlaceHolder(_, _) => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/node.rs:859:9 [INFO] [stderr] | [INFO] [stderr] 859 | / match self { [INFO] [stderr] 860 | | &Expression::Function(ref f) => f.is_async, [INFO] [stderr] 861 | | &Expression::ArrowFunction(ref f) => f.is_async, [INFO] [stderr] 862 | | &Expression::ArrowParamPlaceHolder(_, b) => b, [INFO] [stderr] 863 | | _ => false, [INFO] [stderr] 864 | | } [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] 859 | match *self { [INFO] [stderr] 860 | Expression::Function(ref f) => f.is_async, [INFO] [stderr] 861 | Expression::ArrowFunction(ref f) => f.is_async, [INFO] [stderr] 862 | Expression::ArrowParamPlaceHolder(_, b) => b, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: methods called `as_*` usually take self by reference or self by mutable reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/node.rs:874:21 [INFO] [stderr] | [INFO] [stderr] 874 | pub fn as_ident(self) -> Option { [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/node.rs:1373:26 [INFO] [stderr] | [INFO] [stderr] 1373 | pub fn from_punct(p: &ress::Punct) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^ help: consider passing by value instead: `ress::Punct` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/node.rs:838:9 [INFO] [stderr] | [INFO] [stderr] 838 | / match self { [INFO] [stderr] 839 | | &Expression::Ident(_) => true, [INFO] [stderr] 840 | | _ => false, [INFO] [stderr] 841 | | } [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] 838 | match *self { [INFO] [stderr] 839 | Expression::Ident(_) => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/node.rs:845:9 [INFO] [stderr] | [INFO] [stderr] 845 | / match self { [INFO] [stderr] 846 | | &Expression::Unary(_) => true, [INFO] [stderr] 847 | | _ => false, [INFO] [stderr] 848 | | } [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] 845 | match *self { [INFO] [stderr] 846 | Expression::Unary(_) => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/node.rs:852:9 [INFO] [stderr] | [INFO] [stderr] 852 | / match self { [INFO] [stderr] 853 | | &Expression::ArrowParamPlaceHolder(_, _) => true, [INFO] [stderr] 854 | | _ => false, [INFO] [stderr] 855 | | } [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] 852 | match *self { [INFO] [stderr] 853 | Expression::ArrowParamPlaceHolder(_, _) => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/node.rs:859:9 [INFO] [stderr] | [INFO] [stderr] 859 | / match self { [INFO] [stderr] 860 | | &Expression::Function(ref f) => f.is_async, [INFO] [stderr] 861 | | &Expression::ArrowFunction(ref f) => f.is_async, [INFO] [stderr] 862 | | &Expression::ArrowParamPlaceHolder(_, b) => b, [INFO] [stderr] 863 | | _ => false, [INFO] [stderr] 864 | | } [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] 859 | match *self { [INFO] [stderr] 860 | Expression::Function(ref f) => f.is_async, [INFO] [stderr] 861 | Expression::ArrowFunction(ref f) => f.is_async, [INFO] [stderr] 862 | Expression::ArrowParamPlaceHolder(_, b) => b, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: methods called `as_*` usually take self by reference or self by mutable reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/node.rs:874:21 [INFO] [stderr] | [INFO] [stderr] 874 | pub fn as_ident(self) -> Option { [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: you should consider deriving a `Default` implementation for `Builder` [INFO] [stderr] --> src/lib.rs:210:5 [INFO] [stderr] | [INFO] [stderr] 210 | / pub fn new() -> Self { [INFO] [stderr] 211 | | Self { [INFO] [stderr] 212 | | tolerant: false, [INFO] [stderr] 213 | | is_module: false, [INFO] [stderr] 214 | | js: String::new(), [INFO] [stderr] 215 | | } [INFO] [stderr] 216 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 203 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: struct update has no effect, all the fields in the struct have already been specified [INFO] [stderr] --> src/lib.rs:420:15 [INFO] [stderr] | [INFO] [stderr] 420 | ..Default::default() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_update)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_update [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/node.rs:1373:26 [INFO] [stderr] | [INFO] [stderr] 1373 | pub fn from_punct(p: &ress::Punct) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^ help: consider passing by value instead: `ress::Punct` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:561:38 [INFO] [stderr] | [INFO] [stderr] 561 | Token::Keyword(ref k) => match k { [INFO] [stderr] | ______________________________________^ [INFO] [stderr] 562 | | &Keyword::Import => { [INFO] [stderr] 563 | | if self.at_import_call() { [INFO] [stderr] 564 | | let stmt = self.parse_statement()?; [INFO] [stderr] ... | [INFO] [stderr] 604 | | } [INFO] [stderr] 605 | | }, [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] 561 | Token::Keyword(ref k) => match *k { [INFO] [stderr] 562 | Keyword::Import => { [INFO] [stderr] 563 | if self.at_import_call() { [INFO] [stderr] 564 | let stmt = self.parse_statement()?; [INFO] [stderr] 565 | Ok(node::ProgramPart::Statement(stmt)) [INFO] [stderr] 566 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `Builder` [INFO] [stderr] --> src/lib.rs:210:5 [INFO] [stderr] | [INFO] [stderr] 210 | / pub fn new() -> Self { [INFO] [stderr] 211 | | Self { [INFO] [stderr] 212 | | tolerant: false, [INFO] [stderr] 213 | | is_module: false, [INFO] [stderr] 214 | | js: String::new(), [INFO] [stderr] 215 | | } [INFO] [stderr] 216 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 203 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/lib.rs:942:17 [INFO] [stderr] | [INFO] [stderr] 942 | let _ = self.expected_token_error(&self.look_ahead, &[")"])?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_unit_value)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: struct update has no effect, all the fields in the struct have already been specified [INFO] [stderr] --> src/lib.rs:420:15 [INFO] [stderr] | [INFO] [stderr] 420 | ..Default::default() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_update)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_update [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:561:38 [INFO] [stderr] | [INFO] [stderr] 561 | Token::Keyword(ref k) => match k { [INFO] [stderr] | ______________________________________^ [INFO] [stderr] 562 | | &Keyword::Import => { [INFO] [stderr] 563 | | if self.at_import_call() { [INFO] [stderr] 564 | | let stmt = self.parse_statement()?; [INFO] [stderr] ... | [INFO] [stderr] 604 | | } [INFO] [stderr] 605 | | }, [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] 561 | Token::Keyword(ref k) => match *k { [INFO] [stderr] 562 | Keyword::Import => { [INFO] [stderr] 563 | if self.at_import_call() { [INFO] [stderr] 564 | let stmt = self.parse_statement()?; [INFO] [stderr] 565 | Ok(node::ProgramPart::Statement(stmt)) [INFO] [stderr] 566 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/lib.rs:942:17 [INFO] [stderr] | [INFO] [stderr] 942 | let _ = self.expected_token_error(&self.look_ahead, &[")"])?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_unit_value)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:1575:20 [INFO] [stderr] | [INFO] [stderr] 1575 | let kind = match &next.token { [INFO] [stderr] | ____________________^ [INFO] [stderr] 1576 | | &Token::Keyword(ref k) => match k { [INFO] [stderr] 1577 | | Keyword::Let => node::VariableKind::Let, [INFO] [stderr] 1578 | | Keyword::Const => node::VariableKind::Const, [INFO] [stderr] ... | [INFO] [stderr] 1581 | | _ => return self.expected_token_error(&next, &["let", "const"]), [INFO] [stderr] 1582 | | }; [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: try [INFO] [stderr] | [INFO] [stderr] 1575 | let kind = match next.token { [INFO] [stderr] 1576 | Token::Keyword(ref k) => match k { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/lib.rs:1697:60 [INFO] [stderr] | [INFO] [stderr] 1697 | } else if start.token.is_strict_reserved() { [INFO] [stderr] | ____________________________________________________________^ [INFO] [stderr] 1698 | | Some(start) [INFO] [stderr] 1699 | | } else { [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> src/lib.rs:1695:48 [INFO] [stderr] | [INFO] [stderr] 1695 | if start.token.is_restricted() { [INFO] [stderr] | ________________________________________________^ [INFO] [stderr] 1696 | | Some(start) [INFO] [stderr] 1697 | | } else if start.token.is_strict_reserved() { [INFO] [stderr] | |_________________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:1575:20 [INFO] [stderr] | [INFO] [stderr] 1575 | let kind = match &next.token { [INFO] [stderr] | ____________________^ [INFO] [stderr] 1576 | | &Token::Keyword(ref k) => match k { [INFO] [stderr] 1577 | | Keyword::Let => node::VariableKind::Let, [INFO] [stderr] 1578 | | Keyword::Const => node::VariableKind::Const, [INFO] [stderr] ... | [INFO] [stderr] 1581 | | _ => return self.expected_token_error(&next, &["let", "const"]), [INFO] [stderr] 1582 | | }; [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: try [INFO] [stderr] | [INFO] [stderr] 1575 | let kind = match next.token { [INFO] [stderr] 1576 | Token::Keyword(ref k) => match k { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/lib.rs:1697:60 [INFO] [stderr] | [INFO] [stderr] 1697 | } else if start.token.is_strict_reserved() { [INFO] [stderr] | ____________________________________________________________^ [INFO] [stderr] 1698 | | Some(start) [INFO] [stderr] 1699 | | } else { [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> src/lib.rs:1695:48 [INFO] [stderr] | [INFO] [stderr] 1695 | if start.token.is_restricted() { [INFO] [stderr] | ________________________________________________^ [INFO] [stderr] 1696 | | Some(start) [INFO] [stderr] 1697 | | } else if start.token.is_strict_reserved() { [INFO] [stderr] | |_________________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:2025:12 [INFO] [stderr] | [INFO] [stderr] 2025 | if formal_params.params.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!formal_params.params.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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:2132:18 [INFO] [stderr] | [INFO] [stderr] 2132 | .ok_or(self.reinterpret_error("number or string", "literal"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| self.reinterpret_error("number or string", "literal"))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:2025:12 [INFO] [stderr] | [INFO] [stderr] 2025 | if formal_params.params.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!formal_params.params.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: use of `unwrap_or` followed by a call to `new` [INFO] [stderr] --> src/lib.rs:2237:28 [INFO] [stderr] | [INFO] [stderr] 2237 | flags: ex.flags.unwrap_or(String::new()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ex.flags.unwrap_or_default()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/lib.rs:2327:42 [INFO] [stderr] | [INFO] [stderr] 2327 | .map(|e| node::FunctionArg::Expr(e)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `node::FunctionArg::Expr` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/lib.rs:2338:38 [INFO] [stderr] | [INFO] [stderr] 2338 | .map(|e| node::FunctionArg::Expr(e)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `node::FunctionArg::Expr` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/lib.rs:2370:34 [INFO] [stderr] | [INFO] [stderr] 2370 | .map(|e| node::FunctionArg::Expr(e)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `node::FunctionArg::Expr` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:2132:18 [INFO] [stderr] | [INFO] [stderr] 2132 | .ok_or(self.reinterpret_error("number or string", "literal"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| self.reinterpret_error("number or string", "literal"))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a call to `new` [INFO] [stderr] --> src/lib.rs:2237:28 [INFO] [stderr] | [INFO] [stderr] 2237 | flags: ex.flags.unwrap_or(String::new()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ex.flags.unwrap_or_default()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/lib.rs:2327:42 [INFO] [stderr] | [INFO] [stderr] 2327 | .map(|e| node::FunctionArg::Expr(e)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `node::FunctionArg::Expr` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/lib.rs:2338:38 [INFO] [stderr] | [INFO] [stderr] 2338 | .map(|e| node::FunctionArg::Expr(e)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `node::FunctionArg::Expr` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/lib.rs:2370:34 [INFO] [stderr] | [INFO] [stderr] 2370 | .map(|e| node::FunctionArg::Expr(e)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `node::FunctionArg::Expr` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:2720:9 [INFO] [stderr] | [INFO] [stderr] 2720 | / match &ident.token { [INFO] [stderr] 2721 | | &Token::Ident(ref i) => Ok(i.to_string()), [INFO] [stderr] 2722 | | &Token::Keyword(ref k) => Ok(k.to_string()), [INFO] [stderr] 2723 | | _ => self.expected_token_error(&ident, &["variable identifier"]), [INFO] [stderr] 2724 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 2720 | match ident.token { [INFO] [stderr] 2721 | Token::Ident(ref i) => Ok(i.to_string()), [INFO] [stderr] 2722 | Token::Keyword(ref k) => Ok(k.to_string()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:2720:9 [INFO] [stderr] | [INFO] [stderr] 2720 | / match &ident.token { [INFO] [stderr] 2721 | | &Token::Ident(ref i) => Ok(i.to_string()), [INFO] [stderr] 2722 | | &Token::Keyword(ref k) => Ok(k.to_string()), [INFO] [stderr] 2723 | | _ => self.expected_token_error(&ident, &["variable identifier"]), [INFO] [stderr] 2724 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 2720 | match ident.token { [INFO] [stderr] 2721 | Token::Ident(ref i) => Ok(i.to_string()), [INFO] [stderr] 2722 | Token::Keyword(ref k) => Ok(k.to_string()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:3034:30 [INFO] [stderr] | [INFO] [stderr] 3034 | let op = match &item.token { [INFO] [stderr] | ______________________________^ [INFO] [stderr] 3035 | | &Token::Punct(ref p) => { [INFO] [stderr] 3036 | | if let Some(op) = node::AssignmentOperator::from_punct(p) { [INFO] [stderr] 3037 | | op [INFO] [stderr] ... | [INFO] [stderr] 3056 | | } [INFO] [stderr] 3057 | | }; [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: try [INFO] [stderr] | [INFO] [stderr] 3034 | let op = match item.token { [INFO] [stderr] 3035 | Token::Punct(ref p) => { [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/lib.rs:3090:62 [INFO] [stderr] | [INFO] [stderr] 3090 | node::FunctionArg::Pattern(ref p) => match p { [INFO] [stderr] | ______________________________________________________________^ [INFO] [stderr] 3091 | | node::Pattern::Assignment(ref a) => match &*a.right { [INFO] [stderr] 3092 | | node::Expression::Yield(ref y) => if y.argument.is_some() { [INFO] [stderr] 3093 | | invalid_param = true; [INFO] [stderr] ... | [INFO] [stderr] 3101 | | _ => (), [INFO] [stderr] 3102 | | }, [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] 3090 | node::FunctionArg::Pattern(ref p) => if let node::Pattern::Assignment(ref a) = p { match &*a.right { [INFO] [stderr] 3091 | node::Expression::Yield(ref y) => if y.argument.is_some() { [INFO] [stderr] 3092 | invalid_param = true; [INFO] [stderr] 3093 | } else { [INFO] [stderr] 3094 | return node::FunctionArg::Pattern(node::Pattern::Identifier( [INFO] [stderr] 3095 | "yield".to_owned(), [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/lib.rs:3091:65 [INFO] [stderr] | [INFO] [stderr] 3091 | node::Pattern::Assignment(ref a) => match &*a.right { [INFO] [stderr] | _________________________________________________________________^ [INFO] [stderr] 3092 | | node::Expression::Yield(ref y) => if y.argument.is_some() { [INFO] [stderr] 3093 | | invalid_param = true; [INFO] [stderr] 3094 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 3099 | | _ => (), [INFO] [stderr] 3100 | | }, [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 3091 | node::Pattern::Assignment(ref a) => if let node::Expression::Yield(ref y) = &*a.right { if y.argument.is_some() { [INFO] [stderr] 3092 | invalid_param = true; [INFO] [stderr] 3093 | } else { [INFO] [stderr] 3094 | return node::FunctionArg::Pattern(node::Pattern::Identifier( [INFO] [stderr] 3095 | "yield".to_owned(), [INFO] [stderr] 3096 | )); [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/lib.rs:3103:59 [INFO] [stderr] | [INFO] [stderr] 3103 | node::FunctionArg::Expr(ref e) => match e { [INFO] [stderr] | ___________________________________________________________^ [INFO] [stderr] 3104 | | node::Expression::Assignment(ref a) => match &*a.right { [INFO] [stderr] 3105 | | node::Expression::Yield(ref y) => if y.argument.is_some() { [INFO] [stderr] 3106 | | invalid_param = true; [INFO] [stderr] ... | [INFO] [stderr] 3114 | | _ => (), [INFO] [stderr] 3115 | | }, [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 3103 | node::FunctionArg::Expr(ref e) => if let node::Expression::Assignment(ref a) = e { match &*a.right { [INFO] [stderr] 3104 | node::Expression::Yield(ref y) => if y.argument.is_some() { [INFO] [stderr] 3105 | invalid_param = true; [INFO] [stderr] 3106 | } else { [INFO] [stderr] 3107 | return node::FunctionArg::Expr(node::Expression::Ident( [INFO] [stderr] 3108 | "yield".to_owned(), [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/lib.rs:3104:68 [INFO] [stderr] | [INFO] [stderr] 3104 | node::Expression::Assignment(ref a) => match &*a.right { [INFO] [stderr] | ____________________________________________________________________^ [INFO] [stderr] 3105 | | node::Expression::Yield(ref y) => if y.argument.is_some() { [INFO] [stderr] 3106 | | invalid_param = true; [INFO] [stderr] 3107 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 3112 | | _ => (), [INFO] [stderr] 3113 | | }, [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 3104 | node::Expression::Assignment(ref a) => if let node::Expression::Yield(ref y) = &*a.right { if y.argument.is_some() { [INFO] [stderr] 3105 | invalid_param = true; [INFO] [stderr] 3106 | } else { [INFO] [stderr] 3107 | return node::FunctionArg::Expr(node::Expression::Ident( [INFO] [stderr] 3108 | "yield".to_owned(), [INFO] [stderr] 3109 | )); [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/lib.rs:3133:17 [INFO] [stderr] | [INFO] [stderr] 3133 | / match param { [INFO] [stderr] 3134 | | node::FunctionArg::Expr(ref e) => match e { [INFO] [stderr] 3135 | | node::Expression::Yield(_) => { [INFO] [stderr] 3136 | | return self.expected_token_error( [INFO] [stderr] ... | [INFO] [stderr] 3143 | | _ => (), [INFO] [stderr] 3144 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 3133 | if let node::FunctionArg::Expr(ref e) = param { match e { [INFO] [stderr] 3134 | node::Expression::Yield(_) => { [INFO] [stderr] 3135 | return self.expected_token_error( [INFO] [stderr] 3136 | &self.look_ahead, [INFO] [stderr] 3137 | &["not a yield expression in a function param"], [INFO] [stderr] 3138 | ) [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/lib.rs:3134:55 [INFO] [stderr] | [INFO] [stderr] 3134 | node::FunctionArg::Expr(ref e) => match e { [INFO] [stderr] | _______________________________________________________^ [INFO] [stderr] 3135 | | node::Expression::Yield(_) => { [INFO] [stderr] 3136 | | return self.expected_token_error( [INFO] [stderr] 3137 | | &self.look_ahead, [INFO] [stderr] ... | [INFO] [stderr] 3141 | | _ => (), [INFO] [stderr] 3142 | | }, [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 3134 | node::FunctionArg::Expr(ref e) => if let node::Expression::Yield(_) = e { [INFO] [stderr] 3135 | return self.expected_token_error( [INFO] [stderr] 3136 | &self.look_ahead, [INFO] [stderr] 3137 | &["not a yield expression in a function param"], [INFO] [stderr] 3138 | ) [INFO] [stderr] 3139 | }, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false [INFO] [stderr] --> src/lib.rs:3280:20 [INFO] [stderr] | [INFO] [stderr] 3280 | if prec <= 0 { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::absurd_extreme_comparisons)] on by default [INFO] [stderr] = help: because 0 is the minimum value for this type, the case where the two sides are not equal never occurs, consider using prec == 0 instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:3284:42 [INFO] [stderr] | [INFO] [stderr] 3284 | while stack.len() > 1 && ops.len() > 0 && prec <= precs[precs.len() - 1] { [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!ops.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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3287:26 [INFO] [stderr] | [INFO] [stderr] 3287 | .ok_or(self.op_error("invalid binary operation, no right expr in stack"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| self.op_error("invalid binary operation, no right expr in stack"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3291:26 [INFO] [stderr] | [INFO] [stderr] 3291 | .ok_or(self.op_error("invalid binary operation, too few operators"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| self.op_error("invalid binary operation, too few operators"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3295:26 [INFO] [stderr] | [INFO] [stderr] 3295 | .ok_or(self.op_error("invalid binary operation, no left expr in stack"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| self.op_error("invalid binary operation, no left expr in stack"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3300:34 [INFO] [stderr] | [INFO] [stderr] 3300 | .ok_or(self.op_error("Unable to convert logical operator"))?, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| self.op_error("Unable to convert logical operator"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3306:30 [INFO] [stderr] | [INFO] [stderr] 3306 | .ok_or(self.op_error("Unable to convert binary operator"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| self.op_error("Unable to convert binary operator"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:3034:30 [INFO] [stderr] | [INFO] [stderr] 3034 | let op = match &item.token { [INFO] [stderr] | ______________________________^ [INFO] [stderr] 3035 | | &Token::Punct(ref p) => { [INFO] [stderr] 3036 | | if let Some(op) = node::AssignmentOperator::from_punct(p) { [INFO] [stderr] 3037 | | op [INFO] [stderr] ... | [INFO] [stderr] 3056 | | } [INFO] [stderr] 3057 | | }; [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: try [INFO] [stderr] | [INFO] [stderr] 3034 | let op = match item.token { [INFO] [stderr] 3035 | Token::Punct(ref p) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3323:18 [INFO] [stderr] | [INFO] [stderr] 3323 | .ok_or(self.op_error("invalid binary operation, too few expressions"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| self.op_error("invalid binary operation, too few expressions"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:3325:19 [INFO] [stderr] | [INFO] [stderr] 3325 | while ops.len() > 0 && stack.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!ops.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:3325:36 [INFO] [stderr] | [INFO] [stderr] 3325 | while ops.len() > 0 && stack.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!stack.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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3328:22 [INFO] [stderr] | [INFO] [stderr] 3328 | .ok_or(self.op_error("invalid binary operation, too few operators"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| self.op_error("invalid binary operation, too few operators"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3331:26 [INFO] [stderr] | [INFO] [stderr] 3331 | .ok_or(self.op_error("Unable to convert logical operator"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| self.op_error("Unable to convert logical operator"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3334:52 [INFO] [stderr] | [INFO] [stderr] 3334 | left: Box::new(stack.pop().ok_or( [INFO] [stderr] | ____________________________________________________^ [INFO] [stderr] 3335 | | self.op_error("invalid logical operation, too few expressions"), [INFO] [stderr] 3336 | | )?), [INFO] [stderr] | |_________________________^ help: try this: `ok_or_else(|| self.op_error("invalid logical operation, too few expressions"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3341:26 [INFO] [stderr] | [INFO] [stderr] 3341 | .ok_or(self.op_error("Unable to convert binary operator"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| self.op_error("Unable to convert binary operator"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3344:52 [INFO] [stderr] | [INFO] [stderr] 3344 | left: Box::new(stack.pop().ok_or( [INFO] [stderr] | ____________________________________________________^ [INFO] [stderr] 3345 | | self.op_error("invalid binary operation, too few expressions"), [INFO] [stderr] 3346 | | )?), [INFO] [stderr] | |_________________________^ help: try this: `ok_or_else(|| self.op_error("invalid binary operation, too few expressions"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [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/lib.rs:3090:62 [INFO] [stderr] | [INFO] [stderr] 3090 | node::FunctionArg::Pattern(ref p) => match p { [INFO] [stderr] | ______________________________________________________________^ [INFO] [stderr] 3091 | | node::Pattern::Assignment(ref a) => match &*a.right { [INFO] [stderr] 3092 | | node::Expression::Yield(ref y) => if y.argument.is_some() { [INFO] [stderr] 3093 | | invalid_param = true; [INFO] [stderr] ... | [INFO] [stderr] 3101 | | _ => (), [INFO] [stderr] 3102 | | }, [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] 3090 | node::FunctionArg::Pattern(ref p) => if let node::Pattern::Assignment(ref a) = p { match &*a.right { [INFO] [stderr] 3091 | node::Expression::Yield(ref y) => if y.argument.is_some() { [INFO] [stderr] 3092 | invalid_param = true; [INFO] [stderr] 3093 | } else { [INFO] [stderr] 3094 | return node::FunctionArg::Pattern(node::Pattern::Identifier( [INFO] [stderr] 3095 | "yield".to_owned(), [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/lib.rs:3091:65 [INFO] [stderr] | [INFO] [stderr] 3091 | node::Pattern::Assignment(ref a) => match &*a.right { [INFO] [stderr] | _________________________________________________________________^ [INFO] [stderr] 3092 | | node::Expression::Yield(ref y) => if y.argument.is_some() { [INFO] [stderr] 3093 | | invalid_param = true; [INFO] [stderr] 3094 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 3099 | | _ => (), [INFO] [stderr] 3100 | | }, [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 3091 | node::Pattern::Assignment(ref a) => if let node::Expression::Yield(ref y) = &*a.right { if y.argument.is_some() { [INFO] [stderr] 3092 | invalid_param = true; [INFO] [stderr] 3093 | } else { [INFO] [stderr] 3094 | return node::FunctionArg::Pattern(node::Pattern::Identifier( [INFO] [stderr] 3095 | "yield".to_owned(), [INFO] [stderr] 3096 | )); [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/lib.rs:3103:59 [INFO] [stderr] | [INFO] [stderr] 3103 | node::FunctionArg::Expr(ref e) => match e { [INFO] [stderr] | ___________________________________________________________^ [INFO] [stderr] 3104 | | node::Expression::Assignment(ref a) => match &*a.right { [INFO] [stderr] 3105 | | node::Expression::Yield(ref y) => if y.argument.is_some() { [INFO] [stderr] 3106 | | invalid_param = true; [INFO] [stderr] ... | [INFO] [stderr] 3114 | | _ => (), [INFO] [stderr] 3115 | | }, [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 3103 | node::FunctionArg::Expr(ref e) => if let node::Expression::Assignment(ref a) = e { match &*a.right { [INFO] [stderr] 3104 | node::Expression::Yield(ref y) => if y.argument.is_some() { [INFO] [stderr] 3105 | invalid_param = true; [INFO] [stderr] 3106 | } else { [INFO] [stderr] 3107 | return node::FunctionArg::Expr(node::Expression::Ident( [INFO] [stderr] 3108 | "yield".to_owned(), [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/lib.rs:3104:68 [INFO] [stderr] | [INFO] [stderr] 3104 | node::Expression::Assignment(ref a) => match &*a.right { [INFO] [stderr] | ____________________________________________________________________^ [INFO] [stderr] 3105 | | node::Expression::Yield(ref y) => if y.argument.is_some() { [INFO] [stderr] 3106 | | invalid_param = true; [INFO] [stderr] 3107 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 3112 | | _ => (), [INFO] [stderr] 3113 | | }, [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 3104 | node::Expression::Assignment(ref a) => if let node::Expression::Yield(ref y) = &*a.right { if y.argument.is_some() { [INFO] [stderr] 3105 | invalid_param = true; [INFO] [stderr] 3106 | } else { [INFO] [stderr] 3107 | return node::FunctionArg::Expr(node::Expression::Ident( [INFO] [stderr] 3108 | "yield".to_owned(), [INFO] [stderr] 3109 | )); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3400:18 [INFO] [stderr] | [INFO] [stderr] 3400 | .ok_or(self.op_error("Unable to convert unary operator"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| self.op_error("Unable to convert unary operator"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [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/lib.rs:3133:17 [INFO] [stderr] | [INFO] [stderr] 3133 | / match param { [INFO] [stderr] 3134 | | node::FunctionArg::Expr(ref e) => match e { [INFO] [stderr] 3135 | | node::Expression::Yield(_) => { [INFO] [stderr] 3136 | | return self.expected_token_error( [INFO] [stderr] ... | [INFO] [stderr] 3143 | | _ => (), [INFO] [stderr] 3144 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 3133 | if let node::FunctionArg::Expr(ref e) = param { match e { [INFO] [stderr] 3134 | node::Expression::Yield(_) => { [INFO] [stderr] 3135 | return self.expected_token_error( [INFO] [stderr] 3136 | &self.look_ahead, [INFO] [stderr] 3137 | &["not a yield expression in a function param"], [INFO] [stderr] 3138 | ) [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/lib.rs:3134:55 [INFO] [stderr] | [INFO] [stderr] 3134 | node::FunctionArg::Expr(ref e) => match e { [INFO] [stderr] | _______________________________________________________^ [INFO] [stderr] 3135 | | node::Expression::Yield(_) => { [INFO] [stderr] 3136 | | return self.expected_token_error( [INFO] [stderr] 3137 | | &self.look_ahead, [INFO] [stderr] ... | [INFO] [stderr] 3141 | | _ => (), [INFO] [stderr] 3142 | | }, [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 3134 | node::FunctionArg::Expr(ref e) => if let node::Expression::Yield(_) = e { [INFO] [stderr] 3135 | return self.expected_token_error( [INFO] [stderr] 3136 | &self.look_ahead, [INFO] [stderr] 3137 | &["not a yield expression in a function param"], [INFO] [stderr] 3138 | ) [INFO] [stderr] 3139 | }, [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/lib.rs:3438:17 [INFO] [stderr] | [INFO] [stderr] 3438 | / match &ex { [INFO] [stderr] 3439 | | &node::Expression::Ident(ref i) => if Self::is_restricted_word(i) { [INFO] [stderr] 3440 | | // TODO: double check this [INFO] [stderr] 3441 | | if !self.config.tolerant { [INFO] [stderr] ... | [INFO] [stderr] 3445 | | _ => (), [INFO] [stderr] 3446 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 3438 | if let &node::Expression::Ident(ref i) = &ex { if Self::is_restricted_word(i) { [INFO] [stderr] 3439 | // TODO: double check this [INFO] [stderr] 3440 | if !self.config.tolerant { [INFO] [stderr] 3441 | return self.unexpected_token_error(&start, "restricted ident"); [INFO] [stderr] 3442 | } [INFO] [stderr] 3443 | } } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:3438:17 [INFO] [stderr] | [INFO] [stderr] 3438 | / match &ex { [INFO] [stderr] 3439 | | &node::Expression::Ident(ref i) => if Self::is_restricted_word(i) { [INFO] [stderr] 3440 | | // TODO: double check this [INFO] [stderr] 3441 | | if !self.config.tolerant { [INFO] [stderr] ... | [INFO] [stderr] 3445 | | _ => (), [INFO] [stderr] 3446 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 3438 | match ex { [INFO] [stderr] 3439 | node::Expression::Ident(ref i) => if Self::is_restricted_word(i) { [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/lib.rs:3468:25 [INFO] [stderr] | [INFO] [stderr] 3468 | / match &expr { [INFO] [stderr] 3469 | | &node::Expression::Ident(ref i) => if Self::is_restricted_word(i) { [INFO] [stderr] 3470 | | return self.expected_token_error(&start, &[]); [INFO] [stderr] 3471 | | }, [INFO] [stderr] 3472 | | _ => (), [INFO] [stderr] 3473 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 3468 | if let &node::Expression::Ident(ref i) = &expr { if Self::is_restricted_word(i) { [INFO] [stderr] 3469 | return self.expected_token_error(&start, &[]); [INFO] [stderr] 3470 | } } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:3468:25 [INFO] [stderr] | [INFO] [stderr] 3468 | / match &expr { [INFO] [stderr] 3469 | | &node::Expression::Ident(ref i) => if Self::is_restricted_word(i) { [INFO] [stderr] 3470 | | return self.expected_token_error(&start, &[]); [INFO] [stderr] 3471 | | }, [INFO] [stderr] 3472 | | _ => (), [INFO] [stderr] 3473 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 3468 | match expr { [INFO] [stderr] 3469 | node::Expression::Ident(ref i) => if Self::is_restricted_word(i) { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/lib.rs:3617:30 [INFO] [stderr] | [INFO] [stderr] 3617 | .map(|a| node::FunctionArg::Expr(a)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `node::FunctionArg::Expr` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false [INFO] [stderr] --> src/lib.rs:3280:20 [INFO] [stderr] | [INFO] [stderr] 3280 | if prec <= 0 { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::absurd_extreme_comparisons)] on by default [INFO] [stderr] = help: because 0 is the minimum value for this type, the case where the two sides are not equal never occurs, consider using prec == 0 instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:3284:42 [INFO] [stderr] | [INFO] [stderr] 3284 | while stack.len() > 1 && ops.len() > 0 && prec <= precs[precs.len() - 1] { [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!ops.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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3287:26 [INFO] [stderr] | [INFO] [stderr] 3287 | .ok_or(self.op_error("invalid binary operation, no right expr in stack"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| self.op_error("invalid binary operation, no right expr in stack"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/lib.rs:3703:20 [INFO] [stderr] | [INFO] [stderr] 3703 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 3704 | | //TODO: double check this [INFO] [stderr] 3705 | | Ok(()) [INFO] [stderr] 3706 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] note: same as this [INFO] [stderr] --> src/lib.rs:3700:55 [INFO] [stderr] | [INFO] [stderr] 3700 | } else if self.at_punct(Punct::SemiColon) { [INFO] [stderr] | _______________________________________________________^ [INFO] [stderr] 3701 | | //tolerate unexpected [INFO] [stderr] 3702 | | Ok(()) [INFO] [stderr] 3703 | | } else { [INFO] [stderr] | |_____________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3291:26 [INFO] [stderr] | [INFO] [stderr] 3291 | .ok_or(self.op_error("invalid binary operation, too few operators"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| self.op_error("invalid binary operation, too few operators"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3295:26 [INFO] [stderr] | [INFO] [stderr] 3295 | .ok_or(self.op_error("invalid binary operation, no left expr in stack"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| self.op_error("invalid binary operation, no left expr in stack"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3300:34 [INFO] [stderr] | [INFO] [stderr] 3300 | .ok_or(self.op_error("Unable to convert logical operator"))?, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| self.op_error("Unable to convert logical operator"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3306:30 [INFO] [stderr] | [INFO] [stderr] 3306 | .ok_or(self.op_error("Unable to convert binary operator"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| self.op_error("Unable to convert binary operator"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3323:18 [INFO] [stderr] | [INFO] [stderr] 3323 | .ok_or(self.op_error("invalid binary operation, too few expressions"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| self.op_error("invalid binary operation, too few expressions"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:3325:19 [INFO] [stderr] | [INFO] [stderr] 3325 | while ops.len() > 0 && stack.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!ops.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:3325:36 [INFO] [stderr] | [INFO] [stderr] 3325 | while ops.len() > 0 && stack.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!stack.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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3328:22 [INFO] [stderr] | [INFO] [stderr] 3328 | .ok_or(self.op_error("invalid binary operation, too few operators"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| self.op_error("invalid binary operation, too few operators"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3331:26 [INFO] [stderr] | [INFO] [stderr] 3331 | .ok_or(self.op_error("Unable to convert logical operator"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| self.op_error("Unable to convert logical operator"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3334:52 [INFO] [stderr] | [INFO] [stderr] 3334 | left: Box::new(stack.pop().ok_or( [INFO] [stderr] | ____________________________________________________^ [INFO] [stderr] 3335 | | self.op_error("invalid logical operation, too few expressions"), [INFO] [stderr] 3336 | | )?), [INFO] [stderr] | |_________________________^ help: try this: `ok_or_else(|| self.op_error("invalid logical operation, too few expressions"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3341:26 [INFO] [stderr] | [INFO] [stderr] 3341 | .ok_or(self.op_error("Unable to convert binary operator"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| self.op_error("Unable to convert binary operator"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3344:52 [INFO] [stderr] | [INFO] [stderr] 3344 | left: Box::new(stack.pop().ok_or( [INFO] [stderr] | ____________________________________________________^ [INFO] [stderr] 3345 | | self.op_error("invalid binary operation, too few expressions"), [INFO] [stderr] 3346 | | )?), [INFO] [stderr] | |_________________________^ help: try this: `ok_or_else(|| self.op_error("invalid binary operation, too few expressions"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:3791:9 [INFO] [stderr] | [INFO] [stderr] 3791 | / match tok { [INFO] [stderr] 3792 | | &Token::Punct(ref p) => Self::determine_precedence(p), [INFO] [stderr] 3793 | | &Token::Keyword(ref k) => { [INFO] [stderr] 3794 | | if k == &Keyword::InstanceOf || (self.context.allow_in && k == &Keyword::In) { [INFO] [stderr] ... | [INFO] [stderr] 3800 | | _ => 0, [INFO] [stderr] 3801 | | } [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] 3791 | match *tok { [INFO] [stderr] 3792 | Token::Punct(ref p) => Self::determine_precedence(p), [INFO] [stderr] 3793 | Token::Keyword(ref k) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/lib.rs:3805:32 [INFO] [stderr] | [INFO] [stderr] 3805 | fn determine_precedence(p: &Punct) -> usize { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Punct` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:3806:9 [INFO] [stderr] | [INFO] [stderr] 3806 | / match p { [INFO] [stderr] 3807 | | &Punct::CloseParen [INFO] [stderr] 3808 | | | &Punct::SemiColon [INFO] [stderr] 3809 | | | &Punct::Comma [INFO] [stderr] ... | [INFO] [stderr] 3825 | | _ => 0, [INFO] [stderr] 3826 | | } [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] 3806 | match *p { [INFO] [stderr] 3807 | Punct::CloseParen [INFO] [stderr] 3808 | | Punct::SemiColon [INFO] [stderr] 3809 | | Punct::Comma [INFO] [stderr] 3810 | | Punct::Assign [INFO] [stderr] 3811 | | Punct::CloseBracket => 0, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/lib.rs:3400:18 [INFO] [stderr] | [INFO] [stderr] 3400 | .ok_or(self.op_error("Unable to convert unary operator"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| self.op_error("Unable to convert unary operator"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [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/lib.rs:3438:17 [INFO] [stderr] | [INFO] [stderr] 3438 | / match &ex { [INFO] [stderr] 3439 | | &node::Expression::Ident(ref i) => if Self::is_restricted_word(i) { [INFO] [stderr] 3440 | | // TODO: double check this [INFO] [stderr] 3441 | | if !self.config.tolerant { [INFO] [stderr] ... | [INFO] [stderr] 3445 | | _ => (), [INFO] [stderr] 3446 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 3438 | if let &node::Expression::Ident(ref i) = &ex { if Self::is_restricted_word(i) { [INFO] [stderr] 3439 | // TODO: double check this [INFO] [stderr] 3440 | if !self.config.tolerant { [INFO] [stderr] 3441 | return self.unexpected_token_error(&start, "restricted ident"); [INFO] [stderr] 3442 | } [INFO] [stderr] 3443 | } } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:3438:17 [INFO] [stderr] | [INFO] [stderr] 3438 | / match &ex { [INFO] [stderr] 3439 | | &node::Expression::Ident(ref i) => if Self::is_restricted_word(i) { [INFO] [stderr] 3440 | | // TODO: double check this [INFO] [stderr] 3441 | | if !self.config.tolerant { [INFO] [stderr] ... | [INFO] [stderr] 3445 | | _ => (), [INFO] [stderr] 3446 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 3438 | match ex { [INFO] [stderr] 3439 | node::Expression::Ident(ref i) => if Self::is_restricted_word(i) { [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/lib.rs:3468:25 [INFO] [stderr] | [INFO] [stderr] 3468 | / match &expr { [INFO] [stderr] 3469 | | &node::Expression::Ident(ref i) => if Self::is_restricted_word(i) { [INFO] [stderr] 3470 | | return self.expected_token_error(&start, &[]); [INFO] [stderr] 3471 | | }, [INFO] [stderr] 3472 | | _ => (), [INFO] [stderr] 3473 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 3468 | if let &node::Expression::Ident(ref i) = &expr { if Self::is_restricted_word(i) { [INFO] [stderr] 3469 | return self.expected_token_error(&start, &[]); [INFO] [stderr] 3470 | } } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:3468:25 [INFO] [stderr] | [INFO] [stderr] 3468 | / match &expr { [INFO] [stderr] 3469 | | &node::Expression::Ident(ref i) => if Self::is_restricted_word(i) { [INFO] [stderr] 3470 | | return self.expected_token_error(&start, &[]); [INFO] [stderr] 3471 | | }, [INFO] [stderr] 3472 | | _ => (), [INFO] [stderr] 3473 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 3468 | match expr { [INFO] [stderr] 3469 | node::Expression::Ident(ref i) => if Self::is_restricted_word(i) { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/lib.rs:3617:30 [INFO] [stderr] | [INFO] [stderr] 3617 | .map(|a| node::FunctionArg::Expr(a)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `node::FunctionArg::Expr` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/lib.rs:3703:20 [INFO] [stderr] | [INFO] [stderr] 3703 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 3704 | | //TODO: double check this [INFO] [stderr] 3705 | | Ok(()) [INFO] [stderr] 3706 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] note: same as this [INFO] [stderr] --> src/lib.rs:3700:55 [INFO] [stderr] | [INFO] [stderr] 3700 | } else if self.at_punct(Punct::SemiColon) { [INFO] [stderr] | _______________________________________________________^ [INFO] [stderr] 3701 | | //tolerate unexpected [INFO] [stderr] 3702 | | Ok(()) [INFO] [stderr] 3703 | | } else { [INFO] [stderr] | |_____________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:3791:9 [INFO] [stderr] | [INFO] [stderr] 3791 | / match tok { [INFO] [stderr] 3792 | | &Token::Punct(ref p) => Self::determine_precedence(p), [INFO] [stderr] 3793 | | &Token::Keyword(ref k) => { [INFO] [stderr] 3794 | | if k == &Keyword::InstanceOf || (self.context.allow_in && k == &Keyword::In) { [INFO] [stderr] ... | [INFO] [stderr] 3800 | | _ => 0, [INFO] [stderr] 3801 | | } [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] 3791 | match *tok { [INFO] [stderr] 3792 | Token::Punct(ref p) => Self::determine_precedence(p), [INFO] [stderr] 3793 | Token::Keyword(ref k) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/lib.rs:3805:32 [INFO] [stderr] | [INFO] [stderr] 3805 | fn determine_precedence(p: &Punct) -> usize { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Punct` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:3806:9 [INFO] [stderr] | [INFO] [stderr] 3806 | / match p { [INFO] [stderr] 3807 | | &Punct::CloseParen [INFO] [stderr] 3808 | | | &Punct::SemiColon [INFO] [stderr] 3809 | | | &Punct::Comma [INFO] [stderr] ... | [INFO] [stderr] 3825 | | _ => 0, [INFO] [stderr] 3826 | | } [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] 3806 | match *p { [INFO] [stderr] 3807 | Punct::CloseParen [INFO] [stderr] 3808 | | Punct::SemiColon [INFO] [stderr] 3809 | | Punct::Comma [INFO] [stderr] 3810 | | Punct::Assign [INFO] [stderr] 3811 | | Punct::CloseBracket => 0, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: aborting due to 3 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `ressa`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] error: aborting due to 3 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `ressa`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "5b1f9b69389a9223dce74ca4f4724538c208ba653bb126a265e164c9cb63db01"` [INFO] running `"docker" "rm" "-f" "5b1f9b69389a9223dce74ca4f4724538c208ba653bb126a265e164c9cb63db01"` [INFO] [stdout] 5b1f9b69389a9223dce74ca4f4724538c208ba653bb126a265e164c9cb63db01