120
120
ERRORCODE_REGEX = re .compile (r'\b[A-Z]\d{3}\b' )
121
121
DOCSTRING_REGEX = re .compile (r'u?r?["\']' )
122
122
EXTRANEOUS_WHITESPACE_REGEX = re .compile (r'[\[({][ \t]|[ \t][\]}),;:](?!=)' )
123
+ WHITESPACE_AFTER_DECORATOR_REGEX = re .compile (r'@\s' )
123
124
WHITESPACE_AFTER_COMMA_REGEX = re .compile (r'[,;:]\s*(?: |\t)' )
124
125
COMPARE_SINGLETON_REGEX = re .compile (r'(\bNone|\bFalse|\bTrue)?\s*([=!]=)'
125
126
r'\s*(?(1)|(None|False|True))\b' )
@@ -438,6 +439,9 @@ def extraneous_whitespace(logical_line):
438
439
E203: if x == 4: print x, y; x, y = y , x
439
440
E203: if x == 4: print x, y ; x, y = y, x
440
441
E203: if x == 4 : print x, y; x, y = y, x
442
+
443
+ Okay: @decorator
444
+ E204: @ decorator
441
445
"""
442
446
line = logical_line
443
447
for match in EXTRANEOUS_WHITESPACE_REGEX .finditer (line ):
@@ -451,6 +455,9 @@ def extraneous_whitespace(logical_line):
451
455
code = ('E202' if char in '}])' else 'E203' ) # if char in ',;:'
452
456
yield found , f"{ code } whitespace before '{ char } '"
453
457
458
+ if WHITESPACE_AFTER_DECORATOR_REGEX .match (logical_line ):
459
+ yield 1 , "E204 whitespace after decorator '@'"
460
+
454
461
455
462
@register_check
456
463
def whitespace_around_keywords (logical_line ):
0 commit comments