diff options
author | Florent Xicluna <florent.xicluna@gmail.com> | 2014-05-29 19:14:06 +0200 |
---|---|---|
committer | Florent Xicluna <florent.xicluna@gmail.com> | 2014-05-29 19:14:06 +0200 |
commit | 2d072332abb69ba024329ea333954998be280221 (patch) | |
tree | d4667815ad44d320a7b31f30e5bbae84a2caf864 | |
parent | 164066c4d85f212f5f4a11699b848942c678b947 (diff) | |
parent | d6d2f0b2ec50ffce2d1ad469fbd4e2b1642cfa0f (diff) | |
download | pep8-2d072332abb69ba024329ea333954998be280221.tar.gz |
Report E731 for lambda assignment, return E704 for one-liner def instead of E701; issue #277
-rw-r--r-- | docs/intro.rst | 4 | ||||
-rwxr-xr-x | pep8.py | 21 | ||||
-rw-r--r-- | testsuite/E22.py | 4 | ||||
-rw-r--r-- | testsuite/E70.py | 19 | ||||
-rw-r--r-- | testsuite/E73.py | 7 |
5 files changed, 41 insertions, 14 deletions
diff --git a/docs/intro.rst b/docs/intro.rst index fd2644e..27f125a 100644 --- a/docs/intro.rst +++ b/docs/intro.rst @@ -305,6 +305,8 @@ This is the current list of error and warning codes: +----------+----------------------------------------------------------------------+ | E703 | statement ends with a semicolon | +----------+----------------------------------------------------------------------+ +| E704 | multiple statements on one line (def) | ++----------+----------------------------------------------------------------------+ | E711 (^) | comparison to None should be 'if cond is None:' | +----------+----------------------------------------------------------------------+ | E712 (^) | comparison to True should be 'if cond is True:' or 'if cond:' | @@ -315,6 +317,8 @@ This is the current list of error and warning codes: +----------+----------------------------------------------------------------------+ | E721 | do not compare types, use 'isinstance()' | +----------+----------------------------------------------------------------------+ +| E731 | do not assign a lambda expression, use a def | ++----------+----------------------------------------------------------------------+ +----------+----------------------------------------------------------------------+ | **E9** | *Runtime* | +----------+----------------------------------------------------------------------+ @@ -834,6 +834,9 @@ def compound_statements(logical_line): on the same line, never do this for multi-clause statements. Also avoid folding such long lines! + Always use a def statement instead of an assignment statement that + binds a lambda expression directly to a name. + Okay: if foo == 'blah':\n do_blah_thing() Okay: do_one() Okay: do_two() @@ -847,20 +850,26 @@ def compound_statements(logical_line): E701: try: something() E701: finally: cleanup() E701: if foo == 'blah': one(); two(); three() - E702: do_one(); do_two(); do_three() E703: do_four(); # useless semicolon + E704: def f(x): return 2*x + E731: f = lambda x: 2*x """ line = logical_line last_char = len(line) - 1 found = line.find(':') while -1 < found < last_char: before = line[:found] - if (before.count('{') <= before.count('}') and # {'a': 1} (dict) - before.count('[') <= before.count(']') and # [1:2] (slice) - before.count('(') <= before.count(')') and # (Python 3 annotation) - not LAMBDA_REGEX.search(before)): # lambda x: x - yield found, "E701 multiple statements on one line (colon)" + if ((before.count('{') <= before.count('}') and # {'a': 1} (dict) + before.count('[') <= before.count(']') and # [1:2] (slice) + before.count('(') <= before.count(')'))): # (annotation) + if LAMBDA_REGEX.search(before): + yield 0, "E731 do not assign a lambda expression, use a def" + break + if before.startswith('def '): + yield 0, "E704 multiple statements on one line (def)" + else: + yield found, "E701 multiple statements on one line (colon)" found = line.find(':', found + 1) found = line.find(';') while -1 < found: diff --git a/testsuite/E22.py b/testsuite/E22.py index 43a6f3f..56af307 100644 --- a/testsuite/E22.py +++ b/testsuite/E22.py @@ -135,8 +135,8 @@ baz(**kwargs) negative = -1 spam(-1) -negative -lambda *args, **kw: (args, kw) -lambda a, b=h[:], c=0: (a, b, c) +func1(lambda *args, **kw: (args, kw)) +func2(lambda a, b=h[:], c=0: (a, b, c)) if not -5 < x < +5: print >>sys.stderr, "x is out of range." print >> sys.stdout, "x is an integer." diff --git a/testsuite/E70.py b/testsuite/E70.py index 64feefd..85ca666 100644 --- a/testsuite/E70.py +++ b/testsuite/E70.py @@ -1,13 +1,20 @@ -#: E701 +#: E701:1:5 if a: a = False -#: E701 +#: E701:1:40 if not header or header[:6] != 'bytes=': return -#: E702 +#: E702:1:10 a = False; b = True -#: E702 +#: E702:1:17 import bdist_egg; bdist_egg.write_safety_flag(cmd.egg_info, safe) -#: E703 +#: E703:1:13 import shlex; -#: E702 E703 +#: E702:1:9 E703:1:23 del a[:]; a.append(42); +#: E704:1:1 +def f(x): return 2 +#: E704:1:1 E226:1:19 +def f(x): return 2*x +#: E704:2:5 E226:2:23 +while all is round: + def f(x): return 2*x #: diff --git a/testsuite/E73.py b/testsuite/E73.py new file mode 100644 index 0000000..0673e0f --- /dev/null +++ b/testsuite/E73.py @@ -0,0 +1,7 @@ +#: E731:1:1 +f = lambda x: 2 * x +#: E731:1:1 E226:1:16 +f = lambda x: 2*x +#: E731:2:5 +while False: + this = lambda y, z: 2 * x |