summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xpycodestyle.py24
-rw-r--r--setup.cfg2
-rw-r--r--testsuite/E12not.py29
-rw-r--r--testsuite/W19.py18
-rw-r--r--testsuite/test_all.py2
-rw-r--r--testsuite/test_api.py4
6 files changed, 37 insertions, 42 deletions
diff --git a/pycodestyle.py b/pycodestyle.py
index ad17382..f70a1a6 100755
--- a/pycodestyle.py
+++ b/pycodestyle.py
@@ -1184,16 +1184,15 @@ def break_before_binary_operator(logical_line, tokens):
W503: (width == 0\n + height == 0)
W503: (width == 0\n and height == 0)
+ W503: var = (1\n & ~2)
+ W503: var = (1\n / -2)
+ W503: var = (1\n + -1\n + -2)
- Okay: (width == 0 +\n height == 0)
Okay: foo(\n -x)
Okay: foo(x\n [])
Okay: x = '''\n''' + ''
Okay: foo(x,\n -y)
Okay: foo(x, # comment\n -y)
- Okay: var = (1 &\n ~2)
- Okay: var = (1 /\n -2)
- Okay: var = (1 +\n -1 +\n -2)
"""
for context in _break_around_binary_operators(tokens):
(token_type, text, previous_token_type, previous_text,
@@ -1215,25 +1214,26 @@ def break_after_binary_operator(logical_line, tokens):
W504: (width == 0 +\n height == 0)
W504: (width == 0 and\n height == 0)
+ W504: var = (1 &\n ~2)
- Okay: (width == 0\n + height == 0)
Okay: foo(\n -x)
Okay: foo(x\n [])
Okay: x = '''\n''' + ''
Okay: x = '' + '''\n'''
Okay: foo(x,\n -y)
Okay: foo(x, # comment\n -y)
- Okay: var = (1\n & ~2)
- Okay: var = (1\n / -2)
- Okay: var = (1\n + -1\n + -2)
+
+ The following should be W504 but unary_context is tricky with these
+ Okay: var = (1 /\n -2)
+ Okay: var = (1 +\n -1 +\n -2)
"""
for context in _break_around_binary_operators(tokens):
(token_type, text, previous_token_type, previous_text,
line_break, unary_context, start) = context
- if (_is_binary_operator(previous_token_type, previous_text)
- and line_break
- and not unary_context
- and not _is_binary_operator(token_type, text)):
+ if (_is_binary_operator(previous_token_type, previous_text) and
+ line_break and
+ not unary_context and
+ not _is_binary_operator(token_type, text)):
error_pos = (start[0] - 1, start[1])
yield error_pos, "W504 line break after binary operator"
diff --git a/setup.cfg b/setup.cfg
index 91ea674..2cd4b2e 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -6,5 +6,5 @@ license_file = LICENSE
[pycodestyle]
select =
-ignore = E226,E24
+ignore = E226,E24,W504
max_line_length = 79
diff --git a/testsuite/E12not.py b/testsuite/E12not.py
index 34d6efe..ebaa078 100644
--- a/testsuite/E12not.py
+++ b/testsuite/E12not.py
@@ -16,12 +16,11 @@ if x == 2 \
or y > 1 \
or x == 3:
pass
-
-
+#: W503
if (foo == bar
and baz == frop):
pass
-
+#: W503
if (
foo == bar
and baz == frop
@@ -108,7 +107,7 @@ sat = 'AAA' \
'BBB' \
'iii' \
'CCC'
-
+#: W504 W504
abricot = (3 +
4 +
5 + 6)
@@ -137,8 +136,7 @@ def long_function_name(
var_one, var_two, var_three,
var_four):
print(var_one)
-
-
+#: W504
if ((row < 0 or self.moduleCount <= row or
col < 0 or self.moduleCount <= col)):
raise Exception("%s,%s - %s" % (row, col, self.moduleCount))
@@ -183,23 +181,23 @@ if bar:
"to match that of the opening "
"bracket's line"
)
-#
+#: W504
# you want vertical alignment, so use a parens
if ((foo.bar("baz") and
foo.bar("frop")
)):
print "yes"
-
+#: W504
# also ok, but starting to look like LISP
if ((foo.bar("baz") and
foo.bar("frop"))):
print "yes"
-
+#: W504
if (a == 2 or
b == "abc def ghi"
"jkl mno"):
return True
-
+#: W504
if (a == 2 or
b == """abc def ghi
jkl mno"""):
@@ -223,22 +221,19 @@ print 'l.{line}\t{pos}\t{name}\t{text}'.format(
print('%-7d %s per second (%d total)' % (
options.counters[key] / elapsed, key,
options.counters[key]))
-
-
+#: W504
if os.path.exists(os.path.join(path, PEP8_BIN)):
cmd = ([os.path.join(path, PEP8_BIN)] +
self._pep8_options(targetfile))
-
-
+#: W504
fixed = (re.sub(r'\t+', ' ', target[c::-1], 1)[::-1] +
target[c + 1:])
-
+#: W504
fixed = (
re.sub(r'\t+', ' ', target[c::-1], 1)[::-1] +
target[c + 1:]
)
-
-
+#: W504
if foo is None and bar is "frop" and \
blah == 'yeah':
blah = 'yeahnah'
diff --git a/testsuite/W19.py b/testsuite/W19.py
index afdfb76..ed69e2b 100644
--- a/testsuite/W19.py
+++ b/testsuite/W19.py
@@ -7,7 +7,7 @@ if False:
#: W191
y = x == 2 \
or x == 3
-#: E101 W191
+#: E101 W191 W504
if (
x == (
3
@@ -26,11 +26,11 @@ if x == 2 \
pass
#:
-#: E101 W191
+#: E101 W191 W504
if (foo == bar and
baz == frop):
pass
-#: E101 W191
+#: E101 W191 W504
if (
foo == bar and
baz == frop
@@ -52,7 +52,7 @@ def long_function_name(
var_one, var_two, var_three,
var_four):
print(var_one)
-#: E101 W191
+#: E101 W191 W504
if ((row < 0 or self.moduleCount <= row or
col < 0 or self.moduleCount <= col)):
raise Exception("%s,%s - %s" % (row, col, self.moduleCount))
@@ -65,23 +65,23 @@ if bar:
"bracket's line"
)
#
-#: E101 W191
+#: E101 W191 W504
# you want vertical alignment, so use a parens
if ((foo.bar("baz") and
foo.bar("frop")
)):
print "yes"
-#: E101 W191
+#: E101 W191 W504
# also ok, but starting to look like LISP
if ((foo.bar("baz") and
foo.bar("frop"))):
print "yes"
-#: E101 W191
+#: E101 W191 W504
if (a == 2 or
b == "abc def ghi"
"jkl mno"):
return True
-#: E101 W191
+#: E101 W191 W504
if (a == 2 or
b == """abc def ghi
jkl mno"""):
@@ -93,7 +93,7 @@ if length > options.max_line_length:
#
-#: E101 W191 W191
+#: E101 W191 W191 W504
if os.path.exists(os.path.join(path, PEP8_BIN)):
cmd = ([os.path.join(path, PEP8_BIN)] +
self._pep8_options(targetfile))
diff --git a/testsuite/test_all.py b/testsuite/test_all.py
index 08f9ea9..f571a7b 100644
--- a/testsuite/test_all.py
+++ b/testsuite/test_all.py
@@ -43,7 +43,7 @@ class PycodestyleTestCase(unittest.TestCase):
os.path.join(ROOT_DIR, 'setup.py')]
report = self._style.init_report(pycodestyle.StandardReport)
report = self._style.check_files(files)
- self.assertFalse(report.total_errors,
+ self.assertEqual(list(report.messages.keys()), ['W504'],
msg='Failures: %s' % report.messages)
diff --git a/testsuite/test_api.py b/testsuite/test_api.py
index 4d8b7b2..6eb9f04 100644
--- a/testsuite/test_api.py
+++ b/testsuite/test_api.py
@@ -166,7 +166,7 @@ class APITestCase(unittest.TestCase):
self.assertEqual(pep8style.options.filename, ['*.py'])
self.assertEqual(pep8style.options.format, 'default')
self.assertEqual(pep8style.options.select, ())
- self.assertEqual(pep8style.options.ignore, ('E226', 'E24'))
+ self.assertEqual(pep8style.options.ignore, ('E226', 'E24', 'W504'))
self.assertEqual(pep8style.options.max_line_length, 79)
def test_styleguide_ignore_code(self):
@@ -182,7 +182,7 @@ class APITestCase(unittest.TestCase):
self.assertEqual(options.select, ())
self.assertEqual(
options.ignore,
- ('E121', 'E123', 'E126', 'E226', 'E24', 'E704', 'W503')
+ ('E121', 'E123', 'E126', 'E226', 'E24', 'E704', 'W503', 'W504')
)
options = parse_argv('--doctest').options