pylint-2.5.0
-
Fix a false negative for
undefined-variable
when using class attribute in comprehension.Close #3494
-
Fix a false positive for
undefined-variable
when using class attribute in decorator or as type hint. -
Remove HTML quoting of messages in JSON output.
Close #2769
-
Adjust the
invalid-name
rule to work with non-ASCII identifiers and add thenon-ascii-name
rule.Close #2725
-
Positional-only arguments are taken in account for
useless-super-delegation
-
unidiomatic-typecheck
is no longer emitted forin
andnot in
operatorsClose #3337
-
Positional-only argument annotations are taken in account for
unused-import
Close #3462
-
Add a command to list available extensions.
-
Allow used variables to be properly consumed when different checks are enabled / disabled
Close #3445
-
Fix dangerous-default-value rule to account for keyword argument defaults
Close #3373
-
Fix a false positive of
self-assigning-variable
on tuple unpacking.Close #3433
-
no-self-use
is no longer emitted for typing stubs.Close #3439
-
Fix a false positive for
undefined-variable
when__class__
is usedClose #3090
-
Emit
invalid-name
for variables defined in loops at module level.Close #2695
-
Add a check for cases where the second argument to
isinstance
is not a type.Close #3308
-
Add 'notes-rgx' option, to be used for fixme check.
Close #2874
-
function-redefined
exempts function redefined on a condition.Close #2410
-
typing.overload
functions are exempted from docstring checksClose #3350
-
Emit
invalid-overridden-method
for improper async def overrides.Close #3355
-
Do not allow
python -m pylint ...
to import user codepython -m pylint ...
adds the current working directory as the first element
ofsys.path
. This opens up a potential security hole wherepylint
will import
user level code as long as that code resides in modules having the same name as stdlib
or pylint's own modules.Close #3386
-
Add
dummy-variables-rgx
option for_redeclared-assigned-name
check.Close #3341
-
Fixed graph creation for relative paths
-
Add a check for asserts on string literals.
Close #3284
-
not in
is considered iterating context for some of the Python 3 porting checkers. -
A new check
inconsistent-quotes
was added. -
Add a check for non string assignment to name attribute.
Close #583
-
__pow__
,__imatmul__
,__trunc__
,__floor__
, and__ceil__
are recognized as special method names.Close #3281
-
Added errors for protocol functions when invalid return types are detected.
E0304 (invalid-bool-returned): bool did not return a bool
E0305 (invalid-index-returned): index did not return an integer
E0306 (invalid-repr-returned): repr did not return a string
E0307 (invalid-str-returned): str did not return a string
E0308 (invalid-bytes-returned): bytes did not return a string
E0309 (invalid-hash-returned): hash did not return an integer
E0310 (invalid-length-hint-returned): length_hint did not return a non-negative integer
E0311 (invalid-format-returned): format did not return a string
E0312 (invalid-getnewargs-returned): getnewargs did not return a tuple
E0313 (invalid-getnewargs-ex-returned): getnewargs_ex did not return a tuple of the form (tuple, dict)Close #560
-
missing-*-docstring
can look for__doc__
assignments.Close #3301
-
undefined-variable
can now find undefined loop iterablesClose #498
-
safe_infer
can infer a value as long as all the paths share the same type.Close #2503
-
Add a --fail-under flag, also configurable in a .pylintrc file. If the final score is more than the specified score, it's considered a success and pylint exits with exitcode 0. Otherwise, it's considered a failure and pylint exits with its current exitcode based on the messages issued.
Close #2242
-
Don't emit
line-too-long
for multilines whendisable=line-too-long
comment stands at their endClose #2957
-
Fixed an
AttributeError
caused by improper handling ofdataclasses
inference inpyreverse
Close #3256
-
Do not exempt bare except from
undefined-variable
and similar checksIf a node was wrapped in a
TryExcept
,pylint
was taking a hint
from the except handler when deciding to emit or not a message.
We were treating bare except as a fully fledged ignore but only
the corresponding exceptions should be handled that way (e.g.NameError
orImportError
)Close #3235
-
No longer emit
assignment-from-no-return
when a function only raises an exceptionClose #3218
-
Allow import aliases to exempt
import-error
when used in type annotations.Close #3178
-
Ellipsis` is exempted from
multiple-statements`` for function overloads.Close #3224
-
No longer emit
invalid-name
for non-constants found at module level.Pylint was taking the following statement from PEP-8 too far, considering
all module level variables as constants, which is not what the statement is saying:Constants are usually defined on a module level and written in all capital letters with underscores separating words.
-
Allow
implicit-str-concat-in-sequence
to be emitted for string juxtapositionClose #3030
-
implicit-str-concat-in-sequence
was renamedimplicit-str-concat
-
The
json
reporter no longer bypassesredirect_stdout
. Close #3227 -
Move
NoFileError
,OutputLine
,FunctionalTestReporter
,
FunctionalTestFile
,LintModuleTest
and related methods from
test_functional.py
topylint.testutils
to help testing for 3rd
party pylint plugins. -
Can read config from a setup.cfg or pyproject.toml file.
Close #617
-
Fix exception-escape false positive with generators
Close #3128
-
inspect.getargvalues
is no longer marked as deprecated. -
A new check
f-string-without-interpolation
was addedClose #3190
-
Flag mutable
collections.*
utilities as dangerous defaultsClose #3183
-
docparams
extension supports multiple types in raises sections.Multiple types can also be separated by commas in all valid sections.
Closes #2729
-
Allow parallel linting when run under Prospector
-
Fixed false positives of
method-hidden
when a subclass defines the method that is being hidden.Closes #414
-
Python 3 porting mode is 30-50% faster on most codebases
-
Python 3 porting mode no longer swallows syntax errors
Closes #2956
-
Pass the actual PyLinter object to sub processes to allow using custom
PyLinter classes.PyLinter object (and all its members except reporter) needs to support
pickling so the PyLinter object can be passed to worker processes. -
Clean up setup.py
Make pytest-runner a requirement only if running tests, similar to McCabe.
Clean up the setup.py file, resolving a number of warnings around it.
-
Handle SyntaxError in files passed via
--from-stdin
optionPylint no longer outputs a traceback, if a file, read from stdin,
contains a syntaxerror. -
Fix uppercase style to disallow 3+ uppercase followed by lowercase.
-
Fixed
undefined-variable
andunused-import
false positives
when using a metaclass via an attribute.Close #1603
-
Emit
unused-argument
for functions that partially uses their argument list before raising an exception.Close #3246
-
Fixed
broad_try_clause
extension to check try/finally statements and to
check for nested statements (e.g., inside of anif
statement). -
Recognize classes explicitly inheriting from
abc.ABC
or having an
abc.ABCMeta
metaclass as abstract. This makes them not trigger W0223.Closes #3098
-
Fix overzealous
arguments-differ
when overridden function uses variadicsNo message is emitted if the overriding function provides positional or
keyword variadics in its signature that can feasibly accept and pass on
all parameters given by the overridden function. -
Multiple types of string formatting are allowed in logging functions.
The
logging-fstring-interpolation
message has been brought back to allow
multiple types of string formatting to be used.Close #3361