Rules
Ruff supports over 900 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.
In preview, Ruff enables an expanded set of default rules
that includes rules from the B, UP, and RUF categories, as well as many more. If you give the
new defaults a try, feel free to leave feedback in the GitHub
discussion, where you can also find the new
rule set listed in full.
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 | Fix/Status |
|---|---|---|---|
| AIR001 | airflow-variable-name-task-id-mismatch | Task variable name should match the task_id: "{task_id}" |
Rule has been stable since v0.0.271 |
| AIR002 | airflow-dag-no-schedule-argument | DAG or @dag should have an explicit schedule argument |
Rule has been stable since 0.13.0 |
| AIR003 | airflow-variable-get-outside-task | Variable.get() outside of a task |
๐งชRule has been in preview since 0.15.6 |
| AIR004 | airflow-task-branch-as-short-circuit | @task.branch can be replaced with @task.short_circuit |
๐งชRule has been in preview since 0.15.12 |
| AIR201 | airflow-xcom-pull-in-template-string | Use the .output attribute on the task object for "{task_id}" instead of xcom_pull in a template string |
๐งชRule has been in preview since 0.15.11๐ ๏ธAutomatic fix available |
| AIR301 | airflow3-removal | {deprecated} is removed in Airflow 3.0 |
Rule has been stable since 0.13.0๐ ๏ธAutomatic fix available |
| AIR302 | airflow3-moved-to-provider | {deprecated} is moved into {provider} provider in Airflow 3.0; |
Rule has been stable since 0.13.0๐ ๏ธAutomatic fix available |
| AIR303 | airflow3-incompatible-function-signature | {function_name} signature is changed in Airflow 3.0 |
๐งชRule has been in preview since 0.14.11 |
| AIR304 | airflow3-dag-dynamic-value | {function_name}() produces a value that changes at runtime; using it in a Dag or task argument causes infinite Dag version creation |
๐งชRule has been in preview since 0.15.6 |
| 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. |
Rule has been stable since 0.13.0๐ ๏ธAutomatic fix available |
| 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. |
Rule has been stable since 0.13.0๐ ๏ธAutomatic fix available |
| AIR321 | airflow31-moved | {deprecated} is moved in Airflow 3.1 |
๐งชRule has been in preview since 0.15.1๐ ๏ธAutomatic fix available |
eradicate (ERA)
For more, see eradicate on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| ERA001 | commented-out-code | Found commented-out code | Rule has been stable since v0.0.145 |
FastAPI (FAST)
For more, see FastAPI on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| FAST001 | fast-api-redundant-response-model | FastAPI route with redundant response_model argument |
Rule has been stable since 0.8.0๐ ๏ธAutomatic fix available |
| FAST002 | fast-api-non-annotated-dependency | FastAPI dependency without Annotated |
Rule has been stable since 0.8.0๐ ๏ธAutomatic fix available |
| FAST003 | fast-api-unused-path-parameter | Parameter {arg_name} appears in route path, but not in {function_name} signature |
Rule has been stable since 0.10.0๐ ๏ธAutomatic fix available |
flake8-2020 (YTT)
For more, see flake8-2020 on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| YTT101 | sys-version-slice3 | sys.version[:3] referenced (python3.10), use sys.version_info |
Rule has been stable since v0.0.113 |
| YTT102 | sys-version2 | sys.version[2] referenced (python3.10), use sys.version_info |
Rule has been stable since v0.0.113 |
| YTT103 | sys-version-cmp-str3 | sys.version compared to string (python3.10), use sys.version_info |
Rule has been stable since v0.0.113 |
| YTT201 | sys-version-info0-eq3 | sys.version_info[0] == 3 referenced (python4), use >= |
Rule has been stable since v0.0.113 |
| YTT202 | six-py3 | six.PY3 referenced (python4), use not six.PY2 |
Rule has been stable since v0.0.113 |
| YTT203 | sys-version-info1-cmp-int | sys.version_info[1] compared to integer (python4), compare sys.version_info to tuple |
Rule has been stable since v0.0.113 |
| YTT204 | sys-version-info-minor-cmp-int | sys.version_info.minor compared to integer (python4), compare sys.version_info to tuple |
Rule has been stable since v0.0.113 |
| YTT301 | sys-version0 | sys.version[0] referenced (python10), use sys.version_info |
Rule has been stable since v0.0.113 |
| YTT302 | sys-version-cmp-str10 | sys.version compared to string (python10), use sys.version_info |
Rule has been stable since v0.0.113 |
| YTT303 | sys-version-slice1 | sys.version[:1] referenced (python10), use sys.version_info |
Rule has been stable since v0.0.113 |
flake8-annotations (ANN)
For more, see flake8-annotations on PyPI.
For related settings, see flake8-annotations.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| ANN001 | missing-type-function-argument | Missing type annotation for function argument {name} |
Rule has been stable since v0.0.105 |
| ANN002 | missing-type-args | Missing type annotation for *{name} |
Rule has been stable since v0.0.105 |
| ANN003 | missing-type-kwargs | Missing type annotation for **{name} |
Rule has been stable since v0.0.105 |
| ANN101 | missing-type-self | Missing type annotation for {name} in method |
โRule was removed in 0.8.0 |
| ANN102 | missing-type-cls | Missing type annotation for {name} in classmethod |
โRule was removed in 0.8.0 |
| ANN201 | missing-return-type-undocumented-public-function | Missing return type annotation for public function {name} |
Rule has been stable since v0.0.105๐ ๏ธAutomatic fix available |
| ANN202 | missing-return-type-private-function | Missing return type annotation for private function {name} |
Rule has been stable since v0.0.105๐ ๏ธAutomatic fix available |
| ANN204 | missing-return-type-special-method | Missing return type annotation for special method {name} |
Rule has been stable since v0.0.105๐ ๏ธAutomatic fix available |
| ANN205 | missing-return-type-static-method | Missing return type annotation for staticmethod {name} |
Rule has been stable since v0.0.105๐ ๏ธAutomatic fix available |
| ANN206 | missing-return-type-class-method | Missing return type annotation for classmethod {name} |
Rule has been stable since v0.0.105๐ ๏ธAutomatic fix available |
| ANN401 | any-type | Dynamically typed expressions (typing.Any) are disallowed in {name} |
Rule has been stable since v0.0.108 |
flake8-async (ASYNC)
For more, see flake8-async on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| ASYNC100 | cancel-scope-no-checkpoint | A with {method_name}(...): context does not contain any await statements. This makes it pointless, as the timeout can only be triggered by a checkpoint. |
Rule has been stable since v0.0.269 |
| ASYNC105 | trio-sync-call | Call to {method_name} is not immediately awaited |
Rule has been stable since 0.5.0๐ ๏ธAutomatic fix available |
| ASYNC109 | async-function-with-timeout | Async function definition with a timeout parameter |
Rule has been stable since 0.5.0 |
| ASYNC110 | async-busy-wait | Use {module}.Event instead of awaiting {module}.sleep in a while loop |
Rule has been stable since 0.5.0 |
| ASYNC115 | async-zero-sleep | Use {module}.lowlevel.checkpoint() instead of {module}.sleep(0) |
Rule has been stable since 0.5.0๐ ๏ธAutomatic fix available |
| ASYNC116 | long-sleep-not-forever | {module}.sleep() with >24 hour interval should usually be {module}.sleep_forever() |
Rule has been stable since 0.13.0๐ ๏ธAutomatic fix available |
| ASYNC210 | blocking-http-call-in-async-function | Async functions should not call blocking HTTP methods | Rule has been stable since 0.5.0 |
| ASYNC212 | blocking-http-call-httpx-in-async-function | Blocking httpx method {name}.{call}() in async context, use httpx.AsyncClient | Rule has been stable since 0.15.0 |
| ASYNC220 | create-subprocess-in-async-function | Async functions should not create subprocesses with blocking methods | Rule has been stable since 0.5.0 |
| ASYNC221 | run-process-in-async-function | Async functions should not run processes with blocking methods | Rule has been stable since 0.5.0 |
| ASYNC222 | wait-for-process-in-async-function | Async functions should not wait on processes with blocking methods | Rule has been stable since 0.5.0 |
| ASYNC230 | blocking-open-call-in-async-function | Async functions should not open files with blocking methods like open |
Rule has been stable since 0.5.0 |
| ASYNC240 | blocking-path-method-in-async-function | Async functions should not use {path_library} methods, use trio.Path or anyio.path | Rule has been stable since 0.15.0 |
| ASYNC250 | blocking-input-in-async-function | Blocking call to input() in async context |
Rule has been stable since 0.15.0 |
| ASYNC251 | blocking-sleep-in-async-function | Async functions should not call time.sleep |
Rule has been stable since 0.5.0 |
flake8-bandit (S)
For more, see flake8-bandit on PyPI.
For related settings, see flake8-bandit.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| S101 | assert | Use of assert detected |
Rule has been stable since v0.0.116 |
| S102 | exec-builtin | Use of exec detected |
Rule has been stable since v0.0.116 |
| S103 | bad-file-permissions | os.chmod setting a permissive mask {mask:#o} on file or directory |
Rule has been stable since v0.0.211 |
| S104 | hardcoded-bind-all-interfaces | Possible binding to all interfaces | Rule has been stable since v0.0.116 |
| S105 | hardcoded-password-string | Possible hardcoded password assigned to: "{}" | Rule has been stable since v0.0.116 |
| S106 | hardcoded-password-func-arg | Possible hardcoded password assigned to argument: "{}" | Rule has been stable since v0.0.116 |
| S107 | hardcoded-password-default | Possible hardcoded password assigned to function default: "{}" | Rule has been stable since v0.0.116 |
| S108 | hardcoded-temp-file | Probable insecure usage of temporary file or directory: "{}" | Rule has been stable since v0.0.211 |
| S110 | try-except-pass | try-except-pass detected, consider logging the exception |
Rule has been stable since v0.0.237 |
| S112 | try-except-continue | try-except-continue detected, consider logging the exception |
Rule has been stable since v0.0.245 |
| S113 | request-without-timeout | Probable use of {module} call without timeout |
Rule has been stable since v0.0.213 |
| S201 | flask-debug-true | Use of debug=True in Flask app detected |
Rule has been stable since v0.2.0 |
| S202 | tarfile-unsafe-members | Uses of tarfile.extractall() |
Rule has been stable since v0.2.0 |
| S301 | suspicious-pickle-usage | pickle and modules that wrap it can be unsafe when used to deserialize untrusted data, possible security issue |
Rule has been stable since v0.0.258 |
| S302 | suspicious-marshal-usage | Deserialization with the marshal module is possibly dangerous |
Rule has been stable since v0.0.258 |
| S303 | suspicious-insecure-hash-usage | Use of insecure MD2, MD4, MD5, or SHA1 hash function | Rule has been stable since v0.0.258 |
| S304 | suspicious-insecure-cipher-usage | Use of insecure cipher, replace with a known secure cipher such as AES | Rule has been stable since v0.0.258 |
| S305 | suspicious-insecure-cipher-mode-usage | Use of insecure block cipher mode, replace with a known secure mode such as CBC or CTR | Rule has been stable since v0.0.258 |
| S306 | suspicious-mktemp-usage | Use of insecure and deprecated function (mktemp) |
Rule has been stable since v0.0.258 |
| S307 | suspicious-eval-usage | Use of possibly insecure function; consider using ast.literal_eval |
Rule has been stable since v0.0.258 |
| S308 | suspicious-mark-safe-usage | Use of mark_safe may expose cross-site scripting vulnerabilities |
Rule has been stable since v0.0.258 |
| S310 | suspicious-url-open-usage | Audit URL open for permitted schemes. Allowing use of file: or custom schemes is often unexpected. |
Rule has been stable since v0.0.258 |
| S311 | suspicious-non-cryptographic-random-usage | Standard pseudo-random generators are not suitable for cryptographic purposes | Rule has been stable since v0.0.258 |
| S312 | suspicious-telnet-usage | Telnet is considered insecure. Use SSH or some other encrypted protocol. | Rule has been stable since v0.0.258 |
| S313 | suspicious-xmlc-element-tree-usage | Using xml to parse untrusted data is known to be vulnerable to XML attacks; use defusedxml equivalents |
Rule has been stable since v0.0.258 |
| S314 | suspicious-xml-element-tree-usage | Using xml to parse untrusted data is known to be vulnerable to XML attacks; use defusedxml equivalents |
Rule has been stable since v0.0.258 |
| S315 | suspicious-xml-expat-reader-usage | Using xml to parse untrusted data is known to be vulnerable to XML attacks; use defusedxml equivalents |
Rule has been stable since v0.0.258 |
| S316 | suspicious-xml-expat-builder-usage | Using xml to parse untrusted data is known to be vulnerable to XML attacks; use defusedxml equivalents |
Rule has been stable since v0.0.258 |
| S317 | suspicious-xml-sax-usage | Using xml to parse untrusted data is known to be vulnerable to XML attacks; use defusedxml equivalents |
Rule has been stable since v0.0.258 |
| S318 | suspicious-xml-mini-dom-usage | Using xml to parse untrusted data is known to be vulnerable to XML attacks; use defusedxml equivalents |
Rule has been stable since v0.0.258 |
| S319 | suspicious-xml-pull-dom-usage | Using xml to parse untrusted data is known to be vulnerable to XML attacks; use defusedxml equivalents |
Rule has been stable since v0.0.258 |
| S320 | suspicious-xmle-tree-usage | Using lxml to parse untrusted data is known to be vulnerable to XML attacks |
โRule was removed in 0.12.0 |
| S321 | suspicious-ftp-lib-usage | FTP-related functions are being called. FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol. | Rule has been stable since v0.0.258 |
| S323 | suspicious-unverified-context-usage | Python allows using an insecure context via the _create_unverified_context that reverts to the previous behavior that does not validate certificates or perform hostname checks. |
Rule has been stable since v0.0.258 |
| S324 | hashlib-insecure-hash-function | Probable use of insecure hash functions in {library}: {string} |
Rule has been stable since v0.0.212 |
| S401 | suspicious-telnetlib-import | telnetlib and related modules are considered insecure. Use SSH or another encrypted protocol. |
๐งชRule has been in preview since v0.1.12 |
| S402 | suspicious-ftplib-import | ftplib and related modules are considered insecure. Use SSH, SFTP, SCP, or another encrypted protocol. |
๐งชRule has been in preview since v0.1.12 |
| S403 | suspicious-pickle-import | pickle, cPickle, dill, and shelve modules are possibly insecure |
๐งชRule has been in preview since v0.1.12 |
| S404 | suspicious-subprocess-import | subprocess module is possibly insecure |
๐งชRule has been in preview since v0.1.12 |
| S405 | suspicious-xml-etree-import | xml.etree methods are vulnerable to XML attacks |
๐งชRule has been in preview since v0.1.12 |
| S406 | suspicious-xml-sax-import | xml.sax methods are vulnerable to XML attacks |
๐งชRule has been in preview since v0.1.12 |
| S407 | suspicious-xml-expat-import | xml.dom.expatbuilder is vulnerable to XML attacks |
๐งชRule has been in preview since v0.1.12 |
| S408 | suspicious-xml-minidom-import | xml.dom.minidom is vulnerable to XML attacks |
๐งชRule has been in preview since v0.1.12 |
| S409 | suspicious-xml-pulldom-import | xml.dom.pulldom is vulnerable to XML attacks |
๐งชRule has been in preview since v0.1.12 |
| S410 | suspicious-lxml-import | lxml is vulnerable to XML attacks |
โRule was removed in v0.3.0 |
| S411 | suspicious-xmlrpc-import | XMLRPC is vulnerable to remote XML attacks | ๐งชRule has been in preview since v0.1.12 |
| S412 | suspicious-httpoxy-import | httpoxy is a set of vulnerabilities that affect application code running inCGI, or CGI-like environments. The use of CGI for web applications should be avoided |
๐งชRule has been in preview since v0.1.12 |
| S413 | suspicious-pycrypto-import | pycrypto library is known to have publicly disclosed buffer overflow vulnerability |
๐งชRule has been in preview since v0.1.12 |
| S415 | suspicious-pyghmi-import | An IPMI-related module is being imported. Prefer an encrypted protocol over IPMI. | ๐งชRule has been in preview since v0.1.12 |
| S501 | request-with-no-cert-validation | Probable use of {string} call with verify=False disabling SSL certificate checks |
Rule has been stable since v0.0.213 |
| S502 | ssl-insecure-version | Call made with insecure SSL protocol: {protocol} |
Rule has been stable since v0.2.0 |
| S503 | ssl-with-bad-defaults | Argument default set to insecure SSL protocol: {protocol} |
Rule has been stable since v0.2.0 |
| S504 | ssl-with-no-version | ssl.wrap_socket called without an `ssl_version`` |
Rule has been stable since v0.2.0 |
| S505 | weak-cryptographic-key | {cryptographic_key} key sizes below {minimum_key_size} bits are considered breakable | Rule has been stable since v0.2.0 |
| S506 | unsafe-yaml-load | Probable use of unsafe loader {name} with yaml.load. Allows instantiation of arbitrary objects. Consider yaml.safe_load. |
Rule has been stable since v0.0.212 |
| S507 | ssh-no-host-key-verification | Paramiko call with policy set to automatically trust the unknown host key | Rule has been stable since v0.2.0 |
| S508 | snmp-insecure-version | The use of SNMPv1 and SNMPv2 is insecure. Use SNMPv3 if able. | Rule has been stable since v0.0.218 |
| S509 | snmp-weak-cryptography | You should not use SNMPv3 without encryption. noAuthNoPriv & authNoPriv is insecure. |
Rule has been stable since v0.0.218 |
| S601 | paramiko-call | Possible shell injection via Paramiko call; check inputs are properly sanitized | Rule has been stable since v0.0.270 |
| S602 | subprocess-popen-with-shell-equals-true | subprocess call with shell=True seems safe, but may be changed in the future; consider rewriting without shell |
Rule has been stable since v0.0.262 |
| S603 | subprocess-without-shell-equals-true | subprocess call: check for execution of untrusted input |
Rule has been stable since v0.0.262 |
| S604 | call-with-shell-equals-true | Function call with shell=True parameter identified, security issue |
Rule has been stable since v0.0.262 |
| 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 |
Rule has been stable since v0.0.262 |
| S606 | start-process-with-no-shell | Starting a process without a shell | Rule has been stable since v0.0.262 |
| S607 | start-process-with-partial-path | Starting a process with a partial executable path | Rule has been stable since v0.0.262 |
| S608 | hardcoded-sql-expression | Possible SQL injection vector through string-based query construction | Rule has been stable since v0.0.245 |
| S609 | unix-command-wildcard-injection | Possible wildcard injection in call due to * usage |
Rule has been stable since v0.0.271 |
| S610 | django-extra | Use of Django extra can lead to SQL injection vulnerabilities |
Rule has been stable since 0.5.0 |
| S611 | django-raw-sql | Use of RawSQL can lead to SQL injection vulnerabilities |
Rule has been stable since v0.2.0 |
| S612 | logging-config-insecure-listen | Use of insecure logging.config.listen detected |
Rule has been stable since v0.0.231 |
| S701 | jinja2-autoescape-false | Using jinja2 templates with autoescape=False is dangerous and can lead to XSS. Ensure autoescape=True or use the select_autoescape function. |
Rule has been stable since v0.0.220 |
| S702 | mako-templates | Mako templates allow HTML and JavaScript rendering by default and are inherently open to XSS attacks | Rule has been stable since v0.2.0 |
| S704 | unsafe-markup-use | Unsafe use of {name} detected |
Rule has been stable since 0.10.0 |
flake8-blind-except (BLE)
For more, see flake8-blind-except on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| BLE001 | blind-except | Do not catch blind exception: {name} |
Rule has been stable since v0.0.127 |
flake8-boolean-trap (FBT)
For more, see flake8-boolean-trap on PyPI.
For related settings, see flake8-boolean-trap.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| FBT001 | boolean-type-hint-positional-argument | Boolean-typed positional argument in function definition | Rule has been stable since v0.0.127 |
| FBT002 | boolean-default-value-positional-argument | Boolean default positional argument in function definition | Rule has been stable since v0.0.127 |
| FBT003 | boolean-positional-value-in-call | Boolean positional value in function call | Rule has been stable since v0.0.127 |
flake8-bugbear (B)
For more, see flake8-bugbear on PyPI.
For related settings, see flake8-bugbear.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| B002 | unary-prefix-increment-decrement | Python does not support the unary prefix increment operator (++) |
Rule has been stable since v0.0.83 |
| B003 | assignment-to-os-environ | Assigning to os.environ doesn't clear the environment |
Rule has been stable since v0.0.102 |
| B004 | unreliable-callable-check | Using hasattr(x, "__call__") to test if x is callable is unreliable. Use callable(x) for consistent results. |
Rule has been stable since v0.0.106๐ ๏ธAutomatic fix available |
| B005 | strip-with-multi-characters | Using .strip() with multi-character strings is misleading |
Rule has been stable since v0.0.106 |
| B006 | mutable-argument-default | Do not use mutable data structures for argument defaults | Rule has been stable since v0.0.92๐ ๏ธAutomatic fix available |
| B007 | unused-loop-control-variable | Loop control variable {name} not used within loop body |
Rule has been stable since v0.0.84๐ ๏ธAutomatic fix available |
| 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 |
Rule has been stable since v0.0.102 |
| B009 | get-attr-with-constant | Do not call getattr with a constant attribute value. It is not any safer than normal property access. |
Rule has been stable since v0.0.110๐ ๏ธAutomatic fix available |
| B010 | set-attr-with-constant | Do not call setattr with a constant attribute value. It is not any safer than normal property access. |
Rule has been stable since v0.0.111๐ ๏ธAutomatic fix available |
| B011 | assert-false | Do not assert False (python -O removes these calls), raise AssertionError() |
Rule has been stable since v0.0.67๐ ๏ธAutomatic fix available |
| B012 | jump-statement-in-finally | {name} inside finally blocks cause exceptions to be silenced |
Rule has been stable since v0.0.116 |
| B013 | redundant-tuple-in-exception-handler | A length-one tuple literal is redundant in exception handlers | Rule has been stable since v0.0.89๐ ๏ธAutomatic fix available |
| B014 | duplicate-handler-exception | Exception handler with duplicate exception: {name} |
Rule has been stable since v0.0.67๐ ๏ธAutomatic fix available |
| B015 | useless-comparison | Pointless comparison. Did you mean to assign a value? Otherwise, prepend assert or remove it. |
Rule has been stable since v0.0.102 |
| B016 | raise-literal | Cannot raise a literal. Did you intend to return it or raise an Exception? | Rule has been stable since v0.0.102 |
| B017 | assert-raises-exception | Do not assert blind exception: {exception} |
Rule has been stable since v0.0.83 |
| B018 | useless-expression | Found useless expression. Either assign it to a variable or remove it. | Rule has been stable since v0.0.100 |
| B019 | cached-instance-method | Use of functools.lru_cache or functools.cache on methods can lead to memory leaks |
Rule has been stable since v0.0.114 |
| B020 | loop-variable-overrides-iterator | Loop control variable {name} overrides iterable it iterates |
Rule has been stable since v0.0.121 |
| B021 | f-string-docstring | f-string used as docstring. Python will interpret this as a joined string, rather than a docstring. | Rule has been stable since v0.0.116 |
| B022 | useless-contextlib-suppress | No arguments passed to contextlib.suppress. No exceptions will be suppressed and therefore this context manager is redundant |
Rule has been stable since v0.0.118 |
| B023 | function-uses-loop-variable | Function definition does not bind loop variable {name} |
Rule has been stable since v0.0.139 |
| B024 | abstract-base-class-without-abstract-method | {name} is an abstract base class, but it has no abstract methods or properties |
Rule has been stable since v0.0.118 |
| B025 | duplicate-try-block-exception | try-except* block with duplicate exception {name} |
Rule has been stable since v0.0.67 |
| B026 | star-arg-unpacking-after-keyword-arg | Star-arg unpacking after a keyword argument is strongly discouraged | Rule has been stable since v0.0.109 |
| B027 | empty-method-without-abstract-decorator | {name} is an empty method in an abstract base class, but has no abstract decorator |
Rule has been stable since v0.0.118 |
| B028 | no-explicit-stacklevel | No explicit stacklevel keyword argument found |
Rule has been stable since v0.0.257๐ ๏ธAutomatic fix available |
| B029 | except-with-empty-tuple | Using except* (): with an empty tuple does not catch anything; add exceptions to handle |
Rule has been stable since v0.0.250 |
| B030 | except-with-non-exception-classes | except* handlers should only be exception classes or tuples of exception classes |
Rule has been stable since v0.0.255 |
| B031 | reuse-of-groupby-generator | Using the generator returned from itertools.groupby() more than once will do nothing on the second usage |
Rule has been stable since v0.0.260 |
| B032 | unintentional-type-annotation | Possible unintentional type annotation (using :). Did you mean to assign (using =)? |
Rule has been stable since v0.0.250 |
| B033 | duplicate-value | Sets should not contain duplicate item {value} |
Rule has been stable since v0.0.271๐ ๏ธAutomatic fix available |
| B034 | re-sub-positional-args | {method} should pass {param_name} and flags as keyword arguments to avoid confusion due to unintuitive argument positions |
Rule has been stable since v0.0.278 |
| B035 | static-key-dict-comprehension | Dictionary comprehension uses static key: {key} |
Rule has been stable since v0.2.0 |
| B039 | mutable-contextvar-default | Do not use mutable data structures for ContextVar defaults |
Rule has been stable since 0.8.0 |
| B043 | del-attr-with-constant | Do not call delattr with a constant attribute value. It is not any safer than normal property deletion. |
๐งชRule has been in preview since 0.15.6๐ ๏ธAutomatic fix available |
| B901 | return-in-generator | Using yield and return {value} in a generator function can lead to confusing behavior |
๐งชRule has been in preview since v0.4.8 |
| B903 | class-as-data-structure | Class could be dataclass or namedtuple | ๐งชRule has been in preview since 0.9.0 |
| B904 | raise-without-from-inside-except | Within an except* clause, raise exceptions with raise ... from err or raise ... from None to distinguish them from errors in exception handling |
Rule has been stable since v0.0.138 |
| B905 | zip-without-explicit-strict | zip() without an explicit strict= parameter |
Rule has been stable since v0.0.167๐ ๏ธAutomatic fix available |
| B909 | loop-iterator-mutation | Mutation to loop iterable {name} during iteration |
๐งชRule has been in preview since v0.3.7 |
| B911 | batched-without-explicit-strict | itertools.batched() without an explicit strict parameter |
Rule has been stable since 0.10.0 |
| B912 | map-without-explicit-strict | map() without an explicit strict= parameter |
Rule has been stable since 0.15.0๐ ๏ธAutomatic fix available |
flake8-builtins (A)
For more, see flake8-builtins on PyPI.
For related settings, see flake8-builtins.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| A001 | builtin-variable-shadowing | Variable {name} is shadowing a Python builtin |
Rule has been stable since v0.0.48 |
| A002 | builtin-argument-shadowing | Function argument {name} is shadowing a Python builtin |
Rule has been stable since v0.0.48 |
| A003 | builtin-attribute-shadowing | Python builtin is shadowed by class attribute {name} from {row} |
Rule has been stable since v0.0.48 |
| A004 | builtin-import-shadowing | Import {name} is shadowing a Python builtin |
Rule has been stable since 0.8.0 |
| A005 | stdlib-module-shadowing | Module {name} shadows a Python standard-library module |
Rule has been stable since 0.9.0 |
| A006 | builtin-lambda-argument-shadowing | Lambda argument {name} is shadowing a Python builtin |
Rule has been stable since 0.9.0 |
flake8-commas (COM)
For more, see flake8-commas on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| COM812 | missing-trailing-comma | Trailing comma missing | Rule has been stable since v0.0.223๐ ๏ธAutomatic fix available |
| COM818 | trailing-comma-on-bare-tuple | Trailing comma on bare tuple prohibited | Rule has been stable since v0.0.223 |
| COM819 | prohibited-trailing-comma | Trailing comma prohibited | Rule has been stable since v0.0.223๐ ๏ธAutomatic fix available |
flake8-comprehensions (C4)
For more, see flake8-comprehensions on PyPI.
For related settings, see flake8-comprehensions.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| C400 | unnecessary-generator-list | Unnecessary generator (rewrite using list()) |
Rule has been stable since v0.0.61๐ ๏ธAutomatic fix available |
| C401 | unnecessary-generator-set | Unnecessary generator (rewrite using set()) |
Rule has been stable since v0.0.61๐ ๏ธAutomatic fix available |
| C402 | unnecessary-generator-dict | Unnecessary generator (rewrite as a dict comprehension) | Rule has been stable since v0.0.61๐ ๏ธAutomatic fix available |
| C403 | unnecessary-list-comprehension-set | Unnecessary list comprehension (rewrite as a set comprehension) | Rule has been stable since v0.0.58๐ ๏ธAutomatic fix available |
| C404 | unnecessary-list-comprehension-dict | Unnecessary list comprehension (rewrite as a dict comprehension) | Rule has been stable since v0.0.58๐ ๏ธAutomatic fix available |
| C405 | unnecessary-literal-set | Unnecessary {kind} literal (rewrite as a set literal) | Rule has been stable since v0.0.61๐ ๏ธAutomatic fix available |
| C406 | unnecessary-literal-dict | Unnecessary {obj_type} literal (rewrite as a dict literal) | Rule has been stable since v0.0.61๐ ๏ธAutomatic fix available |
| C408 | unnecessary-collection-call | Unnecessary {kind}() call (rewrite as a literal) |
Rule has been stable since v0.0.61๐ ๏ธAutomatic fix available |
| C409 | unnecessary-literal-within-tuple-call | Unnecessary list literal passed to tuple() (rewrite as a tuple literal) |
Rule has been stable since v0.0.66๐ ๏ธAutomatic fix available |
| C410 | unnecessary-literal-within-list-call | Unnecessary list literal passed to list() (remove the outer call to list()) |
Rule has been stable since v0.0.66๐ ๏ธAutomatic fix available |
| C411 | unnecessary-list-call | Unnecessary list() call (remove the outer call to list()) |
Rule has been stable since v0.0.73๐ ๏ธAutomatic fix available |
| C413 | unnecessary-call-around-sorted | Unnecessary {func}() call around sorted() |
Rule has been stable since v0.0.73๐ ๏ธAutomatic fix available |
| C414 | unnecessary-double-cast-or-process | Unnecessary {inner}() call within {outer}() |
Rule has been stable since v0.0.70๐ ๏ธAutomatic fix available |
| C415 | unnecessary-subscript-reversal | Unnecessary subscript reversal of iterable within {func}() |
Rule has been stable since v0.0.64 |
| C416 | unnecessary-comprehension | Unnecessary {kind} comprehension (rewrite using {kind}()) |
Rule has been stable since v0.0.73๐ ๏ธAutomatic fix available |
| C417 | unnecessary-map | Unnecessary map() usage (rewrite using a {object_type}) |
Rule has been stable since v0.0.74๐ ๏ธAutomatic fix available |
| C418 | unnecessary-literal-within-dict-call | Unnecessary dict {kind} passed to dict() (remove the outer call to dict()) |
Rule has been stable since v0.0.262๐ ๏ธAutomatic fix available |
| C419 | unnecessary-comprehension-in-call | Unnecessary list comprehension | Rule has been stable since v0.0.262๐ ๏ธAutomatic fix available |
| C420 | unnecessary-dict-comprehension-for-iterable | Unnecessary dict comprehension for iterable; use dict.fromkeys instead |
Rule has been stable since 0.10.0๐ ๏ธAutomatic fix available |
flake8-copyright (CPY)
For more, see flake8-copyright on PyPI.
For related settings, see flake8-copyright.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| CPY001 | missing-copyright-notice | Missing copyright notice at top of file | ๐งชRule has been in preview since v0.0.273 |
flake8-datetimez (DTZ)
For more, see flake8-datetimez on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| DTZ001 | call-datetime-without-tzinfo | datetime.datetime() called without a tzinfo argument |
Rule has been stable since v0.0.188 |
| DTZ002 | call-datetime-today | datetime.datetime.today() used |
Rule has been stable since v0.0.188 |
| DTZ003 | call-datetime-utcnow | datetime.datetime.utcnow() used |
Rule has been stable since v0.0.188 |
| DTZ004 | call-datetime-utcfromtimestamp | datetime.datetime.utcfromtimestamp() used |
Rule has been stable since v0.0.188 |
| DTZ005 | call-datetime-now-without-tzinfo | datetime.datetime.now() called without a tz argument |
Rule has been stable since v0.0.188 |
| DTZ006 | call-datetime-fromtimestamp | datetime.datetime.fromtimestamp() called without a tz argument |
Rule has been stable since v0.0.188 |
| DTZ007 | call-datetime-strptime-without-zone | Naive datetime constructed using datetime.datetime.strptime() without %z |
Rule has been stable since v0.0.188 |
| DTZ011 | call-date-today | datetime.date.today() used |
Rule has been stable since v0.0.188 |
| DTZ012 | call-date-fromtimestamp | datetime.date.fromtimestamp() used |
Rule has been stable since v0.0.188 |
| DTZ901 | datetime-min-max | Use of datetime.datetime.{min_max} without timezone information |
Rule has been stable since 0.10.0 |
flake8-debugger (T10)
For more, see flake8-debugger on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| T100 | debugger | Trace found: {name} used |
Rule has been stable since v0.0.141 |
flake8-django (DJ)
For more, see flake8-django on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| DJ001 | django-nullable-model-string-field | Avoid using null=True on string-based fields such as {field_name} |
Rule has been stable since v0.0.246 |
| DJ003 | django-locals-in-render-function | Avoid passing locals() as context to a render function |
Rule has been stable since v0.0.253 |
| DJ006 | django-exclude-with-model-form | Do not use exclude with ModelForm, use fields instead |
Rule has been stable since v0.0.253 |
| DJ007 | django-all-with-model-form | Do not use __all__ with ModelForm, use fields instead |
Rule has been stable since v0.0.253 |
| DJ008 | django-model-without-dunder-str | Model does not define __str__ method |
Rule has been stable since v0.0.246 |
| 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} | Rule has been stable since v0.0.258 |
| DJ013 | django-non-leading-receiver-decorator | @receiver decorator must be on top of all the other decorators |
Rule has been stable since v0.0.246 |
flake8-errmsg (EM)
For more, see flake8-errmsg on PyPI.
For related settings, see flake8-errmsg.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| EM101 | raw-string-in-exception | Exception must not use a string literal, assign to variable first | Rule has been stable since v0.0.183๐ ๏ธAutomatic fix available |
| EM102 | f-string-in-exception | Exception must not use an f-string literal, assign to variable first | Rule has been stable since v0.0.183๐ ๏ธAutomatic fix available |
| EM103 | dot-format-in-exception | Exception must not use a .format() string directly, assign to variable first |
Rule has been stable since v0.0.183๐ ๏ธAutomatic fix available |
flake8-executable (EXE)
For more, see flake8-executable on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| EXE001 | shebang-not-executable | Shebang is present but file is not executable | Rule has been stable since v0.0.233 |
| EXE002 | shebang-missing-executable-file | The file is executable but no shebang is present | Rule has been stable since v0.0.233 |
| EXE003 | shebang-missing-python | Shebang should contain python, pytest, or uv run |
Rule has been stable since v0.0.229 |
| EXE004 | shebang-leading-whitespace | Avoid whitespace before shebang | Rule has been stable since v0.0.229๐ ๏ธAutomatic fix available |
| EXE005 | shebang-not-first-line | Shebang should be at the beginning of the file | Rule has been stable since v0.0.229 |
flake8-fixme (FIX)
For more, see flake8-fixme on GitHub.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| FIX001 | line-contains-fixme | Line contains FIXME, consider resolving the issue | Rule has been stable since v0.0.272 |
| FIX002 | line-contains-todo | Line contains TODO, consider resolving the issue | Rule has been stable since v0.0.272 |
| FIX003 | line-contains-xxx | Line contains XXX, consider resolving the issue | Rule has been stable since v0.0.272 |
| FIX004 | line-contains-hack | Line contains HACK, consider resolving the issue | Rule has been stable since v0.0.272 |
flake8-future-annotations (FA)
For more, see flake8-future-annotations on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| FA100 | future-rewritable-type-annotation | Add from __future__ import annotations to simplify {name} |
Rule has been stable since v0.0.269๐ ๏ธAutomatic fix available |
| FA102 | future-required-type-annotation | Missing from __future__ import annotations, but uses {reason} |
Rule has been stable since v0.0.271๐ ๏ธAutomatic fix available |
flake8-gettext (INT)
For more, see flake8-gettext on PyPI.
For related settings, see flake8-gettext.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| INT001 | f-string-in-get-text-func-call | f-string in plural argument is resolved before function call | Rule has been stable since v0.0.260 |
| INT002 | format-in-get-text-func-call | format method in plural argument is resolved before function call |
Rule has been stable since v0.0.260 |
| INT003 | printf-in-get-text-func-call | printf-style format in plural argument is resolved before function call | Rule has been stable since v0.0.260 |
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 | Fix/Status |
|---|---|---|---|
| ISC001 | single-line-implicit-string-concatenation | Implicitly concatenated string literals on one line | Rule has been stable since v0.0.201๐ ๏ธAutomatic fix available |
| ISC002 | multi-line-implicit-string-concatenation | Implicitly concatenated string literals over multiple lines | Rule has been stable since v0.0.201 |
| ISC003 | explicit-string-concatenation | Explicitly concatenated string should be implicitly concatenated | Rule has been stable since v0.0.201๐ ๏ธAutomatic fix available |
| ISC004 | implicit-string-concatenation-in-collection-literal | Unparenthesized implicit string concatenation in collection | ๐งชRule has been in preview since 0.14.10๐ ๏ธAutomatic fix available |
flake8-import-conventions (ICN)
For more, see flake8-import-conventions on GitHub.
For related settings, see flake8-import-conventions.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| ICN001 | unconventional-import-alias | {name} should be imported as {asname} |
Rule has been stable since v0.0.166๐ ๏ธAutomatic fix available |
| ICN002 | banned-import-alias | {name} should not be imported as {asname} |
Rule has been stable since v0.0.262 |
| ICN003 | banned-import-from | Members of {name} should not be imported explicitly |
Rule has been stable since v0.0.263 |
flake8-logging (LOG)
For more, see flake8-logging on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| LOG001 | direct-logger-instantiation | Use logging.getLogger() to instantiate loggers |
Rule has been stable since v0.2.0๐ ๏ธAutomatic fix available |
| LOG002 | invalid-get-logger-argument | Use __name__ with logging.getLogger() |
Rule has been stable since v0.2.0๐ ๏ธAutomatic fix available |
| LOG004 | log-exception-outside-except-handler | .exception() call outside exception handlers |
๐งชRule has been in preview since 0.9.5๐ ๏ธAutomatic fix available |
| LOG007 | exception-without-exc-info | Use of logging.exception with falsy exc_info |
Rule has been stable since v0.2.0 |
| LOG009 | undocumented-warn | Use of undocumented logging.WARN constant |
Rule has been stable since v0.2.0๐ ๏ธAutomatic fix available |
| LOG014 | exc-info-outside-except-handler | exc_info= outside exception handlers |
Rule has been stable since 0.12.0๐ ๏ธAutomatic fix available |
| LOG015 | root-logger-call | {}() call on root logger |
Rule has been stable since 0.10.0 |
flake8-logging-format (G)
For more, see flake8-logging-format on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| G001 | logging-string-format | Logging statement uses str.format |
Rule has been stable since v0.0.236 |
| G002 | logging-percent-format | Logging statement uses % |
Rule has been stable since v0.0.236 |
| G003 | logging-string-concat | Logging statement uses + |
Rule has been stable since v0.0.236 |
| G004 | logging-f-string | Logging statement uses f-string | Rule has been stable since v0.0.236๐ ๏ธAutomatic fix available |
| G010 | logging-warn | Logging statement uses warn instead of warning |
Rule has been stable since v0.0.236๐ ๏ธAutomatic fix available |
| G101 | logging-extra-attr-clash | Logging statement uses an extra field that clashes with a LogRecord field: {key} |
Rule has been stable since v0.0.236 |
| G201 | logging-exc-info | Logging .exception(...) should be used instead of .error(..., exc_info=True) |
Rule has been stable since v0.0.236 |
| G202 | logging-redundant-exc-info | Logging statement has redundant exc_info |
Rule has been stable since v0.0.236 |
flake8-no-pep420 (INP)
For more, see flake8-no-pep420 on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| INP001 | implicit-namespace-package | File {filename} is part of an implicit namespace package. Add an __init__.py. |
Rule has been stable since v0.0.225 |
flake8-pie (PIE)
For more, see flake8-pie on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| PIE790 | unnecessary-placeholder | Unnecessary pass statement |
Rule has been stable since v0.0.208๐ ๏ธAutomatic fix available |
| PIE794 | duplicate-class-field-definition | Class field {name} is defined multiple times |
Rule has been stable since v0.0.208๐ ๏ธAutomatic fix available |
| PIE796 | non-unique-enums | Enum contains duplicate value: {value} |
Rule has been stable since v0.0.224 |
| PIE800 | unnecessary-spread | Unnecessary spread ** |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| PIE804 | unnecessary-dict-kwargs | Unnecessary dict kwargs |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| PIE807 | reimplemented-container-builtin | Prefer {container} over useless lambda |
Rule has been stable since v0.0.208๐ ๏ธAutomatic fix available |
| PIE808 | unnecessary-range-start | Unnecessary start argument in range |
Rule has been stable since v0.0.286๐ ๏ธAutomatic fix available |
| PIE810 | multiple-starts-ends-with | Call {attr} once with a tuple |
Rule has been stable since v0.0.243๐ ๏ธAutomatic fix available |
flake8-print (T20)
For more, see flake8-print on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| T201 | print found |
Rule has been stable since v0.0.57๐ ๏ธAutomatic fix available |
|
| T203 | p-print | pprint found |
Rule has been stable since v0.0.57๐ ๏ธAutomatic fix available |
flake8-pyi (PYI)
For more, see flake8-pyi on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| PYI001 | unprefixed-type-param | Name of private {kind} must start with _ |
Rule has been stable since v0.0.245 |
| PYI002 | complex-if-statement-in-stub | if test must be a simple comparison against sys.platform or sys.version_info |
Rule has been stable since v0.0.276 |
| PYI003 | unrecognized-version-info-check | Unrecognized sys.version_info check |
Rule has been stable since v0.0.276 |
| PYI004 | patch-version-comparison | Version comparison must use only major and minor version | Rule has been stable since v0.0.276 |
| PYI005 | wrong-tuple-length-version-comparison | Version comparison must be against a length-{expected_length} tuple | Rule has been stable since v0.0.276 |
| PYI006 | bad-version-info-comparison | Use < or >= for sys.version_info comparisons |
Rule has been stable since v0.0.254 |
| PYI007 | unrecognized-platform-check | Unrecognized sys.platform check |
Rule has been stable since v0.0.246 |
| PYI008 | unrecognized-platform-name | Unrecognized platform {platform} |
Rule has been stable since v0.0.246 |
| PYI009 | pass-statement-stub-body | Empty body should contain ..., not pass |
Rule has been stable since v0.0.253๐ ๏ธAutomatic fix available |
| PYI010 | non-empty-stub-body | Function body must contain only ... |
Rule has been stable since v0.0.253๐ ๏ธAutomatic fix available |
| PYI011 | typed-argument-default-in-stub | Only simple default values allowed for typed arguments | Rule has been stable since v0.0.253๐ ๏ธAutomatic fix available |
| PYI012 | pass-in-class-body | Class body must not contain pass |
Rule has been stable since v0.0.260๐ ๏ธAutomatic fix available |
| PYI013 | ellipsis-in-non-empty-class-body | Non-empty class body must not contain ... |
Rule has been stable since v0.0.270๐ ๏ธAutomatic fix available |
| PYI014 | argument-default-in-stub | Only simple default values allowed for arguments | Rule has been stable since v0.0.253๐ ๏ธAutomatic fix available |
| PYI015 | assignment-default-in-stub | Only simple default values allowed for assignments | Rule has been stable since v0.0.260๐ ๏ธAutomatic fix available |
| PYI016 | duplicate-union-member | Duplicate union member {} |
Rule has been stable since v0.0.262๐ ๏ธAutomatic fix available |
| PYI017 | complex-assignment-in-stub | Stubs should not contain assignments to attributes or multiple targets | Rule has been stable since v0.0.279 |
| PYI018 | unused-private-type-var | Private {type_var_like_kind} {type_var_like_name} is never used |
Rule has been stable since v0.0.281๐ ๏ธAutomatic fix available |
| PYI019 | custom-type-var-for-self | Use Self instead of custom TypeVar {} |
Rule has been stable since v0.0.283๐ ๏ธAutomatic fix available |
| PYI020 | quoted-annotation-in-stub | Quoted annotations should not be included in stubs | Rule has been stable since v0.0.265๐ ๏ธAutomatic fix available |
| PYI021 | docstring-in-stub | Docstrings should not be included in stubs | Rule has been stable since v0.0.253๐ ๏ธAutomatic fix available |
| PYI024 | collections-named-tuple | Use typing.NamedTuple instead of collections.namedtuple |
Rule has been stable since v0.0.271 |
| PYI025 | unaliased-collections-abc-set-import | Use from collections.abc import Set as AbstractSet to avoid confusion with the set builtin |
Rule has been stable since v0.0.271๐ ๏ธAutomatic fix available |
| PYI026 | type-alias-without-annotation | Use {module}.TypeAlias for type alias, e.g., {name}: TypeAlias = {value} |
Rule has been stable since v0.0.279๐ ๏ธAutomatic fix available |
| PYI029 | str-or-repr-defined-in-stub | Defining {name} in a stub is almost always redundant |
Rule has been stable since v0.0.271๐ ๏ธAutomatic fix available |
| PYI030 | unnecessary-literal-union | Multiple literal members in a union. Use a single literal, e.g. Literal[{}] |
Rule has been stable since v0.0.278๐ ๏ธAutomatic fix available |
| PYI032 | any-eq-ne-annotation | Prefer object to Any for the second parameter to {method_name} |
Rule has been stable since v0.0.271๐ ๏ธAutomatic fix available |
| PYI033 | type-comment-in-stub | Don't use type comments in stub file | Rule has been stable since v0.0.254 |
| PYI034 | non-self-return-type | __new__ methods usually return self at runtime |
Rule has been stable since v0.0.271๐ ๏ธAutomatic fix available |
| 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 |
Rule has been stable since v0.0.271 |
| PYI036 | bad-exit-annotation | Star-args in {method_name} should be annotated with object |
Rule has been stable since v0.0.279๐ ๏ธAutomatic fix available |
| PYI041 | redundant-numeric-union | Use {supertype} instead of {subtype} | {supertype} |
Rule has been stable since v0.0.279๐ ๏ธAutomatic fix available |
| PYI042 | snake-case-type-alias | Type alias {name} should be CamelCase |
Rule has been stable since v0.0.265 |
| PYI043 | t-suffixed-type-alias | Private type alias {name} should not be suffixed with T (the T suffix implies that an object is a TypeVar) |
Rule has been stable since v0.0.265 |
| PYI044 | future-annotations-in-stub | from __future__ import annotations has no effect in stub files, since type checkers automatically treat stubs as having those semantics |
Rule has been stable since v0.0.273๐ ๏ธAutomatic fix available |
| PYI045 | iter-method-return-iterable | __aiter__ methods should return an AsyncIterator, not an AsyncIterable |
Rule has been stable since v0.0.271 |
| PYI046 | unused-private-protocol | Private protocol {name} is never used |
Rule has been stable since v0.0.281 |
| PYI047 | unused-private-type-alias | Private TypeAlias {name} is never used |
Rule has been stable since v0.0.281 |
| PYI048 | stub-body-multiple-statements | Function body must contain exactly one statement | Rule has been stable since v0.0.271 |
| PYI049 | unused-private-typed-dict | Private TypedDict {name} is never used |
Rule has been stable since v0.0.281 |
| PYI050 | no-return-argument-annotation-in-stub | Prefer {module}.Never over NoReturn for argument annotations |
Rule has been stable since v0.0.272 |
| PYI051 | redundant-literal-union | Literal[{literal}] is redundant in a union with {builtin_type} |
Rule has been stable since v0.0.283 |
| PYI052 | unannotated-assignment-in-stub | Need type annotation for {name} |
Rule has been stable since v0.0.269 |
| PYI053 | string-or-bytes-too-long | String and bytes literals longer than 50 characters are not permitted | Rule has been stable since v0.0.271๐ ๏ธAutomatic fix available |
| PYI054 | numeric-literal-too-long | Numeric literals with a string representation longer than ten characters are not permitted | Rule has been stable since v0.0.271๐ ๏ธAutomatic fix available |
| PYI055 | unnecessary-type-union | Multiple type members in a union. Combine them into one, e.g., type[{union_str}]. |
Rule has been stable since v0.0.283๐ ๏ธAutomatic fix available |
| PYI056 | unsupported-method-call-on-all | Calling .{name}() on __all__ may not be supported by all type checkers (use += instead) |
Rule has been stable since v0.0.281 |
| PYI057 | byte-string-usage | Do not use {origin}.ByteString, which has unclear semantics and is deprecated |
Rule has been stable since 0.6.0 |
| PYI058 | generator-return-from-iter-method | Use {return_type} as the return value for simple {method} methods |
Rule has been stable since v0.2.0๐ ๏ธAutomatic fix available |
| PYI059 | generic-not-last-base-class | Generic[] should always be the last base class |
Rule has been stable since 0.13.0๐ ๏ธAutomatic fix available |
| PYI061 | redundant-none-literal | Use None rather than Literal[None] |
Rule has been stable since 0.13.0๐ ๏ธAutomatic fix available |
| PYI062 | duplicate-literal-member | Duplicate literal member {} |
Rule has been stable since 0.6.0๐ ๏ธAutomatic fix available |
| PYI063 | pep484-style-positional-only-parameter | Use PEP 570 syntax for positional-only parameters | Rule has been stable since 0.8.0 |
| PYI064 | redundant-final-literal | Final[Literal[{literal}]] can be replaced with a bare Final |
Rule has been stable since 0.8.0๐ ๏ธAutomatic fix available |
| PYI066 | bad-version-info-order | Put branches for newer Python versions first when branching on sys.version_info comparisons |
Rule has been stable since 0.8.0 |
flake8-pytest-style (PT)
For more, see flake8-pytest-style on PyPI.
For related settings, see flake8-pytest-style.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| PT001 | pytest-fixture-incorrect-parentheses-style | Use @pytest.fixture{expected} over @pytest.fixture{actual} |
Rule has been stable since v0.0.208๐ ๏ธAutomatic fix available |
| PT002 | pytest-fixture-positional-args | Configuration for fixture {function} specified via positional args, use kwargs |
Rule has been stable since v0.0.208 |
| PT003 | pytest-extraneous-scope-function | scope='function' is implied in @pytest.fixture() |
Rule has been stable since v0.0.208๐ ๏ธAutomatic fix available |
| PT004 | pytest-missing-fixture-name-underscore | Fixture {function} does not return anything, add leading underscore |
โRule was removed in 0.8.0 |
| PT005 | pytest-incorrect-fixture-name-underscore | Fixture {function} returns a value, remove leading underscore |
โRule was removed in 0.8.0 |
| PT006 | pytest-parametrize-names-wrong-type | Wrong type passed to first argument of pytest.mark.parametrize; expected {expected_string} |
Rule has been stable since v0.0.208๐ ๏ธAutomatic fix available |
| PT007 | pytest-parametrize-values-wrong-type | Wrong values type in pytest.mark.parametrize expected {values} of {row} |
Rule has been stable since v0.0.208๐ ๏ธAutomatic fix available |
| PT008 | pytest-patch-with-lambda | Use return_value= instead of patching with lambda |
Rule has been stable since v0.0.208 |
| PT009 | pytest-unittest-assertion | Use a regular assert instead of unittest-style {assertion} |
Rule has been stable since v0.0.208๐ ๏ธAutomatic fix available |
| PT010 | pytest-raises-without-exception | Set the expected exception in pytest.raises() |
Rule has been stable since v0.0.208 |
| PT011 | pytest-raises-too-broad | pytest.raises({exception}) is too broad, set the match parameter or use a more specific exception |
Rule has been stable since v0.0.208 |
| PT012 | pytest-raises-with-multiple-statements | pytest.raises() block should contain a single simple statement |
Rule has been stable since v0.0.208 |
| PT013 | pytest-incorrect-pytest-import | Incorrect import of pytest; use import pytest instead |
Rule has been stable since v0.0.208 |
| PT014 | pytest-duplicate-parametrize-test-cases | Duplicate of test case at index {index} in pytest.mark.parametrize |
Rule has been stable since v0.0.285๐ ๏ธAutomatic fix available |
| PT015 | pytest-assert-always-false | Assertion always fails, replace with pytest.fail() |
Rule has been stable since v0.0.208 |
| PT016 | pytest-fail-without-message | No message passed to pytest.fail() |
Rule has been stable since v0.0.208 |
| PT017 | pytest-assert-in-except | Found assertion on exception {name} in except block, use pytest.raises() instead |
Rule has been stable since v0.0.208 |
| PT018 | pytest-composite-assertion | Assertion should be broken down into multiple parts | Rule has been stable since v0.0.208๐ ๏ธAutomatic fix available |
| PT019 | pytest-fixture-param-without-value | Fixture {name} without value is injected as parameter, use @pytest.mark.usefixtures instead |
Rule has been stable since v0.0.208 |
| PT020 | pytest-deprecated-yield-fixture | @pytest.yield_fixture is deprecated, use @pytest.fixture |
Rule has been stable since v0.0.208 |
| PT021 | pytest-fixture-finalizer-callback | Use yield instead of request.addfinalizer |
Rule has been stable since v0.0.208 |
| PT022 | pytest-useless-yield-fixture | No teardown in fixture {name}, use return instead of yield |
Rule has been stable since v0.0.208๐ ๏ธAutomatic fix available |
| PT023 | pytest-incorrect-mark-parentheses-style | Use @pytest.mark.{mark_name}{expected_parens} over @pytest.mark.{mark_name}{actual_parens} |
Rule has been stable since v0.0.208๐ ๏ธAutomatic fix available |
| PT024 | pytest-unnecessary-asyncio-mark-on-fixture | pytest.mark.asyncio is unnecessary for fixtures |
Rule has been stable since v0.0.208๐ ๏ธAutomatic fix available |
| PT025 | pytest-erroneous-use-fixtures-on-fixture | pytest.mark.usefixtures has no effect on fixtures |
Rule has been stable since v0.0.208๐ ๏ธAutomatic fix available |
| PT026 | pytest-use-fixtures-without-parameters | Useless pytest.mark.usefixtures without parameters |
Rule has been stable since v0.0.208๐ ๏ธAutomatic fix available |
| PT027 | pytest-unittest-raises-assertion | Use pytest.raises instead of unittest-style {assertion} |
Rule has been stable since v0.0.285๐ ๏ธAutomatic fix available |
| PT028 | pytest-parameter-with-default-argument | Test function parameter {} has default argument |
Rule has been stable since 0.12.0 |
| PT029 | pytest-warns-without-warning | Set the expected warning in pytest.warns() |
๐งชRule has been in preview since 0.9.2 |
| PT030 | pytest-warns-too-broad | pytest.warns({warning}) is too broad, set the match parameter or use a more specific warning |
Rule has been stable since 0.12.0 |
| PT031 | pytest-warns-with-multiple-statements | pytest.warns() block should contain a single simple statement |
Rule has been stable since 0.12.0 |
flake8-quotes (Q)
For more, see flake8-quotes on PyPI.
For related settings, see flake8-quotes.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| Q000 | bad-quotes-inline-string | Single quotes found but double quotes preferred | Rule has been stable since v0.0.88๐ ๏ธAutomatic fix available |
| Q001 | bad-quotes-multiline-string | Single quote multiline found but double quotes preferred | Rule has been stable since v0.0.88๐ ๏ธAutomatic fix available |
| Q002 | bad-quotes-docstring | Single quote docstring found but double quotes preferred | Rule has been stable since v0.0.88๐ ๏ธAutomatic fix available |
| Q003 | avoidable-escaped-quote | Change outer quotes to avoid escaping inner quotes | Rule has been stable since v0.0.88๐ ๏ธAutomatic fix available |
| Q004 | unnecessary-escaped-quote | Unnecessary escape on inner quote character | Rule has been stable since v0.2.0๐ ๏ธAutomatic fix available |
flake8-raise (RSE)
For more, see flake8-raise on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| RSE102 | unnecessary-paren-on-raise-exception | Unnecessary parentheses on raised exception | Rule has been stable since v0.0.239๐ ๏ธAutomatic fix available |
flake8-return (RET)
For more, see flake8-return on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| RET501 | unnecessary-return-none | Do not explicitly return None in function if it is the only possible return value |
Rule has been stable since v0.0.154๐ ๏ธAutomatic fix available |
| RET502 | implicit-return-value | Do not implicitly return None in function able to return non-None value |
Rule has been stable since v0.0.154๐ ๏ธAutomatic fix available |
| RET503 | implicit-return | Missing explicit return at the end of function able to return non-None value |
Rule has been stable since v0.0.154๐ ๏ธAutomatic fix available |
| RET504 | unnecessary-assign | Unnecessary assignment to {name} before return statement |
Rule has been stable since v0.0.154๐ ๏ธAutomatic fix available |
| RET505 | superfluous-else-return | Unnecessary {branch} after return statement |
Rule has been stable since v0.0.154๐ ๏ธAutomatic fix available |
| RET506 | superfluous-else-raise | Unnecessary {branch} after raise statement |
Rule has been stable since v0.0.154๐ ๏ธAutomatic fix available |
| RET507 | superfluous-else-continue | Unnecessary {branch} after continue statement |
Rule has been stable since v0.0.154๐ ๏ธAutomatic fix available |
| RET508 | superfluous-else-break | Unnecessary {branch} after break statement |
Rule has been stable since v0.0.154๐ ๏ธAutomatic fix available |
flake8-self (SLF)
For more, see flake8-self on PyPI.
For related settings, see flake8-self.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| SLF001 | private-member-access | Private member accessed: {access} |
Rule has been stable since v0.0.240 |
flake8-simplify (SIM)
For more, see flake8-simplify on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| SIM101 | duplicate-isinstance-call | Multiple isinstance calls for {name}, merge into a single call |
Rule has been stable since v0.0.212๐ ๏ธAutomatic fix available |
| SIM102 | collapsible-if | Use a single if statement instead of nested if statements |
Rule has been stable since v0.0.211๐ ๏ธAutomatic fix available |
| SIM103 | needless-bool | Return the condition {condition} directly |
Rule has been stable since v0.0.214๐ ๏ธAutomatic fix available |
| SIM105 | suppressible-exception | Use contextlib.suppress({exception}) instead of try-except-pass |
Rule has been stable since v0.0.211๐ ๏ธAutomatic fix available |
| SIM107 | return-in-try-except-finally | Don't use return in try-except and finally |
Rule has been stable since v0.0.211 |
| SIM108 | if-else-block-instead-of-if-exp | Use ternary operator {contents} instead of if-else-block |
Rule has been stable since v0.0.213๐ ๏ธAutomatic fix available |
| SIM109 | compare-with-tuple | Use {replacement} instead of multiple equality comparisons |
Rule has been stable since v0.0.213๐ ๏ธAutomatic fix available |
| SIM110 | reimplemented-builtin | Use {replacement} instead of for loop |
Rule has been stable since v0.0.211๐ ๏ธAutomatic fix available |
| SIM112 | uncapitalized-environment-variables | Use capitalized environment variable {expected} instead of {actual} |
Rule has been stable since v0.0.218๐ ๏ธAutomatic fix available |
| SIM113 | enumerate-for-loop | Use enumerate() for index variable {index} in for loop |
Rule has been stable since v0.2.0 |
| SIM114 | if-with-same-arms | Combine if branches using logical or operator |
Rule has been stable since v0.0.246๐ ๏ธAutomatic fix available |
| SIM115 | open-file-with-context-handler | Use a context manager for opening files | Rule has been stable since v0.0.219 |
| SIM116 | if-else-block-instead-of-dict-lookup | Use a dictionary instead of consecutive if statements |
Rule has been stable since v0.0.250 |
| SIM117 | multiple-with-statements | Use a single with statement with multiple contexts instead of nested with statements |
Rule has been stable since v0.0.211๐ ๏ธAutomatic fix available |
| SIM118 | in-dict-keys | Use key {operator} dict instead of key {operator} dict.keys() |
Rule has been stable since v0.0.176๐ ๏ธAutomatic fix available |
| SIM201 | negate-equal-op | Use {left} != {right} instead of not {left} == {right} |
Rule has been stable since v0.0.213๐ ๏ธAutomatic fix available |
| SIM202 | negate-not-equal-op | Use {left} == {right} instead of not {left} != {right} |
Rule has been stable since v0.0.213๐ ๏ธAutomatic fix available |
| SIM208 | double-negation | Use {expr} instead of not (not {expr}) |
Rule has been stable since v0.0.213๐ ๏ธAutomatic fix available |
| SIM210 | if-expr-with-true-false | Remove unnecessary True if ... else False |
Rule has been stable since v0.0.214๐ ๏ธAutomatic fix available |
| SIM211 | if-expr-with-false-true | Use not ... instead of False if ... else True |
Rule has been stable since v0.0.214๐ ๏ธAutomatic fix available |
| 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} |
Rule has been stable since v0.0.214๐ ๏ธAutomatic fix available |
| SIM220 | expr-and-not-expr | Use False instead of {name} and not {name} |
Rule has been stable since v0.0.211๐ ๏ธAutomatic fix available |
| SIM221 | expr-or-not-expr | Use True instead of {name} or not {name} |
Rule has been stable since v0.0.211๐ ๏ธAutomatic fix available |
| SIM222 | expr-or-true | Use {expr} instead of {replaced} |
Rule has been stable since v0.0.208๐ ๏ธAutomatic fix available |
| SIM223 | expr-and-false | Use {expr} instead of {replaced} |
Rule has been stable since v0.0.208๐ ๏ธAutomatic fix available |
| SIM300 | yoda-conditions | Yoda condition detected | Rule has been stable since v0.0.207๐ ๏ธAutomatic fix available |
| SIM401 | if-else-block-instead-of-dict-get | Use {contents} instead of an if block |
Rule has been stable since v0.0.219๐ ๏ธAutomatic fix available |
| SIM905 | split-static-string | Consider using a list literal instead of str.{} |
Rule has been stable since 0.10.0๐ ๏ธAutomatic fix available |
| SIM910 | dict-get-with-none-default | Use {expected} instead of {actual} |
Rule has been stable since v0.0.261๐ ๏ธAutomatic fix available |
| SIM911 | zip-dict-keys-and-values | Use {expected} instead of {actual} |
Rule has been stable since v0.2.0๐ ๏ธAutomatic fix available |
flake8-slots (SLOT)
For more, see flake8-slots on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| SLOT000 | no-slots-in-str-subclass | Subclasses of str should define __slots__ |
Rule has been stable since v0.0.273 |
| SLOT001 | no-slots-in-tuple-subclass | Subclasses of tuple should define __slots__ |
Rule has been stable since v0.0.273 |
| SLOT002 | no-slots-in-namedtuple-subclass | Subclasses of {namedtuple_kind} should define __slots__ |
Rule has been stable since v0.0.273 |
flake8-tidy-imports (TID)
For more, see flake8-tidy-imports on PyPI.
For related settings, see flake8-tidy-imports.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| TID251 | banned-api | {name} is banned: {message} |
Rule has been stable since v0.0.201 |
| TID252 | relative-imports | Prefer absolute imports over relative imports from parent modules | Rule has been stable since v0.0.169๐ ๏ธAutomatic fix available |
| TID253 | banned-module-level-imports | {name} is banned at the module level |
Rule has been stable since v0.0.285 |
| TID254 | lazy-import-mismatch | {name} should be imported lazily |
๐งชRule has been in preview since 0.15.6๐ ๏ธAutomatic fix available |
flake8-todos (TD)
For more, see flake8-todos on GitHub.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| TD001 | invalid-todo-tag | Invalid TODO tag: {tag} |
Rule has been stable since v0.0.269 |
| TD002 | missing-todo-author | Missing author in TODO; try: # TODO(<author_name>): ... or # TODO @<author_name>: ... |
Rule has been stable since v0.0.269 |
| TD003 | missing-todo-link | Missing issue link for this TODO | Rule has been stable since v0.0.269 |
| TD004 | missing-todo-colon | Missing colon in TODO | Rule has been stable since v0.0.269 |
| TD005 | missing-todo-description | Missing issue description after TODO |
Rule has been stable since v0.0.269 |
| TD006 | invalid-todo-capitalization | Invalid TODO capitalization: {tag} should be TODO |
Rule has been stable since v0.0.269๐ ๏ธAutomatic fix available |
| TD007 | missing-space-after-todo-colon | Missing space after colon in TODO | Rule has been stable since v0.0.269 |
flake8-type-checking (TC)
For more, see flake8-type-checking on PyPI.
For related settings, see flake8-type-checking.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| TC001 | typing-only-first-party-import | Move application import {} into a type-checking block |
Rule has been stable since 0.8.0๐ ๏ธAutomatic fix available |
| TC002 | typing-only-third-party-import | Move third-party import {} into a type-checking block |
Rule has been stable since 0.8.0๐ ๏ธAutomatic fix available |
| TC003 | typing-only-standard-library-import | Move standard library import {} into a type-checking block |
Rule has been stable since 0.8.0๐ ๏ธAutomatic fix available |
| TC004 | runtime-import-in-type-checking-block | Move import {qualified_name} out of type-checking block. Import is used for more than type hinting. |
Rule has been stable since 0.8.0๐ ๏ธAutomatic fix available |
| TC005 | empty-type-checking-block | Found empty type-checking block | Rule has been stable since 0.8.0๐ ๏ธAutomatic fix available |
| TC006 | runtime-cast-value | Add quotes to type expression in typing.cast() |
Rule has been stable since 0.10.0๐ ๏ธAutomatic fix available |
| TC007 | unquoted-type-alias | Add quotes to type alias | Rule has been stable since 0.10.0๐ ๏ธAutomatic fix available |
| TC008 | quoted-type-alias | Remove quotes from type alias | ๐งชRule has been in preview since 0.8.1๐ ๏ธAutomatic fix available |
| TC010 | runtime-string-union | Invalid string member in X | Y-style union type |
Rule has been stable since 0.8.0 |
flake8-unused-arguments (ARG)
For more, see flake8-unused-arguments on PyPI.
For related settings, see flake8-unused-arguments.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| ARG001 | unused-function-argument | Unused function argument: {name} |
Rule has been stable since v0.0.168 |
| ARG002 | unused-method-argument | Unused method argument: {name} |
Rule has been stable since v0.0.168 |
| ARG003 | unused-class-method-argument | Unused class method argument: {name} |
Rule has been stable since v0.0.168 |
| ARG004 | unused-static-method-argument | Unused static method argument: {name} |
Rule has been stable since v0.0.168 |
| ARG005 | unused-lambda-argument | Unused lambda argument: {name} |
Rule has been stable since v0.0.168 |
flake8-use-pathlib (PTH)
For more, see flake8-use-pathlib on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| PTH100 | os-path-abspath | os.path.abspath() should be replaced by Path.resolve() |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| PTH101 | os-chmod | os.chmod() should be replaced by Path.chmod() |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| PTH102 | os-mkdir | os.mkdir() should be replaced by Path.mkdir() |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| PTH103 | os-makedirs | os.makedirs() should be replaced by Path.mkdir(parents=True) |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| PTH104 | os-rename | os.rename() should be replaced by Path.rename() |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| PTH105 | os-replace | os.replace() should be replaced by Path.replace() |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| PTH106 | os-rmdir | os.rmdir() should be replaced by Path.rmdir() |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| PTH107 | os-remove | os.remove() should be replaced by Path.unlink() |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| PTH108 | os-unlink | os.unlink() should be replaced by Path.unlink() |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| PTH109 | os-getcwd | os.getcwd() should be replaced by Path.cwd() |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| PTH110 | os-path-exists | os.path.exists() should be replaced by Path.exists() |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| PTH111 | os-path-expanduser | os.path.expanduser() should be replaced by Path.expanduser() |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| PTH112 | os-path-isdir | os.path.isdir() should be replaced by Path.is_dir() |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| PTH113 | os-path-isfile | os.path.isfile() should be replaced by Path.is_file() |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| PTH114 | os-path-islink | os.path.islink() should be replaced by Path.is_symlink() |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| PTH115 | os-readlink | os.readlink() should be replaced by Path.readlink() |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| PTH116 | os-stat | os.stat() should be replaced by Path.stat(), Path.owner(), or Path.group() |
Rule has been stable since v0.0.231 |
| PTH117 | os-path-isabs | os.path.isabs() should be replaced by Path.is_absolute() |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| PTH118 | os-path-join | os.{module}.join() should be replaced by Path with / operator |
Rule has been stable since v0.0.231 |
| PTH119 | os-path-basename | os.path.basename() should be replaced by Path.name |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| PTH120 | os-path-dirname | os.path.dirname() should be replaced by Path.parent |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| PTH121 | os-path-samefile | os.path.samefile() should be replaced by Path.samefile() |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| PTH122 | os-path-splitext | os.path.splitext() should be replaced by Path.suffix, Path.stem, and Path.parent |
Rule has been stable since v0.0.231 |
| PTH123 | builtin-open | open() should be replaced by Path.open() |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| PTH124 | py-path | py.path is in maintenance mode, use pathlib instead |
Rule has been stable since v0.0.231 |
| PTH201 | path-constructor-current-directory | Do not pass the current directory explicitly to Path |
Rule has been stable since v0.0.279๐ ๏ธAutomatic fix available |
| PTH202 | os-path-getsize | os.path.getsize should be replaced by Path.stat().st_size |
Rule has been stable since v0.0.279๐ ๏ธAutomatic fix available |
| PTH203 | os-path-getatime | os.path.getatime should be replaced by Path.stat().st_atime |
Rule has been stable since v0.0.279๐ ๏ธAutomatic fix available |
| PTH204 | os-path-getmtime | os.path.getmtime should be replaced by Path.stat().st_mtime |
Rule has been stable since v0.0.279๐ ๏ธAutomatic fix available |
| PTH205 | os-path-getctime | os.path.getctime should be replaced by Path.stat().st_ctime |
Rule has been stable since v0.0.279๐ ๏ธAutomatic fix available |
| PTH206 | os-sep-split | Replace .split(os.sep) with Path.parts |
Rule has been stable since v0.0.281 |
| PTH207 | glob | Replace {function} with Path.glob or Path.rglob |
Rule has been stable since v0.0.281 |
| PTH208 | os-listdir | Use pathlib.Path.iterdir() instead. |
Rule has been stable since 0.10.0 |
| PTH210 | invalid-pathlib-with-suffix | Invalid suffix passed to .with_suffix() |
Rule has been stable since 0.10.0๐ ๏ธAutomatic fix available |
| PTH211 | os-symlink | os.symlink should be replaced by Path.symlink_to |
Rule has been stable since 0.13.0๐ ๏ธAutomatic fix available |
flynt (FLY)
For more, see flynt on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| FLY002 | static-join-to-f-string | Consider {expression} instead of string join |
Rule has been stable since v0.0.266๐ ๏ธAutomatic fix available |
isort (I)
For more, see isort on PyPI.
For related settings, see isort.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| I001 | unsorted-imports | Import block is un-sorted or un-formatted | Rule has been stable since v0.0.110๐ ๏ธAutomatic fix available |
| I002 | missing-required-import | Missing required import: {name} |
Rule has been stable since v0.0.218๐ ๏ธAutomatic fix available |
mccabe (C90)
For more, see mccabe on PyPI.
For related settings, see mccabe.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| C901 | complex-structure | {name} is too complex ({complexity} > {max_complexity}) |
Rule has been stable since v0.0.127 |
NumPy-specific rules (NPY)
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| NPY001 | numpy-deprecated-type-alias | Type alias np.{type_name} is deprecated, replace with builtin type |
Rule has been stable since v0.0.247๐ ๏ธAutomatic fix available |
| NPY002 | numpy-legacy-random | Replace legacy np.random.{method_name} call with np.random.Generator |
Rule has been stable since v0.0.248 |
| NPY003 | numpy-deprecated-function | np.{existing} is deprecated; use np.{replacement} instead |
Rule has been stable since v0.0.276๐ ๏ธAutomatic fix available |
| NPY201 | numpy2-deprecation | np.{existing} will be removed in NumPy 2.0. {migration_guide} |
Rule has been stable since v0.2.0๐ ๏ธAutomatic fix available |
pandas-vet (PD)
For more, see pandas-vet on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| PD002 | pandas-use-of-inplace-argument | inplace=True should be avoided; it has inconsistent behavior |
Rule has been stable since v0.0.188๐ ๏ธAutomatic fix available |
| PD003 | pandas-use-of-dot-is-null | .isna is preferred to .isnull; functionality is equivalent |
Rule has been stable since v0.0.188 |
| PD004 | pandas-use-of-dot-not-null | .notna is preferred to .notnull; functionality is equivalent |
Rule has been stable since v0.0.188 |
| PD007 | pandas-use-of-dot-ix | .ix is deprecated; use more explicit .loc or .iloc |
Rule has been stable since v0.0.188 |
| PD008 | pandas-use-of-dot-at | Use .loc instead of .at. If speed is important, use NumPy. |
Rule has been stable since v0.0.188 |
| PD009 | pandas-use-of-dot-iat | Use .iloc instead of .iat. If speed is important, use NumPy. |
Rule has been stable since v0.0.188 |
| PD010 | pandas-use-of-dot-pivot-or-unstack | .pivot_table is preferred to .pivot or .unstack; provides same functionality |
Rule has been stable since v0.0.188 |
| PD011 | pandas-use-of-dot-values | Use .to_numpy() or .array instead of .values |
Rule has been stable since v0.0.188 |
| PD012 | pandas-use-of-dot-read-table | Use .read_csv instead of .read_table to read CSV files |
Rule has been stable since v0.0.188 |
| PD013 | pandas-use-of-dot-stack | .melt is preferred to .stack; provides same functionality |
Rule has been stable since v0.0.188 |
| PD015 | pandas-use-of-pd-merge | Use .merge method instead of pd.merge function. They have equivalent functionality. |
Rule has been stable since v0.0.188 |
| PD101 | pandas-nunique-constant-series-check | Using series.nunique() for checking that a series is constant is inefficient |
Rule has been stable since v0.0.279 |
| PD901 | pandas-df-variable-name | Avoid using the generic variable name df for DataFrames |
โRule was removed in 0.13.0 |
pep8-naming (N)
For more, see pep8-naming on PyPI.
For related settings, see pep8-naming.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| N801 | invalid-class-name | Class name {name} should use CapWords convention |
Rule has been stable since v0.0.77 |
| N802 | invalid-function-name | Function name {name} should be lowercase |
Rule has been stable since v0.0.77 |
| N803 | invalid-argument-name | Argument name {name} should be lowercase |
Rule has been stable since v0.0.77 |
| N804 | invalid-first-argument-name-for-class-method | First argument of a class method should be named cls |
Rule has been stable since v0.0.77๐ ๏ธAutomatic fix available |
| N805 | invalid-first-argument-name-for-method | First argument of a method should be named self |
Rule has been stable since v0.0.77๐ ๏ธAutomatic fix available |
| N806 | non-lowercase-variable-in-function | Variable {name} in function should be lowercase |
Rule has been stable since v0.0.89 |
| N807 | dunder-function-name | Function name should not start and end with __ |
Rule has been stable since v0.0.82 |
| N811 | constant-imported-as-non-constant | Constant {name} imported as non-constant {asname} |
Rule has been stable since v0.0.82 |
| N812 | lowercase-imported-as-non-lowercase | Lowercase {name} imported as non-lowercase {asname} |
Rule has been stable since v0.0.82 |
| N813 | camelcase-imported-as-lowercase | Camelcase {name} imported as lowercase {asname} |
Rule has been stable since v0.0.82 |
| N814 | camelcase-imported-as-constant | Camelcase {name} imported as constant {asname} |
Rule has been stable since v0.0.82 |
| N815 | mixed-case-variable-in-class-scope | Variable {name} in class scope should not be mixedCase |
Rule has been stable since v0.0.89 |
| N816 | mixed-case-variable-in-global-scope | Variable {name} in global scope should not be mixedCase |
Rule has been stable since v0.0.89 |
| N817 | camelcase-imported-as-acronym | CamelCase {name} imported as acronym {asname} |
Rule has been stable since v0.0.82 |
| N818 | error-suffix-on-exception-name | Exception name {name} should be named with an Error suffix |
Rule has been stable since v0.0.89 |
| N999 | invalid-module-name | Invalid module name: '{name}' | Rule has been stable since v0.0.248 |
Perflint (PERF)
For more, see Perflint on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| PERF101 | unnecessary-list-cast | Do not cast an iterable to list before iterating over it |
Rule has been stable since v0.0.276๐ ๏ธAutomatic fix available |
| PERF102 | incorrect-dict-iterator | When using only the {subset} of a dict use the {subset}() method |
Rule has been stable since v0.0.273๐ ๏ธAutomatic fix available |
| PERF203 | try-except-in-loop | try-except within a loop incurs performance overhead |
Rule has been stable since v0.0.276 |
| PERF401 | manual-list-comprehension | Use {message_str} to create a transformed list | Rule has been stable since v0.0.276๐ ๏ธAutomatic fix available |
| PERF402 | manual-list-copy | Use list or list.copy to create a copy of a list |
Rule has been stable since v0.0.276 |
| PERF403 | manual-dict-comprehension | Use a dictionary comprehension instead of {modifier} for-loop | Rule has been stable since 0.5.0๐ ๏ธAutomatic fix available |
pycodestyle (E, W)
For more, see pycodestyle on PyPI.
For related settings, see pycodestyle.
Error (E)
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| E101 | mixed-spaces-and-tabs | Indentation contains mixed spaces and tabs | Rule has been stable since v0.0.229 |
| E111 | indentation-with-invalid-multiple | Indentation is not a multiple of {indent_width} | ๐งชRule has been in preview since v0.0.269 |
| E112 | no-indented-block | Expected an indented block | ๐งชRule has been in preview since v0.0.269 |
| E113 | unexpected-indentation | Unexpected indentation | ๐งชRule has been in preview since v0.0.269 |
| E114 | indentation-with-invalid-multiple-comment | Indentation is not a multiple of {indent_width} (comment) | ๐งชRule has been in preview since v0.0.269 |
| E115 | no-indented-block-comment | Expected an indented block (comment) | ๐งชRule has been in preview since v0.0.269 |
| E116 | unexpected-indentation-comment | Unexpected indentation (comment) | ๐งชRule has been in preview since v0.0.269 |
| E117 | over-indented | Over-indented (comment) | ๐งชRule has been in preview since v0.0.269 |
| E201 | whitespace-after-open-bracket | Whitespace after '{symbol}' | ๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E202 | whitespace-before-close-bracket | Whitespace before '{symbol}' | ๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E203 | whitespace-before-punctuation | Whitespace before '{symbol}' | ๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E204 | whitespace-after-decorator | Whitespace after decorator | ๐งชRule has been in preview since 0.5.1๐ ๏ธAutomatic fix available |
| E211 | whitespace-before-parameters | Whitespace before '{bracket}' | ๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E221 | multiple-spaces-before-operator | Multiple spaces before operator | ๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E222 | multiple-spaces-after-operator | Multiple spaces after operator | ๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E223 | tab-before-operator | Tab before operator | ๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E224 | tab-after-operator | Tab after operator | ๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E225 | missing-whitespace-around-operator | Missing whitespace around operator | ๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E226 | missing-whitespace-around-arithmetic-operator | Missing whitespace around arithmetic operator | ๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E227 | missing-whitespace-around-bitwise-or-shift-operator | Missing whitespace around bitwise or shift operator | ๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E228 | missing-whitespace-around-modulo-operator | Missing whitespace around modulo operator | ๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E231 | missing-whitespace | Missing whitespace after {} | ๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E241 | multiple-spaces-after-comma | Multiple spaces after comma | ๐งชRule has been in preview since v0.0.281๐ ๏ธAutomatic fix available |
| E242 | tab-after-comma | Tab after comma | ๐งชRule has been in preview since v0.0.281๐ ๏ธAutomatic fix available |
| E251 | unexpected-spaces-around-keyword-parameter-equals | Unexpected spaces around keyword / parameter equals | ๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E252 | missing-whitespace-around-parameter-equals | Missing whitespace around parameter equals | ๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E261 | too-few-spaces-before-inline-comment | Insert at least two spaces before an inline comment | ๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E262 | no-space-after-inline-comment | Inline comment should start with # |
๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E265 | no-space-after-block-comment | Block comment should start with # |
๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E266 | multiple-leading-hashes-for-block-comment | Too many leading # before block comment |
๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E271 | multiple-spaces-after-keyword | Multiple spaces after keyword | ๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E272 | multiple-spaces-before-keyword | Multiple spaces before keyword | ๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E273 | tab-after-keyword | Tab after keyword | ๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E274 | tab-before-keyword | Tab before keyword | ๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E275 | missing-whitespace-after-keyword | Missing whitespace after keyword | ๐งชRule has been in preview since v0.0.269๐ ๏ธAutomatic fix available |
| E301 | blank-line-between-methods | Expected {BLANK_LINES_NESTED_LEVEL:?} blank line, found 0 | ๐งชRule has been in preview since v0.2.2๐ ๏ธAutomatic fix available |
| E302 | blank-lines-top-level | Expected {expected_blank_lines:?} blank lines, found {actual_blank_lines} | ๐งชRule has been in preview since v0.2.2๐ ๏ธAutomatic fix available |
| E303 | too-many-blank-lines | Too many blank lines ({actual_blank_lines}) | ๐งชRule has been in preview since v0.2.2๐ ๏ธAutomatic fix available |
| E304 | blank-line-after-decorator | Blank lines found after function decorator ({lines}) | ๐งชRule has been in preview since v0.2.2๐ ๏ธAutomatic fix available |
| E305 | blank-lines-after-function-or-class | Expected 2 blank lines after class or function definition, found ({blank_lines}) | ๐งชRule has been in preview since v0.2.2๐ ๏ธAutomatic fix available |
| E306 | blank-lines-before-nested-definition | Expected 1 blank line before a nested definition, found 0 | ๐งชRule has been in preview since v0.2.2๐ ๏ธAutomatic fix available |
| E401 | multiple-imports-on-one-line | Multiple imports on one line | Rule has been stable since v0.0.191๐ ๏ธAutomatic fix available |
| E402 | module-import-not-at-top-of-file | Module level import not at top of cell | Rule has been stable since v0.0.28 |
| E501 | line-too-long | Line too long ({width} > {limit}) | Rule has been stable since v0.0.18 |
| E502 | redundant-backslash | Redundant backslash | ๐งชRule has been in preview since v0.3.3๐ ๏ธAutomatic fix available |
| E701 | multiple-statements-on-one-line-colon | Multiple statements on one line (colon) | Rule has been stable since v0.0.245 |
| E702 | multiple-statements-on-one-line-semicolon | Multiple statements on one line (semicolon) | Rule has been stable since v0.0.245 |
| E703 | useless-semicolon | Statement ends with an unnecessary semicolon | Rule has been stable since v0.0.245๐ ๏ธAutomatic fix available |
| E711 | none-comparison | Comparison to None should be cond is None |
Rule has been stable since v0.0.28๐ ๏ธAutomatic fix available |
| E712 | true-false-comparison | Avoid equality comparisons to True; use {cond}: for truth checks |
Rule has been stable since v0.0.28๐ ๏ธAutomatic fix available |
| E713 | not-in-test | Test for membership should be not in |
Rule has been stable since v0.0.28๐ ๏ธAutomatic fix available |
| E714 | not-is-test | Test for object identity should be is not |
Rule has been stable since v0.0.28๐ ๏ธAutomatic fix available |
| E721 | type-comparison | Use is and is not for type comparisons, or isinstance() for isinstance checks |
Rule has been stable since v0.0.39 |
| E722 | bare-except | Do not use bare except |
Rule has been stable since v0.0.36 |
| E731 | lambda-assignment | Do not assign a lambda expression, use a def |
Rule has been stable since v0.0.28๐ ๏ธAutomatic fix available |
| E741 | ambiguous-variable-name | Ambiguous variable name: {name} |
Rule has been stable since v0.0.34 |
| E742 | ambiguous-class-name | Ambiguous class name: {name} |
Rule has been stable since v0.0.35 |
| E743 | ambiguous-function-name | Ambiguous function name: {name} |
Rule has been stable since v0.0.35 |
| E902 | io-error | {message} | Rule has been stable since v0.0.28 |
| E999 | syntax-error | SyntaxError | โRule was removed in 0.8.0 |
Warning (W)
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| W191 | tab-indentation | Indentation contains tabs | Rule has been stable since v0.0.254 |
| W291 | trailing-whitespace | Trailing whitespace | Rule has been stable since v0.0.253๐ ๏ธAutomatic fix available |
| W292 | missing-newline-at-end-of-file | No newline at end of file | Rule has been stable since v0.0.61๐ ๏ธAutomatic fix available |
| W293 | blank-line-with-whitespace | Blank line contains whitespace | Rule has been stable since v0.0.253๐ ๏ธAutomatic fix available |
| W391 | too-many-newlines-at-end-of-file | Too many newlines at end of {domain} | ๐งชRule has been in preview since v0.3.3๐ ๏ธAutomatic fix available |
| W505 | doc-line-too-long | Doc line too long ({width} > {limit}) | Rule has been stable since v0.0.219 |
| W605 | invalid-escape-sequence | Invalid escape sequence: \{ch} |
Rule has been stable since v0.0.85๐ ๏ธAutomatic fix available |
pydoclint (DOC)
For more, see pydoclint on PyPI.
For related settings, see pydoclint.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| DOC102 | docstring-extraneous-parameter | Documented parameter {id} is not in the function's signature |
๐งชRule has been in preview since 0.14.1 |
| DOC201 | docstring-missing-returns | return is not documented in docstring |
๐งชRule has been in preview since 0.5.6 |
| DOC202 | docstring-extraneous-returns | Docstring should not have a returns section because the function doesn't return anything | ๐งชRule has been in preview since 0.5.6 |
| DOC402 | docstring-missing-yields | yield is not documented in docstring |
๐งชRule has been in preview since 0.5.7 |
| DOC403 | docstring-extraneous-yields | Docstring has a "Yields" section but the function doesn't yield anything | ๐งชRule has been in preview since 0.5.7 |
| DOC501 | docstring-missing-exception | Raised exception {id} missing from docstring |
๐งชRule has been in preview since 0.5.5 |
| DOC502 | docstring-extraneous-exception | Raised exception is not explicitly raised: {id} |
๐งชRule has been in preview since 0.5.5 |
pydocstyle (D)
For more, see pydocstyle on PyPI.
For related settings, see pydocstyle.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| D100 | undocumented-public-module | Missing docstring in public module | Rule has been stable since v0.0.70 |
| D101 | undocumented-public-class | Missing docstring in public class | Rule has been stable since v0.0.70 |
| D102 | undocumented-public-method | Missing docstring in public method | Rule has been stable since v0.0.70 |
| D103 | undocumented-public-function | Missing docstring in public function | Rule has been stable since v0.0.70 |
| D104 | undocumented-public-package | Missing docstring in public package | Rule has been stable since v0.0.70 |
| D105 | undocumented-magic-method | Missing docstring in magic method | Rule has been stable since v0.0.70 |
| D106 | undocumented-public-nested-class | Missing docstring in public nested class | Rule has been stable since v0.0.70 |
| D107 | undocumented-public-init | Missing docstring in __init__ |
Rule has been stable since v0.0.70 |
| D200 | unnecessary-multiline-docstring | One-line docstring should fit on one line | Rule has been stable since v0.0.68๐ ๏ธAutomatic fix available |
| D201 | blank-line-before-function | No blank lines allowed before function docstring (found {num_lines}) | Rule has been stable since v0.0.70๐ ๏ธAutomatic fix available |
| D202 | blank-line-after-function | No blank lines allowed after function docstring (found {num_lines}) | Rule has been stable since v0.0.70๐ ๏ธAutomatic fix available |
| D203 | incorrect-blank-line-before-class | 1 blank line required before class docstring | Rule has been stable since v0.0.70๐ ๏ธAutomatic fix available |
| D204 | incorrect-blank-line-after-class | 1 blank line required after class docstring | Rule has been stable since v0.0.70๐ ๏ธAutomatic fix available |
| D205 | missing-blank-line-after-summary | 1 blank line required between summary line and description | Rule has been stable since v0.0.68๐ ๏ธAutomatic fix available |
| D206 | docstring-tab-indentation | Docstring should be indented with spaces, not tabs | Rule has been stable since v0.0.75 |
| D207 | under-indentation | Docstring is under-indented | Rule has been stable since v0.0.75๐ ๏ธAutomatic fix available |
| D208 | over-indentation | Docstring is over-indented | Rule has been stable since v0.0.75๐ ๏ธAutomatic fix available |
| D209 | new-line-after-last-paragraph | Multi-line docstring closing quotes should be on a separate line | Rule has been stable since v0.0.68๐ ๏ธAutomatic fix available |
| D210 | surrounding-whitespace | No whitespaces allowed surrounding docstring text | Rule has been stable since v0.0.68๐ ๏ธAutomatic fix available |
| D211 | blank-line-before-class | No blank lines allowed before class docstring | Rule has been stable since v0.0.70๐ ๏ธAutomatic fix available |
| D212 | multi-line-summary-first-line | Multi-line docstring summary should start at the first line | Rule has been stable since v0.0.69๐ ๏ธAutomatic fix available |
| D213 | multi-line-summary-second-line | Multi-line docstring summary should start at the second line | Rule has been stable since v0.0.69๐ ๏ธAutomatic fix available |
| D214 | overindented-section | Section is over-indented ("{name}") | Rule has been stable since v0.0.73๐ ๏ธAutomatic fix available |
| D215 | overindented-section-underline | Section underline is over-indented ("{name}") | Rule has been stable since v0.0.73๐ ๏ธAutomatic fix available |
| D300 | triple-single-quotes | Use triple double quotes """ |
Rule has been stable since v0.0.69๐ ๏ธAutomatic fix available |
| D301 | escape-sequence-in-docstring | Use r""" if any backslashes in a docstring |
Rule has been stable since v0.0.172๐ ๏ธAutomatic fix available |
| D400 | missing-trailing-period | First line should end with a period | Rule has been stable since v0.0.68๐ ๏ธAutomatic fix available |
| D401 | non-imperative-mood | First line of docstring should be in imperative mood: "{first_line}" | Rule has been stable since v0.0.228 |
| D402 | signature-in-docstring | First line should not be the function's signature | Rule has been stable since v0.0.70 |
| D403 | first-word-uncapitalized | First word of the docstring should be capitalized: {} -> {} |
Rule has been stable since v0.0.69๐ ๏ธAutomatic fix available |
| D404 | docstring-starts-with-this | First word of the docstring should not be "This" | Rule has been stable since v0.0.71 |
| D405 | non-capitalized-section-name | Section name should be properly capitalized ("{name}") | Rule has been stable since v0.0.71๐ ๏ธAutomatic fix available |
| D406 | missing-new-line-after-section-name | Section name should end with a newline ("{name}") | Rule has been stable since v0.0.71๐ ๏ธAutomatic fix available |
| D407 | missing-dashed-underline-after-section | Missing dashed underline after section ("{name}") | Rule has been stable since v0.0.71๐ ๏ธAutomatic fix available |
| D408 | missing-section-underline-after-name | Section underline should be in the line following the section's name ("{name}") | Rule has been stable since v0.0.71๐ ๏ธAutomatic fix available |
| D409 | mismatched-section-underline-length | Section underline should match the length of its name ("{name}") | Rule has been stable since v0.0.71๐ ๏ธAutomatic fix available |
| D410 | no-blank-line-after-section | Missing blank line after section ("{name}") | Rule has been stable since v0.0.71๐ ๏ธAutomatic fix available |
| D411 | no-blank-line-before-section | Missing blank line before section ("{name}") | Rule has been stable since v0.0.71๐ ๏ธAutomatic fix available |
| D412 | blank-lines-between-header-and-content | No blank lines allowed between a section header and its content ("{name}") | Rule has been stable since v0.0.71๐ ๏ธAutomatic fix available |
| D413 | missing-blank-line-after-last-section | Missing blank line after last section ("{name}") | Rule has been stable since v0.0.71๐ ๏ธAutomatic fix available |
| D414 | empty-docstring-section | Section has no content ("{name}") | Rule has been stable since v0.0.71 |
| D415 | missing-terminal-punctuation | First line should end with a period, question mark, or exclamation point | Rule has been stable since v0.0.69๐ ๏ธAutomatic fix available |
| D416 | missing-section-name-colon | Section name should end with a colon ("{name}") | Rule has been stable since v0.0.74๐ ๏ธAutomatic fix available |
| D417 | undocumented-param | Missing argument description in the docstring for {definition}: {name} |
Rule has been stable since v0.0.73 |
| D418 | overload-with-docstring | Function decorated with @overload shouldn't contain a docstring |
Rule has been stable since v0.0.71 |
| D419 | empty-docstring | Docstring is empty | Rule has been stable since v0.0.68 |
| D420 | incorrect-section-order | Section "{current}" appears after section "{previous}" but should be before it | ๐งชRule has been in preview since 0.15.3 |
Pyflakes (F)
For more, see Pyflakes on PyPI.
For related settings, see Pyflakes.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| F401 | unused-import | {name} imported but unused; consider using importlib.util.find_spec to test for availability |
Rule has been stable since v0.0.18๐ ๏ธAutomatic fix available |
| F402 | import-shadowed-by-loop-var | Import {name} from {row} shadowed by loop variable |
Rule has been stable since v0.0.44 |
| F403 | undefined-local-with-import-star | from {name} import * used; unable to detect undefined names |
Rule has been stable since v0.0.18 |
| F404 | late-future-import | from __future__ imports must occur at the beginning of the file |
Rule has been stable since v0.0.34 |
| F405 | undefined-local-with-import-star-usage | {name} may be undefined, or defined from star imports |
Rule has been stable since v0.0.44 |
| F406 | undefined-local-with-nested-import-star-usage | from {name} import * only allowed at module level |
Rule has been stable since v0.0.37 |
| F407 | future-feature-not-defined | Future feature {name} is not defined |
Rule has been stable since v0.0.34 |
| F501 | percent-format-invalid-format | %-format string has invalid format string: {message} |
Rule has been stable since v0.0.142 |
| F502 | percent-format-expected-mapping | %-format string expected mapping but got sequence |
Rule has been stable since v0.0.142 |
| F503 | percent-format-expected-sequence | %-format string expected sequence but got mapping |
Rule has been stable since v0.0.142 |
| F504 | percent-format-extra-named-arguments | %-format string has unused named argument(s): {message} |
Rule has been stable since v0.0.142๐ ๏ธAutomatic fix available |
| F505 | percent-format-missing-argument | %-format string is missing argument(s) for placeholder(s): {message} |
Rule has been stable since v0.0.142 |
| F506 | percent-format-mixed-positional-and-named | %-format string has mixed positional and named placeholders |
Rule has been stable since v0.0.142 |
| F507 | percent-format-positional-count-mismatch | %-format string has {wanted} placeholder(s) but {got} substitution(s) |
Rule has been stable since v0.0.142 |
| F508 | percent-format-star-requires-sequence | %-format string * specifier requires sequence |
Rule has been stable since v0.0.142 |
| F509 | percent-format-unsupported-format-character | %-format string has unsupported format character {char} |
Rule has been stable since v0.0.142 |
| F521 | string-dot-format-invalid-format | .format call has invalid format string: {message} |
Rule has been stable since v0.0.138 |
| F522 | string-dot-format-extra-named-arguments | .format call has unused named argument(s): {message} |
Rule has been stable since v0.0.139๐ ๏ธAutomatic fix available |
| F523 | string-dot-format-extra-positional-arguments | .format call has unused arguments at position(s): {message} |
Rule has been stable since v0.0.139๐ ๏ธAutomatic fix available |
| F524 | string-dot-format-missing-arguments | .format call is missing argument(s) for placeholder(s): {message} |
Rule has been stable since v0.0.139 |
| F525 | string-dot-format-mixing-automatic | .format string mixes automatic and manual numbering |
Rule has been stable since v0.0.139 |
| F541 | f-string-missing-placeholders | f-string without any placeholders | Rule has been stable since v0.0.18๐ ๏ธAutomatic fix available |
| F601 | multi-value-repeated-key-literal | Dictionary key literal {name} repeated |
Rule has been stable since v0.0.30๐ ๏ธAutomatic fix available |
| F602 | multi-value-repeated-key-variable | Dictionary key {name} repeated |
Rule has been stable since v0.0.30๐ ๏ธAutomatic fix available |
| F621 | expressions-in-star-assignment | Too many expressions in star-unpacking assignment | Rule has been stable since v0.0.32 |
| F622 | multiple-starred-expressions | Two starred expressions in assignment | Rule has been stable since v0.0.32 |
| F631 | assert-tuple | Assert test is a non-empty tuple, which is always True |
Rule has been stable since v0.0.28 |
| F632 | is-literal | Use == to compare constant literals |
Rule has been stable since v0.0.39๐ ๏ธAutomatic fix available |
| F633 | invalid-print-syntax | Use of >> is invalid with print function |
Rule has been stable since v0.0.39 |
| F634 | if-tuple | If test is a tuple, which is always True |
Rule has been stable since v0.0.18 |
| F701 | break-outside-loop | break outside loop |
Rule has been stable since v0.0.36 |
| F702 | continue-outside-loop | continue not properly in loop |
Rule has been stable since v0.0.36 |
| F704 | yield-outside-function | {keyword} statement outside of a function |
Rule has been stable since v0.0.22 |
| F706 | return-outside-function | return statement outside of a function/method |
Rule has been stable since v0.0.18 |
| F707 | default-except-not-last | An except block as not the last exception handler |
Rule has been stable since v0.0.28 |
| F722 | forward-annotation-syntax-error | Syntax error in forward annotation: {parse_error} | Rule has been stable since v0.0.39 |
| F811 | redefined-while-unused | Redefinition of unused {name} from {row} |
Rule has been stable since v0.0.171๐ ๏ธAutomatic fix available |
| F821 | undefined-name | Undefined name {name}. {tip} |
Rule has been stable since v0.0.20 |
| F822 | undefined-export | Undefined name {name} in __all__ |
Rule has been stable since v0.0.25 |
| F823 | undefined-local | Local variable {name} referenced before assignment |
Rule has been stable since v0.0.24 |
| F841 | unused-variable | Local variable {name} is assigned to but never used |
Rule has been stable since v0.0.22๐ ๏ธAutomatic fix available |
| F842 | unused-annotation | Local variable {name} is annotated but never used |
Rule has been stable since v0.0.172 |
| F901 | raise-not-implemented | raise NotImplemented should be raise NotImplementedError |
Rule has been stable since v0.0.18๐ ๏ธAutomatic fix available |
pygrep-hooks (PGH)
For more, see pygrep-hooks on GitHub.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| PGH001 | eval | No builtin eval() allowed |
โRule was removed in v0.2.0 |
| PGH002 | deprecated-log-warn | warn is deprecated in favor of warning |
โRule was removed in v0.2.0๐ ๏ธAutomatic fix available |
| PGH003 | blanket-type-ignore | Use specific rule codes when ignoring type issues | Rule has been stable since v0.0.187 |
| PGH004 | blanket-noqa | Use specific rule codes when using noqa |
Rule has been stable since v0.0.200๐ ๏ธAutomatic fix available |
| PGH005 | invalid-mock-access | Mock method should be called: {name} |
Rule has been stable since v0.0.266 |
Pylint (PL)
For more, see Pylint on PyPI.
For related settings, see Pylint.
Convention (PLC)
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| PLC0105 | type-name-incorrect-variance | {kind} name "{param_name}" does not reflect its {variance}; consider renaming it to "{replacement_name}" |
Rule has been stable since v0.0.278 |
| PLC0131 | type-bivariance | {kind} cannot be both covariant and contravariant |
Rule has been stable since v0.0.278 |
| PLC0132 | type-param-name-mismatch | {kind} name {param_name} does not match assigned variable name {var_name} |
Rule has been stable since v0.0.277 |
| PLC0205 | single-string-slots | Class __slots__ should be a non-string iterable |
Rule has been stable since v0.0.276 |
| PLC0206 | dict-index-missing-items | Extracting value from dictionary without calling .items() |
Rule has been stable since 0.8.0 |
| PLC0207 | missing-maxsplit-arg | String is split more times than necessary | Rule has been stable since 0.15.0๐ ๏ธAutomatic fix available |
| PLC0208 | iteration-over-set | Use a sequence type instead of a set when iterating over values |
Rule has been stable since v0.0.271๐ ๏ธAutomatic fix available |
| PLC0414 | useless-import-alias | Import alias does not rename original package | Rule has been stable since v0.0.156๐ ๏ธAutomatic fix available |
| PLC0415 | import-outside-top-level | import should be at the top-level of a file |
Rule has been stable since 0.12.0 |
| PLC1802 | len-test | len({expression}) used as condition without comparison |
Rule has been stable since 0.10.0๐ ๏ธAutomatic fix available |
| PLC1901 | compare-to-empty-string | {existing} can be simplified to {replacement} as an empty string is falsey |
๐งชRule has been in preview since v0.0.255 |
| PLC2401 | non-ascii-name | {kind} name {name} contains a non-ASCII character |
Rule has been stable since 0.5.0 |
| PLC2403 | non-ascii-import-name | Module alias {name} contains a non-ASCII character |
Rule has been stable since 0.5.0 |
| PLC2701 | import-private-name | Private name import {name} from external module {module} |
๐งชRule has been in preview since v0.1.14 |
| PLC2801 | unnecessary-dunder-call | Unnecessary dunder call to {method}. {replacement}. |
๐งชRule has been in preview since v0.1.12๐ ๏ธAutomatic fix available |
| PLC3002 | unnecessary-direct-lambda-call | Lambda expression called directly. Execute the expression inline instead. | Rule has been stable since v0.0.153 |
Error (PLE)
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| PLE0100 | yield-in-init | __init__ method is a generator |
Rule has been stable since v0.0.245 |
| PLE0101 | return-in-init | Explicit return in __init__ |
Rule has been stable since v0.0.248 |
| PLE0115 | nonlocal-and-global | Name {name} is both nonlocal and global |
Rule has been stable since 0.5.0 |
| PLE0116 | continue-in-finally | continue not supported inside finally clause |
Rule has been stable since v0.0.257 |
| PLE0117 | nonlocal-without-binding | Nonlocal name {name} found without binding |
Rule has been stable since v0.0.174 |
| PLE0118 | load-before-global-declaration | Name {name} is used prior to global declaration on {row} |
Rule has been stable since v0.0.174 |
| PLE0237 | non-slot-assignment | Attribute {name} is not defined in class's __slots__ |
Rule has been stable since v0.1.15 |
| PLE0241 | duplicate-bases | Duplicate base {base} for class {class} |
Rule has been stable since v0.0.269๐ ๏ธAutomatic fix available |
| PLE0302 | unexpected-special-method-signature | The special method {} expects {}, {} {} given |
Rule has been stable since v0.0.263 |
| PLE0303 | invalid-length-return-type | __len__ does not return a non-negative integer |
Rule has been stable since 0.6.0 |
| PLE0304 | invalid-bool-return-type | __bool__ does not return bool |
๐งชRule has been in preview since v0.3.3 |
| PLE0305 | invalid-index-return-type | __index__ does not return an integer |
Rule has been stable since 0.6.0 |
| PLE0307 | invalid-str-return-type | __str__ does not return str |
Rule has been stable since v0.0.271 |
| PLE0308 | invalid-bytes-return-type | __bytes__ does not return bytes |
Rule has been stable since 0.6.0 |
| PLE0309 | invalid-hash-return-type | __hash__ does not return an integer |
Rule has been stable since 0.6.0 |
| PLE0604 | invalid-all-object | Invalid object in __all__, must contain only strings |
Rule has been stable since v0.0.237 |
| PLE0605 | invalid-all-format | Invalid format for __all__, must be tuple or list |
Rule has been stable since v0.0.237 |
| PLE0643 | potential-index-error | Expression is likely to raise IndexError |
Rule has been stable since 0.5.0 |
| PLE0704 | misplaced-bare-raise | Bare raise statement is not inside an exception handler |
Rule has been stable since 0.5.0 |
| PLE1132 | repeated-keyword-argument | Repeated keyword argument: {duplicate_keyword} |
Rule has been stable since 0.5.0 |
| PLE1141 | dict-iter-missing-items | Unpacking a dictionary in iteration without calling .items() |
๐งชRule has been in preview since v0.3.0๐ ๏ธAutomatic fix available |
| PLE1142 | await-outside-async | await should be used within an async function |
Rule has been stable since v0.0.150 |
| PLE1205 | logging-too-many-args | Too many arguments for logging format string |
Rule has been stable since v0.0.252 |
| PLE1206 | logging-too-few-args | Not enough arguments for logging format string |
Rule has been stable since v0.0.252 |
| PLE1300 | bad-string-format-character | Unsupported format character '{format_char}' | Rule has been stable since v0.0.283 |
| PLE1307 | bad-string-format-type | Format type does not match argument type | Rule has been stable since v0.0.245 |
| PLE1310 | bad-str-strip-call | String {strip} call contains duplicate characters (did you mean {removal}?) |
Rule has been stable since v0.0.242 |
| PLE1507 | invalid-envvar-value | Invalid type for initial os.getenv argument; expected str |
Rule has been stable since v0.0.255 |
| PLE1519 | singledispatch-method | @singledispatch decorator should not be used on methods |
Rule has been stable since 0.6.0๐ ๏ธAutomatic fix available |
| PLE1520 | singledispatchmethod-function | @singledispatchmethod decorator should not be used on non-method functions |
Rule has been stable since 0.6.0๐ ๏ธAutomatic fix available |
| PLE1700 | yield-from-in-async-function | yield from statement in async function; use async for instead |
Rule has been stable since v0.0.271 |
| PLE2502 | bidirectional-unicode | Contains control characters that can permit obfuscated code | Rule has been stable since v0.0.244 |
| PLE2510 | invalid-character-backspace | Invalid unescaped character backspace, use "\b" instead | Rule has been stable since v0.0.257๐ ๏ธAutomatic fix available |
| PLE2512 | invalid-character-sub | Invalid unescaped character SUB, use "\x1a" instead | Rule has been stable since v0.0.257๐ ๏ธAutomatic fix available |
| PLE2513 | invalid-character-esc | Invalid unescaped character ESC, use "\x1b" instead | Rule has been stable since v0.0.257๐ ๏ธAutomatic fix available |
| PLE2514 | invalid-character-nul | Invalid unescaped character NUL, use "\0" instead | Rule has been stable since v0.0.257๐ ๏ธAutomatic fix available |
| PLE2515 | invalid-character-zero-width-space | Invalid unescaped character zero-width-space, use "\u200B" instead | Rule has been stable since v0.0.257๐ ๏ธAutomatic fix available |
| PLE4703 | modified-iterating-set | Iterated set {name} is modified within the for loop |
๐งชRule has been in preview since v0.3.5๐ ๏ธAutomatic fix available |
Refactor (PLR)
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| PLR0124 | comparison-with-itself | Name compared with itself, consider replacing {actual} |
Rule has been stable since v0.0.273 |
| PLR0133 | comparison-of-constant | Two constants compared in a comparison, consider replacing {left_constant} {op} {right_constant} |
Rule has been stable since v0.0.221 |
| PLR0202 | no-classmethod-decorator | Class method defined without decorator | ๐งชRule has been in preview since v0.1.7๐ ๏ธAutomatic fix available |
| PLR0203 | no-staticmethod-decorator | Static method defined without decorator | ๐งชRule has been in preview since v0.1.7๐ ๏ธAutomatic fix available |
| PLR0206 | property-with-parameters | Cannot have defined parameters for properties | Rule has been stable since v0.0.153 |
| PLR0402 | manual-from-import | Use from {module} import {name} in lieu of alias |
Rule has been stable since v0.0.155๐ ๏ธAutomatic fix available |
| PLR0904 | too-many-public-methods | Too many public methods ({methods} > {max_methods}) | ๐งชRule has been in preview since v0.0.290 |
| PLR0911 | too-many-return-statements | Too many return statements ({returns} > {max_returns}) | Rule has been stable since v0.0.242 |
| PLR0912 | too-many-branches | Too many branches ({branches} > {max_branches}) | Rule has been stable since v0.0.242 |
| PLR0913 | too-many-arguments | Too many arguments in function definition ({c_args} > {max_args}) | Rule has been stable since v0.0.238 |
| PLR0914 | too-many-locals | Too many local variables ({current_amount}/{max_amount}) | ๐งชRule has been in preview since v0.1.9 |
| PLR0915 | too-many-statements | Too many statements ({statements} > {max_statements}) | Rule has been stable since v0.0.240 |
| PLR0916 | too-many-boolean-expressions | Too many Boolean expressions ({expressions} > {max_expressions}) | ๐งชRule has been in preview since v0.1.1 |
| PLR0917 | too-many-positional-arguments | Too many positional arguments ({c_pos}/{max_pos}) | ๐งชRule has been in preview since v0.1.7 |
| PLR1701 | repeated-isinstance-calls | Merge isinstance calls: {expression} |
โRule was removed in 0.5.0๐ ๏ธAutomatic fix available |
| PLR1702 | too-many-nested-blocks | Too many nested blocks ({nested_blocks} > {max_nested_blocks}) | ๐งชRule has been in preview since v0.1.15 |
| PLR1704 | redefined-argument-from-local | Redefining argument with the local name {name} |
Rule has been stable since 0.5.0 |
| PLR1706 | and-or-ternary | Consider using if-else expression | โRule was removed in v0.2.0 |
| PLR1708 | stop-iteration-return | Explicit raise StopIteration in generator |
๐งชRule has been in preview since 0.14.3 |
| PLR1711 | useless-return | Useless return statement at end of function |
Rule has been stable since v0.0.257๐ ๏ธAutomatic fix available |
| PLR1712 | swap-with-temporary-variable | Unnecessary temporary variable | ๐งชRule has been in preview since 0.15.3๐ ๏ธAutomatic fix available |
| PLR1714 | repeated-equality-comparison | Consider merging multiple comparisons: {expression}. Use a set if the elements are hashable. |
Rule has been stable since v0.0.279๐ ๏ธAutomatic fix available |
| PLR1716 | boolean-chained-comparison | Contains chained boolean comparison that can be simplified | Rule has been stable since 0.9.0๐ ๏ธAutomatic fix available |
| PLR1722 | sys-exit-alias | Use sys.exit() instead of {name} |
Rule has been stable since v0.0.156๐ ๏ธAutomatic fix available |
| PLR1730 | if-stmt-min-max | Replace if statement with {replacement} |
Rule has been stable since 0.6.0๐ ๏ธAutomatic fix available |
| PLR1733 | unnecessary-dict-index-lookup | Unnecessary lookup of dictionary value by key | Rule has been stable since 0.12.0๐ ๏ธAutomatic fix available |
| PLR1736 | unnecessary-list-index-lookup | List index lookup in enumerate() loop |
Rule has been stable since 0.5.0๐ ๏ธAutomatic fix available |
| PLR2004 | magic-value-comparison | Magic value used in comparison, consider replacing {value} with a constant variable |
Rule has been stable since v0.0.221 |
| PLR2044 | empty-comment | Line with empty comment | Rule has been stable since 0.5.0๐ ๏ธAutomatic fix available |
| PLR5501 | collapsible-else-if | Use elif instead of else then if, to reduce indentation |
Rule has been stable since v0.0.253๐ ๏ธAutomatic fix available |
| PLR6104 | non-augmented-assignment | Use {operator} to perform an augmented assignment directly |
๐งชRule has been in preview since v0.3.7๐ ๏ธAutomatic fix available |
| PLR6201 | literal-membership | Use a set literal when testing for membership | ๐งชRule has been in preview since v0.1.1๐ ๏ธAutomatic fix available |
| PLR6301 | no-self-use | Method {method_name} could be a function, class method, or static method |
๐งชRule has been in preview since v0.0.286 |
Warning (PLW)
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| PLW0108 | unnecessary-lambda | Lambda may be unnecessary; consider inlining inner function | Rule has been stable since 0.15.0๐ ๏ธAutomatic fix available |
| PLW0120 | useless-else-on-loop | else clause on loop without a break statement; remove the else and dedent its contents |
Rule has been stable since v0.0.156๐ ๏ธAutomatic fix available |
| PLW0127 | self-assigning-variable | Self-assignment of variable {name} |
Rule has been stable since v0.0.281 |
| PLW0128 | redeclared-assigned-name | Redeclared variable {name} in assignment |
Rule has been stable since 0.5.0 |
| PLW0129 | assert-on-string-literal | Asserting on an empty string literal will never pass | Rule has been stable since v0.0.258 |
| PLW0131 | named-expr-without-context | Named expression used without context | Rule has been stable since v0.0.270 |
| PLW0133 | useless-exception-statement | Missing raise statement on exception |
Rule has been stable since 0.5.0๐ ๏ธAutomatic fix available |
| PLW0177 | nan-comparison | Comparing against a NaN value; use math.isnan instead |
Rule has been stable since 0.12.0 |
| PLW0211 | bad-staticmethod-argument | First argument of a static method should not be named {argument_name} |
Rule has been stable since 0.6.0 |
| PLW0244 | redefined-slots-in-subclass | Slot {slot_name} redefined from base class {base} |
๐งชRule has been in preview since 0.9.3 |
| PLW0245 | super-without-brackets | super call is missing parentheses |
Rule has been stable since 0.5.0๐ ๏ธAutomatic fix available |
| PLW0406 | import-self | Module {name} imports itself |
Rule has been stable since v0.0.265 |
| PLW0602 | global-variable-not-assigned | Using global for {name} but no assignment is done |
Rule has been stable since v0.0.174 |
| PLW0603 | global-statement | Using the global statement to update {name} is discouraged |
Rule has been stable since v0.0.253 |
| PLW0604 | global-at-module-level | global at module level is redundant |
Rule has been stable since 0.5.0 |
| PLW0642 | self-or-cls-assignment | Reassigned {} variable in {method_type} method |
Rule has been stable since 0.6.0 |
| PLW0711 | binary-op-exception | Exception to catch is the result of a binary and operation |
Rule has been stable since v0.0.258 |
| PLW1501 | bad-open-mode | {mode} is not a valid mode for open |
Rule has been stable since 0.5.0 |
| PLW1507 | shallow-copy-environ | Shallow copy of os.environ via copy.copy(os.environ) |
Rule has been stable since 0.10.0๐ ๏ธAutomatic fix available |
| PLW1508 | invalid-envvar-default | Invalid type for environment variable default; expected str or None |
Rule has been stable since v0.0.255 |
| PLW1509 | subprocess-popen-preexec-fn | preexec_fn argument is unsafe when using threads |
Rule has been stable since v0.0.281 |
| PLW1510 | subprocess-run-without-check | subprocess.run without explicit check argument |
Rule has been stable since v0.0.285๐ ๏ธAutomatic fix available |
| PLW1514 | unspecified-encoding | {function_name} in text mode without explicit encoding argument |
๐งชRule has been in preview since v0.1.1๐ ๏ธAutomatic fix available |
| PLW1641 | eq-without-hash | Object does not implement __hash__ method |
Rule has been stable since 0.12.0 |
| PLW2101 | useless-with-lock | Threading lock directly created in with statement has no effect |
Rule has been stable since 0.5.0 |
| PLW2901 | redefined-loop-name | Outer {outer_kind} variable {name} overwritten by inner {inner_kind} target |
Rule has been stable since v0.0.252 |
| PLW3201 | bad-dunder-method-name | Dunder method {name} has no special meaning in Python 3 |
๐งชRule has been in preview since v0.0.285 |
| PLW3301 | nested-min-max | Nested {func} calls can be flattened |
Rule has been stable since v0.0.266๐ ๏ธAutomatic fix available |
pyupgrade (UP)
For more, see pyupgrade on PyPI.
For related settings, see pyupgrade.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| UP001 | useless-metaclass-type | __metaclass__ = type is implied |
Rule has been stable since v0.0.155๐ ๏ธAutomatic fix available |
| UP003 | type-of-primitive | Use {} instead of type(...) |
Rule has been stable since v0.0.155๐ ๏ธAutomatic fix available |
| UP004 | useless-object-inheritance | Class {name} inherits from object |
Rule has been stable since v0.0.155๐ ๏ธAutomatic fix available |
| UP005 | deprecated-unittest-alias | {alias} is deprecated, use {target} |
Rule has been stable since v0.0.155๐ ๏ธAutomatic fix available |
| UP006 | non-pep585-annotation | Use {to} instead of {from} for type annotation |
Rule has been stable since v0.0.155๐ ๏ธAutomatic fix available |
| UP007 | non-pep604-annotation-union | Use X | Y for type annotations |
Rule has been stable since v0.0.155๐ ๏ธAutomatic fix available |
| UP008 | super-call-with-parameters | Use super() instead of super(__class__, self) |
Rule has been stable since v0.0.155๐ ๏ธAutomatic fix available |
| UP009 | utf8-encoding-declaration | UTF-8 encoding declaration is unnecessary | Rule has been stable since v0.0.155๐ ๏ธAutomatic fix available |
| UP010 | unnecessary-future-import | Unnecessary __future__ import {import} for target Python version |
Rule has been stable since v0.0.155๐ ๏ธAutomatic fix available |
| UP011 | lru-cache-without-parameters | Unnecessary parentheses to functools.lru_cache |
Rule has been stable since v0.0.155๐ ๏ธAutomatic fix available |
| UP012 | unnecessary-encode-utf8 | Unnecessary call to encode as UTF-8 |
Rule has been stable since v0.0.155๐ ๏ธAutomatic fix available |
| UP013 | convert-typed-dict-functional-to-class | Convert {name} from TypedDict functional to class syntax |
Rule has been stable since v0.0.155๐ ๏ธAutomatic fix available |
| UP014 | convert-named-tuple-functional-to-class | Convert {name} from NamedTuple functional to class syntax |
Rule has been stable since v0.0.155๐ ๏ธAutomatic fix available |
| UP015 | redundant-open-modes | Unnecessary mode argument | Rule has been stable since v0.0.155๐ ๏ธAutomatic fix available |
| UP017 | datetime-timezone-utc | Use datetime.UTC alias |
Rule has been stable since v0.0.192๐ ๏ธAutomatic fix available |
| UP018 | native-literals | Unnecessary {literal_type} call (rewrite as a literal) |
Rule has been stable since v0.0.193๐ ๏ธAutomatic fix available |
| UP019 | typing-text-str-alias | {}.Text is deprecated, use str |
Rule has been stable since v0.0.195๐ ๏ธAutomatic fix available |
| UP020 | open-alias | Use builtin open |
Rule has been stable since v0.0.196๐ ๏ธAutomatic fix available |
| UP021 | replace-universal-newlines | universal_newlines is deprecated, use text |
Rule has been stable since v0.0.196๐ ๏ธAutomatic fix available |
| UP022 | replace-stdout-stderr | Prefer capture_output over sending stdout and stderr to PIPE |
Rule has been stable since v0.0.199๐ ๏ธAutomatic fix available |
| UP023 | deprecated-c-element-tree | cElementTree is deprecated, use ElementTree |
Rule has been stable since v0.0.199๐ ๏ธAutomatic fix available |
| UP024 | os-error-alias | Replace aliased errors with OSError |
Rule has been stable since v0.0.206๐ ๏ธAutomatic fix available |
| UP025 | unicode-kind-prefix | Remove unicode literals from strings | Rule has been stable since v0.0.201๐ ๏ธAutomatic fix available |
| UP026 | deprecated-mock-import | mock is deprecated, use unittest.mock |
Rule has been stable since v0.0.206๐ ๏ธAutomatic fix available |
| UP027 | unpacked-list-comprehension | Replace unpacked list comprehension with a generator expression | โRule was removed in 0.8.0 |
| UP028 | yield-in-for-loop | Replace yield over for loop with yield from |
Rule has been stable since v0.0.210๐ ๏ธAutomatic fix available |
| UP029 | unnecessary-builtin-import | Unnecessary builtin import: {import} |
Rule has been stable since v0.0.211๐ ๏ธAutomatic fix available |
| UP030 | format-literals | Use implicit references for positional format fields | Rule has been stable since v0.0.218๐ ๏ธAutomatic fix available |
| UP031 | printf-string-formatting | Use format specifiers instead of percent format | Rule has been stable since v0.0.229๐ ๏ธAutomatic fix available |
| UP032 | f-string | Use f-string instead of format call |
Rule has been stable since v0.0.224๐ ๏ธAutomatic fix available |
| UP033 | lru-cache-with-maxsize-none | Use @functools.cache instead of @functools.lru_cache(maxsize=None) |
Rule has been stable since v0.0.225๐ ๏ธAutomatic fix available |
| UP034 | extraneous-parentheses | Avoid extraneous parentheses | Rule has been stable since v0.0.228๐ ๏ธAutomatic fix available |
| UP035 | deprecated-import | Import from {target} instead: {names} |
Rule has been stable since v0.0.239๐ ๏ธAutomatic fix available |
| UP036 | outdated-version-block | Version block is outdated for minimum Python version | Rule has been stable since v0.0.240๐ ๏ธAutomatic fix available |
| UP037 | quoted-annotation | Remove quotes from type annotation | Rule has been stable since v0.0.242๐ ๏ธAutomatic fix available |
| UP038 | non-pep604-isinstance | Use X | Y in {} call instead of (X, Y) |
โRule was removed in 0.13.0๐ ๏ธAutomatic fix available |
| UP039 | unnecessary-class-parentheses | Unnecessary parentheses after class definition | Rule has been stable since v0.0.273๐ ๏ธAutomatic fix available |
| UP040 | non-pep695-type-alias | Type alias {name} uses {type_alias_method} instead of the type keyword |
Rule has been stable since v0.0.283๐ ๏ธAutomatic fix available |
| UP041 | timeout-error-alias | Replace aliased errors with TimeoutError |
Rule has been stable since v0.2.0๐ ๏ธAutomatic fix available |
| UP042 | replace-str-enum | Class {name} inherits from both str and enum.Enum |
Rule has been stable since 0.15.0๐ ๏ธAutomatic fix available |
| UP043 | unnecessary-default-type-args | Unnecessary default type arguments | Rule has been stable since 0.8.0๐ ๏ธAutomatic fix available |
| UP044 | non-pep646-unpack | Use * for unpacking |
Rule has been stable since 0.10.0๐ ๏ธAutomatic fix available |
| UP045 | non-pep604-annotation-optional | Use X | None for type annotations |
Rule has been stable since 0.12.0๐ ๏ธAutomatic fix available |
| UP046 | non-pep695-generic-class | Generic class {name} uses Generic subclass instead of type parameters |
Rule has been stable since 0.12.0๐ ๏ธAutomatic fix available |
| UP047 | non-pep695-generic-function | Generic function {name} should use type parameters |
Rule has been stable since 0.12.0๐ ๏ธAutomatic fix available |
| UP049 | private-type-parameter | Generic {} uses private type parameters | Rule has been stable since 0.12.0๐ ๏ธAutomatic fix available |
| UP050 | useless-class-metaclass-type | Class {name} uses metaclass=type, which is redundant |
Rule has been stable since 0.13.0๐ ๏ธAutomatic fix available |
refurb (FURB)
For more, see refurb on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| FURB101 | read-whole-file | Path.open() followed by read() can be replaced by {filename}.{suggestion} |
๐งชRule has been in preview since v0.1.2๐ ๏ธAutomatic fix available |
| FURB103 | write-whole-file | Path.open() followed by write() can be replaced by {filename}.{suggestion} |
๐งชRule has been in preview since v0.3.6๐ ๏ธAutomatic fix available |
| FURB105 | print-empty-string | Unnecessary empty string passed to print |
Rule has been stable since 0.5.0๐ ๏ธAutomatic fix available |
| FURB110 | if-exp-instead-of-or-operator | Replace ternary if expression with or operator |
Rule has been stable since 0.15.0๐ ๏ธAutomatic fix available |
| FURB113 | repeated-append | Use {suggestion} instead of repeatedly calling {name}.append() |
๐งชRule has been in preview since v0.0.287๐ ๏ธAutomatic fix available |
| FURB116 | f-string-number-format | Replace {function_name} call with {display} |
Rule has been stable since 0.13.0๐ ๏ธAutomatic fix available |
| FURB118 | reimplemented-operator | Use operator.{operator} instead of defining a {target} |
๐งชRule has been in preview since v0.1.9๐ ๏ธAutomatic fix available |
| FURB122 | for-loop-writes | Use of {}.write in a for loop |
Rule has been stable since 0.12.0๐ ๏ธAutomatic fix available |
| FURB129 | readlines-in-for | Instead of calling readlines(), iterate over file object directly |
Rule has been stable since 0.5.0๐ ๏ธAutomatic fix available |
| FURB131 | delete-full-slice | Prefer clear over deleting a full slice |
๐งชRule has been in preview since v0.0.287๐ ๏ธAutomatic fix available |
| FURB132 | check-and-remove-from-set | Use {suggestion} instead of check and remove |
Rule has been stable since 0.12.0๐ ๏ธAutomatic fix available |
| FURB136 | if-expr-min-max | Replace if expression with {min_max} call |
Rule has been stable since 0.5.0๐ ๏ธAutomatic fix available |
| FURB140 | reimplemented-starmap | Use itertools.starmap instead of the generator |
๐งชRule has been in preview since v0.0.291๐ ๏ธAutomatic fix available |
| FURB142 | for-loop-set-mutations | Use of set.{}() in a for loop |
๐งชRule has been in preview since v0.3.5๐ ๏ธAutomatic fix available |
| FURB145 | slice-copy | Prefer copy method over slicing |
๐งชRule has been in preview since v0.0.290๐ ๏ธAutomatic fix available |
| FURB148 | unnecessary-enumerate | enumerate value is unused, use for x in range(len(y)) instead |
๐งชRule has been in preview since v0.0.291๐ ๏ธAutomatic fix available |
| FURB152 | math-constant | Replace {literal} with math.{constant} |
๐งชRule has been in preview since v0.1.6๐ ๏ธAutomatic fix available |
| FURB154 | repeated-global | Use of repeated consecutive {} |
๐งชRule has been in preview since v0.4.9๐ ๏ธAutomatic fix available |
| FURB156 | hardcoded-string-charset | Use of hardcoded string charset | ๐งชRule has been in preview since 0.7.0๐ ๏ธAutomatic fix available |
| FURB157 | verbose-decimal-constructor | Verbose expression in Decimal constructor |
Rule has been stable since 0.12.0๐ ๏ธAutomatic fix available |
| FURB161 | bit-count | Use of bin({existing}).count('1') |
Rule has been stable since 0.5.0๐ ๏ธAutomatic fix available |
| FURB162 | fromisoformat-replace-z | Unnecessary timezone replacement with zero offset | Rule has been stable since 0.12.0๐ ๏ธAutomatic fix available |
| FURB163 | redundant-log-base | Prefer math.{log_function}({arg}) over math.log with a redundant base |
Rule has been stable since 0.5.0๐ ๏ธAutomatic fix available |
| FURB164 | unnecessary-from-float | Verbose method {method_name} in {constructor} construction |
๐งชRule has been in preview since v0.3.5๐ ๏ธAutomatic fix available |
| FURB166 | int-on-sliced-str | Use of int with explicit base={base} after removing prefix |
Rule has been stable since 0.12.0๐ ๏ธAutomatic fix available |
| FURB167 | regex-flag-alias | Use of regular expression alias re.{} |
Rule has been stable since 0.5.0๐ ๏ธAutomatic fix available |
| FURB168 | isinstance-type-none | Prefer is operator over isinstance to check if an object is None |
Rule has been stable since 0.5.0๐ ๏ธAutomatic fix available |
| FURB169 | type-none-comparison | When checking against None, use {} instead of comparison with type(None) |
Rule has been stable since 0.5.0๐ ๏ธAutomatic fix available |
| FURB171 | single-item-membership-test | Membership test against single-item container | Rule has been stable since 0.15.0๐ ๏ธAutomatic fix available |
| FURB177 | implicit-cwd | Prefer Path.cwd() over Path().resolve() for current-directory lookups |
Rule has been stable since 0.5.0๐ ๏ธAutomatic fix available |
| FURB180 | meta-class-abc-meta | Use of metaclass=abc.ABCMeta to define abstract base class |
๐งชRule has been in preview since v0.2.0๐ ๏ธAutomatic fix available |
| FURB181 | hashlib-digest-hex | Use of hashlib's .digest().hex() |
Rule has been stable since 0.5.0๐ ๏ธAutomatic fix available |
| FURB187 | list-reverse-copy | Use of assignment of reversed on list {name} |
Rule has been stable since 0.5.0๐ ๏ธAutomatic fix available |
| FURB188 | slice-to-remove-prefix-or-suffix | Prefer str.removeprefix() over conditionally replacing with slice. |
Rule has been stable since 0.9.0๐ ๏ธAutomatic fix available |
| FURB189 | subclass-builtin | Subclassing {subclass} can be error prone, use collections.{replacement} instead |
๐งชRule has been in preview since 0.7.3๐ ๏ธAutomatic fix available |
| FURB192 | sorted-min-max | Prefer min over sorted() to compute the minimum value in a sequence |
๐งชRule has been in preview since v0.4.2๐ ๏ธAutomatic fix available |
Ruff-specific rules (RUF)
For related settings, see Ruff.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| RUF001 | ambiguous-unicode-character-string | String contains ambiguous {}. Did you mean {}? | Rule has been stable since v0.0.102 |
| RUF002 | ambiguous-unicode-character-docstring | Docstring contains ambiguous {}. Did you mean {}? | Rule has been stable since v0.0.102 |
| RUF003 | ambiguous-unicode-character-comment | Comment contains ambiguous {}. Did you mean {}? | Rule has been stable since v0.0.108 |
| RUF005 | collection-literal-concatenation | Consider {expression} instead of concatenation |
Rule has been stable since v0.0.227๐ ๏ธAutomatic fix available |
| RUF006 | asyncio-dangling-task | Store a reference to the return value of {expr}.{method} |
Rule has been stable since v0.0.247 |
| RUF007 | zip-instead-of-pairwise | Prefer itertools.pairwise() over zip() when iterating over successive pairs |
Rule has been stable since v0.0.257๐ ๏ธAutomatic fix available |
| RUF008 | mutable-dataclass-default | Do not use mutable default values for dataclass attributes | Rule has been stable since v0.0.262 |
| RUF009 | function-call-in-dataclass-default-argument | Do not perform function call {name} in dataclass defaults |
Rule has been stable since v0.0.262 |
| RUF010 | explicit-f-string-type-conversion | Use explicit conversion flag | Rule has been stable since v0.0.267๐ ๏ธAutomatic fix available |
| RUF011 | ruff-static-key-dict-comprehension | Dictionary comprehension uses static key | โRule was removed in v0.2.0 |
| RUF012 | mutable-class-default | Mutable default value for class attribute | Rule has been stable since v0.0.273 |
| RUF013 | implicit-optional | PEP 484 prohibits implicit Optional |
Rule has been stable since v0.0.273๐ ๏ธAutomatic fix available |
| RUF015 | unnecessary-iterable-allocation-for-first-element | Prefer next({iterable}) over single element slice |
Rule has been stable since v0.0.278๐ ๏ธAutomatic fix available |
| RUF016 | invalid-index-type | Slice in indexed access to type {value_type} uses type {index_type} instead of an integer |
Rule has been stable since v0.0.278 |
| RUF017 | quadratic-list-summation | Avoid quadratic list summation | Rule has been stable since v0.0.285๐ ๏ธAutomatic fix available |
| RUF018 | assignment-in-assert | Avoid assignment expressions in assert statements |
Rule has been stable since v0.2.0 |
| RUF019 | unnecessary-key-check | Unnecessary key check before dictionary access | Rule has been stable since v0.2.0๐ ๏ธAutomatic fix available |
| RUF020 | never-union | {never_like} | T is equivalent to T |
Rule has been stable since v0.2.0๐ ๏ธAutomatic fix available |
| RUF021 | parenthesize-chained-operators | Parenthesize a and b expressions when chaining and and or together, to make the precedence clear |
Rule has been stable since 0.8.0๐ ๏ธAutomatic fix available |
| RUF022 | unsorted-dunder-all | __all__ is not sorted |
Rule has been stable since 0.8.0๐ ๏ธAutomatic fix available |
| RUF023 | unsorted-dunder-slots | {}.__slots__ is not sorted |
Rule has been stable since 0.8.0๐ ๏ธAutomatic fix available |
| RUF024 | mutable-fromkeys-value | Do not pass mutable objects as values to dict.fromkeys |
Rule has been stable since 0.5.0๐ ๏ธAutomatic fix available |
| RUF026 | default-factory-kwarg | default_factory is a positional-only argument to defaultdict |
Rule has been stable since 0.5.0๐ ๏ธAutomatic fix available |
| RUF027 | missing-f-string-syntax | Possible f-string without an f prefix |
๐งชRule has been in preview since v0.2.1๐ ๏ธAutomatic fix available |
| RUF028 | invalid-formatter-suppression-comment | This suppression comment is invalid because {} | Rule has been stable since 0.12.0๐ ๏ธAutomatic fix available |
| RUF029 | unused-async | Function {name} is declared async, but doesn't await or use async features. |
๐งชRule has been in preview since v0.4.0 |
| RUF030 | assert-with-print-message | print() call in assert statement is likely unintentional |
Rule has been stable since 0.8.0๐ ๏ธAutomatic fix available |
| RUF031 | incorrectly-parenthesized-tuple-in-subscript | Use parentheses for tuples in subscripts | ๐งชRule has been in preview since 0.5.7๐ ๏ธAutomatic fix available |
| RUF032 | decimal-from-float-literal | Decimal() called with float literal argument |
Rule has been stable since 0.9.0๐ ๏ธAutomatic fix available |
| RUF033 | post-init-default | __post_init__ method with argument defaults |
Rule has been stable since 0.9.0๐ ๏ธAutomatic fix available |
| RUF034 | useless-if-else | Useless if-else condition |
Rule has been stable since 0.9.0 |
| RUF035 | ruff-unsafe-markup-use | Unsafe use of {name} detected |
โRule was removed in 0.10.0 |
| RUF036 | none-not-at-end-of-union | None not at the end of the type union. |
๐งชRule has been in preview since 0.7.4๐ ๏ธAutomatic fix available |
| RUF037 | unnecessary-empty-iterable-within-deque-call | Unnecessary empty iterable within a deque call | Rule has been stable since 0.15.0๐ ๏ธAutomatic fix available |
| RUF038 | redundant-bool-literal | Literal[True, False, ...] can be replaced with Literal[...] | bool |
๐งชRule has been in preview since 0.8.0๐ ๏ธAutomatic fix available |
| RUF039 | unraw-re-pattern | First argument to {call} is not raw string | ๐งชRule has been in preview since 0.8.0๐ ๏ธAutomatic fix available |
| RUF040 | invalid-assert-message-literal-argument | Non-string literal used as assert message | Rule has been stable since 0.10.0 |
| RUF041 | unnecessary-nested-literal | Unnecessary nested Literal |
Rule has been stable since 0.10.0๐ ๏ธAutomatic fix available |
| RUF043 | pytest-raises-ambiguous-pattern | Pattern passed to match= contains metacharacters but is neither escaped nor raw |
Rule has been stable since 0.13.0 |
| RUF045 | implicit-class-var-in-dataclass | Assignment without annotation found in dataclass body | ๐งชRule has been in preview since 0.9.7 |
| RUF046 | unnecessary-cast-to-int | Value being cast to int is already an integer |
Rule has been stable since 0.10.0๐ ๏ธAutomatic fix available |
| RUF047 | needless-else | Empty else clause |
๐งชRule has been in preview since 0.9.3๐ ๏ธAutomatic fix available |
| RUF048 | map-int-version-parsing | __version__ may contain non-integral-like elements |
Rule has been stable since 0.10.0 |
| RUF049 | dataclass-enum | An enum class should not be decorated with @dataclass |
Rule has been stable since 0.12.0 |
| RUF050 | unnecessary-if | Empty if statement |
๐งชRule has been in preview since 0.15.8๐ ๏ธAutomatic fix available |
| RUF051 | if-key-in-dict-del | Use pop instead of key in dict followed by del dict[key] |
Rule has been stable since 0.10.0๐ ๏ธAutomatic fix available |
| RUF052 | used-dummy-variable | Local dummy variable {} is accessed |
๐งชRule has been in preview since 0.8.2๐ ๏ธAutomatic fix available |
| RUF053 | class-with-mixed-type-vars | Class with type parameter list inherits from Generic |
Rule has been stable since 0.12.0๐ ๏ธAutomatic fix available |
| RUF054 | indented-form-feed | Indented form feed | ๐งชRule has been in preview since 0.9.6 |
| RUF055 | unnecessary-regular-expression | Plain string pattern passed to re function |
๐งชRule has been in preview since 0.8.1๐ ๏ธAutomatic fix available |
| RUF056 | falsy-dict-get-fallback | Avoid providing a falsy fallback to dict.get() in boolean test positions. The default fallback None is already falsy. |
๐งชRule has been in preview since 0.8.5๐ ๏ธAutomatic fix available |
| RUF057 | unnecessary-round | Value being rounded is already an integer | Rule has been stable since 0.12.0๐ ๏ธAutomatic fix available |
| RUF058 | starmap-zip | itertools.starmap called on zip iterable |
Rule has been stable since 0.12.0๐ ๏ธAutomatic fix available |
| RUF059 | unused-unpacked-variable | Unpacked variable {name} is never used |
Rule has been stable since 0.13.0๐ ๏ธAutomatic fix available |
| RUF060 | in-empty-collection | Unnecessary membership test on empty collection | Rule has been stable since 0.15.0 |
| RUF061 | legacy-form-pytest-raises | Use context-manager form of pytest.{}() |
Rule has been stable since 0.15.0๐ ๏ธAutomatic fix available |
| RUF063 | access-annotations-from-class-dict | Use {suggestion} instead of __dict__ access |
๐งชRule has been in preview since 0.12.1 |
| RUF064 | non-octal-permissions | Non-octal mode | Rule has been stable since 0.15.0๐ ๏ธAutomatic fix available |
| RUF065 | logging-eager-conversion | Unnecessary oct() conversion when formatting with %s. Use %#o instead of %s |
๐งชRule has been in preview since 0.13.2 |
| RUF066 | property-without-return | {name} is a property without a return statement |
๐งชRule has been in preview since 0.14.7 |
| RUF067 | non-empty-init-module | __init__ module should not contain any code |
๐งชRule has been in preview since 0.14.11 |
| RUF068 | duplicate-entry-in-dunder-all | __all__ contains duplicate entries |
๐งชRule has been in preview since 0.14.14๐ ๏ธAutomatic fix available |
| RUF069 | float-equality-comparison | Unreliable floating point equality comparison {left} {operator} {right} |
๐งชRule has been in preview since 0.15.1 |
| RUF070 | unnecessary-assign-before-yield | Unnecessary assignment to {name} before yield from statement |
๐งชRule has been in preview since 0.15.3๐ ๏ธAutomatic fix available |
| RUF071 | os-path-commonprefix | os.path.commonprefix() compares strings character-by-character |
๐งชRule has been in preview since 0.15.6๐ ๏ธAutomatic fix available |
| RUF072 | useless-finally | Empty finally clause |
๐งชRule has been in preview since 0.15.8๐ ๏ธAutomatic fix available |
| RUF073 | f-string-percent-format | % operator used on an f-string |
๐งชRule has been in preview since 0.15.8 |
| RUF100 | unused-noqa | Unused {} | Rule has been stable since v0.0.155๐ ๏ธAutomatic fix available |
| RUF101 | redirected-noqa | {original} is a redirect to {target} |
Rule has been stable since 0.6.0๐ ๏ธAutomatic fix available |
| RUF102 | invalid-rule-code | Invalid rule code in {}: {} | Rule has been stable since 0.15.0๐ ๏ธAutomatic fix available |
| RUF103 | invalid-suppression-comment | Invalid suppression comment: {msg} | Rule has been stable since 0.15.0๐ ๏ธAutomatic fix available |
| RUF104 | unmatched-suppression-comment | Suppression comment without matching #ruff:enable comment |
Rule has been stable since 0.15.0 |
| RUF200 | invalid-pyproject-toml | Failed to parse pyproject.toml: {message} | Rule has been stable since v0.0.271 |
tryceratops (TRY)
For more, see tryceratops on PyPI.
| Code | Name | Message | Fix/Status |
|---|---|---|---|
| TRY002 | raise-vanilla-class | Create your own exception | Rule has been stable since v0.0.236 |
| TRY003 | raise-vanilla-args | Avoid specifying long messages outside the exception class | Rule has been stable since v0.0.236 |
| TRY004 | type-check-without-type-error | Prefer TypeError exception for invalid type |
Rule has been stable since v0.0.230 |
| TRY200 | reraise-no-cause | Use raise from to specify exception cause |
โRule was removed in v0.2.0 |
| TRY201 | verbose-raise | Use raise without specifying exception name |
Rule has been stable since v0.0.231๐ ๏ธAutomatic fix available |
| TRY203 | useless-try-except | Remove exception handler; error is immediately re-raised | Rule has been stable since 0.7.0 |
| TRY300 | try-consider-else | Consider moving this statement to an else block |
Rule has been stable since v0.0.229 |
| TRY301 | raise-within-try | Abstract raise to an inner function |
Rule has been stable since v0.0.233 |
| TRY400 | error-instead-of-exception | Use logging.exception instead of logging.error |
Rule has been stable since v0.0.236๐ ๏ธAutomatic fix available |
| TRY401 | verbose-log-message | Redundant exception object included in logging.exception call |
Rule has been stable since v0.0.250 |