Flag FURB105 with starred kwargs (#7630)

This commit is contained in:
Charlie Marsh 2023-09-24 10:28:20 -04:00 committed by GitHub
parent 15813a65f3
commit f32b0eef9c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 34 additions and 19 deletions

View file

@ -16,6 +16,7 @@ print("foo", "", sep="")
print("foo", "", "bar", sep="")
print("", *args)
print("", *args, sep="")
print("", **kwargs)
# OK.
@ -29,4 +30,3 @@ print("", "foo", sep=",")
print("foo", "", sep=",")
print("foo", "", "bar", "", sep=",")
print("", "", **kwargs)
print("", **kwargs)

View file

@ -57,27 +57,22 @@ impl Violation for PrintEmptyString {
/// FURB105
pub(crate) fn print_empty_string(checker: &mut Checker, call: &ast::ExprCall) {
// Avoid flagging, e.g., `print("", "", **kwargs)`.
if call
.arguments
.keywords
.iter()
.any(|keyword| keyword.arg.is_none())
{
return;
}
if checker
.semantic()
.resolve_call_path(&call.func)
.as_ref()
.is_some_and(|call_path| matches!(call_path.as_slice(), ["", "print"]))
{
// Ex) `print("", sep="")`
// Ex) `print("", sep="")` or `print("", "", **kwargs)`
let empty_separator = call
.arguments
.find_keyword("sep")
.map_or(false, |keyword| is_empty_string(&keyword.value));
.map_or(false, |keyword| is_empty_string(&keyword.value))
&& !call
.arguments
.keywords
.iter()
.any(|keyword| keyword.arg.is_none());
// Avoid flagging, e.g., `print("", "", sep="sep")`
if !empty_separator && call.arguments.args.len() != 1 {

View file

@ -291,7 +291,7 @@ FURB105.py:16:1: FURB105 [*] Unnecessary empty string passed to `print`
16 |+print("foo", "bar", sep="")
17 17 | print("", *args)
18 18 | print("", *args, sep="")
19 19 |
19 19 | print("", **kwargs)
FURB105.py:18:1: FURB105 [*] Unnecessary empty string passed to `print`
|
@ -299,8 +299,7 @@ FURB105.py:18:1: FURB105 [*] Unnecessary empty string passed to `print`
17 | print("", *args)
18 | print("", *args, sep="")
| ^^^^^^^^^^^^^^^^^^^^^^^^ FURB105
19 |
20 | # OK.
19 | print("", **kwargs)
|
= help: Remove empty string
@ -310,8 +309,29 @@ FURB105.py:18:1: FURB105 [*] Unnecessary empty string passed to `print`
17 17 | print("", *args)
18 |-print("", *args, sep="")
18 |+print(*args, sep="")
19 19 |
20 20 | # OK.
21 21 |
19 19 | print("", **kwargs)
20 20 |
21 21 | # OK.
FURB105.py:19:1: FURB105 [*] Unnecessary empty string passed to `print`
|
17 | print("", *args)
18 | print("", *args, sep="")
19 | print("", **kwargs)
| ^^^^^^^^^^^^^^^^^^^ FURB105
20 |
21 | # OK.
|
= help: Remove empty string
Suggested fix
16 16 | print("foo", "", "bar", sep="")
17 17 | print("", *args)
18 18 | print("", *args, sep="")
19 |-print("", **kwargs)
19 |+print(**kwargs)
20 20 |
21 21 | # OK.
22 22 |