Skip to content

Rules#

Ruff supports over 700 lint rules, many of which are inspired by popular tools like Flake8, isort, pyupgrade, and others. Regardless of the rule's origin, Ruff re-implements every rule in Rust as a first-party feature.

By default, Ruff enables Flake8's F rules, along with a subset of the E rules, omitting any stylistic rules that overlap with the use of a formatter, like ruff format or Black.

If you're just getting started with Ruff, the default rule set is a great place to start: it catches a wide variety of common errors (like unused imports) with zero configuration.

Legend#

    โœ”๏ธ     The rule is stable.
    ๐Ÿงช     The rule is unstable and is in "preview".
    โš ๏ธ     The rule has been deprecated and will be removed in a future release.
    โŒ     The rule has been removed only the documentation is available.
    ๐Ÿ› ๏ธ     The rule is automatically fixable by the --fix command-line option.

Pyflakes (F)#

For more, see Pyflakes on PyPI.

Code Name Message
F401 unused-import {name} imported but unused; consider using importlib.util.find_spec to test for availability โœ”๏ธ ๐Ÿ› ๏ธ
F402 import-shadowed-by-loop-var Import {name} from {row} shadowed by loop variable โœ”๏ธ
F403 undefined-local-with-import-star from {name} import * used; unable to detect undefined names โœ”๏ธ
F404 late-future-import from __future__ imports must occur at the beginning of the file โœ”๏ธ
F405 undefined-local-with-import-star-usage {name} may be undefined, or defined from star imports โœ”๏ธ
F406 undefined-local-with-nested-import-star-usage from {name} import * only allowed at module level โœ”๏ธ
F407 future-feature-not-defined Future feature {name} is not defined โœ”๏ธ
F501 percent-format-invalid-format %-format string has invalid format string: {message} โœ”๏ธ
F502 percent-format-expected-mapping %-format string expected mapping but got sequence โœ”๏ธ
F503 percent-format-expected-sequence %-format string expected sequence but got mapping โœ”๏ธ
F504 percent-format-extra-named-arguments %-format string has unused named argument(s): {message} โœ”๏ธ ๐Ÿ› ๏ธ
F505 percent-format-missing-argument %-format string is missing argument(s) for placeholder(s): {message} โœ”๏ธ
F506 percent-format-mixed-positional-and-named %-format string has mixed positional and named placeholders โœ”๏ธ
F507 percent-format-positional-count-mismatch %-format string has {wanted} placeholder(s) but {got} substitution(s) โœ”๏ธ
F508 percent-format-star-requires-sequence %-format string * specifier requires sequence โœ”๏ธ
F509 percent-format-unsupported-format-character %-format string has unsupported format character {char} โœ”๏ธ
F521 string-dot-format-invalid-format .format call has invalid format string: {message} โœ”๏ธ
F522 string-dot-format-extra-named-arguments .format call has unused named argument(s): {message} โœ”๏ธ ๐Ÿ› ๏ธ
F523 string-dot-format-extra-positional-arguments .format call has unused arguments at position(s): {message} โœ”๏ธ ๐Ÿ› ๏ธ
F524 string-dot-format-missing-arguments .format call is missing argument(s) for placeholder(s): {message} โœ”๏ธ
F525 string-dot-format-mixing-automatic .format string mixes automatic and manual numbering โœ”๏ธ
F541 f-string-missing-placeholders f-string without any placeholders โœ”๏ธ ๐Ÿ› ๏ธ
F601 multi-value-repeated-key-literal Dictionary key literal {name} repeated โœ”๏ธ ๐Ÿ› ๏ธ
F602 multi-value-repeated-key-variable Dictionary key {name} repeated โœ”๏ธ ๐Ÿ› ๏ธ
F621 expressions-in-star-assignment Too many expressions in star-unpacking assignment โœ”๏ธ
F622 multiple-starred-expressions Two starred expressions in assignment โœ”๏ธ
F631 assert-tuple Assert test is a non-empty tuple, which is always True โœ”๏ธ
F632 is-literal Use == to compare constant literals โœ”๏ธ ๐Ÿ› ๏ธ
F633 invalid-print-syntax Use of >> is invalid with print function โœ”๏ธ
F634 if-tuple If test is a tuple, which is always True โœ”๏ธ
F701 break-outside-loop break outside loop โœ”๏ธ
F702 continue-outside-loop continue not properly in loop โœ”๏ธ
F704 yield-outside-function {keyword} statement outside of a function โœ”๏ธ
F706 return-outside-function return statement outside of a function/method โœ”๏ธ
F707 default-except-not-last An except block as not the last exception handler โœ”๏ธ
F722 forward-annotation-syntax-error Syntax error in forward annotation: {body} โœ”๏ธ
F811 redefined-while-unused Redefinition of unused {name} from {row} โœ”๏ธ ๐Ÿ› ๏ธ
F821 undefined-name Undefined name {name} โœ”๏ธ
F822 undefined-export Undefined name {name} in __all__ โœ”๏ธ
F823 undefined-local Local variable {name} referenced before assignment โœ”๏ธ
F841 unused-variable Local variable {name} is assigned to but never used โœ”๏ธ ๐Ÿ› ๏ธ
F842 unused-annotation Local variable {name} is annotated but never used โœ”๏ธ
F901 raise-not-implemented raise NotImplemented should be raise NotImplementedError โœ”๏ธ ๐Ÿ› ๏ธ

pycodestyle (E, W)#

For more, see pycodestyle on PyPI.

Error (E)#

Code Name Message
E101 mixed-spaces-and-tabs Indentation contains mixed spaces and tabs โœ”๏ธ
E111 indentation-with-invalid-multiple Indentation is not a multiple of {indent_size} ๐Ÿงช
E112 no-indented-block Expected an indented block ๐Ÿงช
E113 unexpected-indentation Unexpected indentation ๐Ÿงช
E114 indentation-with-invalid-multiple-comment Indentation is not a multiple of {indent_size} (comment) ๐Ÿงช
E115 no-indented-block-comment Expected an indented block (comment) ๐Ÿงช
E116 unexpected-indentation-comment Unexpected indentation (comment) ๐Ÿงช
E117 over-indented Over-indented (comment) ๐Ÿงช
E201 whitespace-after-open-bracket Whitespace after '{symbol}' ๐Ÿงช ๐Ÿ› ๏ธ
E202 whitespace-before-close-bracket Whitespace before '{symbol}' ๐Ÿงช ๐Ÿ› ๏ธ
E203 whitespace-before-punctuation Whitespace before '{symbol}' ๐Ÿงช ๐Ÿ› ๏ธ
E211 whitespace-before-parameters Whitespace before '{bracket}' ๐Ÿงช ๐Ÿ› ๏ธ
E221 multiple-spaces-before-operator Multiple spaces before operator ๐Ÿงช ๐Ÿ› ๏ธ
E222 multiple-spaces-after-operator Multiple spaces after operator ๐Ÿงช ๐Ÿ› ๏ธ
E223 tab-before-operator Tab before operator ๐Ÿงช ๐Ÿ› ๏ธ
E224 tab-after-operator Tab after operator ๐Ÿงช ๐Ÿ› ๏ธ
E225 missing-whitespace-around-operator Missing whitespace around operator ๐Ÿงช ๐Ÿ› ๏ธ
E226 missing-whitespace-around-arithmetic-operator Missing whitespace around arithmetic operator ๐Ÿงช ๐Ÿ› ๏ธ
E227 missing-whitespace-around-bitwise-or-shift-operator Missing whitespace around bitwise or shift operator ๐Ÿงช ๐Ÿ› ๏ธ
E228 missing-whitespace-around-modulo-operator Missing whitespace around modulo operator ๐Ÿงช ๐Ÿ› ๏ธ
E231 missing-whitespace Missing whitespace after '{token}' ๐Ÿงช ๐Ÿ› ๏ธ
E241 multiple-spaces-after-comma Multiple spaces after comma ๐Ÿงช ๐Ÿ› ๏ธ
E242 tab-after-comma Tab after comma ๐Ÿงช ๐Ÿ› ๏ธ
E251 unexpected-spaces-around-keyword-parameter-equals Unexpected spaces around keyword / parameter equals ๐Ÿงช ๐Ÿ› ๏ธ
E252 missing-whitespace-around-parameter-equals Missing whitespace around parameter equals ๐Ÿงช ๐Ÿ› ๏ธ
E261 too-few-spaces-before-inline-comment Insert at least two spaces before an inline comment ๐Ÿงช ๐Ÿ› ๏ธ
E262 no-space-after-inline-comment Inline comment should start with # ๐Ÿงช ๐Ÿ› ๏ธ
E265 no-space-after-block-comment Block comment should start with # ๐Ÿงช ๐Ÿ› ๏ธ
E266 multiple-leading-hashes-for-block-comment Too many leading # before block comment ๐Ÿงช ๐Ÿ› ๏ธ
E271 multiple-spaces-after-keyword Multiple spaces after keyword ๐Ÿงช ๐Ÿ› ๏ธ
E272 multiple-spaces-before-keyword Multiple spaces before keyword ๐Ÿงช ๐Ÿ› ๏ธ
E273 tab-after-keyword Tab after keyword ๐Ÿงช ๐Ÿ› ๏ธ
E274 tab-before-keyword Tab before keyword ๐Ÿงช ๐Ÿ› ๏ธ
E275 missing-whitespace-after-keyword Missing whitespace after keyword ๐Ÿงช ๐Ÿ› ๏ธ
E301 blank-line-between-methods Expected {BLANK_LINES_METHOD_LEVEL:?} blank line, found 0 ๐Ÿงช ๐Ÿ› ๏ธ
E302 blank-lines-top-level Expected {BLANK_LINES_TOP_LEVEL:?} blank lines, found {nb_blank_lines} ๐Ÿงช ๐Ÿ› ๏ธ
E303 too-many-blank-lines Too many blank lines ({nb_blank_lines}) ๐Ÿงช ๐Ÿ› ๏ธ
E304 blank-line-after-decorator Blank lines found after function decorator ({lines}) ๐Ÿงช ๐Ÿ› ๏ธ
E305 blank-lines-after-function-or-class Expected 2 blank lines after class or function definition, found ({blank_lines}) ๐Ÿงช ๐Ÿ› ๏ธ
E306 blank-lines-before-nested-definition Expected 1 blank line before a nested definition, found 0 ๐Ÿงช ๐Ÿ› ๏ธ
E401 multiple-imports-on-one-line Multiple imports on one line โœ”๏ธ ๐Ÿ› ๏ธ
E402 module-import-not-at-top-of-file Module level import not at top of cell โœ”๏ธ
E501 line-too-long Line too long ({width} > {limit}) โœ”๏ธ
E701 multiple-statements-on-one-line-colon Multiple statements on one line (colon) โœ”๏ธ
E702 multiple-statements-on-one-line-semicolon Multiple statements on one line (semicolon) โœ”๏ธ
E703 useless-semicolon Statement ends with an unnecessary semicolon โœ”๏ธ ๐Ÿ› ๏ธ
E711 none-comparison Comparison to None should be cond is None โœ”๏ธ ๐Ÿ› ๏ธ
E712 true-false-comparison Comparison to True should be cond is True or if cond: โœ”๏ธ ๐Ÿ› ๏ธ
E713 not-in-test Test for membership should be not in โœ”๏ธ ๐Ÿ› ๏ธ
E714 not-is-test Test for object identity should be is not โœ”๏ธ ๐Ÿ› ๏ธ
E721 type-comparison Do not compare types, use isinstance() โœ”๏ธ
E722 bare-except Do not use bare except โœ”๏ธ
E731 lambda-assignment Do not assign a lambda expression, use a def โœ”๏ธ ๐Ÿ› ๏ธ
E741 ambiguous-variable-name Ambiguous variable name: {name} โœ”๏ธ
E742 ambiguous-class-name Ambiguous class name: {name} โœ”๏ธ
E743 ambiguous-function-name Ambiguous function name: {name} โœ”๏ธ
E902 io-error {message} โœ”๏ธ
E999 syntax-error SyntaxError: {message} โœ”๏ธ

Warning (W)#

Code Name Message
W191 tab-indentation Indentation contains tabs โœ”๏ธ
W291 trailing-whitespace Trailing whitespace โœ”๏ธ ๐Ÿ› ๏ธ
W292 missing-newline-at-end-of-file No newline at end of file โœ”๏ธ ๐Ÿ› ๏ธ
W293 blank-line-with-whitespace Blank line contains whitespace โœ”๏ธ ๐Ÿ› ๏ธ
W505 doc-line-too-long Doc line too long ({width} > {limit}) โœ”๏ธ
W605 invalid-escape-sequence Invalid escape sequence: \{ch} โœ”๏ธ ๐Ÿ› ๏ธ

