Avoid inserting trailing commas within f-strings (#8574)

Closes https://github.com/astral-sh/ruff/issues/8556.
This commit is contained in:
Charlie Marsh
2023-11-08 20:25:23 -08:00
committed by GitHub
parent 722687ad72
commit f499f0ca60
3 changed files with 24 additions and 4 deletions

View File

@@ -42,7 +42,7 @@ foo = (
4,
)
foo = 3,
foo = 3,
class A(object):
foo = 3
@@ -639,3 +639,10 @@ foo = namedtuple(
:20
],
)
# Make sure we don't insert commas within f-strings.
f"""This is a test. {
"Another sentence."
if True else
"Alternative route!"
}"""

View File

@@ -223,11 +223,24 @@ pub(crate) fn trailing_commas(
tokens: &[LexResult],
locator: &Locator,
) {
let mut fstrings = 0u32;
let tokens = tokens
.iter()
.flatten()
// Completely ignore comments -- they just interfere with the logic.
.filter(|&r| !matches!(r, (Tok::Comment(_), _)))
.filter(|(tok, _)| match tok {
// Completely ignore comments -- they just interfere with the logic.
Tok::Comment(_) => false,
// Ignore content within f-strings.
Tok::FStringStart => {
fstrings = fstrings.saturating_add(1);
false
}
Tok::FStringEnd => {
fstrings = fstrings.saturating_sub(1);
false
}
_ => fstrings == 0,
})
.map(Token::from_spanned);
let tokens = [Token::irrelevant(), Token::irrelevant()]
.into_iter()

View File

@@ -106,7 +106,7 @@ COM81.py:45:8: COM818 Trailing comma on bare tuple prohibited
|
43 | )
44 |
45 | foo = 3,
45 | foo = 3,
| ^ COM818
46 |
47 | class A(object):