Extend invalid-envvar-default (PLW1508) to detect os.environ.get (#14512)

This commit is contained in:
Harutaka Kawamura 2024-11-23 04:13:58 +09:00 committed by GitHub
parent e53ac7985d
commit 931fa06d85
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 73 additions and 1 deletions

View file

@ -12,3 +12,4 @@ os.getenv("AA", "GOOD %s" % "BAR")
os.getenv("B", Z)
os.getenv("AA", "GOOD" if Z else "BAR")
os.getenv("AA", 1 if Z else "BAR") # [invalid-envvar-default]
os.environ.get("TEST", 12) # [invalid-envvar-default]

View file

@ -410,6 +410,7 @@ mod tests {
Rule::RepeatedEqualityComparison,
Path::new("repeated_equality_comparison.py")
)]
#[test_case(Rule::InvalidEnvvarDefault, Path::new("invalid_envvar_default.py"))]
fn preview_rules(rule_code: Rule, path: &Path) -> Result<()> {
let snapshot = format!(
"preview__{}_{}",

View file

@ -51,7 +51,16 @@ pub(crate) fn invalid_envvar_default(checker: &mut Checker, call: &ast::ExprCall
if checker
.semantic()
.resolve_qualified_name(&call.func)
.is_some_and(|qualified_name| matches!(qualified_name.segments(), ["os", "getenv"]))
.is_some_and(|qualified_name| {
if checker.settings.preview.is_enabled() {
matches!(
qualified_name.segments(),
["os", "getenv"] | ["os", "environ", "get"]
)
} else {
matches!(qualified_name.segments(), ["os", "getenv"])
}
})
{
// Find the `default` argument, if it exists.
let Some(expr) = call.arguments.find_argument("default", 1) else {

View file

@ -48,4 +48,5 @@ invalid_envvar_default.py:14:17: PLW1508 Invalid type for environment variable d
13 | os.getenv("AA", "GOOD" if Z else "BAR")
14 | os.getenv("AA", 1 if Z else "BAR") # [invalid-envvar-default]
| ^^^^^^^^^^^^^^^^^ PLW1508
15 | os.environ.get("TEST", 12) # [invalid-envvar-default]
|

View file

@ -0,0 +1,60 @@
---
source: crates/ruff_linter/src/rules/pylint/mod.rs
snapshot_kind: text
---
invalid_envvar_default.py:3:29: PLW1508 Invalid type for environment variable default; expected `str` or `None`
|
1 | import os
2 |
3 | tempVar = os.getenv("TEST", 12) # [invalid-envvar-default]
| ^^ PLW1508
4 | goodVar = os.getenv("TESTING", None)
5 | dictVarBad = os.getenv("AAA", {"a", 7}) # [invalid-envvar-default]
|
invalid_envvar_default.py:5:31: PLW1508 Invalid type for environment variable default; expected `str` or `None`
|
3 | tempVar = os.getenv("TEST", 12) # [invalid-envvar-default]
4 | goodVar = os.getenv("TESTING", None)
5 | dictVarBad = os.getenv("AAA", {"a", 7}) # [invalid-envvar-default]
| ^^^^^^^^ PLW1508
6 | print(os.getenv("TEST", False)) # [invalid-envvar-default]
7 | os.getenv("AA", "GOOD")
|
invalid_envvar_default.py:6:25: PLW1508 Invalid type for environment variable default; expected `str` or `None`
|
4 | goodVar = os.getenv("TESTING", None)
5 | dictVarBad = os.getenv("AAA", {"a", 7}) # [invalid-envvar-default]
6 | print(os.getenv("TEST", False)) # [invalid-envvar-default]
| ^^^^^ PLW1508
7 | os.getenv("AA", "GOOD")
8 | os.getenv("AA", f"GOOD")
|
invalid_envvar_default.py:10:17: PLW1508 Invalid type for environment variable default; expected `str` or `None`
|
8 | os.getenv("AA", f"GOOD")
9 | os.getenv("AA", "GOOD" + "BAR")
10 | os.getenv("AA", "GOOD" + 1)
| ^^^^^^^^^^ PLW1508
11 | os.getenv("AA", "GOOD %s" % "BAR")
12 | os.getenv("B", Z)
|
invalid_envvar_default.py:14:17: PLW1508 Invalid type for environment variable default; expected `str` or `None`
|
12 | os.getenv("B", Z)
13 | os.getenv("AA", "GOOD" if Z else "BAR")
14 | os.getenv("AA", 1 if Z else "BAR") # [invalid-envvar-default]
| ^^^^^^^^^^^^^^^^^ PLW1508
15 | os.environ.get("TEST", 12) # [invalid-envvar-default]
|
invalid_envvar_default.py:15:24: PLW1508 Invalid type for environment variable default; expected `str` or `None`
|
13 | os.getenv("AA", "GOOD" if Z else "BAR")
14 | os.getenv("AA", 1 if Z else "BAR") # [invalid-envvar-default]
15 | os.environ.get("TEST", 12) # [invalid-envvar-default]
| ^^ PLW1508
|