[INFO] crate tql_macros 0.1.0 is already in cache [INFO] extracting crate tql_macros 0.1.0 into work/ex/clippy-test-run/sources/stable/reg/tql_macros/0.1.0 [INFO] extracting crate tql_macros 0.1.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/tql_macros/0.1.0 [INFO] validating manifest of tql_macros-0.1.0 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 tql_macros-0.1.0 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 tql_macros-0.1.0 [INFO] finished frobbing tql_macros-0.1.0 [INFO] frobbed toml for tql_macros-0.1.0 written to work/ex/clippy-test-run/sources/stable/reg/tql_macros/0.1.0/Cargo.toml [INFO] started frobbing tql_macros-0.1.0 [INFO] finished frobbing tql_macros-0.1.0 [INFO] frobbed toml for tql_macros-0.1.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/tql_macros/0.1.0/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 tql_macros-0.1.0 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/reg/tql_macros/0.1.0:/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] 1276ff23055c87d2794f46fdb3c011d4e5e9e34b2e9e630f50d14b8dc89702e2 [INFO] running `"docker" "start" "-a" "1276ff23055c87d2794f46fdb3c011d4e5e9e34b2e9e630f50d14b8dc89702e2"` [INFO] [stderr] Checking syn v0.12.15 [INFO] [stderr] Checking tql_macros v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/lib.rs:338:5 [INFO] [stderr] | [INFO] [stderr] 338 | gen [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/lib.rs:306:9 [INFO] [stderr] | [INFO] [stderr] 306 | / if let Item::Struct(item_struct) = item { [INFO] [stderr] 307 | | let (fields, primary_key, impls) = get_struct_fields(&item_struct); [INFO] [stderr] 308 | | let mut compiler_errors = quote! {}; [INFO] [stderr] 309 | | let errors = [INFO] [stderr] ... | [INFO] [stderr] 335 | | compiler_errors.into() [INFO] [stderr] 336 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/lib.rs:338:5 [INFO] [stderr] | [INFO] [stderr] 338 | gen [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/lib.rs:306:9 [INFO] [stderr] | [INFO] [stderr] 306 | / if let Item::Struct(item_struct) = item { [INFO] [stderr] 307 | | let (fields, primary_key, impls) = get_struct_fields(&item_struct); [INFO] [stderr] 308 | | let mut compiler_errors = quote! {}; [INFO] [stderr] 309 | | let errors = [INFO] [stderr] ... | [INFO] [stderr] 335 | | compiler_errors.into() [INFO] [stderr] 336 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unused variable: `date_type` [INFO] [stderr] --> src/methods.rs:57:9 [INFO] [stderr] | [INFO] [stderr] 57 | for date_type in &date_types { [INFO] [stderr] | ^^^^^^^^^ help: consider using `_date_type` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `time_type` [INFO] [stderr] --> src/methods.rs:76:9 [INFO] [stderr] | [INFO] [stderr] 76 | for time_type in &time_types { [INFO] [stderr] | ^^^^^^^^^ help: consider using `_time_type` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `index` [INFO] [stderr] --> src/gen/dummy.rs:36:29 [INFO] [stderr] | [INFO] [stderr] 36 | fn convert_index(&self, index: usize) -> Tokens { [INFO] [stderr] | ^^^^^ help: consider using `_index` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `connection_expr` [INFO] [stderr] --> src/gen/dummy.rs:44:30 [INFO] [stderr] | [INFO] [stderr] 44 | fn gen_query_expr(&self, connection_expr: Tokens, args: &SqlQueryWithArgs, args_expr: Tokens, struct_expr: Tokens, [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: consider using `_connection_expr` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `args` [INFO] [stderr] --> src/gen/dummy.rs:44:55 [INFO] [stderr] | [INFO] [stderr] 44 | fn gen_query_expr(&self, connection_expr: Tokens, args: &SqlQueryWithArgs, args_expr: Tokens, struct_expr: Tokens, [INFO] [stderr] | ^^^^ help: consider using `_args` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `args_expr` [INFO] [stderr] --> src/gen/dummy.rs:44:80 [INFO] [stderr] | [INFO] [stderr] 44 | fn gen_query_expr(&self, connection_expr: Tokens, args: &SqlQueryWithArgs, args_expr: Tokens, struct_expr: Tokens, [INFO] [stderr] | ^^^^^^^^^ help: consider using `_args_expr` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `struct_expr` [INFO] [stderr] --> src/gen/dummy.rs:44:99 [INFO] [stderr] | [INFO] [stderr] 44 | fn gen_query_expr(&self, connection_expr: Tokens, args: &SqlQueryWithArgs, args_expr: Tokens, struct_expr: Tokens, [INFO] [stderr] | ^^^^^^^^^^^ help: consider using `_struct_expr` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `aggregate_struct` [INFO] [stderr] --> src/gen/dummy.rs:45:23 [INFO] [stderr] | [INFO] [stderr] 45 | aggregate_struct: Tokens, aggregate_expr: Tokens) -> Tokens [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using `_aggregate_struct` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `aggregate_expr` [INFO] [stderr] --> src/gen/dummy.rs:45:49 [INFO] [stderr] | [INFO] [stderr] 45 | aggregate_struct: Tokens, aggregate_expr: Tokens) -> Tokens [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider using `_aggregate_expr` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `num` [INFO] [stderr] --> src/gen/dummy.rs:50:27 [INFO] [stderr] | [INFO] [stderr] 50 | fn int_literal(&self, num: usize) -> Expr { [INFO] [stderr] | ^^^ help: consider using `_num` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `table_ident` [INFO] [stderr] --> src/gen/dummy.rs:54:30 [INFO] [stderr] | [INFO] [stderr] 54 | fn row_type_ident(&self, table_ident: &Ident) -> Tokens { [INFO] [stderr] | ^^^^^^^^^^^ help: consider using `_table_ident` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `primary_key_ident` [INFO] [stderr] --> src/gen/dummy.rs:58:22 [INFO] [stderr] | [INFO] [stderr] 58 | fn to_sql(&self, primary_key_ident: &Ident) -> Tokens { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using `_primary_key_ident` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `table_ident` [INFO] [stderr] --> src/gen/dummy.rs:62:27 [INFO] [stderr] | [INFO] [stderr] 62 | fn to_sql_impl(&self, table_ident: &Ident, to_sql_code: Tokens) -> Tokens { [INFO] [stderr] | ^^^^^^^^^^^ help: consider using `_table_ident` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `to_sql_code` [INFO] [stderr] --> src/gen/dummy.rs:62:48 [INFO] [stderr] | [INFO] [stderr] 62 | fn to_sql_impl(&self, table_ident: &Ident, to_sql_code: Tokens) -> Tokens { [INFO] [stderr] | ^^^^^^^^^^^ help: consider using `_to_sql_code` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `index` [INFO] [stderr] --> src/sql/dummy.rs:36:22 [INFO] [stderr] | [INFO] [stderr] 36 | fn to_sql(&self, index: &mut usize) -> String { [INFO] [stderr] | ^^^^^ help: consider using `_index` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `table` [INFO] [stderr] --> src/sql/dummy.rs:42:28 [INFO] [stderr] | [INFO] [stderr] 42 | fn insert_query(&self, table: &str, fields: &[String], values: &[String]) -> Tokens { [INFO] [stderr] | ^^^^^ help: consider using `_table` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `fields` [INFO] [stderr] --> src/sql/dummy.rs:42:41 [INFO] [stderr] | [INFO] [stderr] 42 | fn insert_query(&self, table: &str, fields: &[String], values: &[String]) -> Tokens { [INFO] [stderr] | ^^^^^^ help: consider using `_fields` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `values` [INFO] [stderr] --> src/sql/dummy.rs:42:60 [INFO] [stderr] | [INFO] [stderr] 42 | fn insert_query(&self, table: &str, fields: &[String], values: &[String]) -> Tokens { [INFO] [stderr] | ^^^^^^ help: consider using `_values` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `date_type` [INFO] [stderr] --> src/methods.rs:57:9 [INFO] [stderr] | [INFO] [stderr] 57 | for date_type in &date_types { [INFO] [stderr] | ^^^^^^^^^ help: consider using `_date_type` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `time_type` [INFO] [stderr] --> src/methods.rs:76:9 [INFO] [stderr] | [INFO] [stderr] 76 | for time_type in &time_types { [INFO] [stderr] | ^^^^^^^^^ help: consider using `_time_type` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `index` [INFO] [stderr] --> src/gen/dummy.rs:36:29 [INFO] [stderr] | [INFO] [stderr] 36 | fn convert_index(&self, index: usize) -> Tokens { [INFO] [stderr] | ^^^^^ help: consider using `_index` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `connection_expr` [INFO] [stderr] --> src/gen/dummy.rs:44:30 [INFO] [stderr] | [INFO] [stderr] 44 | fn gen_query_expr(&self, connection_expr: Tokens, args: &SqlQueryWithArgs, args_expr: Tokens, struct_expr: Tokens, [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: consider using `_connection_expr` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `args` [INFO] [stderr] --> src/gen/dummy.rs:44:55 [INFO] [stderr] | [INFO] [stderr] 44 | fn gen_query_expr(&self, connection_expr: Tokens, args: &SqlQueryWithArgs, args_expr: Tokens, struct_expr: Tokens, [INFO] [stderr] | ^^^^ help: consider using `_args` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `args_expr` [INFO] [stderr] --> src/gen/dummy.rs:44:80 [INFO] [stderr] | [INFO] [stderr] 44 | fn gen_query_expr(&self, connection_expr: Tokens, args: &SqlQueryWithArgs, args_expr: Tokens, struct_expr: Tokens, [INFO] [stderr] | ^^^^^^^^^ help: consider using `_args_expr` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `struct_expr` [INFO] [stderr] --> src/gen/dummy.rs:44:99 [INFO] [stderr] | [INFO] [stderr] 44 | fn gen_query_expr(&self, connection_expr: Tokens, args: &SqlQueryWithArgs, args_expr: Tokens, struct_expr: Tokens, [INFO] [stderr] | ^^^^^^^^^^^ help: consider using `_struct_expr` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `aggregate_struct` [INFO] [stderr] --> src/gen/dummy.rs:45:23 [INFO] [stderr] | [INFO] [stderr] 45 | aggregate_struct: Tokens, aggregate_expr: Tokens) -> Tokens [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using `_aggregate_struct` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `aggregate_expr` [INFO] [stderr] --> src/gen/dummy.rs:45:49 [INFO] [stderr] | [INFO] [stderr] 45 | aggregate_struct: Tokens, aggregate_expr: Tokens) -> Tokens [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider using `_aggregate_expr` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `num` [INFO] [stderr] --> src/gen/dummy.rs:50:27 [INFO] [stderr] | [INFO] [stderr] 50 | fn int_literal(&self, num: usize) -> Expr { [INFO] [stderr] | ^^^ help: consider using `_num` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `table_ident` [INFO] [stderr] --> src/gen/dummy.rs:54:30 [INFO] [stderr] | [INFO] [stderr] 54 | fn row_type_ident(&self, table_ident: &Ident) -> Tokens { [INFO] [stderr] | ^^^^^^^^^^^ help: consider using `_table_ident` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `primary_key_ident` [INFO] [stderr] --> src/gen/dummy.rs:58:22 [INFO] [stderr] | [INFO] [stderr] 58 | fn to_sql(&self, primary_key_ident: &Ident) -> Tokens { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using `_primary_key_ident` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `table_ident` [INFO] [stderr] --> src/gen/dummy.rs:62:27 [INFO] [stderr] | [INFO] [stderr] 62 | fn to_sql_impl(&self, table_ident: &Ident, to_sql_code: Tokens) -> Tokens { [INFO] [stderr] | ^^^^^^^^^^^ help: consider using `_table_ident` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `to_sql_code` [INFO] [stderr] --> src/gen/dummy.rs:62:48 [INFO] [stderr] | [INFO] [stderr] 62 | fn to_sql_impl(&self, table_ident: &Ident, to_sql_code: Tokens) -> Tokens { [INFO] [stderr] | ^^^^^^^^^^^ help: consider using `_to_sql_code` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `index` [INFO] [stderr] --> src/sql/dummy.rs:36:22 [INFO] [stderr] | [INFO] [stderr] 36 | fn to_sql(&self, index: &mut usize) -> String { [INFO] [stderr] | ^^^^^ help: consider using `_index` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `table` [INFO] [stderr] --> src/sql/dummy.rs:42:28 [INFO] [stderr] | [INFO] [stderr] 42 | fn insert_query(&self, table: &str, fields: &[String], values: &[String]) -> Tokens { [INFO] [stderr] | ^^^^^ help: consider using `_table` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `fields` [INFO] [stderr] --> src/sql/dummy.rs:42:41 [INFO] [stderr] | [INFO] [stderr] 42 | fn insert_query(&self, table: &str, fields: &[String], values: &[String]) -> Tokens { [INFO] [stderr] | ^^^^^^ help: consider using `_fields` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `values` [INFO] [stderr] --> src/sql/dummy.rs:42:60 [INFO] [stderr] | [INFO] [stderr] 42 | fn insert_query(&self, table: &str, fields: &[String], values: &[String]) -> Tokens { [INFO] [stderr] | ^^^^^^ help: consider using `_values` instead [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Not` [INFO] [stderr] --> src/ast.rs:199:5 [INFO] [stderr] | [INFO] [stderr] 199 | Not, [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: field is never used: `query_type` [INFO] [stderr] --> src/lib.rs:181:5 [INFO] [stderr] | [INFO] [stderr] 181 | query_type: QueryType, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `sql` [INFO] [stderr] --> src/lib.rs:182:5 [INFO] [stderr] | [INFO] [stderr] 182 | sql: Tokens, [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/analyzer/aggregate.rs:134:77 [INFO] [stderr] | [INFO] [stderr] 134 | fn binary_expression_to_aggregate_filter_expression(expr1: &Expression, op: &BinOp, expr2: &Expression, aggregates: &[Aggregate]) -> Result { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `BinOp` [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: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/analyzer/aggregate.rs:170:12 [INFO] [stderr] | [INFO] [stderr] 170 | if let None = result { [INFO] [stderr] | _____- ^^^^ [INFO] [stderr] 171 | | errors.push(Error::new( [INFO] [stderr] 172 | | &format!("no aggregate field named `{}` found", identifier), // TODO: improve this message. [INFO] [stderr] 173 | | position [INFO] [stderr] 174 | | )); [INFO] [stderr] 175 | | // TODO: propose similar names. [INFO] [stderr] 176 | | } [INFO] [stderr] | |_____- help: try this: `if result.is_none()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/analyzer/assignment.rs:82:40 [INFO] [stderr] | [INFO] [stderr] 82 | fn binop_to_assignment_operator(binop: &BinOp) -> (AssignmentOperator, Span) { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `BinOp` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/analyzer/filter.rs:73:67 [INFO] [stderr] | [INFO] [stderr] 73 | fn binary_expression_to_filter_expression(expr1: &Expression, op: &BinOp, expr2: &Expression, table_name: &str) -> [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `BinOp` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/analyzer/filter.rs:109:41 [INFO] [stderr] | [INFO] [stderr] 109 | pub fn binop_to_logical_operator(binop: &BinOp) -> LogicalOperator { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `BinOp` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/analyzer/filter.rs:123:44 [INFO] [stderr] | [INFO] [stderr] 123 | pub fn binop_to_relational_operator(binop: &BinOp) -> RelationalOperator { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `BinOp` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/analyzer/filter.rs:183:35 [INFO] [stderr] | [INFO] [stderr] 183 | pub fn is_logical_operator(binop: &BinOp) -> bool { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `BinOp` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/analyzer/filter.rs:191:38 [INFO] [stderr] | [INFO] [stderr] 191 | pub fn is_relational_operator(binop: &BinOp) -> bool { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `BinOp` [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/analyzer/insert.rs:46:23 [INFO] [stderr] | [INFO] [stderr] 46 | fields.insert(assignment.identifier.clone().expect("Assignment identifier")); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `assignment.identifier` [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: called `filter(p).next()` on an `Iterator`. This is more succinctly expressed by calling `.find(p)` instead. [INFO] [stderr] --> src/analyzer/mod.rs:215:23 [INFO] [stderr] | [INFO] [stderr] 215 | let main_method = method_calls.calls.iter() [INFO] [stderr] | _______________________^ [INFO] [stderr] 216 | | .filter(|call| method_map.contains_key(&call.name.as_ref()) ) [INFO] [stderr] 217 | | .next() [INFO] [stderr] | |_______________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::filter_next)] on by default [INFO] [stderr] = note: replace `filter(|call| method_map.contains_key(&call.name.as_ref())).next()` with `find(|call| method_map.contains_key(&call.name.as_ref()))` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_next [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/analyzer/mod.rs:438:26 [INFO] [stderr] | [INFO] [stderr] 438 | let identifier = path.path.segments.first().unwrap().into_value().ident.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `path.path.segments.first().unwrap().into_value().ident` [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: variant is never constructed: `Not` [INFO] [stderr] --> src/ast.rs:199:5 [INFO] [stderr] | [INFO] [stderr] 199 | Not, [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: field is never used: `query_type` [INFO] [stderr] --> src/lib.rs:181:5 [INFO] [stderr] | [INFO] [stderr] 181 | query_type: QueryType, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `sql` [INFO] [stderr] --> src/lib.rs:182:5 [INFO] [stderr] | [INFO] [stderr] 182 | sql: Tokens, [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/analyzer/aggregate.rs:134:77 [INFO] [stderr] | [INFO] [stderr] 134 | fn binary_expression_to_aggregate_filter_expression(expr1: &Expression, op: &BinOp, expr2: &Expression, aggregates: &[Aggregate]) -> Result { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `BinOp` [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: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/analyzer/aggregate.rs:170:12 [INFO] [stderr] | [INFO] [stderr] 170 | if let None = result { [INFO] [stderr] | _____- ^^^^ [INFO] [stderr] 171 | | errors.push(Error::new( [INFO] [stderr] 172 | | &format!("no aggregate field named `{}` found", identifier), // TODO: improve this message. [INFO] [stderr] 173 | | position [INFO] [stderr] 174 | | )); [INFO] [stderr] 175 | | // TODO: propose similar names. [INFO] [stderr] 176 | | } [INFO] [stderr] | |_____- help: try this: `if result.is_none()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/arguments.rs:177:42 [INFO] [stderr] | [INFO] [stderr] 177 | add(args, literals, Some(identifier.clone()), Some(table.clone()), expr); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*identifier` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/analyzer/assignment.rs:82:40 [INFO] [stderr] | [INFO] [stderr] 82 | fn binop_to_assignment_operator(binop: &BinOp) -> (AssignmentOperator, Span) { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `BinOp` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/analyzer/filter.rs:73:67 [INFO] [stderr] | [INFO] [stderr] 73 | fn binary_expression_to_filter_expression(expr1: &Expression, op: &BinOp, expr2: &Expression, table_name: &str) -> [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `BinOp` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/analyzer/filter.rs:109:41 [INFO] [stderr] | [INFO] [stderr] 109 | pub fn binop_to_logical_operator(binop: &BinOp) -> LogicalOperator { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `BinOp` [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: large size difference between variants [INFO] [stderr] --> src/ast.rs:184:5 [INFO] [stderr] | [INFO] [stderr] 184 | Range(Expression, Expression), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::large_enum_variant)] on by default [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] --> src/ast.rs:184:5 [INFO] [stderr] | [INFO] [stderr] 184 | Range(Expression, Expression), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/analyzer/filter.rs:123:44 [INFO] [stderr] | [INFO] [stderr] 123 | pub fn binop_to_relational_operator(binop: &BinOp) -> RelationalOperator { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `BinOp` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/analyzer/filter.rs:183:35 [INFO] [stderr] | [INFO] [stderr] 183 | pub fn is_logical_operator(binop: &BinOp) -> bool { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `BinOp` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/analyzer/filter.rs:191:38 [INFO] [stderr] | [INFO] [stderr] 191 | pub fn is_relational_operator(binop: &BinOp) -> bool { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `BinOp` [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: large size difference between variants [INFO] [stderr] --> src/ast.rs:236:5 [INFO] [stderr] | [INFO] [stderr] 236 | / Aggregate { [INFO] [stderr] 237 | | aggregates: Vec, [INFO] [stderr] 238 | | aggregate_filter: AggregateFilterExpression, [INFO] [stderr] 239 | | filter: FilterExpression, [INFO] [stderr] ... | [INFO] [stderr] 242 | | table: String, [INFO] [stderr] 243 | | }, [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] --> src/ast.rs:236:5 [INFO] [stderr] | [INFO] [stderr] 236 | / Aggregate { [INFO] [stderr] 237 | | aggregates: Vec, [INFO] [stderr] 238 | | aggregate_filter: AggregateFilterExpression, [INFO] [stderr] 239 | | filter: FilterExpression, [INFO] [stderr] ... | [INFO] [stderr] 242 | | table: String, [INFO] [stderr] 243 | | }, [INFO] [stderr] | |_____^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/ast.rs:307:13 [INFO] [stderr] | [INFO] [stderr] 307 | / let mut typ = QueryType::SelectMulti; [INFO] [stderr] 308 | | if get { [INFO] [stderr] 309 | | typ = QueryType::SelectOne; [INFO] [stderr] 310 | | } [INFO] [stderr] | |_____________^ help: it is more idiomatic to write: `let typ = if get { QueryType::SelectOne } else { QueryType::SelectMulti };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/analyzer/insert.rs:46:23 [INFO] [stderr] | [INFO] [stderr] 46 | fields.insert(assignment.identifier.clone().expect("Assignment identifier")); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `assignment.identifier` [INFO] [stderr] | [INFO] [stderr] warning: this creates an owned instance just for comparison [INFO] [stderr] --> src/attribute.rs:55:12 [INFO] [stderr] | [INFO] [stderr] 55 | if path.segments.first().expect("first segment in path").value().ident.to_string() == "Option" { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `*path.segments.first().expect("first segment in path").value().ident` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cmp_owned)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stderr] [INFO] [stderr] = 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: usage of `contains_key` followed by `insert` on a `BTreeMap` [INFO] [stderr] --> src/attribute.rs:75:13 [INFO] [stderr] | [INFO] [stderr] 75 | / if !sql_fields.contains_key(&ident) { [INFO] [stderr] 76 | | let ty = field_ty_to_type(&field.ty); [INFO] [stderr] 77 | | sql_fields.insert(ident, BothTypes { [INFO] [stderr] 78 | | syn_type: field.ty.clone(), [INFO] [stderr] 79 | | ty, [INFO] [stderr] 80 | | }); [INFO] [stderr] 81 | | } [INFO] [stderr] | |_____________^ help: consider using: `sql_fields.entry(ident)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_entry)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: called `filter(p).next()` on an `Iterator`. This is more succinctly expressed by calling `.find(p)` instead. [INFO] [stderr] --> src/analyzer/mod.rs:215:23 [INFO] [stderr] | [INFO] [stderr] 215 | let main_method = method_calls.calls.iter() [INFO] [stderr] | _______________________^ [INFO] [stderr] 216 | | .filter(|call| method_map.contains_key(&call.name.as_ref()) ) [INFO] [stderr] 217 | | .next() [INFO] [stderr] | |_______________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::filter_next)] on by default [INFO] [stderr] = note: replace `filter(|call| method_map.contains_key(&call.name.as_ref())).next()` with `find(|call| method_map.contains_key(&call.name.as_ref()))` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_next [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/analyzer/mod.rs:438:26 [INFO] [stderr] | [INFO] [stderr] 438 | let identifier = path.path.segments.first().unwrap().into_value().ident.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `path.path.segments.first().unwrap().into_value().ident` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gen/mod.rs:241:31 [INFO] [stderr] | [INFO] [stderr] 241 | fn create_struct(table_ident: &Ident, joins: &[Join]) -> Tokens { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Ident` [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/gen/mod.rs:269:26 [INFO] [stderr] | [INFO] [stderr] 269 | let field_name = aggregate.result_name.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `aggregate.result_name` [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/gen/mod.rs:270:37 [INFO] [stderr] | [INFO] [stderr] 270 | aggregate_field_idents.push(field_name.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `field_name` [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/arguments.rs:177:42 [INFO] [stderr] | [INFO] [stderr] 177 | add(args, literals, Some(identifier.clone()), Some(table.clone()), expr); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*identifier` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gen/mod.rs:379:68 [INFO] [stderr] | [INFO] [stderr] 379 | fn field_list_macro(named: &Punctuated, table_ident: &Ident) -> Tokens { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Ident` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gen/mod.rs:403:70 [INFO] [stderr] | [INFO] [stderr] 403 | fn create_query_macro(named: &Punctuated, table_ident: &Ident) -> Tokens { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Ident` [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: large size difference between variants [INFO] [stderr] --> src/ast.rs:184:5 [INFO] [stderr] | [INFO] [stderr] 184 | Range(Expression, Expression), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::large_enum_variant)] on by default [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] --> src/ast.rs:184:5 [INFO] [stderr] | [INFO] [stderr] 184 | Range(Expression, Expression), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gen/mod.rs:425:69 [INFO] [stderr] | [INFO] [stderr] 425 | fn related_pks_macro(named: &Punctuated, table_ident: &Ident) -> Tokens { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Ident` [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: large size difference between variants [INFO] [stderr] --> src/ast.rs:236:5 [INFO] [stderr] | [INFO] [stderr] 236 | / Aggregate { [INFO] [stderr] 237 | | aggregates: Vec, [INFO] [stderr] 238 | | aggregate_filter: AggregateFilterExpression, [INFO] [stderr] 239 | | filter: FilterExpression, [INFO] [stderr] ... | [INFO] [stderr] 242 | | table: String, [INFO] [stderr] 243 | | }, [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] --> src/ast.rs:236:5 [INFO] [stderr] | [INFO] [stderr] 236 | / Aggregate { [INFO] [stderr] 237 | | aggregates: Vec, [INFO] [stderr] 238 | | aggregate_filter: AggregateFilterExpression, [INFO] [stderr] 239 | | filter: FilterExpression, [INFO] [stderr] ... | [INFO] [stderr] 242 | | table: String, [INFO] [stderr] 243 | | }, [INFO] [stderr] | |_____^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gen/mod.rs:456:60 [INFO] [stderr] | [INFO] [stderr] 456 | fn pk_macro(named: &Punctuated, table_ident: &Ident) -> Tokens { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Ident` [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: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/ast.rs:307:13 [INFO] [stderr] | [INFO] [stderr] 307 | / let mut typ = QueryType::SelectMulti; [INFO] [stderr] 308 | | if get { [INFO] [stderr] 309 | | typ = QueryType::SelectOne; [INFO] [stderr] 310 | | } [INFO] [stderr] | |_____________^ help: it is more idiomatic to write: `let typ = if get { QueryType::SelectOne } else { QueryType::SelectMulti };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: this creates an owned instance just for comparison [INFO] [stderr] --> src/attribute.rs:55:12 [INFO] [stderr] | [INFO] [stderr] 55 | if path.segments.first().expect("first segment in path").value().ident.to_string() == "Option" { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `*path.segments.first().expect("first segment in path").value().ident` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cmp_owned)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gen/mod.rs:487:78 [INFO] [stderr] | [INFO] [stderr] 487 | fn check_missing_fields_macro(named: &Punctuated, table_ident: &Ident) -> Tokens { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Ident` [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: usage of `contains_key` followed by `insert` on a `BTreeMap` [INFO] [stderr] --> src/attribute.rs:75:13 [INFO] [stderr] | [INFO] [stderr] 75 | / if !sql_fields.contains_key(&ident) { [INFO] [stderr] 76 | | let ty = field_ty_to_type(&field.ty); [INFO] [stderr] 77 | | sql_fields.insert(ident, BothTypes { [INFO] [stderr] 78 | | syn_type: field.ty.clone(), [INFO] [stderr] 79 | | ty, [INFO] [stderr] 80 | | }); [INFO] [stderr] 81 | | } [INFO] [stderr] | |_____________^ help: consider using: `sql_fields.entry(ident)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_entry)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gen/mod.rs:516:71 [INFO] [stderr] | [INFO] [stderr] 516 | fn related_table_macro(named: &Punctuated, table_ident: &Ident) -> Tokens { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Ident` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gen/mod.rs:581:66 [INFO] [stderr] | [INFO] [stderr] 581 | fn check_pk_macro(named: &Punctuated, table_ident: &Ident) -> Tokens { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Ident` [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/gen/mod.rs:709:39 [INFO] [stderr] | [INFO] [stderr] 709 | mandatory_fields.push(path.path.segments[0].ident.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `path.path.segments[0].ident` [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/gen/mod.rs:732:25 [INFO] [stderr] | [INFO] [stderr] 732 | fields.push(path.path.segments[0].ident.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `path.path.segments[0].ident` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gen/mod.rs:767:43 [INFO] [stderr] | [INFO] [stderr] 767 | fn row_type_ident(&self, table_ident: &Ident) -> Tokens; [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Ident` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gen/mod.rs:768:41 [INFO] [stderr] | [INFO] [stderr] 768 | fn to_sql(&self, primary_key_ident: &Ident) -> Tokens; [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Ident` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gen/mod.rs:769:40 [INFO] [stderr] | [INFO] [stderr] 769 | fn to_sql_impl(&self, table_ident: &Ident, to_sql_code: Tokens) -> Tokens; [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Ident` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gen/mod.rs:241:31 [INFO] [stderr] | [INFO] [stderr] 241 | fn create_struct(table_ident: &Ident, joins: &[Join]) -> Tokens { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Ident` [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/gen/mod.rs:269:26 [INFO] [stderr] | [INFO] [stderr] 269 | let field_name = aggregate.result_name.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `aggregate.result_name` [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/gen/mod.rs:270:37 [INFO] [stderr] | [INFO] [stderr] 270 | aggregate_field_idents.push(field_name.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `field_name` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gen/mod.rs:379:68 [INFO] [stderr] | [INFO] [stderr] 379 | fn field_list_macro(named: &Punctuated, table_ident: &Ident) -> Tokens { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Ident` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gen/mod.rs:403:70 [INFO] [stderr] | [INFO] [stderr] 403 | fn create_query_macro(named: &Punctuated, table_ident: &Ident) -> Tokens { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Ident` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gen/mod.rs:425:69 [INFO] [stderr] | [INFO] [stderr] 425 | fn related_pks_macro(named: &Punctuated, table_ident: &Ident) -> Tokens { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Ident` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gen/mod.rs:456:60 [INFO] [stderr] | [INFO] [stderr] 456 | fn pk_macro(named: &Punctuated, table_ident: &Ident) -> Tokens { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Ident` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gen/mod.rs:487:78 [INFO] [stderr] | [INFO] [stderr] 487 | fn check_missing_fields_macro(named: &Punctuated, table_ident: &Ident) -> Tokens { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Ident` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gen/mod.rs:516:71 [INFO] [stderr] | [INFO] [stderr] 516 | fn related_table_macro(named: &Punctuated, table_ident: &Ident) -> Tokens { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Ident` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gen/mod.rs:581:66 [INFO] [stderr] | [INFO] [stderr] 581 | fn check_pk_macro(named: &Punctuated, table_ident: &Ident) -> Tokens { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Ident` [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/gen/mod.rs:709:39 [INFO] [stderr] | [INFO] [stderr] 709 | mandatory_fields.push(path.path.segments[0].ident.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `path.path.segments[0].ident` [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/gen/mod.rs:732:25 [INFO] [stderr] | [INFO] [stderr] 732 | fields.push(path.path.segments[0].ident.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `path.path.segments[0].ident` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gen/mod.rs:767:43 [INFO] [stderr] | [INFO] [stderr] 767 | fn row_type_ident(&self, table_ident: &Ident) -> Tokens; [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Ident` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gen/mod.rs:768:41 [INFO] [stderr] | [INFO] [stderr] 768 | fn to_sql(&self, primary_key_ident: &Ident) -> Tokens; [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Ident` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gen/mod.rs:769:40 [INFO] [stderr] | [INFO] [stderr] 769 | fn to_sql_impl(&self, table_ident: &Ident, to_sql_code: Tokens) -> Tokens; [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Ident` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/stable.rs:198:37 [INFO] [stderr] | [INFO] [stderr] 198 | fn assignments_to_args(assignments: &Vec, dummy_count: &mut i32, count: &mut i32, args: &mut Vec) -> Tokens { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: change this to: `&[Assignment]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/stable.rs:263:23 [INFO] [stderr] | [INFO] [stderr] 263 | args.push(ident.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `ident` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/stable.rs:307:27 [INFO] [stderr] | [INFO] [stderr] 307 | fn values_to_args(groups: &Groups) -> Tokens { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: `0 as *mut _` detected. Consider using `ptr::null_mut()` [INFO] [stderr] --> src/state.rs:70:24 [INFO] [stderr] | [INFO] [stderr] 70 | if HASH_MAP == 0 as *mut SqlAggregates { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::zero_ptr)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zero_ptr [INFO] [stderr] [INFO] [stderr] warning: `0 as *mut _` detected. Consider using `ptr::null_mut()` [INFO] [stderr] --> src/state.rs:85:24 [INFO] [stderr] | [INFO] [stderr] 85 | if HASH_MAP == 0 as *mut SqlMethods { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zero_ptr [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/string.rs:81:14 [INFO] [stderr] | [INFO] [stderr] 81 | for i in 0 .. string1.len() + 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: use: `0..=string1.len()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/string.rs:83:18 [INFO] [stderr] | [INFO] [stderr] 83 | for j in 0 .. string2.len() + 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: use: `0..=string2.len()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/lib.rs:248:22 [INFO] [stderr] | [INFO] [stderr] 248 | let table_name = method_calls.name.clone().expect("table name in method_calls"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `method_calls.name` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/stable.rs:198:37 [INFO] [stderr] | [INFO] [stderr] 198 | fn assignments_to_args(assignments: &Vec, dummy_count: &mut i32, count: &mut i32, args: &mut Vec) -> Tokens { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: change this to: `&[Assignment]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/stable.rs:263:23 [INFO] [stderr] | [INFO] [stderr] 263 | args.push(ident.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `ident` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/stable.rs:307:27 [INFO] [stderr] | [INFO] [stderr] 307 | fn values_to_args(groups: &Groups) -> Tokens { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: `0 as *mut _` detected. Consider using `ptr::null_mut()` [INFO] [stderr] --> src/state.rs:70:24 [INFO] [stderr] | [INFO] [stderr] 70 | if HASH_MAP == 0 as *mut SqlAggregates { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::zero_ptr)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zero_ptr [INFO] [stderr] [INFO] [stderr] warning: `0 as *mut _` detected. Consider using `ptr::null_mut()` [INFO] [stderr] --> src/state.rs:85:24 [INFO] [stderr] | [INFO] [stderr] 85 | if HASH_MAP == 0 as *mut SqlMethods { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zero_ptr [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/string.rs:81:14 [INFO] [stderr] | [INFO] [stderr] 81 | for i in 0 .. string1.len() + 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: use: `0..=string1.len()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/string.rs:83:18 [INFO] [stderr] | [INFO] [stderr] 83 | for j in 0 .. string2.len() + 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: use: `0..=string2.len()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/lib.rs:248:22 [INFO] [stderr] | [INFO] [stderr] 248 | let table_name = method_calls.name.clone().expect("table name in method_calls"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `method_calls.name` [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] Finished dev [unoptimized + debuginfo] target(s) in 11.14s [INFO] running `"docker" "inspect" "1276ff23055c87d2794f46fdb3c011d4e5e9e34b2e9e630f50d14b8dc89702e2"` [INFO] running `"docker" "rm" "-f" "1276ff23055c87d2794f46fdb3c011d4e5e9e34b2e9e630f50d14b8dc89702e2"` [INFO] [stdout] 1276ff23055c87d2794f46fdb3c011d4e5e9e34b2e9e630f50d14b8dc89702e2