120120ERRORCODE_REGEX = re .compile (r'\b[A-Z]\d{3}\b' )
121121DOCSTRING_REGEX = re .compile (r'u?r?["\']' )
122122EXTRANEOUS_WHITESPACE_REGEX = re .compile (r'[\[({][ \t]|[ \t][\]}),;:](?!=)' )
123+ WHITESPACE_AFTER_DECORATOR_REGEX = re .compile (r'@\s' )
123124WHITESPACE_AFTER_COMMA_REGEX = re .compile (r'[,;:]\s*(?: |\t)' )
124125COMPARE_SINGLETON_REGEX = re .compile (r'(\bNone|\bFalse|\bTrue)?\s*([=!]=)'
125126 r'\s*(?(1)|(None|False|True))\b' )
@@ -438,6 +439,9 @@ def extraneous_whitespace(logical_line):
438439 E203: if x == 4: print x, y; x, y = y , x
439440 E203: if x == 4: print x, y ; x, y = y, x
440441 E203: if x == 4 : print x, y; x, y = y, x
442+
443+ Okay: @decorator
444+ E204: @ decorator
441445 """
442446 line = logical_line
443447 for match in EXTRANEOUS_WHITESPACE_REGEX .finditer (line ):
@@ -451,6 +455,9 @@ def extraneous_whitespace(logical_line):
451455 code = ('E202' if char in '}])' else 'E203' ) # if char in ',;:'
452456 yield found , f"{ code } whitespace before '{ char } '"
453457
458+ if WHITESPACE_AFTER_DECORATOR_REGEX .match (logical_line ):
459+ yield 1 , "E204 whitespace after decorator '@'"
460+
454461
455462@register_check
456463def whitespace_around_keywords (logical_line ):
0 commit comments