summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorent Xicluna <florent.xicluna@gmail.com>2014-12-16 01:05:48 +0100
committerFlorent Xicluna <florent.xicluna@gmail.com>2014-12-16 21:03:45 +0100
commitab63c978ac3540cd556f880d6035264deea8cb6e (patch)
treeed510c7f7b86ad538a191683b2f0ab22bcc1b497
parentda9f37d3d9466e1cc35579748cb8adab57b5791c (diff)
downloadpep8-ab63c978ac3540cd556f880d6035264deea8cb6e.tar.gz
Fix false positive E711/E712; issue #336
-rw-r--r--CHANGES.txt2
-rwxr-xr-xpep8.py16
-rw-r--r--testsuite/E71.py5
3 files changed, 13 insertions, 10 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index 79a3454..3427e9b 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -36,6 +36,8 @@ Bug fixes:
* Don't crash if os.path.expanduser() throws an ImportError. (Issue #297)
+* Fix false positive E711/E712. (Issue #336)
+
1.5.7 (2014-05-29)
------------------
diff --git a/pep8.py b/pep8.py
index 6f6a4c4..7a50ab3 100755
--- a/pep8.py
+++ b/pep8.py
@@ -106,10 +106,8 @@ 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'(?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_SINGLETON_REGEX = re.compile(r'\b(None|False|True)?\s*([=!]=)'
+ r'\s*(?(1)|(None|False|True))\b')
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*\))')
@@ -998,12 +996,10 @@ def comparison_to_singleton(logical_line, noqa):
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) or
- COMPARE_SINGLETON_REVERSE_REGEX.search(logical_line))
+ match = not noqa and COMPARE_SINGLETON_REGEX.search(logical_line)
if match:
- singleton = match.group('singleton')
- same = (match.group('op') == '==')
+ singleton = match.group(1) or match.group(3)
+ same = (match.group(2) == '==')
msg = "'if cond is %s:'" % (('' if same else 'not ') + singleton)
if singleton in ('None',):
@@ -1013,7 +1009,7 @@ def comparison_to_singleton(logical_line, noqa):
nonzero = ((singleton == 'True' and same) or
(singleton == 'False' and not same))
msg += " or 'if %scond:'" % ('' if nonzero else 'not ')
- yield match.start(1), ("%s comparison to %s should be %s" %
+ yield match.start(2), ("%s comparison to %s should be %s" %
(code, singleton, msg))
diff --git a/testsuite/E71.py b/testsuite/E71.py
index 3f07b1a..25a308f 100644
--- a/testsuite/E71.py
+++ b/testsuite/E71.py
@@ -55,4 +55,9 @@ if not (X in Y):
pass
if x is not y:
pass
+
+if TrueElement.get_element(True) == TrueElement.get_element(False):
+ pass
+if (True) == TrueElement or x == TrueElement:
+ pass
#: