[INFO] cloning repository https://github.com/davidpdrsn/memosine [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/davidpdrsn/memosine" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdavidpdrsn%2Fmemosine", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdavidpdrsn%2Fmemosine'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] b2be5a06b928ebd6273d6e6de2937c653b75ac0a [INFO] linting davidpdrsn/memosine against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdavidpdrsn%2Fmemosine" "/workspace/builds/worker-1-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/davidpdrsn/memosine [INFO] finished tweaking git repo https://github.com/davidpdrsn/memosine [INFO] tweaked toml for git repo https://github.com/davidpdrsn/memosine written to /workspace/builds/worker-1-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/davidpdrsn/memosine on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/davidpdrsn/memosine already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded proc-macro-error-attr v0.4.3 [INFO] [stderr] Downloaded proc-macro-error v0.4.4 [INFO] [stderr] Downloaded rustversion v1.0.1 [INFO] [stderr] Downloaded constant_time_eq v0.1.4 [INFO] [stderr] Downloaded structopt-derive v0.4.0 [INFO] [stderr] Downloaded structopt v0.3.7 [INFO] [stderr] Downloaded proc-macro-error-attr v0.3.4 [INFO] [stderr] Downloaded blake2b_simd v0.5.9 [INFO] [stderr] Downloaded extend v0.1.0 [INFO] [stderr] Downloaded rust-argon2 v0.5.1 [INFO] [stderr] Downloaded syn-mid v0.4.0 [INFO] [stderr] Downloaded rustyline v5.0.5 [INFO] [stderr] Downloaded dirs v2.0.2 [INFO] [stderr] Downloaded proc-macro-error v0.3.4 [INFO] [stderr] Downloaded redox_users v0.3.1 [INFO] [stderr] Downloaded dirs-sys v0.3.4 [INFO] [stderr] Downloaded utf8parse v0.1.1 [INFO] [stderr] Downloaded arrayref v0.3.5 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 5c0a247bc8cdf65fee3e53ad53772351952badc6d3535f970165d72da3d1357b [INFO] running `Command { std: "docker" "start" "-a" "5c0a247bc8cdf65fee3e53ad53772351952badc6d3535f970165d72da3d1357b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "5c0a247bc8cdf65fee3e53ad53772351952badc6d3535f970165d72da3d1357b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "5c0a247bc8cdf65fee3e53ad53772351952badc6d3535f970165d72da3d1357b", kill_on_drop: false }` [INFO] [stdout] 5c0a247bc8cdf65fee3e53ad53772351952badc6d3535f970165d72da3d1357b [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] e483c09bfca6a2c524588f73f2bf3073296b908db47da0af4c966033f6e57395 [INFO] running `Command { std: "docker" "start" "-a" "e483c09bfca6a2c524588f73f2bf3073296b908db47da0af4c966033f6e57395", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.6 [INFO] [stderr] Compiling unicode-xid v0.2.0 [INFO] [stderr] Compiling syn v1.0.11 [INFO] [stderr] Compiling libc v0.2.66 [INFO] [stderr] Compiling bitflags v1.2.1 [INFO] [stderr] Checking cfg-if v0.1.10 [INFO] [stderr] Checking unicode-width v0.1.7 [INFO] [stderr] Compiling nix v0.14.1 [INFO] [stderr] Compiling log v0.4.8 [INFO] [stderr] Compiling memchr v2.2.1 [INFO] [stderr] Compiling unicode-segmentation v1.6.0 [INFO] [stderr] Checking void v1.0.2 [INFO] [stderr] Checking utf8parse v0.1.1 [INFO] [stderr] Checking textwrap v0.11.0 [INFO] [stderr] Compiling heck v0.3.1 [INFO] [stderr] Compiling quote v1.0.2 [INFO] [stderr] Checking atty v0.2.13 [INFO] [stderr] Checking dirs-sys v0.3.4 [INFO] [stderr] Checking clap v2.33.0 [INFO] [stderr] Checking dirs v2.0.2 [INFO] [stderr] Checking rustyline v5.0.5 [INFO] [stderr] Compiling syn-mid v0.4.0 [INFO] [stderr] Compiling rustversion v1.0.1 [INFO] [stderr] Compiling proc-macro-error v0.4.4 [INFO] [stderr] Compiling proc-macro-error-attr v0.4.3 [INFO] [stderr] Compiling proc-macro-error-attr v0.3.4 [INFO] [stderr] Compiling proc-macro-error v0.3.4 [INFO] [stderr] Compiling structopt-derive v0.4.0 [INFO] [stderr] Compiling extend v0.1.0 [INFO] [stderr] Checking structopt v0.3.7 [INFO] [stderr] Checking memosine v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `database::Database` [INFO] [stdout] --> src/main.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use database::Database; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Statement` and `parse_sql_queries` [INFO] [stdout] --> src/main.rs:2:11 [INFO] [stdout] | [INFO] [stdout] 2 | use sql::{parse_sql_queries, Statement}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Read` and `self` [INFO] [stdout] --> src/main.rs:3:15 [INFO] [stdout] | [INFO] [stdout] 3 | use std::io::{self, Read}; [INFO] [stdout] | ^^^^ ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::path::PathBuf` [INFO] [stdout] --> src/main.rs:4:5 [INFO] [stdout] | [INFO] [stdout] 4 | use std::path::PathBuf; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `structopt::StructOpt` [INFO] [stdout] --> src/main.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use structopt::StructOpt; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `DerefMut` and `Deref` [INFO] [stdout] --> src/utils.rs:8:16 [INFO] [stdout] | [INFO] [stdout] 8 | use std::ops::{Deref, DerefMut}; [INFO] [stdout] | ^^^^^ ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `self` [INFO] [stdout] --> src/database/mod.rs:1:20 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::error::{self, Error, Result}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Schema` [INFO] [stdout] --> src/database/mod.rs:2:27 [INFO] [stdout] | [INFO] [stdout] 2 | use crate::schema::{self, Schema, Type}; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `BinOp` [INFO] [stdout] --> src/database/mod.rs:4:11 [INFO] [stdout] | [INFO] [stdout] 4 | self, BinOp, Column, CreateTable, Ident, Insert, RelativeColumn, Select, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::utils::ExtendOrSet` [INFO] [stdout] --> src/database/mod.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use crate::utils::ExtendOrSet; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::borrow::Borrow` [INFO] [stdout] --> src/database/mod.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | use std::borrow::Borrow; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/database/mod.rs:11:5 [INFO] [stdout] | [INFO] [stdout] 11 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::utils::parse::ParseError` [INFO] [stdout] --> src/error/mod.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::utils::parse::ParseError; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::database::Value` [INFO] [stdout] --> src/schema/mod.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::database::Value; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/schema/mod.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `database::Database` [INFO] [stdout] --> src/main.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use database::Database; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Statement` and `parse_sql_queries` [INFO] [stdout] --> src/main.rs:2:11 [INFO] [stdout] | [INFO] [stdout] 2 | use sql::{parse_sql_queries, Statement}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Read` and `self` [INFO] [stdout] --> src/main.rs:3:15 [INFO] [stdout] | [INFO] [stdout] 3 | use std::io::{self, Read}; [INFO] [stdout] | ^^^^ ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::path::PathBuf` [INFO] [stdout] --> src/main.rs:4:5 [INFO] [stdout] | [INFO] [stdout] 4 | use std::path::PathBuf; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `structopt::StructOpt` [INFO] [stdout] --> src/main.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use structopt::StructOpt; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Error` [INFO] [stdout] --> src/tests/mod.rs:2:20 [INFO] [stdout] | [INFO] [stdout] 2 | use crate::error::{Error, Result}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Ident` [INFO] [stdout] --> src/tests/mod.rs:3:37 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::sql::{parse_sql_queries, Ident, Statement}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `DerefMut` and `Deref` [INFO] [stdout] --> src/utils.rs:8:16 [INFO] [stdout] | [INFO] [stdout] 8 | use std::ops::{Deref, DerefMut}; [INFO] [stdout] | ^^^^^ ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `self` [INFO] [stdout] --> src/database/mod.rs:1:20 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::error::{self, Error, Result}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Schema` [INFO] [stdout] --> src/database/mod.rs:2:27 [INFO] [stdout] | [INFO] [stdout] 2 | use crate::schema::{self, Schema, Type}; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `BinOp` [INFO] [stdout] --> src/database/mod.rs:4:11 [INFO] [stdout] | [INFO] [stdout] 4 | self, BinOp, Column, CreateTable, Ident, Insert, RelativeColumn, Select, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::utils::ExtendOrSet` [INFO] [stdout] --> src/database/mod.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use crate::utils::ExtendOrSet; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::borrow::Borrow` [INFO] [stdout] --> src/database/mod.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | use std::borrow::Borrow; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/database/mod.rs:11:5 [INFO] [stdout] | [INFO] [stdout] 11 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::utils::parse::ParseError` [INFO] [stdout] --> src/error/mod.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::utils::parse::ParseError; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::database::Value` [INFO] [stdout] --> src/schema/mod.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::database::Value; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/schema/mod.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `source` and `where_clause` are never read [INFO] [stdout] --> src/sql/mod.rs:233:5 [INFO] [stdout] | [INFO] [stdout] 232 | pub struct OuterJoin { [INFO] [stdout] | --------- fields in this struct [INFO] [stdout] 233 | source: Source, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 234 | where_clause: WhereClause, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `OuterJoin` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/utils/parse/pos.rs:21:6 [INFO] [stdout] | [INFO] [stdout] 21 | impl<'a> Add for &'a Pos { [INFO] [stdout] | ^^ ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stdout] = note: `#[warn(clippy::needless_lifetimes)]` on by default [INFO] [stdout] help: elide the lifetimes [INFO] [stdout] | [INFO] [stdout] 21 - impl<'a> Add for &'a Pos { [INFO] [stdout] 21 + impl Add for &Pos { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/utils/parse/pos.rs:41:6 [INFO] [stdout] | [INFO] [stdout] 41 | impl<'a> Sub for &'a Pos { [INFO] [stdout] | ^^ ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stdout] help: elide the lifetimes [INFO] [stdout] | [INFO] [stdout] 41 - impl<'a> Sub for &'a Pos { [INFO] [stdout] 41 + impl Sub for &Pos { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/utils/parse.rs:128:33 [INFO] [stdout] | [INFO] [stdout] 128 | fn tap_print_debug(self) -> Tap> [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/utils/parse.rs:136:35 [INFO] [stdout] | [INFO] [stdout] 136 | fn tap_print_display(self) -> Tap> [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/utils/parse.rs:413:20 [INFO] [stdout] | [INFO] [stdout] 413 | let head = input [INFO] [stdout] | ____________________^ [INFO] [stdout] 414 | | .at(pos) [INFO] [stdout] 415 | | .ok_or_else(|| ParseError::UnexpectedEndOfInput { pos, input })?; [INFO] [stdout] | |___________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] = note: `#[warn(clippy::unnecessary_lazy_evaluations)]` on by default [INFO] [stdout] help: use `ok_or` instead [INFO] [stdout] | [INFO] [stdout] 415 - .ok_or_else(|| ParseError::UnexpectedEndOfInput { pos, input })?; [INFO] [stdout] 415 + .ok_or(ParseError::UnexpectedEndOfInput { pos, input })?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `char` [INFO] [stdout] --> src/utils/parse.rs:417:17 [INFO] [stdout] | [INFO] [stdout] 417 | let c = char::from(head); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: consider removing `char::from()`: `head` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/utils/parse.rs:697:20 [INFO] [stdout] | [INFO] [stdout] 697 | let head = input [INFO] [stdout] | ____________________^ [INFO] [stdout] 698 | | .at(pos) [INFO] [stdout] 699 | | .ok_or_else(|| ParseError::UnexpectedEndOfInput { pos, input })?; [INFO] [stdout] | |___________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] help: use `ok_or` instead [INFO] [stdout] | [INFO] [stdout] 699 - .ok_or_else(|| ParseError::UnexpectedEndOfInput { pos, input })?; [INFO] [stdout] 699 + .ok_or(ParseError::UnexpectedEndOfInput { pos, input })?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `char` [INFO] [stdout] --> src/utils/parse.rs:700:17 [INFO] [stdout] | [INFO] [stdout] 700 | let c = char::from(head); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: consider removing `char::from()`: `head` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Arena` [INFO] [stdout] --> src/utils.rs:94:5 [INFO] [stdout] | [INFO] [stdout] 94 | / pub fn new() -> Self { [INFO] [stdout] 95 | | Self { items: Vec::new() } [INFO] [stdout] 96 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 93 + impl Default for Arena { [INFO] [stdout] 94 + fn default() -> Self { [INFO] [stdout] 95 + Self::new() [INFO] [stdout] 96 + } [INFO] [stdout] 97 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Arena` has a public `len` method, but no `is_empty` method [INFO] [stdout] --> src/utils.rs:103:5 [INFO] [stdout] | [INFO] [stdout] 103 | pub fn len(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stdout] = note: `#[warn(clippy::len_without_is_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: all variants have the same postfix: `Error` [INFO] [stdout] --> src/cli/mod.rs:34:1 [INFO] [stdout] | [INFO] [stdout] 34 | / enum CliError<'a> { [INFO] [stdout] 35 | | DatabaseError(Error), [INFO] [stdout] 36 | | ParseError(ParseError<'a>), [INFO] [stdout] 37 | | ReadlineError(ReadlineError), [INFO] [stdout] 38 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: remove the postfixes and use full paths to the variants instead of glob imports [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] = note: `#[warn(clippy::enum_variant_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cli/mod.rs:152:40 [INFO] [stdout] | [INFO] [stdout] 152 | let statements = parse_sql_queries(&file_contents)?; [INFO] [stdout] | ^^^^^^^^^^^^^^ help: change this to: `file_contents` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Database` [INFO] [stdout] --> src/database/mod.rs:24:5 [INFO] [stdout] | [INFO] [stdout] 24 | / pub fn new() -> Self { [INFO] [stdout] 25 | | Self { [INFO] [stdout] 26 | | tables: IdMap::new(), [INFO] [stdout] 27 | | all_rows: Arena::new(), [INFO] [stdout] 28 | | } [INFO] [stdout] 29 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 23 + impl Default for Database { [INFO] [stdout] 24 + fn default() -> Self { [INFO] [stdout] 25 + Self::new() [INFO] [stdout] 26 + } [INFO] [stdout] 27 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/database/mod.rs:105:17 [INFO] [stdout] | [INFO] [stdout] 105 | assert!(stmt.joins.len() == 0, "joins are not supported"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `stmt.joins.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `filter_map` with an identity function [INFO] [stdout] --> src/database/mod.rs:136:18 [INFO] [stdout] | [INFO] [stdout] 136 | .filter_map(|x| x) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `flatten()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_map_identity [INFO] [stdout] = note: `#[warn(clippy::filter_map_identity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/database/mod.rs:377:16 [INFO] [stdout] | [INFO] [stdout] 377 | if cond.unwrap_or_else(|| false) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] help: use `unwrap_or` instead [INFO] [stdout] | [INFO] [stdout] 377 - if cond.unwrap_or_else(|| false) { [INFO] [stdout] 377 + if cond.unwrap_or(false) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using a reference to `Cow` is not recommended [INFO] [stdout] --> src/database/mod.rs:389:14 [INFO] [stdout] | [INFO] [stdout] 389 | row: &'db Cow<'db, Row>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: change this to: `&Row` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref on an immutable reference [INFO] [stdout] --> src/database/mod.rs:397:59 [INFO] [stdout] | [INFO] [stdout] 397 | Grouped(inner) => self.eval_where_clause(row, &*inner, header), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrow_deref_ref [INFO] [stdout] = note: `#[warn(clippy::borrow_deref_ref)]` on by default [INFO] [stdout] help: if you would like to reborrow, try removing `&*` [INFO] [stdout] | [INFO] [stdout] 397 - Grouped(inner) => self.eval_where_clause(row, &*inner, header), [INFO] [stdout] 397 + Grouped(inner) => self.eval_where_clause(row, inner, header), [INFO] [stdout] | [INFO] [stdout] help: if you would like to deref, try using `&**` [INFO] [stdout] | [INFO] [stdout] 397 | Grouped(inner) => self.eval_where_clause(row, &**inner, header), [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref on an immutable reference [INFO] [stdout] --> src/database/mod.rs:400:56 [INFO] [stdout] | [INFO] [stdout] 400 | let cond = self.eval_where_clause(row, &*lhs, header)? [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrow_deref_ref [INFO] [stdout] help: if you would like to reborrow, try removing `&*` [INFO] [stdout] | [INFO] [stdout] 400 - let cond = self.eval_where_clause(row, &*lhs, header)? [INFO] [stdout] 400 + let cond = self.eval_where_clause(row, lhs, header)? [INFO] [stdout] | [INFO] [stdout] help: if you would like to deref, try using `&**` [INFO] [stdout] | [INFO] [stdout] 400 | let cond = self.eval_where_clause(row, &**lhs, header)? [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref on an immutable reference [INFO] [stdout] --> src/database/mod.rs:401:52 [INFO] [stdout] | [INFO] [stdout] 401 | && self.eval_where_clause(row, &*rhs, header)?; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrow_deref_ref [INFO] [stdout] help: if you would like to reborrow, try removing `&*` [INFO] [stdout] | [INFO] [stdout] 401 - && self.eval_where_clause(row, &*rhs, header)?; [INFO] [stdout] 401 + && self.eval_where_clause(row, rhs, header)?; [INFO] [stdout] | [INFO] [stdout] help: if you would like to deref, try using `&**` [INFO] [stdout] | [INFO] [stdout] 401 | && self.eval_where_clause(row, &**rhs, header)?; [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref on an immutable reference [INFO] [stdout] --> src/database/mod.rs:405:56 [INFO] [stdout] | [INFO] [stdout] 405 | let cond = self.eval_where_clause(row, &*lhs, header)? [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrow_deref_ref [INFO] [stdout] help: if you would like to reborrow, try removing `&*` [INFO] [stdout] | [INFO] [stdout] 405 - let cond = self.eval_where_clause(row, &*lhs, header)? [INFO] [stdout] 405 + let cond = self.eval_where_clause(row, lhs, header)? [INFO] [stdout] | [INFO] [stdout] help: if you would like to deref, try using `&**` [INFO] [stdout] | [INFO] [stdout] 405 | let cond = self.eval_where_clause(row, &**lhs, header)? [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref on an immutable reference [INFO] [stdout] --> src/database/mod.rs:406:52 [INFO] [stdout] | [INFO] [stdout] 406 | || self.eval_where_clause(row, &*rhs, header)?; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrow_deref_ref [INFO] [stdout] help: if you would like to reborrow, try removing `&*` [INFO] [stdout] | [INFO] [stdout] 406 - || self.eval_where_clause(row, &*rhs, header)?; [INFO] [stdout] 406 + || self.eval_where_clause(row, rhs, header)?; [INFO] [stdout] | [INFO] [stdout] help: if you would like to deref, try using `&**` [INFO] [stdout] | [INFO] [stdout] 406 | || self.eval_where_clause(row, &**rhs, header)?; [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/database/mod.rs:485:25 [INFO] [stdout] | [INFO] [stdout] 485 | / return Err(Error::UndefinedColumn { [INFO] [stdout] 486 | | table_name: None, [INFO] [stdout] 487 | | column_name: column.clone(), [INFO] [stdout] 488 | | }) [INFO] [stdout] | |__________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 485 ~ Err(Error::UndefinedColumn { [INFO] [stdout] 486 + table_name: None, [INFO] [stdout] 487 + column_name: column.clone(), [INFO] [stdout] 488 + }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using a reference to `Cow` is not recommended [INFO] [stdout] --> src/database/mod.rs:433:14 [INFO] [stdout] | [INFO] [stdout] 433 | row: &'a Cow, [INFO] [stdout] | ^^^^^^^^^^^^ help: change this to: `&Row` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/database/mod.rs:650:16 [INFO] [stdout] | [INFO] [stdout] 650 | if !(idx == len - 1) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `(idx != len - 1)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `write!()` with a format string that ends in a single newline [INFO] [stdout] --> src/database/mod.rs:651:17 [INFO] [stdout] | [INFO] [stdout] 651 | write!(f, "\n")?; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stdout] = note: `#[warn(clippy::write_with_newline)]` on by default [INFO] [stdout] help: use `writeln!` instead [INFO] [stdout] | [INFO] [stdout] 651 - write!(f, "\n")?; [INFO] [stdout] 651 + writeln!(f)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/schema/mod.rs:44:9 [INFO] [stdout] | [INFO] [stdout] 38 | / let table = Table { [INFO] [stdout] 39 | | name: stmt.name, [INFO] [stdout] 40 | | id: stmt.id, [INFO] [stdout] 41 | | columns: stmt.columns.into_iter().collect(), [INFO] [stdout] 42 | | }; [INFO] [stdout] | |__________- unnecessary `let` binding [INFO] [stdout] 43 | [INFO] [stdout] 44 | table [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 38 ~ [INFO] [stdout] 39 | [INFO] [stdout] 40 ~ Table { [INFO] [stdout] 41 + name: stmt.name, [INFO] [stdout] 42 + id: stmt.id, [INFO] [stdout] 43 + columns: stmt.columns.into_iter().collect(), [INFO] [stdout] 44 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/sql/mod.rs:163:45 [INFO] [stdout] | [INFO] [stdout] 163 | let table = Ident::parser().map(|ident| Source::Table(ident)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Source::Table` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/sql/mod.rs:255:42 [INFO] [stdout] | [INFO] [stdout] 255 | RelativeColumn::parser().map(|ident| Column::Relative(ident)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Column::Relative` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/sql/mod.rs:297:41 [INFO] [stdout] | [INFO] [stdout] 297 | let ident = Ident::parser().map(|ident| RelativeColumn::Ident(ident)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `RelativeColumn::Ident` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/sql/mod.rs:352:6 [INFO] [stdout] | [INFO] [stdout] 352 | impl<'a> PartialEq for &'a Ident { [INFO] [stdout] | ^^ ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stdout] help: elide the lifetimes [INFO] [stdout] | [INFO] [stdout] 352 - impl<'a> PartialEq for &'a Ident { [INFO] [stdout] 352 + impl PartialEq for &Ident { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/sql/mod.rs:514:43 [INFO] [stdout] | [INFO] [stdout] 514 | let column = Column::parser().map(|col| Expr::Column(col)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Expr::Column` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/sql/mod.rs:515:41 [INFO] [stdout] | [INFO] [stdout] 515 | let value = Value::parser().map(|lit| Expr::Value(lit)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Expr::Value` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/sql/mod.rs:619:41 [INFO] [stdout] | [INFO] [stdout] 619 | let named = Ident::parser().map(|id| Type::Named(id)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Type::Named` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/sql/mod.rs:627:18 [INFO] [stdout] | [INFO] [stdout] 627 | .map(|id| Type::Option(id)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Type::Option` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/utils.rs:54:17 [INFO] [stdout] | [INFO] [stdout] 54 | pub fn iter(&self) -> std::collections::hash_map::Iter { [INFO] [stdout] | ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 54 | pub fn iter(&self) -> std::collections::hash_map::Iter<'_, V::Id, V> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/cli/mod.rs:88:24 [INFO] [stdout] | [INFO] [stdout] 88 | fn repl(file_contents: &Option) -> Result<(), CliError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ ^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 88 | fn repl(file_contents: &Option) -> Result<(), CliError<'_>> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/database/mod.rs:104:23 [INFO] [stdout] | [INFO] [stdout] 104 | pub fn run_select(&self, stmt: &Select) -> Result { [INFO] [stdout] | ^^^^^ ^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 104 | pub fn run_select(&self, stmt: &Select) -> Result> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `source` and `where_clause` are never read [INFO] [stdout] --> src/sql/mod.rs:233:5 [INFO] [stdout] | [INFO] [stdout] 232 | pub struct OuterJoin { [INFO] [stdout] | --------- fields in this struct [INFO] [stdout] 233 | source: Source, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 234 | where_clause: WhereClause, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `OuterJoin` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/utils/parse/pos.rs:21:6 [INFO] [stdout] | [INFO] [stdout] 21 | impl<'a> Add for &'a Pos { [INFO] [stdout] | ^^ ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stdout] = note: `#[warn(clippy::needless_lifetimes)]` on by default [INFO] [stdout] help: elide the lifetimes [INFO] [stdout] | [INFO] [stdout] 21 - impl<'a> Add for &'a Pos { [INFO] [stdout] 21 + impl Add for &Pos { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/utils/parse/pos.rs:41:6 [INFO] [stdout] | [INFO] [stdout] 41 | impl<'a> Sub for &'a Pos { [INFO] [stdout] | ^^ ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stdout] help: elide the lifetimes [INFO] [stdout] | [INFO] [stdout] 41 - impl<'a> Sub for &'a Pos { [INFO] [stdout] 41 + impl Sub for &Pos { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/utils/parse.rs:128:33 [INFO] [stdout] | [INFO] [stdout] 128 | fn tap_print_debug(self) -> Tap> [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/utils/parse.rs:136:35 [INFO] [stdout] | [INFO] [stdout] 136 | fn tap_print_display(self) -> Tap> [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/utils/parse.rs:413:20 [INFO] [stdout] | [INFO] [stdout] 413 | let head = input [INFO] [stdout] | ____________________^ [INFO] [stdout] 414 | | .at(pos) [INFO] [stdout] 415 | | .ok_or_else(|| ParseError::UnexpectedEndOfInput { pos, input })?; [INFO] [stdout] | |___________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] = note: `#[warn(clippy::unnecessary_lazy_evaluations)]` on by default [INFO] [stdout] help: use `ok_or` instead [INFO] [stdout] | [INFO] [stdout] 415 - .ok_or_else(|| ParseError::UnexpectedEndOfInput { pos, input })?; [INFO] [stdout] 415 + .ok_or(ParseError::UnexpectedEndOfInput { pos, input })?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `char` [INFO] [stdout] --> src/utils/parse.rs:417:17 [INFO] [stdout] | [INFO] [stdout] 417 | let c = char::from(head); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: consider removing `char::from()`: `head` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/utils/parse.rs:697:20 [INFO] [stdout] | [INFO] [stdout] 697 | let head = input [INFO] [stdout] | ____________________^ [INFO] [stdout] 698 | | .at(pos) [INFO] [stdout] 699 | | .ok_or_else(|| ParseError::UnexpectedEndOfInput { pos, input })?; [INFO] [stdout] | |___________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] help: use `ok_or` instead [INFO] [stdout] | [INFO] [stdout] 699 - .ok_or_else(|| ParseError::UnexpectedEndOfInput { pos, input })?; [INFO] [stdout] 699 + .ok_or(ParseError::UnexpectedEndOfInput { pos, input })?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `char` [INFO] [stdout] --> src/utils/parse.rs:700:17 [INFO] [stdout] | [INFO] [stdout] 700 | let c = char::from(head); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: consider removing `char::from()`: `head` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Arena` [INFO] [stdout] --> src/utils.rs:94:5 [INFO] [stdout] | [INFO] [stdout] 94 | / pub fn new() -> Self { [INFO] [stdout] 95 | | Self { items: Vec::new() } [INFO] [stdout] 96 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 93 + impl Default for Arena { [INFO] [stdout] 94 + fn default() -> Self { [INFO] [stdout] 95 + Self::new() [INFO] [stdout] 96 + } [INFO] [stdout] 97 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Arena` has a public `len` method, but no `is_empty` method [INFO] [stdout] --> src/utils.rs:103:5 [INFO] [stdout] | [INFO] [stdout] 103 | pub fn len(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stdout] = note: `#[warn(clippy::len_without_is_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: all variants have the same postfix: `Error` [INFO] [stdout] --> src/cli/mod.rs:34:1 [INFO] [stdout] | [INFO] [stdout] 34 | / enum CliError<'a> { [INFO] [stdout] 35 | | DatabaseError(Error), [INFO] [stdout] 36 | | ParseError(ParseError<'a>), [INFO] [stdout] 37 | | ReadlineError(ReadlineError), [INFO] [stdout] 38 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: remove the postfixes and use full paths to the variants instead of glob imports [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] = note: `#[warn(clippy::enum_variant_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cli/mod.rs:152:40 [INFO] [stdout] | [INFO] [stdout] 152 | let statements = parse_sql_queries(&file_contents)?; [INFO] [stdout] | ^^^^^^^^^^^^^^ help: change this to: `file_contents` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Database` [INFO] [stdout] --> src/database/mod.rs:24:5 [INFO] [stdout] | [INFO] [stdout] 24 | / pub fn new() -> Self { [INFO] [stdout] 25 | | Self { [INFO] [stdout] 26 | | tables: IdMap::new(), [INFO] [stdout] 27 | | all_rows: Arena::new(), [INFO] [stdout] 28 | | } [INFO] [stdout] 29 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 23 + impl Default for Database { [INFO] [stdout] 24 + fn default() -> Self { [INFO] [stdout] 25 + Self::new() [INFO] [stdout] 26 + } [INFO] [stdout] 27 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/database/mod.rs:105:17 [INFO] [stdout] | [INFO] [stdout] 105 | assert!(stmt.joins.len() == 0, "joins are not supported"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `stmt.joins.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `filter_map` with an identity function [INFO] [stdout] --> src/database/mod.rs:136:18 [INFO] [stdout] | [INFO] [stdout] 136 | .filter_map(|x| x) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `flatten()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_map_identity [INFO] [stdout] = note: `#[warn(clippy::filter_map_identity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/database/mod.rs:377:16 [INFO] [stdout] | [INFO] [stdout] 377 | if cond.unwrap_or_else(|| false) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] help: use `unwrap_or` instead [INFO] [stdout] | [INFO] [stdout] 377 - if cond.unwrap_or_else(|| false) { [INFO] [stdout] 377 + if cond.unwrap_or(false) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using a reference to `Cow` is not recommended [INFO] [stdout] --> src/database/mod.rs:389:14 [INFO] [stdout] | [INFO] [stdout] 389 | row: &'db Cow<'db, Row>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: change this to: `&Row` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref on an immutable reference [INFO] [stdout] --> src/database/mod.rs:397:59 [INFO] [stdout] | [INFO] [stdout] 397 | Grouped(inner) => self.eval_where_clause(row, &*inner, header), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrow_deref_ref [INFO] [stdout] = note: `#[warn(clippy::borrow_deref_ref)]` on by default [INFO] [stdout] help: if you would like to reborrow, try removing `&*` [INFO] [stdout] | [INFO] [stdout] 397 - Grouped(inner) => self.eval_where_clause(row, &*inner, header), [INFO] [stdout] 397 + Grouped(inner) => self.eval_where_clause(row, inner, header), [INFO] [stdout] | [INFO] [stdout] help: if you would like to deref, try using `&**` [INFO] [stdout] | [INFO] [stdout] 397 | Grouped(inner) => self.eval_where_clause(row, &**inner, header), [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref on an immutable reference [INFO] [stdout] --> src/database/mod.rs:400:56 [INFO] [stdout] | [INFO] [stdout] 400 | let cond = self.eval_where_clause(row, &*lhs, header)? [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrow_deref_ref [INFO] [stdout] help: if you would like to reborrow, try removing `&*` [INFO] [stdout] | [INFO] [stdout] 400 - let cond = self.eval_where_clause(row, &*lhs, header)? [INFO] [stdout] 400 + let cond = self.eval_where_clause(row, lhs, header)? [INFO] [stdout] | [INFO] [stdout] help: if you would like to deref, try using `&**` [INFO] [stdout] | [INFO] [stdout] 400 | let cond = self.eval_where_clause(row, &**lhs, header)? [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref on an immutable reference [INFO] [stdout] --> src/database/mod.rs:401:52 [INFO] [stdout] | [INFO] [stdout] 401 | && self.eval_where_clause(row, &*rhs, header)?; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrow_deref_ref [INFO] [stdout] help: if you would like to reborrow, try removing `&*` [INFO] [stdout] | [INFO] [stdout] 401 - && self.eval_where_clause(row, &*rhs, header)?; [INFO] [stdout] 401 + && self.eval_where_clause(row, rhs, header)?; [INFO] [stdout] | [INFO] [stdout] help: if you would like to deref, try using `&**` [INFO] [stdout] | [INFO] [stdout] 401 | && self.eval_where_clause(row, &**rhs, header)?; [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref on an immutable reference [INFO] [stdout] --> src/database/mod.rs:405:56 [INFO] [stdout] | [INFO] [stdout] 405 | let cond = self.eval_where_clause(row, &*lhs, header)? [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrow_deref_ref [INFO] [stdout] help: if you would like to reborrow, try removing `&*` [INFO] [stdout] | [INFO] [stdout] 405 - let cond = self.eval_where_clause(row, &*lhs, header)? [INFO] [stdout] 405 + let cond = self.eval_where_clause(row, lhs, header)? [INFO] [stdout] | [INFO] [stdout] help: if you would like to deref, try using `&**` [INFO] [stdout] | [INFO] [stdout] 405 | let cond = self.eval_where_clause(row, &**lhs, header)? [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref on an immutable reference [INFO] [stdout] --> src/database/mod.rs:406:52 [INFO] [stdout] | [INFO] [stdout] 406 | || self.eval_where_clause(row, &*rhs, header)?; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrow_deref_ref [INFO] [stdout] help: if you would like to reborrow, try removing `&*` [INFO] [stdout] | [INFO] [stdout] 406 - || self.eval_where_clause(row, &*rhs, header)?; [INFO] [stdout] 406 + || self.eval_where_clause(row, rhs, header)?; [INFO] [stdout] | [INFO] [stdout] help: if you would like to deref, try using `&**` [INFO] [stdout] | [INFO] [stdout] 406 | || self.eval_where_clause(row, &**rhs, header)?; [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/database/mod.rs:485:25 [INFO] [stdout] | [INFO] [stdout] 485 | / return Err(Error::UndefinedColumn { [INFO] [stdout] 486 | | table_name: None, [INFO] [stdout] 487 | | column_name: column.clone(), [INFO] [stdout] 488 | | }) [INFO] [stdout] | |__________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 485 ~ Err(Error::UndefinedColumn { [INFO] [stdout] 486 + table_name: None, [INFO] [stdout] 487 + column_name: column.clone(), [INFO] [stdout] 488 + }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using a reference to `Cow` is not recommended [INFO] [stdout] --> src/database/mod.rs:433:14 [INFO] [stdout] | [INFO] [stdout] 433 | row: &'a Cow, [INFO] [stdout] | ^^^^^^^^^^^^ help: change this to: `&Row` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/database/mod.rs:650:16 [INFO] [stdout] | [INFO] [stdout] 650 | if !(idx == len - 1) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `(idx != len - 1)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `write!()` with a format string that ends in a single newline [INFO] [stdout] --> src/database/mod.rs:651:17 [INFO] [stdout] | [INFO] [stdout] 651 | write!(f, "\n")?; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stdout] = note: `#[warn(clippy::write_with_newline)]` on by default [INFO] [stdout] help: use `writeln!` instead [INFO] [stdout] | [INFO] [stdout] 651 - write!(f, "\n")?; [INFO] [stdout] 651 + writeln!(f)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/schema/mod.rs:44:9 [INFO] [stdout] | [INFO] [stdout] 38 | / let table = Table { [INFO] [stdout] 39 | | name: stmt.name, [INFO] [stdout] 40 | | id: stmt.id, [INFO] [stdout] 41 | | columns: stmt.columns.into_iter().collect(), [INFO] [stdout] 42 | | }; [INFO] [stdout] | |__________- unnecessary `let` binding [INFO] [stdout] 43 | [INFO] [stdout] 44 | table [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 38 ~ [INFO] [stdout] 39 | [INFO] [stdout] 40 ~ Table { [INFO] [stdout] 41 + name: stmt.name, [INFO] [stdout] 42 + id: stmt.id, [INFO] [stdout] 43 + columns: stmt.columns.into_iter().collect(), [INFO] [stdout] 44 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/sql/mod.rs:163:45 [INFO] [stdout] | [INFO] [stdout] 163 | let table = Ident::parser().map(|ident| Source::Table(ident)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Source::Table` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/sql/mod.rs:255:42 [INFO] [stdout] | [INFO] [stdout] 255 | RelativeColumn::parser().map(|ident| Column::Relative(ident)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Column::Relative` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/sql/mod.rs:297:41 [INFO] [stdout] | [INFO] [stdout] 297 | let ident = Ident::parser().map(|ident| RelativeColumn::Ident(ident)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `RelativeColumn::Ident` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/sql/mod.rs:352:6 [INFO] [stdout] | [INFO] [stdout] 352 | impl<'a> PartialEq for &'a Ident { [INFO] [stdout] | ^^ ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stdout] help: elide the lifetimes [INFO] [stdout] | [INFO] [stdout] 352 - impl<'a> PartialEq for &'a Ident { [INFO] [stdout] 352 + impl PartialEq for &Ident { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/sql/mod.rs:514:43 [INFO] [stdout] | [INFO] [stdout] 514 | let column = Column::parser().map(|col| Expr::Column(col)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Expr::Column` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/sql/mod.rs:515:41 [INFO] [stdout] | [INFO] [stdout] 515 | let value = Value::parser().map(|lit| Expr::Value(lit)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Expr::Value` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/sql/mod.rs:619:41 [INFO] [stdout] | [INFO] [stdout] 619 | let named = Ident::parser().map(|id| Type::Named(id)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Type::Named` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/sql/mod.rs:627:18 [INFO] [stdout] | [INFO] [stdout] 627 | .map(|id| Type::Option(id)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Type::Option` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/utils.rs:54:17 [INFO] [stdout] | [INFO] [stdout] 54 | pub fn iter(&self) -> std::collections::hash_map::Iter { [INFO] [stdout] | ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 54 | pub fn iter(&self) -> std::collections::hash_map::Iter<'_, V::Id, V> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/cli/mod.rs:88:24 [INFO] [stdout] | [INFO] [stdout] 88 | fn repl(file_contents: &Option) -> Result<(), CliError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ ^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 88 | fn repl(file_contents: &Option) -> Result<(), CliError<'_>> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/database/mod.rs:104:23 [INFO] [stdout] | [INFO] [stdout] 104 | pub fn run_select(&self, stmt: &Select) -> Result { [INFO] [stdout] | ^^^^^ ^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 104 | pub fn run_select(&self, stmt: &Select) -> Result> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 13.37s [INFO] running `Command { std: "docker" "inspect" "e483c09bfca6a2c524588f73f2bf3073296b908db47da0af4c966033f6e57395", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "e483c09bfca6a2c524588f73f2bf3073296b908db47da0af4c966033f6e57395", kill_on_drop: false }` [INFO] [stdout] e483c09bfca6a2c524588f73f2bf3073296b908db47da0af4c966033f6e57395