From 25feb54c7066cd86c2626d01e7071f9cf3c7bec7 Mon Sep 17 00:00:00 2001 From: Yoshua Wuyts Date: Wed, 1 Jul 2020 17:57:34 +0200 Subject: [PATCH 1/2] introduce lints + fix rust 2018 idioms --- .buildkite/docker.sh | 1 + src/ast/column.rs | 2 +- src/ast/grouping.rs | 4 ++-- src/ast/index.rs | 2 +- src/ast/table.rs | 4 ++-- src/ast/union.rs | 2 +- src/error.rs | 2 +- src/lib.rs | 5 +++++ src/macros.rs | 2 +- src/visitor/mssql.rs | 1 - src/visitor/mysql.rs | 1 - src/visitor/sqlite.rs | 1 - 12 files changed, 15 insertions(+), 12 deletions(-) diff --git a/.buildkite/docker.sh b/.buildkite/docker.sh index 7088d3f58..0f1e66379 100755 --- a/.buildkite/docker.sh +++ b/.buildkite/docker.sh @@ -24,6 +24,7 @@ docker run -w /build --network test-net -v $BUILDKITE_BUILD_CHECKOUT_PATH:/build -e TEST_MYSQL=mysql://prisma:prisma@test-mysql:3306/prisma \ -e TEST_PSQL=postgres://prisma:prisma@test-postgres:5432/prisma \ -e TEST_MSSQL="sqlserver://test-mssql:1433;user=SA;password=$MSSQL_SA_PASSWORD;trustServerCertificate=true" \ + -e RUSTFLAGS="-Dwarnings" \ prismagraphql/build:test cargo test --features full,json-1,uuid-0_8,chrono-0_4,tracing-log,serde-support exit_code=$? diff --git a/src/ast/column.rs b/src/ast/column.rs index 972918c47..00e85828d 100644 --- a/src/ast/column.rs +++ b/src/ast/column.rs @@ -39,7 +39,7 @@ where } impl<'a> PartialEq for Column<'a> { - fn eq(&self, other: &Column) -> bool { + fn eq(&self, other: &Column<'_>) -> bool { self.name == other.name && self.table == other.table } } diff --git a/src/ast/grouping.rs b/src/ast/grouping.rs index 530cd3a97..8852161a9 100644 --- a/src/ast/grouping.rs +++ b/src/ast/grouping.rs @@ -38,14 +38,14 @@ pub trait IntoGroupByDefinition<'a> { impl<'a> IntoGroupByDefinition<'a> for &'a str { fn into_group_by_definition(self) -> GroupByDefinition<'a> { - let column: Column = self.into(); + let column: Column<'_> = self.into(); column.into() } } impl<'a> IntoGroupByDefinition<'a> for (&'a str, &'a str) { fn into_group_by_definition(self) -> GroupByDefinition<'a> { - let column: Column = self.into(); + let column: Column<'_> = self.into(); column.into() } } diff --git a/src/ast/index.rs b/src/ast/index.rs index a8168e021..f4d8bd544 100644 --- a/src/ast/index.rs +++ b/src/ast/index.rs @@ -33,7 +33,7 @@ impl<'a> IndexDefinition<'a> { } /// True if the index definition contains the given column. - pub fn contains(&self, column: &Column) -> bool { + pub fn contains(&self, column: &Column<'_>) -> bool { match self { Self::Single(ref c) if c == column => true, Self::Compound(ref cols) if cols.iter().any(|c| c == column) => true, diff --git a/src/ast/table.rs b/src/ast/table.rs index d2f52f957..e8f978967 100644 --- a/src/ast/table.rs +++ b/src/ast/table.rs @@ -33,7 +33,7 @@ pub struct Table<'a> { } impl<'a> PartialEq for Table<'a> { - fn eq(&self, other: &Table) -> bool { + fn eq(&self, other: &Table<'_>) -> bool { self.typ == other.typ && self.database == other.database } } @@ -91,7 +91,7 @@ impl<'a> Table<'a> { Some(dual_col.equals(column.clone()).into()) }; - Ok::, Error>(cond) + Ok::>, Error>(cond) }; for index in self.index_definitions.iter() { diff --git a/src/ast/union.rs b/src/ast/union.rs index dbe1d3d82..d40ab8b78 100644 --- a/src/ast/union.rs +++ b/src/ast/union.rs @@ -8,7 +8,7 @@ pub(crate) enum UnionType { } impl fmt::Display for UnionType { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { UnionType::All => write!(f, "UNION ALL"), UnionType::Distinct => write!(f, "UNION"), diff --git a/src/error.rs b/src/error.rs index 58f0e8419..032d2df39 100644 --- a/src/error.rs +++ b/src/error.rs @@ -80,7 +80,7 @@ impl Error { } impl fmt::Display for Error { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { self.kind.fmt(f) } } diff --git a/src/lib.rs b/src/lib.rs index 483a90ceb..000303810 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -103,6 +103,11 @@ //! # Ok(()) //! # } //! ``` + +#![forbid(unsafe_code, future_incompatible, rust_2018_idioms)] +#![deny(missing_debug_implementations, nonstandard_style)] +#![warn(missing_docs, unreachable_pub)] + #[macro_use] mod macros; diff --git a/src/macros.rs b/src/macros.rs index d000721ae..9d4a3610f 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -116,7 +116,7 @@ macro_rules! aliasable { where T: Into>, { - let table: Table = self.into(); + let table: Table<'_> = self.into(); table.alias(alias) } } diff --git a/src/visitor/mssql.rs b/src/visitor/mssql.rs index 7d984796b..63f759779 100644 --- a/src/visitor/mssql.rs +++ b/src/visitor/mssql.rs @@ -4,7 +4,6 @@ use crate::{ Column, Expression, ExpressionKind, Insert, IntoRaw, Merge, OnConflict, Order, Ordering, Row, Table, TableType, Using, Values, }, - error::{Error, ErrorKind}, visitor, Value, }; use std::{convert::TryFrom, fmt::Write}; diff --git a/src/visitor/mysql.rs b/src/visitor/mysql.rs index f01f31ed9..0fd8fdb5e 100644 --- a/src/visitor/mysql.rs +++ b/src/visitor/mysql.rs @@ -1,6 +1,5 @@ use crate::{ ast::*, - error::{Error, ErrorKind}, visitor::{self, Visitor}, }; use std::fmt::{self, Write}; diff --git a/src/visitor/sqlite.rs b/src/visitor/sqlite.rs index d58e8c800..6c43fb322 100644 --- a/src/visitor/sqlite.rs +++ b/src/visitor/sqlite.rs @@ -1,6 +1,5 @@ use crate::{ ast::*, - error::{Error, ErrorKind}, visitor::{self, Visitor}, }; From 016c17c767301d3434ed3119318c14d29aecdf5a Mon Sep 17 00:00:00 2001 From: Yoshua Wuyts Date: Wed, 1 Jul 2020 18:10:09 +0200 Subject: [PATCH 2/2] another pass of lint fixes --- src/connector/connection_info.rs | 2 +- src/connector/mysql.rs | 4 ++-- src/connector/postgres.rs | 10 +++++----- src/connector/result_set.rs | 4 ++-- src/connector/result_set/index.rs | 4 ++-- src/connector/result_set/result_row.rs | 2 +- src/connector/sqlite.rs | 4 ++-- src/connector/sqlite/conversion.rs | 2 +- src/visitor/mssql.rs | 1 + src/visitor/mysql.rs | 1 + src/visitor/sqlite.rs | 1 + 11 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/connector/connection_info.rs b/src/connector/connection_info.rs index 042701fd5..f4c44a256 100644 --- a/src/connector/connection_info.rs +++ b/src/connector/connection_info.rs @@ -137,7 +137,7 @@ impl ConnectionInfo { } /// The provided database user name. This will be `None` on SQLite. - pub fn username(&self) -> Option> { + pub fn username(&self) -> Option> { match self { #[cfg(feature = "postgresql")] ConnectionInfo::Postgres(url) => Some(url.username()), diff --git a/src/connector/mysql.rs b/src/connector/mysql.rs index 231349d5e..bf74f5519 100644 --- a/src/connector/mysql.rs +++ b/src/connector/mysql.rs @@ -46,7 +46,7 @@ impl MysqlUrl { } /// The percent-decoded database username. - pub fn username(&self) -> Cow { + pub fn username(&self) -> Cow<'_, str> { match percent_decode(self.url.username().as_bytes()).decode_utf8() { Ok(username) => username, Err(_) => { @@ -61,7 +61,7 @@ impl MysqlUrl { } /// The percent-decoded database password. - pub fn password(&self) -> Option> { + pub fn password(&self) -> Option> { match self .url .password() diff --git a/src/connector/postgres.rs b/src/connector/postgres.rs index b8efe2839..dcabcae6e 100644 --- a/src/connector/postgres.rs +++ b/src/connector/postgres.rs @@ -154,7 +154,7 @@ impl PostgresUrl { } /// The percent-decoded database username. - pub fn username(&self) -> Cow { + pub fn username(&self) -> Cow<'_, str> { match percent_decode(self.url.username().as_bytes()).decode_utf8() { Ok(username) => username, Err(_) => { @@ -191,7 +191,7 @@ impl PostgresUrl { } /// The percent-decoded database password. - pub fn password(&self) -> Cow { + pub fn password(&self) -> Cow<'_, str> { match self .url .password() @@ -667,7 +667,7 @@ mod tests { assert!(res.is_empty()); } - #[allow(unused)] + #[allow(dead_code)] const TABLE_DEF: &str = r#" CREATE TABLE "user"( id int4 PRIMARY KEY NOT NULL, @@ -677,13 +677,13 @@ mod tests { ); "#; - #[allow(unused)] + #[allow(dead_code)] const CREATE_USER: &str = r#" INSERT INTO "user" (id, name, age, salary) VALUES (1, 'Joe', 27, 20000.00 ); "#; - #[allow(unused)] + #[allow(dead_code)] const DROP_TABLE: &str = "DROP TABLE IF EXISTS \"user\";"; #[tokio::test] diff --git a/src/connector/result_set.rs b/src/connector/result_set.rs index be1dbb3c0..25c2f7d84 100644 --- a/src/connector/result_set.rs +++ b/src/connector/result_set.rs @@ -54,12 +54,12 @@ impl ResultSet { } /// Returns the first row of the `ResultSet`, or None if the set is empty. - pub fn first(&self) -> Option { + pub fn first(&self) -> Option> { self.get(0) } /// Returns a reference to a row in a given position. - pub fn get(&self, index: usize) -> Option { + pub fn get(&self, index: usize) -> Option> { self.rows.get(index).map(|row| ResultRowRef { columns: Arc::clone(&self.columns), values: row, diff --git a/src/connector/result_set/index.rs b/src/connector/result_set/index.rs index 7b499f23b..b25835d60 100644 --- a/src/connector/result_set/index.rs +++ b/src/connector/result_set/index.rs @@ -14,13 +14,13 @@ mod private { } impl ValueIndex, Value<'static>> for usize { - fn index_into<'v>(self, row: &'v ResultRowRef) -> &'v Value<'static> { + fn index_into<'v>(self, row: &'v ResultRowRef<'_>) -> &'v Value<'static> { row.at(self).unwrap() } } impl ValueIndex, Value<'static>> for &str { - fn index_into<'v>(self, row: &'v ResultRowRef) -> &'v Value<'static> { + fn index_into<'v>(self, row: &'v ResultRowRef<'_>) -> &'v Value<'static> { row.get(self).unwrap() } } diff --git a/src/connector/result_set/result_row.rs b/src/connector/result_set/result_row.rs index 07ec880ef..108e47333 100644 --- a/src/connector/result_set/result_row.rs +++ b/src/connector/result_set/result_row.rs @@ -64,7 +64,7 @@ impl ResultRow { } /// Make a referring [ResultRowRef](struct.ResultRowRef.html). - pub fn as_ref(&self) -> ResultRowRef { + pub fn as_ref(&self) -> ResultRowRef<'_> { ResultRowRef { columns: Arc::clone(&self.columns), values: &self.values, diff --git a/src/connector/sqlite.rs b/src/connector/sqlite.rs index cbda2183a..49d4dd3e6 100644 --- a/src/connector/sqlite.rs +++ b/src/connector/sqlite.rs @@ -330,7 +330,7 @@ mod tests { } } - #[allow(unused)] + #[allow(dead_code)] const TABLE_DEF: &str = r#" CREATE TABLE USER ( ID INT PRIMARY KEY NOT NULL, @@ -340,7 +340,7 @@ mod tests { ); "#; - #[allow(unused)] + #[allow(dead_code)] const CREATE_USER: &str = r#" INSERT INTO USER (ID,NAME,AGE,SALARY) VALUES (1, 'Joe', 27, 20000.00 ); diff --git a/src/connector/sqlite/conversion.rs b/src/connector/sqlite/conversion.rs index 7501f008e..e8e551e50 100644 --- a/src/connector/sqlite/conversion.rs +++ b/src/connector/sqlite/conversion.rs @@ -156,7 +156,7 @@ impl<'a> ToColumnNames for SqliteRows<'a> { } impl<'a> ToSql for Value<'a> { - fn to_sql(&self) -> Result { + fn to_sql(&self) -> Result, RusqlError> { let value = match self { Value::Integer(integer) => integer.map(|i| ToSqlOutput::from(i)), Value::Real(d) => d.map(|d| ToSqlOutput::from(d.to_f64().expect("Decimal is not a f64."))), diff --git a/src/visitor/mssql.rs b/src/visitor/mssql.rs index 63f759779..7d984796b 100644 --- a/src/visitor/mssql.rs +++ b/src/visitor/mssql.rs @@ -4,6 +4,7 @@ use crate::{ Column, Expression, ExpressionKind, Insert, IntoRaw, Merge, OnConflict, Order, Ordering, Row, Table, TableType, Using, Values, }, + error::{Error, ErrorKind}, visitor, Value, }; use std::{convert::TryFrom, fmt::Write}; diff --git a/src/visitor/mysql.rs b/src/visitor/mysql.rs index 0fd8fdb5e..016d7c02a 100644 --- a/src/visitor/mysql.rs +++ b/src/visitor/mysql.rs @@ -1,6 +1,7 @@ use crate::{ ast::*, visitor::{self, Visitor}, + error::{Error, ErrorKind}, }; use std::fmt::{self, Write}; diff --git a/src/visitor/sqlite.rs b/src/visitor/sqlite.rs index 6c43fb322..c0093cebc 100644 --- a/src/visitor/sqlite.rs +++ b/src/visitor/sqlite.rs @@ -1,6 +1,7 @@ use crate::{ ast::*, visitor::{self, Visitor}, + error::{Error, ErrorKind}, }; use std::fmt::{self, Write};