-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Description
This is the parent issue for tracking parity with Pylint. Below, we've enumerated all Pylint rules.
Rules that are checked off have been implemented in Ruff already (either as a Pylint rule, e.g., PLE0237, or by way of overlap with another linter like Pyflakes, as with missing-format-string-key).
Rules that are crossed out have been removed some consideration. (In most cases, crossed-out rules represent Pylint specific rules, e.g., rules related to Pylint configuration.)
At time of writing, many of the remaining rules require type inference and/or multi-file analysis, and aren't ready to be implemented in Ruff. (See: #970 (comment) for an enumeration.) If you're looking to start work on a specific rule, I'd suggest commenting in the issue, to get some input on whether Ruff is capable of supporting it at present.
For guidance on getting started, see the Contributing documentation.
Note: Don't implement rules that are part of Pylint extension until #1774 is completed. Don't implement rules that mainly target Python 2.
Error
-
abstract-class-instantiated/E0110 -
access-member-before-definition/E0203 -
assigning-non-slot/E0237(PLE0237) -
assignment-from-no-return/E1111 -
assignment-from-none/E1128 -
await-outside-async/E1142(PLE1142) -
bad-configuration-section/E0014 -
bad-except-order/E0701 -
bad-exception-cause/E0705 -
bad-format-character/E1300(PLE1300) -
bad-plugin-value/E0013 -
bad-reversed-sequence/E0111 -
bad-str-strip-call/E1310(PLE1310) -
bad-string-format-type/E1307(PLE1307) -
(mainly targets Python 2)bad-super-call/E1003 -
bidirectional-unicode/E2502(PLE2502) -
broken-collections-callable/E6005 -
broken-noreturn/E6004 -
catching-non-exception/E0712 -
class-variable-slots-conflict/E0242 -
continue-in-finally/E0116(PLE0116) -
dict-iter-missing-items/E1141 -
duplicate-argument-name/E0108 -
duplicate-bases/E0241(PLE0241) -
format-needs-mapping/E1303(F502) -
function-redefined/E0102(F811) -
import-error/E0401 -
inconsistent-mro/E0240 -
inherit-non-class/E0239 -
init-is-generator/E0100(PLE0100) -
invalid-all-format/E0605(PLE0605) -
invalid-all-object/E0604(PLE0604) -
invalid-bool-returned/E0304(PLE0304) -
invalid-bytes-returned/E0308(PLE0308) -
invalid-character-backspace/E2510(PLE2510) -
invalid-character-carriage-return/E2511 -
invalid-character-esc/E2513(PLE2513) -
invalid-character-nul/E2514(PLE2514) -
invalid-character-sub/E2512(PLE2512) -
invalid-character-zero-width-space/E2515(PLE2515) -
invalid-class-object/E0243 -
invalid-enum-extension/E0244 -
invalid-envvar-value/E1507 -
invalid-format-returned/E0311 -
invalid-getnewargs-ex-returned/E0313 -
invalid-getnewargs-returned/E0312 -
invalid-hash-returned/E0309(PLE0309) -
invalid-index-returned/E0305(PLE0305) -
invalid-length-hint-returned/E0310 -
invalid-length-returned/E0303(PLE0303) -
invalid-metaclass/E1139 -
invalid-repr-returned/E0306 -
invalid-sequence-index/E1126 -
invalid-slice-index/E1127 -
invalid-slice-step/E1144 -
invalid-slots/E0238 -
invalid-slots-object/E0236 -
invalid-star-assignment-target/E0113 -
invalid-str-returned/E0307 -
invalid-unary-operand-type/E1130 -
invalid-unicode-codec/E2501 -
logging-format-truncated/E1201 -
logging-too-few-args/E1206(PLE1206) -
logging-too-many-args/E1205(PLE1205) -
logging-unsupported-format/E1200 -
method-hidden/E0202 -
misplaced-bare-raise/E0704(PLE0704) -
misplaced-format-function/E0119 -
missing-format-string-key/E1304(F524) -
missing-kwoa/E1125 -
mixed-format-string/E1302(F506) -
modified-iterating-dict/E4702 -
modified-iterating-set/E4703(PLE4703) -
no-member/E1101 -
no-method-argument/E0211 -
no-name-in-module/E0611 -
no-self-argument/E0213(N805) -
no-value-for-parameter/E1120 -
non-iterator-returned/E0301 -
nonexistent-operator/E0107(B002) -
nonlocal-and-global/E0115(PLE0115) -
nonlocal-without-binding/E0117(PLE0117) -
not-a-mapping/E1134 -
not-an-iterable/E1133 -
not-async-context-manager/E1701 -
not-callable/E1102 -
not-context-manager/E1129 -
not-in-loop/E0103(F701,F702) -
notimplemented-raised/E0711(F901) -
potential-index-error/E0643(PLE0643) -
raising-bad-type/E0702 -
raising-non-exception/E0710 -
redundant-keyword-arg/E1124 -
relative-beyond-top-level/E0402(TID252) -
repeated-keyword/E1132(PLE1132) -
return-arg-in-generator/E0106 -
return-in-init/E0101(PLE0101) -
return-outside-function/E0104(F706) -
singledispatch-method/E1519(PLE1519) -
singledispatchmethod-function/E1520(PLE1520) -
star-needs-assignment-target/E0114(syntax error in preview) -
syntax-error/E0001(always enabled) -
too-few-format-args/E1306(F524) -
too-many-format-args/E1305(F522) -
too-many-function-args/E1121 -
too-many-star-expressions/E0112(F622) -
truncated-format-string/E1301(F501) -
undefined-all-variable/E0603(F822) -
undefined-variable/E0602(F821) -
unexpected-keyword-arg/E1123 -
unexpected-special-method-signature/E0302(PLE0302) -
unhashable-member/E1143 -
unpacking-non-sequence/E0633 -
unsubscriptable-object/E1136 -
unsupported-assignment-operation/E1137 -
unsupported-binary-operation/E1131 -
unsupported-delete-operation/E1138 -
unsupported-membership-test/E1135 -
used-before-assignment/E0601(F821) -
used-prior-global-declaration/E0118(PLE0118) -
yield-inside-async-function/E1700(PLE1700) -
yield-outside-function/E0105(F704)
Warning
-
abstract-method/W0223 -
anomalous-backslash-in-string/W1401(W605) -
anomalous-unicode-escape-in-string/W1402 -
arguments-differ/W0221 -
arguments-out-of-order/W1114 -
arguments-renamed/W0237 -
assert-on-string-literal/W0129(PLW0129) -
assert-on-tuple/W0199(F631) -
attribute-defined-outside-init/W0201 -
bad-builtin/W0141 -
bad-chained-comparison/W3601 -
bad-dunder-name/W3201(PLW3201) -
bad-format-string/W1302(F521) -
bad-format-string-key/W1300 -
bad-indentation/W0311(E111) -
bad-open-mode/W1501(PLW1501) -
bad-staticmethod-argument/W0211(PLW0211) -
bad-thread-instantiation/W1506 -
bare-except/W0702(E722) -
binary-op-exception/W0711(PLW0711) -
boolean-datetime/W1502 -
broad-exception-caught/W0718(BLE001) -
broad-exception-raised/W0719(TRY002) -
cell-var-from-loop/W0640(B023) -
comparison-with-callable/W0143 -
confusing-with-statement/W0124 -
consider-ternary-expression/W0160(SIM108) -
dangerous-default-value/W0102(B006) -
deprecated-argument/W4903 -
deprecated-class/W4904 -
deprecated-decorator/W4905 -
deprecated-method/W4902 -
deprecated-module/W4901 -
deprecated-typing-alias/W6001 -
differing-param-doc/W9017 -
differing-type-doc/W9018 -
duplicate-except/W0705(B014) -
duplicate-key/W0109(F601) -
duplicate-string-formatting-argument/W1308 -
duplicate-value/W0130(B033) -
eq-without-hash/W1641(PLW1641) -
eval-used/W0123(S307) -
exec-used/W0122(S102) -
expression-not-assigned/W0106(B018) -
f-string-without-interpolation/W1309(F541) -
fixme/W0511(FIX001,FIX002,FIX003,FIX004) -
forgotten-debug-statement/W1515(T100) -
format-combined-specification/W1305(F525) -
format-string-without-interpolation/W1310(F541) -
global-at-module-level/W0604(PLW0604) -
global-statement/W0603(PLW0603) -
global-variable-not-assigned/W0602(PLW0602) -
global-variable-undefined/W0601 -
implicit-str-concat/W1404(ISC001) -
import-self/W0406(PLW0406) -
inconsistent-quotes/W1405(Q000) -
invalid-envvar-default/W1508(PLW1508) -
invalid-format-index/W1307 -
invalid-overridden-method/W0236 -
isinstance-second-argument-not-valid-type/W1116 -
keyword-arg-before-vararg/W1113(B026) -
logging-format-interpolation/W1202(G001) -
logging-fstring-interpolation/W1203(G004) -
logging-not-lazy/W1201(G002) -
lost-exception/W0150(B012) -
method-cache-max-size-none/W1518(B019) -
misplaced-future/W0410(F404) -
missing-any-param-doc/W9021 -
missing-format-argument-key/W1303(F524) -
missing-format-attribute/W1306 -
missing-param-doc/W9015 -
missing-parentheses-for-call-in-test/W0126 -
missing-raises-doc/W9006 -
(Pylint extension)missing-return-doc/W9011 -
missing-return-type-doc/W9012 -
missing-timeout/W3101 -
missing-type-doc/W9016 -
missing-yield-doc/W9013 -
missing-yield-type-doc/W9014 -
modified-iterating-list/W4701 -
multiple-constructor-doc/W9005 -
named-expr-without-context/W0131(PLW0131) -
nan-comparison/W0177(PLW0177) -
nested-min-max/W3301(PLW3301) -
non-ascii-file-name/W2402(N999) -
non-parent-init-called/W0233 -
non-str-assignment-to-dunder-name/W1115 -
overlapping-except/W0714 -
overridden-final-method/W0239 -
pointless-exception-statement/W0133(PLW0133) -
pointless-statement/W0104(B018) -
pointless-string-statement/W0105 -
possibly-unused-variable/W0641 -
preferred-module/W0407 -
protected-access/W0212(SLF001) -
raise-missing-from/W0707(B904) -
raising-format-tuple/W0715 -
redeclared-assigned-name/W0128 -
redefined-builtin/W0622(A001) -
redefined-loop-name/W2901(PLW2901) -
redefined-outer-name/W0621 -
redefined-slots-in-subclass/W0244 -
redundant-returns-doc/W9008 -
redundant-u-string-prefix/W1406(UP025) -
redundant-unittest-assert/W1503 -
redundant-yields-doc/W9010 -
reimported/W0404(F811) -
self-assigning-variable/W0127(PLW0127) -
self-cls-assignment/W0642 -
shallow-copy-environ/W1507 -
signature-differs/W0222 -
subclassed-final-class/W0240 -
subprocess-popen-preexec-fn/W1509(PLW1509) -
subprocess-run-check/W1510(PLW1510) -
super-init-not-called/W0231 -
super-without-brackets/W0245(PLW0245) -
too-many-try-statements/W0717 -
try-except-raise/W0706(TRY302) -
unbalanced-dict-unpacking/W0644 -
unbalanced-tuple-unpacking/W0632 -
undefined-loop-variable/W0631 -
unknown-option-value/W0012 -
unnecessary-ellipsis/W2301(`PIE790) -
unnecessary-lambda/W0108(PLW0108) -
unnecessary-pass/W0107(PIE790) -
unnecessary-semicolon/W0301(E703) -
unreachable/W0101 -
unspecified-encoding/W1514(PLW1514) -
unused-argument/W0613(ARG001) -
unused-format-string-argument/W1304(F507) -
unused-format-string-key/W1301(F504) -
unused-import/W0611(F401) -
unused-private-member/W0238 -
unused-variable/W0612(F841) -
unused-wildcard-import/W0614 -
useless-else-on-loop/W0120(PLW0120) -
useless-param-doc/W9019 -
useless-parent-delegation/W0246 -
useless-type-doc/W9020 -
useless-with-lock/W2101(PLW2101) -
using-constant-test/W0125 -
using-f-string-in-unsupported-version/W2601 -
using-final-decorator-in-unsupported-version/W2602 -
while-used/W0149 -
wildcard-import/W0401(F403) -
wrong-exception-operation/W0716
Convention
-
bad-classmethod-argument/C0202(`N804) -
bad-docstring-quotes/C0198(Q002) -
bad-file-encoding/C2503 -
bad-mcs-classmethod-argument/C0204 -
bad-mcs-method-argument/C0203 -
compare-to-empty-string/C1901(PLC1901) -
compare-to-zero/C2001 -
consider-iterating-dictionary/C0201(SIM118) -
consider-using-any-or-all/C0501(SIM110,SIM111) -
consider-using-dict-items/C0206(PLC0206) -
consider-using-enumerate/C0200 -
consider-using-f-string/C0209 -
dict-init-mutate/C3401 -
disallowed-name/C0104 -
docstring-first-line-empty/C0199(D210) -
empty-docstring/C0112(D419) -
import-outside-toplevel/C0415(PLC0415) -
import-private-name/C2701(PLC2701) -
invalid-characters-in-docstring/C0403 -
invalid-name/C0103(N815) -
line-too-long/C0301(E501) -
misplaced-comparison-constant/C2201(SIM300) -
missing-class-docstring/C0115(D101) -
missing-final-newline/C0304(W292) -
missing-function-docstring/C0116(D103) -
missing-module-docstring/C0114(D100) -
mixed-line-endings/C0327 -
multiple-imports/C0410(E401) -
multiple-statements/C0321(E701,E702) -
non-ascii-module-import/C2403(PLC2403) -
non-ascii-name/C2401(PLC2401) -
single-string-used-for-slots/C0205(PLC0205) -
singleton-comparison/C0121(E711,E712) -
superfluous-parens/C0325 -
(not compatible with the formatter)too-many-lines/C0302 -
trailing-newlines/C0305(W391) -
trailing-whitespace/C0303(W291) -
typevar-double-variance/C0131(PLC0131) -
typevar-name-incorrect-variance/C0105(PLC0105) -
typevar-name-mismatch/C0132(PLC0132) -
unexpected-line-ending-format/C0328 -
ungrouped-imports/C0412(I001) -
unidiomatic-typecheck/C0123(E721) -
unnecessary-direct-lambda-call/C3002(PLC3002) -
unnecessary-dunder-call/C2801(PLC2801) -
unnecessary-lambda-assignment/C3001(E731) -
unneeded-not/C0113(SIM208) -
use-implicit-booleaness-not-comparison/C1803 -
use-implicit-booleaness-not-len/C1802(PLC1802) -
use-maxsplit-arg/C0207(PLC0207) -
use-sequence-for-iteration/C0208(PLC0208) -
useless-import-alias/C0414(PLC0414) -
wrong-import-order/C0411(I001) -
wrong-import-position/C0413(E402) -
wrong-spelling-in-comment/C0401 -
wrong-spelling-in-docstring/C0402
Refactor
-
chained-comparison/R1716 -
comparison-of-constants/R0133(PLR0133) -
comparison-with-itself/R0124(PLR0124) -
condition-evals-to-constant/R1727 -
confusing-consecutive-elif/R5601 -
consider-alternative-union-syntax/R6003(UP007) -
consider-merging-isinstance/R1701(SIM101) -
consider-swap-variables/R1712 -
consider-using-alias/R6002(UP006) -
consider-using-assignment-expr/R6103 -
consider-using-augmented-assign/R6104(PLR6104) -
consider-using-dict-comprehension/R1717(C402) -
consider-using-from-import/R0402(PLR0402) -
consider-using-generator/R1728(C417) -
consider-using-get/R1715(SIM401) -
consider-using-in/R1714(PLR1714) -
consider-using-join/R1713 -
consider-using-min-builtin/R1730(PLR1730) -
consider-using-max-builtin/R1731(PLR1730) -
consider-using-namedtuple-or-dataclass/R6101 -
consider-using-set-comprehension/R1718(C401) -
consider-using-sys-exit/R1722(PLR1722) -
consider-using-ternary/R1706(PLR1706) -
consider-using-tuple/R6102 -
consider-using-with/R1732(SIM115) -
cyclic-import/R0401 -
duplicate-code/R0801 -
else-if-used/R5501(PLR5501) -
empty-comment/R2044(PLR2044) -
inconsistent-return-statements/R1710(RET501,RET502) -
literal-comparison/R0123(F632) -
magic-value-comparison/R2004(PLR2004) -
no-classmethod-decorator/R0202(PLR0202) -
no-else-break/R1723(RET508) -
no-else-continue/R1724(RET507) -
no-else-raise/R1720(RET506) -
no-else-return/R1705(RET505) -
no-self-use/R6301(PLR6301) -
no-staticmethod-decorator/R0203(PLR0203) -
property-with-parameters/R0206(PLR0206) -
redefined-argument-from-local/R1704(PLR1704) -
redefined-variable-type/R0204 -
simplifiable-condition/R1726 -
simplifiable-if-expression/R1719(SIM210,SIM211) -
simplifiable-if-statement/R1703(SIM108) -
simplify-boolean-expression/R1709 -
stop-iteration-return/R1708 -
super-with-arguments/R1725(UP008) -
too-complex/R1260(C901) -
too-few-public-methods/R0903 -
too-many-ancestors/R0901(requires multifile analysis) -
too-many-arguments/R0913(PLR0913) -
too-many-boolean-expressions/R0916(PLR0916) -
too-many-positional-arguments/R0917(PLR0917) -
too-many-branches/R0912(PLR0912) -
(requires Rule categorization #1774)too-many-instance-attributes/R0902 -
too-many-locals/R0914(PLR0914) -
too-many-nested-blocks/R1702(PLR1702) -
too-many-public-methods/R0904(PLR0904) -
too-many-return-statements/R0911(PLR0911) -
too-many-statements/R0915(PLR0915) -
trailing-comma-tuple/R1707(COM818) -
unnecessary-comprehension/R1721(C416) -
use-a-generator/R1729(C419) -
unnecessary-dict-index-lookup/R1733(PLR1733) -
use-list-literal/R1734(C405) -
use-dict-literal/R1735(C406) -
unnecessary-list-index-lookup/R1736(PLR1736) -
use-yield-from/R1737(UP028) -
use-set-for-membership/R6201(PLR6201) -
useless-object-inheritance/R0205(UP004) -
useless-option-value/R0022 -
useless-return/R1711(PLR1711)