summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJimmy Jia <tesrin@gmail.com>2017-12-16 13:29:23 -0500
committerJimmy Jia <tesrin@gmail.com>2017-12-16 13:30:30 -0500
commitd9efb8f46220dc24f74cb8e0f963786d47deecdc (patch)
tree3630c37492b580ad4db3ea243dc2c88e94433f27
parent4f5d398f9256727ad8fd7f67c45ea60a8fad5a4a (diff)
downloadpep8-d9efb8f46220dc24f74cb8e0f963786d47deecdc.tar.gz
Add E252 on missing whitespace for annotated parameter defaults
-rwxr-xr-xpycodestyle.py25
-rw-r--r--testsuite/E25.py3
2 files changed, 23 insertions, 5 deletions
diff --git a/pycodestyle.py b/pycodestyle.py
index 1b06691..3fec26c 100755
--- a/pycodestyle.py
+++ b/pycodestyle.py
@@ -869,7 +869,8 @@ def whitespace_around_named_parameter_equals(logical_line, tokens):
r"""Don't use spaces around the '=' sign in function arguments.
Don't use spaces around the '=' sign when used to indicate a
- keyword argument or a default parameter value.
+ keyword argument or a default parameter value, except when using a type
+ annotation.
Okay: def complex(real, imag=0.0):
Okay: return magic(r=real, i=imag)
@@ -882,13 +883,18 @@ def whitespace_around_named_parameter_equals(logical_line, tokens):
E251: def complex(real, imag = 0.0):
E251: return magic(r = real, i = imag)
+ E252: def complex(real, image: float=0.0):
"""
parens = 0
no_space = False
+ require_space = False
prev_end = None
annotated_func_arg = False
in_def = bool(STARTSWITH_DEF_REGEX.match(logical_line))
+
message = "E251 unexpected spaces around keyword / parameter equals"
+ missing_message = "E252 missing whitespace around parameter equals"
+
for token_type, text, start, end, line in tokens:
if token_type == tokenize.NL:
continue
@@ -896,6 +902,10 @@ def whitespace_around_named_parameter_equals(logical_line, tokens):
no_space = False
if start != prev_end:
yield (prev_end, message)
+ if require_space:
+ require_space = False
+ if start == prev_end:
+ yield (prev_end, missing_message)
if token_type == tokenize.OP:
if text in '([':
parens += 1
@@ -905,10 +915,15 @@ def whitespace_around_named_parameter_equals(logical_line, tokens):
annotated_func_arg = True
elif parens and text == ',' and parens == 1:
annotated_func_arg = False
- elif parens and text == '=' and not annotated_func_arg:
- no_space = True
- if start != prev_end:
- yield (prev_end, message)
+ elif parens and text == '=':
+ if not annotated_func_arg:
+ no_space = True
+ if start != prev_end:
+ yield (prev_end, message)
+ else:
+ require_space = True
+ if start == prev_end:
+ yield (prev_end, missing_message)
if not parens:
annotated_func_arg = False
diff --git a/testsuite/E25.py b/testsuite/E25.py
index dde95b8..71d3f80 100644
--- a/testsuite/E25.py
+++ b/testsuite/E25.py
@@ -42,3 +42,6 @@ async def add(a: int = 0, b: int = 0) -> int:
#: E272:1:6
async def add(a: int = 0, b: int = 0) -> int:
return a + b
+#: E252:1:15 E252:1:16 E252:1:27 E252:1:36
+def add(a: int=0, b: int =0, c: int= 0) -> int:
+ return a + b + c