mirror of
https://github.com/astral-sh/ruff.git
synced 2025-10-28 10:50:20 +00:00
Change SIM118 to delete .keys() rather than replace expression (#7223)
Also improves the suggestion text. Closes https://github.com/astral-sh/ruff/issues/7200.
This commit is contained in:
parent
5cea43731e
commit
97f945651d
3 changed files with 107 additions and 72 deletions
|
|
@ -48,3 +48,11 @@ class Foo:
|
||||||
key in obj.keys()and foo
|
key in obj.keys()and foo
|
||||||
(key in obj.keys())and foo
|
(key in obj.keys())and foo
|
||||||
key in (obj.keys())and foo
|
key in (obj.keys())and foo
|
||||||
|
|
||||||
|
# Regression test for: https://github.com/astral-sh/ruff/issues/7200
|
||||||
|
for key in (
|
||||||
|
self.experiment.surveys[0]
|
||||||
|
.stations[0]
|
||||||
|
.keys()
|
||||||
|
):
|
||||||
|
continue
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,9 @@ use ruff_macros::{derive_message_formats, violation};
|
||||||
use ruff_python_ast::node::AnyNodeRef;
|
use ruff_python_ast::node::AnyNodeRef;
|
||||||
use ruff_python_ast::parenthesize::parenthesized_range;
|
use ruff_python_ast::parenthesize::parenthesized_range;
|
||||||
use ruff_python_ast::{self as ast, Arguments, CmpOp, Comprehension, Expr};
|
use ruff_python_ast::{self as ast, Arguments, CmpOp, Comprehension, Expr};
|
||||||
|
use ruff_python_trivia::{SimpleTokenKind, SimpleTokenizer};
|
||||||
use ruff_text_size::{Ranged, TextRange};
|
use ruff_text_size::{Ranged, TextRange};
|
||||||
|
|
||||||
use crate::autofix::edits::pad_end;
|
|
||||||
use crate::checkers::ast::Checker;
|
use crate::checkers::ast::Checker;
|
||||||
use crate::registry::AsRule;
|
use crate::registry::AsRule;
|
||||||
|
|
||||||
|
|
@ -32,29 +32,19 @@ use crate::registry::AsRule;
|
||||||
/// - [Python documentation: Mapping Types](https://docs.python.org/3/library/stdtypes.html#mapping-types-dict)
|
/// - [Python documentation: Mapping Types](https://docs.python.org/3/library/stdtypes.html#mapping-types-dict)
|
||||||
#[violation]
|
#[violation]
|
||||||
pub struct InDictKeys {
|
pub struct InDictKeys {
|
||||||
key: String,
|
|
||||||
dict: String,
|
|
||||||
operator: String,
|
operator: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AlwaysAutofixableViolation for InDictKeys {
|
impl AlwaysAutofixableViolation for InDictKeys {
|
||||||
#[derive_message_formats]
|
#[derive_message_formats]
|
||||||
fn message(&self) -> String {
|
fn message(&self) -> String {
|
||||||
let InDictKeys {
|
let InDictKeys { operator } = self;
|
||||||
key,
|
format!("Use `key {operator} dict` instead of `key {operator} dict.keys()`")
|
||||||
dict,
|
|
||||||
operator,
|
|
||||||
} = self;
|
|
||||||
format!("Use `{key} {operator} {dict}` instead of `{key} {operator} {dict}.keys()`")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn autofix_title(&self) -> String {
|
fn autofix_title(&self) -> String {
|
||||||
let InDictKeys {
|
let InDictKeys { operator: _ } = self;
|
||||||
key,
|
format!("Remove `.keys()`")
|
||||||
dict,
|
|
||||||
operator,
|
|
||||||
} = self;
|
|
||||||
format!("Convert to `{key} {operator} {dict}`")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -102,34 +92,40 @@ fn key_in_dict(
|
||||||
.unwrap_or(left.range());
|
.unwrap_or(left.range());
|
||||||
let right_range = parenthesized_range(right.into(), parent, checker.locator().contents())
|
let right_range = parenthesized_range(right.into(), parent, checker.locator().contents())
|
||||||
.unwrap_or(right.range());
|
.unwrap_or(right.range());
|
||||||
let value_range = parenthesized_range(value.into(), parent, checker.locator().contents())
|
|
||||||
.unwrap_or(value.range());
|
|
||||||
|
|
||||||
let left_content = checker.locator().slice(left_range);
|
|
||||||
let value_content = checker.locator().slice(value_range);
|
|
||||||
|
|
||||||
let mut diagnostic = Diagnostic::new(
|
let mut diagnostic = Diagnostic::new(
|
||||||
InDictKeys {
|
InDictKeys {
|
||||||
key: left_content.to_string(),
|
|
||||||
dict: value_content.to_string(),
|
|
||||||
operator: operator.as_str().to_string(),
|
operator: operator.as_str().to_string(),
|
||||||
},
|
},
|
||||||
TextRange::new(left_range.start(), right_range.end()),
|
TextRange::new(left_range.start(), right_range.end()),
|
||||||
);
|
);
|
||||||
if checker.patch(diagnostic.kind.rule()) {
|
if checker.patch(diagnostic.kind.rule()) {
|
||||||
|
// Delete from the start of the dot to the end of the expression.
|
||||||
|
if let Some(dot) = SimpleTokenizer::starts_at(value.end(), checker.locator().contents())
|
||||||
|
.skip_trivia()
|
||||||
|
.find(|token| token.kind == SimpleTokenKind::Dot)
|
||||||
|
{
|
||||||
// If the `.keys()` is followed by (e.g.) a keyword, we need to insert a space,
|
// If the `.keys()` is followed by (e.g.) a keyword, we need to insert a space,
|
||||||
// since we're removing parentheses, which could lead to invalid syntax, as in:
|
// since we're removing parentheses, which could lead to invalid syntax, as in:
|
||||||
// ```python
|
// ```python
|
||||||
// if key in foo.keys()and bar:
|
// if key in foo.keys()and bar:
|
||||||
// ```
|
// ```
|
||||||
|
let range = TextRange::new(dot.start(), right.end());
|
||||||
|
if checker
|
||||||
|
.locator()
|
||||||
|
.after(range.end())
|
||||||
|
.chars()
|
||||||
|
.next()
|
||||||
|
.is_some_and(|char| char.is_ascii_alphabetic())
|
||||||
|
{
|
||||||
diagnostic.set_fix(Fix::suggested(Edit::range_replacement(
|
diagnostic.set_fix(Fix::suggested(Edit::range_replacement(
|
||||||
pad_end(
|
" ".to_string(),
|
||||||
value_content.to_string(),
|
range,
|
||||||
right_range.end(),
|
|
||||||
checker.locator(),
|
|
||||||
),
|
|
||||||
right_range,
|
|
||||||
)));
|
)));
|
||||||
|
} else {
|
||||||
|
diagnostic.set_fix(Fix::suggested(Edit::range_deletion(range)));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
checker.diagnostics.push(diagnostic);
|
checker.diagnostics.push(diagnostic);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
---
|
---
|
||||||
source: crates/ruff/src/rules/flake8_simplify/mod.rs
|
source: crates/ruff/src/rules/flake8_simplify/mod.rs
|
||||||
---
|
---
|
||||||
SIM118.py:1:1: SIM118 [*] Use `key in obj` instead of `key in obj.keys()`
|
SIM118.py:1:1: SIM118 [*] Use `key in dict` instead of `key in dict.keys()`
|
||||||
|
|
|
|
||||||
1 | key in obj.keys() # SIM118
|
1 | key in obj.keys() # SIM118
|
||||||
| ^^^^^^^^^^^^^^^^^ SIM118
|
| ^^^^^^^^^^^^^^^^^ SIM118
|
||||||
2 |
|
2 |
|
||||||
3 | key not in obj.keys() # SIM118
|
3 | key not in obj.keys() # SIM118
|
||||||
|
|
|
|
||||||
= help: Convert to `key in obj`
|
= help: Remove `.keys()`
|
||||||
|
|
||||||
ℹ Suggested fix
|
ℹ Suggested fix
|
||||||
1 |-key in obj.keys() # SIM118
|
1 |-key in obj.keys() # SIM118
|
||||||
|
|
@ -17,7 +17,7 @@ SIM118.py:1:1: SIM118 [*] Use `key in obj` instead of `key in obj.keys()`
|
||||||
3 3 | key not in obj.keys() # SIM118
|
3 3 | key not in obj.keys() # SIM118
|
||||||
4 4 |
|
4 4 |
|
||||||
|
|
||||||
SIM118.py:3:1: SIM118 [*] Use `key not in obj` instead of `key not in obj.keys()`
|
SIM118.py:3:1: SIM118 [*] Use `key not in dict` instead of `key not in dict.keys()`
|
||||||
|
|
|
|
||||||
1 | key in obj.keys() # SIM118
|
1 | key in obj.keys() # SIM118
|
||||||
2 |
|
2 |
|
||||||
|
|
@ -26,7 +26,7 @@ SIM118.py:3:1: SIM118 [*] Use `key not in obj` instead of `key not in obj.keys()
|
||||||
4 |
|
4 |
|
||||||
5 | foo["bar"] in obj.keys() # SIM118
|
5 | foo["bar"] in obj.keys() # SIM118
|
||||||
|
|
|
|
||||||
= help: Convert to `key not in obj`
|
= help: Remove `.keys()`
|
||||||
|
|
||||||
ℹ Suggested fix
|
ℹ Suggested fix
|
||||||
1 1 | key in obj.keys() # SIM118
|
1 1 | key in obj.keys() # SIM118
|
||||||
|
|
@ -37,7 +37,7 @@ SIM118.py:3:1: SIM118 [*] Use `key not in obj` instead of `key not in obj.keys()
|
||||||
5 5 | foo["bar"] in obj.keys() # SIM118
|
5 5 | foo["bar"] in obj.keys() # SIM118
|
||||||
6 6 |
|
6 6 |
|
||||||
|
|
||||||
SIM118.py:5:1: SIM118 [*] Use `foo["bar"] in obj` instead of `foo["bar"] in obj.keys()`
|
SIM118.py:5:1: SIM118 [*] Use `key in dict` instead of `key in dict.keys()`
|
||||||
|
|
|
|
||||||
3 | key not in obj.keys() # SIM118
|
3 | key not in obj.keys() # SIM118
|
||||||
4 |
|
4 |
|
||||||
|
|
@ -46,7 +46,7 @@ SIM118.py:5:1: SIM118 [*] Use `foo["bar"] in obj` instead of `foo["bar"] in obj.
|
||||||
6 |
|
6 |
|
||||||
7 | foo["bar"] not in obj.keys() # SIM118
|
7 | foo["bar"] not in obj.keys() # SIM118
|
||||||
|
|
|
|
||||||
= help: Convert to `foo["bar"] in obj`
|
= help: Remove `.keys()`
|
||||||
|
|
||||||
ℹ Suggested fix
|
ℹ Suggested fix
|
||||||
2 2 |
|
2 2 |
|
||||||
|
|
@ -58,7 +58,7 @@ SIM118.py:5:1: SIM118 [*] Use `foo["bar"] in obj` instead of `foo["bar"] in obj.
|
||||||
7 7 | foo["bar"] not in obj.keys() # SIM118
|
7 7 | foo["bar"] not in obj.keys() # SIM118
|
||||||
8 8 |
|
8 8 |
|
||||||
|
|
||||||
SIM118.py:7:1: SIM118 [*] Use `foo["bar"] not in obj` instead of `foo["bar"] not in obj.keys()`
|
SIM118.py:7:1: SIM118 [*] Use `key not in dict` instead of `key not in dict.keys()`
|
||||||
|
|
|
|
||||||
5 | foo["bar"] in obj.keys() # SIM118
|
5 | foo["bar"] in obj.keys() # SIM118
|
||||||
6 |
|
6 |
|
||||||
|
|
@ -67,7 +67,7 @@ SIM118.py:7:1: SIM118 [*] Use `foo["bar"] not in obj` instead of `foo["bar"] not
|
||||||
8 |
|
8 |
|
||||||
9 | foo['bar'] in obj.keys() # SIM118
|
9 | foo['bar'] in obj.keys() # SIM118
|
||||||
|
|
|
|
||||||
= help: Convert to `foo["bar"] not in obj`
|
= help: Remove `.keys()`
|
||||||
|
|
||||||
ℹ Suggested fix
|
ℹ Suggested fix
|
||||||
4 4 |
|
4 4 |
|
||||||
|
|
@ -79,7 +79,7 @@ SIM118.py:7:1: SIM118 [*] Use `foo["bar"] not in obj` instead of `foo["bar"] not
|
||||||
9 9 | foo['bar'] in obj.keys() # SIM118
|
9 9 | foo['bar'] in obj.keys() # SIM118
|
||||||
10 10 |
|
10 10 |
|
||||||
|
|
||||||
SIM118.py:9:1: SIM118 [*] Use `foo['bar'] in obj` instead of `foo['bar'] in obj.keys()`
|
SIM118.py:9:1: SIM118 [*] Use `key in dict` instead of `key in dict.keys()`
|
||||||
|
|
|
|
||||||
7 | foo["bar"] not in obj.keys() # SIM118
|
7 | foo["bar"] not in obj.keys() # SIM118
|
||||||
8 |
|
8 |
|
||||||
|
|
@ -88,7 +88,7 @@ SIM118.py:9:1: SIM118 [*] Use `foo['bar'] in obj` instead of `foo['bar'] in obj.
|
||||||
10 |
|
10 |
|
||||||
11 | foo['bar'] not in obj.keys() # SIM118
|
11 | foo['bar'] not in obj.keys() # SIM118
|
||||||
|
|
|
|
||||||
= help: Convert to `foo['bar'] in obj`
|
= help: Remove `.keys()`
|
||||||
|
|
||||||
ℹ Suggested fix
|
ℹ Suggested fix
|
||||||
6 6 |
|
6 6 |
|
||||||
|
|
@ -100,7 +100,7 @@ SIM118.py:9:1: SIM118 [*] Use `foo['bar'] in obj` instead of `foo['bar'] in obj.
|
||||||
11 11 | foo['bar'] not in obj.keys() # SIM118
|
11 11 | foo['bar'] not in obj.keys() # SIM118
|
||||||
12 12 |
|
12 12 |
|
||||||
|
|
||||||
SIM118.py:11:1: SIM118 [*] Use `foo['bar'] not in obj` instead of `foo['bar'] not in obj.keys()`
|
SIM118.py:11:1: SIM118 [*] Use `key not in dict` instead of `key not in dict.keys()`
|
||||||
|
|
|
|
||||||
9 | foo['bar'] in obj.keys() # SIM118
|
9 | foo['bar'] in obj.keys() # SIM118
|
||||||
10 |
|
10 |
|
||||||
|
|
@ -109,7 +109,7 @@ SIM118.py:11:1: SIM118 [*] Use `foo['bar'] not in obj` instead of `foo['bar'] no
|
||||||
12 |
|
12 |
|
||||||
13 | foo() in obj.keys() # SIM118
|
13 | foo() in obj.keys() # SIM118
|
||||||
|
|
|
|
||||||
= help: Convert to `foo['bar'] not in obj`
|
= help: Remove `.keys()`
|
||||||
|
|
||||||
ℹ Suggested fix
|
ℹ Suggested fix
|
||||||
8 8 |
|
8 8 |
|
||||||
|
|
@ -121,7 +121,7 @@ SIM118.py:11:1: SIM118 [*] Use `foo['bar'] not in obj` instead of `foo['bar'] no
|
||||||
13 13 | foo() in obj.keys() # SIM118
|
13 13 | foo() in obj.keys() # SIM118
|
||||||
14 14 |
|
14 14 |
|
||||||
|
|
||||||
SIM118.py:13:1: SIM118 [*] Use `foo() in obj` instead of `foo() in obj.keys()`
|
SIM118.py:13:1: SIM118 [*] Use `key in dict` instead of `key in dict.keys()`
|
||||||
|
|
|
|
||||||
11 | foo['bar'] not in obj.keys() # SIM118
|
11 | foo['bar'] not in obj.keys() # SIM118
|
||||||
12 |
|
12 |
|
||||||
|
|
@ -130,7 +130,7 @@ SIM118.py:13:1: SIM118 [*] Use `foo() in obj` instead of `foo() in obj.keys()`
|
||||||
14 |
|
14 |
|
||||||
15 | foo() not in obj.keys() # SIM118
|
15 | foo() not in obj.keys() # SIM118
|
||||||
|
|
|
|
||||||
= help: Convert to `foo() in obj`
|
= help: Remove `.keys()`
|
||||||
|
|
||||||
ℹ Suggested fix
|
ℹ Suggested fix
|
||||||
10 10 |
|
10 10 |
|
||||||
|
|
@ -142,7 +142,7 @@ SIM118.py:13:1: SIM118 [*] Use `foo() in obj` instead of `foo() in obj.keys()`
|
||||||
15 15 | foo() not in obj.keys() # SIM118
|
15 15 | foo() not in obj.keys() # SIM118
|
||||||
16 16 |
|
16 16 |
|
||||||
|
|
||||||
SIM118.py:15:1: SIM118 [*] Use `foo() not in obj` instead of `foo() not in obj.keys()`
|
SIM118.py:15:1: SIM118 [*] Use `key not in dict` instead of `key not in dict.keys()`
|
||||||
|
|
|
|
||||||
13 | foo() in obj.keys() # SIM118
|
13 | foo() in obj.keys() # SIM118
|
||||||
14 |
|
14 |
|
||||||
|
|
@ -151,7 +151,7 @@ SIM118.py:15:1: SIM118 [*] Use `foo() not in obj` instead of `foo() not in obj.k
|
||||||
16 |
|
16 |
|
||||||
17 | for key in obj.keys(): # SIM118
|
17 | for key in obj.keys(): # SIM118
|
||||||
|
|
|
|
||||||
= help: Convert to `foo() not in obj`
|
= help: Remove `.keys()`
|
||||||
|
|
||||||
ℹ Suggested fix
|
ℹ Suggested fix
|
||||||
12 12 |
|
12 12 |
|
||||||
|
|
@ -163,7 +163,7 @@ SIM118.py:15:1: SIM118 [*] Use `foo() not in obj` instead of `foo() not in obj.k
|
||||||
17 17 | for key in obj.keys(): # SIM118
|
17 17 | for key in obj.keys(): # SIM118
|
||||||
18 18 | pass
|
18 18 | pass
|
||||||
|
|
||||||
SIM118.py:17:5: SIM118 [*] Use `key in obj` instead of `key in obj.keys()`
|
SIM118.py:17:5: SIM118 [*] Use `key in dict` instead of `key in dict.keys()`
|
||||||
|
|
|
|
||||||
15 | foo() not in obj.keys() # SIM118
|
15 | foo() not in obj.keys() # SIM118
|
||||||
16 |
|
16 |
|
||||||
|
|
@ -171,7 +171,7 @@ SIM118.py:17:5: SIM118 [*] Use `key in obj` instead of `key in obj.keys()`
|
||||||
| ^^^^^^^^^^^^^^^^^ SIM118
|
| ^^^^^^^^^^^^^^^^^ SIM118
|
||||||
18 | pass
|
18 | pass
|
||||||
|
|
|
|
||||||
= help: Convert to `key in obj`
|
= help: Remove `.keys()`
|
||||||
|
|
||||||
ℹ Suggested fix
|
ℹ Suggested fix
|
||||||
14 14 |
|
14 14 |
|
||||||
|
|
@ -183,7 +183,7 @@ SIM118.py:17:5: SIM118 [*] Use `key in obj` instead of `key in obj.keys()`
|
||||||
19 19 |
|
19 19 |
|
||||||
20 20 | for key in list(obj.keys()):
|
20 20 | for key in list(obj.keys()):
|
||||||
|
|
||||||
SIM118.py:24:8: SIM118 [*] Use `k in obj` instead of `k in obj.keys()`
|
SIM118.py:24:8: SIM118 [*] Use `key in dict` instead of `key in dict.keys()`
|
||||||
|
|
|
|
||||||
22 | del obj[key]
|
22 | del obj[key]
|
||||||
23 |
|
23 |
|
||||||
|
|
@ -192,7 +192,7 @@ SIM118.py:24:8: SIM118 [*] Use `k in obj` instead of `k in obj.keys()`
|
||||||
25 |
|
25 |
|
||||||
26 | {k for k in obj.keys()} # SIM118
|
26 | {k for k in obj.keys()} # SIM118
|
||||||
|
|
|
|
||||||
= help: Convert to `k in obj`
|
= help: Remove `.keys()`
|
||||||
|
|
||||||
ℹ Suggested fix
|
ℹ Suggested fix
|
||||||
21 21 | if some_property(key):
|
21 21 | if some_property(key):
|
||||||
|
|
@ -204,7 +204,7 @@ SIM118.py:24:8: SIM118 [*] Use `k in obj` instead of `k in obj.keys()`
|
||||||
26 26 | {k for k in obj.keys()} # SIM118
|
26 26 | {k for k in obj.keys()} # SIM118
|
||||||
27 27 |
|
27 27 |
|
||||||
|
|
||||||
SIM118.py:26:8: SIM118 [*] Use `k in obj` instead of `k in obj.keys()`
|
SIM118.py:26:8: SIM118 [*] Use `key in dict` instead of `key in dict.keys()`
|
||||||
|
|
|
|
||||||
24 | [k for k in obj.keys()] # SIM118
|
24 | [k for k in obj.keys()] # SIM118
|
||||||
25 |
|
25 |
|
||||||
|
|
@ -213,7 +213,7 @@ SIM118.py:26:8: SIM118 [*] Use `k in obj` instead of `k in obj.keys()`
|
||||||
27 |
|
27 |
|
||||||
28 | {k: k for k in obj.keys()} # SIM118
|
28 | {k: k for k in obj.keys()} # SIM118
|
||||||
|
|
|
|
||||||
= help: Convert to `k in obj`
|
= help: Remove `.keys()`
|
||||||
|
|
||||||
ℹ Suggested fix
|
ℹ Suggested fix
|
||||||
23 23 |
|
23 23 |
|
||||||
|
|
@ -225,7 +225,7 @@ SIM118.py:26:8: SIM118 [*] Use `k in obj` instead of `k in obj.keys()`
|
||||||
28 28 | {k: k for k in obj.keys()} # SIM118
|
28 28 | {k: k for k in obj.keys()} # SIM118
|
||||||
29 29 |
|
29 29 |
|
||||||
|
|
||||||
SIM118.py:28:11: SIM118 [*] Use `k in obj` instead of `k in obj.keys()`
|
SIM118.py:28:11: SIM118 [*] Use `key in dict` instead of `key in dict.keys()`
|
||||||
|
|
|
|
||||||
26 | {k for k in obj.keys()} # SIM118
|
26 | {k for k in obj.keys()} # SIM118
|
||||||
27 |
|
27 |
|
||||||
|
|
@ -234,7 +234,7 @@ SIM118.py:28:11: SIM118 [*] Use `k in obj` instead of `k in obj.keys()`
|
||||||
29 |
|
29 |
|
||||||
30 | (k for k in obj.keys()) # SIM118
|
30 | (k for k in obj.keys()) # SIM118
|
||||||
|
|
|
|
||||||
= help: Convert to `k in obj`
|
= help: Remove `.keys()`
|
||||||
|
|
||||||
ℹ Suggested fix
|
ℹ Suggested fix
|
||||||
25 25 |
|
25 25 |
|
||||||
|
|
@ -246,7 +246,7 @@ SIM118.py:28:11: SIM118 [*] Use `k in obj` instead of `k in obj.keys()`
|
||||||
30 30 | (k for k in obj.keys()) # SIM118
|
30 30 | (k for k in obj.keys()) # SIM118
|
||||||
31 31 |
|
31 31 |
|
||||||
|
|
||||||
SIM118.py:30:8: SIM118 [*] Use `k in obj` instead of `k in obj.keys()`
|
SIM118.py:30:8: SIM118 [*] Use `key in dict` instead of `key in dict.keys()`
|
||||||
|
|
|
|
||||||
28 | {k: k for k in obj.keys()} # SIM118
|
28 | {k: k for k in obj.keys()} # SIM118
|
||||||
29 |
|
29 |
|
||||||
|
|
@ -255,7 +255,7 @@ SIM118.py:30:8: SIM118 [*] Use `k in obj` instead of `k in obj.keys()`
|
||||||
31 |
|
31 |
|
||||||
32 | key in (obj or {}).keys() # SIM118
|
32 | key in (obj or {}).keys() # SIM118
|
||||||
|
|
|
|
||||||
= help: Convert to `k in obj`
|
= help: Remove `.keys()`
|
||||||
|
|
||||||
ℹ Suggested fix
|
ℹ Suggested fix
|
||||||
27 27 |
|
27 27 |
|
||||||
|
|
@ -267,7 +267,7 @@ SIM118.py:30:8: SIM118 [*] Use `k in obj` instead of `k in obj.keys()`
|
||||||
32 32 | key in (obj or {}).keys() # SIM118
|
32 32 | key in (obj or {}).keys() # SIM118
|
||||||
33 33 |
|
33 33 |
|
||||||
|
|
||||||
SIM118.py:32:1: SIM118 [*] Use `key in (obj or {})` instead of `key in (obj or {}).keys()`
|
SIM118.py:32:1: SIM118 [*] Use `key in dict` instead of `key in dict.keys()`
|
||||||
|
|
|
|
||||||
30 | (k for k in obj.keys()) # SIM118
|
30 | (k for k in obj.keys()) # SIM118
|
||||||
31 |
|
31 |
|
||||||
|
|
@ -276,7 +276,7 @@ SIM118.py:32:1: SIM118 [*] Use `key in (obj or {})` instead of `key in (obj or {
|
||||||
33 |
|
33 |
|
||||||
34 | (key) in (obj or {}).keys() # SIM118
|
34 | (key) in (obj or {}).keys() # SIM118
|
||||||
|
|
|
|
||||||
= help: Convert to `key in (obj or {})`
|
= help: Remove `.keys()`
|
||||||
|
|
||||||
ℹ Suggested fix
|
ℹ Suggested fix
|
||||||
29 29 |
|
29 29 |
|
||||||
|
|
@ -288,7 +288,7 @@ SIM118.py:32:1: SIM118 [*] Use `key in (obj or {})` instead of `key in (obj or {
|
||||||
34 34 | (key) in (obj or {}).keys() # SIM118
|
34 34 | (key) in (obj or {}).keys() # SIM118
|
||||||
35 35 |
|
35 35 |
|
||||||
|
|
||||||
SIM118.py:34:1: SIM118 [*] Use `(key) in (obj or {})` instead of `(key) in (obj or {}).keys()`
|
SIM118.py:34:1: SIM118 [*] Use `key in dict` instead of `key in dict.keys()`
|
||||||
|
|
|
|
||||||
32 | key in (obj or {}).keys() # SIM118
|
32 | key in (obj or {}).keys() # SIM118
|
||||||
33 |
|
33 |
|
||||||
|
|
@ -297,7 +297,7 @@ SIM118.py:34:1: SIM118 [*] Use `(key) in (obj or {})` instead of `(key) in (obj
|
||||||
35 |
|
35 |
|
||||||
36 | from typing import KeysView
|
36 | from typing import KeysView
|
||||||
|
|
|
|
||||||
= help: Convert to `(key) in (obj or {})`
|
= help: Remove `.keys()`
|
||||||
|
|
||||||
ℹ Suggested fix
|
ℹ Suggested fix
|
||||||
31 31 |
|
31 31 |
|
||||||
|
|
@ -309,7 +309,7 @@ SIM118.py:34:1: SIM118 [*] Use `(key) in (obj or {})` instead of `(key) in (obj
|
||||||
36 36 | from typing import KeysView
|
36 36 | from typing import KeysView
|
||||||
37 37 |
|
37 37 |
|
||||||
|
|
||||||
SIM118.py:48:1: SIM118 [*] Use `key in obj` instead of `key in obj.keys()`
|
SIM118.py:48:1: SIM118 [*] Use `key in dict` instead of `key in dict.keys()`
|
||||||
|
|
|
|
||||||
47 | # Regression test for: https://github.com/astral-sh/ruff/issues/7124
|
47 | # Regression test for: https://github.com/astral-sh/ruff/issues/7124
|
||||||
48 | key in obj.keys()and foo
|
48 | key in obj.keys()and foo
|
||||||
|
|
@ -317,7 +317,7 @@ SIM118.py:48:1: SIM118 [*] Use `key in obj` instead of `key in obj.keys()`
|
||||||
49 | (key in obj.keys())and foo
|
49 | (key in obj.keys())and foo
|
||||||
50 | key in (obj.keys())and foo
|
50 | key in (obj.keys())and foo
|
||||||
|
|
|
|
||||||
= help: Convert to `key in obj`
|
= help: Remove `.keys()`
|
||||||
|
|
||||||
ℹ Suggested fix
|
ℹ Suggested fix
|
||||||
45 45 |
|
45 45 |
|
||||||
|
|
@ -327,8 +327,9 @@ SIM118.py:48:1: SIM118 [*] Use `key in obj` instead of `key in obj.keys()`
|
||||||
48 |+key in obj and foo
|
48 |+key in obj and foo
|
||||||
49 49 | (key in obj.keys())and foo
|
49 49 | (key in obj.keys())and foo
|
||||||
50 50 | key in (obj.keys())and foo
|
50 50 | key in (obj.keys())and foo
|
||||||
|
51 51 |
|
||||||
|
|
||||||
SIM118.py:49:2: SIM118 [*] Use `key in obj` instead of `key in obj.keys()`
|
SIM118.py:49:2: SIM118 [*] Use `key in dict` instead of `key in dict.keys()`
|
||||||
|
|
|
|
||||||
47 | # Regression test for: https://github.com/astral-sh/ruff/issues/7124
|
47 | # Regression test for: https://github.com/astral-sh/ruff/issues/7124
|
||||||
48 | key in obj.keys()and foo
|
48 | key in obj.keys()and foo
|
||||||
|
|
@ -336,7 +337,7 @@ SIM118.py:49:2: SIM118 [*] Use `key in obj` instead of `key in obj.keys()`
|
||||||
| ^^^^^^^^^^^^^^^^^ SIM118
|
| ^^^^^^^^^^^^^^^^^ SIM118
|
||||||
50 | key in (obj.keys())and foo
|
50 | key in (obj.keys())and foo
|
||||||
|
|
|
|
||||||
= help: Convert to `key in obj`
|
= help: Remove `.keys()`
|
||||||
|
|
||||||
ℹ Suggested fix
|
ℹ Suggested fix
|
||||||
46 46 |
|
46 46 |
|
||||||
|
|
@ -345,21 +346,51 @@ SIM118.py:49:2: SIM118 [*] Use `key in obj` instead of `key in obj.keys()`
|
||||||
49 |-(key in obj.keys())and foo
|
49 |-(key in obj.keys())and foo
|
||||||
49 |+(key in obj)and foo
|
49 |+(key in obj)and foo
|
||||||
50 50 | key in (obj.keys())and foo
|
50 50 | key in (obj.keys())and foo
|
||||||
|
51 51 |
|
||||||
|
52 52 | # Regression test for: https://github.com/astral-sh/ruff/issues/7200
|
||||||
|
|
||||||
SIM118.py:50:1: SIM118 [*] Use `key in obj` instead of `key in obj.keys()`
|
SIM118.py:50:1: SIM118 [*] Use `key in dict` instead of `key in dict.keys()`
|
||||||
|
|
|
|
||||||
48 | key in obj.keys()and foo
|
48 | key in obj.keys()and foo
|
||||||
49 | (key in obj.keys())and foo
|
49 | (key in obj.keys())and foo
|
||||||
50 | key in (obj.keys())and foo
|
50 | key in (obj.keys())and foo
|
||||||
| ^^^^^^^^^^^^^^^^^^^ SIM118
|
| ^^^^^^^^^^^^^^^^^^^ SIM118
|
||||||
|
51 |
|
||||||
|
52 | # Regression test for: https://github.com/astral-sh/ruff/issues/7200
|
||||||
|
|
|
|
||||||
= help: Convert to `key in obj`
|
= help: Remove `.keys()`
|
||||||
|
|
||||||
ℹ Suggested fix
|
ℹ Suggested fix
|
||||||
47 47 | # Regression test for: https://github.com/astral-sh/ruff/issues/7124
|
47 47 | # Regression test for: https://github.com/astral-sh/ruff/issues/7124
|
||||||
48 48 | key in obj.keys()and foo
|
48 48 | key in obj.keys()and foo
|
||||||
49 49 | (key in obj.keys())and foo
|
49 49 | (key in obj.keys())and foo
|
||||||
50 |-key in (obj.keys())and foo
|
50 |-key in (obj.keys())and foo
|
||||||
50 |+key in obj and foo
|
50 |+key in (obj)and foo
|
||||||
|
51 51 |
|
||||||
|
52 52 | # Regression test for: https://github.com/astral-sh/ruff/issues/7200
|
||||||
|
53 53 | for key in (
|
||||||
|
|
||||||
|
SIM118.py:53:5: SIM118 [*] Use `key in dict` instead of `key in dict.keys()`
|
||||||
|
|
|
||||||
|
52 | # Regression test for: https://github.com/astral-sh/ruff/issues/7200
|
||||||
|
53 | for key in (
|
||||||
|
| _____^
|
||||||
|
54 | | self.experiment.surveys[0]
|
||||||
|
55 | | .stations[0]
|
||||||
|
56 | | .keys()
|
||||||
|
57 | | ):
|
||||||
|
| |_^ SIM118
|
||||||
|
58 | continue
|
||||||
|
|
|
||||||
|
= help: Remove `.keys()`
|
||||||
|
|
||||||
|
ℹ Suggested fix
|
||||||
|
53 53 | for key in (
|
||||||
|
54 54 | self.experiment.surveys[0]
|
||||||
|
55 55 | .stations[0]
|
||||||
|
56 |- .keys()
|
||||||
|
56 |+
|
||||||
|
57 57 | ):
|
||||||
|
58 58 | continue
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue