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-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
) -
use-list-literal
/R1734
(C405
) -
use-yield-from
/R1737
(UP028
) -
use-set-for-membership
/R6201
(PLR6201
) -
useless-object-inheritance
/R0205
(UP004
) -
useless-option-value
/R0022
-
useless-return
/R1711
(PLR1711
)