diff --git a/crates/ruff_linter/resources/test/fixtures/refurb/FURB171.py b/crates/ruff_linter/resources/test/fixtures/refurb/FURB171.py index 4596ffe4edaf0..57c0e13f64f3a 100644 --- a/crates/ruff_linter/resources/test/fixtures/refurb/FURB171.py +++ b/crates/ruff_linter/resources/test/fixtures/refurb/FURB171.py @@ -43,3 +43,6 @@ if "a" == "a": pass + +if 1 in {*[1]}: + pass diff --git a/crates/ruff_linter/src/rules/refurb/rules/single_item_membership_test.rs b/crates/ruff_linter/src/rules/refurb/rules/single_item_membership_test.rs index 6622d2a8f0af0..e635e1e2da2f7 100644 --- a/crates/ruff_linter/src/rules/refurb/rules/single_item_membership_test.rs +++ b/crates/ruff_linter/src/rules/refurb/rules/single_item_membership_test.rs @@ -1,8 +1,7 @@ use ruff_diagnostics::{Diagnostic, Edit, Fix, FixAvailability, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::helpers::generate_comparison; -use ruff_python_ast::ExprStringLiteral; -use ruff_python_ast::{CmpOp, Expr}; +use ruff_python_ast::{self as ast, CmpOp, Expr, ExprStringLiteral}; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -95,13 +94,17 @@ pub(crate) fn single_item_membership_test( checker.diagnostics.push(diagnostic); } -/// Return the single item wrapped in Some if the expression contains a single -/// item, otherwise return None. +/// Return the single item wrapped in `Some` if the expression contains a single +/// item, otherwise return `None`. fn single_item(expr: &Expr) -> Option<&Expr> { match expr { - Expr::List(list) if list.elts.len() == 1 => Some(&list.elts[0]), - Expr::Tuple(tuple) if tuple.elts.len() == 1 => Some(&tuple.elts[0]), - Expr::Set(set) if set.elts.len() == 1 => Some(&set.elts[0]), + Expr::List(ast::ExprList { elts, .. }) + | Expr::Tuple(ast::ExprTuple { elts, .. }) + | Expr::Set(ast::ExprSet { elts, .. }) => match elts.as_slice() { + [Expr::Starred(_)] => None, + [item] => Some(item), + _ => None, + }, string_expr @ Expr::StringLiteral(ExprStringLiteral { value: string, .. }) if string.chars().count() == 1 => {