Allow spaces around equals sign of an annotated function definition parameter; issue...
authorIan Lee <IanLee1521@gmail.com>
Thu, 18 Dec 2014 09:54:20 +0000 (01:54 -0800)
committerIan Lee <IanLee1521@gmail.com>
Mon, 29 Dec 2014 18:39:33 +0000 (10:39 -0800)
CHANGES.txt
pep8.py

index 774a90d39383affd1ff86dab428b8f354e3e152c..91a20950606ff1bef28d536199ce550f86438f81 100644 (file)
@@ -34,6 +34,8 @@ Changes:
 
 * Do not report E121 or E126 in the default configuration. (Issues #256 / #316)
 
+* Allow spaces around the equals sign in an annotated function. (Issue #357)
+
 Bug fixes:
 
 * Don't crash if Checker.build_tokens_line() returns None. (Issue #306)
diff --git a/pep8.py b/pep8.py
index 940a2724050f88b40730f0dd62c0c42cb1161844..1f7358ec2d1ee61cf4b4e629d3c6964375111983 100755 (executable)
--- a/pep8.py
+++ b/pep8.py
@@ -754,6 +754,8 @@ def whitespace_around_named_parameter_equals(logical_line, tokens):
     Okay: boolean(a != b)
     Okay: boolean(a <= b)
     Okay: boolean(a >= b)
+    Okay: def foo(arg: int = 42):
+    Okay: def f(x: int, y=15, z: float = 0.123) -> list:
 
     E251: def complex(real, imag = 0.0):
     E251: return magic(r = real, i = imag)
@@ -761,6 +763,8 @@ def whitespace_around_named_parameter_equals(logical_line, tokens):
     parens = 0
     no_space = False
     prev_end = None
+    annotated_func_arg = False
+    in_def = logical_line.startswith('def')
     message = "E251 unexpected spaces around keyword / parameter equals"
     for token_type, text, start, end, line in tokens:
         if token_type == tokenize.NL:
@@ -774,7 +778,11 @@ def whitespace_around_named_parameter_equals(logical_line, tokens):
                 parens += 1
             elif text == ')':
                 parens -= 1
-            elif parens and text == '=':
+            elif in_def and text == ':':
+                annotated_func_arg = True
+            elif parens and text == ',':
+                annotated_func_arg = False
+            elif parens and text == '=' and not annotated_func_arg:
                 no_space = True
                 if start != prev_end:
                     yield (prev_end, message)