mccabe (C90)#

For more, see mccabe on PyPI.

Code Name Message
C901 complex-structure {name} is too complex ({complexity} > {max_complexity}) โœ”๏ธ

isort (I)#

For more, see isort on PyPI.

Code Name Message
I001 unsorted-imports Import block is un-sorted or un-formatted โœ”๏ธ ๐Ÿ› ๏ธ
I002 missing-required-import Missing required import: {name} โœ”๏ธ ๐Ÿ› ๏ธ

pep8-naming (N)#

For more, see pep8-naming on PyPI.

Code Name Message
N801 invalid-class-name Class name {name} should use CapWords convention โœ”๏ธ
N802 invalid-function-name Function name {name} should be lowercase โœ”๏ธ
N803 invalid-argument-name Argument name {name} should be lowercase โœ”๏ธ
N804 invalid-first-argument-name-for-class-method First argument of a class method should be named cls โœ”๏ธ
N805 invalid-first-argument-name-for-method First argument of a method should be named self โœ”๏ธ
N806 non-lowercase-variable-in-function Variable {name} in function should be lowercase โœ”๏ธ
N807 dunder-function-name Function name should not start and end with __ โœ”๏ธ
N811 constant-imported-as-non-constant Constant {name} imported as non-constant {asname} โœ”๏ธ
N812 lowercase-imported-as-non-lowercase Lowercase {name} imported as non-lowercase {asname} โœ”๏ธ
N813 camelcase-imported-as-lowercase Camelcase {name} imported as lowercase {asname} โœ”๏ธ
N814 camelcase-imported-as-constant Camelcase {name} imported as constant {asname} โœ”๏ธ
N815 mixed-case-variable-in-class-scope Variable {name} in class scope should not be mixedCase โœ”๏ธ
N816 mixed-case-variable-in-global-scope Variable {name} in global scope should not be mixedCase โœ”๏ธ
N817 camelcase-imported-as-acronym CamelCase {name} imported as acronym {asname} โœ”๏ธ
N818 error-suffix-on-exception-name Exception name {name} should be named with an Error suffix โœ”๏ธ
N999 invalid-module-name Invalid module name: '{name}' โœ”๏ธ

pydocstyle (D)#

For more, see pydocstyle on PyPI.

Code Name Message
D100 undocumented-public-module Missing docstring in public module โœ”๏ธ
D101 undocumented-public-class Missing docstring in public class โœ”๏ธ
D102 undocumented-public-method Missing docstring in public method โœ”๏ธ
D103 undocumented-public-function Missing docstring in public function โœ”๏ธ
D104 undocumented-public-package Missing docstring in public package โœ”๏ธ
D105 undocumented-magic-method Missing docstring in magic method โœ”๏ธ
D106 undocumented-public-nested-class Missing docstring in public nested class โœ”๏ธ
D107 undocumented-public-init Missing docstring in __init__ โœ”๏ธ
D200 fits-on-one-line One-line docstring should fit on one line โœ”๏ธ ๐Ÿ› ๏ธ
D201 no-blank-line-before-function No blank lines allowed before function docstring (found {num_lines}) โœ”๏ธ ๐Ÿ› ๏ธ
D202 no-blank-line-after-function No blank lines allowed after function docstring (found {num_lines}) โœ”๏ธ ๐Ÿ› ๏ธ
D203 one-blank-line-before-class 1 blank line required before class docstring โœ”๏ธ ๐Ÿ› ๏ธ
D204 one-blank-line-after-class 1 blank line required after class docstring โœ”๏ธ ๐Ÿ› ๏ธ
D205 blank-line-after-summary 1 blank line required between summary line and description โœ”๏ธ ๐Ÿ› ๏ธ
D206 indent-with-spaces Docstring should be indented with spaces, not tabs โœ”๏ธ
D207 under-indentation Docstring is under-indented โœ”๏ธ ๐Ÿ› ๏ธ
D208 over-indentation Docstring is over-indented โœ”๏ธ ๐Ÿ› ๏ธ
D209 new-line-after-last-paragraph Multi-line docstring closing quotes should be on a separate line โœ”๏ธ ๐Ÿ› ๏ธ
D210 surrounding-whitespace No whitespaces allowed surrounding docstring text โœ”๏ธ ๐Ÿ› ๏ธ
D211 blank-line-before-class No blank lines allowed before class docstring โœ”๏ธ ๐Ÿ› ๏ธ
D212 multi-line-summary-first-line Multi-line docstring summary should start at the first line โœ”๏ธ ๐Ÿ› ๏ธ
D213 multi-line-summary-second-line Multi-line docstring summary should start at the second line โœ”๏ธ ๐Ÿ› ๏ธ
D214 section-not-over-indented Section is over-indented ("{name}") โœ”๏ธ ๐Ÿ› ๏ธ
D215 section-underline-not-over-indented Section underline is over-indented ("{name}") โœ”๏ธ ๐Ÿ› ๏ธ
D300 triple-single-quotes Use triple double quotes """ โœ”๏ธ ๐Ÿ› ๏ธ
D301 escape-sequence-in-docstring Use r""" if any backslashes in a docstring โœ”๏ธ ๐Ÿ› ๏ธ
D400 ends-in-period First line should end with a period โœ”๏ธ ๐Ÿ› ๏ธ
D401 non-imperative-mood First line of docstring should be in imperative mood: "{first_line}" โœ”๏ธ
D402 no-signature First line should not be the function's signature โœ”๏ธ
D403 first-line-capitalized First word of the first line should be capitalized: {} -> {} โœ”๏ธ ๐Ÿ› ๏ธ
D404 docstring-starts-with-this First word of the docstring should not be "This" โœ”๏ธ
D405 capitalize-section-name Section name should be properly capitalized ("{name}") โœ”๏ธ ๐Ÿ› ๏ธ
D406 new-line-after-section-name Section name should end with a newline ("{name}") โœ”๏ธ ๐Ÿ› ๏ธ
D407 dashed-underline-after-section Missing dashed underline after section ("{name}") โœ”๏ธ ๐Ÿ› ๏ธ
D408 section-underline-after-name Section underline should be in the line following the section's name ("{name}") โœ”๏ธ ๐Ÿ› ๏ธ
D409 section-underline-matches-section-length Section underline should match the length of its name ("{name}") โœ”๏ธ ๐Ÿ› ๏ธ
D410 no-blank-line-after-section Missing blank line after section ("{name}") โœ”๏ธ ๐Ÿ› ๏ธ
D411 no-blank-line-before-section Missing blank line before section ("{name}") โœ”๏ธ ๐Ÿ› ๏ธ
D412 blank-lines-between-header-and-content No blank lines allowed between a section header and its content ("{name}") โœ”๏ธ ๐Ÿ› ๏ธ
D413 blank-line-after-last-section Missing blank line after last section ("{name}") โœ”๏ธ ๐Ÿ› ๏ธ
D414 empty-docstring-section Section has no content ("{name}") โœ”๏ธ
D415 ends-in-punctuation First line should end with a period, question mark, or exclamation point โœ”๏ธ ๐Ÿ› ๏ธ
D416 section-name-ends-in-colon Section name should end with a colon ("{name}") โœ”๏ธ ๐Ÿ› ๏ธ
D417 undocumented-param Missing argument description in the docstring for {definition}: {name} โœ”๏ธ
D418 overload-with-docstring Function decorated with @overload shouldn't contain a docstring โœ”๏ธ
D419 empty-docstring Docstring is empty โœ”๏ธ

pyupgrade (UP)#

For more, see pyupgrade on PyPI.

Code Name Message
UP001 useless-metaclass-type __metaclass__ = type is implied โœ”๏ธ ๐Ÿ› ๏ธ
UP003 type-of-primitive Use {} instead of type(...) โœ”๏ธ ๐Ÿ› ๏ธ
UP004 useless-object-inheritance Class {name} inherits from object โœ”๏ธ ๐Ÿ› ๏ธ
UP005 deprecated-unittest-alias {alias} is deprecated, use {target} โœ”๏ธ ๐Ÿ› ๏ธ
UP006 non-pep585-annotation Use {to} instead of {from} for type annotation โœ”๏ธ ๐Ÿ› ๏ธ
UP007 non-pep604-annotation Use X | Y for type annotations โœ”๏ธ ๐Ÿ› ๏ธ
UP008 super-call-with-parameters Use super() instead of super(__class__, self) โœ”๏ธ ๐Ÿ› ๏ธ
UP009 utf8-encoding-declaration UTF-8 encoding declaration is unnecessary โœ”๏ธ ๐Ÿ› ๏ธ
UP010 unnecessary-future-import Unnecessary __future__ import {import} for target Python version โœ”๏ธ ๐Ÿ› ๏ธ
UP011 lru-cache-without-parameters Unnecessary parentheses to functools.lru_cache โœ”๏ธ ๐Ÿ› ๏ธ
UP012 unnecessary-encode-utf8 Unnecessary call to encode as UTF-8 โœ”๏ธ ๐Ÿ› ๏ธ
UP013 convert-typed-dict-functional-to-class Convert {name} from TypedDict functional to class syntax โœ”๏ธ ๐Ÿ› ๏ธ
UP014 convert-named-tuple-functional-to-class Convert {name} from NamedTuple functional to class syntax โœ”๏ธ ๐Ÿ› ๏ธ
UP015 redundant-open-modes Unnecessary open mode parameters โœ”๏ธ ๐Ÿ› ๏ธ
UP017 datetime-timezone-utc Use datetime.UTC alias โœ”๏ธ ๐Ÿ› ๏ธ
UP018 native-literals Unnecessary {literal_type} call (rewrite as a literal) โœ”๏ธ ๐Ÿ› ๏ธ
UP019 typing-text-str-alias typing.Text is deprecated, use str โœ”๏ธ ๐Ÿ› ๏ธ
UP020 open-alias Use builtin open โœ”๏ธ ๐Ÿ› ๏ธ
UP021 replace-universal-newlines universal_newlines is deprecated, use text โœ”๏ธ ๐Ÿ› ๏ธ
UP022 replace-stdout-stderr Prefer capture_output over sending stdout and stderr to PIPE โœ”๏ธ ๐Ÿ› ๏ธ
UP023 deprecated-c-element-tree cElementTree is deprecated, use ElementTree โœ”๏ธ ๐Ÿ› ๏ธ
UP024 os-error-alias Replace aliased errors with OSError โœ”๏ธ ๐Ÿ› ๏ธ
UP025 unicode-kind-prefix Remove unicode literals from strings โœ”๏ธ ๐Ÿ› ๏ธ
UP026 deprecated-mock-import mock is deprecated, use unittest.mock โœ”๏ธ ๐Ÿ› ๏ธ
UP027 unpacked-list-comprehension Replace unpacked list comprehension with a generator expression โœ”๏ธ ๐Ÿ› ๏ธ
UP028 yield-in-for-loop Replace yield over for loop with yield from โœ”๏ธ ๐Ÿ› ๏ธ
UP029 unnecessary-builtin-import Unnecessary builtin import: {import} โœ”๏ธ ๐Ÿ› ๏ธ
UP030 format-literals Use implicit references for positional format fields โœ”๏ธ ๐Ÿ› ๏ธ
UP031 printf-string-formatting Use format specifiers instead of percent format โœ”๏ธ ๐Ÿ› ๏ธ
UP032 f-string Use f-string instead of format call โœ”๏ธ ๐Ÿ› ๏ธ
UP033 lru-cache-with-maxsize-none Use @functools.cache instead of @functools.lru_cache(maxsize=None) โœ”๏ธ ๐Ÿ› ๏ธ
UP034 extraneous-parentheses Avoid extraneous parentheses โœ”๏ธ ๐Ÿ› ๏ธ
UP035 deprecated-import Import from {target} instead: {names} โœ”๏ธ ๐Ÿ› ๏ธ
UP036 outdated-version-block Version block is outdated for minimum Python version โœ”๏ธ ๐Ÿ› ๏ธ
UP037 quoted-annotation Remove quotes from type annotation โœ”๏ธ ๐Ÿ› ๏ธ
UP038 non-pep604-isinstance Use X | Y in {} call instead of (X, Y) โœ”๏ธ ๐Ÿ› ๏ธ
UP039 unnecessary-class-parentheses Unnecessary parentheses after class definition โœ”๏ธ ๐Ÿ› ๏ธ
UP040 non-pep695-type-alias Type alias {name} uses TypeAlias annotation instead of the type keyword โœ”๏ธ ๐Ÿ› ๏ธ
UP041 timeout-error-alias Replace aliased errors with TimeoutError โœ”๏ธ ๐Ÿ› ๏ธ

