Rules
Ruff supports over 800 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 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.
All rules not marked as preview, deprecated or removed are stable.
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}" | |
| AIR002 | airflow-dag-no-schedule-argument | DAGor@dagshould have an explicitscheduleargument | |
| AIR301 | airflow3-removal | {deprecated}is removed in Airflow 3.0 | ๐ ๏ธ | 
| AIR302 | airflow3-moved-to-provider | {deprecated}is moved into{provider}provider in Airflow 3.0; | ๐ ๏ธ | 
| AIR311 | airflow3-suggested-update | {deprecated}is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. | ๐ ๏ธ | 
| AIR312 | airflow3-suggested-to-move-to-provider | {deprecated}is deprecated and moved into{provider}provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. | ๐ ๏ธ | 
eradicate (ERA)
For more, see eradicate on PyPI.
| Code | Name | Message | |
|---|---|---|---|
| ERA001 | commented-out-code | Found commented-out code | 
FastAPI (FAST)
For more, see FastAPI on PyPI.
| Code | Name | Message | |
|---|---|---|---|
| FAST001 | fast-api-redundant-response-model | FastAPI route with redundant response_modelargument | ๐ ๏ธ | 
| FAST002 | fast-api-non-annotated-dependency | FastAPI dependency without Annotated | ๐ ๏ธ | 
| FAST003 | fast-api-unused-path-parameter | Parameter {arg_name}appears in route path, but not in{function_name}signature | ๐ ๏ธ | 
flake8-2020 (YTT)
For more, see flake8-2020 on PyPI.
| Code | Name | Message | |
|---|---|---|---|
| YTT101 | sys-version-slice3 | sys.version[:3]referenced (python3.10), usesys.version_info | |
| YTT102 | sys-version2 | sys.version[2]referenced (python3.10), usesys.version_info | |
| YTT103 | sys-version-cmp-str3 | sys.versioncompared to string (python3.10), usesys.version_info | |
| YTT201 | sys-version-info0-eq3 | sys.version_info[0] == 3referenced (python4), use>= | |
| YTT202 | six-py3 | six.PY3referenced (python4), usenot six.PY2 | |
| YTT203 | sys-version-info1-cmp-int | sys.version_info[1]compared to integer (python4), comparesys.version_infoto tuple | |
| YTT204 | sys-version-info-minor-cmp-int | sys.version_info.minorcompared to integer (python4), comparesys.version_infoto tuple | |
| YTT301 | sys-version0 | sys.version[0]referenced (python10), usesys.version_info | |
| YTT302 | sys-version-cmp-str10 | sys.versioncompared to string (python10), usesys.version_info | |
| YTT303 | sys-version-slice1 | sys.version[:1]referenced (python10), usesys.version_info | 
flake8-annotations (ANN)
For more, see flake8-annotations on PyPI.
For related settings, see flake8-annotations.
| 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 | cancel-scope-no-checkpoint | A with {method_name}(...):context does not contain anyawaitstatements. This makes it pointless, as the timeout can only be triggered by a checkpoint. | |
| ASYNC105 | trio-sync-call | Call to {method_name}is not immediately awaited | ๐ ๏ธ | 
| ASYNC109 | async-function-with-timeout | Async function definition with a timeoutparameter | |
| ASYNC110 | async-busy-wait | Use {module}.Eventinstead of awaiting{module}.sleepin awhileloop | |
| ASYNC115 | async-zero-sleep | Use {module}.lowlevel.checkpoint()instead of{module}.sleep(0) | ๐ ๏ธ | 
| ASYNC116 | long-sleep-not-forever | {module}.sleep()with >24 hour interval should usually be{module}.sleep_forever() | ๐ ๏ธ | 
| ASYNC210 | blocking-http-call-in-async-function | Async functions should not call blocking HTTP methods | |
| ASYNC212 | blocking-http-call-httpx-in-async-function | Blocking httpx method {name}.{call}() in async context, use httpx.AsyncClient | ๐งช | 
| ASYNC220 | create-subprocess-in-async-function | Async functions should not create subprocesses with blocking methods | |
| ASYNC221 | run-process-in-async-function | Async functions should not run processes with blocking methods | |
| ASYNC222 | wait-for-process-in-async-function | Async functions should not wait on processes with blocking methods | |
| ASYNC230 | blocking-open-call-in-async-function | Async functions should not open files with blocking methods like open | |
| ASYNC240 | blocking-path-method-in-async-function | Async functions should not use {path_library} methods, use trio.Path or anyio.path | ๐งช | 
| ASYNC250 | blocking-input-in-async-function | Blocking call to input() in async context | ๐งช | 
| ASYNC251 | blocking-sleep-in-async-function | Async functions should not call time.sleep | 
flake8-bandit (S)
For more, see flake8-bandit on PyPI.
For related settings, see flake8-bandit.
| Code | Name | Message | |
|---|---|---|---|
| S101 | assert | Use of assertdetected | |
| S102 | exec-builtin | Use of execdetected | |
| S103 | bad-file-permissions | os.chmodsetting 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-passdetected, consider logging the exception | |
| S112 | try-except-continue | try-except-continuedetected, consider logging the exception | |
| S113 | request-without-timeout | Probable use of {module}call without timeout | |
| S201 | flask-debug-true | Use of debug=Truein Flask app detected | |
| S202 | tarfile-unsafe-members | Uses of tarfile.extractall() | |
| S301 | suspicious-pickle-usage | pickleand modules that wrap it can be unsafe when used to deserialize untrusted data, possible security issue | |
| S302 | suspicious-marshal-usage | Deserialization with the marshalmodule 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 block cipher mode, replace with a known secure mode such as CBC or CTR | |
| 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_safemay 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 is considered insecure. Use SSH or some other encrypted protocol. | |
| S313 | suspicious-xmlc-element-tree-usage | Using xmlto parse untrusted data is known to be vulnerable to XML attacks; usedefusedxmlequivalents | |
| S314 | suspicious-xml-element-tree-usage | Using xmlto parse untrusted data is known to be vulnerable to XML attacks; usedefusedxmlequivalents | |
| S315 | suspicious-xml-expat-reader-usage | Using xmlto parse untrusted data is known to be vulnerable to XML attacks; usedefusedxmlequivalents | |
| S316 | suspicious-xml-expat-builder-usage | Using xmlto parse untrusted data is known to be vulnerable to XML attacks; usedefusedxmlequivalents | |
| S317 | suspicious-xml-sax-usage | Using xmlto parse untrusted data is known to be vulnerable to XML attacks; usedefusedxmlequivalents | |
| S318 | suspicious-xml-mini-dom-usage | Using xmlto parse untrusted data is known to be vulnerable to XML attacks; usedefusedxmlequivalents | |
| S319 | suspicious-xml-pull-dom-usage | Using xmlto parse untrusted data is known to be vulnerable to XML attacks; usedefusedxmlequivalents | |
| S320 | suspicious-xmle-tree-usage | Using lxmlto 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_contextthat 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 {library}:{string} | |
| S401 | suspicious-telnetlib-import | telnetliband related modules are considered insecure. Use SSH or another encrypted protocol. | ๐งช | 
| S402 | suspicious-ftplib-import | ftpliband related modules are considered insecure. Use SSH, SFTP, SCP, or another encrypted protocol. | ๐งช | 
| S403 | suspicious-pickle-import | pickle,cPickle,dill, andshelvemodules are possibly insecure | ๐งช | 
| S404 | suspicious-subprocess-import | subprocessmodule is possibly insecure | ๐งช | 
| S405 | suspicious-xml-etree-import | xml.etreemethods are vulnerable to XML attacks | ๐งช | 
| S406 | suspicious-xml-sax-import | xml.saxmethods are vulnerable to XML attacks | ๐งช | 
| S407 | suspicious-xml-expat-import | xml.dom.expatbuilderis vulnerable to XML attacks | ๐งช | 
| S408 | suspicious-xml-minidom-import | xml.dom.minidomis vulnerable to XML attacks | ๐งช | 
| S409 | suspicious-xml-pulldom-import | xml.dom.pulldomis vulnerable to XML attacks | ๐งช | 
| S410 | suspicious-lxml-import | lxmlis vulnerable to XML attacks | โ | 
| S411 | suspicious-xmlrpc-import | XMLRPC is vulnerable to remote XML attacks | ๐งช | 
| S412 | suspicious-httpoxy-import | httpoxyis 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 | pycryptolibrary 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 withverify=Falsedisabling 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_socketcalled 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}withyaml.load. Allows instantiation of arbitrary objects. Consideryaml.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&authNoPrivis insecure. | |
| S601 | paramiko-call | Possible shell injection via Paramiko call; check inputs are properly sanitized | |
| S602 | subprocess-popen-with-shell-equals-true | subprocesscall withshell=Trueseems safe, but may be changed in the future; consider rewriting withoutshell | |
| S603 | subprocess-without-shell-equals-true | subprocesscall: check for execution of untrusted input | |
| S604 | call-with-shell-equals-true | Function call with shell=Trueparameter 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 | |
| S610 | django-extra | Use of Django extracan lead to SQL injection vulnerabilities | |
| S611 | django-raw-sql | Use of RawSQLcan lead to SQL injection vulnerabilities | |
| S612 | logging-config-insecure-listen | Use of insecure logging.config.listendetected | |
| S701 | jinja2-autoescape-false | Using jinja2 templates with autoescape=Falseis dangerous and can lead to XSS. Ensureautoescape=Trueor use theselect_autoescapefunction. | |
| S702 | mako-templates | Mako templates allow HTML and JavaScript rendering by default and are inherently open to XSS attacks | |
| S704 | unsafe-markup-use | Unsafe use of {name}detected | 
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.
For related settings, see flake8-boolean-trap.
| 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.
For related settings, see flake8-bugbear.
| 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.environdoesn't clear the environment | |
| B004 | unreliable-callable-check | Using hasattr(x, "__call__")to test if x is callable is unreliable. Usecallable(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 getattrwith a constant attribute value. It is not any safer than normal property access. | ๐ ๏ธ | 
| B010 | set-attr-with-constant | Do not call setattrwith a constant attribute value. It is not any safer than normal property access. | ๐ ๏ธ | 
| B011 | assert-false | Do not assert False(python -Oremoves these calls), raiseAssertionError() | ๐ ๏ธ | 
| B012 | jump-statement-in-finally | {name}insidefinallyblocks 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 assertor remove it. | |
| B016 | raise-literal | Cannot raise a literal. Did you intend to return it or raise an Exception? | |
| B017 | assert-raises-exception | Do not assert blind exception: {exception} | |
| B018 | useless-expression | Found useless expression. Either assign it to a variable or remove it. | |
| B019 | cached-instance-method | Use of functools.lru_cacheorfunctools.cacheon 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 or properties | |
| 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 stacklevelkeyword 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}andflagsas keyword arguments to avoid confusion due to unintuitive argument positions | |
| B035 | static-key-dict-comprehension | Dictionary comprehension uses static key: {key} | |
| B039 | mutable-contextvar-default | Do not use mutable data structures for ContextVardefaults | |
| B901 | return-in-generator | Using yieldandreturn {value}in a generator function can lead to confusing behavior | ๐งช | 
| B903 | class-as-data-structure | Class could be dataclass or namedtuple | ๐งช | 
| B904 | raise-without-from-inside-except | Within an except*clause, raise exceptions withraise ... from errorraise ... from Noneto distinguish them from errors in exception handling | |
| B905 | zip-without-explicit-strict | zip()without an explicitstrict=parameter | ๐ ๏ธ | 
| B909 | loop-iterator-mutation | Mutation to loop iterable {name}during iteration | ๐งช | 
| B911 | batched-without-explicit-strict | itertools.batched()without an explicitstrictparameter | |
| B912 | map-without-explicit-strict | map()without an explicitstrict=parameter | ๐งช๐ ๏ธ | 
flake8-builtins (A)
For more, see flake8-builtins on PyPI.
For related settings, see flake8-builtins.
| Code | Name | Message | |
|---|---|---|---|
| A001 | builtin-variable-shadowing | Variable {name}is shadowing a Python builtin | |
| A002 | builtin-argument-shadowing | Function argument {name}is shadowing a Python builtin | |
| A003 | builtin-attribute-shadowing | Python builtin is shadowed by class attribute {name}from {row} | |
| A004 | builtin-import-shadowing | Import {name}is shadowing a Python builtin | |
| A005 | stdlib-module-shadowing | Module {name}shadows a Python standard-library module | |
| A006 | builtin-lambda-argument-shadowing | Lambda argument {name}is shadowing a Python builtin | 
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 | ๐ ๏ธ | 
flake8-comprehensions (C4)
For more, see flake8-comprehensions on PyPI.
For related settings, see flake8-comprehensions.
| Code | Name | Message | |
|---|---|---|---|
| C400 | unnecessary-generator-list | Unnecessary generator (rewrite using list()) | ๐ ๏ธ | 
| C401 | unnecessary-generator-set | Unnecessary generator (rewrite using set()) | ๐ ๏ธ | 
| 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 {kind} literal (rewrite as a set literal) | ๐ ๏ธ | 
| C406 | unnecessary-literal-dict | Unnecessary {obj_type} literal (rewrite as a dict literal) | ๐ ๏ธ | 
| C408 | unnecessary-collection-call | Unnecessary {kind}()call (rewrite as a literal) | ๐ ๏ธ | 
| C409 | unnecessary-literal-within-tuple-call | Unnecessary list literal passed to tuple()(rewrite as a tuple literal) | ๐ ๏ธ | 
| C410 | unnecessary-literal-within-list-call | Unnecessary list literal passed to list()(remove the outer call tolist()) | ๐ ๏ธ | 
| C411 | unnecessary-list-call | Unnecessary list()call (remove the outer call tolist()) | ๐ ๏ธ | 
| C413 | unnecessary-call-around-sorted | Unnecessary {func}()call aroundsorted() | ๐ ๏ธ | 
| 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 {kind} comprehension (rewrite using {kind}()) | ๐ ๏ธ | 
| 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 todict()) | ๐ ๏ธ | 
| C419 | unnecessary-comprehension-in-call | Unnecessary list comprehension | ๐ ๏ธ | 
| C420 | unnecessary-dict-comprehension-for-iterable | Unnecessary dict comprehension for iterable; use dict.fromkeysinstead | ๐ ๏ธ | 
flake8-copyright (CPY)
For more, see flake8-copyright on PyPI.
For related settings, see flake8-copyright.
| Code | Name | Message | |
|---|---|---|---|
| CPY001 | missing-copyright-notice | Missing copyright notice at top of file | ๐งช | 
flake8-datetimez (DTZ)
For more, see flake8-datetimez on PyPI.
| Code | Name | Message | |
|---|---|---|---|
| DTZ001 | call-datetime-without-tzinfo | datetime.datetime()called without atzinfoargument | |
| DTZ002 | call-datetime-today | datetime.datetime.today()used | |
| DTZ003 | call-datetime-utcnow | datetime.datetime.utcnow()used | |
| DTZ004 | call-datetime-utcfromtimestamp | datetime.datetime.utcfromtimestamp()used | |
| DTZ005 | call-datetime-now-without-tzinfo | datetime.datetime.now()called without atzargument | |
| DTZ006 | call-datetime-fromtimestamp | datetime.datetime.fromtimestamp()called without atzargument | |
| DTZ007 | call-datetime-strptime-without-zone | Naive datetime constructed using datetime.datetime.strptime()without %z | |
| DTZ011 | call-date-today | datetime.date.today()used | |
| DTZ012 | call-date-fromtimestamp | datetime.date.fromtimestamp()used | |
| DTZ901 | datetime-min-max | Use of datetime.datetime.{min_max}without timezone information | 
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=Trueon string-based fields such as{field_name} | |
| DJ003 | django-locals-in-render-function | Avoid passing locals()as context to arenderfunction | |
| DJ006 | django-exclude-with-model-form | Do not use excludewithModelForm, usefieldsinstead | |
| DJ007 | django-all-with-model-form | Do not use __all__withModelForm, usefieldsinstead | |
| 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 | @receiverdecorator must be on top of all the other decorators | 
flake8-errmsg (EM)
For more, see flake8-errmsg on PyPI.
For related settings, see flake8-errmsg.
| 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,pytest, oruv run | |
| EXE004 | shebang-leading-whitespace | Avoid whitespace before shebang | ๐ ๏ธ | 
| EXE005 | shebang-not-first-line | Shebang should be at the beginning of the file | 
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 | 
flake8-future-annotations (FA)
For more, see flake8-future-annotations on PyPI.
| Code | Name | Message | |
|---|---|---|---|
| FA100 | future-rewritable-type-annotation | Add from __future__ import annotationsto simplify{name} | ๐ ๏ธ | 
| FA102 | future-required-type-annotation | Missing from __future__ import annotations, but uses {reason} | ๐ ๏ธ | 
flake8-gettext (INT)
For more, see flake8-gettext on PyPI.
For related settings, see flake8-gettext.
| 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 | formatmethod 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-implicit-str-concat (ISC)
For more, see flake8-implicit-str-concat on PyPI.
For related settings, see flake8-implicit-str-concat.
| 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.
For related settings, see flake8-import-conventions.
| 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 (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__withlogging.getLogger() | ๐ ๏ธ | 
| LOG004 | log-exception-outside-except-handler | .exception()call outside exception handlers | ๐งช๐ ๏ธ | 
| LOG007 | exception-without-exc-info | Use of logging.exceptionwith falsyexc_info | |
| LOG009 | undocumented-warn | Use of undocumented logging.WARNconstant | ๐ ๏ธ | 
| LOG014 | exc-info-outside-except-handler | exc_info=outside exception handlers | ๐ ๏ธ | 
| LOG015 | root-logger-call | {}()call on root logger | 
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 warninstead ofwarning | ๐ ๏ธ | 
| G101 | logging-extra-attr-clash | Logging statement uses an extrafield that clashes with aLogRecordfield:{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 passstatement | ๐ ๏ธ | 
| 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 dictkwargs | ๐ ๏ธ | 
| PIE807 | reimplemented-container-builtin | Prefer {container}over useless lambda | ๐ ๏ธ | 
| PIE808 | unnecessary-range-start | Unnecessary startargument inrange | ๐ ๏ธ | 
| PIE810 | multiple-starts-ends-with | Call {attr}once with atuple | ๐ ๏ธ | 
flake8-print (T20)
For more, see flake8-print on PyPI.
| Code | Name | Message | |
|---|---|---|---|
| T201 | printfound | ๐ ๏ธ | |
| T203 | p-print | pprintfound | ๐ ๏ธ | 
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 | iftest must be a simple comparison againstsys.platformorsys.version_info | |
| PYI003 | unrecognized-version-info-check | Unrecognized sys.version_infocheck | |
| 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>=forsys.version_infocomparisons | |
| PYI007 | unrecognized-platform-check | Unrecognized sys.platformcheck | |
| PYI008 | unrecognized-platform-name | Unrecognized platform {platform} | |
| PYI009 | pass-statement-stub-body | Empty body should contain ..., notpass | ๐ ๏ธ | 
| 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-for-self | Use Selfinstead of 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.NamedTupleinstead ofcollections.namedtuple | |
| PYI025 | unaliased-collections-abc-set-import | Use from collections.abc import Set as AbstractSetto avoid confusion with thesetbuiltin | ๐ ๏ธ | 
| PYI026 | type-alias-without-annotation | Use {module}.TypeAliasfor 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 objecttoAnyfor 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 returnselfat 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 withobject | ๐ ๏ธ | 
| 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 withT(theTsuffix implies that an object is aTypeVar) | |
| PYI044 | future-annotations-in-stub | from __future__ import annotationshas no effect in stub files, since type checkers automatically treat stubs as having those semantics | ๐ ๏ธ | 
| PYI045 | iter-method-return-iterable | __aiter__methods should return anAsyncIterator, not anAsyncIterable | |
| 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}.NeveroverNoReturnfor 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 typemembers 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) | |
| PYI057 | byte-string-usage | Do not use {origin}.ByteString, which has unclear semantics and is deprecated | |
| PYI058 | generator-return-from-iter-method | Use {return_type}as the return value for simple{method}methods | ๐ ๏ธ | 
| PYI059 | generic-not-last-base-class | Generic[]should always be the last base class | ๐ ๏ธ | 
| PYI061 | redundant-none-literal | Use Nonerather thanLiteral[None] | ๐ ๏ธ | 
| PYI062 | duplicate-literal-member | Duplicate literal member {} | ๐ ๏ธ | 
| PYI063 | pep484-style-positional-only-parameter | Use PEP 570 syntax for positional-only parameters | |
| PYI064 | redundant-final-literal | Final[Literal[{literal}]]can be replaced with a bareFinal | ๐ ๏ธ | 
| PYI066 | bad-version-info-order | Put branches for newer Python versions first when branching on sys.version_infocomparisons | 
flake8-pytest-style (PT)
For more, see flake8-pytest-style on PyPI.
For related settings, see flake8-pytest-style.
| 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 type passed to first argument of pytest.mark.parametrize; expected {expected_string} | ๐ ๏ธ | 
| PT007 | pytest-parametrize-values-wrong-type | Wrong values type in pytest.mark.parametrizeexpected{values}of{row} | ๐ ๏ธ | 
| PT008 | pytest-patch-with-lambda | Use return_value=instead of patching withlambda | |
| PT009 | pytest-unittest-assertion | Use a regular assertinstead 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 thematchparameter 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 | Incorrect import of pytest; useimport pytestinstead | |
| 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}inexceptblock, usepytest.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.usefixturesinstead | |
| PT020 | pytest-deprecated-yield-fixture | @pytest.yield_fixtureis deprecated, use@pytest.fixture | |
| PT021 | pytest-fixture-finalizer-callback | Use yieldinstead ofrequest.addfinalizer | |
| PT022 | pytest-useless-yield-fixture | No teardown in fixture {name}, usereturninstead ofyield | ๐ ๏ธ | 
| 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.asynciois unnecessary for fixtures | ๐ ๏ธ | 
| PT025 | pytest-erroneous-use-fixtures-on-fixture | pytest.mark.usefixtureshas no effect on fixtures | ๐ ๏ธ | 
| PT026 | pytest-use-fixtures-without-parameters | Useless pytest.mark.usefixtureswithout parameters | ๐ ๏ธ | 
| PT027 | pytest-unittest-raises-assertion | Use pytest.raisesinstead of unittest-style{assertion} | ๐ ๏ธ | 
| PT028 | pytest-parameter-with-default-argument | Test function parameter {}has default argument | |
| PT029 | pytest-warns-without-warning | Set the expected warning in pytest.warns() | ๐งช | 
| PT030 | pytest-warns-too-broad | pytest.warns({warning})is too broad, set thematchparameter or use a more specific warning | |
| PT031 | pytest-warns-with-multiple-statements | pytest.warns()block should contain a single simple statement | 
flake8-quotes (Q)
For more, see flake8-quotes on PyPI.
For related settings, see flake8-quotes.
| 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 Nonein function if it is the only possible return value | ๐ ๏ธ | 
| RET502 | implicit-return-value | Do not implicitly return Nonein function able to return non-Nonevalue | ๐ ๏ธ | 
| RET503 | implicit-return | Missing explicit returnat the end of function able to return non-Nonevalue | ๐ ๏ธ | 
| RET504 | unnecessary-assign | Unnecessary assignment to {name}beforereturnstatement | ๐ ๏ธ | 
| RET505 | superfluous-else-return | Unnecessary {branch}afterreturnstatement | ๐ ๏ธ | 
| RET506 | superfluous-else-raise | Unnecessary {branch}afterraisestatement | ๐ ๏ธ | 
| RET507 | superfluous-else-continue | Unnecessary {branch}aftercontinuestatement | ๐ ๏ธ | 
| RET508 | superfluous-else-break | Unnecessary {branch}afterbreakstatement | ๐ ๏ธ | 
flake8-self (SLF)
For more, see flake8-self on PyPI.
For related settings, see flake8-self.
| Code | Name | Message | |
|---|---|---|---|
| SLF001 | private-member-access | Private member accessed: {access} | 
flake8-simplify (SIM)
For more, see flake8-simplify on PyPI.
| Code | Name | Message | |
|---|---|---|---|
| SIM101 | duplicate-isinstance-call | Multiple isinstancecalls for{name}, merge into a single call | ๐ ๏ธ | 
| SIM102 | collapsible-if | Use a single ifstatement instead of nestedifstatements | ๐ ๏ธ | 
| SIM103 | needless-bool | Return the condition {condition}directly | ๐ ๏ธ | 
| SIM105 | suppressible-exception | Use contextlib.suppress({exception})instead oftry-except-pass | ๐ ๏ธ | 
| SIM107 | return-in-try-except-finally | Don't use returnintry-exceptandfinally | |
| SIM108 | if-else-block-instead-of-if-exp | Use ternary operator {contents}instead ofif-else-block | ๐ ๏ธ | 
| SIM109 | compare-with-tuple | Use {replacement}instead of multiple equality comparisons | ๐ ๏ธ | 
| SIM110 | reimplemented-builtin | Use {replacement}instead offorloop | ๐ ๏ธ | 
| SIM112 | uncapitalized-environment-variables | Use capitalized environment variable {expected}instead of{actual} | ๐ ๏ธ | 
| SIM113 | enumerate-for-loop | Use enumerate()for index variable{index}inforloop | |
| SIM114 | if-with-same-arms | Combine ifbranches using logicaloroperator | ๐ ๏ธ | 
| SIM115 | open-file-with-context-handler | Use a context manager for opening files | |
| SIM116 | if-else-block-instead-of-dict-lookup | Use a dictionary instead of consecutive ifstatements | |
| SIM117 | multiple-with-statements | Use a single withstatement with multiple contexts instead of nestedwithstatements | ๐ ๏ธ | 
| SIM118 | in-dict-keys | Use key {operator} dictinstead ofkey {operator} dict.keys() | ๐ ๏ธ | 
| SIM201 | negate-equal-op | Use {left} != {right}instead ofnot {left} == {right} | ๐ ๏ธ | 
| SIM202 | negate-not-equal-op | Use {left} == {right}instead ofnot {left} != {right} | ๐ ๏ธ | 
| SIM208 | double-negation | Use {expr}instead ofnot (not {expr}) | ๐ ๏ธ | 
| SIM210 | if-expr-with-true-false | Remove unnecessary True if ... else False | ๐ ๏ธ | 
| SIM211 | if-expr-with-false-true | Use not ...instead ofFalse 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 Falseinstead of{name} and not {name} | ๐ ๏ธ | 
| SIM221 | expr-or-not-expr | Use Trueinstead 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 condition detected | ๐ ๏ธ | 
| SIM401 | if-else-block-instead-of-dict-get | Use {contents}instead of anifblock | ๐ ๏ธ | 
| SIM905 | split-static-string | Consider using a list literal instead of str.{} | ๐ ๏ธ | 
| SIM910 | dict-get-with-none-default | Use {expected}instead of{actual} | ๐ ๏ธ | 
| SIM911 | zip-dict-keys-and-values | Use {expected}instead of{actual} | ๐ ๏ธ | 
flake8-slots (SLOT)
For more, see flake8-slots on PyPI.
| Code | Name | Message | |
|---|---|---|---|
| SLOT000 | no-slots-in-str-subclass | Subclasses of strshould define__slots__ | |
| SLOT001 | no-slots-in-tuple-subclass | Subclasses of tupleshould define__slots__ | |
| SLOT002 | no-slots-in-namedtuple-subclass | Subclasses of {namedtuple_kind} should define __slots__ | 
flake8-tidy-imports (TID)
For more, see flake8-tidy-imports on PyPI.
For related settings, see flake8-tidy-imports.
| 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-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 for 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 beTODO | ๐ ๏ธ | 
| TD007 | missing-space-after-todo-colon | Missing space after colon in TODO | 
flake8-type-checking (TC)
For more, see flake8-type-checking on PyPI.
For related settings, see flake8-type-checking.
| Code | Name | Message | |
|---|---|---|---|
| TC001 | typing-only-first-party-import | Move application import {}into a type-checking block | ๐ ๏ธ | 
| TC002 | typing-only-third-party-import | Move third-party import {}into a type-checking block | ๐ ๏ธ | 
| TC003 | typing-only-standard-library-import | Move standard library import {}into a type-checking block | ๐ ๏ธ | 
| TC004 | runtime-import-in-type-checking-block | Move import {qualified_name}out of type-checking block. Import is used for more than type hinting. | ๐ ๏ธ | 
| TC005 | empty-type-checking-block | Found empty type-checking block | ๐ ๏ธ | 
| TC006 | runtime-cast-value | Add quotes to type expression in typing.cast() | ๐ ๏ธ | 
| TC007 | unquoted-type-alias | Add quotes to type alias | ๐ ๏ธ | 
| TC008 | quoted-type-alias | Remove quotes from type alias | ๐งช๐ ๏ธ | 
| TC010 | runtime-string-union | Invalid string member in X | Y-style union type | 
flake8-unused-arguments (ARG)
For more, see flake8-unused-arguments on PyPI.
For related settings, see flake8-unused-arguments.
| 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 byPath.resolve() | ๐ ๏ธ | 
| PTH101 | os-chmod | os.chmod()should be replaced byPath.chmod() | ๐ ๏ธ | 
| PTH102 | os-mkdir | os.mkdir()should be replaced byPath.mkdir() | ๐ ๏ธ | 
| PTH103 | os-makedirs | os.makedirs()should be replaced byPath.mkdir(parents=True) | ๐ ๏ธ | 
| PTH104 | os-rename | os.rename()should be replaced byPath.rename() | ๐ ๏ธ | 
| PTH105 | os-replace | os.replace()should be replaced byPath.replace() | ๐ ๏ธ | 
| PTH106 | os-rmdir | os.rmdir()should be replaced byPath.rmdir() | ๐ ๏ธ | 
| PTH107 | os-remove | os.remove()should be replaced byPath.unlink() | ๐ ๏ธ | 
| PTH108 | os-unlink | os.unlink()should be replaced byPath.unlink() | ๐ ๏ธ | 
| PTH109 | os-getcwd | os.getcwd()should be replaced byPath.cwd() | ๐ ๏ธ | 
| PTH110 | os-path-exists | os.path.exists()should be replaced byPath.exists() | ๐ ๏ธ | 
| PTH111 | os-path-expanduser | os.path.expanduser()should be replaced byPath.expanduser() | ๐ ๏ธ | 
| PTH112 | os-path-isdir | os.path.isdir()should be replaced byPath.is_dir() | ๐ ๏ธ | 
| PTH113 | os-path-isfile | os.path.isfile()should be replaced byPath.is_file() | ๐ ๏ธ | 
| PTH114 | os-path-islink | os.path.islink()should be replaced byPath.is_symlink() | ๐ ๏ธ | 
| PTH115 | os-readlink | os.readlink()should be replaced byPath.readlink() | ๐ ๏ธ | 
| PTH116 | os-stat | os.stat()should be replaced byPath.stat(),Path.owner(), orPath.group() | |
| PTH117 | os-path-isabs | os.path.isabs()should be replaced byPath.is_absolute() | ๐ ๏ธ | 
| PTH118 | os-path-join | os.{module}.join()should be replaced byPathwith/operator | |
| PTH119 | os-path-basename | os.path.basename()should be replaced byPath.name | ๐ ๏ธ | 
| PTH120 | os-path-dirname | os.path.dirname()should be replaced byPath.parent | ๐ ๏ธ | 
| PTH121 | os-path-samefile | os.path.samefile()should be replaced byPath.samefile() | ๐ ๏ธ | 
| PTH122 | os-path-splitext | os.path.splitext()should be replaced byPath.suffix,Path.stem, andPath.parent | |
| PTH123 | builtin-open | open()should be replaced byPath.open() | ๐ ๏ธ | 
| PTH124 | py-path | py.pathis in maintenance mode, usepathlibinstead | |
| PTH201 | path-constructor-current-directory | Do not pass the current directory explicitly to Path | ๐ ๏ธ | 
| PTH202 | os-path-getsize | os.path.getsizeshould be replaced byPath.stat().st_size | ๐ ๏ธ | 
| PTH203 | os-path-getatime | os.path.getatimeshould be replaced byPath.stat().st_atime | ๐ ๏ธ | 
| PTH204 | os-path-getmtime | os.path.getmtimeshould be replaced byPath.stat().st_mtime | ๐ ๏ธ | 
| PTH205 | os-path-getctime | os.path.getctimeshould be replaced byPath.stat().st_ctime | ๐ ๏ธ | 
| PTH206 | os-sep-split | Replace .split(os.sep)withPath.parts | |
| PTH207 | glob | Replace {function}withPath.globorPath.rglob | |
| PTH208 | os-listdir | Use pathlib.Path.iterdir()instead. | |
| PTH210 | invalid-pathlib-with-suffix | Invalid suffix passed to .with_suffix() | ๐ ๏ธ | 
| PTH211 | os-symlink | os.symlinkshould be replaced byPath.symlink_to | ๐ ๏ธ | 
flynt (FLY)
For more, see flynt on PyPI.
| Code | Name | Message | |
|---|---|---|---|
| FLY002 | static-join-to-f-string | Consider {expression}instead of string join | ๐ ๏ธ | 
isort (I)
For more, see isort on PyPI.
For related settings, see isort.
| Code | Name | Message | |
|---|---|---|---|
| I001 | unsorted-imports | Import block is un-sorted or un-formatted | ๐ ๏ธ | 
| I002 | missing-required-import | Missing required import: {name} | ๐ ๏ธ | 
mccabe (C90)
For more, see mccabe on PyPI.
For related settings, see mccabe.
| Code | Name | Message | |
|---|---|---|---|
| C901 | complex-structure | {name}is too complex ({complexity} > {max_complexity}) | 
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 withnp.random.Generator | |
| NPY003 | numpy-deprecated-function | np.{existing}is deprecated; usenp.{replacement}instead | ๐ ๏ธ | 
| NPY201 | numpy2-deprecation | np.{existing}will be removed in NumPy 2.0. {migration_guide} | ๐ ๏ธ | 
pandas-vet (PD)
For more, see pandas-vet on PyPI.
| Code | Name | Message | |
|---|---|---|---|
| PD002 | pandas-use-of-inplace-argument | inplace=Trueshould be avoided; it has inconsistent behavior | ๐ ๏ธ | 
| PD003 | pandas-use-of-dot-is-null | .isnais preferred to.isnull; functionality is equivalent | |
| PD004 | pandas-use-of-dot-not-null | .notnais preferred to.notnull; functionality is equivalent | |
| PD007 | pandas-use-of-dot-ix | .ixis deprecated; use more explicit.locor.iloc | |
| PD008 | pandas-use-of-dot-at | Use .locinstead of.at. If speed is important, use NumPy. | |
| PD009 | pandas-use-of-dot-iat | Use .ilocinstead of.iat. If speed is important, use NumPy. | |
| PD010 | pandas-use-of-dot-pivot-or-unstack | .pivot_tableis preferred to.pivotor.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_csvinstead of.read_tableto read CSV files | |
| PD013 | pandas-use-of-dot-stack | .meltis preferred to.stack; provides same functionality | |
| PD015 | pandas-use-of-pd-merge | Use .mergemethod instead ofpd.mergefunction. 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 dffor DataFrames | โ | 
pep8-naming (N)
For more, see pep8-naming on PyPI.
For related settings, see pep8-naming.
| 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}' | 
Perflint (PERF)
For more, see Perflint on PyPI.
| Code | Name | Message | |
|---|---|---|---|
| PERF101 | unnecessary-list-cast | Do not cast an iterable to listbefore 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-exceptwithin a loop incurs performance overhead | |
| PERF401 | manual-list-comprehension | Use {message_str} to create a transformed list | ๐ ๏ธ | 
| PERF402 | manual-list-copy | Use listorlist.copyto create a copy of a list | |
| PERF403 | manual-dict-comprehension | Use a dictionary comprehension instead of {modifier} for-loop | ๐ ๏ธ | 
pycodestyle (E, W)
For more, see pycodestyle on PyPI.
For related settings, see pycodestyle.
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_width} | ๐งช | 
| 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_width} (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}' | ๐งช๐ ๏ธ | 
| E204 | whitespace-after-decorator | Whitespace after decorator | ๐งช๐ ๏ธ | 
| 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 {} | ๐งช๐ ๏ธ | 
| 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_NESTED_LEVEL:?} blank line, found 0 | ๐งช๐ ๏ธ | 
| E302 | blank-lines-top-level | Expected {expected_blank_lines:?} blank lines, found {actual_blank_lines} | ๐งช๐ ๏ธ | 
| E303 | too-many-blank-lines | Too many blank lines ({actual_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}) | |
| E502 | redundant-backslash | Redundant backslash | ๐งช๐ ๏ธ | 
| 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 Noneshould becond is None | ๐ ๏ธ | 
| E712 | true-false-comparison | Avoid equality comparisons to True; use{cond}:for truth checks | ๐ ๏ธ | 
| 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 | Use isandis notfor type comparisons, orisinstance()for isinstance checks | |
| E722 | bare-except | Do not use bare except | |
| E731 | lambda-assignment | Do not assign a lambdaexpression, use adef | ๐ ๏ธ | 
| 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 | โ | 
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 | ๐ ๏ธ | 
| W391 | too-many-newlines-at-end-of-file | Too many newlines at end of {domain} | ๐งช๐ ๏ธ | 
| W505 | doc-line-too-long | Doc line too long ({width} > {limit}) | |
| W605 | invalid-escape-sequence | Invalid escape sequence: \{ch} | ๐ ๏ธ | 
pydoclint (DOC)
For more, see pydoclint on PyPI.
For related settings, see pydoclint.
| Code | Name | Message | |
|---|---|---|---|
| DOC102 | docstring-extraneous-parameter | Documented parameter {id}is not in the function's signature | ๐งช | 
| DOC201 | docstring-missing-returns | returnis not documented in docstring | ๐งช | 
| DOC202 | docstring-extraneous-returns | Docstring should not have a returns section because the function doesn't return anything | ๐งช | 
| DOC402 | docstring-missing-yields | yieldis not documented in docstring | ๐งช | 
| DOC403 | docstring-extraneous-yields | Docstring has a "Yields" section but the function doesn't yield anything | ๐งช | 
| DOC501 | docstring-missing-exception | Raised exception {id}missing from docstring | ๐งช | 
| DOC502 | docstring-extraneous-exception | Raised exception is not explicitly raised: {id} | ๐งช | 
pydocstyle (D)
For more, see pydocstyle on PyPI.
For related settings, see pydocstyle.
| 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 | unnecessary-multiline-docstring | One-line docstring should fit on one line | ๐ ๏ธ | 
| D201 | blank-line-before-function | No blank lines allowed before function docstring (found {num_lines}) | ๐ ๏ธ | 
| D202 | blank-line-after-function | No blank lines allowed after function docstring (found {num_lines}) | ๐ ๏ธ | 
| D203 | incorrect-blank-line-before-class | 1 blank line required before class docstring | ๐ ๏ธ | 
| D204 | incorrect-blank-line-after-class | 1 blank line required after class docstring | ๐ ๏ธ | 
| D205 | missing-blank-line-after-summary | 1 blank line required between summary line and description | ๐ ๏ธ | 
| D206 | docstring-tab-indentation | 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 | overindented-section | Section is over-indented ("{name}") | ๐ ๏ธ | 
| D215 | overindented-section-underline | 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 | missing-trailing-period | First line should end with a period | ๐ ๏ธ | 
| D401 | non-imperative-mood | First line of docstring should be in imperative mood: "{first_line}" | |
| D402 | signature-in-docstring | First line should not be the function's signature | |
| D403 | first-word-uncapitalized | First word of the docstring should be capitalized: {}->{} | ๐ ๏ธ | 
| D404 | docstring-starts-with-this | First word of the docstring should not be "This" | |
| D405 | non-capitalized-section-name | Section name should be properly capitalized ("{name}") | ๐ ๏ธ | 
| D406 | missing-new-line-after-section-name | Section name should end with a newline ("{name}") | ๐ ๏ธ | 
| D407 | missing-dashed-underline-after-section | Missing dashed underline after section ("{name}") | ๐ ๏ธ | 
| D408 | missing-section-underline-after-name | Section underline should be in the line following the section's name ("{name}") | ๐ ๏ธ | 
| D409 | mismatched-section-underline-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 | missing-blank-line-after-last-section | Missing blank line after last section ("{name}") | ๐ ๏ธ | 
| D414 | empty-docstring-section | Section has no content ("{name}") | |
| D415 | missing-terminal-punctuation | First line should end with a period, question mark, or exclamation point | ๐ ๏ธ | 
| D416 | missing-section-name-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 @overloadshouldn't contain a docstring | |
| D419 | empty-docstring | Docstring is empty | 
Pyflakes (F)
For more, see Pyflakes on PyPI.
| Code | Name | Message | |
|---|---|---|---|
| F401 | unused-import | {name}imported but unused; consider usingimportlib.util.find_specto 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 | .formatcall has invalid format string: {message} | |
| F522 | string-dot-format-extra-named-arguments | .formatcall has unused named argument(s): {message} | ๐ ๏ธ | 
| F523 | string-dot-format-extra-positional-arguments | .formatcall has unused arguments at position(s): {message} | ๐ ๏ธ | 
| F524 | string-dot-format-missing-arguments | .formatcall is missing argument(s) for placeholder(s): {message} | |
| F525 | string-dot-format-mixing-automatic | .formatstring 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 withprintfunction | |
| F634 | if-tuple | If test is a tuple, which is always True | |
| F701 | break-outside-loop | breakoutside loop | |
| F702 | continue-outside-loop | continuenot properly in loop | |
| F704 | yield-outside-function | {keyword}statement outside of a function | |
| F706 | return-outside-function | returnstatement outside of a function/method | |
| F707 | default-except-not-last | An exceptblock as not the last exception handler | |
| F722 | forward-annotation-syntax-error | Syntax error in forward annotation: {parse_error} | |
| F811 | redefined-while-unused | Redefinition of unused {name}from {row} | ๐ ๏ธ | 
| F821 | undefined-name | Undefined name {name}. {tip} | |
| 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 NotImplementedshould beraise NotImplementedError | ๐ ๏ธ | 
pygrep-hooks (PGH)
For more, see pygrep-hooks on GitHub.
| Code | Name | Message | |
|---|---|---|---|
| PGH001 | eval | No builtin eval()allowed | โ | 
| PGH002 | deprecated-log-warn | warnis deprecated in favor ofwarning | โ๐ ๏ธ | 
| 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.
Convention (PLC)
| 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 | |
| PLC0206 | dict-index-missing-items | Extracting value from dictionary without calling .items() | |
| PLC0207 | missing-maxsplit-arg | Replace with {suggested_split_type}(..., maxsplit=1). | ๐งช๐ ๏ธ | 
| PLC0208 | iteration-over-set | Use a sequence type instead of a setwhen iterating over values | ๐ ๏ธ | 
| PLC0414 | useless-import-alias | Import alias does not rename original package | ๐ ๏ธ | 
| PLC0415 | import-outside-top-level | importshould be at the top-level of a file | |
| PLC1802 | len-test | len({expression})used as condition without comparison | ๐ ๏ธ | 
| 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 | |
| PLC2403 | non-ascii-import-name | Module alias {name}contains a non-ASCII character | |
| 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. | 
Error (PLE)
| Code | Name | Message | |
|---|---|---|---|
| PLE0100 | yield-in-init | __init__method is a generator | |
| PLE0101 | return-in-init | Explicit return in __init__ | |
| PLE0115 | nonlocal-and-global | Name {name}is bothnonlocalandglobal | |
| PLE0116 | continue-in-finally | continuenot supported insidefinallyclause | |
| 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 | |
| PLE0303 | invalid-length-return-type | __len__does not return a non-negative integer | |
| PLE0304 | invalid-bool-return-type | __bool__does not returnbool | ๐งช | 
| PLE0305 | invalid-index-return-type | __index__does not return an integer | |
| PLE0307 | invalid-str-return-type | __str__does not returnstr | |
| PLE0308 | invalid-bytes-return-type | __bytes__does not returnbytes | |
| PLE0309 | invalid-hash-return-type | __hash__does not return an integer | |
| PLE0604 | invalid-all-object | Invalid object in __all__, must contain only strings | |
| PLE0605 | invalid-all-format | Invalid format for __all__, must betupleorlist | |
| PLE0643 | potential-index-error | Expression is likely to raise IndexError | |
| PLE0704 | misplaced-bare-raise | Bare raisestatement is not inside an exception handler | |
| PLE1132 | repeated-keyword-argument | Repeated keyword argument: {duplicate_keyword} | |
| PLE1141 | dict-iter-missing-items | Unpacking a dictionary in iteration without calling .items() | ๐งช๐ ๏ธ | 
| PLE1142 | await-outside-async | awaitshould be used within an async function | |
| PLE1205 | logging-too-many-args | Too many arguments for loggingformat string | |
| PLE1206 | logging-too-few-args | Not enough arguments for loggingformat 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.getenvargument; expectedstr | |
| PLE1519 | singledispatch-method | @singledispatchdecorator should not be used on methods | ๐ ๏ธ | 
| PLE1520 | singledispatchmethod-function | @singledispatchmethoddecorator should not be used on non-method functions | ๐ ๏ธ | 
| PLE1700 | yield-from-in-async-function | yield fromstatement in async function; useasync forinstead | |
| 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 | ๐ ๏ธ | 
| PLE4703 | modified-iterating-set | Iterated set {name}is modified within theforloop | ๐งช๐ ๏ธ | 
Refactor (PLR)
| Code | Name | Message | |
|---|---|---|---|
| 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} {op} {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-arguments | Too many positional arguments ({c_pos}/{max_pos}) | ๐งช | 
| PLR1701 | repeated-isinstance-calls | Merge isinstancecalls:{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 | โ | 
| PLR1708 | stop-iteration-return | Explicit raise StopIterationin generator | ๐งช | 
| PLR1711 | useless-return | Useless returnstatement at end of function | ๐ ๏ธ | 
| PLR1714 | repeated-equality-comparison | Consider merging multiple comparisons: {expression}. Use asetif the elements are hashable. | ๐ ๏ธ | 
| PLR1716 | boolean-chained-comparison | Contains chained boolean comparison that can be simplified | ๐ ๏ธ | 
| PLR1722 | sys-exit-alias | Use sys.exit()instead of{name} | ๐ ๏ธ | 
| PLR1730 | if-stmt-min-max | Replace ifstatement with{replacement} | ๐ ๏ธ | 
| PLR1733 | unnecessary-dict-index-lookup | Unnecessary lookup of dictionary value by key | ๐ ๏ธ | 
| PLR1736 | unnecessary-list-index-lookup | List index lookup in enumerate()loop | ๐ ๏ธ | 
| 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 elifinstead ofelsethenif, to reduce indentation | ๐ ๏ธ | 
| PLR6104 | non-augmented-assignment | Use {operator}to perform an augmented assignment directly | ๐งช๐ ๏ธ | 
| 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 | ๐งช | 
Warning (PLW)
| Code | Name | Message | |
|---|---|---|---|
| PLW0108 | unnecessary-lambda | Lambda may be unnecessary; consider inlining inner function | ๐งช๐ ๏ธ | 
| PLW0120 | useless-else-on-loop | elseclause on loop without abreakstatement; remove theelseand dedent its contents | ๐ ๏ธ | 
| PLW0127 | self-assigning-variable | Self-assignment of variable {name} | |
| PLW0128 | redeclared-assigned-name | Redeclared variable {name}in assignment | |
| PLW0129 | assert-on-string-literal | Asserting on an empty string literal will never pass | |
| PLW0131 | named-expr-without-context | Named expression used without context | |
| PLW0133 | useless-exception-statement | Missing raisestatement on exception | ๐ ๏ธ | 
| PLW0177 | nan-comparison | Comparing against a NaN value; use math.isnaninstead | |
| PLW0211 | bad-staticmethod-argument | First argument of a static method should not be named {argument_name} | |
| PLW0244 | redefined-slots-in-subclass | Slot {slot_name}redefined from base class{base} | ๐งช | 
| PLW0245 | super-without-brackets | supercall 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 | globalat module level is redundant | |
| PLW0642 | self-or-cls-assignment | Reassigned {}variable in {method_type} method | |
| PLW0711 | binary-op-exception | Exception to catch is the result of a binary andoperation | |
| PLW1501 | bad-open-mode | {mode}is not a valid mode foropen | |
| PLW1507 | shallow-copy-environ | Shallow copy of os.environviacopy.copy(os.environ) | ๐ ๏ธ | 
| PLW1508 | invalid-envvar-default | Invalid type for environment variable default; expected strorNone | |
| PLW1509 | subprocess-popen-preexec-fn | preexec_fnargument is unsafe when using threads | |
| PLW1510 | subprocess-run-without-check | subprocess.runwithout explicitcheckargument | ๐ ๏ธ | 
| PLW1514 | unspecified-encoding | {function_name}in text mode without explicitencodingargument | ๐งช๐ ๏ธ | 
| PLW1641 | eq-without-hash | Object does not implement __hash__method | |
| PLW2101 | useless-with-lock | Threading lock directly created in withstatement has no effect | |
| PLW2901 | redefined-loop-name | Outer {outer_kind} variable {name}overwritten by inner {inner_kind} target | |
| PLW3201 | bad-dunder-method-name | Dunder method {name}has no special meaning in Python 3 | ๐งช | 
| PLW3301 | nested-min-max | Nested {func}calls can be flattened | ๐ ๏ธ | 
pyupgrade (UP)
For more, see pyupgrade on PyPI.
For related settings, see pyupgrade.
| Code | Name | Message | |
|---|---|---|---|
| UP001 | useless-metaclass-type | __metaclass__ = typeis implied | ๐ ๏ธ | 
| UP003 | type-of-primitive | Use {}instead oftype(...) | ๐ ๏ธ | 
| UP004 | useless-object-inheritance | Class {name}inherits fromobject | ๐ ๏ธ | 
| 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-union | Use X | Yfor type annotations | ๐ ๏ธ | 
| UP008 | super-call-with-parameters | Use super()instead ofsuper(__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 encodeas UTF-8 | ๐ ๏ธ | 
| UP013 | convert-typed-dict-functional-to-class | Convert {name}fromTypedDictfunctional to class syntax | ๐ ๏ธ | 
| UP014 | convert-named-tuple-functional-to-class | Convert {name}fromNamedTuplefunctional to class syntax | ๐ ๏ธ | 
| UP015 | redundant-open-modes | Unnecessary mode argument | ๐ ๏ธ | 
| UP017 | datetime-timezone-utc | Use datetime.UTCalias | ๐ ๏ธ | 
| UP018 | native-literals | Unnecessary {literal_type}call (rewrite as a literal) | ๐ ๏ธ | 
| UP019 | typing-text-str-alias | {}.Textis deprecated, usestr | ๐ ๏ธ | 
| UP020 | open-alias | Use builtin open | ๐ ๏ธ | 
| UP021 | replace-universal-newlines | universal_newlinesis deprecated, usetext | ๐ ๏ธ | 
| UP022 | replace-stdout-stderr | Prefer capture_outputover sendingstdoutandstderrtoPIPE | ๐ ๏ธ | 
| UP023 | deprecated-c-element-tree | cElementTreeis deprecated, useElementTree | ๐ ๏ธ | 
| UP024 | os-error-alias | Replace aliased errors with OSError | ๐ ๏ธ | 
| UP025 | unicode-kind-prefix | Remove unicode literals from strings | ๐ ๏ธ | 
| UP026 | deprecated-mock-import | mockis deprecated, useunittest.mock | ๐ ๏ธ | 
| UP027 | unpacked-list-comprehension | Replace unpacked list comprehension with a generator expression | โ | 
| UP028 | yield-in-for-loop | Replace yieldoverforloop withyield 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 formatcall | ๐ ๏ธ | 
| UP033 | lru-cache-with-maxsize-none | Use @functools.cacheinstead 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 | Yin{}call instead of(X, Y) | โ๐ ๏ธ | 
| UP039 | unnecessary-class-parentheses | Unnecessary parentheses after class definition | ๐ ๏ธ | 
| UP040 | non-pep695-type-alias | Type alias {name}uses {type_alias_method} instead of thetypekeyword | ๐ ๏ธ | 
| UP041 | timeout-error-alias | Replace aliased errors with TimeoutError | ๐ ๏ธ | 
| UP042 | replace-str-enum | Class {name} inherits from both strandenum.Enum | ๐งช๐ ๏ธ | 
| UP043 | unnecessary-default-type-args | Unnecessary default type arguments | ๐ ๏ธ | 
| UP044 | non-pep646-unpack | Use *for unpacking | ๐ ๏ธ | 
| UP045 | non-pep604-annotation-optional | Use X | Nonefor type annotations | ๐ ๏ธ | 
| UP046 | non-pep695-generic-class | Generic class {name}usesGenericsubclass instead of type parameters | ๐ ๏ธ | 
| UP047 | non-pep695-generic-function | Generic function {name}should use type parameters | ๐ ๏ธ | 
| UP049 | private-type-parameter | Generic {} uses private type parameters | ๐ ๏ธ | 
| UP050 | useless-class-metaclass-type | Class {name}usesmetaclass=type, which is redundant | ๐ ๏ธ | 
refurb (FURB)
For more, see refurb on PyPI.
| Code | Name | Message | |
|---|---|---|---|
| FURB101 | read-whole-file | openandreadshould be replaced byPath({filename}).{suggestion} | ๐งช๐ ๏ธ | 
| FURB103 | write-whole-file | openandwriteshould be replaced byPath({filename}).{suggestion} | ๐งช๐ ๏ธ | 
| FURB105 | print-empty-string | Unnecessary empty string passed to print | ๐ ๏ธ | 
| FURB110 | if-exp-instead-of-or-operator | Replace ternary ifexpression withoroperator | ๐งช๐ ๏ธ | 
| FURB113 | repeated-append | Use {suggestion}instead of repeatedly calling{name}.append() | ๐งช๐ ๏ธ | 
| FURB116 | f-string-number-format | Replace {function_name}call with{display} | ๐ ๏ธ | 
| FURB118 | reimplemented-operator | Use operator.{operator}instead of defining a {target} | ๐งช๐ ๏ธ | 
| FURB122 | for-loop-writes | Use of {}.writein a for loop | ๐ ๏ธ | 
| FURB129 | readlines-in-for | Instead of calling readlines(), iterate over file object directly | ๐ ๏ธ | 
| FURB131 | delete-full-slice | Prefer clearover deleting a full slice | ๐งช๐ ๏ธ | 
| FURB132 | check-and-remove-from-set | Use {suggestion}instead of check andremove | ๐ ๏ธ | 
| FURB136 | if-expr-min-max | Replace ifexpression with{min_max}call | ๐ ๏ธ | 
| FURB140 | reimplemented-starmap | Use itertools.starmapinstead of the generator | ๐งช๐ ๏ธ | 
| FURB142 | for-loop-set-mutations | Use of set.{}()in a for loop | ๐งช๐ ๏ธ | 
| FURB145 | slice-copy | Prefer copymethod over slicing | ๐งช๐ ๏ธ | 
| FURB148 | unnecessary-enumerate | enumeratevalue is unused, usefor x in range(len(y))instead | ๐งช๐ ๏ธ | 
| FURB152 | math-constant | Replace {literal}withmath.{constant} | ๐งช๐ ๏ธ | 
| FURB154 | repeated-global | Use of repeated consecutive {} | ๐งช๐ ๏ธ | 
| FURB156 | hardcoded-string-charset | Use of hardcoded string charset | ๐งช๐ ๏ธ | 
| FURB157 | verbose-decimal-constructor | Verbose expression in Decimalconstructor | ๐ ๏ธ | 
| FURB161 | bit-count | Use of bin({existing}).count('1') | ๐ ๏ธ | 
| FURB162 | fromisoformat-replace-z | Unnecessary timezone replacement with zero offset | ๐ ๏ธ | 
| FURB163 | redundant-log-base | Prefer math.{log_function}({arg})overmath.logwith a redundant base | ๐ ๏ธ | 
| FURB164 | unnecessary-from-float | Verbose method {method_name}in{constructor}construction | ๐งช๐ ๏ธ | 
| FURB166 | int-on-sliced-str | Use of intwith explicitbase={base}after removing prefix | ๐ ๏ธ | 
| FURB167 | regex-flag-alias | Use of regular expression alias re.{} | ๐ ๏ธ | 
| FURB168 | isinstance-type-none | Prefer isoperator overisinstanceto check if an object isNone | ๐ ๏ธ | 
| FURB169 | type-none-comparison | When checking against None, use{}instead of comparison withtype(None) | ๐ ๏ธ | 
| FURB171 | single-item-membership-test | Membership test against single-item container | ๐งช๐ ๏ธ | 
| FURB177 | implicit-cwd | Prefer Path.cwd()overPath().resolve()for current-directory lookups | ๐ ๏ธ | 
| FURB180 | meta-class-abc-meta | Use of metaclass=abc.ABCMetato define abstract base class | ๐งช๐ ๏ธ | 
| FURB181 | hashlib-digest-hex | Use of hashlib's .digest().hex() | ๐ ๏ธ | 
| FURB187 | list-reverse-copy | Use of assignment of reversedon list{name} | ๐ ๏ธ | 
| FURB188 | slice-to-remove-prefix-or-suffix | Prefer str.removeprefix()over conditionally replacing with slice. | ๐ ๏ธ | 
| FURB189 | subclass-builtin | Subclassing {subclass}can be error prone, usecollections.{replacement}instead | ๐งช๐ ๏ธ | 
| FURB192 | sorted-min-max | Prefer minoversorted()to compute the minimum value in a sequence | ๐งช๐ ๏ธ | 
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 | zip-instead-of-pairwise | Prefer itertools.pairwise()overzip()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 assertstatements | |
| RUF019 | unnecessary-key-check | Unnecessary key check before dictionary access | ๐ ๏ธ | 
| RUF020 | never-union | {never_like} | Tis equivalent toT | ๐ ๏ธ | 
| RUF021 | parenthesize-chained-operators | Parenthesize a and bexpressions when chainingandandortogether, 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 | ๐ ๏ธ | 
| RUF026 | default-factory-kwarg | default_factoryis a positional-only argument todefaultdict | ๐ ๏ธ | 
| RUF027 | missing-f-string-syntax | Possible f-string without an fprefix | ๐งช๐ ๏ธ | 
| RUF028 | invalid-formatter-suppression-comment | This suppression comment is invalid because {} | ๐ ๏ธ | 
| RUF029 | unused-async | Function {name}is declaredasync, but doesn'tawaitor useasyncfeatures. | ๐งช | 
| RUF030 | assert-with-print-message | print()call inassertstatement is likely unintentional | ๐ ๏ธ | 
| RUF031 | incorrectly-parenthesized-tuple-in-subscript | Use parentheses for tuples in subscripts | ๐งช๐ ๏ธ | 
| RUF032 | decimal-from-float-literal | Decimal()called with float literal argument | ๐ ๏ธ | 
| RUF033 | post-init-default | __post_init__method with argument defaults | ๐ ๏ธ | 
| RUF034 | useless-if-else | Useless if-elsecondition | |
| RUF035 | ruff-unsafe-markup-use | Unsafe use of {name}detected | โ | 
| RUF036 | none-not-at-end-of-union | Nonenot at the end of the type annotation. | ๐งช | 
| RUF037 | unnecessary-empty-iterable-within-deque-call | Unnecessary empty iterable within a deque call | ๐งช๐ ๏ธ | 
| RUF038 | redundant-bool-literal | Literal[True, False, ...]can be replaced withLiteral[...] | bool | ๐งช๐ ๏ธ | 
| RUF039 | unraw-re-pattern | First argument to {call} is not raw string | ๐งช๐ ๏ธ | 
| RUF040 | invalid-assert-message-literal-argument | Non-string literal used as assert message | |
| RUF041 | unnecessary-nested-literal | Unnecessary nested Literal | ๐ ๏ธ | 
| RUF043 | pytest-raises-ambiguous-pattern | Pattern passed to match=contains metacharacters but is neither escaped nor raw | |
| RUF045 | implicit-class-var-in-dataclass | Assignment without annotation found in dataclass body | ๐งช | 
| RUF046 | unnecessary-cast-to-int | Value being cast to intis already an integer | ๐ ๏ธ | 
| RUF047 | needless-else | Empty elseclause | ๐งช๐ ๏ธ | 
| RUF048 | map-int-version-parsing | __version__may contain non-integral-like elements | |
| RUF049 | dataclass-enum | An enum class should not be decorated with @dataclass | |
| RUF051 | if-key-in-dict-del | Use popinstead ofkey in dictfollowed bydel dict[key] | ๐ ๏ธ | 
| RUF052 | used-dummy-variable | Local dummy variable {}is accessed | ๐งช๐ ๏ธ | 
| RUF053 | class-with-mixed-type-vars | Class with type parameter list inherits from Generic | ๐ ๏ธ | 
| RUF054 | indented-form-feed | Indented form feed | ๐งช | 
| RUF055 | unnecessary-regular-expression | Plain string pattern passed to refunction | ๐งช๐ ๏ธ | 
| RUF056 | falsy-dict-get-fallback | Avoid providing a falsy fallback to dict.get()in boolean test positions. The default fallbackNoneis already falsy. | ๐งช๐ ๏ธ | 
| RUF057 | unnecessary-round | Value being rounded is already an integer | ๐ ๏ธ | 
| RUF058 | starmap-zip | itertools.starmapcalled onzipiterable | ๐ ๏ธ | 
| RUF059 | unused-unpacked-variable | Unpacked variable {name}is never used | ๐ ๏ธ | 
| RUF060 | in-empty-collection | Unnecessary membership test on empty collection | ๐งช | 
| RUF061 | legacy-form-pytest-raises | Use context-manager form of pytest.{}() | ๐งช๐ ๏ธ | 
| RUF063 | access-annotations-from-class-dict | Use {suggestion}instead of__dict__access | ๐งช | 
| RUF064 | non-octal-permissions | Non-octal mode | ๐งช๐ ๏ธ | 
| RUF065 | logging-eager-conversion | Unnecessary oct()conversion when formatting with%s. Use%#oinstead of%s | ๐งช | 
| RUF100 | unused-noqa | Unused noqadirective | ๐ ๏ธ | 
| RUF101 | redirected-noqa | {original}is a redirect to{target} | ๐ ๏ธ | 
| RUF102 | invalid-rule-code | Invalid rule code in # noqa: {} | ๐งช๐ ๏ธ | 
| RUF200 | invalid-pyproject-toml | Failed to parse pyproject.toml: {message} | 
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 TypeErrorexception for invalid type | |
| TRY200 | reraise-no-cause | Use raise fromto specify exception cause | โ | 
| TRY201 | verbose-raise | Use raisewithout specifying exception name | ๐ ๏ธ | 
| TRY203 | useless-try-except | Remove exception handler; error is immediately re-raised | |
| TRY300 | try-consider-else | Consider moving this statement to an elseblock | |
| TRY301 | raise-within-try | Abstract raiseto an inner function | |
| TRY400 | error-instead-of-exception | Use logging.exceptioninstead oflogging.error | ๐ ๏ธ | 
| TRY401 | verbose-log-message | Redundant exception object included in logging.exceptioncall |