[pyupgrade] Detect aiofiles.open calls in UP015 (#13173)

## Summary

Closes https://github.com/astral-sh/ruff/issues/12879.
This commit is contained in:
Charlie Marsh
2024-08-30 19:39:00 -04:00
committed by GitHub
parent ee21fc7fd8
commit 828871dc5c
3 changed files with 68 additions and 1 deletions

View File

@@ -78,3 +78,10 @@ open("foo", "r")
open("foo", "rt")
open("f", "r", encoding="UTF-8")
open("f", "wt")
import aiofiles
aiofiles.open("foo", "U")
aiofiles.open("foo", "r")
aiofiles.open("foo", mode="r")

View File

@@ -61,7 +61,16 @@ impl AlwaysFixableViolation for RedundantOpenModes {
/// UP015
pub(crate) fn redundant_open_modes(checker: &mut Checker, call: &ast::ExprCall) {
if !checker.semantic().match_builtin_expr(&call.func, "open") {
if !checker
.semantic()
.resolve_qualified_name(&call.func)
.is_some_and(|qualified_name| {
matches!(
qualified_name.segments(),
["" | "builtins" | "aiofiles", "open"]
)
})
{
return;
}

View File

@@ -899,4 +899,55 @@ UP015.py:70:1: UP015 [*] Unnecessary open mode parameters, use ""rb""
72 72 | open = 1
73 73 | open("foo", "U")
UP015.py:85:1: UP015 [*] Unnecessary open mode parameters
|
83 | import aiofiles
84 |
85 | aiofiles.open("foo", "U")
| ^^^^^^^^^^^^^^^^^^^^^^^^^ UP015
86 | aiofiles.open("foo", "r")
87 | aiofiles.open("foo", mode="r")
|
= help: Remove open mode parameters
Safe fix
82 82 |
83 83 | import aiofiles
84 84 |
85 |-aiofiles.open("foo", "U")
85 |+aiofiles.open("foo")
86 86 | aiofiles.open("foo", "r")
87 87 | aiofiles.open("foo", mode="r")
UP015.py:86:1: UP015 [*] Unnecessary open mode parameters
|
85 | aiofiles.open("foo", "U")
86 | aiofiles.open("foo", "r")
| ^^^^^^^^^^^^^^^^^^^^^^^^^ UP015
87 | aiofiles.open("foo", mode="r")
|
= help: Remove open mode parameters
Safe fix
83 83 | import aiofiles
84 84 |
85 85 | aiofiles.open("foo", "U")
86 |-aiofiles.open("foo", "r")
86 |+aiofiles.open("foo")
87 87 | aiofiles.open("foo", mode="r")
UP015.py:87:1: UP015 [*] Unnecessary open mode parameters
|
85 | aiofiles.open("foo", "U")
86 | aiofiles.open("foo", "r")
87 | aiofiles.open("foo", mode="r")
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP015
|
= help: Remove open mode parameters
Safe fix
84 84 |
85 85 | aiofiles.open("foo", "U")
86 86 | aiofiles.open("foo", "r")
87 |-aiofiles.open("foo", mode="r")
87 |+aiofiles.open("foo")