flake8-2020 (YTT)#

For more, see flake8-2020 on PyPI.

Code Name Message
YTT101 sys-version-slice3 sys.version[:3] referenced (python3.10), use sys.version_info โœ”๏ธ
YTT102 sys-version2 sys.version[2] referenced (python3.10), use sys.version_info โœ”๏ธ
YTT103 sys-version-cmp-str3 sys.version compared to string (python3.10), use sys.version_info โœ”๏ธ
YTT201 sys-version-info0-eq3 sys.version_info[0] == 3 referenced (python4), use >= โœ”๏ธ
YTT202 six-py3 six.PY3 referenced (python4), use not six.PY2 โœ”๏ธ
YTT203 sys-version-info1-cmp-int sys.version_info[1] compared to integer (python4), compare sys.version_info to tuple โœ”๏ธ
YTT204 sys-version-info-minor-cmp-int sys.version_info.minor compared to integer (python4), compare sys.version_info to tuple โœ”๏ธ
YTT301 sys-version0 sys.version[0] referenced (python10), use sys.version_info โœ”๏ธ
YTT302 sys-version-cmp-str10 sys.version compared to string (python10), use sys.version_info โœ”๏ธ
YTT303 sys-version-slice1 sys.version[:1] referenced (python10), use sys.version_info โœ”๏ธ

flake8-annotations (ANN)#

For more, see flake8-annotations on PyPI.

Code Name Message
ANN001 missing-type-function-argument Missing type annotation for function argument {name} โœ”๏ธ
ANN002 missing-type-args Missing type annotation for *{name} โœ”๏ธ
ANN003 missing-type-kwargs Missing type annotation for **{name} โœ”๏ธ
ANN101 missing-type-self Missing type annotation for {name} in method โš ๏ธ
ANN102 missing-type-cls Missing type annotation for {name} in classmethod โš ๏ธ
ANN201 missing-return-type-undocumented-public-function Missing return type annotation for public function {name} โœ”๏ธ ๐Ÿ› ๏ธ
ANN202 missing-return-type-private-function Missing return type annotation for private function {name} โœ”๏ธ ๐Ÿ› ๏ธ
ANN204 missing-return-type-special-method Missing return type annotation for special method {name} โœ”๏ธ ๐Ÿ› ๏ธ
ANN205 missing-return-type-static-method Missing return type annotation for staticmethod {name} โœ”๏ธ ๐Ÿ› ๏ธ
ANN206 missing-return-type-class-method Missing return type annotation for classmethod {name} โœ”๏ธ ๐Ÿ› ๏ธ
ANN401 any-type Dynamically typed expressions (typing.Any) are disallowed in {name} โœ”๏ธ

flake8-async (ASYNC)#

For more, see flake8-async on PyPI.

Code Name Message
ASYNC100 blocking-http-call-in-async-function Async functions should not call blocking HTTP methods โœ”๏ธ
ASYNC101 open-sleep-or-subprocess-in-async-function Async functions should not call open, time.sleep, or subprocess methods โœ”๏ธ
ASYNC102 blocking-os-call-in-async-function Async functions should not call synchronous os methods โœ”๏ธ

flake8-trio (TRIO)#

For more, see flake8-trio on PyPI.

Code Name Message
TRIO100 trio-timeout-without-await A with {method_name}(...): context does not contain any await statements. This makes it pointless, as the timeout can only be triggered by a checkpoint. โœ”๏ธ
TRIO105 trio-sync-call Call to {method_name} is not immediately awaited โœ”๏ธ ๐Ÿ› ๏ธ
TRIO109 trio-async-function-with-timeout Prefer trio.fail_after and trio.move_on_after over manual async timeout behavior โœ”๏ธ
TRIO110 trio-unneeded-sleep Use trio.Event instead of awaiting trio.sleep in a while loop โœ”๏ธ
TRIO115 trio-zero-sleep-call Use trio.lowlevel.checkpoint() instead of trio.sleep(0) โœ”๏ธ ๐Ÿ› ๏ธ

flake8-bandit (S)#

For more, see flake8-bandit on PyPI.

