From c50d6da8b4ad5ad4eaee1b0b60f9ac062c057bc7 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Tue, 14 Mar 2023 14:27:21 -0400 Subject: [PATCH] Allow string percent formatting in os.getenv (#3518) --- .../test/fixtures/pylint/invalid_envvar_default.py | 2 +- .../src/rules/pylint/rules/invalid_envvar_default.rs | 11 +++++++++++ .../src/rules/pylint/rules/invalid_envvar_value.rs | 11 +++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) 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,