-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[flake8_comprehensions
] Handled special case for C400
which also matches C416
#10419
[flake8_comprehensions
] Handled special case for C400
which also matches C416
#10419
Conversation
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Awesome, thank you!
return; | ||
} | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I decided to just use more nesting here rather than the break
pattern. It's not necessarily "better", just a matter of personal preference.
); | ||
let Some(ExprGenerator { | ||
elt, generators, .. | ||
}) = argument.as_generator_expr() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
.as_generator_expr()
lets us avoid the clone.
856331e
to
1ca7107
Compare
…matches `C416` (#10596) ## Summary <!-- What's the purpose of the change? What does it do, and why? --> Similar to #10419, there was a case where there is a collision of C401 and C416 (as discussed in #10101). Fixed this by implementing short-circuit for the comprehension of the form `{x for x in foo}`. ## Test Plan <!-- How was it tested? --> Extended `C401.py` with the case where `set` is not builtin function, and divided the case where the short-circuit should occur. Removed the last testcase of `print(f"{ {set(a for a in 'abc')} }")` test as this is invalid as a python code, but should I keep this?
Summary
Short-circuit implementation mentioned in #10403.
I implemented this by extending C400:
UnnecessaryGeneratorList
have information of whether the the short-circuiting occurred (to put diagnostic)unnecessary_generator_list
function.Please give me suggestions if you think this isn't the best way to handle this :)
Test Plan
Extended
C400.py
a little, and written the cases where:list
e.g.list(x for x in range(3))
->list(range(3))
list
e.g.list(2 * x for x in range(3))
->[2 * x for x in range(3)]
list
function is not built-in, and should not modify the code in any way.