[INFO] updating cached repository dlurton/compiler_in_rust [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/dlurton/compiler_in_rust [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/dlurton/compiler_in_rust" "work/ex/clippy-test-run/sources/stable/gh/dlurton/compiler_in_rust"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/dlurton/compiler_in_rust'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/dlurton/compiler_in_rust" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/dlurton/compiler_in_rust"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/dlurton/compiler_in_rust'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] ca3ad9ebc249ad43f0b067f7a4562788e0024ee1 [INFO] sha for GitHub repo dlurton/compiler_in_rust: ca3ad9ebc249ad43f0b067f7a4562788e0024ee1 [INFO] validating manifest of dlurton/compiler_in_rust 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 dlurton/compiler_in_rust 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 dlurton/compiler_in_rust [INFO] finished frobbing dlurton/compiler_in_rust [INFO] frobbed toml for dlurton/compiler_in_rust written to work/ex/clippy-test-run/sources/stable/gh/dlurton/compiler_in_rust/Cargo.toml [INFO] started frobbing dlurton/compiler_in_rust [INFO] finished frobbing dlurton/compiler_in_rust [INFO] frobbed toml for dlurton/compiler_in_rust written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/dlurton/compiler_in_rust/Cargo.toml [INFO] crate dlurton/compiler_in_rust has a lockfile. skipping [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting dlurton/compiler_in_rust against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-7/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/dlurton/compiler_in_rust:/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] 70d727ec43850cb975440443f8a4b658c05d4b1a08dcc5ef33ec6b6d82d7c8a0 [INFO] running `"docker" "start" "-a" "70d727ec43850cb975440443f8a4b658c05d4b1a08dcc5ef33ec6b6d82d7c8a0"` [INFO] [stderr] Checking compiler_in_rust v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/ast.rs:39:13 [INFO] [stderr] | [INFO] [stderr] 39 | op: op, [INFO] [stderr] | ^^^^^^ help: replace it with: `op` [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/parser.rs:60:18 [INFO] [stderr] | [INFO] [stderr] 60 | Parser { lexer: lexer } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `lexer` [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/error.rs:25:37 [INFO] [stderr] | [INFO] [stderr] 25 | SourceError:: { kind: kind, span: Span::from_location(loc) } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `kind` [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/env.rs:69:85 [INFO] [stderr] | [INFO] [stderr] 69 | self.fields.insert(String::from(name), EnvField { name: String::from(name), default_value: default_value, ordinal: ordinal }); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `default_value` [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/env.rs:69:115 [INFO] [stderr] | [INFO] [stderr] 69 | self.fields.insert(String::from(name), EnvField { name: String::from(name), default_value: default_value, ordinal: ordinal }); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `ordinal` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/ast.rs:39:13 [INFO] [stderr] | [INFO] [stderr] 39 | op: op, [INFO] [stderr] | ^^^^^^ help: replace it with: `op` [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/parser.rs:60:18 [INFO] [stderr] | [INFO] [stderr] 60 | Parser { lexer: lexer } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `lexer` [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/error.rs:25:37 [INFO] [stderr] | [INFO] [stderr] 25 | SourceError:: { kind: kind, span: Span::from_location(loc) } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `kind` [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/env.rs:69:85 [INFO] [stderr] | [INFO] [stderr] 69 | self.fields.insert(String::from(name), EnvField { name: String::from(name), default_value: default_value, ordinal: ordinal }); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `default_value` [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/env.rs:69:115 [INFO] [stderr] | [INFO] [stderr] 69 | self.fields.insert(String::from(name), EnvField { name: String::from(name), default_value: default_value, ordinal: ordinal }); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `ordinal` [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: unneeded return statement [INFO] [stderr] --> src/lexer.rs:95:9 [INFO] [stderr] | [INFO] [stderr] 95 | / return Lexer { [INFO] [stderr] 96 | | reader: CharsReader::new(chars), [INFO] [stderr] 97 | | lookahead: VecDeque::new(), [INFO] [stderr] 98 | | } [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] 95 | Lexer { [INFO] [stderr] 96 | reader: CharsReader::new(chars), [INFO] [stderr] 97 | lookahead: VecDeque::new(), [INFO] [stderr] 98 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lexer.rs:103:9 [INFO] [stderr] | [INFO] [stderr] 103 | / return if !self.lookahead.is_empty() { [INFO] [stderr] 104 | | if let Some(&LexResult::EndOfInput(_)) = self.lookahead.front() { [INFO] [stderr] 105 | | false [INFO] [stderr] 106 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 111 | | self.reader.has_more() [INFO] [stderr] 112 | | } [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] 103 | if !self.lookahead.is_empty() { [INFO] [stderr] 104 | if let Some(&LexResult::EndOfInput(_)) = self.lookahead.front() { [INFO] [stderr] 105 | false [INFO] [stderr] 106 | } else { [INFO] [stderr] 107 | true [INFO] [stderr] 108 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/lexer.rs:145:16 [INFO] [stderr] | [INFO] [stderr] 145 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 146 | | if let Some(token) = self.read_single_char_token() { [INFO] [stderr] 147 | | LexResult::Ok(token) [INFO] [stderr] 148 | | } else if let Some(token) = self.read_literal_number() { [INFO] [stderr] ... | [INFO] [stderr] 158 | | } [INFO] [stderr] 159 | | } [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] 145 | } else if let Some(token) = self.read_single_char_token() { [INFO] [stderr] 146 | LexResult::Ok(token) [INFO] [stderr] 147 | } else if let Some(token) = self.read_literal_number() { [INFO] [stderr] 148 | LexResult::Ok(token) [INFO] [stderr] 149 | } else if let Some(token) = self.read_identifier() { [INFO] [stderr] 150 | LexResult::Ok(token) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:72:9 [INFO] [stderr] | [INFO] [stderr] 72 | / return match exprs.len() { [INFO] [stderr] 73 | | 0 => Err(ParseError::new_with_location(ParseErrorKind::EmptyExpr, Location::start())), [INFO] [stderr] 74 | | 1 => Ok(*exprs.pop().unwrap()), //Note: .pop() should never return None because .len() == 1 [INFO] [stderr] 75 | | _ => Ok({ [INFO] [stderr] ... | [INFO] [stderr] 79 | | }) [INFO] [stderr] 80 | | } [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] 72 | match exprs.len() { [INFO] [stderr] 73 | 0 => Err(ParseError::new_with_location(ParseErrorKind::EmptyExpr, Location::start())), [INFO] [stderr] 74 | 1 => Ok(*exprs.pop().unwrap()), //Note: .pop() should never return None because .len() == 1 [INFO] [stderr] 75 | _ => Ok({ [INFO] [stderr] 76 | let first_span = exprs[0].span.clone(); [INFO] [stderr] 77 | let last_span = exprs[exprs.len() - 1].span.clone(); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: All the struct fields are matched to a wildcard pattern, consider using `..`. [INFO] [stderr] --> src/passes/mod.rs:37:14 [INFO] [stderr] | [INFO] [stderr] 37 | &ExprKind::Literal{ value: _ } | [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unneeded_field_pattern)] on by default [INFO] [stderr] = help: Try with `Literal { .. }` instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: All the struct fields are matched to a wildcard pattern, consider using `..`. [INFO] [stderr] --> src/passes/mod.rs:38:14 [INFO] [stderr] | [INFO] [stderr] 38 | &ExprKind::VariableRef { name: _ } | [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Try with `VariableRef { .. }` instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: All the struct fields are matched to a wildcard pattern, consider using `..`. [INFO] [stderr] --> src/passes/mod.rs:39:14 [INFO] [stderr] | [INFO] [stderr] 39 | &ExprKind::VariableIndex { index: _ } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Try with `VariableIndex { .. }` instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lexer.rs:95:9 [INFO] [stderr] | [INFO] [stderr] 95 | / return Lexer { [INFO] [stderr] 96 | | reader: CharsReader::new(chars), [INFO] [stderr] 97 | | lookahead: VecDeque::new(), [INFO] [stderr] 98 | | } [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] 95 | Lexer { [INFO] [stderr] 96 | reader: CharsReader::new(chars), [INFO] [stderr] 97 | lookahead: VecDeque::new(), [INFO] [stderr] 98 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lexer.rs:103:9 [INFO] [stderr] | [INFO] [stderr] 103 | / return if !self.lookahead.is_empty() { [INFO] [stderr] 104 | | if let Some(&LexResult::EndOfInput(_)) = self.lookahead.front() { [INFO] [stderr] 105 | | false [INFO] [stderr] 106 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 111 | | self.reader.has_more() [INFO] [stderr] 112 | | } [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] 103 | if !self.lookahead.is_empty() { [INFO] [stderr] 104 | if let Some(&LexResult::EndOfInput(_)) = self.lookahead.front() { [INFO] [stderr] 105 | false [INFO] [stderr] 106 | } else { [INFO] [stderr] 107 | true [INFO] [stderr] 108 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/lexer.rs:145:16 [INFO] [stderr] | [INFO] [stderr] 145 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 146 | | if let Some(token) = self.read_single_char_token() { [INFO] [stderr] 147 | | LexResult::Ok(token) [INFO] [stderr] 148 | | } else if let Some(token) = self.read_literal_number() { [INFO] [stderr] ... | [INFO] [stderr] 158 | | } [INFO] [stderr] 159 | | } [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] 145 | } else if let Some(token) = self.read_single_char_token() { [INFO] [stderr] 146 | LexResult::Ok(token) [INFO] [stderr] 147 | } else if let Some(token) = self.read_literal_number() { [INFO] [stderr] 148 | LexResult::Ok(token) [INFO] [stderr] 149 | } else if let Some(token) = self.read_identifier() { [INFO] [stderr] 150 | LexResult::Ok(token) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:72:9 [INFO] [stderr] | [INFO] [stderr] 72 | / return match exprs.len() { [INFO] [stderr] 73 | | 0 => Err(ParseError::new_with_location(ParseErrorKind::EmptyExpr, Location::start())), [INFO] [stderr] 74 | | 1 => Ok(*exprs.pop().unwrap()), //Note: .pop() should never return None because .len() == 1 [INFO] [stderr] 75 | | _ => Ok({ [INFO] [stderr] ... | [INFO] [stderr] 79 | | }) [INFO] [stderr] 80 | | } [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] 72 | match exprs.len() { [INFO] [stderr] 73 | 0 => Err(ParseError::new_with_location(ParseErrorKind::EmptyExpr, Location::start())), [INFO] [stderr] 74 | 1 => Ok(*exprs.pop().unwrap()), //Note: .pop() should never return None because .len() == 1 [INFO] [stderr] 75 | _ => Ok({ [INFO] [stderr] 76 | let first_span = exprs[0].span.clone(); [INFO] [stderr] 77 | let last_span = exprs[exprs.len() - 1].span.clone(); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: All the struct fields are matched to a wildcard pattern, consider using `..`. [INFO] [stderr] --> src/passes/mod.rs:37:14 [INFO] [stderr] | [INFO] [stderr] 37 | &ExprKind::Literal{ value: _ } | [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unneeded_field_pattern)] on by default [INFO] [stderr] = help: Try with `Literal { .. }` instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: All the struct fields are matched to a wildcard pattern, consider using `..`. [INFO] [stderr] --> src/passes/mod.rs:38:14 [INFO] [stderr] | [INFO] [stderr] 38 | &ExprKind::VariableRef { name: _ } | [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Try with `VariableRef { .. }` instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: All the struct fields are matched to a wildcard pattern, consider using `..`. [INFO] [stderr] --> src/passes/mod.rs:39:14 [INFO] [stderr] | [INFO] [stderr] 39 | &ExprKind::VariableIndex { index: _ } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Try with `VariableIndex { .. }` instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/source.rs:31:17 [INFO] [stderr] | [INFO] [stderr] 31 | pub fn next(&self) -> Location { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/source.rs:35:22 [INFO] [stderr] | [INFO] [stderr] 35 | pub fn next_line(&self) -> Location { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/source.rs:55:23 [INFO] [stderr] | [INFO] [stderr] 55 | Span { start: loc.clone(), end: loc } [INFO] [stderr] | ^^^^^^^^^^^ help: try removing the `clone` call: `loc` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/input.rs:22:28 [INFO] [stderr] | [INFO] [stderr] 22 | Some(ref l) => l.clone() [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*l` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: defining a method called `next` on this type; consider implementing the `std::iter::Iterator` trait or choosing a less ambiguous name [INFO] [stderr] --> src/input.rs:26:5 [INFO] [stderr] | [INFO] [stderr] 26 | / pub fn next(&mut self) -> Option { [INFO] [stderr] 27 | | //Note: prime() will do nothing if end of stream has been previously reached. [INFO] [stderr] 28 | | self.prime(1); [INFO] [stderr] 29 | | [INFO] [stderr] ... | [INFO] [stderr] 39 | | } [INFO] [stderr] 40 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/input.rs:53:68 [INFO] [stderr] | [INFO] [stderr] 53 | if n as usize >= self.lookahead.len() { None } else { Some(self.lookahead[n as usize].clone()) } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.lookahead[n as usize]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lexer.rs:18:9 [INFO] [stderr] | [INFO] [stderr] 18 | / match self { [INFO] [stderr] 19 | | &LexerErrorKind::InvalidInteger(ref text) => format!("Invalid integer: '{}'", text), [INFO] [stderr] 20 | | &LexerErrorKind::InvalidCharacter(ref chr) => format!("Invalid character: '{}'", chr), [INFO] [stderr] 21 | | } [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] 18 | match *self { [INFO] [stderr] 19 | LexerErrorKind::InvalidInteger(ref text) => format!("Invalid integer: '{}'", text), [INFO] [stderr] 20 | LexerErrorKind::InvalidCharacter(ref chr) => format!("Invalid character: '{}'", chr), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lexer.rs:39:9 [INFO] [stderr] | [INFO] [stderr] 39 | / match self { [INFO] [stderr] 40 | | &TokenKind::LiteralInt32(ref n) => write!(f, "literal integer {}", n), [INFO] [stderr] 41 | | &TokenKind::Identifier(ref text) => write!(f, "identifier \"{}\"", text), [INFO] [stderr] 42 | | &TokenKind::BinaryOperator(ref op) => match op { [INFO] [stderr] ... | [INFO] [stderr] 48 | | } [INFO] [stderr] 49 | | } [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] 39 | match *self { [INFO] [stderr] 40 | TokenKind::LiteralInt32(ref n) => write!(f, "literal integer {}", n), [INFO] [stderr] 41 | TokenKind::Identifier(ref text) => write!(f, "identifier \"{}\"", text), [INFO] [stderr] 42 | TokenKind::BinaryOperator(ref op) => match op { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lexer.rs:42:51 [INFO] [stderr] | [INFO] [stderr] 42 | &TokenKind::BinaryOperator(ref op) => match op { [INFO] [stderr] | ___________________________________________________^ [INFO] [stderr] 43 | | &BinaryOp::Add => write!(f, "operator +"), [INFO] [stderr] 44 | | &BinaryOp::Sub => write!(f, "operator -"), [INFO] [stderr] 45 | | &BinaryOp::Mul => write!(f, "operator *"), [INFO] [stderr] 46 | | &BinaryOp::Div => write!(f, "operator /"), [INFO] [stderr] 47 | | &BinaryOp::Mod => write!(f, "operator %"), [INFO] [stderr] 48 | | } [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] 42 | &TokenKind::BinaryOperator(ref op) => match *op { [INFO] [stderr] 43 | BinaryOp::Add => write!(f, "operator +"), [INFO] [stderr] 44 | BinaryOp::Sub => write!(f, "operator -"), [INFO] [stderr] 45 | BinaryOp::Mul => write!(f, "operator *"), [INFO] [stderr] 46 | BinaryOp::Div => write!(f, "operator /"), [INFO] [stderr] 47 | BinaryOp::Mod => write!(f, "operator %"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: defining a method called `next` on this type; consider implementing the `std::iter::Iterator` trait or choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:115:5 [INFO] [stderr] | [INFO] [stderr] 115 | / pub fn next(&mut self) -> LexResult { [INFO] [stderr] 116 | | self.prime(1); [INFO] [stderr] 117 | | [INFO] [stderr] 118 | | //Note: pop_front() shouldn't ever return None after call to self.prime(1) [INFO] [stderr] 119 | | self.lookahead.pop_front().unwrap() [INFO] [stderr] 120 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/lexer.rs:190:53 [INFO] [stderr] | [INFO] [stderr] 190 | if let Some((text, span)) = self.read_token(|c| is_digit(c), |c| is_digit(c)) { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: remove closure as shown: `is_digit` [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/lexer.rs:190:70 [INFO] [stderr] | [INFO] [stderr] 190 | if let Some((text, span)) = self.read_token(|c| is_digit(c), |c| is_digit(c)) { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: remove closure as shown: `is_digit` [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/lexer.rs:203:53 [INFO] [stderr] | [INFO] [stderr] 203 | if let Some((text, span)) = self.read_token(|c| is_letter(c), |c| is_letter(c) || is_digit(c)) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: remove closure as shown: `is_letter` [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: re-implementing `PartialEq::ne` is unnecessary [INFO] [stderr] --> src/ast.rs:82:5 [INFO] [stderr] | [INFO] [stderr] 82 | / fn ne(&self, other: &Expr) -> bool { [INFO] [stderr] 83 | | self.kind != other.kind [INFO] [stderr] 84 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::partialeq_ne_impl)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_ne_impl [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | / if let &TokenKind::BinaryOperator(ref kind) = token_kind { [INFO] [stderr] 16 | | match kind { [INFO] [stderr] 17 | | &BinaryOp::Add | &BinaryOp::Sub => 10, [INFO] [stderr] 18 | | &BinaryOp::Mul | &BinaryOp::Div => 20, [INFO] [stderr] ... | [INFO] [stderr] 22 | | 0 [INFO] [stderr] 23 | | } [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] 15 | if let TokenKind::BinaryOperator(ref kind) = *token_kind { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:16:9 [INFO] [stderr] | [INFO] [stderr] 16 | / match kind { [INFO] [stderr] 17 | | &BinaryOp::Add | &BinaryOp::Sub => 10, [INFO] [stderr] 18 | | &BinaryOp::Mul | &BinaryOp::Div => 20, [INFO] [stderr] 19 | | _ => 0 [INFO] [stderr] 20 | | } [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] 16 | match *kind { [INFO] [stderr] 17 | BinaryOp::Add | BinaryOp::Sub => 10, [INFO] [stderr] 18 | BinaryOp::Mul | BinaryOp::Div => 20, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:37:9 [INFO] [stderr] | [INFO] [stderr] 37 | / match self { [INFO] [stderr] 38 | | &ParseErrorKind::LexerError(ref le) => le.message(), [INFO] [stderr] 39 | | &ParseErrorKind::EmptyExpr => String::from("No expressions were found"), [INFO] [stderr] 40 | | &ParseErrorKind::ExpectedBinaryOperator(ref tok) => format!("Expected binary operator but found: {}", tok), [INFO] [stderr] 41 | | &ParseErrorKind::InvalidPrefixExpressionTerm(ref tok) => format!("Invalid prefix expression term: {}", tok), [INFO] [stderr] 42 | | &ParseErrorKind::UnexpectedEndOfInput => String::from("Unexpected end of input") [INFO] [stderr] 43 | | } [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] 37 | match *self { [INFO] [stderr] 38 | ParseErrorKind::LexerError(ref le) => le.message(), [INFO] [stderr] 39 | ParseErrorKind::EmptyExpr => String::from("No expressions were found"), [INFO] [stderr] 40 | ParseErrorKind::ExpectedBinaryOperator(ref tok) => format!("Expected binary operator but found: {}", tok), [INFO] [stderr] 41 | ParseErrorKind::InvalidPrefixExpressionTerm(ref tok) => format!("Invalid prefix expression term: {}", tok), [INFO] [stderr] 42 | ParseErrorKind::UnexpectedEndOfInput => String::from("Unexpected end of input") [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:76:38 [INFO] [stderr] | [INFO] [stderr] 76 | let first_span = exprs[0].span.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `exprs[0].span` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:77:37 [INFO] [stderr] | [INFO] [stderr] 77 | let last_span = exprs[exprs.len() - 1].span.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `exprs[exprs.len() - 1].span` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:142:57 [INFO] [stderr] | [INFO] [stderr] 142 | let span = Span::from_locations(left.span.start.clone(), right.span.end.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `left.span.start` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:142:82 [INFO] [stderr] | [INFO] [stderr] 142 | let span = Span::from_locations(left.span.start.clone(), right.span.end.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `right.span.end` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/passes/resolve_variables.rs:11:13 [INFO] [stderr] | [INFO] [stderr] 11 | / match kind { [INFO] [stderr] 12 | | &ExprKind::VariableRef { ref name } => [INFO] [stderr] 13 | | Some(match global_def.find(&name[..]) { [INFO] [stderr] 14 | | Some(field) => Ok(Expr::new_variable_index_with_span(field.ordinal, expr.span)), [INFO] [stderr] ... | [INFO] [stderr] 20 | | _ => None [INFO] [stderr] 21 | | } [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] 11 | match *kind { [INFO] [stderr] 12 | ExprKind::VariableRef { ref name } => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/passes/resolve_variables.rs:18:33 [INFO] [stderr] | [INFO] [stderr] 18 | expr.span.clone())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `expr.span` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/passes/evaluate.rs:13:9 [INFO] [stderr] | [INFO] [stderr] 13 | / match self { [INFO] [stderr] 14 | | &EvaluateErrorKind::IndexOutOfRange(index) => format!("Index {} was out of range.", index) [INFO] [stderr] 15 | | } [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] 13 | match *self { [INFO] [stderr] 14 | EvaluateErrorKind::IndexOutOfRange(index) => format!("Index {} was out of range.", index) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/passes/mod.rs:22:9 [INFO] [stderr] | [INFO] [stderr] 22 | / match self { [INFO] [stderr] 23 | | &PassErrorKind::VariableDoesNotExist{ref variable_name} => format!("Variable '{}' does not exist", variable_name) [INFO] [stderr] 24 | | } [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] 22 | match *self { [INFO] [stderr] 23 | PassErrorKind::VariableDoesNotExist{ref variable_name} => format!("Variable '{}' does not exist", variable_name) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/passes/mod.rs:36:17 [INFO] [stderr] | [INFO] [stderr] 36 | None => match &expr.kind { [INFO] [stderr] | _________________^ [INFO] [stderr] 37 | | &ExprKind::Literal{ value: _ } | [INFO] [stderr] 38 | | &ExprKind::VariableRef { name: _ } | [INFO] [stderr] 39 | | &ExprKind::VariableIndex { index: _ } [INFO] [stderr] ... | [INFO] [stderr] 67 | | } [INFO] [stderr] 68 | | } [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] 36 | None => match expr.kind { [INFO] [stderr] 37 | ExprKind::Literal{ value: _ } | [INFO] [stderr] 38 | ExprKind::VariableRef { name: _ } | [INFO] [stderr] 39 | ExprKind::VariableIndex { index: _ } [INFO] [stderr] 40 | => Ok((*expr).clone()), [INFO] [stderr] 41 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you probably are missing some parameter in your format string [INFO] [stderr] --> src/env.rs:52:98 [INFO] [stderr] | [INFO] [stderr] 52 | Some(field) => Some(self.values.get(field.ordinal as usize).unwrap_or_else(|| panic!("Index {:?} referenced by name '{:?} was invalid"))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::panic_params)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#panic_params [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `env::EnvDefBuilder` [INFO] [stderr] --> src/env.rs:63:5 [INFO] [stderr] | [INFO] [stderr] 63 | / pub fn new() -> EnvDefBuilder { [INFO] [stderr] 64 | | EnvDefBuilder { fields: HashMap::new() } [INFO] [stderr] 65 | | } [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] 58 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:43:9 [INFO] [stderr] | [INFO] [stderr] 43 | / match self { [INFO] [stderr] 44 | | &ExecuteErrorKind::Parse(ref kind) => kind.message(), [INFO] [stderr] 45 | | &ExecuteErrorKind::Evaluate(ref kind) => kind.message(), [INFO] [stderr] 46 | | &ExecuteErrorKind::Pass(ref kind) => kind.message() [INFO] [stderr] 47 | | } [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] 43 | match *self { [INFO] [stderr] 44 | ExecuteErrorKind::Parse(ref kind) => kind.message(), [INFO] [stderr] 45 | ExecuteErrorKind::Evaluate(ref kind) => kind.message(), [INFO] [stderr] 46 | ExecuteErrorKind::Pass(ref kind) => kind.message() [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/source.rs:31:17 [INFO] [stderr] | [INFO] [stderr] 31 | pub fn next(&self) -> Location { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/source.rs:35:22 [INFO] [stderr] | [INFO] [stderr] 35 | pub fn next_line(&self) -> Location { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/source.rs:55:23 [INFO] [stderr] | [INFO] [stderr] 55 | Span { start: loc.clone(), end: loc } [INFO] [stderr] | ^^^^^^^^^^^ help: try removing the `clone` call: `loc` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/input.rs:22:28 [INFO] [stderr] | [INFO] [stderr] 22 | Some(ref l) => l.clone() [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*l` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: defining a method called `next` on this type; consider implementing the `std::iter::Iterator` trait or choosing a less ambiguous name [INFO] [stderr] --> src/input.rs:26:5 [INFO] [stderr] | [INFO] [stderr] 26 | / pub fn next(&mut self) -> Option { [INFO] [stderr] 27 | | //Note: prime() will do nothing if end of stream has been previously reached. [INFO] [stderr] 28 | | self.prime(1); [INFO] [stderr] 29 | | [INFO] [stderr] ... | [INFO] [stderr] 39 | | } [INFO] [stderr] 40 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/input.rs:53:68 [INFO] [stderr] | [INFO] [stderr] 53 | if n as usize >= self.lookahead.len() { None } else { Some(self.lookahead[n as usize].clone()) } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.lookahead[n as usize]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lexer.rs:18:9 [INFO] [stderr] | [INFO] [stderr] 18 | / match self { [INFO] [stderr] 19 | | &LexerErrorKind::InvalidInteger(ref text) => format!("Invalid integer: '{}'", text), [INFO] [stderr] 20 | | &LexerErrorKind::InvalidCharacter(ref chr) => format!("Invalid character: '{}'", chr), [INFO] [stderr] 21 | | } [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] 18 | match *self { [INFO] [stderr] 19 | LexerErrorKind::InvalidInteger(ref text) => format!("Invalid integer: '{}'", text), [INFO] [stderr] 20 | LexerErrorKind::InvalidCharacter(ref chr) => format!("Invalid character: '{}'", chr), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lexer.rs:39:9 [INFO] [stderr] | [INFO] [stderr] 39 | / match self { [INFO] [stderr] 40 | | &TokenKind::LiteralInt32(ref n) => write!(f, "literal integer {}", n), [INFO] [stderr] 41 | | &TokenKind::Identifier(ref text) => write!(f, "identifier \"{}\"", text), [INFO] [stderr] 42 | | &TokenKind::BinaryOperator(ref op) => match op { [INFO] [stderr] ... | [INFO] [stderr] 48 | | } [INFO] [stderr] 49 | | } [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] 39 | match *self { [INFO] [stderr] 40 | TokenKind::LiteralInt32(ref n) => write!(f, "literal integer {}", n), [INFO] [stderr] 41 | TokenKind::Identifier(ref text) => write!(f, "identifier \"{}\"", text), [INFO] [stderr] 42 | TokenKind::BinaryOperator(ref op) => match op { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lexer.rs:42:51 [INFO] [stderr] | [INFO] [stderr] 42 | &TokenKind::BinaryOperator(ref op) => match op { [INFO] [stderr] | ___________________________________________________^ [INFO] [stderr] 43 | | &BinaryOp::Add => write!(f, "operator +"), [INFO] [stderr] 44 | | &BinaryOp::Sub => write!(f, "operator -"), [INFO] [stderr] 45 | | &BinaryOp::Mul => write!(f, "operator *"), [INFO] [stderr] 46 | | &BinaryOp::Div => write!(f, "operator /"), [INFO] [stderr] 47 | | &BinaryOp::Mod => write!(f, "operator %"), [INFO] [stderr] 48 | | } [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] 42 | &TokenKind::BinaryOperator(ref op) => match *op { [INFO] [stderr] 43 | BinaryOp::Add => write!(f, "operator +"), [INFO] [stderr] 44 | BinaryOp::Sub => write!(f, "operator -"), [INFO] [stderr] 45 | BinaryOp::Mul => write!(f, "operator *"), [INFO] [stderr] 46 | BinaryOp::Div => write!(f, "operator /"), [INFO] [stderr] 47 | BinaryOp::Mod => write!(f, "operator %"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: defining a method called `next` on this type; consider implementing the `std::iter::Iterator` trait or choosing a less ambiguous name [INFO] [stderr] --> src/lexer.rs:115:5 [INFO] [stderr] | [INFO] [stderr] 115 | / pub fn next(&mut self) -> LexResult { [INFO] [stderr] 116 | | self.prime(1); [INFO] [stderr] 117 | | [INFO] [stderr] 118 | | //Note: pop_front() shouldn't ever return None after call to self.prime(1) [INFO] [stderr] 119 | | self.lookahead.pop_front().unwrap() [INFO] [stderr] 120 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/lexer.rs:190:53 [INFO] [stderr] | [INFO] [stderr] 190 | if let Some((text, span)) = self.read_token(|c| is_digit(c), |c| is_digit(c)) { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: remove closure as shown: `is_digit` [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/lexer.rs:190:70 [INFO] [stderr] | [INFO] [stderr] 190 | if let Some((text, span)) = self.read_token(|c| is_digit(c), |c| is_digit(c)) { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: remove closure as shown: `is_digit` [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/lexer.rs:203:53 [INFO] [stderr] | [INFO] [stderr] 203 | if let Some((text, span)) = self.read_token(|c| is_letter(c), |c| is_letter(c) || is_digit(c)) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: remove closure as shown: `is_letter` [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: re-implementing `PartialEq::ne` is unnecessary [INFO] [stderr] --> src/ast.rs:82:5 [INFO] [stderr] | [INFO] [stderr] 82 | / fn ne(&self, other: &Expr) -> bool { [INFO] [stderr] 83 | | self.kind != other.kind [INFO] [stderr] 84 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::partialeq_ne_impl)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_ne_impl [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | / if let &TokenKind::BinaryOperator(ref kind) = token_kind { [INFO] [stderr] 16 | | match kind { [INFO] [stderr] 17 | | &BinaryOp::Add | &BinaryOp::Sub => 10, [INFO] [stderr] 18 | | &BinaryOp::Mul | &BinaryOp::Div => 20, [INFO] [stderr] ... | [INFO] [stderr] 22 | | 0 [INFO] [stderr] 23 | | } [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] 15 | if let TokenKind::BinaryOperator(ref kind) = *token_kind { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:16:9 [INFO] [stderr] | [INFO] [stderr] 16 | / match kind { [INFO] [stderr] 17 | | &BinaryOp::Add | &BinaryOp::Sub => 10, [INFO] [stderr] 18 | | &BinaryOp::Mul | &BinaryOp::Div => 20, [INFO] [stderr] 19 | | _ => 0 [INFO] [stderr] 20 | | } [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] 16 | match *kind { [INFO] [stderr] 17 | BinaryOp::Add | BinaryOp::Sub => 10, [INFO] [stderr] 18 | BinaryOp::Mul | BinaryOp::Div => 20, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:37:9 [INFO] [stderr] | [INFO] [stderr] 37 | / match self { [INFO] [stderr] 38 | | &ParseErrorKind::LexerError(ref le) => le.message(), [INFO] [stderr] 39 | | &ParseErrorKind::EmptyExpr => String::from("No expressions were found"), [INFO] [stderr] 40 | | &ParseErrorKind::ExpectedBinaryOperator(ref tok) => format!("Expected binary operator but found: {}", tok), [INFO] [stderr] 41 | | &ParseErrorKind::InvalidPrefixExpressionTerm(ref tok) => format!("Invalid prefix expression term: {}", tok), [INFO] [stderr] 42 | | &ParseErrorKind::UnexpectedEndOfInput => String::from("Unexpected end of input") [INFO] [stderr] 43 | | } [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] 37 | match *self { [INFO] [stderr] 38 | ParseErrorKind::LexerError(ref le) => le.message(), [INFO] [stderr] 39 | ParseErrorKind::EmptyExpr => String::from("No expressions were found"), [INFO] [stderr] 40 | ParseErrorKind::ExpectedBinaryOperator(ref tok) => format!("Expected binary operator but found: {}", tok), [INFO] [stderr] 41 | ParseErrorKind::InvalidPrefixExpressionTerm(ref tok) => format!("Invalid prefix expression term: {}", tok), [INFO] [stderr] 42 | ParseErrorKind::UnexpectedEndOfInput => String::from("Unexpected end of input") [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:76:38 [INFO] [stderr] | [INFO] [stderr] 76 | let first_span = exprs[0].span.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `exprs[0].span` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:77:37 [INFO] [stderr] | [INFO] [stderr] 77 | let last_span = exprs[exprs.len() - 1].span.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `exprs[exprs.len() - 1].span` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:142:57 [INFO] [stderr] | [INFO] [stderr] 142 | let span = Span::from_locations(left.span.start.clone(), right.span.end.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `left.span.start` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/parser.rs:142:82 [INFO] [stderr] | [INFO] [stderr] 142 | let span = Span::from_locations(left.span.start.clone(), right.span.end.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `right.span.end` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/passes/resolve_variables.rs:11:13 [INFO] [stderr] | [INFO] [stderr] 11 | / match kind { [INFO] [stderr] 12 | | &ExprKind::VariableRef { ref name } => [INFO] [stderr] 13 | | Some(match global_def.find(&name[..]) { [INFO] [stderr] 14 | | Some(field) => Ok(Expr::new_variable_index_with_span(field.ordinal, expr.span)), [INFO] [stderr] ... | [INFO] [stderr] 20 | | _ => None [INFO] [stderr] 21 | | } [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] 11 | match *kind { [INFO] [stderr] 12 | ExprKind::VariableRef { ref name } => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/passes/resolve_variables.rs:18:33 [INFO] [stderr] | [INFO] [stderr] 18 | expr.span.clone())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `expr.span` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/passes/evaluate.rs:13:9 [INFO] [stderr] | [INFO] [stderr] 13 | / match self { [INFO] [stderr] 14 | | &EvaluateErrorKind::IndexOutOfRange(index) => format!("Index {} was out of range.", index) [INFO] [stderr] 15 | | } [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] 13 | match *self { [INFO] [stderr] 14 | EvaluateErrorKind::IndexOutOfRange(index) => format!("Index {} was out of range.", index) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/passes/mod.rs:22:9 [INFO] [stderr] | [INFO] [stderr] 22 | / match self { [INFO] [stderr] 23 | | &PassErrorKind::VariableDoesNotExist{ref variable_name} => format!("Variable '{}' does not exist", variable_name) [INFO] [stderr] 24 | | } [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] 22 | match *self { [INFO] [stderr] 23 | PassErrorKind::VariableDoesNotExist{ref variable_name} => format!("Variable '{}' does not exist", variable_name) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/passes/mod.rs:36:17 [INFO] [stderr] | [INFO] [stderr] 36 | None => match &expr.kind { [INFO] [stderr] | _________________^ [INFO] [stderr] 37 | | &ExprKind::Literal{ value: _ } | [INFO] [stderr] 38 | | &ExprKind::VariableRef { name: _ } | [INFO] [stderr] 39 | | &ExprKind::VariableIndex { index: _ } [INFO] [stderr] ... | [INFO] [stderr] 67 | | } [INFO] [stderr] 68 | | } [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] 36 | None => match expr.kind { [INFO] [stderr] 37 | ExprKind::Literal{ value: _ } | [INFO] [stderr] 38 | ExprKind::VariableRef { name: _ } | [INFO] [stderr] 39 | ExprKind::VariableIndex { index: _ } [INFO] [stderr] 40 | => Ok((*expr).clone()), [INFO] [stderr] 41 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you probably are missing some parameter in your format string [INFO] [stderr] --> src/env.rs:52:98 [INFO] [stderr] | [INFO] [stderr] 52 | Some(field) => Some(self.values.get(field.ordinal as usize).unwrap_or_else(|| panic!("Index {:?} referenced by name '{:?} was invalid"))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::panic_params)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#panic_params [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `env::EnvDefBuilder` [INFO] [stderr] --> src/env.rs:63:5 [INFO] [stderr] | [INFO] [stderr] 63 | / pub fn new() -> EnvDefBuilder { [INFO] [stderr] 64 | | EnvDefBuilder { fields: HashMap::new() } [INFO] [stderr] 65 | | } [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] 58 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:43:9 [INFO] [stderr] | [INFO] [stderr] 43 | / match self { [INFO] [stderr] 44 | | &ExecuteErrorKind::Parse(ref kind) => kind.message(), [INFO] [stderr] 45 | | &ExecuteErrorKind::Evaluate(ref kind) => kind.message(), [INFO] [stderr] 46 | | &ExecuteErrorKind::Pass(ref kind) => kind.message() [INFO] [stderr] 47 | | } [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] 43 | match *self { [INFO] [stderr] 44 | ExecuteErrorKind::Parse(ref kind) => kind.message(), [INFO] [stderr] 45 | ExecuteErrorKind::Evaluate(ref kind) => kind.message(), [INFO] [stderr] 46 | ExecuteErrorKind::Pass(ref kind) => kind.message() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/bin.rs:19:24 [INFO] [stderr] | [INFO] [stderr] 19 | } else { [INFO] [stderr] | ________________________^ [INFO] [stderr] 20 | | if input.starts_with("?") { [INFO] [stderr] 21 | | [INFO] [stderr] 22 | | match parse(&input[1..]) { [INFO] [stderr] ... | [INFO] [stderr] 39 | | } [INFO] [stderr] 40 | | } [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] 19 | } else if input.starts_with("?") { [INFO] [stderr] 20 | [INFO] [stderr] 21 | match parse(&input[1..]) { [INFO] [stderr] 22 | Ok(expr) => println!("{:#?}", expr), [INFO] [stderr] 23 | Err(e) => println!("Error: {}", e.kind.message()) [INFO] [stderr] 24 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/bin.rs:20:42 [INFO] [stderr] | [INFO] [stderr] 20 | if input.starts_with("?") { [INFO] [stderr] | ^^^ help: try using a char instead: `'?'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/bin.rs:19:24 [INFO] [stderr] | [INFO] [stderr] 19 | } else { [INFO] [stderr] | ________________________^ [INFO] [stderr] 20 | | if input.starts_with("?") { [INFO] [stderr] 21 | | [INFO] [stderr] 22 | | match parse(&input[1..]) { [INFO] [stderr] ... | [INFO] [stderr] 39 | | } [INFO] [stderr] 40 | | } [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] 19 | } else if input.starts_with("?") { [INFO] [stderr] 20 | [INFO] [stderr] 21 | match parse(&input[1..]) { [INFO] [stderr] 22 | Ok(expr) => println!("{:#?}", expr), [INFO] [stderr] 23 | Err(e) => println!("Error: {}", e.kind.message()) [INFO] [stderr] 24 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/bin.rs:20:42 [INFO] [stderr] | [INFO] [stderr] 20 | if input.starts_with("?") { [INFO] [stderr] | ^^^ help: try using a char instead: `'?'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 1.76s [INFO] running `"docker" "inspect" "70d727ec43850cb975440443f8a4b658c05d4b1a08dcc5ef33ec6b6d82d7c8a0"` [INFO] running `"docker" "rm" "-f" "70d727ec43850cb975440443f8a4b658c05d4b1a08dcc5ef33ec6b6d82d7c8a0"` [INFO] [stdout] 70d727ec43850cb975440443f8a4b658c05d4b1a08dcc5ef33ec6b6d82d7c8a0