[INFO] crate prolog_parser 0.7.18 is already in cache [INFO] extracting crate prolog_parser 0.7.18 into work/ex/clippy-test-run/sources/stable/reg/prolog_parser/0.7.18 [INFO] extracting crate prolog_parser 0.7.18 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/prolog_parser/0.7.18 [INFO] validating manifest of prolog_parser-0.7.18 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 prolog_parser-0.7.18 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 prolog_parser-0.7.18 [INFO] finished frobbing prolog_parser-0.7.18 [INFO] frobbed toml for prolog_parser-0.7.18 written to work/ex/clippy-test-run/sources/stable/reg/prolog_parser/0.7.18/Cargo.toml [INFO] started frobbing prolog_parser-0.7.18 [INFO] finished frobbing prolog_parser-0.7.18 [INFO] frobbed toml for prolog_parser-0.7.18 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/prolog_parser/0.7.18/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 prolog_parser-0.7.18 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-6/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/prolog_parser/0.7.18:/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] b91c5da2d4444c6f5ea651565d363c086fff2e1e727a133b850c7fe9ea76cb5e [INFO] running `"docker" "start" "-a" "b91c5da2d4444c6f5ea651565d363c086fff2e1e727a133b850c7fe9ea76cb5e"` [INFO] [stderr] Checking num v0.2.0 [INFO] [stderr] Checking prolog_parser v0.7.18 (/opt/crater/workdir) [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/parser.rs:389:13 [INFO] [stderr] | [INFO] [stderr] 389 | / if is_infix!(self.stack[idx].spec) && idx > 0 { [INFO] [stderr] 390 | | if !is_op!(self.stack[idx - 1].spec) && !self.stack[idx - 1].tt.is_sep() { [INFO] [stderr] 391 | | return false; [INFO] [stderr] 392 | | } [INFO] [stderr] 393 | | } [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] 389 | if is_infix!(self.stack[idx].spec) && idx > 0 && !is_op!(self.stack[idx - 1].spec) && !self.stack[idx - 1].tt.is_sep() { [INFO] [stderr] 390 | return false; [INFO] [stderr] 391 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/parser.rs:401:9 [INFO] [stderr] | [INFO] [stderr] 401 | / if TokenType::Term == self.stack[stack_len].tt { [INFO] [stderr] 402 | | if self.atomize_term(&self.terms[idx - 1]).is_some() { [INFO] [stderr] 403 | | self.stack.truncate(stack_len + 1); [INFO] [stderr] 404 | | [INFO] [stderr] ... | [INFO] [stderr] 430 | | } [INFO] [stderr] 431 | | } [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] 401 | if TokenType::Term == self.stack[stack_len].tt && self.atomize_term(&self.terms[idx - 1]).is_some() { [INFO] [stderr] 402 | self.stack.truncate(stack_len + 1); [INFO] [stderr] 403 | [INFO] [stderr] 404 | let mut subterms: Vec<_> = self.terms.drain(idx ..) [INFO] [stderr] 405 | .map(|t| Box::new(t)) [INFO] [stderr] 406 | .collect(); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/parser.rs:453:20 [INFO] [stderr] | [INFO] [stderr] 453 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 454 | | if desc.tt == TokenType::HeadTailSeparator { [INFO] [stderr] 455 | | if arity == 1 { [INFO] [stderr] 456 | | continue; [INFO] [stderr] ... | [INFO] [stderr] 464 | | } [INFO] [stderr] 465 | | } [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] 453 | } else if desc.tt == TokenType::HeadTailSeparator { [INFO] [stderr] 454 | if arity == 1 { [INFO] [stderr] 455 | continue; [INFO] [stderr] 456 | } [INFO] [stderr] 457 | [INFO] [stderr] 458 | return None; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/parser.rs:677:17 [INFO] [stderr] | [INFO] [stderr] 677 | / if !self.reduce_term() { [INFO] [stderr] 678 | | if !self.reduce_brackets() { [INFO] [stderr] 679 | | return Err(ParserError::IncompleteReduction); [INFO] [stderr] 680 | | } [INFO] [stderr] 681 | | }, [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] 677 | if !self.reduce_term() && !self.reduce_brackets() { [INFO] [stderr] 678 | return Err(ParserError::IncompleteReduction); [INFO] [stderr] 679 | }, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/lexer.rs:629:16 [INFO] [stderr] | [INFO] [stderr] 629 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 630 | | if token.starts_with('0') && token.len() == 1 { [INFO] [stderr] 631 | | if c == 'x' { [INFO] [stderr] 632 | | Ok(Token::Constant(integer!(self.hexadecimal_constant()?))) [INFO] [stderr] ... | [INFO] [stderr] 649 | | } [INFO] [stderr] 650 | | } [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] 629 | } else if token.starts_with('0') && token.len() == 1 { [INFO] [stderr] 630 | if c == 'x' { [INFO] [stderr] 631 | Ok(Token::Constant(integer!(self.hexadecimal_constant()?))) [INFO] [stderr] 632 | } else if c == 'o' { [INFO] [stderr] 633 | Ok(Token::Constant(integer!(self.octal_constant()?))) [INFO] [stderr] 634 | } else if c == 'b' { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/parser.rs:389:13 [INFO] [stderr] | [INFO] [stderr] 389 | / if is_infix!(self.stack[idx].spec) && idx > 0 { [INFO] [stderr] 390 | | if !is_op!(self.stack[idx - 1].spec) && !self.stack[idx - 1].tt.is_sep() { [INFO] [stderr] 391 | | return false; [INFO] [stderr] 392 | | } [INFO] [stderr] 393 | | } [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] 389 | if is_infix!(self.stack[idx].spec) && idx > 0 && !is_op!(self.stack[idx - 1].spec) && !self.stack[idx - 1].tt.is_sep() { [INFO] [stderr] 390 | return false; [INFO] [stderr] 391 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/parser.rs:401:9 [INFO] [stderr] | [INFO] [stderr] 401 | / if TokenType::Term == self.stack[stack_len].tt { [INFO] [stderr] 402 | | if self.atomize_term(&self.terms[idx - 1]).is_some() { [INFO] [stderr] 403 | | self.stack.truncate(stack_len + 1); [INFO] [stderr] 404 | | [INFO] [stderr] ... | [INFO] [stderr] 430 | | } [INFO] [stderr] 431 | | } [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] 401 | if TokenType::Term == self.stack[stack_len].tt && self.atomize_term(&self.terms[idx - 1]).is_some() { [INFO] [stderr] 402 | self.stack.truncate(stack_len + 1); [INFO] [stderr] 403 | [INFO] [stderr] 404 | let mut subterms: Vec<_> = self.terms.drain(idx ..) [INFO] [stderr] 405 | .map(|t| Box::new(t)) [INFO] [stderr] 406 | .collect(); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/parser.rs:453:20 [INFO] [stderr] | [INFO] [stderr] 453 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 454 | | if desc.tt == TokenType::HeadTailSeparator { [INFO] [stderr] 455 | | if arity == 1 { [INFO] [stderr] 456 | | continue; [INFO] [stderr] ... | [INFO] [stderr] 464 | | } [INFO] [stderr] 465 | | } [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] 453 | } else if desc.tt == TokenType::HeadTailSeparator { [INFO] [stderr] 454 | if arity == 1 { [INFO] [stderr] 455 | continue; [INFO] [stderr] 456 | } [INFO] [stderr] 457 | [INFO] [stderr] 458 | return None; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/parser.rs:677:17 [INFO] [stderr] | [INFO] [stderr] 677 | / if !self.reduce_term() { [INFO] [stderr] 678 | | if !self.reduce_brackets() { [INFO] [stderr] 679 | | return Err(ParserError::IncompleteReduction); [INFO] [stderr] 680 | | } [INFO] [stderr] 681 | | }, [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] 677 | if !self.reduce_term() && !self.reduce_brackets() { [INFO] [stderr] 678 | return Err(ParserError::IncompleteReduction); [INFO] [stderr] 679 | }, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/lexer.rs:629:16 [INFO] [stderr] | [INFO] [stderr] 629 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 630 | | if token.starts_with('0') && token.len() == 1 { [INFO] [stderr] 631 | | if c == 'x' { [INFO] [stderr] 632 | | Ok(Token::Constant(integer!(self.hexadecimal_constant()?))) [INFO] [stderr] ... | [INFO] [stderr] 649 | | } [INFO] [stderr] 650 | | } [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] 629 | } else if token.starts_with('0') && token.len() == 1 { [INFO] [stderr] 630 | if c == 'x' { [INFO] [stderr] 631 | Ok(Token::Constant(integer!(self.hexadecimal_constant()?))) [INFO] [stderr] 632 | } else if c == 'o' { [INFO] [stderr] 633 | Ok(Token::Constant(integer!(self.octal_constant()?))) [INFO] [stderr] 634 | } else if c == 'b' { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:159:9 [INFO] [stderr] | [INFO] [stderr] 159 | / match self { [INFO] [stderr] 160 | | &RegType::Perm(val) => write!(f, "Y{}", val), [INFO] [stderr] 161 | | &RegType::Temp(val) => write!(f, "X{}", val) [INFO] [stderr] 162 | | } [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] 159 | match *self { [INFO] [stderr] 160 | RegType::Perm(val) => write!(f, "Y{}", val), [INFO] [stderr] 161 | RegType::Temp(val) => write!(f, "X{}", val) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:182:9 [INFO] [stderr] | [INFO] [stderr] 182 | / match self { [INFO] [stderr] 183 | | &VarReg::Norm(RegType::Perm(reg)) => write!(f, "Y{}", reg), [INFO] [stderr] 184 | | &VarReg::Norm(RegType::Temp(reg)) => write!(f, "X{}", reg), [INFO] [stderr] 185 | | &VarReg::ArgAndNorm(RegType::Perm(reg), arg) => [INFO] [stderr] ... | [INFO] [stderr] 188 | | write!(f, "X{} A{}", reg, arg) [INFO] [stderr] 189 | | } [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] 182 | match *self { [INFO] [stderr] 183 | VarReg::Norm(RegType::Perm(reg)) => write!(f, "Y{}", reg), [INFO] [stderr] 184 | VarReg::Norm(RegType::Temp(reg)) => write!(f, "X{}", reg), [INFO] [stderr] 185 | VarReg::ArgAndNorm(RegType::Perm(reg), arg) => [INFO] [stderr] 186 | write!(f, "Y{} A{}", reg, arg), [INFO] [stderr] 187 | VarReg::ArgAndNorm(RegType::Temp(reg), arg) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:313:9 [INFO] [stderr] | [INFO] [stderr] 313 | / match self { [INFO] [stderr] 314 | | &ParserError::Arithmetic(_) => [INFO] [stderr] 315 | | "arithmetic_error", [INFO] [stderr] 316 | | &ParserError::BackQuotedString => [INFO] [stderr] ... | [INFO] [stderr] 359 | | "cannot_parse_cyclic_term" [INFO] [stderr] 360 | | } [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] 313 | match *self { [INFO] [stderr] 314 | ParserError::Arithmetic(_) => [INFO] [stderr] 315 | "arithmetic_error", [INFO] [stderr] 316 | ParserError::BackQuotedString => [INFO] [stderr] 317 | "back_quoted_string", [INFO] [stderr] 318 | ParserError::UnexpectedChar(_) => [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: you are deriving `Hash` but have implemented `PartialEq` explicitly [INFO] [stderr] --> src/ast.rs:387:17 [INFO] [stderr] | [INFO] [stderr] 387 | #[derive(Clone, Hash)] [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::derive_hash_xor_eq)] on by default [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/ast.rs:420:1 [INFO] [stderr] | [INFO] [stderr] 420 | / impl PartialEq for Constant { [INFO] [stderr] 421 | | fn eq(&self, other: &Constant) -> bool { [INFO] [stderr] 422 | | match (self, other) { [INFO] [stderr] 423 | | (&Constant::Atom(ref atom, _), &Constant::Char(c)) [INFO] [stderr] ... | [INFO] [stderr] 442 | | } [INFO] [stderr] 443 | | } [INFO] [stderr] | |_^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:399:9 [INFO] [stderr] | [INFO] [stderr] 399 | / match self { [INFO] [stderr] 400 | | &Constant::Atom(ref atom, _) => [INFO] [stderr] 401 | | if atom.as_str().chars().any(|c| "`.$'\" ".contains(c)) { [INFO] [stderr] 402 | | write!(f, "'{}'", atom.as_str()) [INFO] [stderr] ... | [INFO] [stderr] 415 | | write!(f, "u{}", integer) [INFO] [stderr] 416 | | } [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] 399 | match *self { [INFO] [stderr] 400 | Constant::Atom(ref atom, _) => [INFO] [stderr] 401 | if atom.as_str().chars().any(|c| "`.$'\" ".contains(c)) { [INFO] [stderr] 402 | write!(f, "'{}'", atom.as_str()) [INFO] [stderr] 403 | } else { [INFO] [stderr] 404 | write!(f, "{}", atom.as_str()) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you should use the `starts_with` method [INFO] [stderr] --> src/ast.rs:426:42 [INFO] [stderr] | [INFO] [stderr] 426 | c.len_utf8() == s.len() && Some(c) == s.chars().next() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: like this: `s.starts_with(c)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::chars_next_cmp)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#chars_next_cmp [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/ast.rs:448:20 [INFO] [stderr] | [INFO] [stderr] 448 | pub fn to_atom(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: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/ast.rs:455:23 [INFO] [stderr] | [INFO] [stderr] 455 | pub fn to_integer(self) -> Option> { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:498:9 [INFO] [stderr] | [INFO] [stderr] 498 | / match self { [INFO] [stderr] 499 | | &Number::Float(fl) => write!(f, "{}", fl), [INFO] [stderr] 500 | | &Number::Integer(ref bi) => write!(f, "{}", bi), [INFO] [stderr] 501 | | &Number::Rational(ref r) => write!(f, "{}", r) [INFO] [stderr] 502 | | } [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] 498 | match *self { [INFO] [stderr] 499 | Number::Float(fl) => write!(f, "{}", fl), [INFO] [stderr] 500 | Number::Integer(ref bi) => write!(f, "{}", bi), [INFO] [stderr] 501 | Number::Rational(ref r) => write!(f, "{}", r) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:559:9 [INFO] [stderr] | [INFO] [stderr] 559 | / match self { [INFO] [stderr] 560 | | &ClauseName::User(ref name) => { [INFO] [stderr] 561 | | let module = name.owning_module(); [INFO] [stderr] 562 | | ClauseName::User(TabledRc { atom: module.clone(), [INFO] [stderr] ... | [INFO] [stderr] 565 | | _ => clause_name!("user") [INFO] [stderr] 566 | | } [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] 559 | match *self { [INFO] [stderr] 560 | ClauseName::User(ref name) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:571:9 [INFO] [stderr] | [INFO] [stderr] 571 | / match self { [INFO] [stderr] 572 | | &ClauseName::BuiltIn(s) => Rc::new(s.to_string()), [INFO] [stderr] 573 | | &ClauseName::User(ref rc) => rc.inner() [INFO] [stderr] 574 | | } [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] 571 | match *self { [INFO] [stderr] 572 | ClauseName::BuiltIn(s) => Rc::new(s.to_string()), [INFO] [stderr] 573 | ClauseName::User(ref rc) => rc.inner() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:589:9 [INFO] [stderr] | [INFO] [stderr] 589 | / match self { [INFO] [stderr] 590 | | &ClauseName::BuiltIn(s) => s, [INFO] [stderr] 591 | | &ClauseName::User(ref name) => name.as_ref() [INFO] [stderr] 592 | | } [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] 589 | match *self { [INFO] [stderr] 590 | ClauseName::BuiltIn(s) => s, [INFO] [stderr] 591 | ClauseName::User(ref name) => name.as_ref() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:745:9 [INFO] [stderr] | [INFO] [stderr] 745 | / match self { [INFO] [stderr] 746 | | &Number::Float(fl) => fl.into_inner().is_zero(), [INFO] [stderr] 747 | | &Number::Integer(ref bi) => bi.is_zero(), [INFO] [stderr] 748 | | &Number::Rational(ref r) => r.is_zero() [INFO] [stderr] 749 | | } [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] 745 | match *self { [INFO] [stderr] 746 | Number::Float(fl) => fl.into_inner().is_zero(), [INFO] [stderr] 747 | Number::Integer(ref bi) => bi.is_zero(), [INFO] [stderr] 748 | Number::Rational(ref r) => r.is_zero() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:754:9 [INFO] [stderr] | [INFO] [stderr] 754 | / match self { [INFO] [stderr] 755 | | &Number::Float(ref fl) => Number::Float(OrderedFloat(fl.into_inner().abs())), [INFO] [stderr] 756 | | &Number::Integer(ref n) => Number::Integer(Rc::new((*n).clone().abs())), [INFO] [stderr] 757 | | &Number::Rational(ref r) => Number::Rational(Rc::new((*r).clone().abs())) [INFO] [stderr] 758 | | } [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] 754 | match *self { [INFO] [stderr] 755 | Number::Float(ref fl) => Number::Float(OrderedFloat(fl.into_inner().abs())), [INFO] [stderr] 756 | Number::Integer(ref n) => Number::Integer(Rc::new((*n).clone().abs())), [INFO] [stderr] 757 | Number::Rational(ref r) => Number::Rational(Rc::new((*r).clone().abs())) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/ast.rs:931:24 [INFO] [stderr] | [INFO] [stderr] 931 | pub fn to_constant(self) -> Option { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:939:9 [INFO] [stderr] | [INFO] [stderr] 939 | / match self { [INFO] [stderr] 940 | | &Term::Clause(_, _, ref terms, _) => [INFO] [stderr] 941 | | terms.first().map(|bt| bt.as_ref()), [INFO] [stderr] 942 | | _ => None [INFO] [stderr] 943 | | } [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] 939 | match *self { [INFO] [stderr] 940 | Term::Clause(_, _, ref terms, _) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:947:9 [INFO] [stderr] | [INFO] [stderr] 947 | / match self { [INFO] [stderr] 948 | | &Term::Constant(_, Constant::Atom(ref atom, _)) [INFO] [stderr] 949 | | | &Term::Clause(_, ref atom, ..) => Some(atom.clone()), [INFO] [stderr] 950 | | _ => None [INFO] [stderr] 951 | | } [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] 947 | match *self { [INFO] [stderr] 948 | Term::Constant(_, Constant::Atom(ref atom, _)) [INFO] [stderr] 949 | | Term::Clause(_, ref atom, ..) => Some(atom.clone()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:955:9 [INFO] [stderr] | [INFO] [stderr] 955 | / match self { [INFO] [stderr] 956 | | &Term::Clause(_, _, ref child_terms, ..) => child_terms.len(), [INFO] [stderr] 957 | | _ => 0 [INFO] [stderr] 958 | | } [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] 955 | match *self { [INFO] [stderr] 956 | Term::Clause(_, _, ref child_terms, ..) => child_terms.len(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: you are implementing `Hash` explicitly but have derived `PartialEq` [INFO] [stderr] --> src/string_list.rs:9:1 [INFO] [stderr] | [INFO] [stderr] 9 | / impl Hash for StringListWrapper { [INFO] [stderr] 10 | | fn hash(&self, state: &mut H) { [INFO] [stderr] 11 | | self.0.borrow().hash(state) [INFO] [stderr] 12 | | } [INFO] [stderr] 13 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/string_list.rs:6:22 [INFO] [stderr] | [INFO] [stderr] 6 | #[derive(PartialOrd, PartialEq, Ord, Eq)] [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/parser.rs:73:5 [INFO] [stderr] | [INFO] [stderr] 73 | / is_term!(d2.spec) [INFO] [stderr] 74 | | && d2.priority < d1.priority [INFO] [stderr] 75 | | && is_lterm!(d2.spec) [INFO] [stderr] 76 | | && d2.priority < d1.priority [INFO] [stderr] | |____________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::nonminimal_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 73 | ($x & TERM) != 0 && d2.priority < d1.priority && ($x & LTERM) != 0 [INFO] [stderr] | [INFO] [stderr] 73 | !(($x & LTERM) == 0 || d2.priority >= d1.priority || ($x & TERM) == 0) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/parser.rs:194:21 [INFO] [stderr] | [INFO] [stderr] 194 | / match &name { [INFO] [stderr] 195 | | &Term::Clause(_, ref name, ..) [INFO] [stderr] 196 | | | &Term::Constant(_, Constant::Atom(ref name, _)) if name.as_str() == "-" => [INFO] [stderr] 197 | | if let Term::Constant(r, Constant::Number(n)) = arg1 { [INFO] [stderr] ... | [INFO] [stderr] 205 | | _ => {} [INFO] [stderr] 206 | | }; [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] 194 | match name { [INFO] [stderr] 195 | Term::Clause(_, ref name, ..) [INFO] [stderr] 196 | | Term::Constant(_, Constant::Atom(ref name, _)) if name.as_str() == "-" => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/parser.rs:306:25 [INFO] [stderr] | [INFO] [stderr] 306 | / { [INFO] [stderr] 307 | | self.push_binary_op(desc2, LTERM); [INFO] [stderr] 308 | | continue; [INFO] [stderr] 309 | | } [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/parser.rs:301:25 [INFO] [stderr] | [INFO] [stderr] 301 | / { [INFO] [stderr] 302 | | self.push_binary_op(desc2, LTERM); [INFO] [stderr] 303 | | continue; [INFO] [stderr] 304 | | } [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] error: this `if` has identical blocks [INFO] [stderr] --> src/parser.rs:322:77 [INFO] [stderr] | [INFO] [stderr] 322 | } else if is_xf!(desc1.spec) && affirm_xf(desc1, desc2) { [INFO] [stderr] | _____________________________________________________________________________^ [INFO] [stderr] 323 | | self.push_unary_op(desc1, LTERM, Fixity::Post); [INFO] [stderr] 324 | | continue; [INFO] [stderr] 325 | | } else if is_fy!(desc2.spec) && affirm_fy(priority, desc1, desc2) { [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] note: same as this [INFO] [stderr] --> src/parser.rs:319:70 [INFO] [stderr] | [INFO] [stderr] 319 | if is_yf!(desc1.spec) && affirm_yf(desc1, desc2) { [INFO] [stderr] | ______________________________________________________________________^ [INFO] [stderr] 320 | | self.push_unary_op(desc1, LTERM, Fixity::Post); [INFO] [stderr] 321 | | continue; [INFO] [stderr] 322 | | } else if is_xf!(desc1.spec) && affirm_xf(desc1, desc2) { [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: this boolean expression can be simplified [INFO] [stderr] --> src/parser.rs:390:20 [INFO] [stderr] | [INFO] [stderr] 390 | if !is_op!(self.stack[idx - 1].spec) && !self.stack[idx - 1].tt.is_sep() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `$x & (XF | YF | FX | FY | XFX | XFY | YFX) == 0 && !self.stack[idx - 1].tt.is_sep()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/parser.rs:406:26 [INFO] [stderr] | [INFO] [stderr] 406 | .map(|t| Box::new(t)) [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: remove closure as shown: `Box::new` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:648:9 [INFO] [stderr] | [INFO] [stderr] 648 | / match term { [INFO] [stderr] 649 | | &Term::Constant(_, ref c) => self.atomize_constant(c), [INFO] [stderr] 650 | | _ => None [INFO] [stderr] 651 | | } [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] 648 | match *term { [INFO] [stderr] 649 | Term::Constant(_, ref c) => self.atomize_constant(c), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:655:9 [INFO] [stderr] | [INFO] [stderr] 655 | / match c { [INFO] [stderr] 656 | | &Constant::Atom(ref name, _) => Some(name.clone()), [INFO] [stderr] 657 | | &Constant::Char(c) => [INFO] [stderr] 658 | | Some(clause_name!(c.to_string(), self.lexer.atom_tbl)), [INFO] [stderr] 659 | | _ => None [INFO] [stderr] 660 | | } [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] 655 | match *c { [INFO] [stderr] 656 | Constant::Atom(ref name, _) => Some(name.clone()), [INFO] [stderr] 657 | Constant::Char(c) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/lexer.rs:144:27 [INFO] [stderr] | [INFO] [stderr] 144 | while prolog_char!(c) && !comment_2_char!(c) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 144 | while graphic_char!($c) || alpha_numeric_char!($c) || solo_char!($c) || [INFO] [stderr] 145 | layout_char!($c) || meta_char!($c) && c != '*' { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/lexer.rs:155:24 [INFO] [stderr] | [INFO] [stderr] 155 | if !(prolog_char!(c) && !comment_1_char!(c)) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 155 | if $c == '/' || !graphic_char!($c) || alpha_numeric_char!($c) || solo_char!($c) || [INFO] [stderr] 156 | layout_char!($c) || meta_char!($c) { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/lexer.rs:181:16 [INFO] [stderr] | [INFO] [stderr] 181 | if !back_quote_char!(self.lookahead_char()?) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.lookahead_char()? != '`'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/lexer.rs:251:16 [INFO] [stderr] | [INFO] [stderr] 251 | if !single_quote_char!(self.lookahead_char()?) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.lookahead_char()? != '\''` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/lexer.rs:283:16 [INFO] [stderr] | [INFO] [stderr] 283 | if !double_quote_char!(self.lookahead_char()?) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.lookahead_char()? != '"'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/lexer.rs:291:60 [INFO] [stderr] | [INFO] [stderr] 291 | } else if back_quote_char!(self.lookahead_char()?) { [INFO] [stderr] | ____________________________________________________________^ [INFO] [stderr] 292 | | self.skip_char() [INFO] [stderr] 293 | | } else { [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] note: same as this [INFO] [stderr] --> src/lexer.rs:289:62 [INFO] [stderr] | [INFO] [stderr] 289 | } else if single_quote_char!(self.lookahead_char()?) { [INFO] [stderr] | ______________________________________________________________^ [INFO] [stderr] 290 | | self.skip_char() [INFO] [stderr] 291 | | } else if back_quote_char!(self.lookahead_char()?) { [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/ast.rs:159:9 [INFO] [stderr] | [INFO] [stderr] 159 | / match self { [INFO] [stderr] 160 | | &RegType::Perm(val) => write!(f, "Y{}", val), [INFO] [stderr] 161 | | &RegType::Temp(val) => write!(f, "X{}", val) [INFO] [stderr] 162 | | } [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] 159 | match *self { [INFO] [stderr] 160 | RegType::Perm(val) => write!(f, "Y{}", val), [INFO] [stderr] 161 | RegType::Temp(val) => write!(f, "X{}", val) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:182:9 [INFO] [stderr] | [INFO] [stderr] 182 | / match self { [INFO] [stderr] 183 | | &VarReg::Norm(RegType::Perm(reg)) => write!(f, "Y{}", reg), [INFO] [stderr] 184 | | &VarReg::Norm(RegType::Temp(reg)) => write!(f, "X{}", reg), [INFO] [stderr] 185 | | &VarReg::ArgAndNorm(RegType::Perm(reg), arg) => [INFO] [stderr] ... | [INFO] [stderr] 188 | | write!(f, "X{} A{}", reg, arg) [INFO] [stderr] 189 | | } [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] 182 | match *self { [INFO] [stderr] 183 | VarReg::Norm(RegType::Perm(reg)) => write!(f, "Y{}", reg), [INFO] [stderr] 184 | VarReg::Norm(RegType::Temp(reg)) => write!(f, "X{}", reg), [INFO] [stderr] 185 | VarReg::ArgAndNorm(RegType::Perm(reg), arg) => [INFO] [stderr] 186 | write!(f, "Y{} A{}", reg, arg), [INFO] [stderr] 187 | VarReg::ArgAndNorm(RegType::Temp(reg), arg) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/lexer.rs:543:38 [INFO] [stderr] | [INFO] [stderr] 543 | } else if semicolon_char!(c) { [INFO] [stderr] | ______________________________________^ [INFO] [stderr] 544 | | token.push(self.skip_char()?); [INFO] [stderr] 545 | | } else if single_quote_char!(c) { [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] note: same as this [INFO] [stderr] --> src/lexer.rs:541:32 [INFO] [stderr] | [INFO] [stderr] 541 | } else if cut_char!(c) { [INFO] [stderr] | ________________________________^ [INFO] [stderr] 542 | | token.push(self.skip_char()?); [INFO] [stderr] 543 | | } else if semicolon_char!(c) { [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/ast.rs:313:9 [INFO] [stderr] | [INFO] [stderr] 313 | / match self { [INFO] [stderr] 314 | | &ParserError::Arithmetic(_) => [INFO] [stderr] 315 | | "arithmetic_error", [INFO] [stderr] 316 | | &ParserError::BackQuotedString => [INFO] [stderr] ... | [INFO] [stderr] 359 | | "cannot_parse_cyclic_term" [INFO] [stderr] 360 | | } [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] 313 | match *self { [INFO] [stderr] 314 | ParserError::Arithmetic(_) => [INFO] [stderr] 315 | "arithmetic_error", [INFO] [stderr] 316 | ParserError::BackQuotedString => [INFO] [stderr] 317 | "back_quoted_string", [INFO] [stderr] 318 | ParserError::UnexpectedChar(_) => [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: you are deriving `Hash` but have implemented `PartialEq` explicitly [INFO] [stderr] --> src/ast.rs:387:17 [INFO] [stderr] | [INFO] [stderr] 387 | #[derive(Clone, Hash)] [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::derive_hash_xor_eq)] on by default [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/ast.rs:420:1 [INFO] [stderr] | [INFO] [stderr] 420 | / impl PartialEq for Constant { [INFO] [stderr] 421 | | fn eq(&self, other: &Constant) -> bool { [INFO] [stderr] 422 | | match (self, other) { [INFO] [stderr] 423 | | (&Constant::Atom(ref atom, _), &Constant::Char(c)) [INFO] [stderr] ... | [INFO] [stderr] 442 | | } [INFO] [stderr] 443 | | } [INFO] [stderr] | |_^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:399:9 [INFO] [stderr] | [INFO] [stderr] 399 | / match self { [INFO] [stderr] 400 | | &Constant::Atom(ref atom, _) => [INFO] [stderr] 401 | | if atom.as_str().chars().any(|c| "`.$'\" ".contains(c)) { [INFO] [stderr] 402 | | write!(f, "'{}'", atom.as_str()) [INFO] [stderr] ... | [INFO] [stderr] 415 | | write!(f, "u{}", integer) [INFO] [stderr] 416 | | } [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] 399 | match *self { [INFO] [stderr] 400 | Constant::Atom(ref atom, _) => [INFO] [stderr] 401 | if atom.as_str().chars().any(|c| "`.$'\" ".contains(c)) { [INFO] [stderr] 402 | write!(f, "'{}'", atom.as_str()) [INFO] [stderr] 403 | } else { [INFO] [stderr] 404 | write!(f, "{}", atom.as_str()) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you should use the `starts_with` method [INFO] [stderr] --> src/ast.rs:426:42 [INFO] [stderr] | [INFO] [stderr] 426 | c.len_utf8() == s.len() && Some(c) == s.chars().next() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: like this: `s.starts_with(c)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::chars_next_cmp)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#chars_next_cmp [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/ast.rs:448:20 [INFO] [stderr] | [INFO] [stderr] 448 | pub fn to_atom(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: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/ast.rs:455:23 [INFO] [stderr] | [INFO] [stderr] 455 | pub fn to_integer(self) -> Option> { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] error: aborting due to 6 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `prolog_parser`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:498:9 [INFO] [stderr] | [INFO] [stderr] 498 | / match self { [INFO] [stderr] 499 | | &Number::Float(fl) => write!(f, "{}", fl), [INFO] [stderr] 500 | | &Number::Integer(ref bi) => write!(f, "{}", bi), [INFO] [stderr] 501 | | &Number::Rational(ref r) => write!(f, "{}", r) [INFO] [stderr] 502 | | } [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] 498 | match *self { [INFO] [stderr] 499 | Number::Float(fl) => write!(f, "{}", fl), [INFO] [stderr] 500 | Number::Integer(ref bi) => write!(f, "{}", bi), [INFO] [stderr] 501 | Number::Rational(ref r) => write!(f, "{}", r) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:559:9 [INFO] [stderr] | [INFO] [stderr] 559 | / match self { [INFO] [stderr] 560 | | &ClauseName::User(ref name) => { [INFO] [stderr] 561 | | let module = name.owning_module(); [INFO] [stderr] 562 | | ClauseName::User(TabledRc { atom: module.clone(), [INFO] [stderr] ... | [INFO] [stderr] 565 | | _ => clause_name!("user") [INFO] [stderr] 566 | | } [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] 559 | match *self { [INFO] [stderr] 560 | ClauseName::User(ref name) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:571:9 [INFO] [stderr] | [INFO] [stderr] 571 | / match self { [INFO] [stderr] 572 | | &ClauseName::BuiltIn(s) => Rc::new(s.to_string()), [INFO] [stderr] 573 | | &ClauseName::User(ref rc) => rc.inner() [INFO] [stderr] 574 | | } [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] 571 | match *self { [INFO] [stderr] 572 | ClauseName::BuiltIn(s) => Rc::new(s.to_string()), [INFO] [stderr] 573 | ClauseName::User(ref rc) => rc.inner() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:589:9 [INFO] [stderr] | [INFO] [stderr] 589 | / match self { [INFO] [stderr] 590 | | &ClauseName::BuiltIn(s) => s, [INFO] [stderr] 591 | | &ClauseName::User(ref name) => name.as_ref() [INFO] [stderr] 592 | | } [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] 589 | match *self { [INFO] [stderr] 590 | ClauseName::BuiltIn(s) => s, [INFO] [stderr] 591 | ClauseName::User(ref name) => name.as_ref() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:745:9 [INFO] [stderr] | [INFO] [stderr] 745 | / match self { [INFO] [stderr] 746 | | &Number::Float(fl) => fl.into_inner().is_zero(), [INFO] [stderr] 747 | | &Number::Integer(ref bi) => bi.is_zero(), [INFO] [stderr] 748 | | &Number::Rational(ref r) => r.is_zero() [INFO] [stderr] 749 | | } [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] 745 | match *self { [INFO] [stderr] 746 | Number::Float(fl) => fl.into_inner().is_zero(), [INFO] [stderr] 747 | Number::Integer(ref bi) => bi.is_zero(), [INFO] [stderr] 748 | Number::Rational(ref r) => r.is_zero() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:754:9 [INFO] [stderr] | [INFO] [stderr] 754 | / match self { [INFO] [stderr] 755 | | &Number::Float(ref fl) => Number::Float(OrderedFloat(fl.into_inner().abs())), [INFO] [stderr] 756 | | &Number::Integer(ref n) => Number::Integer(Rc::new((*n).clone().abs())), [INFO] [stderr] 757 | | &Number::Rational(ref r) => Number::Rational(Rc::new((*r).clone().abs())) [INFO] [stderr] 758 | | } [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] 754 | match *self { [INFO] [stderr] 755 | Number::Float(ref fl) => Number::Float(OrderedFloat(fl.into_inner().abs())), [INFO] [stderr] 756 | Number::Integer(ref n) => Number::Integer(Rc::new((*n).clone().abs())), [INFO] [stderr] 757 | Number::Rational(ref r) => Number::Rational(Rc::new((*r).clone().abs())) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/ast.rs:931:24 [INFO] [stderr] | [INFO] [stderr] 931 | pub fn to_constant(self) -> Option { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:939:9 [INFO] [stderr] | [INFO] [stderr] 939 | / match self { [INFO] [stderr] 940 | | &Term::Clause(_, _, ref terms, _) => [INFO] [stderr] 941 | | terms.first().map(|bt| bt.as_ref()), [INFO] [stderr] 942 | | _ => None [INFO] [stderr] 943 | | } [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] 939 | match *self { [INFO] [stderr] 940 | Term::Clause(_, _, ref terms, _) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:947:9 [INFO] [stderr] | [INFO] [stderr] 947 | / match self { [INFO] [stderr] 948 | | &Term::Constant(_, Constant::Atom(ref atom, _)) [INFO] [stderr] 949 | | | &Term::Clause(_, ref atom, ..) => Some(atom.clone()), [INFO] [stderr] 950 | | _ => None [INFO] [stderr] 951 | | } [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] 947 | match *self { [INFO] [stderr] 948 | Term::Constant(_, Constant::Atom(ref atom, _)) [INFO] [stderr] 949 | | Term::Clause(_, ref atom, ..) => Some(atom.clone()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:955:9 [INFO] [stderr] | [INFO] [stderr] 955 | / match self { [INFO] [stderr] 956 | | &Term::Clause(_, _, ref child_terms, ..) => child_terms.len(), [INFO] [stderr] 957 | | _ => 0 [INFO] [stderr] 958 | | } [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] 955 | match *self { [INFO] [stderr] 956 | Term::Clause(_, _, ref child_terms, ..) => child_terms.len(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: you are implementing `Hash` explicitly but have derived `PartialEq` [INFO] [stderr] --> src/string_list.rs:9:1 [INFO] [stderr] | [INFO] [stderr] 9 | / impl Hash for StringListWrapper { [INFO] [stderr] 10 | | fn hash(&self, state: &mut H) { [INFO] [stderr] 11 | | self.0.borrow().hash(state) [INFO] [stderr] 12 | | } [INFO] [stderr] 13 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/string_list.rs:6:22 [INFO] [stderr] | [INFO] [stderr] 6 | #[derive(PartialOrd, PartialEq, Ord, Eq)] [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/parser.rs:73:5 [INFO] [stderr] | [INFO] [stderr] 73 | / is_term!(d2.spec) [INFO] [stderr] 74 | | && d2.priority < d1.priority [INFO] [stderr] 75 | | && is_lterm!(d2.spec) [INFO] [stderr] 76 | | && d2.priority < d1.priority [INFO] [stderr] | |____________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::nonminimal_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 73 | ($x & TERM) != 0 && d2.priority < d1.priority && ($x & LTERM) != 0 [INFO] [stderr] | [INFO] [stderr] 73 | !(($x & LTERM) == 0 || d2.priority >= d1.priority || ($x & TERM) == 0) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/parser.rs:194:21 [INFO] [stderr] | [INFO] [stderr] 194 | / match &name { [INFO] [stderr] 195 | | &Term::Clause(_, ref name, ..) [INFO] [stderr] 196 | | | &Term::Constant(_, Constant::Atom(ref name, _)) if name.as_str() == "-" => [INFO] [stderr] 197 | | if let Term::Constant(r, Constant::Number(n)) = arg1 { [INFO] [stderr] ... | [INFO] [stderr] 205 | | _ => {} [INFO] [stderr] 206 | | }; [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] 194 | match name { [INFO] [stderr] 195 | Term::Clause(_, ref name, ..) [INFO] [stderr] 196 | | Term::Constant(_, Constant::Atom(ref name, _)) if name.as_str() == "-" => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/parser.rs:306:25 [INFO] [stderr] | [INFO] [stderr] 306 | / { [INFO] [stderr] 307 | | self.push_binary_op(desc2, LTERM); [INFO] [stderr] 308 | | continue; [INFO] [stderr] 309 | | } [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/parser.rs:301:25 [INFO] [stderr] | [INFO] [stderr] 301 | / { [INFO] [stderr] 302 | | self.push_binary_op(desc2, LTERM); [INFO] [stderr] 303 | | continue; [INFO] [stderr] 304 | | } [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] error: this `if` has identical blocks [INFO] [stderr] --> src/parser.rs:322:77 [INFO] [stderr] | [INFO] [stderr] 322 | } else if is_xf!(desc1.spec) && affirm_xf(desc1, desc2) { [INFO] [stderr] | _____________________________________________________________________________^ [INFO] [stderr] 323 | | self.push_unary_op(desc1, LTERM, Fixity::Post); [INFO] [stderr] 324 | | continue; [INFO] [stderr] 325 | | } else if is_fy!(desc2.spec) && affirm_fy(priority, desc1, desc2) { [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] note: same as this [INFO] [stderr] --> src/parser.rs:319:70 [INFO] [stderr] | [INFO] [stderr] 319 | if is_yf!(desc1.spec) && affirm_yf(desc1, desc2) { [INFO] [stderr] | ______________________________________________________________________^ [INFO] [stderr] 320 | | self.push_unary_op(desc1, LTERM, Fixity::Post); [INFO] [stderr] 321 | | continue; [INFO] [stderr] 322 | | } else if is_xf!(desc1.spec) && affirm_xf(desc1, desc2) { [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: this boolean expression can be simplified [INFO] [stderr] --> src/parser.rs:390:20 [INFO] [stderr] | [INFO] [stderr] 390 | if !is_op!(self.stack[idx - 1].spec) && !self.stack[idx - 1].tt.is_sep() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `$x & (XF | YF | FX | FY | XFX | XFY | YFX) == 0 && !self.stack[idx - 1].tt.is_sep()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/parser.rs:406:26 [INFO] [stderr] | [INFO] [stderr] 406 | .map(|t| Box::new(t)) [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: remove closure as shown: `Box::new` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:648:9 [INFO] [stderr] | [INFO] [stderr] 648 | / match term { [INFO] [stderr] 649 | | &Term::Constant(_, ref c) => self.atomize_constant(c), [INFO] [stderr] 650 | | _ => None [INFO] [stderr] 651 | | } [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] 648 | match *term { [INFO] [stderr] 649 | Term::Constant(_, ref c) => self.atomize_constant(c), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:655:9 [INFO] [stderr] | [INFO] [stderr] 655 | / match c { [INFO] [stderr] 656 | | &Constant::Atom(ref name, _) => Some(name.clone()), [INFO] [stderr] 657 | | &Constant::Char(c) => [INFO] [stderr] 658 | | Some(clause_name!(c.to_string(), self.lexer.atom_tbl)), [INFO] [stderr] 659 | | _ => None [INFO] [stderr] 660 | | } [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] 655 | match *c { [INFO] [stderr] 656 | Constant::Atom(ref name, _) => Some(name.clone()), [INFO] [stderr] 657 | Constant::Char(c) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/lexer.rs:144:27 [INFO] [stderr] | [INFO] [stderr] 144 | while prolog_char!(c) && !comment_2_char!(c) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 144 | while graphic_char!($c) || alpha_numeric_char!($c) || solo_char!($c) || [INFO] [stderr] 145 | layout_char!($c) || meta_char!($c) && c != '*' { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/lexer.rs:155:24 [INFO] [stderr] | [INFO] [stderr] 155 | if !(prolog_char!(c) && !comment_1_char!(c)) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 155 | if $c == '/' || !graphic_char!($c) || alpha_numeric_char!($c) || solo_char!($c) || [INFO] [stderr] 156 | layout_char!($c) || meta_char!($c) { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/lexer.rs:181:16 [INFO] [stderr] | [INFO] [stderr] 181 | if !back_quote_char!(self.lookahead_char()?) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.lookahead_char()? != '`'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/lexer.rs:251:16 [INFO] [stderr] | [INFO] [stderr] 251 | if !single_quote_char!(self.lookahead_char()?) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.lookahead_char()? != '\''` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/lexer.rs:283:16 [INFO] [stderr] | [INFO] [stderr] 283 | if !double_quote_char!(self.lookahead_char()?) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.lookahead_char()? != '"'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/lexer.rs:291:60 [INFO] [stderr] | [INFO] [stderr] 291 | } else if back_quote_char!(self.lookahead_char()?) { [INFO] [stderr] | ____________________________________________________________^ [INFO] [stderr] 292 | | self.skip_char() [INFO] [stderr] 293 | | } else { [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] note: same as this [INFO] [stderr] --> src/lexer.rs:289:62 [INFO] [stderr] | [INFO] [stderr] 289 | } else if single_quote_char!(self.lookahead_char()?) { [INFO] [stderr] | ______________________________________________________________^ [INFO] [stderr] 290 | | self.skip_char() [INFO] [stderr] 291 | | } else if back_quote_char!(self.lookahead_char()?) { [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] error: this `if` has identical blocks [INFO] [stderr] --> src/lexer.rs:543:38 [INFO] [stderr] | [INFO] [stderr] 543 | } else if semicolon_char!(c) { [INFO] [stderr] | ______________________________________^ [INFO] [stderr] 544 | | token.push(self.skip_char()?); [INFO] [stderr] 545 | | } else if single_quote_char!(c) { [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] note: same as this [INFO] [stderr] --> src/lexer.rs:541:32 [INFO] [stderr] | [INFO] [stderr] 541 | } else if cut_char!(c) { [INFO] [stderr] | ________________________________^ [INFO] [stderr] 542 | | token.push(self.skip_char()?); [INFO] [stderr] 543 | | } else if semicolon_char!(c) { [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] error: aborting due to 6 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `prolog_parser`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "b91c5da2d4444c6f5ea651565d363c086fff2e1e727a133b850c7fe9ea76cb5e"` [INFO] running `"docker" "rm" "-f" "b91c5da2d4444c6f5ea651565d363c086fff2e1e727a133b850c7fe9ea76cb5e"` [INFO] [stdout] b91c5da2d4444c6f5ea651565d363c086fff2e1e727a133b850c7fe9ea76cb5e