From a593b14adc8cda9a95952fe5a09b038ba94d6f8b Mon Sep 17 00:00:00 2001 From: Mikhail Cheshkov Date: Tue, 3 Sep 2024 03:26:24 +0300 Subject: [PATCH] chore: Fix fresh clippy warnings --- src/ast/mod.rs | 5 ++--- src/dialect/ansi.rs | 7 ++----- src/dialect/clickhouse.rs | 4 ++-- src/dialect/generic.rs | 12 ++++-------- src/dialect/hive.rs | 11 ++++------- src/dialect/mssql.rs | 12 ++++-------- src/dialect/mysql.rs | 6 +++--- src/dialect/postgresql.rs | 8 ++++---- src/dialect/snowflake.rs | 8 ++++---- src/dialect/sqlite.rs | 6 +++--- src/parser.rs | 14 ++++++-------- src/tokenizer.rs | 17 +++++++---------- tests/sqlparser_mysql.rs | 8 ++++---- tests/sqlparser_postgres.rs | 1 - 14 files changed, 49 insertions(+), 70 deletions(-) diff --git a/src/ast/mod.rs b/src/ast/mod.rs index 7dac98d15..db5b63d74 100644 --- a/src/ast/mod.rs +++ b/src/ast/mod.rs @@ -140,7 +140,7 @@ impl fmt::Display for Ident { } f.write_char(q) } - Some(q) if q == '[' => write!(f, "[{}]", self.value), + Some('[') => write!(f, "[{}]", self.value), None => f.write_str(&self.value), _ => panic!("unexpected quote style"), } @@ -1841,7 +1841,7 @@ impl fmt::Display for Statement { Statement::SetVariable { key_values } => { f.write_str("SET ")?; - if let Some(key_value) = key_values.get(0) { + if let Some(key_value) = key_values.first() { if key_value.hivevar { let values: Vec = key_value .value @@ -2938,7 +2938,6 @@ impl fmt::Display for CopyLegacyCsvOption { } } -/// #[derive(Debug, Clone, PartialEq, Eq, Hash)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub enum MergeClause { diff --git a/src/dialect/ansi.rs b/src/dialect/ansi.rs index 1015ca2d3..14c83ae16 100644 --- a/src/dialect/ansi.rs +++ b/src/dialect/ansi.rs @@ -17,13 +17,10 @@ pub struct AnsiDialect {} impl Dialect for AnsiDialect { fn is_identifier_start(&self, ch: char) -> bool { - ('a'..='z').contains(&ch) || ('A'..='Z').contains(&ch) + ch.is_ascii_lowercase() || ch.is_ascii_uppercase() } fn is_identifier_part(&self, ch: char) -> bool { - ('a'..='z').contains(&ch) - || ('A'..='Z').contains(&ch) - || ('0'..='9').contains(&ch) - || ch == '_' + ch.is_ascii_lowercase() || ch.is_ascii_uppercase() || ch.is_ascii_digit() || ch == '_' } } diff --git a/src/dialect/clickhouse.rs b/src/dialect/clickhouse.rs index 24ec5e49f..395116f9c 100644 --- a/src/dialect/clickhouse.rs +++ b/src/dialect/clickhouse.rs @@ -18,10 +18,10 @@ pub struct ClickHouseDialect {} impl Dialect for ClickHouseDialect { fn is_identifier_start(&self, ch: char) -> bool { // See https://clickhouse.com/docs/en/sql-reference/syntax/#syntax-identifiers - ('a'..='z').contains(&ch) || ('A'..='Z').contains(&ch) || ch == '_' + ch.is_ascii_lowercase() || ch.is_ascii_uppercase() || ch == '_' } fn is_identifier_part(&self, ch: char) -> bool { - self.is_identifier_start(ch) || ('0'..='9').contains(&ch) + self.is_identifier_start(ch) || ch.is_ascii_digit() } } diff --git a/src/dialect/generic.rs b/src/dialect/generic.rs index 818fa0d0a..51ae3dafd 100644 --- a/src/dialect/generic.rs +++ b/src/dialect/generic.rs @@ -17,17 +17,13 @@ pub struct GenericDialect; impl Dialect for GenericDialect { fn is_identifier_start(&self, ch: char) -> bool { - ('a'..='z').contains(&ch) - || ('A'..='Z').contains(&ch) - || ch == '_' - || ch == '#' - || ch == '@' + ch.is_ascii_lowercase() || ch.is_ascii_uppercase() || ch == '_' || ch == '#' || ch == '@' } fn is_identifier_part(&self, ch: char) -> bool { - ('a'..='z').contains(&ch) - || ('A'..='Z').contains(&ch) - || ('0'..='9').contains(&ch) + ch.is_ascii_lowercase() + || ch.is_ascii_uppercase() + || ch.is_ascii_digit() || ch == '@' || ch == '$' || ch == '#' diff --git a/src/dialect/hive.rs b/src/dialect/hive.rs index 9b42857ec..7db599f3d 100644 --- a/src/dialect/hive.rs +++ b/src/dialect/hive.rs @@ -21,16 +21,13 @@ impl Dialect for HiveDialect { } fn is_identifier_start(&self, ch: char) -> bool { - ('a'..='z').contains(&ch) - || ('A'..='Z').contains(&ch) - || ('0'..='9').contains(&ch) - || ch == '$' + ch.is_ascii_lowercase() || ch.is_ascii_uppercase() || ch.is_ascii_digit() || ch == '$' } fn is_identifier_part(&self, ch: char) -> bool { - ('a'..='z').contains(&ch) - || ('A'..='Z').contains(&ch) - || ('0'..='9').contains(&ch) + ch.is_ascii_lowercase() + || ch.is_ascii_uppercase() + || ch.is_ascii_digit() || ch == '_' || ch == '$' || ch == '{' diff --git a/src/dialect/mssql.rs b/src/dialect/mssql.rs index 539a17a9f..682376b17 100644 --- a/src/dialect/mssql.rs +++ b/src/dialect/mssql.rs @@ -23,17 +23,13 @@ impl Dialect for MsSqlDialect { fn is_identifier_start(&self, ch: char) -> bool { // See https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-identifiers?view=sql-server-2017#rules-for-regular-identifiers // We don't support non-latin "letters" currently. - ('a'..='z').contains(&ch) - || ('A'..='Z').contains(&ch) - || ch == '_' - || ch == '#' - || ch == '@' + ch.is_ascii_lowercase() || ch.is_ascii_uppercase() || ch == '_' || ch == '#' || ch == '@' } fn is_identifier_part(&self, ch: char) -> bool { - ('a'..='z').contains(&ch) - || ('A'..='Z').contains(&ch) - || ('0'..='9').contains(&ch) + ch.is_ascii_lowercase() + || ch.is_ascii_uppercase() + || ch.is_ascii_digit() || ch == '@' || ch == '$' || ch == '#' diff --git a/src/dialect/mysql.rs b/src/dialect/mysql.rs index d6095262c..441b2c240 100644 --- a/src/dialect/mysql.rs +++ b/src/dialect/mysql.rs @@ -20,8 +20,8 @@ impl Dialect for MySqlDialect { // See https://dev.mysql.com/doc/refman/8.0/en/identifiers.html. // We don't yet support identifiers beginning with numbers, as that // makes it hard to distinguish numeric literals. - ('a'..='z').contains(&ch) - || ('A'..='Z').contains(&ch) + ch.is_ascii_lowercase() + || ch.is_ascii_uppercase() || ch == '_' || ch == '$' || ch == '@' @@ -29,7 +29,7 @@ impl Dialect for MySqlDialect { } fn is_identifier_part(&self, ch: char) -> bool { - self.is_identifier_start(ch) || ('0'..='9').contains(&ch) + self.is_identifier_start(ch) || ch.is_ascii_digit() } fn is_delimited_identifier_start(&self, ch: char) -> bool { diff --git a/src/dialect/postgresql.rs b/src/dialect/postgresql.rs index 0c2eb99f0..3534d2942 100644 --- a/src/dialect/postgresql.rs +++ b/src/dialect/postgresql.rs @@ -20,13 +20,13 @@ impl Dialect for PostgreSqlDialect { // See https://www.postgresql.org/docs/11/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS // We don't yet support identifiers beginning with "letters with // diacritical marks and non-Latin letters" - ('a'..='z').contains(&ch) || ('A'..='Z').contains(&ch) || ch == '_' + ch.is_ascii_lowercase() || ch.is_ascii_uppercase() || ch == '_' } fn is_identifier_part(&self, ch: char) -> bool { - ('a'..='z').contains(&ch) - || ('A'..='Z').contains(&ch) - || ('0'..='9').contains(&ch) + ch.is_ascii_lowercase() + || ch.is_ascii_uppercase() + || ch.is_ascii_digit() || ch == '$' || ch == '_' } diff --git a/src/dialect/snowflake.rs b/src/dialect/snowflake.rs index 11108e973..4fc8de735 100644 --- a/src/dialect/snowflake.rs +++ b/src/dialect/snowflake.rs @@ -18,13 +18,13 @@ pub struct SnowflakeDialect; impl Dialect for SnowflakeDialect { // see https://docs.snowflake.com/en/sql-reference/identifiers-syntax.html fn is_identifier_start(&self, ch: char) -> bool { - ('a'..='z').contains(&ch) || ('A'..='Z').contains(&ch) || ch == '_' + ch.is_ascii_lowercase() || ch.is_ascii_uppercase() || ch == '_' } fn is_identifier_part(&self, ch: char) -> bool { - ('a'..='z').contains(&ch) - || ('A'..='Z').contains(&ch) - || ('0'..='9').contains(&ch) + ch.is_ascii_lowercase() + || ch.is_ascii_uppercase() + || ch.is_ascii_digit() || ch == '$' || ch == '_' } diff --git a/src/dialect/sqlite.rs b/src/dialect/sqlite.rs index 4ce2f834b..ed6426d9e 100644 --- a/src/dialect/sqlite.rs +++ b/src/dialect/sqlite.rs @@ -25,14 +25,14 @@ impl Dialect for SQLiteDialect { fn is_identifier_start(&self, ch: char) -> bool { // See https://www.sqlite.org/draft/tokenreq.html - ('a'..='z').contains(&ch) - || ('A'..='Z').contains(&ch) + ch.is_ascii_lowercase() + || ch.is_ascii_uppercase() || ch == '_' || ch == '$' || ('\u{007f}'..='\u{ffff}').contains(&ch) } fn is_identifier_part(&self, ch: char) -> bool { - self.is_identifier_start(ch) || ('0'..='9').contains(&ch) + self.is_identifier_start(ch) || ch.is_ascii_digit() } } diff --git a/src/parser.rs b/src/parser.rs index 8bec5a626..e880b848e 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -2955,7 +2955,11 @@ impl<'a> Parser<'a> { /// Parse a literal string pub fn parse_literal_string(&mut self) -> Result { match self.next_token() { - Token::Word(Word { value, keyword, .. }) if keyword == Keyword::NoKeyword => Ok(value), + Token::Word(Word { + value, + keyword: Keyword::NoKeyword, + .. + }) => Ok(value), Token::SingleQuotedString(s) => Ok(s), Token::EscapedStringLiteral(s) if dialect_of!(self is PostgreSqlDialect | GenericDialect) => { Ok(s) @@ -3880,13 +3884,7 @@ impl<'a> Parser<'a> { None }; let object_name = match db_name { - Some(db_name) => ObjectName( - db_name - .0 - .into_iter() - .chain(table_name.0.into_iter()) - .collect(), - ), + Some(db_name) => ObjectName(db_name.0.into_iter().chain(table_name.0).collect()), None => table_name, }; let filter = self.parse_show_statement_filter()?; diff --git a/src/tokenizer.rs b/src/tokenizer.rs index 9462cb0cd..525a50082 100644 --- a/src/tokenizer.rs +++ b/src/tokenizer.rs @@ -229,7 +229,7 @@ impl Token { Token::Word(Word { value: word.to_string(), quote_style, - keyword: if quote_style == None { + keyword: if quote_style.is_none() { let keyword = ALL_KEYWORDS.binary_search(&word_uppercase.as_str()); keyword.map_or(Keyword::NoKeyword, |x| ALL_KEYWORDS_INDEX[x]) } else { @@ -354,8 +354,8 @@ impl<'a> Tokenizer<'a> { } Token::Whitespace(Whitespace::Tab) => self.col += 4, - Token::Word(w) if w.quote_style == None => self.col += w.value.len() as u64, - Token::Word(w) if w.quote_style != None => self.col += w.value.len() as u64 + 2, + Token::Word(w) if w.quote_style.is_none() => self.col += w.value.len() as u64, + Token::Word(w) if w.quote_style.is_some() => self.col += w.value.len() as u64 + 2, Token::Number(s, _) => self.col += s.len() as u64, Token::SingleQuotedString(s) => self.col += s.len() as u64, Token::Placeholder(s) => self.col += s.len() as u64, @@ -457,7 +457,7 @@ impl<'a> Tokenizer<'a> { chars.next(); // consume the first char let s = self.tokenize_word(ch, chars); - if s.chars().all(|x| ('0'..='9').contains(&x) || x == '.') { + if s.chars().all(|x| x.is_ascii_digit() || x == '.') { let mut s = peeking_take_while(&mut s.chars().peekable(), |ch| { matches!(ch, '0'..='9' | '.') }); @@ -495,15 +495,12 @@ impl<'a> Tokenizer<'a> { } // numbers and period '0'..='9' | '.' => { - let mut s = peeking_take_while(chars, |ch| matches!(ch, '0'..='9')); + let mut s = peeking_take_while(chars, |ch| ch.is_ascii_digit()); // match binary literal that starts with 0x if s == "0" && chars.peek() == Some(&'x') { chars.next(); - let s2 = peeking_take_while( - chars, - |ch| matches!(ch, '0'..='9' | 'A'..='F' | 'a'..='f'), - ); + let s2 = peeking_take_while(chars, |ch| ch.is_ascii_hexdigit()); return Ok(Some(Token::HexStringLiteral(s2))); } @@ -512,7 +509,7 @@ impl<'a> Tokenizer<'a> { s.push('.'); chars.next(); } - s += &peeking_take_while(chars, |ch| matches!(ch, '0'..='9')); + s += &peeking_take_while(chars, |ch| ch.is_ascii_digit()); // No number -> Token::Period if s == "." { diff --git a/tests/sqlparser_mysql.rs b/tests/sqlparser_mysql.rs index 326e1c0aa..7177086bf 100644 --- a/tests/sqlparser_mysql.rs +++ b/tests/sqlparser_mysql.rs @@ -198,7 +198,7 @@ fn parse_use() { fn parse_show_create() { let obj_name = ObjectName(vec![Ident::new("myident")]); - for obj_type in &vec![ + for obj_type in &[ ShowCreateObject::Table, ShowCreateObject::Trigger, ShowCreateObject::Event, @@ -257,12 +257,12 @@ fn parse_set_variables() { assert_eq!( stmt, Statement::SetVariable { - key_values: vec![SetVariableKeyValue { + key_values: [SetVariableKeyValue { local: true, hivevar: false, key: ObjectName(vec![Ident::new("autocommit")]), value: vec![value], - },] + }] .to_vec() } ); @@ -503,7 +503,7 @@ fn parse_escaped_string() { let sql = r#"SELECT 'I''m fine'"#; let projection = mysql().verified_only_select(sql).projection; - let item = projection.get(0).unwrap(); + let item = projection.first().unwrap(); match &item { SelectItem::UnnamedExpr(Expr::Value(value)) => { diff --git a/tests/sqlparser_postgres.rs b/tests/sqlparser_postgres.rs index 76670d4ed..a4a1c6614 100644 --- a/tests/sqlparser_postgres.rs +++ b/tests/sqlparser_postgres.rs @@ -1224,7 +1224,6 @@ fn parse_pg_regex_match_ops() { fn parse_array_index_expr() { #[cfg(feature = "bigdecimal")] let num: Vec = (0..=10) - .into_iter() .map(|s| Expr::Value(Value::Number(bigdecimal::BigDecimal::from(s), false))) .collect(); #[cfg(not(feature = "bigdecimal"))]