-
Notifications
You must be signed in to change notification settings - Fork 105
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
Couple new rule suggestions #440
Comments
Thanks for asking before spending the time on the PR and us potentially saying nope.
With this one, are you only checking that there is always explicit returns at the end of a function's body? You're never worrying about the type right as I feel mypy / other type checkers will get that.
I don't feel the need for any of these to be optional. They all seems sane to me. But would love another contributor or users views ... |
Agree 1 and 2 are good. 3 is probably better left to a type checker; mypy already has a similar check. In general, it requires type information to know whether a function always returns. Some examples: def int_or_die(s: str) -> int:
try:
return int(s)
except ValueError:
sys.exit(1)
def does_it_return() -> int:
while True:
try:
return int(raw_input())
except ValueError:
continue |
I had a few thoughts for some more linter checks I'd like to have. Would be happy to implement them here if you guys are interested.
1.
return <value>
oryield <?from> <?value>
in__init__()
Example:
Any returning of values, or yielding, in an
__init__()
would result in a runtime error, but not until you try to instantiate an object of the class. So I think this should be a reasonably safe on-by-default error.2.
assert <constant or fixed value>
Normal asserts:
There's already a flake8 check for asserting on a tuple specifically - e.g. accidentally adding parens around (condition, message). And there's a bugbear check for
assert False
warning that it's disabled by-O
. But forgetting the condition (assert "message"
) or asserting on any other literal value or list/tuple will either always pass or always fail - and is probably unintentional?3. Inconsistent
return
s in functionThis one's more opinionated, but if a function returns something in some case, it should explicitly return something (
None
) in all other cases.The text was updated successfully, but these errors were encountered: