diff options
author | Helen ST <helenst@gmail.com> | 2014-12-11 19:28:12 +0000 |
---|---|---|
committer | Helen ST <helenst@gmail.com> | 2014-12-11 19:28:12 +0000 |
commit | 36389f0337ce25b399a25757fa757b1cd8f8a336 (patch) | |
tree | 056b90d8f3f13e4fc091ad6f66b5fbb56046e275 | |
parent | 4c5bf00cb613be617c7f48d3b2b82a1c7b895ac1 (diff) | |
download | pep8-36389f0337ce25b399a25757fa757b1cd8f8a336.tar.gz |
E711 / E712 checks test for None != arg and False == arg
(Fixes #307)
-rwxr-xr-x | pep8.py | 16 | ||||
-rw-r--r-- | testsuite/E71.py | 17 |
2 files changed, 29 insertions, 4 deletions
@@ -101,7 +101,10 @@ ERRORCODE_REGEX = re.compile(r'\b[A-Z]\d{3}\b') DOCSTRING_REGEX = re.compile(r'u?r?["\']') EXTRANEOUS_WHITESPACE_REGEX = re.compile(r'[[({] | []}),;:]') WHITESPACE_AFTER_COMMA_REGEX = re.compile(r'[,;:]\s*(?: |\t)') -COMPARE_SINGLETON_REGEX = re.compile(r'([=!]=)\s*(None|False|True)') +COMPARE_SINGLETON_REGEX = re.compile(r'(?P<op>[=!]=)\s*' + r'(?P<singleton>None|False|True)') +COMPARE_SINGLETON_REVERSE_REGEX = re.compile(r'(?P<singleton>None|False|True)' + r'\s*(?P<op>[=!]=)') COMPARE_NEGATIVE_REGEX = re.compile(r'\b(not)\s+[^[({ ]+\s+(in|is)\s') COMPARE_TYPE_REGEX = re.compile(r'(?:[=!]=|is(?:\s+not)?)\s*type(?:s.\w+Type' r'|\s*\(\s*([^)]*[^ )])\s*\))') @@ -930,17 +933,22 @@ def comparison_to_singleton(logical_line, noqa): Okay: if arg is not None: E711: if arg != None: + E711: if None == arg: E712: if arg == True: + E712: if False == arg: Also, beware of writing if x when you really mean if x is not None -- e.g. when testing whether a variable or argument that defaults to None was set to some other value. The other value might have a type (such as a container) that could be false in a boolean context! """ - match = not noqa and COMPARE_SINGLETON_REGEX.search(logical_line) + + match = not noqa and (COMPARE_SINGLETON_REGEX.search(logical_line) or + COMPARE_SINGLETON_REVERSE_REGEX.search(logical_line)) if match: - same = (match.group(1) == '==') - singleton = match.group(2) + singleton = match.group('singleton') + same = match.group('op') + msg = "'if cond is %s:'" % (('' if same else 'not ') + singleton) if singleton in ('None',): code = 'E711' diff --git a/testsuite/E71.py b/testsuite/E71.py index 2ff5dea..3f07b1a 100644 --- a/testsuite/E71.py +++ b/testsuite/E71.py @@ -1,12 +1,29 @@ #: E711 if res == None: pass +#: E711 +if res != None: + pass +#: E711 +if None == res: + pass +#: E711 +if None != res: + pass + +# #: E712 if res == True: pass #: E712 if res != False: pass +#: E712 +if True != res: + pass +#: E712 +if False == res: + pass # #: E713 |