Code Name Message
S101 assert Use of assert detected โœ”๏ธ
S102 exec-builtin Use of exec detected โœ”๏ธ
S103 bad-file-permissions os.chmod setting a permissive mask {mask:#o} on file or directory โœ”๏ธ
S104 hardcoded-bind-all-interfaces Possible binding to all interfaces โœ”๏ธ
S105 hardcoded-password-string Possible hardcoded password assigned to: "{}" โœ”๏ธ
S106 hardcoded-password-func-arg Possible hardcoded password assigned to argument: "{}" โœ”๏ธ
S107 hardcoded-password-default Possible hardcoded password assigned to function default: "{}" โœ”๏ธ
S108 hardcoded-temp-file Probable insecure usage of temporary file or directory: "{}" โœ”๏ธ
S110 try-except-pass try-except-pass detected, consider logging the exception โœ”๏ธ
S112 try-except-continue try-except-continue detected, consider logging the exception โœ”๏ธ
S113 request-without-timeout Probable use of requests call without timeout โœ”๏ธ
S201 flask-debug-true Use of debug=True in Flask app detected โœ”๏ธ
S202 tarfile-unsafe-members Uses of tarfile.extractall() โœ”๏ธ
S301 suspicious-pickle-usage pickle and modules that wrap it can be unsafe when used to deserialize untrusted data, possible security issue โœ”๏ธ
S302 suspicious-marshal-usage Deserialization with the marshal module is possibly dangerous โœ”๏ธ
S303 suspicious-insecure-hash-usage Use of insecure MD2, MD4, MD5, or SHA1 hash function โœ”๏ธ
S304 suspicious-insecure-cipher-usage Use of insecure cipher, replace with a known secure cipher such as AES โœ”๏ธ
S305 suspicious-insecure-cipher-mode-usage Use of insecure cipher mode, replace with a known secure cipher such as AES โœ”๏ธ
S306 suspicious-mktemp-usage Use of insecure and deprecated function (mktemp) โœ”๏ธ
S307 suspicious-eval-usage Use of possibly insecure function; consider using ast.literal_eval โœ”๏ธ
S308 suspicious-mark-safe-usage Use of mark_safe may expose cross-site scripting vulnerabilities โœ”๏ธ
S310 suspicious-url-open-usage Audit URL open for permitted schemes. Allowing use of file: or custom schemes is often unexpected. โœ”๏ธ
S311 suspicious-non-cryptographic-random-usage Standard pseudo-random generators are not suitable for cryptographic purposes โœ”๏ธ
S312 suspicious-telnet-usage Telnet-related functions are being called. Telnet is considered insecure. Use SSH or some other encrypted protocol. โœ”๏ธ
S313 suspicious-xmlc-element-tree-usage Using xml to parse untrusted data is known to be vulnerable to XML attacks; use defusedxml equivalents โœ”๏ธ
S314 suspicious-xml-element-tree-usage Using xml to parse untrusted data is known to be vulnerable to XML attacks; use defusedxml equivalents โœ”๏ธ
S315 suspicious-xml-expat-reader-usage Using xml to parse untrusted data is known to be vulnerable to XML attacks; use defusedxml equivalents โœ”๏ธ
S316 suspicious-xml-expat-builder-usage Using xml to parse untrusted data is known to be vulnerable to XML attacks; use defusedxml equivalents โœ”๏ธ
S317 suspicious-xml-sax-usage Using xml to parse untrusted data is known to be vulnerable to XML attacks; use defusedxml equivalents โœ”๏ธ
S318 suspicious-xml-mini-dom-usage Using xml to parse untrusted data is known to be vulnerable to XML attacks; use defusedxml equivalents โœ”๏ธ
S319 suspicious-xml-pull-dom-usage Using xml to parse untrusted data is known to be vulnerable to XML attacks; use defusedxml equivalents โœ”๏ธ
S320 suspicious-xmle-tree-usage Using lxml to parse untrusted data is known to be vulnerable to XML attacks โœ”๏ธ
S321 suspicious-ftp-lib-usage FTP-related functions are being called. FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol. โœ”๏ธ
S323 suspicious-unverified-context-usage Python allows using an insecure context via the _create_unverified_context that reverts to the previous behavior that does not validate certificates or perform hostname checks. โœ”๏ธ
S324 hashlib-insecure-hash-function Probable use of insecure hash functions in hashlib: {string} โœ”๏ธ
S401 suspicious-telnetlib-import telnetlib and related modules are considered insecure. Use SSH or another encrypted protocol. ๐Ÿงช
S402 suspicious-ftplib-import ftplib and related modules are considered insecure. Use SSH, SFTP, SCP, or another encrypted protocol. ๐Ÿงช
S403 suspicious-pickle-import pickle, cPickle, dill, and shelve modules are possibly insecure ๐Ÿงช
S404 suspicious-subprocess-import subprocess module is possibly insecure ๐Ÿงช
S405 suspicious-xml-etree-import xml.etree methods are vulnerable to XML attacks ๐Ÿงช
S406 suspicious-xml-sax-import xml.sax methods are vulnerable to XML attacks ๐Ÿงช
S407 suspicious-xml-expat-import xml.dom.expatbuilder is vulnerable to XML attacks ๐Ÿงช
S408 suspicious-xml-minidom-import xml.dom.minidom is vulnerable to XML attacks ๐Ÿงช
S409 suspicious-xml-pulldom-import xml.dom.pulldom is vulnerable to XML attacks ๐Ÿงช
S410 suspicious-lxml-import lxml is vulnerable to XML attacks ๐Ÿงช
S411 suspicious-xmlrpc-import XMLRPC is vulnerable to remote XML attacks ๐Ÿงช
S412 suspicious-httpoxy-import httpoxy is a set of vulnerabilities that affect application code running inCGI, or CGI-like environments. The use of CGI for web applications should be avoided ๐Ÿงช
S413 suspicious-pycrypto-import pycrypto library is known to have publicly disclosed buffer overflow vulnerability ๐Ÿงช
S415 suspicious-pyghmi-import An IPMI-related module is being imported. Prefer an encrypted protocol over IPMI. ๐Ÿงช
S501 request-with-no-cert-validation Probable use of {string} call with verify=False disabling SSL certificate checks โœ”๏ธ
S502 ssl-insecure-version Call made with insecure SSL protocol: {protocol} โœ”๏ธ
S503 ssl-with-bad-defaults Argument default set to insecure SSL protocol: {protocol} โœ”๏ธ
S504 ssl-with-no-version ssl.wrap_socket called without an `ssl_version`` โœ”๏ธ
S505 weak-cryptographic-key {cryptographic_key} key sizes below {minimum_key_size} bits are considered breakable โœ”๏ธ
S506 unsafe-yaml-load Probable use of unsafe loader {name} with yaml.load. Allows instantiation of arbitrary objects. Consider yaml.safe_load. โœ”๏ธ
S507 ssh-no-host-key-verification Paramiko call with policy set to automatically trust the unknown host key โœ”๏ธ
S508 snmp-insecure-version The use of SNMPv1 and SNMPv2 is insecure. Use SNMPv3 if able. โœ”๏ธ
S509 snmp-weak-cryptography You should not use SNMPv3 without encryption. noAuthNoPriv & authNoPriv is insecure. โœ”๏ธ
S601 paramiko-call Possible shell injection via Paramiko call; check inputs are properly sanitized โœ”๏ธ
S602 subprocess-popen-with-shell-equals-true subprocess call with shell=True seems safe, but may be changed in the future; consider rewriting without shell โœ”๏ธ
S603 subprocess-without-shell-equals-true subprocess call: check for execution of untrusted input โœ”๏ธ
S604 call-with-shell-equals-true Function call with shell=True parameter identified, security issue โœ”๏ธ
S605 start-process-with-a-shell Starting a process with a shell: seems safe, but may be changed in the future; consider rewriting without shell โœ”๏ธ
S606 start-process-with-no-shell Starting a process without a shell โœ”๏ธ
S607 start-process-with-partial-path Starting a process with a partial executable path โœ”๏ธ
S608 hardcoded-sql-expression Possible SQL injection vector through string-based query construction โœ”๏ธ
S609 unix-command-wildcard-injection Possible wildcard injection in call due to * usage โœ”๏ธ
S611 django-raw-sql Use of RawSQL can lead to SQL injection vulnerabilities โœ”๏ธ
S612 logging-config-insecure-listen Use of insecure logging.config.listen detected โœ”๏ธ
S701 jinja2-autoescape-false Using jinja2 templates with autoescape=False is dangerous and can lead to XSS. Ensure autoescape=True or use the select_autoescape function. โœ”๏ธ
S702 mako-templates Mako templates allow HTML and JavaScript rendering by default and are inherently open to XSS attacks โœ”๏ธ

flake8-blind-except (BLE)#

For more, see flake8-blind-except on PyPI.

Code Name Message
BLE001 blind-except Do not catch blind exception: {name} โœ”๏ธ

flake8-boolean-trap (FBT)#

For more, see flake8-boolean-trap on PyPI.

Code Name Message
FBT001 boolean-type-hint-positional-argument Boolean-typed positional argument in function definition โœ”๏ธ
FBT002 boolean-default-value-positional-argument Boolean default positional argument in function definition โœ”๏ธ
FBT003 boolean-positional-value-in-call Boolean positional value in function call โœ”๏ธ

flake8-bugbear (B)#

For more, see flake8-bugbear on PyPI.

Code Name Message
B002 unary-prefix-increment-decrement Python does not support the unary prefix increment operator (++) โœ”๏ธ
B003 assignment-to-os-environ Assigning to os.environ doesn't clear the environment โœ”๏ธ
B004 unreliable-callable-check Using hasattr(x, "__call__") to test if x is callable is unreliable. Use callable(x) for consistent results. โœ”๏ธ ๐Ÿ› ๏ธ
B005 strip-with-multi-characters Using .strip() with multi-character strings is misleading โœ”๏ธ
B006 mutable-argument-default Do not use mutable data structures for argument defaults โœ”๏ธ ๐Ÿ› ๏ธ
B007 unused-loop-control-variable Loop control variable {name} not used within loop body โœ”๏ธ ๐Ÿ› ๏ธ
B008 function-call-in-default-argument Do not perform function call {name} in argument defaults; instead, perform the call within the function, or read the default from a module-level singleton variable โœ”๏ธ
B009 get-attr-with-constant Do not call getattr with a constant attribute value. It is not any safer than normal property access. โœ”๏ธ ๐Ÿ› ๏ธ
B010 set-attr-with-constant Do not call setattr with a constant attribute value. It is not any safer than normal property access. โœ”๏ธ ๐Ÿ› ๏ธ
B011 assert-false Do not assert False (python -O removes these calls), raise AssertionError() โœ”๏ธ ๐Ÿ› ๏ธ
B012 jump-statement-in-finally {name} inside finally blocks cause exceptions to be silenced โœ”๏ธ
B013 redundant-tuple-in-exception-handler A length-one tuple literal is redundant in exception handlers โœ”๏ธ ๐Ÿ› ๏ธ
B014 duplicate-handler-exception Exception handler with duplicate exception: {name} โœ”๏ธ ๐Ÿ› ๏ธ
B015 useless-comparison Pointless comparison. Did you mean to assign a value? Otherwise, prepend assert or remove it. โœ”๏ธ
B016 raise-literal Cannot raise a literal. Did you intend to return it or raise an Exception? โœ”๏ธ
B017 assert-raises-exception {assertion}({exception}) should be considered evil โœ”๏ธ
B018 useless-expression Found useless expression. Either assign it to a variable or remove it. โœ”๏ธ
B019 cached-instance-method Use of functools.lru_cache or functools.cache on methods can lead to memory leaks โœ”๏ธ
B020 loop-variable-overrides-iterator Loop control variable {name} overrides iterable it iterates โœ”๏ธ
B021 f-string-docstring f-string used as docstring. Python will interpret this as a joined string, rather than a docstring. โœ”๏ธ
B022 useless-contextlib-suppress No arguments passed to contextlib.suppress. No exceptions will be suppressed and therefore this context manager is redundant โœ”๏ธ
B023 function-uses-loop-variable Function definition does not bind loop variable {name} โœ”๏ธ
B024 abstract-base-class-without-abstract-method {name} is an abstract base class, but it has no abstract methods โœ”๏ธ
B025 duplicate-try-block-exception try-except block with duplicate exception {name} โœ”๏ธ
B026 star-arg-unpacking-after-keyword-arg Star-arg unpacking after a keyword argument is strongly discouraged โœ”๏ธ
B027 empty-method-without-abstract-decorator {name} is an empty method in an abstract base class, but has no abstract decorator โœ”๏ธ
B028 no-explicit-stacklevel No explicit stacklevel keyword argument found โœ”๏ธ
B029 except-with-empty-tuple Using except (): with an empty tuple does not catch anything; add exceptions to handle โœ”๏ธ
B030 except-with-non-exception-classes except handlers should only be exception classes or tuples of exception classes โœ”๏ธ
B031 reuse-of-groupby-generator Using the generator returned from itertools.groupby() more than once will do nothing on the second usage โœ”๏ธ
B032 unintentional-type-annotation Possible unintentional type annotation (using :). Did you mean to assign (using =)? โœ”๏ธ
B033 duplicate-value Sets should not contain duplicate item {value} โœ”๏ธ ๐Ÿ› ๏ธ
B034 re-sub-positional-args {method} should pass {param_name} and flags as keyword arguments to avoid confusion due to unintuitive argument positions โœ”๏ธ
B035 static-key-dict-comprehension Dictionary comprehension uses static key: {key} โœ”๏ธ
B904 raise-without-from-inside-except Within an except clause, raise exceptions with raise ... from err or raise ... from None to distinguish them from errors in exception handling โœ”๏ธ
B905 zip-without-explicit-strict zip() without an explicit strict= parameter โœ”๏ธ ๐Ÿ› ๏ธ

flake8-builtins (A)#

For more, see flake8-builtins on PyPI.

Code Name Message
A001 builtin-variable-shadowing Variable {name} is shadowing a Python builtin โœ”๏ธ
A002 builtin-argument-shadowing Argument {name} is shadowing a Python builtin โœ”๏ธ
A003 builtin-attribute-shadowing Python builtin is shadowed by class attribute {name} from {row} โœ”๏ธ

flake8-commas (COM)#

For more, see flake8-commas on PyPI.

Code Name Message
COM812 missing-trailing-comma Trailing comma missing โœ”๏ธ ๐Ÿ› ๏ธ
COM818 trailing-comma-on-bare-tuple Trailing comma on bare tuple prohibited โœ”๏ธ
COM819 prohibited-trailing-comma Trailing comma prohibited โœ”๏ธ ๐Ÿ› ๏ธ

For more, see flake8-copyright on PyPI.

Code Name Message
CPY001 missing-copyright-notice Missing copyright notice at top of file ๐Ÿงช

flake8-comprehensions (C4)#

For more, see flake8-comprehensions on PyPI.

Code Name Message
C400 unnecessary-generator-list Unnecessary generator (rewrite as a list comprehension) โœ”๏ธ ๐Ÿ› ๏ธ
C401 unnecessary-generator-set Unnecessary generator (rewrite as a set comprehension) โœ”๏ธ ๐Ÿ› ๏ธ
C402 unnecessary-generator-dict Unnecessary generator (rewrite as a dict comprehension) โœ”๏ธ ๐Ÿ› ๏ธ
C403 unnecessary-list-comprehension-set Unnecessary list comprehension (rewrite as a set comprehension) โœ”๏ธ ๐Ÿ› ๏ธ
C404 unnecessary-list-comprehension-dict Unnecessary list comprehension (rewrite as a dict comprehension) โœ”๏ธ ๐Ÿ› ๏ธ
C405 unnecessary-literal-set Unnecessary {obj_type} literal (rewrite as a set literal) โœ”๏ธ ๐Ÿ› ๏ธ
C406 unnecessary-literal-dict Unnecessary {obj_type} literal (rewrite as a dict literal) โœ”๏ธ ๐Ÿ› ๏ธ
C408 unnecessary-collection-call Unnecessary {obj_type} call (rewrite as a literal) โœ”๏ธ ๐Ÿ› ๏ธ
C409 unnecessary-literal-within-tuple-call Unnecessary {literal} literal passed to tuple() (rewrite as a tuple literal) โœ”๏ธ ๐Ÿ› ๏ธ
C410 unnecessary-literal-within-list-call Unnecessary {literal} literal passed to list() (remove the outer call to list()) โœ”๏ธ ๐Ÿ› ๏ธ
C411 unnecessary-list-call Unnecessary list call (remove the outer call to list()) โœ”๏ธ ๐Ÿ› ๏ธ
C413 unnecessary-call-around-sorted Unnecessary {func} call around sorted() โœ”๏ธ ๐Ÿ› ๏ธ
C414 unnecessary-double-cast-or-process Unnecessary {inner} call within {outer}() โœ”๏ธ ๐Ÿ› ๏ธ
C415 unnecessary-subscript-reversal Unnecessary subscript reversal of iterable within {func}() โœ”๏ธ
C416 unnecessary-comprehension Unnecessary {obj_type} comprehension (rewrite using {obj_type}()) โœ”๏ธ ๐Ÿ› ๏ธ
C417 unnecessary-map Unnecessary map usage (rewrite using a {object_type}) โœ”๏ธ ๐Ÿ› ๏ธ
C418 unnecessary-literal-within-dict-call Unnecessary dict {kind} passed to dict() (remove the outer call to dict()) โœ”๏ธ ๐Ÿ› ๏ธ
C419 unnecessary-comprehension-any-all Unnecessary list comprehension โœ”๏ธ ๐Ÿ› ๏ธ

flake8-datetimez (DTZ)#

For more, see flake8-datetimez on PyPI.

Code Name Message
DTZ001 call-datetime-without-tzinfo The use of datetime.datetime() without tzinfo argument is not allowed โœ”๏ธ
DTZ002 call-datetime-today The use of datetime.datetime.today() is not allowed, use datetime.datetime.now(tz=) instead โœ”๏ธ
DTZ003 call-datetime-utcnow The use of datetime.datetime.utcnow() is not allowed, use datetime.datetime.now(tz=) instead โœ”๏ธ
DTZ004 call-datetime-utcfromtimestamp The use of datetime.datetime.utcfromtimestamp() is not allowed, use datetime.datetime.fromtimestamp(ts, tz=) instead โœ”๏ธ
DTZ005 call-datetime-now-without-tzinfo The use of datetime.datetime.now() without tz argument is not allowed โœ”๏ธ
DTZ006 call-datetime-fromtimestamp The use of datetime.datetime.fromtimestamp() without tz argument is not allowed โœ”๏ธ
DTZ007 call-datetime-strptime-without-zone The use of datetime.datetime.strptime() without %z must be followed by .replace(tzinfo=) or .astimezone() โœ”๏ธ
DTZ011 call-date-today The use of datetime.date.today() is not allowed, use datetime.datetime.now(tz=).date() instead โœ”๏ธ
DTZ012 call-date-fromtimestamp The use of datetime.date.fromtimestamp() is not allowed, use datetime.datetime.fromtimestamp(ts, tz=).date() instead โœ”๏ธ

flake8-debugger (T10)#

For more, see flake8-debugger on PyPI.

Code Name Message
T100 debugger Trace found: {name} used โœ”๏ธ

flake8-django (DJ)#

For more, see flake8-django on PyPI.

Code Name Message
DJ001 django-nullable-model-string-field Avoid using null=True on string-based fields such as {field_name} โœ”๏ธ
DJ003 django-locals-in-render-function Avoid passing locals() as context to a render function โœ”๏ธ
DJ006 django-exclude-with-model-form Do not use exclude with ModelForm, use fields instead โœ”๏ธ
DJ007 django-all-with-model-form Do not use __all__ with ModelForm, use fields instead โœ”๏ธ
DJ008 django-model-without-dunder-str Model does not define __str__ method โœ”๏ธ
DJ012 django-unordered-body-content-in-model Order of model's inner classes, methods, and fields does not follow the Django Style Guide: {element_type} should come before {prev_element_type} โœ”๏ธ
DJ013 django-non-leading-receiver-decorator @receiver decorator must be on top of all the other decorators โœ”๏ธ

flake8-errmsg (EM)#

For more, see flake8-errmsg on PyPI.

Code Name Message
EM101 raw-string-in-exception Exception must not use a string literal, assign to variable first โœ”๏ธ ๐Ÿ› ๏ธ
EM102 f-string-in-exception Exception must not use an f-string literal, assign to variable first โœ”๏ธ ๐Ÿ› ๏ธ
EM103 dot-format-in-exception Exception must not use a .format() string directly, assign to variable first โœ”๏ธ ๐Ÿ› ๏ธ

flake8-executable (EXE)#

For more, see flake8-executable on PyPI.

Code Name Message
EXE001 shebang-not-executable Shebang is present but file is not executable โœ”๏ธ
EXE002 shebang-missing-executable-file The file is executable but no shebang is present โœ”๏ธ
EXE003 shebang-missing-python Shebang should contain python โœ”๏ธ
EXE004 shebang-leading-whitespace Avoid whitespace before shebang โœ”๏ธ ๐Ÿ› ๏ธ
EXE005 shebang-not-first-line Shebang should be at the beginning of the file โœ”๏ธ

flake8-future-annotations (FA)#

For more, see flake8-future-annotations on PyPI.

Code Name Message
FA100 future-rewritable-type-annotation Missing from __future__ import annotations, but uses {name} โœ”๏ธ
FA102 future-required-type-annotation Missing from __future__ import annotations, but uses {reason} โœ”๏ธ ๐Ÿ› ๏ธ

flake8-implicit-str-concat (ISC)#

For more, see flake8-implicit-str-concat on PyPI.

Code Name Message
ISC001 single-line-implicit-string-concatenation Implicitly concatenated string literals on one line โœ”๏ธ ๐Ÿ› ๏ธ
ISC002 multi-line-implicit-string-concatenation Implicitly concatenated string literals over multiple lines โœ”๏ธ
ISC003 explicit-string-concatenation Explicitly concatenated string should be implicitly concatenated โœ”๏ธ

flake8-import-conventions (ICN)#

For more, see flake8-import-conventions on GitHub.

Code Name Message
ICN001 unconventional-import-alias {name} should be imported as {asname} โœ”๏ธ ๐Ÿ› ๏ธ
ICN002 banned-import-alias {name} should not be imported as {asname} โœ”๏ธ
ICN003 banned-import-from Members of {name} should not be imported explicitly โœ”๏ธ

flake8-logging-format (G)#

For more, see flake8-logging-format on PyPI.

Code Name Message
G001 logging-string-format Logging statement uses str.format โœ”๏ธ
G002 logging-percent-format Logging statement uses % โœ”๏ธ
G003 logging-string-concat Logging statement uses + โœ”๏ธ
G004 logging-f-string Logging statement uses f-string โœ”๏ธ
G010 logging-warn Logging statement uses warn instead of warning โœ”๏ธ ๐Ÿ› ๏ธ
G101 logging-extra-attr-clash Logging statement uses an extra field that clashes with a LogRecord field: {key} โœ”๏ธ
G201 logging-exc-info Logging .exception(...) should be used instead of .error(..., exc_info=True) โœ”๏ธ
G202 logging-redundant-exc-info Logging statement has redundant exc_info โœ”๏ธ

flake8-no-pep420 (INP)#

For more, see flake8-no-pep420 on PyPI.

Code Name Message
INP001 implicit-namespace-package File {filename} is part of an implicit namespace package. Add an __init__.py. โœ”๏ธ

flake8-pie (PIE)#

For more, see flake8-pie on PyPI.

Code Name Message
PIE790 unnecessary-placeholder Unnecessary pass statement โœ”๏ธ ๐Ÿ› ๏ธ
PIE794 duplicate-class-field-definition Class field {name} is defined multiple times โœ”๏ธ ๐Ÿ› ๏ธ
PIE796 non-unique-enums Enum contains duplicate value: {value} โœ”๏ธ
PIE800 unnecessary-spread Unnecessary spread ** โœ”๏ธ ๐Ÿ› ๏ธ
PIE804 unnecessary-dict-kwargs Unnecessary dict kwargs โœ”๏ธ ๐Ÿ› ๏ธ
PIE807 reimplemented-container-builtin Prefer {container} over useless lambda โœ”๏ธ ๐Ÿ› ๏ธ
PIE808 unnecessary-range-start Unnecessary start argument in range โœ”๏ธ ๐Ÿ› ๏ธ
PIE810 multiple-starts-ends-with Call {attr} once with a tuple โœ”๏ธ ๐Ÿ› ๏ธ

flake8-print (T20)#

For more, see flake8-print on PyPI.

Code Name Message
T201 print print found โœ”๏ธ ๐Ÿ› ๏ธ
T203 p-print pprint found โœ”๏ธ ๐Ÿ› ๏ธ

flake8-pyi (PYI)#

For more, see flake8-pyi on PyPI.

Code Name Message
PYI001 unprefixed-type-param Name of private {kind} must start with _ โœ”๏ธ
PYI002 complex-if-statement-in-stub if test must be a simple comparison against sys.platform or sys.version_info โœ”๏ธ
PYI003 unrecognized-version-info-check Unrecognized sys.version_info check โœ”๏ธ
PYI004 patch-version-comparison Version comparison must use only major and minor version โœ”๏ธ
PYI005 wrong-tuple-length-version-comparison Version comparison must be against a length-{expected_length} tuple โœ”๏ธ
PYI006 bad-version-info-comparison Use < or >= for sys.version_info comparisons โœ”๏ธ
PYI007 unrecognized-platform-check Unrecognized sys.platform check โœ”๏ธ
PYI008 unrecognized-platform-name Unrecognized platform {platform} โœ”๏ธ
PYI009 pass-statement-stub-body Empty body should contain ..., not pass โœ”๏ธ ๐Ÿ› ๏ธ
PYI010 non-empty-stub-body Function body must contain only ... โœ”๏ธ ๐Ÿ› ๏ธ
PYI011 typed-argument-default-in-stub Only simple default values allowed for typed arguments โœ”๏ธ ๐Ÿ› ๏ธ
PYI012 pass-in-class-body Class body must not contain pass โœ”๏ธ ๐Ÿ› ๏ธ
PYI013 ellipsis-in-non-empty-class-body Non-empty class body must not contain ... โœ”๏ธ ๐Ÿ› ๏ธ
PYI014 argument-default-in-stub Only simple default values allowed for arguments โœ”๏ธ ๐Ÿ› ๏ธ
PYI015 assignment-default-in-stub Only simple default values allowed for assignments โœ”๏ธ ๐Ÿ› ๏ธ
PYI016 duplicate-union-member Duplicate union member {} โœ”๏ธ ๐Ÿ› ๏ธ
PYI017 complex-assignment-in-stub Stubs should not contain assignments to attributes or multiple targets โœ”๏ธ
PYI018 unused-private-type-var Private {type_var_like_kind} {type_var_like_name} is never used โœ”๏ธ
PYI019 custom-type-var-return-type Methods like {method_name} should return typing.Self instead of a custom TypeVar โœ”๏ธ
PYI020 quoted-annotation-in-stub Quoted annotations should not be included in stubs โœ”๏ธ ๐Ÿ› ๏ธ
PYI021 docstring-in-stub Docstrings should not be included in stubs โœ”๏ธ
PYI024 collections-named-tuple Use typing.NamedTuple instead of collections.namedtuple โœ”๏ธ
PYI025 unaliased-collections-abc-set-import Use from collections.abc import Set as AbstractSet to avoid confusion with the set builtin โœ”๏ธ ๐Ÿ› ๏ธ
PYI026 type-alias-without-annotation Use {module}.TypeAlias for type alias, e.g., {name}: TypeAlias = {value} โœ”๏ธ ๐Ÿ› ๏ธ
PYI029 str-or-repr-defined-in-stub Defining {name} in a stub is almost always redundant โœ”๏ธ ๐Ÿ› ๏ธ
PYI030 unnecessary-literal-union Multiple literal members in a union. Use a single literal, e.g. Literal[{}] โœ”๏ธ ๐Ÿ› ๏ธ
PYI032 any-eq-ne-annotation Prefer object to Any for the second parameter to {method_name} โœ”๏ธ ๐Ÿ› ๏ธ
PYI033 type-comment-in-stub Don't use type comments in stub file โœ”๏ธ
PYI034 non-self-return-type __new__ methods usually return self at runtime โœ”๏ธ
PYI035 unassigned-special-variable-in-stub {name} in a stub file must have a value, as it has the same semantics as {name} at runtime โœ”๏ธ
PYI036 bad-exit-annotation Star-args in {method_name} should be annotated with object โœ”๏ธ ๐Ÿ› ๏ธ
PYI041 redundant-numeric-union Use {supertype} instead of {subtype} | {supertype} โœ”๏ธ
PYI042 snake-case-type-alias Type alias {name} should be CamelCase โœ”๏ธ
PYI043 t-suffixed-type-alias Private type alias {name} should not be suffixed with T (the T suffix implies that an object is a TypeVar) โœ”๏ธ
PYI044 future-annotations-in-stub from __future__ import annotations has no effect in stub files, since type checkers automatically treat stubs as having those semantics โœ”๏ธ
PYI045 iter-method-return-iterable __aiter__ methods should return an AsyncIterator, not an AsyncIterable โœ”๏ธ
PYI046 unused-private-protocol Private protocol {name} is never used โœ”๏ธ
PYI047 unused-private-type-alias Private TypeAlias {name} is never used โœ”๏ธ
PYI048 stub-body-multiple-statements Function body must contain exactly one statement โœ”๏ธ
PYI049 unused-private-typed-dict Private TypedDict {name} is never used โœ”๏ธ
PYI050 no-return-argument-annotation-in-stub Prefer {module}.Never over NoReturn for argument annotations โœ”๏ธ
PYI051 redundant-literal-union Literal[{literal}] is redundant in a union with {builtin_type} โœ”๏ธ
PYI052 unannotated-assignment-in-stub Need type annotation for {name} โœ”๏ธ
PYI053 string-or-bytes-too-long String and bytes literals longer than 50 characters are not permitted โœ”๏ธ ๐Ÿ› ๏ธ
PYI054 numeric-literal-too-long Numeric literals with a string representation longer than ten characters are not permitted โœ”๏ธ ๐Ÿ› ๏ธ
PYI055 unnecessary-type-union Multiple type members in a union. Combine them into one, e.g., type[{union_str}]. โœ”๏ธ ๐Ÿ› ๏ธ
PYI056 unsupported-method-call-on-all Calling .{name}() on __all__ may not be supported by all type checkers (use += instead) โœ”๏ธ
PYI058 generator-return-from-iter-method Use {return_type} as the return value for simple {method} methods โœ”๏ธ ๐Ÿ› ๏ธ

flake8-pytest-style (PT)#

For more, see flake8-pytest-style on PyPI.

Code Name Message
PT001 pytest-fixture-incorrect-parentheses-style Use @pytest.fixture{expected} over @pytest.fixture{actual} โœ”๏ธ ๐Ÿ› ๏ธ
PT002 pytest-fixture-positional-args Configuration for fixture {function} specified via positional args, use kwargs โœ”๏ธ
PT003 pytest-extraneous-scope-function scope='function' is implied in @pytest.fixture() โœ”๏ธ ๐Ÿ› ๏ธ
PT004 pytest-missing-fixture-name-underscore Fixture {function} does not return anything, add leading underscore โœ”๏ธ
PT005 pytest-incorrect-fixture-name-underscore Fixture {function} returns a value, remove leading underscore โœ”๏ธ
PT006 pytest-parametrize-names-wrong-type Wrong name(s) type in @pytest.mark.parametrize, expected {expected} โœ”๏ธ ๐Ÿ› ๏ธ
PT007 pytest-parametrize-values-wrong-type Wrong values type in @pytest.mark.parametrize expected {values} of {row} โœ”๏ธ
PT008 pytest-patch-with-lambda Use return_value= instead of patching with lambda โœ”๏ธ
PT009 pytest-unittest-assertion Use a regular assert instead of unittest-style {assertion} โœ”๏ธ ๐Ÿ› ๏ธ
PT010 pytest-raises-without-exception set the expected exception in pytest.raises() โœ”๏ธ
PT011 pytest-raises-too-broad pytest.raises({exception}) is too broad, set the match parameter or use a more specific exception โœ”๏ธ
PT012 pytest-raises-with-multiple-statements pytest.raises() block should contain a single simple statement โœ”๏ธ
PT013 pytest-incorrect-pytest-import Found incorrect import of pytest, use simple import pytest instead โœ”๏ธ
PT014 pytest-duplicate-parametrize-test-cases Duplicate of test case at index {index} in @pytest_mark.parametrize โœ”๏ธ ๐Ÿ› ๏ธ
PT015 pytest-assert-always-false Assertion always fails, replace with pytest.fail() โœ”๏ธ
PT016 pytest-fail-without-message No message passed to pytest.fail() โœ”๏ธ
PT017 pytest-assert-in-except Found assertion on exception {name} in except block, use pytest.raises() instead โœ”๏ธ
PT018 pytest-composite-assertion Assertion should be broken down into multiple parts โœ”๏ธ ๐Ÿ› ๏ธ
PT019 pytest-fixture-param-without-value Fixture {name} without value is injected as parameter, use @pytest.mark.usefixtures instead โœ”๏ธ
PT020 pytest-deprecated-yield-fixture @pytest.yield_fixture is deprecated, use @pytest.fixture โœ”๏ธ
PT021 pytest-fixture-finalizer-callback Use yield instead of request.addfinalizer โœ”๏ธ
PT022 pytest-useless-yield-fixture No teardown in fixture {name}, use return instead of yield โœ”๏ธ ๐Ÿ› ๏ธ
PT023 pytest-incorrect-mark-parentheses-style Use @pytest.mark.{mark_name}{expected_parens} over @pytest.mark.{mark_name}{actual_parens} โœ”๏ธ ๐Ÿ› ๏ธ
PT024 pytest-unnecessary-asyncio-mark-on-fixture pytest.mark.asyncio is unnecessary for fixtures โœ”๏ธ ๐Ÿ› ๏ธ
PT025 pytest-erroneous-use-fixtures-on-fixture pytest.mark.usefixtures has no effect on fixtures โœ”๏ธ ๐Ÿ› ๏ธ
PT026 pytest-use-fixtures-without-parameters Useless pytest.mark.usefixtures without parameters โœ”๏ธ ๐Ÿ› ๏ธ
PT027 pytest-unittest-raises-assertion Use pytest.raises instead of unittest-style {assertion} โœ”๏ธ ๐Ÿ› ๏ธ

flake8-quotes (Q)#

For more, see flake8-quotes on PyPI.

Code Name Message
Q000 bad-quotes-inline-string Single quotes found but double quotes preferred โœ”๏ธ ๐Ÿ› ๏ธ
Q001 bad-quotes-multiline-string Single quote multiline found but double quotes preferred โœ”๏ธ ๐Ÿ› ๏ธ
Q002 bad-quotes-docstring Single quote docstring found but double quotes preferred โœ”๏ธ ๐Ÿ› ๏ธ
Q003 avoidable-escaped-quote Change outer quotes to avoid escaping inner quotes โœ”๏ธ ๐Ÿ› ๏ธ
Q004 unnecessary-escaped-quote Unnecessary escape on inner quote character โœ”๏ธ ๐Ÿ› ๏ธ

flake8-raise (RSE)#

For more, see flake8-raise on PyPI.

Code Name Message
RSE102 unnecessary-paren-on-raise-exception Unnecessary parentheses on raised exception โœ”๏ธ ๐Ÿ› ๏ธ

flake8-return (RET)#

For more, see flake8-return on PyPI.

Code Name Message
RET501 unnecessary-return-none Do not explicitly return None in function if it is the only possible return value โœ”๏ธ ๐Ÿ› ๏ธ
RET502 implicit-return-value Do not implicitly return None in function able to return non-None value โœ”๏ธ ๐Ÿ› ๏ธ
RET503 implicit-return Missing explicit return at the end of function able to return non-None value โœ”๏ธ ๐Ÿ› ๏ธ
RET504 unnecessary-assign Unnecessary assignment to {name} before return statement โœ”๏ธ ๐Ÿ› ๏ธ
RET505 superfluous-else-return Unnecessary {branch} after return statement โœ”๏ธ ๐Ÿ› ๏ธ
RET506 superfluous-else-raise Unnecessary {branch} after raise statement โœ”๏ธ ๐Ÿ› ๏ธ
RET507 superfluous-else-continue Unnecessary {branch} after continue statement โœ”๏ธ ๐Ÿ› ๏ธ
RET508 superfluous-else-break Unnecessary {branch} after break statement โœ”๏ธ ๐Ÿ› ๏ธ

flake8-self (SLF)#

For more, see flake8-self on PyPI.

Code Name Message
SLF001 private-member-access Private member accessed: {access} โœ”๏ธ

flake8-slots (SLOT)#

For more, see flake8-slots on PyPI.

Code Name Message
SLOT000 no-slots-in-str-subclass Subclasses of str should define __slots__ โœ”๏ธ
SLOT001 no-slots-in-tuple-subclass Subclasses of tuple should define __slots__ โœ”๏ธ
SLOT002 no-slots-in-namedtuple-subclass Subclasses of collections.namedtuple() should define __slots__ โœ”๏ธ

flake8-simplify (SIM)#

For more, see flake8-simplify on PyPI.

Code Name Message
SIM101 duplicate-isinstance-call Multiple isinstance calls for {name}, merge into a single call โœ”๏ธ ๐Ÿ› ๏ธ
SIM102 collapsible-if Use a single if statement instead of nested if statements โœ”๏ธ ๐Ÿ› ๏ธ
SIM103 needless-bool Return the condition {condition} directly โœ”๏ธ ๐Ÿ› ๏ธ
SIM105 suppressible-exception Use contextlib.suppress({exception}) instead of try-except-pass โœ”๏ธ ๐Ÿ› ๏ธ
SIM107 return-in-try-except-finally Don't use return in try-except and finally โœ”๏ธ
SIM108 if-else-block-instead-of-if-exp Use ternary operator {contents} instead of if-else-block โœ”๏ธ ๐Ÿ› ๏ธ
SIM109 compare-with-tuple Use {replacement} instead of multiple equality comparisons โœ”๏ธ ๐Ÿ› ๏ธ
SIM110 reimplemented-builtin Use {replacement} instead of for loop โœ”๏ธ ๐Ÿ› ๏ธ
SIM112 uncapitalized-environment-variables Use capitalized environment variable {expected} instead of {actual} โœ”๏ธ ๐Ÿ› ๏ธ
SIM113 enumerate-for-loop Use enumerate() for index variable {index} in for loop โœ”๏ธ
SIM114 if-with-same-arms Combine if branches using logical or operator โœ”๏ธ ๐Ÿ› ๏ธ
SIM115 open-file-with-context-handler Use context handler for opening files โœ”๏ธ
SIM116 if-else-block-instead-of-dict-lookup Use a dictionary instead of consecutive if statements โœ”๏ธ
SIM117 multiple-with-statements Use a single with statement with multiple contexts instead of nested with statements โœ”๏ธ ๐Ÿ› ๏ธ
SIM118 in-dict-keys Use key {operator} dict instead of key {operator} dict.keys() โœ”๏ธ ๐Ÿ› ๏ธ
SIM201 negate-equal-op Use {left} != {right} instead of not {left} == {right} โœ”๏ธ ๐Ÿ› ๏ธ
SIM202 negate-not-equal-op Use {left} == {right} instead of not {left} != {right} โœ”๏ธ ๐Ÿ› ๏ธ
SIM208 double-negation Use {expr} instead of not (not {expr}) โœ”๏ธ ๐Ÿ› ๏ธ
SIM210 if-expr-with-true-false Remove unnecessary True if ... else False โœ”๏ธ ๐Ÿ› ๏ธ
SIM211 if-expr-with-false-true Use not ... instead of False if ... else True โœ”๏ธ ๐Ÿ› ๏ธ
SIM212 if-expr-with-twisted-arms Use {expr_else} if {expr_else} else {expr_body} instead of {expr_body} if not {expr_else} else {expr_else} โœ”๏ธ ๐Ÿ› ๏ธ
SIM220 expr-and-not-expr Use False instead of {name} and not {name} โœ”๏ธ ๐Ÿ› ๏ธ
SIM221 expr-or-not-expr Use True instead of {name} or not {name} โœ”๏ธ ๐Ÿ› ๏ธ
SIM222 expr-or-true Use {expr} instead of {replaced} โœ”๏ธ ๐Ÿ› ๏ธ
SIM223 expr-and-false Use {expr} instead of {replaced} โœ”๏ธ ๐Ÿ› ๏ธ
SIM300 yoda-conditions Yoda conditions are discouraged, use {suggestion} instead โœ”๏ธ ๐Ÿ› ๏ธ
SIM401 if-else-block-instead-of-dict-get Use {contents} instead of an if block โœ”๏ธ ๐Ÿ› ๏ธ
SIM910 dict-get-with-none-default Use {expected} instead of {actual} โœ”๏ธ ๐Ÿ› ๏ธ
SIM911 zip-dict-keys-and-values Use {expected} instead of {actual} โœ”๏ธ ๐Ÿ› ๏ธ

flake8-tidy-imports (TID)#

For more, see flake8-tidy-imports on PyPI.

Code Name Message
TID251 banned-api {name} is banned: {message} โœ”๏ธ
TID252 relative-imports Prefer absolute imports over relative imports from parent modules โœ”๏ธ ๐Ÿ› ๏ธ
TID253 banned-module-level-imports {name} is banned at the module level โœ”๏ธ

flake8-type-checking (TCH)#

For more, see flake8-type-checking on PyPI.

Code Name Message
TCH001 typing-only-first-party-import Move application import {} into a type-checking block โœ”๏ธ ๐Ÿ› ๏ธ
TCH002 typing-only-third-party-import Move third-party import {} into a type-checking block โœ”๏ธ ๐Ÿ› ๏ธ
TCH003 typing-only-standard-library-import Move standard library import {} into a type-checking block โœ”๏ธ ๐Ÿ› ๏ธ
TCH004 runtime-import-in-type-checking-block Move import {qualified_name} out of type-checking block. Import is used for more than type hinting. โœ”๏ธ ๐Ÿ› ๏ธ
TCH005 empty-type-checking-block Found empty type-checking block โœ”๏ธ ๐Ÿ› ๏ธ
TCH010 runtime-string-union Invalid string member in X | Y-style union type โœ”๏ธ

flake8-gettext (INT)#

For more, see flake8-gettext on PyPI.

Code Name Message
INT001 f-string-in-get-text-func-call f-string is resolved before function call; consider _("string %s") % arg โœ”๏ธ
INT002 format-in-get-text-func-call format method argument is resolved before function call; consider _("string %s") % arg โœ”๏ธ
INT003 printf-in-get-text-func-call printf-style format is resolved before function call; consider _("string %s") % arg โœ”๏ธ

flake8-unused-arguments (ARG)#

For more, see flake8-unused-arguments on PyPI.

Code Name Message
ARG001 unused-function-argument Unused function argument: {name} โœ”๏ธ
ARG002 unused-method-argument Unused method argument: {name} โœ”๏ธ
ARG003 unused-class-method-argument Unused class method argument: {name} โœ”๏ธ
ARG004 unused-static-method-argument Unused static method argument: {name} โœ”๏ธ
ARG005 unused-lambda-argument Unused lambda argument: {name} โœ”๏ธ

flake8-use-pathlib (PTH)#

For more, see flake8-use-pathlib on PyPI.

Code Name Message
PTH100 os-path-abspath os.path.abspath() should be replaced by Path.resolve() โœ”๏ธ
PTH101 os-chmod os.chmod() should be replaced by Path.chmod() โœ”๏ธ
PTH102 os-mkdir os.mkdir() should be replaced by Path.mkdir() โœ”๏ธ
PTH103 os-makedirs os.makedirs() should be replaced by Path.mkdir(parents=True) โœ”๏ธ
PTH104 os-rename os.rename() should be replaced by Path.rename() โœ”๏ธ
PTH105 os-replace os.replace() should be replaced by Path.replace() โœ”๏ธ
PTH106 os-rmdir os.rmdir() should be replaced by Path.rmdir() โœ”๏ธ
PTH107 os-remove os.remove() should be replaced by Path.unlink() โœ”๏ธ
PTH108 os-unlink os.unlink() should be replaced by Path.unlink() โœ”๏ธ
PTH109 os-getcwd os.getcwd() should be replaced by Path.cwd() โœ”๏ธ
PTH110 os-path-exists os.path.exists() should be replaced by Path.exists() โœ”๏ธ
PTH111 os-path-expanduser os.path.expanduser() should be replaced by Path.expanduser() โœ”๏ธ
PTH112 os-path-isdir os.path.isdir() should be replaced by Path.is_dir() โœ”๏ธ
PTH113 os-path-isfile os.path.isfile() should be replaced by Path.is_file() โœ”๏ธ
PTH114 os-path-islink os.path.islink() should be replaced by Path.is_symlink() โœ”๏ธ
PTH115 os-readlink os.readlink() should be replaced by Path.readlink() โœ”๏ธ
PTH116 os-stat os.stat() should be replaced by Path.stat(), Path.owner(), or Path.group() โœ”๏ธ
PTH117 os-path-isabs os.path.isabs() should be replaced by Path.is_absolute() โœ”๏ธ
PTH118 os-path-join os.{module}.join() should be replaced by Path with / operator โœ”๏ธ
PTH119 os-path-basename os.path.basename() should be replaced by Path.name โœ”๏ธ
PTH120 os-path-dirname os.path.dirname() should be replaced by Path.parent โœ”๏ธ
PTH121 os-path-samefile os.path.samefile() should be replaced by Path.samefile() โœ”๏ธ
PTH122 os-path-splitext os.path.splitext() should be replaced by Path.suffix, Path.stem, and Path.parent โœ”๏ธ
PTH123 builtin-open open() should be replaced by Path.open() โœ”๏ธ
PTH124 py-path py.path is in maintenance mode, use pathlib instead โœ”๏ธ
PTH201 path-constructor-current-directory Do not pass the current directory explicitly to Path โœ”๏ธ ๐Ÿ› ๏ธ
PTH202 os-path-getsize os.path.getsize should be replaced by Path.stat().st_size โœ”๏ธ
PTH203 os-path-getatime os.path.getatime should be replaced by Path.stat().st_atime โœ”๏ธ
PTH204 os-path-getmtime os.path.getmtime should be replaced by Path.stat().st_mtime โœ”๏ธ
PTH205 os-path-getctime os.path.getctime should be replaced by Path.stat().st_ctime โœ”๏ธ
PTH206 os-sep-split Replace .split(os.sep) with Path.parts โœ”๏ธ
PTH207 glob Replace {function} with Path.glob or Path.rglob โœ”๏ธ

flake8-todos (TD)#

For more, see flake8-todos on GitHub.

Code Name Message
TD001 invalid-todo-tag Invalid TODO tag: {tag} โœ”๏ธ
TD002 missing-todo-author Missing author in TODO; try: # TODO(<author_name>): ... or # TODO @<author_name>: ... โœ”๏ธ
TD003 missing-todo-link Missing issue link on the line following this TODO โœ”๏ธ
TD004 missing-todo-colon Missing colon in TODO โœ”๏ธ
TD005 missing-todo-description Missing issue description after TODO โœ”๏ธ
TD006 invalid-todo-capitalization Invalid TODO capitalization: {tag} should be TODO โœ”๏ธ ๐Ÿ› ๏ธ
TD007 missing-space-after-todo-colon Missing space after colon in TODO โœ”๏ธ

flake8-fixme (FIX)#

For more, see flake8-fixme on GitHub.

Code Name Message
FIX001 line-contains-fixme Line contains FIXME, consider resolving the issue โœ”๏ธ
FIX002 line-contains-todo Line contains TODO, consider resolving the issue โœ”๏ธ
FIX003 line-contains-xxx Line contains XXX, consider resolving the issue โœ”๏ธ
FIX004 line-contains-hack Line contains HACK, consider resolving the issue โœ”๏ธ

eradicate (ERA)#

For more, see eradicate on PyPI.

Code Name Message
ERA001 commented-out-code Found commented-out code โœ”๏ธ

pandas-vet (PD)#

For more, see pandas-vet on PyPI.

Code Name Message
PD002 pandas-use-of-inplace-argument inplace=True should be avoided; it has inconsistent behavior โœ”๏ธ ๐Ÿ› ๏ธ
PD003 pandas-use-of-dot-is-null .isna is preferred to .isnull; functionality is equivalent โœ”๏ธ
PD004 pandas-use-of-dot-not-null .notna is preferred to .notnull; functionality is equivalent โœ”๏ธ
PD007 pandas-use-of-dot-ix .ix is deprecated; use more explicit .loc or .iloc โœ”๏ธ
PD008 pandas-use-of-dot-at Use .loc instead of .at. If speed is important, use NumPy. โœ”๏ธ
PD009 pandas-use-of-dot-iat Use .iloc instead of .iat. If speed is important, use NumPy. โœ”๏ธ
PD010 pandas-use-of-dot-pivot-or-unstack .pivot_table is preferred to .pivot or .unstack; provides same functionality โœ”๏ธ
PD011 pandas-use-of-dot-values Use .to_numpy() instead of .values โœ”๏ธ
PD012 pandas-use-of-dot-read-table Use .read_csv instead of .read_table to read CSV files โœ”๏ธ
PD013 pandas-use-of-dot-stack .melt is preferred to .stack; provides same functionality โœ”๏ธ
PD015 pandas-use-of-pd-merge Use .merge method instead of pd.merge function. They have equivalent functionality. โœ”๏ธ
PD101 pandas-nunique-constant-series-check Using series.nunique() for checking that a series is constant is inefficient โœ”๏ธ
PD901 pandas-df-variable-name Avoid using the generic variable name df for DataFrames โœ”๏ธ

pygrep-hooks (PGH)#

For more, see pygrep-hooks on GitHub.

Code Name Message
PGH001 eval No builtin eval() allowed โŒ
PGH002 deprecated-log-warn warn is deprecated in favor of warning โŒ ๐Ÿ› ๏ธ
PGH003 blanket-type-ignore Use specific rule codes when ignoring type issues โœ”๏ธ
PGH004 blanket-noqa Use specific rule codes when using noqa โœ”๏ธ
PGH005 invalid-mock-access Mock method should be called: {name} โœ”๏ธ

Pylint (PL)#

For more, see Pylint on PyPI.

Code Name Message
PLC0105 type-name-incorrect-variance {kind} name "{param_name}" does not reflect its {variance}; consider renaming it to "{replacement_name}" โœ”๏ธ
PLC0131 type-bivariance {kind} cannot be both covariant and contravariant โœ”๏ธ
PLC0132 type-param-name-mismatch {kind} name {param_name} does not match assigned variable name {var_name} โœ”๏ธ
PLC0205 single-string-slots Class __slots__ should be a non-string iterable โœ”๏ธ
PLC0208 iteration-over-set Use a sequence type instead of a set when iterating over values โœ”๏ธ ๐Ÿ› ๏ธ
PLC0414 useless-import-alias Import alias does not rename original package โœ”๏ธ ๐Ÿ› ๏ธ
PLC0415 import-outside-top-level import should be at the top-level of a file ๐Ÿงช
PLC1901 compare-to-empty-string {existing} can be simplified to {replacement} as an empty string is falsey ๐Ÿงช
PLC2401 non-ascii-name {kind} name {name} contains a non-ASCII character, consider renaming it ๐Ÿงช
PLC2403 non-ascii-import-name Module alias {name} contains a non-ASCII character, use an ASCII-only alias ๐Ÿงช
PLC2701 import-private-name Private name import {name} from external module {module} ๐Ÿงช
PLC2801 unnecessary-dunder-call Unnecessary dunder call to {method}. {replacement}. ๐Ÿงช ๐Ÿ› ๏ธ
PLC3002 unnecessary-direct-lambda-call Lambda expression called directly. Execute the expression inline instead. โœ”๏ธ
PLE0100 yield-in-init __init__ method is a generator โœ”๏ธ
PLE0101 return-in-init Explicit return in __init__ โœ”๏ธ
PLE0116 continue-in-finally continue not supported inside finally clause โœ”๏ธ
PLE0117 nonlocal-without-binding Nonlocal name {name} found without binding โœ”๏ธ
PLE0118 load-before-global-declaration Name {name} is used prior to global declaration on {row} โœ”๏ธ
PLE0237 non-slot-assignment Attribute {name} is not defined in class's __slots__ โœ”๏ธ
PLE0241 duplicate-bases Duplicate base {base} for class {class} โœ”๏ธ
PLE0302 unexpected-special-method-signature The special method {} expects {}, {} {} given โœ”๏ธ
PLE0307 invalid-str-return-type __str__ does not return str โœ”๏ธ
PLE0604 invalid-all-object Invalid object in __all__, must contain only strings โœ”๏ธ
PLE0605 invalid-all-format Invalid format for __all__, must be tuple or list โœ”๏ธ
PLE0643 potential-index-error Potential IndexError ๐Ÿงช
PLE0704 misplaced-bare-raise Bare raise statement is not inside an exception handler ๐Ÿงช
PLE1132 repeated-keyword-argument Repeated keyword argument: {duplicate_keyword} ๐Ÿงช
PLE1142 await-outside-async await should be used within an async function โœ”๏ธ
PLE1205 logging-too-many-args Too many arguments for logging format string โœ”๏ธ
PLE1206 logging-too-few-args Not enough arguments for logging format string โœ”๏ธ
PLE1300 bad-string-format-character Unsupported format character '{format_char}' โœ”๏ธ
PLE1307 bad-string-format-type Format type does not match argument type โœ”๏ธ
PLE1310 bad-str-strip-call String {strip} call contains duplicate characters (did you mean {removal}?) โœ”๏ธ
PLE1507 invalid-envvar-value Invalid type for initial os.getenv argument; expected str โœ”๏ธ
PLE1700 yield-from-in-async-function yield from statement in async function; use async for instead โœ”๏ธ
PLE2502 bidirectional-unicode Contains control characters that can permit obfuscated code โœ”๏ธ
PLE2510 invalid-character-backspace Invalid unescaped character backspace, use "\b" instead โœ”๏ธ ๐Ÿ› ๏ธ
PLE2512 invalid-character-sub Invalid unescaped character SUB, use "\x1A" instead โœ”๏ธ ๐Ÿ› ๏ธ
PLE2513 invalid-character-esc Invalid unescaped character ESC, use "\x1B" instead โœ”๏ธ ๐Ÿ› ๏ธ
PLE2514 invalid-character-nul Invalid unescaped character NUL, use "\0" instead โœ”๏ธ ๐Ÿ› ๏ธ
PLE2515 invalid-character-zero-width-space Invalid unescaped character zero-width-space, use "\u200B" instead โœ”๏ธ ๐Ÿ› ๏ธ
PLR0124 comparison-with-itself Name compared with itself, consider replacing {actual} โœ”๏ธ
PLR0133 comparison-of-constant Two constants compared in a comparison, consider replacing {left_constant} {} {right_constant} โœ”๏ธ
PLR0202 no-classmethod-decorator Class method defined without decorator ๐Ÿงช ๐Ÿ› ๏ธ
PLR0203 no-staticmethod-decorator Static method defined without decorator ๐Ÿงช ๐Ÿ› ๏ธ
PLR0206 property-with-parameters Cannot have defined parameters for properties โœ”๏ธ
PLR0402 manual-from-import Use from {module} import {name} in lieu of alias โœ”๏ธ ๐Ÿ› ๏ธ
PLR0904 too-many-public-methods Too many public methods ({methods} > {max_methods}) ๐Ÿงช
PLR0911 too-many-return-statements Too many return statements ({returns} > {max_returns}) โœ”๏ธ
PLR0912 too-many-branches Too many branches ({branches} > {max_branches}) โœ”๏ธ
PLR0913 too-many-arguments Too many arguments in function definition ({c_args} > {max_args}) โœ”๏ธ
PLR0914 too-many-locals Too many local variables ({current_amount}/{max_amount}) ๐Ÿงช
PLR0915 too-many-statements Too many statements ({statements} > {max_statements}) โœ”๏ธ
PLR0916 too-many-boolean-expressions Too many Boolean expressions ({expressions} > {max_expressions}) ๐Ÿงช
PLR0917 too-many-positional Too many positional arguments ({c_pos}/{max_pos}) ๐Ÿงช
PLR1701 repeated-isinstance-calls Merge isinstance calls: {expression} โœ”๏ธ ๐Ÿ› ๏ธ
PLR1702 too-many-nested-blocks Too many nested blocks ({nested_blocks} > {max_nested_blocks}) ๐Ÿงช
PLR1704 redefined-argument-from-local Redefining argument with the local name {name} ๐Ÿงช
PLR1706 and-or-ternary Consider using if-else expression โŒ
PLR1711 useless-return Useless return statement at end of function โœ”๏ธ ๐Ÿ› ๏ธ
PLR1714 repeated-equality-comparison Consider merging multiple comparisons: {expression}. Use a set if the elements are hashable. โœ”๏ธ ๐Ÿ› ๏ธ
PLR1722 sys-exit-alias Use sys.exit() instead of {name} โœ”๏ธ ๐Ÿ› ๏ธ
PLR1733 unnecessary-dict-index-lookup Unnecessary lookup of dictionary value by key ๐Ÿงช ๐Ÿ› ๏ธ
PLR1736 unnecessary-list-index-lookup Unnecessary lookup of list item by index ๐Ÿงช ๐Ÿ› ๏ธ
PLR2004 magic-value-comparison Magic value used in comparison, consider replacing {value} with a constant variable โœ”๏ธ
PLR2044 empty-comment Line with empty comment ๐Ÿงช ๐Ÿ› ๏ธ
PLR5501 collapsible-else-if Use elif instead of else then if, to reduce indentation โœ”๏ธ ๐Ÿ› ๏ธ
PLR6201 literal-membership Use a set literal when testing for membership ๐Ÿงช ๐Ÿ› ๏ธ
PLR6301 no-self-use Method {method_name} could be a function, class method, or static method ๐Ÿงช
PLW0108 unnecessary-lambda Lambda may be unnecessary; consider inlining inner function ๐Ÿงช ๐Ÿ› ๏ธ
PLW0120 useless-else-on-loop else clause on loop without a break statement; remove the else and dedent its contents โœ”๏ธ ๐Ÿ› ๏ธ
PLW0127 self-assigning-variable Self-assignment of variable {name} โœ”๏ธ
PLW0129 assert-on-string-literal Asserting on an empty string literal will never pass โœ”๏ธ
PLW0131 named-expr-without-context Named expression used without context โœ”๏ธ
PLW0245 super-without-brackets super call is missing parentheses ๐Ÿงช ๐Ÿ› ๏ธ
PLW0406 import-self Module {name} imports itself โœ”๏ธ
PLW0602 global-variable-not-assigned Using global for {name} but no assignment is done โœ”๏ธ
PLW0603 global-statement Using the global statement to update {name} is discouraged โœ”๏ธ
PLW0604 global-at-module-level global at module level is redundant ๐Ÿงช
PLW0711 binary-op-exception Exception to catch is the result of a binary and operation โœ”๏ธ
PLW1501 bad-open-mode {mode} is not a valid mode for open ๐Ÿงช
PLW1508 invalid-envvar-default Invalid type for environment variable default; expected str or None โœ”๏ธ
PLW1509 subprocess-popen-preexec-fn preexec_fn argument is unsafe when using threads โœ”๏ธ
PLW1510 subprocess-run-without-check subprocess.run without explicit check argument โœ”๏ธ ๐Ÿ› ๏ธ
PLW1514 unspecified-encoding {function_name} in text mode without explicit encoding argument ๐Ÿงช ๐Ÿ› ๏ธ
PLW1641 eq-without-hash Object does not implement __hash__ method ๐Ÿงช
PLW2101 useless-with-lock Threading lock directly created in with statement has no effect ๐Ÿงช
PLW2901 redefined-loop-name Outer {outer_kind} variable {name} overwritten by inner {inner_kind} target โœ”๏ธ
PLW3201 bad-dunder-method-name Bad or misspelled dunder method name {name} ๐Ÿงช
PLW3301 nested-min-max Nested {func} calls can be flattened โœ”๏ธ ๐Ÿ› ๏ธ

tryceratops (TRY)#

For more, see tryceratops on PyPI.

Code Name Message
TRY002 raise-vanilla-class Create your own exception โœ”๏ธ
TRY003 raise-vanilla-args Avoid specifying long messages outside the exception class โœ”๏ธ
TRY004 type-check-without-type-error Prefer TypeError exception for invalid type โœ”๏ธ
TRY200 reraise-no-cause Use raise from to specify exception cause โŒ
TRY201 verbose-raise Use raise without specifying exception name โœ”๏ธ ๐Ÿ› ๏ธ
TRY300 try-consider-else Consider moving this statement to an else block โœ”๏ธ
TRY301 raise-within-try Abstract raise to an inner function โœ”๏ธ
TRY302 useless-try-except Remove exception handler; error is immediately re-raised โœ”๏ธ
TRY400 error-instead-of-exception Use logging.exception instead of logging.error โœ”๏ธ ๐Ÿ› ๏ธ
TRY401 verbose-log-message Redundant exception object included in logging.exception call โœ”๏ธ

flynt (FLY)#

For more, see flynt on PyPI.

Code Name Message
FLY002 static-join-to-f-string Consider {expression} instead of string join โœ”๏ธ ๐Ÿ› ๏ธ

NumPy-specific rules (NPY)#

Code Name Message
NPY001 numpy-deprecated-type-alias Type alias np.{type_name} is deprecated, replace with builtin type โœ”๏ธ ๐Ÿ› ๏ธ
NPY002 numpy-legacy-random Replace legacy np.random.{method_name} call with np.random.Generator โœ”๏ธ
NPY003 numpy-deprecated-function np.{existing} is deprecated; use np.{replacement} instead โœ”๏ธ ๐Ÿ› ๏ธ
NPY201 numpy2-deprecation np.{existing} will be removed in NumPy 2.0. {migration_guide} โœ”๏ธ ๐Ÿ› ๏ธ

Airflow (AIR)#

For more, see Airflow on PyPI.

Code Name Message
AIR001 airflow-variable-name-task-id-mismatch Task variable name should match the task_id: "{task_id}" โœ”๏ธ

Perflint (PERF)#

For more, see Perflint on PyPI.

Code Name Message
PERF101 unnecessary-list-cast Do not cast an iterable to list before iterating over it โœ”๏ธ ๐Ÿ› ๏ธ
PERF102 incorrect-dict-iterator When using only the {subset} of a dict use the {subset}() method โœ”๏ธ ๐Ÿ› ๏ธ
PERF203 try-except-in-loop try-except within a loop incurs performance overhead โœ”๏ธ
PERF401 manual-list-comprehension Use a list comprehension to create a transformed list โœ”๏ธ
PERF402 manual-list-copy Use list or list.copy to create a copy of a list โœ”๏ธ
PERF403 manual-dict-comprehension Use a dictionary comprehension instead of a for-loop ๐Ÿงช

refurb (FURB)#

For more, see refurb on PyPI.

Code Name Message
FURB101 read-whole-file open and read should be replaced by Path({filename}).{suggestion} ๐Ÿงช
FURB105 print-empty-string Unnecessary empty string passed to print ๐Ÿงช ๐Ÿ› ๏ธ
FURB113 repeated-append Use {suggestion} instead of repeatedly calling {name}.append() ๐Ÿงช ๐Ÿ› ๏ธ
FURB118 reimplemented-operator Use operator.{operator} instead of defining a function ๐Ÿงช ๐Ÿ› ๏ธ
FURB129 readlines-in-for Instead of calling readlines(), iterate over file object directly ๐Ÿงช ๐Ÿ› ๏ธ
FURB131 delete-full-slice Prefer clear over deleting a full slice ๐Ÿงช ๐Ÿ› ๏ธ
FURB132 check-and-remove-from-set Use {suggestion} instead of check and remove ๐Ÿงช ๐Ÿ› ๏ธ
FURB136 if-expr-min-max Replace if expression with {min_max} call ๐Ÿงช ๐Ÿ› ๏ธ
FURB140 reimplemented-starmap Use itertools.starmap instead of the generator ๐Ÿงช ๐Ÿ› ๏ธ
FURB145 slice-copy Prefer copy method over slicing ๐Ÿงช ๐Ÿ› ๏ธ
FURB148 unnecessary-enumerate enumerate value is unused, use for x in range(len(y)) instead ๐Ÿงช ๐Ÿ› ๏ธ
FURB152 math-constant Replace {literal} with math.{constant} ๐Ÿงช ๐Ÿ› ๏ธ
FURB161 bit-count Use of bin({existing}).count('1') ๐Ÿงช ๐Ÿ› ๏ธ
FURB163 redundant-log-base Prefer math.{log_function}({arg}) over math.log with a redundant base ๐Ÿงช ๐Ÿ› ๏ธ
FURB167 regex-flag-alias Use of regular expression alias re.{alias} ๐Ÿงช ๐Ÿ› ๏ธ
FURB168 isinstance-type-none Prefer is operator over isinstance to check if an object is None ๐Ÿงช ๐Ÿ› ๏ธ
FURB169 type-none-comparison Compare the identities of {object} and None instead of their respective types ๐Ÿงช ๐Ÿ› ๏ธ
FURB171 single-item-membership-test Membership test against single-item container ๐Ÿงช ๐Ÿ› ๏ธ
FURB177 implicit-cwd Prefer Path.cwd() over Path().resolve() for current-directory lookups ๐Ÿงช
FURB180 meta-class-abc-meta Use of metaclass=abc.ABCMeta to define abstract base class ๐Ÿงช ๐Ÿ› ๏ธ
FURB181 hashlib-digest-hex Use of hashlib's .digest().hex() ๐Ÿงช ๐Ÿ› ๏ธ

flake8-logging (LOG)#

For more, see flake8-logging on PyPI.

Code Name Message
LOG001 direct-logger-instantiation Use logging.getLogger() to instantiate loggers โœ”๏ธ ๐Ÿ› ๏ธ
LOG002 invalid-get-logger-argument Use __name__ with logging.getLogger() โœ”๏ธ ๐Ÿ› ๏ธ
LOG007 exception-without-exc-info Use of logging.exception with falsy exc_info โœ”๏ธ
LOG009 undocumented-warn Use of undocumented logging.WARN constant โœ”๏ธ ๐Ÿ› ๏ธ

Ruff-specific rules (RUF)#

Code Name Message
RUF001 ambiguous-unicode-character-string String contains ambiguous {}. Did you mean {}? โœ”๏ธ
RUF002 ambiguous-unicode-character-docstring Docstring contains ambiguous {}. Did you mean {}? โœ”๏ธ
RUF003 ambiguous-unicode-character-comment Comment contains ambiguous {}. Did you mean {}? โœ”๏ธ
RUF005 collection-literal-concatenation Consider {expression} instead of concatenation โœ”๏ธ ๐Ÿ› ๏ธ
RUF006 asyncio-dangling-task Store a reference to the return value of {expr}.{method} โœ”๏ธ
RUF007 pairwise-over-zipped Prefer itertools.pairwise() over zip() when iterating over successive pairs โœ”๏ธ
RUF008 mutable-dataclass-default Do not use mutable default values for dataclass attributes โœ”๏ธ
RUF009 function-call-in-dataclass-default-argument Do not perform function call {name} in dataclass defaults โœ”๏ธ
RUF010 explicit-f-string-type-conversion Use explicit conversion flag โœ”๏ธ ๐Ÿ› ๏ธ
RUF011 ruff-static-key-dict-comprehension Dictionary comprehension uses static key โŒ
RUF012 mutable-class-default Mutable class attributes should be annotated with typing.ClassVar โœ”๏ธ
RUF013 implicit-optional PEP 484 prohibits implicit Optional โœ”๏ธ ๐Ÿ› ๏ธ
RUF015 unnecessary-iterable-allocation-for-first-element Prefer next({iterable}) over single element slice โœ”๏ธ ๐Ÿ› ๏ธ
RUF016 invalid-index-type Slice in indexed access to type {value_type} uses type {index_type} instead of an integer โœ”๏ธ
RUF017 quadratic-list-summation Avoid quadratic list summation โœ”๏ธ ๐Ÿ› ๏ธ
RUF018 assignment-in-assert Avoid assignment expressions in assert statements โœ”๏ธ
RUF019 unnecessary-key-check Unnecessary key check before dictionary access โœ”๏ธ ๐Ÿ› ๏ธ
RUF020 never-union {never_like} | T is equivalent to T โœ”๏ธ ๐Ÿ› ๏ธ
RUF021 parenthesize-chained-operators Parenthesize a and b expressions when chaining and and or together, to make the precedence clear ๐Ÿงช ๐Ÿ› ๏ธ
RUF022 unsorted-dunder-all __all__ is not sorted ๐Ÿงช ๐Ÿ› ๏ธ
RUF023 unsorted-dunder-slots {}.__slots__ is not sorted ๐Ÿงช ๐Ÿ› ๏ธ
RUF024 mutable-fromkeys-value Do not pass mutable objects as values to dict.fromkeys ๐Ÿงช ๐Ÿ› ๏ธ
RUF025 unnecessary-dict-comprehension-for-iterable Unnecessary dict comprehension for iterable; use dict.fromkeys instead ๐Ÿงช ๐Ÿ› ๏ธ
RUF026 default-factory-kwarg default_factory is a positional-only argument to defaultdict ๐Ÿงช ๐Ÿ› ๏ธ
RUF027 missing-f-string-syntax Possible f-string without an f prefix ๐Ÿงช ๐Ÿ› ๏ธ
RUF100 unused-noqa Unused noqa directive โœ”๏ธ ๐Ÿ› ๏ธ
RUF200 invalid-pyproject-toml Failed to parse pyproject.toml: {message} โœ”๏ธ