diff --git a/crates/ruff/resources/test/fixtures/pylint/invalid_envvar_default.py b/crates/ruff/resources/test/fixtures/pylint/invalid_envvar_default.py index 739e029976..c07de79871 100644 --- a/crates/ruff/resources/test/fixtures/pylint/invalid_envvar_default.py +++ b/crates/ruff/resources/test/fixtures/pylint/invalid_envvar_default.py @@ -8,5 +8,5 @@ os.getenv("AA", "GOOD") os.getenv("AA", f"GOOD") os.getenv("AA", "GOOD" + "BAD") os.getenv("AA", "GOOD" + 1) +os.getenv("AA", "GOOD %s" % "BAD") os.getenv("B", Z) - diff --git a/crates/ruff/src/rules/pylint/rules/invalid_envvar_default.rs b/crates/ruff/src/rules/pylint/rules/invalid_envvar_default.rs index d10b87fcb6..22d4aa1379 100644 --- a/crates/ruff/src/rules/pylint/rules/invalid_envvar_default.rs +++ b/crates/ruff/src/rules/pylint/rules/invalid_envvar_default.rs @@ -49,6 +49,7 @@ fn is_valid_default(expr: &Expr) -> bool { return true; } + // Allow string concatenation. if let ExprKind::BinOp { left, right, @@ -58,6 +59,16 @@ fn is_valid_default(expr: &Expr) -> bool { return is_valid_default(left) && is_valid_default(right); } + // Allow string formatting. + if let ExprKind::BinOp { + left, + op: Operator::Mod, + .. + } = &expr.node + { + return is_valid_default(left); + } + // Otherwise, the default must be a string or `None`. matches!( expr.node, diff --git a/crates/ruff/src/rules/pylint/rules/invalid_envvar_value.rs b/crates/ruff/src/rules/pylint/rules/invalid_envvar_value.rs index 2b7ad2288a..6c8bc3b084 100644 --- a/crates/ruff/src/rules/pylint/rules/invalid_envvar_value.rs +++ b/crates/ruff/src/rules/pylint/rules/invalid_envvar_value.rs @@ -46,6 +46,7 @@ fn is_valid_key(expr: &Expr) -> bool { return true; } + // Allow string concatenation. if let ExprKind::BinOp { left, right, @@ -55,6 +56,16 @@ fn is_valid_key(expr: &Expr) -> bool { return is_valid_key(left) && is_valid_key(right); } + // Allow string formatting. + if let ExprKind::BinOp { + left, + op: Operator::Mod, + .. + } = &expr.node + { + return is_valid_key(left); + } + // Otherwise, the default must be a string. matches!( expr.node,