diff --git a/crates/ruff_linter/resources/test/fixtures/refurb/FURB168.py b/crates/ruff_linter/resources/test/fixtures/refurb/FURB168.py index 17238d520c..a9f31e3a78 100644 --- a/crates/ruff_linter/resources/test/fixtures/refurb/FURB168.py +++ b/crates/ruff_linter/resources/test/fixtures/refurb/FURB168.py @@ -85,3 +85,10 @@ def _(): if isinstance(foo, type(None)): ... + +# https://github.com/astral-sh/ruff/issues/19047 +if isinstance(foo, ()): + pass + +if isinstance(foo, Union[()]): + pass diff --git a/crates/ruff_linter/src/rules/refurb/rules/isinstance_type_none.rs b/crates/ruff_linter/src/rules/refurb/rules/isinstance_type_none.rs index 793e0968ad..4ff1f1c4af 100644 --- a/crates/ruff_linter/src/rules/refurb/rules/isinstance_type_none.rs +++ b/crates/ruff_linter/src/rules/refurb/rules/isinstance_type_none.rs @@ -100,7 +100,9 @@ fn is_none(expr: &Expr, semantic: &SemanticModel) -> bool { } // Ex) `(type(None),)` - Expr::Tuple(tuple) => tuple.iter().all(|element| inner(element, false, semantic)), + Expr::Tuple(tuple) => { + !tuple.is_empty() && tuple.iter().all(|element| inner(element, false, semantic)) + } // Ex) `type(None) | type(None)` Expr::BinOp(ast::ExprBinOp { @@ -125,7 +127,8 @@ fn is_none(expr: &Expr, semantic: &SemanticModel) -> bool { match slice.as_ref() { Expr::Tuple(ast::ExprTuple { elts, .. }) => { - elts.iter().all(|element| inner(element, true, semantic)) + !elts.is_empty() + && elts.iter().all(|element| inner(element, true, semantic)) } slice => inner(slice, true, semantic), }