Pylint's ChangeLog¶
What's New in Pylint 2.12.0?¶
Release date: TBA
What's New in Pylint 2.11.2?¶
Release date: TBA
What's New in Pylint 2.11.1?¶
Release date: 2021-09-16
unspecified-encoding
now checks the encoding ofpathlib.Path()
correctlyCloses #5017
What's New in Pylint 2.11.0?¶
Release date: 2021-09-16
The python3 porting mode checker and it's
py3k
option were removed. You can still find it in older pylint versions.raising-bad-type
is now properly emitted when raising a stringAdded new extension
SetMembershipChecker
withuse-set-for-membership
check: Emitted when using an in-place definedlist
ortuple
to do a membership test.sets
are better optimized for that.Closes #4776
Added
py-version
config key (if[MASTER]
section). Used for version dependant checks. Will default to whatever Python version pylint is executed with.CodeStyleChecker
Added
consider-using-assignment-expr
: Emitted when an assignment is directly followed by an if statement and both can be combined by using an assignment expression:=
. Requires Python 3.8Closes #4862
Added
consider-using-f-string
: Emitted when .format() or '%' is being used to format a string.Closes #3592
Fix false positive for
consider-using-with
if a context manager is assigned to a variable in different paths of control flow (e. g. if-else clause).Closes #4751
https is now prefered in the documentation and http://pylint.pycqa.org correctly redirect to https://pylint.pycqa.org
Closes #3802
Fix false positive for
function-redefined
for simple type annotationsCloses #4936
Fix false positive for
protected-access
if a protected member is used in type hints of function definitionsFix false positive
dict-iter-missing-items
for dictionaries only using tuples as keysCloses #3282
The
unspecified-encoding
checker now also checks calls topathlib.Path().read_text()
andpathlib.Path().write_text()
Closes #4945
Fix false positive
superfluous-parens
for tuples created with inner tuplesCloses #4907
Fix false positive
unused-private-member
for accessing attributes in a class usingcls
Closes #4849
Fix false positive
unused-private-member
for private staticmethods accessed in classmethods.Closes #4849
Extended
consider-using-in
check to work for attribute access.Setting
min-similarity-lines
to 0 now makes the similarty checker stop checking for duplicate codeCloses #4901
Fix a bug where pylint complained if the cache's parent directory does not exist
Closes #4900
The
global-variable-not-assigned
checker now catches global variables that are never reassigned in a local scope and catches (reassigned) functionsCloses #1375 Closes #330
Fix false positives for invalid-all-format that are lists or tuples at runtime
Closes #4711
Fix
no-self-use
anddocparams extension
for async functions and methods.Add documentation for
pyreverse
andsymilar
Closes #4616
Non symbolic messages with the wrong capitalisation now correctly trigger
use-symbolic-message-instead
Closes #5000
The
consider-iterating-dictionary
checker now also considers membership checksCloses #4069
The
invalid-name
message is now more detailed when using multiple naming style regexes.
What's New in Pylint 2.10.2?¶
Release date: 2021-08-21
We now use platformdirs instead of appdirs since the latter is not maintained.
Closes #4886
Fix a crash in the checker raising
shallow-copy-environ
when failing to infer oncopy.copy
Closes #4891
What's New in Pylint 2.10.1?¶
Release date: 2021-08-20
pylint does not crash when PYLINT_HOME does not exist.
Closes #4883
What's New in Pylint 2.10.0?¶
Release date: 2021-08-20
pyreverse: add option to produce colored output.
Closes #4488
pyreverse: add output in PlantUML format.
Closes #4498
consider-using-with
is no longer triggered if a context manager is returned from a function.Closes #4748
pylint does not crash with a traceback anymore when a file is problematic. It creates a template text file for opening an issue on the bug tracker instead. The linting can go on for other non problematic files instead of being impossible.
pyreverse: Show class has-a relationships inferred from the type-hint
Closes #4744
Fixed a crash when importing beyond the top level package during
import-error
message creationCloses #4775
Added
ignored-parents
option to the design checker to ignore specific classes from thetoo-many-ancestors
check (R0901).Partially closes #3057
Added
unspecified-encoding
: Emitted when open() is called without specifying an encodingCloses #3826
Improved the Similarity checker performance. Fix issue with
--min-similarity-lines
used with--jobs
.Close #4120 Close #4118
Don't emit
no-member
error if guarded behind if statement.Ref #1162 Closes #1990 Closes #4168
The default for
PYLINTHOME
is now the standardXDG_CACHE_HOME
, and pylint now usesappdirs
.Closes #3878
Added
use-list-literal
: Emitted whenlist()
is called with no arguments instead of using[]
Closes #4365
Added
use-dict-literal
: Emitted whendict()
is called with no arguments instead of using{}
Closes #4365
Added optional extension
consider-ternary-expression
: Emitted whenever a variable is assigned in both branches of an if/else block.Closes # 4366
Added optional extension
while-used
: Emitted whenever awhile
loop is used.Closes # 4367
Added
forgotten-debug-statement
: Emitted whenbreakpoint
,pdb.set_trace
orsys.breakpointhook
calls are foundCloses #3692
Fix false-positive of
unused-private-member
when using nested functions in a classCloses #4673
Fix crash for
unused-private-member
that occurred with nested attributes.Closes #4755
Fix a false positive for
unused-private-member
with class namesCloses #4681
Fix false positives for
superfluous-parens
with walrus operator, ternary operator and inside list comprehension.Closes #2818 Closes #3249 Closes #3608 Closes #4346
Added
format-string-without-interpolation
checker: Emitted when formatting is applied to a string without any variables to be replacedCloses #4042
Refactor of
--list-msgs
&--list-msgs-enabled
: both options now show whether messages are emittable with the current interpreter.Closes #4778
Fix false negative for
used-before-assignment
when the variable is assigned in an exception handler, but used outside of the handler.Closes #626
Added
disable-next
option: allows using # pylint: disable-next=msgid to disable a message for the following lineCloses #1682
Added
redundant-u-string-prefix
checker: Emitted when the u prefix is added to a stringCloses #4102
Fixed
cell-var-from-loop
checker: handle cell variables in comprehensions within functions, and function default argument expressions. Also handle basic variable shadowing.Closes #2846 Closes #3107
Fixed bug with
cell-var-from-loop
checker: it no longer has false negatives when bothunused-variable
andused-before-assignment
are disabled.Fix false postive for
invalid-all-format
if the list or tuple builtin functions are usedCloses #4711
Config files can now contain environment variables
Closes #3839
Fix false-positive
used-before-assignment
with an assignment expression in aReturn
nodeCloses #4828
Added
use-sequence-for-iteration
: Emitted when iterating over an in-place definedset
.CodeStyleChecker
Limit
consider-using-tuple
to be emitted only for in-place definedlists
.Emit
consider-using-tuple
even if list contains astarred
expression.
Ignore decorators lines by similarities checker when ignore signatures flag enabled
Closes #4839
Allow
true
andfalse
values inpylintrc
for better compatibility withtoml
config.Class methods' signatures are ignored the same way as functions' with similarities "ignore-signatures" option enabled
Closes #4653
Improve performance when inferring
Call
nodes, by utilizing caching.Improve error message for invalid-metaclass when the node is an Instance.
What's New in Pylint 2.9.6?¶
Release date: 2021-07-28
Fix a false positive
undefined-variable
when variable name in decoration matches function argumentCloses #3791
What's New in Pylint 2.9.5?¶
Release date: 2021-07-21
Fix a crash when there would be a 'TypeError object does not support item assignment' in the code we parse.
Closes #4439
Fix crash if a callable returning a context manager was assigned to a list or dict item
Closes #4732
Fix a crash when a AttributeInferenceError was not handled properly when failing to infer the real name of an import in astroid.
Closes #4692
What's New in Pylint 2.9.4?¶
Release date: 2021-07-20
Added
time.clock
to deprecated functions/methods for python 3.3Fix bug in which --fail-on can return a zero exit code even when the specified issue is present
Closes #4296 Closes #3363
Fix hard failure when handling missing attribute in a class with duplicated bases
Closes #4687
Fix false-positive
consider-using-with
(R1732) if a ternary conditional is used together withwith
Closes #4676
Fix false-positive
deprecated-module
when relative import uses deprecated module name.Closes #4629
Fix false-positive
consider-using-with
(R1732) ifcontextlib.ExitStack
takes care of calling the__exit__
methodCloses #4654
Fix a false positive for
unused-private-member
when mutating a private attribute withcls
Closes #4657
Fix ignored empty functions by similarities checker with "ignore-signatures" option enabled
Closes #4652
Fix false-positive of
use-maxsplit-arg
when index is incremented in a loopCloses #4664
Don't emit
cyclic-import
message if import is guarded bytyping.TYPE_CHECKING
.Closes #3525
Fix false-positive
not-callable
with alternativeTypedDict
syntaxCloses #4715
Clarify documentation for consider-using-from-import
Don't emit
unreachable
warning for empty generator functionsCloses #4698
Don't emit
import-error
,no-name-in-module
, andungrouped-imports
for imports guarded bysys.version_info
ortyping.TYPE_CHECKING
.Closes #3285 Closes #3382
Fix
invalid-overridden-method
with nested propertyCloses #4368
Fix false-positive of
unused-private-member
when using__new__
in a classCloses #4668
No longer emit
consider-using-with
forThreadPoolExecutor
andProcessPoolExecutor
as they have legitimate use cases without awith
block.Closes #4689
Fix crash when inferring variables assigned in match patterns
Closes #4685
Fix a crash when a StopIteration was raised when inferring a faulty function in a context manager.
Closes #4723
What's New in Pylint 2.9.3?¶
Release date: 2021-07-01
Fix a crash that happened when analysing empty function with docstring in the
similarity
checker.Closes #4648
The
similarity
checker no longer add three trailing whitespaces for empty lines in its report.
What's New in Pylint 2.9.2?¶
Release date: 2021-07-01
Fix a crash that happened when analysing code using
type(self)
to access a class attribute in theunused-private-member
checker.Closes #4638
Fix a false positive for
unused-private-member
when accessing a private variable withself
Closes #4644
Fix false-positive of
unnecessary-dict-index-lookup
andconsider-using-dict-items
for reassigned dict index lookupsCloses #4630
What's New in Pylint 2.9.1?¶
Release date: 2021-06-30
Upgrade astroid to 2.6.2
Closes #4631 Closes #4633
What's New in Pylint 2.9.0?¶
Release date: 2021-06-29
Python 3.10 is now supported.
Add type annotations to pyreverse dot files
Closes #1548
Fix missing support for detecting deprecated aliases to existing functions/methods.
Closes #4618
astroid has been upgraded to 2.6.1
Added various deprecated functions/methods for python 3.10, 3.7, 3.6 and 3.3
Fix false positive
useless-type-doc
on ignored argument usingpylint.extensions.docparams
when a function was typed using pep484 but not inside the docstring.Closes #4117 Closes #4593
setuptools_scm
has been removed and replaced bytbump
in order to not have hidden runtime dependencies to setuptoolsFix a crash when a test function is decorated with
@pytest.fixture
and astroid can't infer the name of the decorator when usingopen
withoutwith
.Closes #4612
Added
deprecated-decorator
: Emitted when deprecated decorator is used.Closes #4429
Added
ignore-paths
behaviour. Defined regex patterns are matched against full file path.Close #2541
Fix false negative for
consider-using-with
if calls likeopen()
were used outside of assignment expressions.The warning for
arguments-differ
now signals explicitly the difference it detected by naming the argument or arguments that changed and the type of change that occurred.Suppress
consider-using-with
inside context managers.Closes #4430
Added
--fail-on
option to return non-zero exit codes regardless of--fail-under
value.numversion tuple contains integers again to fix multiple pylint's plugins that relied on it
Closes #4420
Fix false-positive
too-many-ancestors
when inheriting from builtin classes, especially from thecollections.abc
moduleCloses #4166 Closes #4415
Stdlib deprecated modules check is moved to stdlib checker. New deprecated modules are added.
Fix raising false-positive
no-member
on abstract propertiesCreated new error message called
arguments-renamed
which identifies any changes at the parameter names of overridden functions.Closes #3536
New checker
consider-using-dict-items
. Emitted when iterating over dictionary keys and then indexing the same dictionary with the key within loop body.Closes #3389
Don't emit
import-error
if import guarded behindif sys.version_info >= (x, x)
Fix incompatibility with Python 3.6.0 caused by
typing.Counter
andtyping.NoReturn
usageCloses #4412
New checker
use-maxsplit-arg
. Emitted either when accessing only the first or last element ofstr.split()
.Closes #4440
Add ignore_signatures to duplicate code checker
Closes #3619
Fix documentation errors in "Block disables" paragraph of User Guide.
New checker
unnecessary-dict-index-lookup
. Emitted when iterating over dictionary items (key-value pairs) and accessing the value by index lookup.Closes #4470
New checker``consider-using-from-import``. Emitted when a submodule/member of a package is imported and aliased with the same name.
Closes #2309
Allow comma-separated list in
output-format
and separate output files for each specified format.Closes #1798
Make
using-constant-test
detect constant tests consisting of list literals like[]
and[1, 2, 3]
.Improved error message of
unnecessary-comprehension
checker by providing code suggestion.Closes #4499
New checker
unused-private-member
. Emitted when a private member (i.e., starts with__
) of a class is defined but not used.Closes #4483
Fix false negative of
consider-using-enumerate
when iterating over an attribute.Closes #3657
New checker
invalid-class-object
. Emitted when a non-class is assigned to a__class__
attribute.Closes #585
Fix a crash when a plugin from the configuration could not be loaded and raise an error 'bad-plugin-value' instead
Closes #4555
Added handling of floating point values when parsing configuration from pyproject.toml
Closes #4518
invalid-length-returned
, now also works when nothing at all is returned following an upgrade in astroid.logging-format-interpolation
andlogging-not-lazy
, now works on logger class created from renamed logging import following an upgrade in astroid.Fix false-positive
no-member
with generic base classCloses PyCQA/astroid#942
Fix
assigning-non-slot
false-positive with base that inherits fromtyping.Generic
Closes #4509 Closes PyCQA/astroid#999
New checker
invalid-all-format
. Emitted when__all__
has an invalid format, i.e. isn't atuple
orlist
.Fix false positive
unused-variable
andundefined-variable
with Pattern Matching in Python 3.10New checker
await-outside-async
. Emitted when await is used outside an async function.Clarify documentation for
typing
extension.Closes #4545
Add new extension
CodeStyleChecker
. It includes checkers that can improve code consistency. As such they don't necessarily provide a performance benefit and are often times opinionated.New checker
consider-using-tuple
. Emitted when an in-place defined list or set can be replaced by a tuple.New checker
consider-using-namedtuple-or-dataclass
. Emitted when dictionary values can be replaced by namedtuples or dataclass instances.Fix error that occurred when using
slice
as subscript for dict.Reduce false-positives around inference of
.value
and.name
properties onEnum
subclasses, following an upgrade in astroidCloses #1932 Closes #2062
Fix issue with
cached_property
that causedinvalid-overridden-method
error when overriding aproperty
.Closes #4023
Fix
unused-import
false positive for imported modules referenced in attribute lookups in type comments.Closes #4603
What's New in Pylint 2.8.3?¶
Release date: 2021-05-31
Astroid has been pinned to 2.5.6 for the 2.8 branch see #4527.
What's New in Pylint 2.8.2?¶
Release date: 2021-04-26
Keep
__pkginfo__.numversion
a tuple to avoid breaking pylint-django.Closes #4405
scm_setuptools has been added to the packaging.
Pylint's tags are now the standard form
vX.Y.Z
and notpylint-X.Y.Z
anymore.New warning message
deprecated-class
. This message is emitted if import or call deprecated class of the standard library (likecollections.Iterable
that will be removed in Python 3.10).
Closes #4388
What's New in Pylint 2.8.1?¶
Release date: 2021-04-25
Add numversion back (temporarily) in
__pkginfo__
because it broke Pylama and revert the unnecessarypylint.version
breaking change.Closes #4399
What's New in Pylint 2.8.0?¶
Release date: 2021-04-24
New refactoring message
consider-using-with
. This message is emitted if resource-allocating functions or methods of the standard library (likeopen()
orthreading.Lock.acquire()
) that can be used as a context manager are called without awith
block.Closes #3413
Resolve false positives on unused variables in decorator functions
Closes #4252
Add new extension
ConfusingConsecutiveElifChecker
. This optional checker emits a refactoring message (R5601confusing-consecutive-elif
) if if/elif statements with different indentation levels follow directly one after the other.New option
--output=<file>
to output result to a file rather than printing to stdout.Closes #1070
Use a prescriptive message for
unidiomatic-typecheck
Closes #3891
Apply
const-naming-style
to module constants annotated withtyping.Final
The packaging is now done via setuptools exclusively.
doc
,tests
,man
,elisp
andChangelog
are not packaged anymore - reducing the size of the package by 75%.Debian packaging is now (officially) done in https://salsa.debian.org/python-team/packages/pylint.
The 'doc' extra-require has been removed.
__pkginfo__
now only contain__version__
(also accessible withpylint.__version__
), other meta-information are still accessible withfrom importlib import metadata;metadata.metadata('pylint')
.COPYING has been renamed to LICENSE for standardization.
Fix false-positive
used-before-assignment
in function returns.Closes #4301
Updated
astroid
to 2.5.3Closes #2822, #4206, #4284
Add
consider-using-min-max-builtin
check for if statement which could be replaced by Python builtin min or maxCloses #3406
Don't auto-enable postponed evaluation of type annotations with Python 3.10
Update
astroid
to 2.5.4Add new extension
TypingChecker
. This optional checker can detect the use of deprecated typing aliases and can suggest the use of the alternative union syntax where possible. (For example, 'typing.Dict' can be replaced by 'dict', and 'typing.Unions' by '|', etc.) Make sure to check the config options if you plan on using it!Reactivates old counts in report mode.
Closes #3819
During detection of
inconsistent-return-statements
consider thatassert False
is a return node.Closes #4019
Run will not fail if score exactly equals
config.fail_under
.Functions that never returns may declare
NoReturn
as type hints, so thatinconsistent-return-statements
is not emitted.Closes #4122, #4188
Improved protected access checks to allow access inside class methods
Closes #1159
Fix issue with PEP 585 syntax and the use of
collections.abc.Set
Fix issue that caused class variables annotated with
typing.ClassVar
to be identified as class constants. Now, class variables annotated withtyping.Final
are identified as such.Closes #4277
Continuous integration with read the doc has been added.
Closes #3850
Don't show
DuplicateBasesError
for attribute accessFix crash when checking
setup.cfg
for pylint config when there are non-ascii characters in thereCloses #4328
Allow code flanked in backticks to be skipped by spellchecker
Closes #4319
Allow Python tool directives (for black, flake8, zimports, isort, mypy, bandit, pycharm) at beginning of comments to be skipped by spellchecker
Closes #4320
Fix issue that caused emacs pylint to fail when used with tramp
Improve check for invalid PEP 585 syntax inside functions if postponed evaluation of type annotations is enabled
Improve check for invalid PEP 585 syntax as default function arguments
What's New in Pylint 2.7.4?¶
Release date: 2021-03-30
Fix a problem with disabled msgid not being ignored
Closes #4265
Fix issue with annotated class constants
Closes #4264
What's New in Pylint 2.7.3?¶
Release date: 2021-03-29
Introduce logic for checking deprecated attributes in DeprecationMixin.
Reduce usage of blacklist/whitelist terminology. Notably,
extension-pkg-allow-list
is an alternative toextension-pkg-whitelist
and the messageblacklisted-name
is now emitted asdisallowed-name
. The previous names are accepted to maintain backward compatibility.Move deprecated checker to
DeprecatedMixin
Closes #4086
Bump
astroid
version to2.5.2
Fix false positive for
method-hidden
when using private attribute and methodCloses #3936
use-symbolic-message-instead
now also works on legacy messages likeC0111
(missing-docstring
).Remove unwanted print to stdout from
_emit_no_member
Introduce a command-line option to specify pyreverse output directory
Closes #4159
Fix issue with Enums and
class-attribute-naming-style=snake_case
Closes #4149
Add
allowed-redefined-builtins
option for fine tuningredefined-builtin
check.Close #3263
Fix issue when executing with
python -m pylint
Closes #4161
Exempt
typing.TypedDict
fromtoo-few-public-methods
check.Closes #4180
Fix false-positive
no-member
for typed annotations without default value.Closes #3167
Add
--class-const-naming-style
for Enum constants and class variables annotated withtyping.ClassVar
Closes #4181
Fix astroid.Inference error for undefined-variables with
len()`
Closes #4215
Fix column index on FIXME warning messages
Closes #4218
Improve handling of assignment expressions, better edge case handling
Closes #3763, #4238
Improve check if class is subscriptable PEP585
Fix documentation and filename handling of --import-graph
Fix false-positive for
unused-import
on class keyword argumentsCloses #3202
Fix regression with plugins on PYTHONPATH if latter is cwd
Closes #4252
What's New in Pylint 2.7.2?¶
Release date: 2021-02-28
Fix False Positive on
Enum.__members__.items()
,Enum.__members__.values
, andEnum.__members__.keys
Closes #4123Properly strip dangerous sys.path entries (not just the first one)
Closes #3636
Workflow and packaging improvements
What's New in Pylint 2.7.1?¶
Release date: 2021-02-23
Expose
UnittestLinter
in pylint.testutilsDon't check directories starting with '.' when using register_plugins
Closes #4119
What's New in Pylint 2.7.0?¶
Release date: 2021-02-21
Introduce DeprecationMixin for reusable deprecation checks.
Closes #4049
Fix false positive for
builtin-not-iterating
whenmap
receives iterableCloses #4078
Python 3.6+ is now required.
Fix false positive for
builtin-not-iterating
whenzip
receives iterableAdd
nan-comparison
check for NaN comparisonsBug fix for empty-comment message line number.
Closes #4009
Only emit
bad-reversed-sequence
on dictionaries if below py3.8Closes #3940
Handle class decorators applied to function.
Closes #3882
Add check for empty comments
Fix minor documentation issue in contribute.rst
Enums are now required to be named in UPPER_CASE by
invalid-name
.Close #3834
Add missing checks for deprecated functions.
Postponed evaluation of annotations are now recognized by default if python version is above 3.10
Closes #3992
Fix column metadata for anomalous backslash lints
Drop support for Python 3.5
Add support for pep585 with postponed evaluation
Closes #3320
Check alternative union syntax - PEP 604
Closes #4065
Fix multiple false positives with assignment expressions
Closes #3347, #3953, #3865, #3275
Fix TypedDict inherit-non-class false-positive Python 3.9+
Closes #1927
Fix issue with nested PEP 585 syntax
Fix issue with nested PEP 604 syntax
Fix a crash in
undefined-variable
caused by chained attributes in metaclassClose #3742
Fix false positive for
not-async-context-manager
whencontextlib.asynccontextmanager
is usedClose #3862
Fix linter multiprocessing pool shutdown (triggered warnings when runned in parallels with other pytest plugins)
Closes #3779
Fix a false-positive emission of
no-self-use
andunused-argument
for methods of generic structural types (Protocol[T])Closes #3885
Fix bug that lead to duplicate messages when using
--jobs 2
or more.Close #3584
Adds option
check-protected-access-in-special-methods
in the ClassChecker to activate/deactivateprotected-access
message emission for single underscore prefixed attribute in special methods.Close #3120
Fix vulnerable regular expressions in
pyreverse
Close #3811
inconsistent-return-statements
message is now emitted if one oftry/except
statement is not returning explicitly while the other do.Closes #3468
Fix
useless-super-delegation
false positive when default keyword argument is a dictionnary.Close #3773
Fix a crash when a specified config file does not exist
Add support to
ignored-argument-names
in DocstringParameterChecker and addsuseless-param-doc
anduseless-type-doc
messages.Close #3800
Enforce docparams consistently when docstring is not present
Close #2738
Fix
duplicate-code
false positive when lines only contain whitespace and non-alphanumeric characters (e.g. parentheses, bracket, comma, etc.)Improve lint message for
singleton-comparison
with boolsFix spell-checker crash on indented docstring lines that look like # comments
Close #3786
Fix AttributeError in checkers/refactoring.py
Improve sphinx directives spelling filter
Fix a bug with postponed evaluation when using aliases for annotations.
Close #3798
Fix minor documentation issues
Improve the performance of the line length check.
Removed incorrect deprecation of
inspect.getfullargspec
Fix
signature-differs
false positive for functions with variadicsClose #3737
Fix a crash in
consider-using-enumerate
when encounteringrange()
without argumentsClose #3735
len-as-conditions
is now triggered only for classes that are inheriting directly from list, dict, or set and not implementing the__bool__
function, or from generators like range or list/dict/set comprehension. This should reduce the false positives for other classes, like pandas's DataFrame or numpy's Array.Close #1879
Fixes duplicate-errors not working with -j2+
Close #3314
generated-members
now matches the qualified name of membersClose #2498
Add check for bool function to
len-as-condition
Add
simplifiable-condition
check for extraneous constants in conditionals using and/or.Add
condition-evals-to-constant
check for conditionals using and/or that evaluate to a constant.Close #3407
Changed setup.py to work with distlib
Close #3555
New check:
consider-using-generator
This check warns when a comprehension is used inside an
any
orall
function, since it is unnecessary and should be replaced by a generator instead. Using a generator would be less code and way faster.Close #3165
Add Github Actions to replace Travis and AppVeyor in the future
What's New in Pylint 2.6.1?¶
Release date: 2021-02-16
Astroid version has been set as < 2.5
Close #4093
What's New in Pylint 2.6.0?¶
Release date: 2020-08-20
Fix various scope-related bugs in
undefined-variable
checkerClose #1082, #3434, #3461
bad-continuation and bad-whitespace have been removed, black or another formatter can help you with this better than Pylint
Close #246, #289, #638, #747, #1148, #1179, #1943, #2041, #2301, #2304, #2944, #3565
The no-space-check option has been removed. It's no longer possible to consider empty line like a
trailing-whitespace
by using clever optionsClose #1368
missing-kwoa
is no longer emitted when dealing with overload functionsClose #3655
mixed-indentation has been removed, it is no longer useful since TabError is included directly in python3
Close #2984 #3573
Add
super-with-arguments
check for flagging instances of Python 2 style super calls.Add an faq detailing which messages to disable to avoid duplicates w/ other popular linters
Fix superfluous-parens false-positive for the walrus operator
Close #3383
Fix
fail-under
not accepting floatsFix a bug with
ignore-docstrings
ignoring all lines in a moduleFix
pre-commit
config that could lead to undetected duplicate lines of codeFix a crash in parallel mode when the module's filepath is not set
Close #3564
Add
raise-missing-from
check for exceptions that should have a cause.Support both isort 4 and isort 5. If you have pinned isort 4 in your projet requirements, nothing changes. If you use isort 5, though, note that the
known-standard-library
option is not interpreted the same in isort 4 and isort 5 (see the migration guide in isort documentation for further details). For compatibility's sake for most pylint users, theknown-standard-library
option in pylint now maps toextra-standard-library
in isort 5. If you really want whatknown-standard-library
now means in isort 5, you must disable thewrong-import-order
check in pylint and run isort manually with a proper isort configuration file.Close #3722
Fix a crash caused by not guarding against
InferenceError
when callinginfer_call_result
Close #3690
Fix a crash in parallel mode when the module's filepath is not set
Close #3564
What's New in Pylint 2.5.3?¶
Release date: 2020-06-8
Fix a regression where disable comments that have checker names with numbers in them are not parsed correctly
Close #3666
property-with-parameters
properly handles abstract propertiesClose #3600
continue-in-finally
no longer emitted on Python 3.8 where it's now validClose #3612
Fix a regression where messages with dash are not fully parsed
Close #3604
In a TOML configuration file, it's now possible to use rich (non-string) types, such as list, integer or boolean instead of strings. For example, one can now define a list of message identifiers to enable like this:
enable = [ "use-symbolic-message-instead", "useless-suppression", ]
Close #3538
Fix a regression where the score was not reported with multiple jobs
Close #3547
Protect against
AttributeError
when checkingcell-var-from-loop
Close #3646
What's New in Pylint 2.5.2?¶
Release date: 2020-05-05
pylint.Run
acceptsdo_exit
as a deprecated parameterClose #3590
What's New in Pylint 2.5.1?¶
Release date: 2020-05-05
Fix a crash in
method-hidden
lookup for unknown base classesClose #3527
Revert pylint.Run's
exit
parameter todo_exit
This has been inadvertently changed several releases ago to
do_exit
.Close #3533
no-value-for-parameter
variadic detection has improved for assign statementsClose #3563
Allow package files to be properly discovered with multiple jobs
Close #3524
Allow linting directories without
__init__.py
which was a regression in 2.5.Close #3528
What's New in Pylint 2.5.0?¶
Release date: 2020-04-27
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.Close #511 Close #1976
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 <score> 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.
Close #3111 Close #3132
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 #3227Move
NoFileError
,OutputLine
,FunctionalTestReporter
,FunctionalTestFile
,LintModuleTest
and related methods fromtest_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 anabc.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.
Close #1482 Close #1553
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
What's New in Pylint 2.4.4?¶
Release date: 2019-11-13
Exempt all the names found in type annotations from
unused-import
The previous code was assuming that only
typing
names need to be exempted, but we need to do that for the rest of the type comment names as well.Close #3112
Relax type import detection for names that do not come from the
typing
moduleClose #3191
What's New in Pylint 2.4.3?¶
Release date: 2019-10-18
Fix an issue with
unnecessary-comprehension
in comprehensions with additional repacking of elements.Close #3148
import-outside-toplevel
is emitted forImportFrom
nodes as well.Close #3175
Do not emit
no-method-argument
for functions using positional only args.Close #3161
consider-using-sys-exit
is no longer emitted whenexit
is imported in the local scope.Close #3147
invalid-overridden-method
takesabc.abstractproperty
in accountClose #3150
Fixed
missing-yield-type-doc
getting incorrectly raised when a generator does not document a yield type but has a type annotation.Closes #3185
typing.overload
functions are exempted fromtoo-many-function-args
Close #3170
What's New in Pylint 2.4.2?¶
Release date: 2019-09-30
ignored-modules
can skip submodules. Close #3135self-assigning-variable
skips class level assignments.Close #2930
consider-using-sys-exit
is exempted whenexit()
is imported fromsys
Close #3145
Exempt annotated assignments without variable from
class-variable-slots-conflict
Close #3141
Fix
utils.is_error
to account for functions returning early.This fixes a false negative with
unused-variable
which was no longer triggered when a function raised an exception as the last instruction, but the body of the function still had unused variables.Close #3028
What's New in Pylint 2.4.1?¶
Release date: 2019-09-25
Exempt type checking definitions defined in both clauses of a type checking guard
Close #3127
Exempt type checking definitions inside the type check guard
In a7f236528bb3758886b97285a56f3f9ce5b13a99 we added basic support for emitting
used-before-assignment
if a variable was only defined inside a type checking guard (usingTYPE_CHECKING
variable from typing) Unfortunately that missed the case of using those type checking imports inside the guard itself, which triggered spurious used-before-assignment errors.Close #3119
Require astroid >= 2.3 to avoid any compatibility issues.
What's New in Pylint 2.4.0?¶
Release date: 2019-09-24
New check:
import-outside-toplevel
This check warns when modules are imported from places other than a module toplevel, e.g. inside a function or a class.
Handle inference ambiguity for
invalid-format-index
Close #2752
Removed Python 2 specific checks such as
relative-import
,invalid-encoded-data
,missing-super-argument
.Support forward references for
function-redefined
check.Close #2540
Handle redefinitions in case of type checking imports.
Close #2834
Added a new check,
consider-using-sys-exit
This check is emitted when we detect that a quit() or exit() is invoked instead of sys.exit(), which is the preferred way of exiting in program.
Close #2925
useless-suppression
check now ignorescyclic-import
suppressions, which could lead to false postiives due to incomplete context at the time of the check.Close #3064
Added new checks,
no-else-break
andno-else-continue
These checks highlight unnecessary
else
andelif
blocks afterbreak
andcontinue
statements.Close #2327
Don't emit
protected-access
when a single underscore prefixed attribute is used inside a special methodClose #1802
Fix the "statement" values in the PyLinter's stats reports by module.
Added a new check,
invalid-overridden-method
This check is emitted when we detect that a method is overridden as a property or a property is overridden as a method. This can indicate a bug in the application code that will trigger a runtime error.
Close #2670
Added a new check,
arguments-out-of-order
This check warns if you have arguments with names that match those in a function's signature but you are passing them in to the function in a different order.
Close #2975
Added a new check,
redeclared-assigned-name
This check is emitted when
pylint
detects that a name was assigned one or multiple times in the same assignment, which indicate a potential bug. Close #2898Ignore lambda calls with variadic arguments without a context.
Inferring variadic positional arguments and keyword arguments will result into empty Tuples and Dicts, which can lead in some cases to false positives with regard to no-value-for-parameter. In order to avoid this, until we'll have support for call context propagation, we're ignoring such cases if detected. We already did that for function calls, but the previous fix was not taking in consideration
lambdas
Close #2918
Added a new check,
self-assigning-variable
This check is emitted when we detect that a variable is assigned to itself, which might indicate a potential bug in the code application. Close #2930
Added a new check,
property-with-parameters
.This check is emitted when we detect that a defined property also has parameters, which are useless. Close #3006
Excluded protocol classes from a couple of checks. Close #3002.
Add a check
unnecessary-comprehension
that detects unnecessary comprehensions.This check is emitted when
pylint
finds list-, set- or dict-comprehensions, that are unnecessary and can be rewritten with the list-, set- or dict-constructors.Close #2905
Excluded PEP 526 instance and class variables from
no-member
. Close #2945Excluded
attrs
fromtoo-few-public-methods
check. Close #2988.unused-import
emitted for the right import names in function scopes.Close #2928
Dropped support for Python 3.4.
assignment-from-no-return
not triggered for async methods.Close #2902
Don't emit
attribute-defined-outside-init
for variables defined in setters.Close #409
Syntax errors report the column number.
Close #2914
Support fully qualified typing imports for type annotations.
Close #2915
Exclude
__dict__
fromattribute-defined-outside-init
Fix pointer on spelling check when the error are more than one time in the same line.
Close #2895
Fix crash happening when parent of called object cannot be determined
Allow of in
GoogleDocstring.re_multiple_type
Added
subprocess-run-check
to handle subrocess.run without explicitly setcheck
keyword.Close #2848
When we can't infer bare except handlers, skip
try-except-raise
Close #2853
Handle more
unnecessary-lambda
cases when dealing with additional kwargs in wrapped callsClose #2845
Better postponed evaluation of annotations handling
Close #2847
Support postponed evaluation of annotations for variable annotations.
Close #2838
epylint.py_run
defaults topython
in case the current executable is not a Python one.Close #2837
Ignore raw docstrings when running Similarities checker with
ignore-docstrings=yes
optionFix crash when calling
inherit_from_std_ex
on a class which is its own ancestorClose #2680
Added a new check that warns the user if a function call is used inside a test but parentheses are missing.
Close #2658
len-as-condition
now only fires when alen(x)
call is made without an explicit comparisonThe message and description accompanying this checker has been changed reflect this new behavior, by explicitly asking to either rely on the fact that empty sequence are false or to compare the length with a scalar.
Close #2684
Add
preferred-module
checker that notify if an import has a replacement module that should be used.This check is emitted when
pylint
finds an imported module that has a preferred replacement listed inpreferred-modules
.assigning-non-slot
not emitted for classes with unknown base classes.Close #2807
old-division
is not emitted for non-Const nodes.Close #2808
Added method arguments to the dot writer for pyreverse.
Close #2139
Support for linting file from stdin.
IDEs may benefit from the support for linting from an in-memory file.
Close #1187
Added a new check
class-variable-slots-conflict
This check is emitted when
pylint
finds a class variable that conflicts with a slot name, which would raise aValueError
at runtime.Added new check: dict-iter-missing-items (E1141)
Close #2761
Fix issue with pylint name in output of python -m pylint --version
Close #2764
Relicense logo material under the CC BY-SA 4.0 license.
Skip
if
expressions from f-strings for thecheck_elif
checkerClose #2816
C0412 (ungrouped-import) is now compatible with isort.
Close #2806
Added new extension to detect too much code in a try clause
Close #2877
signature-mutators
option was addedWith this option, users can choose to ignore
too-many-function-args
,unexpected-keyword-arg
, andno-value-for-parameter
for functions decorated with decorators that change the signature of a decorated function.Close #259
Fixed a pragma comment on its own physical line being ignored when part of a logical line with the previous physical line.
Close #199
Fixed false
undefined-loop-variable
for a function defined in the loop, that uses the variable defined in that loop.Close #202
Fixed
unused-argument
andfunction-redefined
getting raised for functions decorated withtyping.overload
.Close #1581
Fixed a false positive with
consider-using-dict-comprehension
for constructions that can't be converted to a comprehensionClose #2963
Added
__post_init__
todefining-attr-methods
in order to avoidattribute-defined-outside-init
in dataclasses.Close #2581
Changed description of W0199 to use the term 2-item-tuple instead of 2-uple.
Allow a
.
as a prefix for Sphinx name resolution.Checkers must now keep a 1 to 1 relationship between "msgid" (ie: C1234) and "symbol" (ie : human-readable-symbol)
In checkers, an old_names can now be used for multiple new messages and pylint is now a little faster
Caused by #1164. It means if you do a partial old_names for a message definition an exception will tell you that you must rename the associated identification.
Allow the choice of f-strings as a valid way of formatting logging strings.
Closes #2395
Added
--list-msgs-enabled
command to list all enabled and disabled messages given the current RC file and command line arguments.
What's New in Pylint 2.3.0?¶
Release date: 2019-02-27
Protect against
NonDeducibleTypeHierarchy
when calling semi-privateis_subtype
astroid.helpers.is_subtype
raisesNonDeducibleTypeHierarchy
when it cannot infer the base classes of the given types, but that makes sense in its context given that the method is mostly used to inform the inference process about the hierarchy of classes. Doesn't make that much sense forpylint
itself, which is why we're handling the exception here, rather than inastroid
Close PyCQA/astroid#644
Added a new command line option
list-groups
for listing all the check groupspylint
knows about.Allow
BaseException
for emittingbroad-except
, just likeException
.Close #2741
Fixed a crash that occurred for
bad-str-strip-call
whenstrip()
receivedNone
Close #2743
Don't emit
*-not-iterating
checks for builtins consumed byitertools
Close #2731
Fix a crash caused by iterating over
Uninferable
in a string formatting check.Close #2727
Fixed false positives for
no-self-argument
andunsubscriptable-object
when using__class_getitem__
(new in Python 3.7)Close #2416
Support
Ellipsis
as a synonym forpass
statements.Close #2718
fixme
gets triggered only on comments.Close #2321
Fixed a false positive for
unused-variable
andnonlocal
assignmentsClose #2671
Added
load_configuration()
hook for pluginsNew optional hook for plugins is added:
load_configuration()
. This hook is executed after configuration is loaded to prevent overwriting plugin specific configuration via user-based configuration.Close #2635
Fix missing-raises-doc false positive (W9006)
Close #1502
Exempt starred unpacking from
*-not-iterating
Python 3 checksClose #2651
Make
compare-to-zero
less zealous by checking against equality and identityClose #2645
Add
no-else-raise
warning (R1720)Close #2558
Exempt
yield from
from*-not-iterating
Python 3 checks.Close #2643
Fix incorrect generation of
no-else-return
warnings (R1705)Fixed issue where
if
statements with nestedif
statements were incorrectly being flagged asno-else-return
in some cases and not being flagged asno-else-return
in other cases. Added tests for verification and updated pylint source files to eliminate newly exposed warnings.Fix false positive with
not-async-context-manager
caused by not understandingcontextlib.asynccontextmanager
Close #2440
Refactor
bad-reversed-sequence
to account for more objects that can define__reversed__
One such object would be an enum class, for which
__reversed__
yields each individual enum. As such, the check forbad-reversed-sequence
needs to not differentiate between classes and instances when it comes for checking of__reversed__
presence.Close #2598
Added
wrong-exception-operation
Used when an operation is done against an exception, but the operation is not valid for the exception in question. Usually emitted when having binary operations between exceptions in except handlers.
Close #2494
no-member
is emitted for enums when they lack a memberPreviously we weren't doing this because we detected a
__getattr__
implementation on theEnum
class (and this check is skipped for classes with__getattr__
), but that is fine for Enums, given that they are inferred in a customised way in astroid.Close #2565
Generalize
chained-comparison
Previous version incorrectly detects a < b < c and b < d and fails to detect a < b < c and c < d.
Avoid popping __main__ when using multiple jobs
Close #2689
Add a new option 'check-str-concat-over-line-jumps' to check 'implicit-str-concat-in-sequence'
Fixes for the new style logging format linter.
The number of arguments was not handled properly, leading to an always successful check.
Fix false positive
not-callable
for uninferable properties.Fix false positive
useless-else-on-loop
if the break is deep in the else of an inner loop.Minor improvements to the help text for a few options.
What's New in Pylint 2.2.2?¶
Release date: 2018-11-28
Change the
logging-format-style
to use name identifier instead of their corresponding Python identifiersThis is to prevent users having to think about escaping the default value for
logging-format-style
in the generated config file. Also our config parsing utilities don't quite support escaped values when it comes tochoices
detection, so this would have needed various hacks around that.Closes #2614
What's New in Pylint 2.2.1?¶
Release date: 2018-11-27
Fix a crash caused by
implicit-str-concat-in-sequence
and multi-bytes characters.Closes #2610
What's New in Pylint 2.2?¶
Release date: 2018-11-25
Consider
range()
objects forundefined-loop-variable
leaking from iteration.Close #2533
deprecated-method
can use the attribute name for identifying a deprecated methodPreviously we were using the fully qualified name, which we still do, but the fully qualified name for some
unittest
deprecated aliases leads to a generic deprecation function. Instead on relying on that, we now also rely on the attribute name, which should solve some false positives.Close #1653 Close #1946
Fix compatibility with changes to stdlib tokenizer.
pylint
is less eager to consume the whole line for pragmasClose #2485
Obtain the correct number of CPUs for virtualized or containerized environments.
Close #2519
Change
unbalanced-tuple-unpacking
back to a warning.It used to be a warning until a couple of years ago, after it was promoted to an error. But the check might be suggesting the wrong thing in some cases, for instance when checking against
sys.argv
which cannot be known at static analysis time. Given it might rely on potential unknown data, it's best to have it as a warning.Close #2522
Remove
enumerate
usage suggestion when defining__iter__
(C0200)Close #2477
Emit
too-many-starred-assignment
only when the number of Starred nodes is per assignment elementsClose #2513
try-except-raise
checker now handles multilevel inheritance hirerachy for exceptions correctly.Close #2484
Add a new check,
simplifiable-if-expression
for expressions likeTrue if cond else False
.Close #2487
too-few-public-methods
is not reported fortyping.NamedTuple
Close #2459
`too-few-public-methods
is not reported for dataclasses created with options.Close #2488
Remove wrong modules from 'bad-python3-import'.
Close #2453
The
json
reporter prints an empty list when no messages are emittedClose #2446
Add a new check,
duplicate-string-formatting-argument
This new check is emitted whenever a duplicate string formatting argument is found.
Close #497
assignment-from-no-return
is not emitted for coroutines.Close #1715
Report format string type mismatches.
consider-using-ternary
andsimplified-boolean-expression
no longer emit for sequence based checksClose #2473
Handle
AstroidSyntaxError
when trying to import a module.Close #2313
Allow
__module__
to be redefined at a class level. Close #2451
pylint
used to emit aunused-variable
error if unused import was found in the function. Now instead ofunused-variable
,unused-import
is emitted.Close #2421
Handle asyncio.coroutine when looking for
not-an-iterable
check.Close #996
The
locally-enabled
check is gone.Close #2442
Infer decorated methods when looking for method-hidden
Close #2369
Pick the latest value from the inferred values when looking for
raising-non-exception
Close #2431
Extend the TYPE_CHECKING guard to TYPE_CHECKING name as well, not just the attribute
Close #2411
Ignore import x.y.z as z cases for checker
useless-import-alias
.Close #2309
Fix false positive
undefined-variable
andused-before-assignment
with nonlocal keyword usage.Close #2049
Stop
protected-access
exception for missing class attributesDon't emit
assignment-from-no-return
for decorated function nodesClose #2385
unnecessary-pass
is now also emitted when a function or class contains only docstring and pass statement.In Python, stubbed functions often have a body that contains just a single
pass
statement, indicating that the function doesn't do anything. However, a stubbed function can also have just a docstring, and function with a docstring and no body also does nothing.Close #2208
duplicate-argument-name
is emitted for more than one duplicate argument per functionClose #1712
Allow double indentation levels for more distinguishable indentations
Close #741
Consider tuples in exception handler for
try-except-raise
. Close #2389Fix astroid.ClassDef check in checkers.utils.is_subclass_of
Fix wildcard imports being ignored by the import checker
Fix external/internal distinction being broken in the import graph
Fix wildcard import check not skipping
__init__.py
Close #2430
Add new option to logging checker,
logging_format_style
Fix --ignore-imports to understand multi-line imports
Close #1422 Close #2019
Add a new check 'implicit-str-concat-in-sequence' to spot string concatenation inside lists, sets & tuples.
literal-comparison
is now emitted for 0 and 1 literals.
What's New in Pylint 2.1.1?¶
Release date: 2018-08-07
fix pylint crash due to
misplaced-format-function
not correctly handling class attribute. Close #2384Do not emit *-builtin for Python 3 builtin checks when the builtin is used inside a try-except
Close PyCQA/pylint#2228
simplifiable-if-statement
not emitted when dealing with subscripts
What's New in Pylint 2.1?¶
- Release date: 2018-08-01
trailing-comma-tuple
gets emitted foryield
statements as well.Close #2363
Get only the arguments of the scope function for
redefined-argument-from-local
Close #2364
Add a check
misplaced-format-function
which is emitted if format function is used on non str object.Close #2200
chain.from_iterable
no longer emits dict-{}-not-iterating when dealing with dict values and keysDemote the
try-except-raise
message from an error to a warning (E0705 -> W0706)Close #2323
Correctly handle the new name of the Python implementation of the
abc
module.Close PyCQA/astroid#2288
Modules with
__getattr__
are exempted by default fromno-member
There's no easy way to figure out if a module has a particular member when the said module uses
__getattr__
, which is a new addition to Python 3.7. Instead we assume the safe thing to do, in the same way we do for classes, and skip those modules from checking.Close #2331
Fix a false positive
invalid name
message when method or attribute name is longer then 30 characters.Close #2047
Include the type of the next branch in
no-else-return
Close #2295
Fix inconsistent behaviour for bad-continuation on first line of file
Close #2281
Fix not being able to disable certain messages on the last line through the global disable option
Close #2278
Don't emit
useless-return
when we have a single statement that is the return itselfWe still want to be explicit when a function is supposed to return an optional value; even though
pass
could still work, it's not explicit enough and the function might look like it's missing an implementation. Close #2300
Fix false-positive undefined-variable for self referential class name in lamdbas
Close #704
Don't crash when
pylint
is unable to infer the value of an argument tonext()
Close #2316
Don't emit
not-an-iterable
when dealing with async iterators.But do emit it when using the usual iteration protocol against async iterators.
Close #2311
Can specify a default docstring type for when the check cannot guess the type
Close #1169
What's New in Pylint 2.0?¶
- Release date: 2018-07-15
try-except-raise
should not be emitted if there are any parent exception class handlers.Close #2284
trailing-comma-tuple
can be emitted forreturn
statements as well.Close #2269
Fix a false positive
inconsistent-return-statements
message when exception is raised inside an else statement.Close #1782
ImportFrom
nodes correctly use the full name for the import sorting checks.Close #2181
[].extend and similar builtin operations don't emit dict-*-not-iterating with the Python 3 porting checker
Close #2187
Add a check
consider-using-dict-comprehension
which is emitted if for dict initialization the old style with list comprehensions is used.Add a check
consider-using-set-comprehension
which is emitted if for set initialization the old style with list comprehensions is used.logging-not-lazy
is emitted whenever pylint infers that a string is built with additionClose #2193
Add a check
chained-comparison
which is emitted if a boolean operation can be simplified by chaining some of its operations. e.g "a < b and b < c", can be simplified as "a < b < c".Close #2032
Add a check
consider-using-in
for comparisons of a variable against multiple values with "==" and "or"s instead of checking if the variable is contained "in" a tuple of those values.in
is considered iterating context for some of the Python 3 porting checkersClose #2186
Add
--ignore-none
flag to control if pylint should warn aboutno-member
where the owner is NoneFix a false positive related to
too-many-arguments
and bounded__get__
methodsClose #2172
mcs
as the first parameter of metaclass's__new__
method was replaced bycls
Close #2028
assignment-from-no-return
considers methods as well.Close #2081
Support typing.TYPE_CHECKING for unused-import errors
Close #1948
Inferred classes at a function level no longer emit
invalid-name
when they don't respect the variable regular expressionClose #1049
Added basic support for postponed evaluation of function annotations.
Close #2069
Fix a bug with
missing-kwoa
and variadics parametersClose #1111
simplifiable-if-statement
takes in account only when assigning to same targetsClose #1984
Make
len-as-condition
test more cases, such aslen() < 1
orlen <= 0
Fix false-positive
line-too-long
message emission for commented line at the end of a moduleClose #1950
Fix false-positive
bad-continuation
for with statementsClose #461
Don't warn about
stop-iteration-return
when usingnext()
overitertools.count
Close #2158
Add a check
consider-using-get
for unidiomatic usage of value/default-retrieval for a key from a dictionaryClose #2076
invalid-slice-index is not emitted when the slice is used as index for a complex object.
We only use a handful of known objects (list, set and friends) to figure out if we should emit invalid-slice-index when the slice is used to subscript an object.
Don't emit
unused-import
anymore for typing imports used in type comments.Add a new check 'useless-import-alias'.
Close #2052
Add
comparison-with-callable
to warn for comparison with bare callable, without calling it.Close #2082
Don't warn for
missing-type-doc
and/ormissing-return-type-doc
, if type annotations exist on the function signature for a parameter and/or return type. Close #2083Add
--exit-zero
option for continuous integration scripts to more easily call Pylint in environments that abort when a program returns a non-zero (error) status code.Close #2042
Warn if the first argument of an instance/ class method gets assigned
Close #977
New check
comparison-with-itself
to check comparison between same value.Close #2051
Add a new warning, 'logging-fstring-interpolation', emitted when f-string is used within logging function calls.
Close #1998
Don't show 'useless-super-delegation' if the subclass method has different type annotations.
Close #1923
Add
unhashable-dict-key
check.Closes #586
Don't warn that a global variable is unused if it is defined by an import
Close #1453
Skip wildcard import check for
__init__.py
.Close #2026
The Python 3 porting mode can now run with Python 3 as well.
too-few-public-methods
is not emitted for dataclasses.Close #1793
New verbose mode option, enabled with
--verbose
command line flag, to display of extra non-checker-related output. It is disabled by default.Close #1863
undefined-loop-variable
takes in consideration non-empty iterred objects before emittingClose #2039
Add support for numpydoc optional return value names.
Close #2030
singleton-comparison
accounts for negative checksClose #2037
Add a check
consider-using-in
for comparisons of a variable against multiple values with "==" and "or"s instead of checking if the variable is contained "in" a tuple of those values.Close #1977
defaultdict and subclasses of dict are now handled for dict-iter-* checks
Close #2005
logging-format-interpolation
also emits when f-strings are used instead of % syntax.Close #1788
Don't trigger misplaced-bare-raise when the raise is in a finally clause
Close #1924
Add a new check,
possibly-unused-variable
.This is similar to
unused-variable
, the only difference is that it is emitted when we detect a locals() call in the scope of the unused variable. Thelocals()
call could potentially use the said variable, by consuming all values that are present up to the point of the call. This new check allows to disable this error when the user intentionally useslocals()
to consume everything.Close #1909.
no-else-return
accounts for multiple casesThe check was a bit overrestrictive because we were checking for return nodes in the .orelse node. At that point though the if statement can be refactored to not have the orelse. This improves the detection of other cases, for instance it now detects TryExcept nodes that are part of the .else branch.
Close #1852
Added two new checks,
invalid-envvar-value
andinvalid-envvar-default
.The former is trigger whenever pylint detects that environment variable manipulation functions uses a different type than strings, while the latter is emitted whenever the said functions are using a default variable of different type than expected.
Add a check
consider-using-join
for concatenation of strings using str.join(sequence)Close #1952
Add a check
consider-swap-variables
for swapping variables with tuple unpackingClose #1922
Add new checker
try-except-raise
that warns the user if an except handler block has araise
statement as its first operator. The warning is shown when there is a bare raise statement, effectively re-raising the exception that was caught or the type of the exception being raised is the same as the one being handled.Don't crash on invalid strings when checking for
logging-format-interpolation
Close #1944
Exempt
__doc__
from triggering aredefined-builtin
__doc__
can be used to specify a docstring for a module without passing it as a first-statement string.Fix false positive bad-whitespace from function arguments with default values and annotations
Close #1831
Fix stop-iteration-return false positive when next builtin has a default value in a generator
Close #1830
Fix emission of false positive
no-member
message for class with "private" attributes whose name is mangled.Close #1643
Fixed a crash which occurred when
Uninferable
wasn't properly handled instop-iteration-return
Close #1779
Use the proper node to get the name for redefined functions (#1792)
Close #1774
Don't crash when encountering bare raises while checking inconsistent returns
Close #1773
Fix a false positive
inconsistent-return-statements
message when if statement is inside try/except.Close #1770
Fix a false positive
inconsistent-return-statements
message when while loop are used.Close #1772
Correct column number for whitespace conventions.
Previously the column was stuck at 0
Close #1649
Fix
unused-argument
false positives with overshadowed variable in dictionary comprehension.Close #1731
Fix false positive
inconsistent-return-statements
message when never returning functions are used (i.e sys.exit for example).Close #1771
Fix error when checking if function is exception, as in
bad-exception-context
.Fix false positive
inconsistent-return-statements
message when a function is defined under an if statement.Close #1794
New
useless-return
message when function or method ends with a "return" or "return None" statement and this is the only return statement in the body.Fix false positive
inconsistent-return-statements
message by avoiding useless exception inference if the exception is not handled.Close #1794 (second part)
Fix bad thread instantiation check when target function is provided in args.
Close #1840
Fixed false positive when a numpy Attributes section follows a Parameters section
Close #1867
Fix incorrect file path when file absolute path contains multiple
path_strip_prefix
strings.Close #1120
Fix false positive undefined-variable for lambda argument in class definitions
Close #1824
Add of a new checker that warns the user if some messages are enabled or disabled by id instead of symbol.
Close #1599
Suppress false-positive
not-callable
messages from certain staticmethod descriptorsClose #1699
Fix indentation handling with tabs
Close #1148
Fix false-positive
bad-continuation
errorClose #638
Fix false positive unused-variable in lambda default arguments
Close #1921 Close #1552 Close #1099 Close #210
Updated the default report format to include paths that can be clicked on in some terminals (e.g. iTerm).
Fix inline def behavior with
too-many-statements
checkerClose #1978
Fix
KeyError
raised when using docparams and NotImplementedError is documented.Close #2102
Fix 'method-hidden' raised when assigning to a property or data descriptor.
Fix emitting
useless-super-delegation
when changing the default value of keyword arguments.Close #2022
Expand ignored-argument-names include starred arguments and keyword arguments
Close #2214
Fix false-positive undefined-variable in nested lambda
Close #760
Fix false-positive
bad-whitespace
message for typing annoatations with ellipses in themClose 1992
Broke down "missing-docstrings" between "module", "class" and "function"
For this to work we had to make multiple messages with the same old name possible.
Closes #1164
What's New in Pylint 1.9?¶
Release date: 2018-05-15
Added two new Python 3 porting checks,
exception-escape
andcomprehension-escape
These two are emitted whenever pylint detects that a variable defined in the said blocks is used outside of the given block. On Python 3 these values are deleted.
Added a new
deprecated-sys-function
, emitted when accessing removed sys members.Added
xreadlines-attribute
, emitted when thexreadlines()
attribute is accessed.The Python 3 porting mode can now run with Python 3 as well.
docparams extension allows abstract methods to document what overriding implementations should return, and to raise NotImplementedError without documenting it.
Closes #2044
Special methods do not count towards
too-few-methods
, and are considered part of the public API.Enum classes do not trigger
too-few-methods
Close #605
Added a new Python 2/3 check for accessing
operator.div
, which is removed in Python 3Close #1936
Added a new Python 2/3 check for accessing removed urllib functions
Close #1997
What's New in Pylint 1.8.1?¶
Release date: 2017-12-15
Wrong version number in __pkginfo__.
What's New in Pylint 1.8?¶
Release date: 2017-12-15
Respect disable=... in config file when running with --py3k.
New warning
shallow-copy-environ
addedShallow copy of os.environ doesn't work as people may expect. os.environ is not a dict object but rather a proxy object, so any changes made on copy may have unexpected effects on os.environ
Instead of copy.copy(os.environ) method os.environ.copy() should be used.
See https://bugs.python.org/issue15373 for details.
Close #1301
Do not display no-absolute-import warning multiple times per file.
trailing-comma-tuple
refactor check now extends to assignment withmore than one element (such as lists)
Close #1713
Fixing u'' string in superfluous-parens message
Close #1420
abstract-class-instantiated
is now emitted for all inference paths.Close #1673
Add set of predefined naming style to ease configuration of checking naming conventions.
Closes #1013
Added a new check,
keyword-arg-before-vararg
This is emitted for function definitions in which keyword arguments are placed before variable positional arguments (*args).
This may lead to args list getting modified if keyword argument's value is not provided in the function call assuming it will take default value provided in the definition.
The
invalid-name
check contains the name of the template that caused the failureClose #1176
Using the -j flag won't start more child linters than needed.
Contributed by Roman Ivanov in #1614
Fix a false positive with bad-python3-import on relative imports
Close #1608
Added a new Python 3 check,
non-ascii-bytes-literals
Close #1545
Added a couple of new Python 3 checks for accessing dict methods in non-iterable context
Protocol checks (not-a-mapping, not-an-iterable and co.) aren't emitted on classes with dynamic getattr
Added a new warning, 'bad-thread-instantiation'
This message is emitted when the threading.Thread class does not receive the target argument, but receives just one argument, which is by default the group parameter.
Close #1327
In non-quiet mode, absolute path of used config file is logged to standard error. Close #1519
Raise meaningful exception for invalid reporter class being selected
When unknown reporter class will be selected as Pylint reporter, meaningful error message would be raised instead of bare
ImportError
orAttribueError
related to module or reporter class being not found. Close #1388Added a new Python 3 check for accessing removed functions from itertools like
izip
orifilterfalse
Added a new Python 3 check for accessing removed fields from the types module like
UnicodeType
orXRangeType
Added a new Python 3 check for declaring a method
next
that would have been treated as an iterator in Python 2 but a normal function in Python 3.Added a new key-value pair in json output. The key is
message-id
and the value is the message id. Close #1512Added a new Python 3.0 check for raising a StopIteration inside a generator. The check about raising a StopIteration inside a generator is also valid if the exception raised inherit from StopIteration. Close #1385
Added a new warning,
raising-format-tuple
, to detect multi-argument exception construction instead of message string formatting.Added a new check for method of logging module that concatenate string via + operator Close #1479
Added parameter for limiting number of suggestions in spellchecking checkers
Fix a corner-case in
consider-using-ternary
checker.When object
A
used inX and A or B
was falsy in boolean context, Pylint incorrectly emitted non-equivalent ternary-based suggestion. After a change message is correctly not emitted for this case. Close #1559Added
suggestion-mode
configuration flag. When flag is enabled, informational message is emitted instead of cryptic error message for attributes accessed on c-extensions. Close #1466Fix a false positive
useless-super-delegation
message when parameters default values are different from those used in the base class. Close #1085Disabling 'wrong-import-order', 'wrong-import-position', or 'ungrouped-imports' for a single line now prevents that line from triggering violations on subsequent lines.
Close #1336
Added a new Python check for inconsistent return statements inside method or function. Close #1267
Fix
superfluous-parens
false positive related to handling logical statements involvingin
operator.Close #574
function-redefined
message is no longer emitted for functions and methods which names matches dummy variable name regular expression. Close #1369Fix
missing-param-doc
andmissing-type-doc
false positives when mixingArgs
andKeyword Args
in Google docstring. Close #1409
Fix
missing-docstring
false negatives when modules, classes, or methods consist of compound statements that exceed thedocstring-min-length
Fix
useless-else-on-loop
false positives when break statements are deeply nested inside loop. Close #1661Fix no
wrong-import-order
message emitted on ordering of first and third party libraries. With this fix, pylint distinguishes third and first party modules when checking import order. Close #1702Fix
pylint disable=fixme
directives ignored for comments following the last statement in a file. Close #1681Fix
line-too-long
message deactivated by wrong disable directive. The directivedisable=fixme
doesn't deactivate anymore the emission ofline-too-long
message for long commented lines. Close #1741If the rcfile specified on the command line doesn't exist, then an IOError exception is raised. Close #1747
Fix the wrong scope of the
disable=
directive after a commented line. For example when adisable=line-too-long
directive is at the end of a long commented line, it no longer disables the emission ofline-too-long
message for lines that follow. Close #1742
What's New in Pylint 1.7.1?¶
Release date: 2017-04-17
Fix a false positive which occurred when an exception was reraised
Close #1419
Fix a false positive of
disallow-trailing-tuple
The check was improved by verifying for non-terminating newlines, which should exempt function calls and function definitions from the check Close #1424
What's New in Pylint 1.7?¶
Release date: 2017-04-13
Don't emit missing-final-newline or trailing-whitespace for formfeeds (page breaks).
Close #1218 and #1219
Don't emit by default no-member if we have opaque inference objects in the inference results
This is controlled through the new flag ignore-on-opaque-inference, which is by default True. The inference can return multiple potential results while evaluating a Python object, but some branches might not be evaluated, which results in partial inference. In that case, it might be useful to still emit no-member and other checks for the rest of the inferred objects.
Added new message
assign-to-new-keyword
to warn about assigning to names which will become a keyword in future Python releases.Close #1351
Split the 'missing or differing' in parameter documentation in different error. 'differing-param-doc' covers the differing part of the old 'missing-param-doc', and 'differing-type-doc' covers the differing part of the old 'missing-type-doc'
Close #1342
Added a new error, 'used-prior-global-declaration', which is emitted when a name is used prior a global declaration in a function. This causes a SyntaxError in Python 3.6
Close #1257
The protocol checks are emitting their messages when a special method is set to None.
Close #1263
Properly detect if imported name is assigned to same name in different scope.
Close #636, #848, #851, and #900
Require one space for annotations with type hints, as per PEP 8.
'trailing-comma-tuple' check was added
This message is emitted when pylint finds an one-element tuple, created by a stray comma. This can suggest a potential problem in the code and it is recommended to use parantheses in order to emphasise the creation of a tuple, rather than relying on the comma itself.
Don't emit not-callable for instances with unknown bases.
Close #1213
Treat keyword only arguments the same as positional arguments with regard to unused-argument check
Don't try to access variables defined in a separate scope when checking for
protected-access
Added new check to detect incorrect usage of len(SEQUENCE) inside test conditions.
Added new extension to detect comparisons against empty string constants
Added new extension to detect comparisons of integers against zero
Added new error conditions for 'bad-super-call'
Now detects
super(type(self), self)
andsuper(self.__class__, self)
which can lead to recursion loop in derived classes.PyLinter.should_analyze_file has a new optional parameter, called
is_argument
Close #1079
Add attribute hints for missing members
Closes #1035
Add a new warning, 'redefined-argument-from-local'
Closes #649
Support inline comments for comma separated values in the config file
Closes #1024
epylint.py_run's script parameter was removed.
epylint.py_run now uses
shell=False
for running the underlying process.Closes #441
Added a new warning, 'useless-super-delegation'
Close 839.
Added a new error, 'invalid-metaclass', raised when we can detect that a class is using an improper metaclass.
Close #579
Added a new refactoring message, 'literal-comparison'.
Close #786
arguments-differ takes in consideration kwonlyargs and variadics
Close #983
Removed --optimized-ast. Part of #975.
Removed --files-output option. Part of #975.
Removed pylint-gui from the package.
Removed the HTML reporter. Part of #975.
ignored-argument-names is now used for ignoring arguments for unused-variable check.
This option was used for ignoring arguments when computing the correct number of arguments a function should have, but for handling the arguments with regard to unused-variable check, dummy-variables-rgx was used instead. Now, ignored-argument-names is used for its original purpose and also for ignoring the matched arguments for the unused-variable check. This offers a better control of what should be ignored and how. Also, the same option was moved from the design checker to the variables checker, which means that the option now appears under the
[VARIABLES]
section inside the configuration file. Close #862.Fix a false positive for keyword variadics with regard to keyword only arguments.
If a keyword only argument was necessary for a function, but that function was called with keyword variadics (**kwargs), then we were emitting a missing-kwoa false positive, which is now fixed.
Close #934.
Fix some false positives with unknown sized variadics.
Close #878
Added a new extension, check_docstring, for checking PEP 257 conventions.
Closes #868.
config files with BOM markers can now be read.
Close #864.
epylint.py_run does not crash on big files, using .communicate() instead of .wait()
Close #599
Disable reports by default and show the evaluation score by default
As per discussion from issue #746, the reports were disabled by default in order to simplify the interaction between the tool and the users. The score is still shown by default, as a way of closely measuring when it increases or decreases due to changes brought to the code.
Disable the information category messages by default.
This is a step towards making pylint more sane, as per the discussion from issue #746.
Catch more cases as not proper iterables for __slots__ with regard to invalid-slots pattern. Closes issue #775.
empty indent strings are rejected.
Added a new error, 'relative-beyond-top-level', which is emitted when a relative import was attempted beyond the top level package.
Closes issue #588.
Added a new warning, 'unsupported-assignment-operation', which is emitted when item assignment is tried on an object which doesn't have this ability. Closes issue #591.
Added a new warning, 'unsupported-delete-operation', which is emitted when item deletion is tried on an object which doesn't have this ability. Closes issue #592.
Fix a false positive of 'redundant-returns-doc', occurred when the documented function was using yield instead of return.
Closes issue #984.
Fix false positives of 'missing-[raises|params|type]-doc' due to not recognizing keyword synonyms supported by Sphinx.
Added a new refactoring message, 'consider-merging-isinstance', which is emitted whenever we can detect that consecutive isinstance calls can be merged together.
Closes issue #968
Fix a false positive of 'missing-param-doc' and 'missing-type-doc', occurred when a class docstring uses the 'For the parameters, see' magic string but the class __init__ docstring does not, or vice versa.
redefined-outer-name
is now also emitted when a nested loop's target variable is the same as a target variable in an outer loop.Closes issue #911.
Added proper exception type inference for 'missing-raises-doc'.
Added InvalidMessageError exception class to replace asserts in pylint.utils.
More thorough validation in MessagesStore.register_messages() to avoid one message accidentally overwriting another.
InvalidMessageError, UnknownMessage, and EmptyReport exceptions are moved to the new pylint.exceptions submodule.
UnknownMessage and EmptyReport are renamed to UnknownMessageError and EmptyReportError.
Warnings 'missing-returns-type-doc' and 'missing-yields-type-doc' have each been split into two warnings - 'missing-[return|yield]-doc' and 'missing-[return|yield]-type-doc'.
Added epytext support to docparams extension.
Closes #1029.
Support having plugins with the same name and with options defined
Closes #1018
Sort configuration options in a section
Closes #1087
Added a new Python 3 warning around implementing '__div__', '__idiv__', or '__rdiv__' as those methods are phased out in Python 3.
Added a new warning, 'overlapping-except', which is emitted when two exceptions in the same except-clause are aliases for each other or one exceptions is an ancestor of another.
Avoid crashing on ill-formatted strings when checking for string formatting errors.
Added a new Python 3 warning for calling 'str.encode' or 'str.decode' with a non-text encoding.
Added new coding convention message, 'single-string-used-for-slots'.
Closes #1166
Added a new Python 3 check for accessing 'sys.maxint' which was removed in Python 3 in favor of 'sys.maxsize'
Added a new Python 3 check for bad imports.
Added a new Python 3 check for accessing deprecated string functions.
Do not warn about unused arguments or function being redefined in singledispatch registered implementations.
Closes #1032 and #1034
Added refactoring message 'no-else-return'.
Improve unused-variable checker to warn about unused variables in module scope.
Closes #919
Ignore modules import as _ when checking for unused imports.
Closes #1190
Improve handing of Python 3 classes with metaclasses declared in nested scopes.
Closes #1177
Added refactoring message 'consider-using-ternary'.
Closes #1204
Bug-fix for false-positive logging-format-interpolation` when format specifications are used in formatted string.
Fixes #572
Added a new switch
single-line-class-stmt
to allow single-line declaration of empty class bodies.Closes #738
Protected access in form
type(self)._attribute
are now allowed.Fixes #1031
Let the user modify msg-template when Pylint is called from a Python script
Fixes #1269
Imports checker supports new switch
allow-wildcard-with-all
which disables warning on wildcard import when imported module defines__all__
variable.Fixes #831
too-many-format-args
andtoo-few-format-args
are emitted correctly when starred expression are used in RHS tuple.Fixes #957
cyclic-import
checker supports local disable clauses. When one of cycle imports was done in scope where disable clause was active, cycle is not reported as violation.Fixes #59
What's new in Pylint 1.6.3?¶
Release date: 2016-07-18
Do not crash when inferring uninferable exception types for docparams extension
Close #998
What's new in Pylint 1.6.2?¶
Release date: 2016-07-15
Do not crash when printing the help of options with default regular expressions
Close #990
More granular versions for deprecated modules.
Close #991
What's new in Pylint 1.6.1?¶
Release date: 2016-07-07
Use environment markers for supporting conditional dependencies.
What's New in Pylint 1.6.0?¶
Release date: 2016-07-03
Added a new extension,
pylint.extensions.mccabe
, for warning about complexity in code.Deprecate support for --optimize-ast. Part of #975.
Deprecate support for the HTML output. Part of #975.
Deprecate support for --output-files. Part of #975.
Fixed a documentation error for the check_docs extension. Fixes #735.
Made the list of property-defining decorators configurable.
Fix a bug where the top name of a qualified import was detected as unused variable.
Close #923.
bad-builtin is now an extension check.
generated-members support qualified name through regular expressions.
For instance, one can specify a regular expression as --generated-members=astroid.node_classes.* for ignoring every no-member error that is accessed as in
astroid.node_classes.missing.object
.Add the ability to ignore files based on regex matching, with the new
--ignore-patterns
option.This addresses issue #156 by allowing for multiple ignore patterns to be specified. Rather than clobber the existing ignore option, we introduced a new one called ignore-patterns.
Added a new error, 'trailing-newlines', which is emitted when a file has trailing new lines.
Closes issue #682.
Add a new option, 'redefining-builtins-modules', for controlling the modules which can redefine builtins, such as six.moves and future.builtins.
Close #464.
'reimported' is emitted when the same name is imported from different module.
Close #162.
Add a new recommendation checker, 'consider-iterating-dictionary', which is emitted which is emitted when a dictionary is iterated through .keys().
Close #699
Use the configparser backport for Python 2
This fixes a problem we were having with comments inside values, which is fixed in Python 3's configparser. Close #828
A new error was added, 'invalid-length-returned', when the
__len__
special method returned something else than a non-negative number.Close issue #557
Switch to using isort internally for wrong-import-order.
Closes #879.
check_docs extension can find constructor parameters in __init__.
Closes #887.
Don't warn about invalid-sequence-index if the indexed object has unknown base classes.
Closes #867
Don't crash when checking, for super-init-not-called, a method defined in an if block.
Do not emit import-error or no-name-in-module for fallback import blocks by default.
Until now, we warned with these errors when a fallback import block (a TryExcept block that contained imports for Python 2 and 3) was found, but this gets cumbersome when trying to write compatible code. As such, we don't check these blocks by default, but the analysis can be enforced by using the new
--analyse-fallback-block
flag.Close #769.
What's New in Pylint 1.5.5?¶
Release date: 2016-03-21
Let visit_importfrom from Python 3 porting checker be called when everything is disabled
Because the visit method was filtering the patterns it was expecting to be activated, it didn't run when everything but one pattern was disabled, leading to spurious false positives
Close #852
Don't emit unsubscriptable-value for classes with unknown base classes.
Close #776.
Use an OrderedDict for storing the configuration elements
This fixes an issue related to impredictible order of the disable / enable elements from a config file. In certain cases, the disable was coming before the enable which resulted in classes of errors to be enabled, even though the intention was to disable them. The best example for this was in the context of running multiple processes, each one of it having different enables / disables that affected the output.
Close #815
Don't consider bare and broad except handlers as ignoring NameError, AttributeError and similar exceptions, in the context of checkers for these issues.
Closes issue #826
What's New in Pylint 1.5.4?¶
Release date: 2016-01-15
Merge StringMethodChecker with StringFormatChecker. This fixes a bug where disabling all the messages and enabling only a handful of messages from the StringFormatChecker would have resulted in no messages at all.
Don't apply unneeded-not over sets.
What's New in Pylint 1.5.3?¶
Release date: 2016-01-11
Handle the import fallback idiom with regard to wrong-import-order.
Closes issue #750.
Decouple the displaying of reports from the displaying of messages
Some reporters are aggregating the messages instead of displaying them when they are available. The actual displaying was conflatted in the generate_reports. Unfortunately this behaviour was flaky and in the case of the JSON reporter, the messages weren't shown at all if a file had syntax errors or if it was missing. In order to fix this, the aggregated messages can now be displayed with Reporter.display_message, while the reports are displayed with display_reports.
Closes issues #766 and #765.
Ignore function calls with variadic arguments without a context.
Inferring variadic positional arguments and keyword arguments will result into empty Tuples and Dicts, which can lead in some cases to false positives with regard to no-value-for-parameter. In order to avoid this, until we'll have support for call context propagation, we're ignoring such cases if detected. Closes issue #722.
Treat AsyncFunctionDef just like FunctionDef nodes, by implementing visit_asyncfunctiondef in terms of visit_functiondef.
Closes issue #767.
Take in account kwonlyargs when verifying that arguments are defined with the check_docs extension.
Closes issue #745.
Suppress reporting 'unneeded-not' inside
__ne__
methodsCloses issue #749.
What's New in Pylint 1.5.2?¶
Release date: 2015-12-21
Don't crash if graphviz is not installed, instead emit a warning letting the user to know.
Closes issue #168.
Accept only functions and methods for the deprecated-method checker.
This prevents a crash which can occur when an object doesn't have .qname() method after the inference.
Don't emit super-on-old-class on classes with unknown bases. Closes issue #721.
Allow statements in
if
ortry
blocks containing imports.Closes issue #714.
What's New in Pylint 1.5.1?¶
Release date: 2015-12-02
Fix a crash which occurred when old visit methods are encountered in plugin modules. Closes issue #711.
Add wrong-import-position to check_messages's decorator arguments for ImportChecker.leave_module This fixes an esoteric bug which occurs when ungrouped-imports and wrong-import-order are disabled and pylint is executed on multiple files. What happens is that without wrong-import-position in check_messages, leave_module will never be called, which means that the first non-import node from other files might leak into the current file, leading to wrong-import-position being emitted by pylint.
Fix a crash which occurred when old visit methods are encountered in plugin modules. Closes issue #711.
Don't emit import-self and cyclic-import for relative imports of modules with the same name as the package itself. Closes issues #708 and #706.
What's New in Pylint 1.5.0?¶
Release date: 2015-11-29
Added multiple warnings related to imports. 'wrong-import-order' is emitted when PEP 8 recommendations regarding imports are not respected (that is, standard imports should be followed by third-party imports and then by local imports). 'ungrouped-imports' is emitted when imports from the same package or module are not placed together, but scattered around in the code. 'wrong-import-position' is emitted when code is mixed with imports, being recommended for the latter to be at the top of the file, in order to figure out easier by a human reader what dependencies a module has. Closes issue #692.
Added a new refactoring warning, 'unneeded-not', emitted when an expression with the not operator could be simplified. Closes issue #670.
Added a new refactoring warning, 'simplifiable-if-statement', used when an if statement could be reduced to a boolean evaluation of its test. Closes issue #698.
Added a new refactoring warning, 'too-many-boolean-expressions', used when an if statement contains too many boolean expressions, which makes the code less maintainable and harder to understand. Closes issue #677.
Property methods are shown as attributes instead of functions in pyreverse class diagrams. Closes Issue #284
Add a new refactoring error, 'too-many-nested-blocks', which is emitted when a function or a method has too many nested blocks, which makes the code less readable and harder to understand. Closes issue #668.
Add a new error, 'unsubscriptable-object', that is emitted when value used in subscription expression doesn't support subscription (i.e. doesn't define __getitem__ method).
Don't warn about abstract classes instantiated in their own body. Closes issue #627.
Obsolete options are not present by default in the generated configuration file. Closes issue #632.
non-iterator-returned can detect classes with iterator-metaclasses. Closes issue #679.
Add a new error, 'unsupported-membership-test', emitted when value to the right of the 'in' operator doesn't support membership test protocol (i.e. doesn't define __contains__/__iter__/__getitem__)
Add new errors, 'not-an-iterable', emitted when non-iterable value is used in an iterating context (starargs, for-statement, comprehensions, etc), and 'not-a-mapping', emitted when non-mapping value is used in a mapping context. Closes issue #563.
Make 'no-self-use' checker not emit a warning if there is a 'super()' call inside the method. Closes issue #667.
Add checker to identify multiple imports on one line. Closes issue #598.
Fix unused-argument false positive when the "+=" operator is used. Closes issue #518.
Don't emit import-error for ignored modules. PyLint will not emit import errors for any import which is, or is a subpackage of, a module in the ignored-modules list. Closes issue #223.
Fix unused-import false positive when the import is used in a class assignment. Closes issue #475
Add a new error, 'not-context-manager', emitted when something that doesn't implement __enter__ and __exit__ is used in a with statement.
Add a new warning, 'confusing-with-statement', emitted by the base checker, when an ambiguous looking with statement is used. For example with open() as first, second which looks like a tuple assignment but is actually 2 context managers.
Add a new warning, 'duplicate-except', emitted when there is an exception handler which handles an exception type that was handled before. Closes issue #485.
A couple of warnings got promoted to errors, since they could uncover potential bugs in the code. These warnings are: assignment-from-none, unbalanced-tuple-unpacking, unpacking-non-sequence, non-iterator-returned. Closes issue #388.
Allow ending a pragma control with a semicolon. In this way, users can continue a pragma control with a reason for why it is used, as in # pylint: disable=old-style-class;reason=.... Closes issue #449.
--jobs can be used with --load-plugins now. Closes issue #456.
Improve the performance of --jobs when dealing only with a package name. Closes issue #479.
Don't emit an unused-wildcard-import when the imported name comes from another module and it is in fact a __future__ name.
The colorized reporter now works on Windows. Closes issue #96.
Remove pointless-except warning. It was previously disabled by default and it wasn't very useful. Closes issue #506.
Fix a crash on Python 3 related to the string checker, which crashed when it encountered a bytes string with a .format method called.
Don't warn about no-self-use for builtin properties.
Fix a false positive for bad-reversed-sequence, when a subclass of a
dict
provides a __reversed__ method.Change the default no-docstring-rgx so missing-docstring isn't emitted for private functions.
Don't emit redefined-outer-name for __future__ directives. Closes issue #520.
Provide some hints for the bad-builtin message. Closes issue #522.
When checking for invalid arguments to a callable, in typecheck.py, look up for the __init__ in case the found __new__ comes from builtins.
Since the __new__ comes from builtins, it will not have attached any information regarding what parameters it expects, so the check will be useless. Retrieving __init__ in that case will at least detect a couple of false negatives. Closes issue #429.
Don't emit no-member for classes with unknown bases.
Since we don't know what those bases might add, we simply ignore the error in this case.
Lookup in the implicit metaclass when checking for no-member, if the class in question has an implicit metaclass, which is True for new style classes. Closes issue #438.
Add two new warnings, duplicate-bases and inconsistent-mro.
duplicate-bases is emitted when a class has the same bases listed more than once in its bases definition, while inconsistent-mro is emitted when no sane mro hierarchy can be determined. Closes issue #526.
Remove interface-not-implemented warning. Closes issue #532.
Remove the rest of interface checks: interface-is-not-class, missing-interface-method, unresolved-interface. The reason is that its better to start recommending ABCs instead of the old Zope era of interfaces. One side effect of this change is that ignore-iface-methods becomes a noop, it's deprecated and it will be removed at some time.
Emit a proper deprecation warning for reporters.BaseReporter.add_message.
The alternative way is to use handle_message. add_message will be removed in Pylint 1.6.
Added new module 'extensions' for optional checkers with the test directory 'test/extensions' and documentation file 'doc/extensions.rst'.
Added new checker 'extensions.check_docs' that verifies parameter documention in Sphinx, Google, and Numpy style.
Detect undefined variable cases, where the "definition" of an undefined variable was in del statement. Instead of emitting used-before-assignment, which is totally misleading, it now emits undefined-variable. Closes issue #528.
Don't emit attribute-defined-outside-init and access-member-before-definition for mixin classes. Actual errors can occur in mixin classes, but this is controlled by the ignore-mixin-members option. Closes issue #412.
Improve the detection of undefined variables and variables used before assignment for variables used as default arguments to function, where the variable was first defined in the class scope. Closes issue #342 and issue #404.
Add a new warning, 'unexpected-special-method-signature', which is emitted when a special method (dunder method) doesn't have the expected signature, which can lead to actual errors in the application code. Closes issue #253.
Remove 'bad-context-manager' due to the inclusion of 'unexpected-special-method-signature'.
Don't emit no-name-in-module if the import is guarded by an ImportError, Exception or a bare except clause.
Don't emit no-member if the attribute access node is protected by an except handler, which handles AttributeError, Exception or it is a bare except.
Don't emit import-error if the import is guarded by an ImportError, Exception or a bare except clause.
Don't emit undefined-variable if the node is guarded by a NameError, Exception or bare except clause.
Add a new warning, 'using-constant-test', which is emitted when a conditional statement (If, IfExp) uses a test which is always constant, such as numbers, classes, functions etc. This is most likely an error from the user's part. Closes issue #524.
Don't emit 'raising-non-exception' when the exception has unknown bases. We don't know what those bases actually are and it's better to assume that the user knows what he is doing rather than emitting a message which can be considered a false positive.
Look for a .pylintrc configuration file in the current folder, if pylintrc is not found. Dotted pylintrc files will not be searched in the parents of the current folder, as it is done for pylintrc.
Add a new error, 'invalid-unary-type-operand', emitted when an unary operand is used on something which doesn't support that operation (for instance, using the unary bitwise inversion operator on an instance which doesn't implement __invert__).
Take in consideration differences between arguments of various type of functions (classmethods, staticmethods, properties) when checking for
arguments-differ
. Closes issue #548.astroid.inspector was moved to pylint.pyreverse, since it belongs there and it doesn't need to be in astroid.
astroid.utils.LocalsVisitor was moved to pylint.pyreverse.LocalsVisitor.
pylint.checkers.utils.excepts_import_error was removed. Use pylint.chekcers.utils.error_of_type instead.
Don't emit undefined-all-variables for nodes which can't be inferred (YES nodes).
yield-outside-func is also emitted for
yield from
.Add a new error, 'too-many-star-expressions', emitted when there are more than one starred expression (*x) in an assignment. The warning is emitted only on Python 3.
Add a new error, 'invalid-star-assignment-target', emitted when a starred expression (*x) is used as the lhs side of an assignment, as in *x = [1, 2]. This is not a SyntaxError on Python 3 though.
Detect a couple of objects which can't be base classes (bool, slice, range and memoryview, which weren't detected until now).
Add a new error for the Python 3 porting checker,
import-star-module-level
, which is used when a star import is detected in another scope than the module level, which is an error on Python 3. Using this will emit a SyntaxWarning on Python 2.Add a new error, 'star-needs-assignment-target', emitted on Python 3 when a Starred expression (*x) is not used in an assignment target. This is not caught when parsing the AST on Python 3, so it needs to be a separate check.
Add a new error, 'unsupported-binary-operation', emitted when two a binary arithmetic operation is executed between two objects which don't support it (a number plus a string for instance). This is currently disabled, since the it exhibits way too many false positives, but it will be reenabled as soon as possible.
New imported features from astroid into pyreverse: pyreverse.inspector.Project, pyreverse.inspector.project_from_files and pyreverse.inspector.interfaces.
These were moved since they didn't belong in astroid.
Enable misplaced-future for Python 3. Closes issue #580.
Add a new error, 'nonlocal-and-global', which is emitted when a name is found to be both nonlocal and global in the same scope. Closes issue #581.
ignored-classes option can work with qualified names (ignored-classes=optparse.Values) Closes issue #297.
ignored-modules can work with qualified names as well as with Unix pattern matching for recursive ignoring. Closes issues #244.
Improve detection of relative imports in non-packages, as well as importing missing modules with a relative import from a package.
Don't emit no-init if not all the bases from a class are known. Closes issue #604.
--no-space-check option accepts
empty-line
as a possible option. Closes issue #541.--generate-rcfile generates by default human readable symbols for the --disable option. Closes issue #608.
Improved the not-in-loop checker to properly detect more cases.
Add a new error, 'continue-in-finally', which is emitted when the
continue
keyword is found inside afinally
clause, which is a SyntaxError.The --zope flag is deprecated and it is slated for removal in Pylint 1.6.
The reason behind this removal is the fact that it's a specialized flag and there are solutions for the original problem: use --generated-members with the members that causes problems when using Zope or add AST transforms tailored to the zope project.
At the same time, --include-ids and --symbols will also be removed in Pylint 1.6. Closes issue #570.
missing-module-attribute was removed and the corresponding CLI option, required-attributes, which is slated for removal in Pylint 1.6.
missing-reversed-argument was removed.
The reason behind this is that this kind of errors should be detected by the type checker for all the builtins and not as a special case for the reversed builtin. This will happen shortly in the future.
--comment flag is obsolete and it will be removed in Pylint 1.6.
--profile flag is obsolete and it will be removed in Pylint 1.6.
Add a new error, 'misplaced-bare-raise'.
The error is used when a bare raise is not used inside an except clause. This can generate a RuntimeError in Python, if there are no active exceptions to be reraised. While it works in Python 2 due to the fact that the exception leaks outside of the except block, it's nevertheless a behaviour that a user shouldn't depend upon, since it's not obvious to the reader of the code what exception will be raised and it will not be compatible with Python 3 anyhow. Closes issue #633.
Bring logilab-common's ureports into pylint.reporters.
With this change, we moved away from depending on logilab-common, having in Pylint all the components that were used from logilab-common. The API should be considered an implementation detail and can change at some point in the future. Closes issue #621.
reimported
is emitted for reimported objects on the same line.Closes issue #639.
Abbreviations of command line options are not supported anymore.
Using abbreviations for CLI options was never considered to be a feature of pylint, this fact being only a side effect of using optparse. As this was the case, using --load-plugin or other abbreviation for --load-plugins never actually worked, while it also didn't raise an error. Closes issue #424.
Add a new error, 'nonlocal-without-binding'
The error is emitted on Python 3 when a nonlocal name is not bound to any variable in the parents scopes. Closes issue #582.
- 'deprecated-module' can be shown for modules which aren't
available. Closes issue #362.
Don't consider a class abstract if its members can't be properly inferred.
This fixes a false positive related to abstract-class-instantiated. Closes issue #648.
Add a new checker for the async features added by PEP 492.
Add a new error, 'yield-inside-async-function', emitted on Python 3.5 and upwards when the
yield
statement is found inside a new coroutine function (PEP 492).Add a new error, 'not-async-context-manager', emitted when an async context manager block is used with an object which doesn't support this protocol (PEP 492).
Add a new convention warning, 'singleton-comparison', emitted when comparison to True, False or None is found.
Don't emit 'assigning-non-slot' for descriptors. Closes issue #652.
Add a new error, 'repeated-keyword', when a keyword argument is passed multiple times into a function call.
This is similar with redundant-keyword-arg, but it's mildly different that it needs to be a separate error.
--enable=all can now be used. Closes issue #142.
Add a new convention message, 'misplaced-comparison-constant', emitted when a constant is placed in the left hand side of a comparison, as in '5 == func()'. This is also called Yoda condition, since the flow of code reminds of the Star Wars green character, conditions usually encountered in languages with variabile assignments in conditional statements.
Add a new convention message, 'consider-using-enumerate', which is emitted when code that uses
range
andlen
for iterating is encountered. Closes issue #684.Added two new refactoring messages, 'no-classmethod-decorator' and 'no-staticmethod-decorator', which are emitted when a static method or a class method is declared without using decorators syntax.
Closes issue #675.
What's New in Pylint 1.4.3?¶
Release date: 2015-03-14
Remove three warnings: star-args, abstract-class-little-used, abstract-class-not-used. These warnings don't add any real value and they don't imply errors or problems in the code.
Added a new option for controlling the peephole optimizer in astroid. The option
--optimize-ast
will control the peephole optimizer, which is used to optimize a couple of AST subtrees. The current problem solved by the peephole optimizer is when multiple joined strings, with the addition operator, are encountered. If the numbers of such strings is high enough, Pylint will then fail with a maximum recursion depth exceeded error, due to its visitor architecture. The peephole just transforms such calls, if it can, into the final resulting string and this exhibit a problem, because the visit_binop method stops being called (in the optimized AST it will be a Const node).
What's New in Pylint 1.4.2?¶
Release date: 2015-03-11
Don't require a docstring for empty modules. Closes issue #261.
Fix a false positive with
too-few-format-args
string warning, emitted when the string format contained a normal positional argument ('{0}'), mixed with a positional argument which did an attribute access ('{0.__class__}'). Closes issue #463.Take in account all the methods from the ancestors when checking for too-few-public-methods. Closes issue #471.
Catch enchant errors and emit 'invalid-characters-in-docstring' when checking for spelling errors. Closes issue #469.
Use all the inferred statements for the super-init-not-called check. Closes issue #389.
Add a new warning, 'unichr-builtin', emitted by the Python 3 porting checker, when the unichr builtin is found. Closes issue #472.
Add a new warning, 'intern-builtin', emitted by the Python 3 porting checker, when the intern builtin is found. Closes issue #473.
Add support for editable installations.
The HTML output accepts the
--msg-template
option. Patch by Dan Goldsmith.Add 'map-builtin-not-iterating' (replacing 'implicit-map-evaluation'), 'zip-builtin-not-iterating', 'range-builtin-not-iterating', and 'filter-builtin-not-iterating' which are emitted by
--py3k
when the appropriate built-in is not used in an iterating context (semantics taken from 2to3).Add a new warning, 'unidiomatic-typecheck', emitted when an explicit typecheck uses type() instead of isinstance(). For example, type(x) == Y instead of isinstance(x, Y). Patch by Chris Rebert. Closes issue #299.
Add support for combining the Python 3 checker mode with the --jobs flag (--py3k and --jobs). Closes issue #467.
Add a new warning for the Python 3 porting checker, 'using-cmp-argument', emitted when the
cmp
argument for thelist.sort
orsorted builtin
is encountered.Make the --py3k flag commutative with the -E flag. Also, this patch fixes the leaks of error messages from the Python 3 checker when the errors mode was activated. Closes issue #437.
What's New in Pylint 1.4.1?¶
Release date: 2015-01-16
Look only in the current function's scope for bad-super-call. Closes issue #403.
Check the return of properties when checking for not-callable. Closes issue #406.
Warn about using the input() or round() built-ins for Python 3. Closes issue #411.
Proper abstract method lookup while checking for abstract-class-instantiated. Closes issue #401.
Use a mro traversal for finding abstract methods. Closes issue #415.
Fix a false positive with catching-non-exception and tuples of exceptions.
Fix a false negative with raising-non-exception, when the raise used an uninferrable exception context.
Fix a false positive on Python 2 for raising-bad-type, when raising tuples in the form 'raise (ZeroDivisionError, None)'.
Fix a false positive with invalid-slots-objects, where the slot entry was a unicode string on Python 2. Closes issue #421.
Add a new warning, 'redundant-unittest-assert', emitted when using unittest's methods assertTrue and assertFalse with constant value as argument. Patch by Vlad Temian.
Add a new JSON reporter, usable through -f flag.
Add the method names for the 'signature-differs' and 'argument-differs' warnings. Closes issue #433.
Don't compile test files when installing.
Fix a crash which occurred when using multiple jobs and the files given as argument didn't exist at all.
What's New in Pylint 1.4.0?¶
Release date: 2014-11-23
Added new options for controlling the loading of C extensions. By default, only C extensions from the stdlib will be loaded into the active Python interpreter for inspection, because they can run arbitrary code on import. The option
--extension-pkg-whitelist
can be used to specify modules or packages that are safe to load.Change default max-line-length to 100 rather than 80
Drop BaseRawChecker class which were only there for backward compat for a while now
Don't try to analyze string formatting with objects coming from function arguments. Closes issue #373.
Port source code to be Python 2/3 compatible. This drops the need for 2to3, but does drop support for Python 2.5.
Each message now comes with a confidence level attached, and can be filtered base on this level. This allows to filter out all messages that were emitted even though an inference failure happened during checking.
Improved presenting unused-import message. Closes issue #293.
Add new checker for finding spelling errors. New messages: wrong-spelling-in-comment, wrong-spelling-in-docstring. New options: spelling-dict, spelling-ignore-words.
Add new '-j' option for running checks in sub-processes.
Added new checks for line endings if they are mixed (LF vs CRLF) or if they are not as expected. New messages: mixed-line-endings, unexpected-line-ending-format. New option: expected-line-ending-format.
'dangerous-default-value' no longer evaluates the value of the arguments, which could result in long error messages or sensitive data being leaked. Closes issue #282
Fix a false positive with string formatting checker, when encountering a string which uses only position-based arguments. Closes issue #285.
Fix a false positive with string formatting checker, when using keyword argument packing. Closes issue #288.
Proper handle class level scope for lambdas.
Handle 'too-few-format-args' or 'too-many-format-args' for format strings with both named and positional fields. Closes issue #286.
Analyze only strings by the string format checker. Closes issue #287.
Properly handle nested format string fields. Closes issue #294.
Don't emit 'attribute-defined-outside-init' if the attribute was set by a function call in a defining method. Closes issue #192.
Properly handle unicode format strings for Python 2. Closes issue #296.
Don't emit 'import-error' if an import was protected by a try-except, which excepted ImportError.
Fix an 'unused-import' false positive, when the error was emitted for all the members imported with 'from import' form. Closes issue #304.
Don't emit 'invalid-name' when assigning a name in an ImportError handler. Closes issue #302.
Don't count branches from nested functions.
Fix a false positive with 'too-few-format-args', when the format strings contains duplicate manual position arguments. Closes issue #310.
fixme regex handles comments without spaces after the hash. Closes issue #311.
Don't emit 'unused-import' when a special object is imported (__all__, __doc__ etc.). Closes issue #309.
Look in the metaclass, if defined, for members not found in the current class. Closes issue #306.
Don't emit 'protected-access' if the attribute is accessed using a property defined at the class level.
Detect calls of the parent's __init__, through a binded super() call.
Check that a class has an explicitly defined metaclass before emitting 'old-style-class' for Python 2.
Emit 'catching-non-exception' for non-class nodes. Closes issue #303.
Order of reporting is consistent.
Add a new warning, 'boolean-datetime', emitted when an instance of 'datetime.time' is used in a boolean context. Closes issue #239.
Fix a crash which occurred while checking for 'method-hidden', when the parent frame was something different than a function.
Generate html output for missing files. Closes issue #320.
Fix a false positive with 'too-many-format-args', when the format string contains mixed attribute access arguments and manual fields. Closes issue #322.
Extend the cases where 'undefined-variable' and 'used-before-assignment' can be detected. Closes issue #291.
Add support for customising callback identifiers, by adding a new '--callbacks' command line option. Closes issue #326.
Add a new warning, 'logging-format-interpolation', emitted when .format() string interpolation is used within logging function calls.
Don't emit 'unbalanced-tuple-unpacking' when the rhs of the assignment is a variable length argument. Closes issue #329.
Add a new warning, 'inherit-non-class', emitted when a class inherits from something which is not a class. Closes issue #331.
Fix another false positives with 'undefined-variable', where the variable can be found as a class assignment and used in a function annotation. Closes issue #342.
Handle assignment of the string format method to a variable. Closes issue #351.
Support wheel packaging format for PyPi. Closes issue #334.
Check that various built-ins that do not exist in Python 3 are not used: apply, basestring, buffer, cmp, coerce, execfile, file, long raw_input, reduce, StandardError, unicode, reload and xrange.
Warn for magic methods which are not used in any way in Python 3: __coerce__, __delslice__, __getslice__, __setslice__, __cmp__, __oct__, __nonzero__ and __hex__.
Don't emit 'assigning-non-slot' when the assignment is for a property. Closes issue #359.
Fix for regression: '{path}' was no longer accepted in '--msg-template'.
Report the percentage of all messages, not just for errors and warnings. Closes issue #319.
'too-many-public-methods' is reported only for methods defined in a class, not in its ancestors. Closes issue #248.
'too-many-lines' disable pragma can be located on any line, not only the first. Closes issue #321.
Warn in Python 2 when an import statement is found without a corresponding
from __future__ import absolute_import
.Warn in Python 2 when a non-floor division operation is found without a corresponding
from __future__ import division
.Add a new option, 'exclude-protected', for excluding members from the protected-access warning. Closes issue #48.
Warn in Python 2 when using dict.iter*(), dict.view*(); none of these methods are available in Python 3.
Warn in Python 2 when calling an object's next() method; Python 3 uses __next__() instead.
Warn when assigning to __metaclass__ at a class scope; in Python 3 a metaclass is specified as an argument to the 'class' statement.
Warn when performing parameter tuple unpacking; it is not supported in Python 3.
'abstract-class-instantiated' is also emitted for Python 2. It was previously disabled.
Add 'long-suffix' error, emitted when encountering the long suffix on numbers.
Add support for disabling a checker, by specifying an 'enabled' attribute on the checker class.
Add a new CLI option, --py3k, for enabling Python 3 porting mode. This mode will disable all other checkers and will emit warnings and errors for constructs which are invalid or removed in Python 3.
Add 'old-octal-literal' to Python 3 porting checker, emitted when encountering octals with the old syntax.
Add 'implicit-map-evaluation' to Python 3 porting checker, emitted when encountering the use of map builtin, without explicit evaluation.
What's New in Pylint 1.3.0?¶
Release date: 2014-07-26
Allow hanging continued indentation for implicitly concatenated strings. Closes issue #232.
Pylint works under Python 2.5 again, and its test suite passes.
Fix some false positives for the cellvar-from-loop warnings. Closes issue #233.
Return new astroid class nodes when the inferencer can detect that that result of a function invocation on a type (like
type
or abc.ABCMeta) is requested. Closes #205.Emit 'undefined-variable' for undefined names when using the Python 3
metaclass=
argument.Checkers respect priority now. Close issue #229.
Fix a false positive regarding W0511. Closes issue #149.
Fix unused-import false positive with Python 3 metaclasses (#143).
Don't warn with 'bad-format-character' when encountering the 'a' format on Python 3.
Add multiple checks for PEP 3101 advanced string formatting: 'bad-format-string', 'missing-format-argument-key', 'unused-format-string-argument', 'format-combined-specification', 'missing-format-attribute' and 'invalid-format-index'.
Issue broad-except and bare-except even if the number of except handlers is different than 1. Fixes issue #113.
Issue attribute-defined-outside-init for all cases, not just for the last assignment. Closes issue #262.
Emit 'not-callable' when calling properties. Closes issue #268.
Fix a false positive with unbalanced iterable unpacking, when encountering starred nodes. Closes issue #273.
Add new checks, 'invalid-slice-index' and 'invalid-sequence-index' for invalid sequence and slice indices.
Add 'assigning-non-slot' warning, which detects assignments to attributes not defined in slots.
Don't emit 'no-name-in-module' for ignored modules. Closes issue #223.
Fix an 'unused-variable' false positive, where the variable is assigned through an import. Closes issue #196.
Definition order is considered for classes, function arguments and annotations. Closes issue #257.
Don't emit 'unused-variable' when assigning to a nonlocal. Closes issue #275.
Do not let ImportError propagate from the import checker, leading to crash in some namespace package related cases. Closes issue #203.
Don't emit 'pointless-string-statement' for attribute docstrings. Closes issue #193.
Use the proper mode for pickle when opening and writing the stats file. Closes issue #148.
Don't emit hidden-method message when the attribute has been monkey-patched, you're on your own when you do that.
Only emit attribute-defined-outside-init for definition within the same module as the offended class, avoiding to mangle the output in some cases.
Don't emit 'unnecessary-lambda' if the body of the lambda call contains call chaining. Closes issue #243.
Don't emit 'missing-docstring' when the actual docstring uses
.format
. Closes issue #281.
What's New in Pylint 1.2.1?¶
Release date: 2014-04-30
Restore the ability to specify the init-hook option via the configuration file, which was accidentally broken in 1.2.0.
Add a new warning [bad-continuation] for badly indentend continued lines.
Emit [assignment-from-none] when the function contains bare returns. Fixes BitBucket issue #191.
Added a new warning for closing over variables that are defined in loops. Fixes Bitbucket issue #176.
Do not warn about u escapes in string literals when Unicode literals are used for Python 2.*. Fixes BitBucket issue #151.
Extend the checking for unbalanced-tuple-unpacking and unpacking-non-sequence to instance attribute unpacking as well.
Fix explicit checking of python script (1.2 regression, #219)
Restore --init-hook, renamed accidentally into --init-hooks in 1.2.0 (#211)
Add 'indexing-exception' warning, which detects that indexing an exception occurs in Python 2 (behaviour removed in Python 3).
What's New in Pylint 1.2.0?¶
Release date: 2014-04-18
Pass the current python paths to pylint process when invoked via epylint. Fixes BitBucket issue #133.
Add -i / --include-ids and -s / --symbols back as completely ignored options. Fixes BitBucket issue #180.
Extend the number of cases in which logging calls are detected. Fixes bitbucket issue #182.
Improve pragma handling to not detect pylint:* strings in non-comments. Fixes BitBucket issue #79.
Do not crash with UnknownMessage if an unknown message ID/name appears in disable or enable in the configuration. Patch by Cole Robinson. Fixes bitbucket issue #170.
Add new warning 'eval-used', checking that the builtin function
eval
was used.Make it possible to show a naming hint for invalid name by setting include-naming-hint. Also make the naming hints configurable. Fixes BitBucket issue #138.
Added support for enforcing multiple, but consistent name styles for different name types inside a single module; based on a patch written by morbo@google.com.
Also warn about empty docstrings on overridden methods; contributed by sebastianu@google.com.
Also inspect arguments to constructor calls, and emit relevant warnings; contributed by sebastianu@google.com.
Added a new configuration option logging-modules to make the list of module names that can be checked for 'logging-not-lazy' et. al. configurable; contributed by morbo@google.com.
ensure init-hooks is evaluated before other options, notably load-plugins (#166)
Python 2.5 support restored: fixed small issues preventing pylint to run on python 2.5. Bitbucket issues #50 and #62.
bitbucket #128: pylint doesn't crash when looking for used-before-assignment in context manager assignments.
Add new warning, 'bad-reversed-sequence', for checking that the reversed() builtin receive a sequence (implements __getitem__ and __len__, without being a dict or a dict subclass) or an instance which implements __reversed__.
Mark
file
as a bad function when using python2 (closes #8).Add new warning 'bad-exception-context', checking that
raise ... from ...
uses a proper exception context (None or an exception).Enhance the check for 'used-before-assignment' to look for 'nonlocal' uses.
Emit 'undefined-all-variable' if a package's __all__ variable contains a missing submodule (closes #126).
Add a new warning 'abstract-class-instantiated' for checking that abstract classes created with
abc
module and with abstract methods are instantied.Do not warn about 'return-arg-in-generator' in Python 3.3+.
Do not warn about 'abstract-method' when the abstract method is implemented through assignment (#155).
Improve cyclic import detection in the case of packages, patch by Buck Golemon
Add new warnings for checking proper class __slots__:
invalid-slots-object
andinvalid-slots
.Search for rc file in ~/.config/pylintrc if ~/.pylintrc doesn't exists (#121)
Don't register the newstyle checker w/ python >= 3
Fix unused-import false positive w/ augment assignment (#78)
Fix access-member-before-definition false negative wrt aug assign (#164)
Do not attempt to analyze non python file, eg .so file (#122)
What's New in Pylint 1.1.0?¶
Release date: 2013-12-22
Add new check for use of deprecated pragma directives "pylint:disable-msg" or "pylint:enable-msg" (I0022, deprecated-pragma) which was previously emitted as a regular warn().
Avoid false used-before-assignment for except handler defined identifier used on the same line (#111).
Combine 'no-space-after-operator', 'no-space-after-comma' and 'no-space-before-operator' into a new warning 'bad-whitespace'.
Add a new warning 'superfluous-parens' for unnecessary parentheses after certain keywords.
Fix a potential crash in the redefine-in-handler warning if the redefined name is a nested getattr node.
Add a new option for the multi-statement warning to allow single-line if statements.
Add 'bad-context-manager' error, checking that '__exit__' special method accepts the right number of arguments.
Run pylint as a python module 'python -m pylint' (anatoly techtonik).
Check for non-exception classes inside an except clause.
epylint support options to give to pylint after the file to analyze and have basic input validation (bitbucket #53 and #54), patches provided by felipeochoa and Brian Lane.
Added a new warning, 'non-iterator-returned', for non-iterators returned by '__iter__'.
Add new checks for unpacking non-sequences in assignments (unpacking-non-sequence) as well as unbalanced tuple unpacking (unbalanced-tuple-unpacking).
useless-else-on-loop not emitted if there is a break in the else clause of inner loop (#117).
don't mark
input
as a bad function when using python3 (#110).badly-implemented-container caused several problems in its current implementation. Deactivate it until we have something better. See #112 for instance.
Use attribute regexp for properties in python3, as in python2
Create the PYLINTHOME directory when needed, it might fail and lead to spurious warnings on import of pylint.config.
Fix setup.py so that pylint properly install on Windows when using python3
Various documentation fixes and enhancements
Fix issue #55 (false-positive trailing-whitespace on Windows)
What's New in Pylint 1.0.0?¶
Release date: 2013-08-06
Add check for the use of 'exec' function
New --msg-template option to control output, deprecating "msvc" and "parseable" output formats as well as killing
--include-ids
and--symbols
optionsDo not emit [fixme] for every line if the config value 'notes' is empty, but [fixme] is enabled.
Emit warnings about lines exceeding the column limit when those lines are inside multiline docstrings.
Do not double-check parameter names with the regex for parameters and inline variables.
Added a new warning missing-final-newline (C0304) for files missing the final newline.
Methods that are decorated as properties are now treated as attributes for the purposes of name checking.
Names of derived instance class member are not checked any more.
Names in global statements are now checked against the regular expression for constants.
For toplevel name assignment, the class name regex will be used if pylint can detect that value on the right-hand side is a class (like collections.namedtuple()).
Simplified invalid-name message
Added a new warning invalid-encoded-data (W0512) for files that contain data that cannot be decoded with the specified or default encoding.
New warning bad-open-mode (W1501) for calls to open (or file) that specify invalid open modes (Original implementation by Sasha Issayev).
New warning old-style-class (C1001) for classes that do not have any base class.
Add new name type 'class_attribute' for attributes defined in class scope. By default, allow both const and variable names.
New warning trailing-whitespace (C0303) that warns about trailing whitespace.
Added a new warning unpacking-in-except (W0712) about unpacking exceptions in handlers, which is unsupported in Python 3.
Add a configuration option for missing-docstring to optionally exempt short functions/methods/classes from the check.
Add the type of the offending node to missing-docstring and empty-docstring.
New utility classes for per-checker unittests in testutils.py
Do not warn about redefinitions of variables that match the dummy regex.
Do not treat all variables starting with _ as dummy variables, only _ itself.
Make the line-too-long warning configurable by adding a regex for lines for with the length limit should not be enforced
Do not warn about a long line if a pylint disable option brings it above the length limit
Do not flag names in nested with statements as undefined.
Added a new warning 'old-raise-syntax' for the deprecated syntax raise Exception, args
Support for PEP 3102 and new missing-kwoa (E1125) message for missing mandatory keyword argument (logilab.org's #107788)
Fix spelling of max-branchs option, now max-branches
Added a new base class and interface for checkers that work on the tokens rather than the syntax, and only tokenize the input file once.
Follow astng renaming to astroid
bitbucket #37: check for unbalanced unpacking in assignments
bitbucket #25: fix incomplete-protocol false positive for read-only containers like tuple
bitbucket #16: fix False positive E1003 on Python 3 for argument-less super()
bitbucket #6: put back documentation in source distribution
bitbucket #15: epylint shouldn't hang anymore when there is a large output on pylint'stderr
bitbucket #7: fix epylint w/ python3
bitbucket #3: remove string module from the default list of deprecated modules
What's New in Pylint 0.28.0?¶
Release date: 2013-04-25
bitbucket #1: fix "dictionary changed size during iteration" crash
#74013: new E1310[bad-str-strip-call] message warning when a call to a {l,r,}strip method contains duplicate characters (patch by Torsten Marek)
#123233: new E0108[duplicate-argument-name] message reporting duplicate argument names
#81378: emit W0120[useless-else-on-loop] for loops without break
#124660: internal dependencies should not appear in external dependencies report
#124662: fix name error causing crash when symbols are included in output messages
#123285: apply pragmas for warnings attached to lines to physical source code lines
#123259: do not emit E0105 for yield expressions inside lambdas
#123892: don't crash when attempting to show source code line that can't be encoded with the current locale settings
Simplify checks for dangerous default values by unifying tests for all different mutable compound literals.
Improve the description for E1124[redundant-keyword-arg]
What's New in Pylint 0.27.0?¶
Release date: 2013-02-26
#20693: replace pylint.el by Ian Eure version (patch by J.Kotta)
#105327: add support for --disable=all option and deprecate the 'disable-all' inline directive in favour of 'skip-file' (patch by A.Fayolle)
#110840: add messages I0020 and I0021 for reporting of suppressed messages and useless suppression pragmas. (patch by Torsten Marek)
#112728: add warning E0604 for non-string objects in __all__ (patch by Torsten Marek)
#120657: add warning W0110/deprecated-lambda when a map/filter of a lambda could be a comprehension (patch by Martin Pool)
#113231: logging checker now looks at instances of Logger classes in addition to the base logging module. (patch by Mike Bryant)
#111799: don't warn about octal escape sequence, but warn about o which is not octal in Python (patch by Martin Pool)
#110839: bind <F5> to Run button in pylint-gui
#115580: fix erroneous W0212 (access to protected member) on super call (patch by Martin Pool)
#110853: fix a crash when an __init__ method in a base class has been created by assignment rather than direct function definition (patch by Torsten Marek)
#110838: fix pylint-gui crash when include-ids is activated (patch by Omega Weapon)
#112667: fix emission of reimport warnings for mixed imports and extend the testcase (patch by Torsten Marek)
#112698: fix crash related to non-inferable __all__ attributes and invalid __all__ contents (patch by Torsten Marek)
Python 3 related fixes:
- #110213: fix import of checkers broken with python 3.3, causing
"No such message id W0704" breakage
#120635: redefine cmp function used in pylint.reporters
Include full warning id for I0020 and I0021 and make sure to flush warnings after each module, not at the end of the pylint run. (patch by Torsten Marek)
Changed the regular expression for inline options so that it must be preceded by a # (patch by Torsten Marek)
Make dot output for import graph predictable and not depend on ordering of strings in hashes. (patch by Torsten Marek)
Add hooks for import path setup and move pylint's sys.path modifications into them. (patch by Torsten Marek)
What's New in Pylint 0.26.0?¶
Release date: 2012-10-05
#106534: add --ignore-imports option to code similarity checking and 'symilar' command line tool (patch by Ry4an Brase)
#104571: check for anomalous backslash escape, introducing new W1401 and W1402 messages (patch by Martin Pool)
#100707: check for boolop being used as exception class, introducing new W0711 message (patch by Tim Hatch)
#4014: improve checking of metaclass methods first args, introducing new C0204 message (patch by lothiraldan@gmail.com finalized by sthenault)
#4685: check for consistency of a module's __all__ variable, introducing new E0603 message
#105337: allow custom reporter in output-format (patch by Kevin Jing Qiu)
#104420: check for protocol completness and avoid false R0903 (patch by Peter Hammond)
#100654: fix grammatical error for W0332 message (using 'l' as long int identifier)
#103656: fix W0231 false positive for missing call to object.__init__ (patch by lothiraldan@gmail.com)
#63424: fix similarity report disabling by properly renaming it to RP0801
#103949: create a console_scripts entry point to be used by easy_install, buildout and pip
fix cross-interpreter issue (non compatible access to __builtins__)
stop including tests files in distribution, they causes crash when installed with python3 (#72022, #82417, #76910)
What's New in Pylint 0.25.2?¶
Release date: 2012-07-17
#93591: Correctly emit warnings about clobbered variable names when an except handler contains a tuple of names instead of a single name. (patch by tmarek@google.com)
#7394: W0212 (access to protected member) not emitted on assigments (patch by lothiraldan@gmail.com)
#18772; no prototype consistency check for mangled methods (patch by lothiraldan@gmail.com)
#92911: emit W0102 when sets are used as default arguments in functions (patch by tmarek@google.com)
#77982: do not emit E0602 for loop variables of comprehensions used as argument values inside a decorator (patch by tmarek@google.com)
#89092: don't emit E0202 (attribute hiding a method) on @property methods
#92584: fix pylint-gui crash due to internal API change
#87192: fix crash when decorators are accessed through more than one dot (for instance @a.b is fine, @a.b.c crash)
#88914: fix parsing of --generated-members options, leading to crash when using a regexp value set
fix potential crashes with utils.safe_infer raising InferenceError
What's New in Pylint 0.25.1?¶
Release date: 2011-12-08
#81078: Warn if names in exception handlers clobber overwrite existing names (patch by tmarek@google.com)
#81113: Fix W0702 messages appearing with the wrong line number. (patch by tmarek@google.com)
#50461, #52020, #51222: Do not issue warnings when using 2.6's property.setter/deleter functionality (patch by dneil@google.com)
#9188, #4024: Do not trigger W0631 if a loop variable is assigned in the else branch of a for loop.
What's New in Pylint 0.25.0?¶
Release date: 2011-10-7
#74742: make allowed name for first argument of class method configurable (patch by Google)
#74087: handle case where inference of a module return YES; this avoid some cases of "TypeError: '_Yes' object does not support indexing" (patch by Google)
#74745: make "too general" exception names configurable (patch by Google)
#74747: crash occurs when lookup up a special attribute in class scope (patch by google)
#76920: crash if on eg "pylint --rcfile" (patch by Torsten Marek)
#77237: warning for E0202 may be very misleading
#73941: HTML report messages table is badly rendered
What's New in Pylint 0.24.0?¶
Release date: 2011-07-18
#69738: add regular expressions support for "generated-members"
ids of logging and string_format checkers have been changed: logging: 65 -> 12, string_format: 99 -> 13 Also add documentation to say that ids of range 1-50 shall be reserved to pylint internal checkers
#69993: Additional string format checks for logging module: check for missing arguments, too many arguments, or invalid string formats in the logging checker module. Contributed by Daniel Arena
#69220: add column offset to the reports. If you've a custom reporter, this change may break it has now location gain a new item giving the column offset.
#60828: Fix false positive in reimport check
#70495: absolute imports fail depending on module path (patch by Jacek Konieczny)
#22273: Fix --ignore option documentation to match reality
What's New in Pylint 0.23.0?¶
Release date: 2011-01-11
documentation update, add manpages
several performance improvements
finalize python3 support
new W0106 warning 'Expression "%s" is assigned to nothing'
drop E0501 and E0502 messages about wrong source encoding: not anymore interesting since it's a syntax error for python >= 2.5 and we now only support this python version and above.
don't emit W0221 or W0222 when methods as variable arguments (eg *arg and/or **args). Patch submitted by Charles Duffy.
What's New in Pylint 0.22.0?¶
Release date: 2010-11-15
python versions: minimal python3.x support; drop python < 2.5 support
What's New in Pylint 0.21.4?¶
Release date: 2010-10-27
fix #48066: pylint crashes when redirecting output containing non-ascii characters
fix #19799: "pylint -blah" exit with status 2
update documentation
What's New in Pylint 0.21.3?¶
Release date: 2010-09-28
restored python 2.3 compatibility. Along with logilab-astng 0.21.3 and logilab-common 0.52, this will much probably be the latest release supporting python < 2.5.
What's New in Pylint 0.21.2?¶
Release date: 2010-08-26
fix #36193: import checker raise exception on cyclic import
fix #28796: regression in --generated-members introduced pylint 0.20
some documentation cleanups
What's New in Pylint 0.21.1?¶
Release date: 2010-06-04
fix #28962: pylint crash with new options, due to missing stats data while writing the Statistics by types report
updated man page to 0.21 or greater command line usage (fix debian #582494)
What's New in Pylint 0.21.0?¶
Release date: 2010-05-11
command line updated (closes #9774, #9787, #9992, #22962):
all enable-* / disable-* options have been merged into --enable / --disable
BACKWARD INCOMPATIBLE CHANGE: short name of --errors-only becomes -E, -e being affected to --enable
pylint --help output much simplified, with --long-help available to get the complete one
revisited gui, thanks to students from Toronto university (they are great contributors to this release!)
fix #21591: html reporter produces no output if reports is set to 'no'
fix #4581: not Missing docstring (C0111) warning if a method is overridden
fix #4683: Non-ASCII characters count double if utf8 encode
fix #9018: when using defining-attr-method, method order matters
fix #4595: Comma not followed by a space should not occurs on trailing comma in list/tuple/dict definition
fix #22585: [Patch] fix man warnings for pyreverse.1 manpage
fix #20067: AttributeError: 'NoneType' object has no attribute 'name' with with
What's New in Pylint 0.20.0?¶
Release date: 2010-03-01
fix #19498: fix windows batch file
fix #19339: pylint.el : non existing py-mod-map (closes Debian Bug report logs - #475939)
implement #18860, new W0199 message on assert (a, b)
implement #9776, 'W0150' break or return statement in finally block may swallow exception.
fix #9263, __init__ and __new__ are checked for unused arguments
fix #20991, class scope definitions ignored in a genexpr
fix #5975, Abstract intermediate class not recognized as such
fix #5977, yield and return statement have their own counters, no more R0911 (Too many return statements) when a function have many yield stamtements
implement #5564, function / method arguments with leading "_" are ignored in arguments / local variables count.
implement #9982, E0711 specific error message when raising NotImplemented
remove --cache-size option
What's New in Pylint 0.19.0?¶
Release date: 2009-12-18
implement #18947, #5561: checker for function arguments
include James Lingard string format checker
include simple message (ids) listing by Vincent Ferotin (#9791)
--errors-only does not hide fatal error anymore
include james Lingard patches for ++/-- and duplicate key in dicts
include James Lingard patches for function call arguments checker
improved flymake code and doc provided by Derek Harland
refactor and fix the imports checker
fix #18862: E0601 false positive with lambda functions
fix #8764: More than one statement on a single line false positive with try/except/finally
fix #9215: false undefined variable error in lambda function
fix for w0108 false positive (Nathaniel)
fix test/fulltest.sh
#5821 added a utility function to run pylint in another process (patch provide by Vincent Ferotin)
What's New in Pylint 0.18.0?¶
Release date: 2009-03-25
tests ok with python 2.4, 2.5, 2.6. 2.3 not tested
fix #8687, W0613 false positive on inner function
fix #8350, C0322 false positive on multi-line string
fix #8332: set E0501 line no to the first line where non ascii character has been found
avoid some E0203 / E0602 false negatives by detecting respectively AttributeError / NameError
implements #4037: don't issue W0142 (* or ** magic) when they are barely passed from /* arguments
complete #5573: more complete list of special methods, also skip W0613 for python internal method
don't show information messages by default
integration of Yuen Ho Wong's patches on emacs lisp files
What's New in Pylint 0.17.0?¶
Release date: 2009-03-19
semicolon check : move W0601 to W0301
remove rpython : remove all rpython checker, modules and tests
astng 0.18 compatibility: support for _ast module modifies interfaces
What's New in Pylint 0.16.0?¶
Release date: 2009-01-28
change [en|dis]able-msg-cat options: only accept message categories identified by their first letter (eg IRCWEF) without the need for comma as separator
add epylint.bat script to fix Windows installation
setuptools/easy_install support
include a modified version of Maarten ter Huurne patch to avoid W0613 warning on arguments from overridden method
implement #5575 drop dumb W0704 message) by adding W0704 to ignored messages by default
new W0108 message, checking for suspicious lambda (provided by Nathaniel Manista)
fix W0631, false positive reported by Paul Hachmann
fix #6951: false positive with W0104
fix #6949
patches by Mads Kiilerich:
implement #4691, make pylint exits with a non zero return status if any messages other then Information are issued
fix #3711, #5626 (name resolution bug w/ decorator and class members)
fix #6954
What's New in Pylint 0.15.2?¶
Release date: 2008-10-13
fix #5672: W0706 weirdness ( W0706 removed )
fix #5998: documentation points to wrong url for mailing list
fix #6022: no error message on wrong module names
fix #6040: pytest doesn't run test/func_test.py
What's New in Pylint 0.15.1?¶
Release date: 2008-09-15
fix #4910: default values are missing in manpage
fix #5991: missing files in 0.15.0 tarball
fix #5993: epylint should work with python 2.3
What's New in Pylint 0.15.0?¶
Release date: 2008-09-10
include pyreverse package and class diagram generation
included Stefan Rank's patch to deal with 2.4 relative import
included Robert Kirkpatrick's tutorial and typos fixes
fix bug in reenabling message
fix #2473: invoking pylint on __init__.py (hopefully)
typecheck: acquired-members option has been dropped in favor of the more generic generated-members option. If the zope option is set, the behaviour is now to add some default values to generated-members.
flymake integration: added bin/epylint and elisp/pylint-flymake.el
What's New in Pylint 0.14.0?¶
Release date: 2008-01-14
fix #3733: Messages (dis)appear depending on order of file names
fix #4026: pylint.el should require compile
fix a bug in colorized reporter, spotted by Dave Borowitz
applied patch from Stefan Rank to avoid W0410 false positive when multiple "from __future__" import statements
implement #4012: flag back tick as deprecated (new W0333 message)
new ignored-class option on typecheck checker allowing to skip members checking based on class name (patch provided by Thomas W Barr)
What's New in Pylint 0.13.2?¶
Release date: 2007-06-07
fix disable-checker option so that it won't accidentally enable the rpython checker which is disabled by default
added note about the gedit plugin into documentation
What's New in Pylint 0.13.1?¶
Release date: 2007-03-02
fix some unexplained 0.13.0 packaging issue which led to a bunch of files missing from the distribution
What's New in Pylint 0.13.0?¶
Release date: 2007-02-28
new RPython (Restricted Python) checker for PyPy fellow or people wanting to get a compiled version of their python program using the translator of the PyPy project. For more information about PyPy or RPython, visit http://codespeak.net/pypy/
new E0104 and E0105 messages introduced to respectively warn about "return" and "yield" outside function or method
new E0106 message when "yield" and "return something" are mixed in a function or method
new W0107 message for unnecessary pass statement
new W0614 message to differentiate between unused
import X
and unused from X import * (#3209, patch submitted by Daniel Drake)included Daniel Drake's patch to have a different message E1003 instead of E1001 when a missing member is found but an inference failure has been detected
msvs reporter for Visual Studio line number reporting (#3285)
allow disable-all option inline (#3218, patch submitted by Daniel Drake)
--init-hook option to call arbitrary code necessary to set environment (eg sys.path) (#3156)
One more Daniel's patch fixing a command line option parsing problem, this'll definitely be the DDrake release :)
fix #3184: crashes on "return" outside function
fix #3205: W0704 false positive
fix #3123: W0212 false positive on static method
fix #2485: W0222 false positive
fix #3259: when a message is explicitly enabled, check the checker emitting it is enabled
What's New in Pylint 0.12.2?¶
Release date: 2006-11-23
fix #3143: W0233 bug w/ YES objects
fix #3119: Off-by-one error counting lines in a file
fix #3117: ease sys.stdout overriding for reporters
fix #2508: E0601 false positive with lambda
fix #3125: E1101 false positive and a message duplication. Only the last part is actually fixed since the initial false positive is due to dynamic setting of attributes on the decimal.Context class.
fix #3149: E0101 false positives and introduced E0100 for generator __init__ methods
fixed some format checker false positives
What's New in Pylint 0.12.1?¶
Release date: 2006-09-25
fixed python >= 2.4 format false positive with multiple lines statement
fixed some 2.5 issues
fixed generator expression scope bug (depends on astng 0.16.1)
stop requiring __revision__
What's New in Pylint 0.12.0?¶
Release date: 2006-08-10
usability changes:
parseable, html and color options are now handled by a single output-format option
enable-<checkerid> and disable-all options are now handled by two (exclusive) enable-checker and disable-checker options taking a comma separated list of checker names as value
renamed debug-mode option to errors-only
started a reference user manual
new W0212 message for access to protected member from client code (close #14081)
new W0105 and W0106 messages extracted from W0104 (statement seems to have no effect) respectively when the statement is actually string (that's sometimes used instead of comments for documentation) or an empty statement generated by a useless semicolon
reclassified W0302 to C0302
fix so that global messages are not anymore connected to the last analyzed module (close #10106)
fix some bugs related to local disabling of messages
fix cr/lf pb when generating the rc file on windows platforms
What's New in Pylint 0.11.0?¶
Release date: 2006-04-19
fix crash caused by the exceptions checker in some case
fix some E1101 false positive with abstract method or classes defining __getattr__
dirty fix to avoid "_socketobject" has not "connect" member. The actual problem is that astng isn't able to understand the code used to create socket.socket object with exec
added an option in the similarity checker to ignore docstrings, enabled by default
included patch from Benjamin Niemann to allow block level enabling/disabling of messages
What's New in Pylint 0.10.0?¶
Release date: 2006-03-06
WARNING, this release include some configuration changes (see below), so you may have to check and update your own configuration file(s) if you use one
this release require the 0.15 version of astng or superior (it will save you a lot of pylint crashes...)
W0705 has been reclassified to E0701, and is now detecting more inheriting problem, and a false positive when empty except clause is following an Exception catch has been fixed (close #10422)
E0212 and E0214 (metaclass/class method should have mcs/cls as first argument have been reclassified to C0202 and C0203 since this not as well established as "self" for instance method (E0213)
W0224 has been reclassified into F0220 (failed to resolve interfaces implemented by a class)
a new typecheck checker, introducing the following checks:
E1101, access to unexistent member (implements #10430), remove the need of E0201 and so some options has been moved from the classes checker to this one
E1102, calling a non callable object
E1111 and W1111 when an assignment is done on a function call but the inferred function returns None (implements #10431)
change in the base checker:
checks module level and instance attribute names (new const-rgx and attr-rgx configuration option) (implements #10209 and #10440)
list comprehension and generator expression variables have their own regular expression (the inlinevar-rgx option) (implements #9146)
the C0101 check with its min-name-length option has been removed (this can be specified in the regxp after all...)
W0103 and W0121 are now handled by the variables checker (W0103 is now W0603 and W0604 has been splitted into different messages)
W0131 and W0132 messages have been reclassified to C0111 and C0112 respectively
new W0104 message on statement without effect
regexp support for dummy-variables (dummy-variables-rgx option replace dummy-variables) (implements #10027)
better global statement handling, see W0602, W0603, W0604 messages (implements #10344 and #10236)
--debug-mode option, disabling all checkers without error message and filtering others to only display error
fixed some R0201 (method could be a function) false positive
What's New in Pylint 0.9.0?¶
Release date: 2006-01-10
a lot of updates to follow astng 0.14 API changes, so install logilab-astng 0.14 or greater before using this version of pylint
checker number 10 ! newstyle will search for problems regarding old style / new style classes usage problems (rely on astng 0.14 new style detection feature)
new 'load-plugins' options to load additional pylint plugins (usable from the command line or from a configuration file) (implements #10031)
check if a "pylintrc" file exists in the current working directory before using the one specified in the PYLINTRC environment variable or the default ~/.pylintrc or /etc/pylintrc
fixed W0706 (Identifier used to raise an exception is assigned...) false positive and reraising a catched exception instance
fixed E0611 (No name get in module blabla) false positive when accessing to a class'__dict__
fixed some E0203 ("access to member before its definition") false positive
fixed E0214 ("metaclass method first argument should be mcs) false positive with staticmethod used on a metaclass
fixed packaging which was missing the test/regrtest_data directory
W0212 (method could be a function) has been reclassified in the REFACTOR category as R0201, and is no more considerer when a method overrides an abstract method from an ancestor class
include module name in W0401 (wildcard import), as suggested by Amaury
when using the '--parseable', path are written relative to the current working directory if in a sub-directory of it (#9789)
'pylint --version' shows logilab-astng and logilab-common versions
fixed pylint.el to handle space in file names
misc lint style fixes
What's New in Pylint 0.8.1?¶
Release date: 2005-11-07
fix "deprecated module" false positive when the code imports a module whose name starts with a deprecated module's name (close #10061)
fix "module has no name __dict__" false positive (close #10039)
fix "access to undefined variable __path__" false positive (close #10065)
fix "explicit return in __init__" false positive when return is actually in an inner function (close #10075)
What's New in Pylint 0.8.0?¶
Release date: 2005-10-21
check names imported from a module exists in the module (E0611), patch contributed by Amaury Forgeot d'Arc
print a warning (W0212) for methods that could be a function (implements #9100)
new --defining-attr-methods option on classes checker
new --acquired-members option on the classes checker, used when --zope=yes to avoid false positive on acquired attributes (listed using this new option) (close #8616)
generate one E0602 for each use of an undefined variable (previously, only one for the first use but not for the following) (implements #1000)
make profile option saveable
fix Windows .bat file, patch contributed by Amaury Forgeot d'Arc
fix one more false positive for E0601 (access before definition) with for loop such as "for i in range(10): print i" (test func_noerror_defined_and_used_on_same_line)
fix false positive for E0201 (undefined member) when accessing to __name__ on a class object
fix astng checkers traversal order
fix bug in format checker when parsing a file from a platform using different new line characters (close #9239)
fix encoding detection regexp
fix --rcfile handling (support for --rcfile=file, close #9590)
What's New in Pylint 0.7.0?¶
Release date: 2005-05-27
WARNING: pylint is no longer a logilab subpackage. Users may have to manually remove the old logilab/pylint directory.
introduce a new --additional-builtins option to handle user defined builtins
--reports option has now -r as short alias, and -i for --include-ids
fix a bug in the variables checker which may causing some false positives when variables are defined and used within the same statement (test func_noerror_defined_and_used_on_same_line)
this time, real fix of the "disable-msg in the config file" problem, test added to unittest_lint
fix bug with --list-messages and python -OO
fix possible false positive for W0201
What's New in Pylint 0.6.4?¶
Release date: 2005-04-14
allow to parse files without extension when a path is given on the command line (test noext)
don't fail if we are unable to read an inline option (e.g. inside a module), just produce an information message (test func_i0010)
new message E0103 for break or continue outside loop (close #8883, test func_continue_not_in_loop)
fix bug in the variables checker, causing non detection of some actual name error (close #8884, test func_nameerror_on_string_substitution)
fix bug in the classes checker which was making pylint crash if "object" is assigned in a class inheriting from it (test func_noerror_object_as_class_attribute)
fix problem with the similar checker when related options are defined in a configuration file
new --generate-man option to generate pylint's man page (require the latest logilab.common (>= 0.9.3)
packaged (generated...) man page
What's New in Pylint 0.6.3?¶
Release date: 2005-02-24
fix scope problem which may cause false positive and true negative on E0602
fix problem with some options such as disable-msg causing error when they are coming from the configuration file
What's New in Pylint 0.6.2?¶
Release date: 2005-02-16
fix false positive on E0201 ("access to undefined member") with metaclasses
fix false positive on E0203 ("access to member before its definition") when attributes are defined in a parent class
fix false positive on W0706 ("identifier used to raise an exception assigned to...")
fix interpretation of "t" as value for the indent-string configuration variable
fix --rcfile so that --rcfile=pylintrc (only --rcfile pylintrc was working in earlier release)
new raw checker example in the examples/ directory
What's New in Pylint 0.6.1?¶
Release date: 2005-02-04
new --rcfile option to specify the configuration file without the PYLINTRC environment variable
added an example module for a custom pylint checker (see the example/ directory)
some fixes to handle fixes in common 0.9.1 (should however still working with common 0.9.0, even if upgrade is recommended)
What's New in Pylint 0.6.0?¶
Release date: 2005-01-20
refix pylint emacs mode
no more traceback when just typing "pylint"
fix a bug which may cause crashes on resolving parent classes
fix problems with the format checker: don't chock on files containing multiple CR, avoid C0322, C0323, C0324 false positives with triple quoted string with quote inside
correctly detect access to member defined latter in __init__ method
now depends on common 0.8.1 to fix problem with interface resolution (close #8606)
new --list-msgs option describing available checkers and their messages
added windows specific documentation to the README file, contributed by Brian van den Broek
updated doc/features.txt (actually this file is now generated using the --list-msgs option), more entries into the FAQ
improved tests coverage
What's New in Pylint 0.5.0?¶
Release date: 2004-10-19
avoid importing analyzed modules !
new Refactor and Convention message categories. Some Warnings have been remaped into those new categories
added "similar", a tool to find copied and pasted lines of code, both using a specific command line tool and integrated as a pylint's checker
imports checker may report import dependencies as a dot graph
new checker regrouping most Refactor detection (with some new metrics)
more command line options storable in the configuration file
fix bug with total / undocumented number of methods
What's New in Pylint 0.4.2?¶
Release date: 2004-07-08
fix pylint emacs mode
fix classes checkers to handler twisted interfaces
What's New in Pylint 0.4.1?¶
Release date: 2004-05-14
fix the setup.py script to allow bdist_winst (well, the generated installer has not been tested...) with the necessary logilab/__init__.py file
fix file naming convention as suggested by Andreas Amoroso
fix stupid crash bug with bad method names
What's New in Pylint 0.4.0?¶
Release date: 2004-05-10
fix file path with --parsable
--parsable option has been renamed to --parseable
added patch from Andreas Amoroso to output message to files instead of standard output
added Run to the list of correct variable names
fix variable names regexp and checking of local classes names
some basic handling of metaclasses
no-docstring-rgx apply now on classes too
new option to specify a different regexp for methods than for functions
do not display the evaluation report when no statements has been analysed
fixed crash with a class nested in a method
fixed format checker to deals with triple quoted string and lines with code and comment mixed
use logilab.common.ureports to layout reports
What's New in Pylint 0.3.3?¶
Release date: 2004-02-17
added a parsable text output, used when the --parsable option is provided
added an emacs mode using this output, available in the distrib's elisp directory
fixed some typos in messages
change include-ids options to yn, and allow it to be in the configuration file
do not chock on corrupted stats files
fixed bug in the format checker which may stop pylint execution
provide scripts for unix and windows to wrap the minimal pylint tk gui
What's New in Pylint 0.3.2?¶
Release date: 2003-12-23
html-escape messages in the HTML reporter (bug reported by Juergen Hermann)
added "TODO" to the list of default note tags
added "rexec" to the list of default deprecated modules
fixed typos in some messages
What's New in Pylint 0.3.1?¶
Release date: 2003-12-05
bug fix in format and classes checkers
remove print statement from imports checkers
provide a simple tk gui, essentially useful for windows users
What's New in Pylint 0.3.0?¶
Release date: 2003-11-20
new exceptions checker, checking for string exception and empty except clauses.
imports checker checks for reimport of modules
classes checker checks for calls to ancestor's __init__ and abstract method not overridden. It doesn't complain anymore for unused import in __init__ files, and provides a new option ignore-interface-methods, useful when you're using zope Interface implementation in your project
base checker checks for disallowed builtins call (controlled by the bad-functions option) and for use of * and **
format checker checks for use of <> and "l" as long int marker
major internal API changes
use the rewrite of astng, based on compiler.ast
added unique id for messages, as suggested by Wolfgang Grafen
added unique id for reports
can take multiple modules or files as argument
new options command line options : --disable-msg, --enable-msg, --help-msg, --include-ids, --reports, --disable-report, --cache-size
--version shows the version of the python interpreter
removed some options which are now replaced by [en|dis]able-msg, or disable-report
read disable-msg and enable-msg options in source files (should be in comments on the top of the file, in the form "# pylint: disable-msg=W0402"
new message for modules importing themselves instead of the "cyclic import" message
fix bug with relative and cyclic imports
fix bug in imports checker (cycle was not always detected)
still fixes in format checker : don't check comment and docstring, check first line after an indent
allowed/prohibited names now apply to all identifiers, not only variables, so changed the configuration option from (good|bad)-variable-names to (good|bad)-names
added string, rexec and Bastion to the default list of deprecated modules
do not print redefinition warning for function/class/method defined in mutually exclusive branches
What's New in Pylint 0.2.1?¶
Release date: 2003-10-10
added some documentation, fixed some typos
set environment variable PYLINT_IMPORT to 1 during pylint execution.
check that variables "imported" using the global statement exist
indentation problems are now warning instead of errors
fix checkers.initialize to try to load all files with a known python extension (patch from wrobell)
fix a bunch of messages
fix sample configuration file
fix the bad-construction option
fix encoding checker
fix format checker
What's New in Pylint 0.2.0?¶
Release date: 2003-09-12
new source encoding / FIXME checker (pep 263)
new --zope option which trigger Zope import. Useful to check Zope products code.
new --comment option which enable the evaluation note comment (disabled by default).
a ton of bug fixes
easy functional test infrastructure
What's New in Pylint 0.1.2?¶
Release date: 2003-06-18
bug fix release
remove dependency to pyreverse
What's New in Pylint 0.1.1?¶
Release date: 2003-06-01
much more functionalities !
What's New in Pylint 0.1?¶
Release date: 2003-05-19
initial release