mirror of https://github.com/astral-sh/ruff
Avoid flagging redundant open modes when open is rebound (#918)
This commit is contained in:
parent
721a1e9443
commit
1a2559b001
|
|
@ -68,3 +68,13 @@ open(file="foo", mode='Ub', buffering=- 1, encoding=None, errors=None, newline=N
|
||||||
open(file="foo", buffering=- 1, encoding=None, errors=None, newline=None, closefd=True, opener=None, mode='Ub')
|
open(file="foo", buffering=- 1, encoding=None, errors=None, newline=None, closefd=True, opener=None, mode='Ub')
|
||||||
open(file="foo", buffering=- 1, encoding=None, errors=None, mode='Ub', newline=None, closefd=True, opener=None)
|
open(file="foo", buffering=- 1, encoding=None, errors=None, mode='Ub', newline=None, closefd=True, opener=None)
|
||||||
open(mode='Ub', file="foo", buffering=- 1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
|
open(mode='Ub', file="foo", buffering=- 1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
|
||||||
|
|
||||||
|
open = 1
|
||||||
|
open("foo", "U")
|
||||||
|
open("foo", "Ur")
|
||||||
|
open("foo", "Ub")
|
||||||
|
open("foo", "rUb")
|
||||||
|
open("foo", "r")
|
||||||
|
open("foo", "rt")
|
||||||
|
open("f", "r", encoding="UTF-8")
|
||||||
|
open("f", "wt")
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,6 @@ fn match_open(expr: &Expr) -> (Option<&Expr>, Vec<Keyword>) {
|
||||||
keywords,
|
keywords,
|
||||||
} = &expr.node
|
} = &expr.node
|
||||||
{
|
{
|
||||||
// TODO(andberger): Verify that "open" is still bound to the built-in function.
|
|
||||||
if match_name_or_attr(func, OPEN_FUNC_NAME) {
|
if match_name_or_attr(func, OPEN_FUNC_NAME) {
|
||||||
// Return the "open mode" parameter and keywords.
|
// Return the "open mode" parameter and keywords.
|
||||||
return (args.get(1), keywords.clone());
|
return (args.get(1), keywords.clone());
|
||||||
|
|
@ -149,6 +148,10 @@ fn create_remove_param_fix(
|
||||||
|
|
||||||
/// U015
|
/// U015
|
||||||
pub fn redundant_open_modes(checker: &mut Checker, expr: &Expr) {
|
pub fn redundant_open_modes(checker: &mut Checker, expr: &Expr) {
|
||||||
|
// If `open` has been rebound, skip this check entirely.
|
||||||
|
if !checker.is_builtin(OPEN_FUNC_NAME) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
let (mode_param, keywords): (Option<&Expr>, Vec<Keyword>) = match_open(expr);
|
let (mode_param, keywords): (Option<&Expr>, Vec<Keyword>) = match_open(expr);
|
||||||
if mode_param.is_none() && !keywords.is_empty() {
|
if mode_param.is_none() && !keywords.is_empty() {
|
||||||
if let Some(value) = keywords.iter().find_map(|keyword| {
|
if let Some(value) = keywords.iter().find_map(|keyword| {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue