Remove non-magic trailing comma from tuple (#1854)

Closes #1821.
This commit is contained in:
Charlie Marsh 2023-01-13 12:56:42 -05:00 committed by GitHub
parent fc3f722df5
commit 12440ede9c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 40 additions and 4 deletions

View File

@ -3,3 +3,4 @@ s2 = set((1, 2))
s3 = set([])
s4 = set(())
s5 = set()
s6 = set((1,))

View File

@ -258,6 +258,24 @@ pub fn fix_unnecessary_list_comprehension_dict(
))
}
fn drop_trailing_comma<'a>(elements: &[Element<'a>]) -> Vec<Element<'a>> {
let mut elements = elements.to_vec();
if elements.len() == 1 {
if let Some(Element::Simple {
value,
comma: Some(..),
..
}) = elements.last()
{
elements[0] = Element::Simple {
value: value.clone(),
comma: None,
};
}
}
elements
}
/// (C405) Convert `set((1, 2))` to `{1, 2}`.
pub fn fix_unnecessary_literal_set(locator: &Locator, expr: &rustpython_ast::Expr) -> Result<Fix> {
// Expr(Call(List|Tuple)))) -> Expr(Set)))
@ -268,8 +286,8 @@ pub fn fix_unnecessary_literal_set(locator: &Locator, expr: &rustpython_ast::Exp
let arg = match_arg(call)?;
let elements = match &arg.value {
Expression::Tuple(inner) => &inner.elements,
Expression::List(inner) => &inner.elements,
Expression::Tuple(inner) => drop_trailing_comma(&inner.elements),
Expression::List(inner) => inner.elements.clone(),
_ => {
bail!("Expected Expression::Tuple | Expression::List");
}
@ -279,7 +297,7 @@ pub fn fix_unnecessary_literal_set(locator: &Locator, expr: &rustpython_ast::Exp
call.args = vec![];
} else {
body.value = Expression::Set(Box::new(Set {
elements: elements.clone(),
elements,
lbrace: LeftCurlyBrace {
whitespace_after: call.whitespace_before_args.clone(),
},

View File

@ -1,6 +1,6 @@
---
source: src/flake8_comprehensions/mod.rs
expression: checks
expression: diagnostics
---
- kind:
UnnecessaryLiteralSet: list
@ -70,4 +70,21 @@ expression: checks
row: 4
column: 12
parent: ~
- kind:
UnnecessaryLiteralSet: tuple
location:
row: 6
column: 5
end_location:
row: 6
column: 14
fix:
content: "{1}"
location:
row: 6
column: 5
end_location:
row: 6
column: 14
parent: ~