diff --git a/crates/ruff/resources/test/fixtures/pyupgrade/UP038.py b/crates/ruff/resources/test/fixtures/pyupgrade/UP038.py index 3b41c58831..fd95f34d10 100644 --- a/crates/ruff/resources/test/fixtures/pyupgrade/UP038.py +++ b/crates/ruff/resources/test/fixtures/pyupgrade/UP038.py @@ -6,3 +6,4 @@ issubclass("yes", int) # OK isinstance(1, int | float) # OK issubclass("yes", int | str) # OK isinstance(1, ()) # OK +isinstance(1, (int, *(str, bytes))) # OK diff --git a/crates/ruff/src/rules/pyupgrade/rules/use_pep604_isinstance.rs b/crates/ruff/src/rules/pyupgrade/rules/use_pep604_isinstance.rs index 15242a9af8..2c49d28fb4 100644 --- a/crates/ruff/src/rules/pyupgrade/rules/use_pep604_isinstance.rs +++ b/crates/ruff/src/rules/pyupgrade/rules/use_pep604_isinstance.rs @@ -79,9 +79,19 @@ pub fn use_pep604_isinstance(checker: &mut Checker, expr: &Expr, func: &Expr, ar }; if let Some(types) = args.get(1) { if let ExprKind::Tuple { elts, .. } = &types.node { + // Ex) `()` if elts.is_empty() { return; } + + // Ex) `(*args,)` + if elts + .iter() + .any(|elt| matches!(elt.node, ExprKind::Starred { .. })) + { + return; + } + let mut diagnostic = Diagnostic::new(IsinstanceWithTuple { kind }, Range::from(expr)); if checker.patch(diagnostic.kind.rule()) {