Changelog
### 2.12.2
```
============================
Release date: 2021-11-25
* Fixed a false positive for ``unused-import`` where everything
was not analyzed properly inside typing guards.
* Fixed a false-positive regression for ``used-before-assignment`` for
typed variables in the body of class methods that reference the same class
Closes 5342
* Specified that the ``ignore-paths`` option considers "\" to represent a
windows directory delimiter instead of a regular expression escape
character.
* Fixed a crash with the ``ignore-paths`` option when invoking the option
via the command line.
Closes 5437
* Fixed handling of Sphinx-style parameter docstrings with asterisks. These
should be escaped with by prepending a "\".
Closes 5406
* Add ``endLine`` and ``endColumn`` keys to output of ``JSONReporter``.
Closes 5380
* Fixed handling of Google-style parameter specifications where descriptions
are on the line following the parameter name. These were generating
false positives for ``missing-param-doc``.
Closes 5452
* Fix false negative for ``consider-iterating-dictionary`` during membership checks encapsulated in iterables
or ``not in`` checks
Closes 5323
* ``unused-import`` now check all ancestors for typing guards
Closes 5316
```
### 2.12.1
```
============================
Release date: 2021-11-25
* Require Python ``3.6.2`` to run pylint.
Closes 5065
```
### 2.12.0
```
============================
Release date: 2021-11-24
* Upgrade astroid to 2.9.0
Closes 4982
* Add ability to add ``end_line`` and ``end_column`` to the ``--msg-template`` option.
With the standard ``TextReporter`` this will add the line and column number of the
end of a node to the output of Pylint. If these numbers are unknown, they are represented
by an empty string.
* Introduced primer tests and a configuration tests framework. The helper classes available in
``pylint/testutil/`` are still unstable and might be modified in the near future.
Closes 4412 5287
* Fix ``install graphiz`` message which isn't needed for puml output format.
* ``MessageTest`` of the unittest ``testutil`` now requires the ``confidence`` attribute
to match the expected value. If none is provided it is set to ``UNDEFINED``.
* ``add_message`` of the unittest ``testutil`` now actually handles the ``col_offset`` parameter
and allows it to be checked against actual output in a test.
* Fix a crash in the ``check_elif`` extensions where an undetected if in a comprehension
with an if statement within a f-string resulted in an out of range error. The checker no
longer relies on counting if statements anymore and uses known if statements locations instead.
It should not crash on badly parsed if statements anymore.
* Fix ``simplify-boolean-expression`` when condition can be inferred as False.
Closes 5200
* Fix exception when pyreverse parses ``property function`` of a class.
* The functional ``testutils`` now accept ``end_lineno`` and ``end_column``. Expected
output files without these will trigger a ``DeprecationWarning``. Expected output files
can be easily updated with the ``python tests/test_functional.py --update-functional-output`` command.
* The functional ``testutils`` now correctly check the distinction betweeen ``HIGH`` and
``UNDEFINED`` confidence. Expected output files without defiend ``confidence`` levels will now
trigger a ``DeprecationWarning``. Expected output files can be easily updated with the
``python tests/test_functional.py --update-functional-output`` command.
* The functional test runner now supports the option ``min_pyver_end_position`` to control on which python
versions the ``end_lineno`` and ``end_column`` attributes should be checked. The default value is 3.8.
* Fix ``accept-no-yields-doc`` and ``accept-no-return-doc`` not allowing missing ``yield`` or
``return`` documentation when a docstring is partially correct
Closes 5223
* Add an optional extension ``consider-using-any-or-all`` : Emitted when a ``for`` loop only
produces a boolean and could be replaced by ``any`` or ``all`` using a generator. Also suggests
a suitable any or all statement.
Closes 5008
* Properly identify parameters with no documentation and add new message called ``missing-any-param-doc``
Closes 3799
* Add checkers ``overridden-final-method`` & ``subclassed-final-class``
Closes 3197
* Fixed ``protected-access`` for accessing of attributes and methods of inner classes
Closes 3066
* Added support for ``ModuleNotFoundError`` (``import-error`` and ``no-name-in-module``).
``ModuleNotFoundError`` inherits from ``ImportError`` and was added in Python ``3.6``
* ``undefined-variable`` now correctly flags variables which only receive a type annotations
and never get assigned a value
Closes 5140
* ``undefined-variable`` now correctly considers the line numbering and order of classes
used in metaclass declarations
Closes 4031
* ``used-before-assignment`` now correctly considers references to classes as type annotation
or default values in first-level methods
Closes 3771
* ``undefined-variable`` and ``unused-variable`` now correctly trigger for assignment expressions
in functions defaults
Fixes part of 3688
* ``undefined-variable`` now correctly triggers for assignment expressions in if ... else statements
This includes a basic form of control flow inference for if ... else statements using
constant boolean values
Closes 3688
* Added the ``--enable-all-extensions`` command line option. It will load all available extensions
which can be listed by running ``--list-extensions``
* Fix bug with importing namespace packages with relative imports
Closes 2967 and 5131
* Improve and flatten ``unused-wildcard-import`` message
Closes 3859
* In length checker, ``len-as-condition`` has been renamed as
``use-implicit-booleaness-not-len`` in order to be consistent with
``use-implicit-booleaness-not-comparison``.
* Created new ``UnsupportedVersionChecker`` checker class that includes checks for features
not supported by all versions indicated by a ``py-version``.
* Added ``using-f-string-in-unsupported-version`` checker. Issued when ``py-version``
is set to a version that does not support f-strings (< 3.6)
* Fix ``useless-super-delegation`` false positive when default keyword argument is a variable.
* Properly emit ``duplicate-key`` when Enum members are duplicate dictionary keys
Closes 5150
* Use ``py-version`` setting for alternative union syntax check (PEP 604),
instead of the Python interpreter version.
* Subclasses of ``dict`` are regarded as reversible by the ``bad-reversed-sequence`` checker
(Python 3.8 onwards).
Closes 4981
* Support configuring mixin class pattern via ``mixin-class-rgx``
* Added new checker ``use-implicit-booleaness-not-comparison``: Emitted when
collection literal comparison is being used to check for emptiness.
Closes 4774
* ``mising-param-doc`` now correctly parses asterisks for variable length and
keyword parameters
Closes 3733
* ``mising-param-doc`` now correctly handles Numpy parameter documentation without
explicit typing
Closes 5222
* ``pylint`` no longer crashes when checking assignment expressions within if-statements
Closes 5178
* Update ``literal-comparison checker to ignore tuple literals
Closes 3031
* Normalize the input to the ``ignore-paths`` option to allow both Posix and
Windows paths
Closes 5194
* Fix double emitting of ``not-callable`` on inferrable ``properties``
Closes 4426
* ``self-cls-assignment`` now also considers tuple assignment
* Fix ``missing-function-docstring`` not being able to check ``__init__`` and other
magic methods even if the ``no-docstring-rgx`` setting was set to do so
* Added ``using-final-decorator-in-unsupported-version`` checker. Issued when ``py-version``
is set to a version that does not support ``typing.final`` (< 3.8)
* Added configuration option ``exclude-too-few-public-methods`` to allow excluding
classes from the ``min-public-methods`` checker.
Closes 3370
* The ``--jobs`` parameter now fallbacks to 1 if the host operating system does not
have functioning shared semaphore implementation.
Closes 5216
* Fix crash for ``unused-private-member`` when checking private members on ``__class__``
Closes 5261
* Crashes when a list is encountered in a toml configuration do not happen anymore.
Closes 4580
* Moved ``misplaced-comparison-constant`` to its own extension ``comparison_placement``.
This checker was opinionated and now no longer a default. It can be reactived by adding
``pylint.extensions.comparison_placement`` to ``load-plugins`` in your config.
Closes 1064
* A new ``bad-configuration-section`` checker was added that will emit for misplaced option
in pylint's top level namespace for toml configuration. Top-level dictionaries or option defined
in the wrong section will still silently not be taken into account, which is tracked in a
follow-up issue.
Follow-up in 5259
* Fix crash for ``protected-access`` on (outer) class traversal
* Added new checker ``useless-with-lock`` to find incorrect usage of with statement and threading module locks.
Emitted when ``with threading.Lock():`` is used instead of ``with lock_instance:``.
Closes 5208
* Make yn validator case insensitive, to allow for ``True`` and ``False`` in config files.
* Fix crash on ``open()`` calls when the ``mode`` argument is not a simple string.
Partially closes 5321
* Inheriting from a class that implements ``__class_getitem__`` no longer raises ``inherit-non-class``.
* Pyreverse - Add the project root directory to sys.path
Closes 2479
* Don't emit ``consider-using-f-string`` if ``py-version`` is set to Python < ``3.6``.
``f-strings`` were added in Python ``3.6``
Closes 5019
* Fix regression for ``unspecified-encoding`` with ``pathlib.Path.read_text()``
Closes 5029
* Don't emit ``consider-using-f-string`` if the variables to be interpolated include a backslash
* Fixed false positive for ``cell-var-from-loop`` when variable is used as the default
value for a keyword-only parameter.
Closes 5012
* Fix false-positive ``undefined-variable`` with ``Lambda``, ``IfExp``, and
assignment expression.
* Fix false-positive ``useless-suppression`` for ``wrong-import-order``
Closes 2366
* Fixed ``toml`` dependency issue
Closes 5066
* Fix false-positive ``useless-suppression`` for ``line-too-long``
Closes 4212
* Fixed ``invalid-name`` not checking parameters of overwritten base ``object`` methods
Closes 3614
* Fixed crash in ``consider-using-f-string`` if ``format`` is not called
Closes 5058
* Fix crash with ``AssignAttr`` in ``if TYPE_CHECKING`` blocks.
Closes 5111
* Improve node information for ``invalid-name`` on function argument.
* Prevent return type checkers being called on functions with ellipses as body
Closes 4736
* Add ``is_sys_guard`` and ``is_typing_guard`` helper functions from astroid
to ``pylint.checkers.utils``.
* Fix regression on ClassDef inference
Closes 5030
Closes 5036
* Fix regression on Compare node inference
Closes 5048
* Fix false-positive ``isinstance-second-argument-not-valid-type`` with ``typing.Callable``.
Closes 3507
Closes 5087
* It is now recommended to do ``pylint`` development on ``Python`` 3.8 or higher. This
allows using the latest ``ast`` parser.
* All standard jobs in the ``pylint`` CI now run on ``Python`` 3.8 by default. We still
support python 3.6 and 3.7 and run tests for those interpreters.
* ``TypingChecker``
* Fix false-negative for ``deprecated-typing-alias`` and ``consider-using-alias``
with ``typing.Type`` + ``typing.Callable``.
```
### 2.11.1
```
============================
Release date: 2021-09-16
* ``unspecified-encoding`` now checks the encoding of ``pathlib.Path()`` correctly
Closes 5017
```
### 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 string
* Added new extension ``SetMembershipChecker`` with ``use-set-for-membership`` check:
Emitted when using an in-place defined ``list`` or ``tuple`` 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.8
Closes 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 annotations
Closes 4936
* Fix false positive for ``protected-access`` if a protected member is used in type hints of function definitions
* Fix false positive ``dict-iter-missing-items`` for dictionaries only using tuples as keys
Closes 3282
* The ``unspecified-encoding`` checker now also checks calls to ``pathlib.Path().read_text()``
and ``pathlib.Path().write_text()``
Closes 4945
* Fix false positive ``superfluous-parens`` for tuples created with inner tuples
Closes 4907
* Fix false positive ``unused-private-member`` for accessing attributes in a class using ``cls``
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 code
Closes 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) functions
Closes 1375
Closes 330
* Fix false positives for invalid-all-format that are lists or tuples at runtime
Closes 4711
* Fix ``no-self-use`` and ``docparams extension`` for async functions and methods.
* Add documentation for ``pyreverse`` and ``symilar``
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 checks
Closes 4069
* The ``invalid-name`` message is now more detailed when using multiple naming style regexes.
```
### 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
on ``copy.copy``
Closes 4891
```
### 2.10.1
```
============================
Release date: 2021-08-20
* pylint does not crash when PYLINT_HOME does not exist.
Closes 4883
```
### 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 creation
Closes 4775
* Added ``ignored-parents`` option to the design checker to ignore specific
classes from the ``too-many-ancestors`` check (R0901).
Partially closes 3057
* Added ``unspecified-encoding``: Emitted when open() is called without specifying an encoding
Closes 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 standard ``XDG_CACHE_HOME``, and pylint now uses ``appdirs``.
Closes 3878
* Added ``use-list-literal``: Emitted when ``list()`` is called with no arguments instead of using ``[]``
Closes 4365
* Added ``use-dict-literal``: Emitted when ``dict()`` 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 a ``while`` loop is used.
Closes 4367
* Added ``forgotten-debug-statement``: Emitted when ``breakpoint``, ``pdb.set_trace`` or ``sys.breakpointhook`` calls are found
Closes 3692
* Fix false-positive of ``unused-private-member`` when using nested functions in a class
Closes 4673
* Fix crash for ``unused-private-member`` that occurred with nested attributes.
Closes 4755
* Fix a false positive for ``unused-private-member`` with class names
Closes 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 replaced
Closes 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 line
Closes 1682
* Added ``redundant-u-string-prefix`` checker: Emitted when the u prefix is added to a string
Closes 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
both ``unused-variable`` and ``used-before-assignment`` are disabled.
* Fix false postive for ``invalid-all-format`` if the list or tuple builtin functions are used
Closes 4711
* Config files can now contain environment variables
Closes 3839
* Fix false-positive ``used-before-assignment`` with an assignment expression in a ``Return`` node
Closes 4828
* Added ``use-sequence-for-iteration``: Emitted when iterating over an in-place defined ``set``.
* ``CodeStyleChecker``
* Limit ``consider-using-tuple`` to be emitted only for in-place defined ``lists``.
* Emit ``consider-using-tuple`` even if list contains a ``starred`` expression.
* Ignore decorators lines by similarities checker when ignore signatures flag enabled
Closes 4839
* Allow ``true`` and ``false`` values in ``pylintrc`` for better compatibility with ``toml`` 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.
```
### 2.9.6
```
===========================
Release date: 2021-07-28
* Fix a false positive ``undefined-variable`` when variable name in decoration
matches function argument
Closes 3791
```
### 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 an AttributeInferenceError was not handled properly when
failing to infer the real name of an import in astroid.
Closes 4692
```
### 2.9.4
```
===========================
Release date: 2021-07-20
* Added ``time.clock`` to deprecated functions/methods for python 3.3
* Fix 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 with ``with``
Closes 4676
* Fix false-positive ``deprecated-module`` when relative import uses deprecated module name.
Closes 4629
* Fix false-positive ``consider-using-with`` (R1732) if ``contextlib.ExitStack`` takes care of calling the ``__exit__`` method
Closes 4654
* Fix a false positive for ``unused-private-member`` when mutating a private attribute
with ``cls``
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 loop
Closes 4664
* Don't emit ``cyclic-import`` message if import is guarded by ``typing.TYPE_CHECKING``.
Closes 3525
* Fix false-positive ``not-callable`` with alternative ``TypedDict`` syntax
Closes 4715
* Clarify documentation for consider-using-from-import
* Don't emit ``unreachable`` warning for empty generator functions
Closes 4698
* Don't emit ``import-error``, ``no-name-in-module``, and ``ungrouped-imports``
for imports guarded by ``sys.version_info`` or ``typing.TYPE_CHECKING``.
Closes 3285
Closes 3382
* Fix ``invalid-overridden-method`` with nested property
Closes 4368
* Fix false-positive of ``unused-private-member`` when using ``__new__`` in a class
Closes 4668
* No longer emit ``consider-using-with`` for ``ThreadPoolExecutor`` and ``ProcessPoolExecutor``
as they have legitimate use cases without a ``with`` 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
```
### 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.
```
### 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 the ``unused-private-member`` checker.
Closes 4638
* Fix a false positive for ``unused-private-member`` when accessing a private variable
with ``self``
Closes 4644
* Fix false-positive of ``unnecessary-dict-index-lookup`` and ``consider-using-dict-items``
for reassigned dict index lookups
Closes 4630
```
### 2.9.1
```
===========================
Release date: 2021-06-30
* Upgrade astroid to 2.6.2
Closes 4631
Closes 4633
```
### 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 using ``pylint.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 by ``tbump`` in order to not
have hidden runtime dependencies to setuptools
* Fix a crash when a test function is decorated with ``pytest.fixture`` and astroid can't
infer the name of the decorator when using ``open`` without ``with``.
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 like ``open()`` 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 the ``collections.abc`` module
Closes 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 properties
* Created 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 behind ``if sys.version_info >= (x, x)``
* Fix incompatibility with Python 3.6.0 caused by ``typing.Counter`` and ``typing.NoReturn`` usage
Closes 4412
* New checker ``use-maxsplit-arg``. Emitted either when accessing only the first or last
element of ``str.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`` and ``logging-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 class
Closes PyCQA/astroid942
* Fix ``assigning-non-slot`` false-positive with base that inherits from ``typing.Generic``
Closes 4509
Closes PyCQA/astroid999
* New checker ``invalid-all-format``. Emitted when ``__all__`` has an invalid format,
i.e. isn't a ``tuple`` or ``list``.
* Fix false positive ``unused-variable`` and ``undefined-variable`` with
Pattern Matching in Python 3.10
* New 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 on ``Enum`` subclasses, following an upgrade in astroid
Closes 1932
Closes 2062
* Fix issue with ``cached_property`` that caused ``invalid-overridden-method`` error
when overriding a ``property``.
Closes 4023
* Fix ``unused-import`` false positive for imported modules referenced in
attribute lookups in type comments.
Closes 4603
```
### 2.8.3
```
===========================
Release date: 2021-05-31
* Astroid has been pinned to 2.5.6 for the 2.8 branch see 4527.
```
### 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 not ``pylint-X.Y.Z`` anymore.
* New warning message ``deprecated-class``. This message is emitted if import or call deprecated class of the
standard library (like ``collections.Iterable`` that will be removed in Python 3.10).
Closes 4388
```
### 2.8.1
```
===========================
Release date: 2021-04-25
* Add numversion back (temporarily) in ``__pkginfo__`` because it broke Pylama and revert the unnecessary
``pylint.version`` breaking change.
Closes 4399
```
### 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 (like ``open()`` or ``threading.Lock.acquire()``) that can be used as a context manager are called without
a ``with`` 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 (R5601 ``confusing-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 with
``typing.Final``
* The packaging is now done via setuptools exclusively. ``doc``, ``tests``, ``man``, ``elisp`` and ``Changelog`` 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 with ``pylint.__version__``), other meta-information are still
accessible with ``from 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.3
Closes 2822, 4206, 4284
* Add ``consider-using-min-max-builtin`` check for if statement which could be replaced by Python builtin min or max
Closes 3406
* Don't auto-enable postponed evaluation of type annotations with Python 3.10
* Update ``astroid`` to 2.5.4
* Add 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 that ``assert 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 that
``inconsistent-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 with
``typing.Final`` are identified as such.
Closes 4277
* Continuous integration with read the doc has been added.
Closes 3850
* Don't show ``DuplicateBasesError`` for attribute access
* Fix crash when checking ``setup.cfg`` for pylint config when there are non-ascii characters in there
Closes 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
```
### 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
```
### 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 to ``extension-pkg-whitelist`` and the message ``blacklisted-name`` is now emitted as
``disallowed-name``. The previous names are accepted to maintain backward compatibility.
* Move deprecated checker to ``DeprecatedMixin``
Closes 4086
* Bump ``astroid`` version to ``2.5.2``
* Fix false positive for ``method-hidden`` when using private attribute and method
Closes 3936
* ``use-symbolic-message-instead`` now also works on legacy messages like ``C0111`` (``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 tuning ``redefined-builtin`` check.
Close 3263
* Fix issue when executing with ``python -m pylint``
Closes 4161
* Exempt ``typing.TypedDict`` from ``too-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
with ``typing.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 arguments
Closes 3202
* Fix regression with plugins on PYTHONPATH if latter is cwd
Closes 4252
```
### 2.7.2
```
===========================
Release date: 2021-02-28
* Fix False Positive on ``Enum.__members__.items()``, ``Enum.__members__.values``, and ``Enum.__members__.keys``
Closes 4123
* Properly strip dangerous sys.path entries (not just the first one)
Closes 3636
* Workflow and packaging improvements
```
### 2.7.1
```
===========================
Release date: 2021-02-23
* Expose ``UnittestLinter`` in pylint.testutils
* Don't check directories starting with '.' when using register_plugins
Closes 4119
```
### 2.7.0
```
===========================
Release date: 2021-02-21
* Introduce DeprecationMixin for reusable deprecation checks.
Closes 4049
* Fix false positive for ``builtin-not-iterating`` when ``map`` receives iterable
Closes 4078
* Python 3.6+ is now required.
* Fix false positive for ``builtin-not-iterating`` when ``zip`` receives iterable
* Add ``nan-comparison`` check for NaN comparisons
* Bug fix for empty-comment message line number.
Closes 4009
* Only emit ``bad-reversed-sequence`` on dictionaries if below py3.8
Closes 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 metaclass
Close 3742
* Fix false positive for ``not-async-context-manager`` when ``contextlib.asynccontextmanager`` is used
Close 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`` and ``unused-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/deactivate
``protected-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 of ``try/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 adds ``useless-param-doc`` and ``useless-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 bools
* Fix 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 variadics
Close 3737
* Fix a crash in ``consider-using-enumerate`` when encountering ``range()`` without arguments
Close 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 members
Close 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 <https://pypi.org/project/distlib>`_
Close 3555
* New check: ``consider-using-generator``
This check warns when a comprehension is used inside an ``any`` or ``all`` 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
```
### 2.6.1
```
===========================
Release date: 2021-02-16
* Astroid version has been set as < 2.5
Close 4093
```
### 2.6.0
```
===========================
Release date: 2020-08-20
* Fix various scope-related bugs in ``undefined-variable`` checker
Close 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 options
Close 1368
* ``missing-kwoa`` is no longer emitted when dealing with overload functions
Close 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 floats
* Fix a bug with ``ignore-docstrings`` ignoring all lines in a module
* Fix ``pre-commit`` config that could lead to undetected duplicate lines of code
* Fix 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, the ``known-standard-library`` option in pylint now maps to ``extra-standard-library`` in isort 5. If you really want what ``known-standard-library`` now means in isort 5, you must disable the ``wrong-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 calling ``infer_call_result``
Close 3690
* Fix a crash in parallel mode when the module's filepath is not set
Close 3564
```
### 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 properties
Close 3600
* ``continue-in-finally`` no longer emitted on Python 3.8 where it's now valid
Close 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 checking ``cell-var-from-loop``
Close 3646
```
### 2.5.2
```
===========================
Release date: 2020-05-05
* ``pylint.Run`` accepts ``do_exit`` as a deprecated parameter
Close 3590
```
### 2.5.1
```
===========================
Release date: 2020-05-05
* Fix a crash in ``method-hidden`` lookup for unknown base classes
Close 3527
* Revert pylint.Run's ``exit`` parameter to ``do_exit``
This has been inadvertently changed several releases ago to ``do_exit``.
Close 3533
* ``no-value-for-parameter`` variadic detection has improved for assign statements
Close 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
```
### 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 the ``non-ascii-name`` rule.
Close 2725
* Positional-only arguments are taken in account for ``useless-super-delegation``
* ``unidiomatic-typecheck`` is no longer emitted for ``in`` and ``not in`` operators
Close 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 used
Close 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 checks
Close 3350
* Emit ``invalid-overridden-method`` for improper async def overrides.
Close 3355
* Do not allow ``python -m pylint ...`` to import user code
``python -m pylint ...`` adds the current working directory as the first element
of ``sys.path``. This opens up a potential security hole where ``pylint`` 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 iterables
Close 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 when ``disable=line-too-long`` comment stands at their end
Close 2957
* Fixed an ``AttributeError`` caused by improper handling of ``dataclasses`` inference in ``pyreverse``
Close 3256
* Do not exempt bare except from ``undefined-variable`` and similar checks
If 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`` or ``ImportError``)
Close 3235
* No longer emit ``assignment-from-no-return`` when a function only raises an exception
Close 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 juxtaposition
Close 3030
* ``implicit-str-concat-in-sequence`` was renamed ``implicit-str-concat``
* The ``json`` reporter no longer bypasses ``redirect_stdout``. Close 3227
* Move ``NoFileError``, ``OutputLine``, ``FunctionalTestReporter``,
``FunctionalTestFile``, ``LintModuleTest`` and related methods from
``test_functional.py`` to ``pylint.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 added
Close 3190
* Flag mutable ``collections.*`` utilities as dangerous defaults
Close 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`` option
Pylint 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`` and ``unused-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 an ``if`` statement).
* Recognize classes explicitly inheriting from ``abc.ABC`` or having an
``abc.ABCMeta`` metaclass as abstract. This makes them not trigger W0223.
Closes 3098
* Fix overzealous ``arguments-differ`` when overridden function uses variadics
No 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
```
### 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`` module
Close 3191
```
### 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 for ``ImportFrom`` 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 when ``exit`` is imported in the local scope.
Close 3147
* ``invalid-overridden-method`` takes ``abc.abstractproperty`` in account
Close 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 from ``too-many-function-args``
Close 3170
```
### 2.4.2
```
===========================
Release date: 2019-09-30
* ``ignored-modules`` can skip submodules. Close 3135
* ``self-assigning-variable`` skips class level assignments.
Close 2930
* ``consider-using-sys-exit`` is exempted when ``exit()`` is imported from ``sys``
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
```
### 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 (using ``TYPE_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.
```
### 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 ignores ``cyclic-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`` and ``no-else-continue``
These checks highlight unnecessary ``else`` and ``elif`` blocks after
``break`` and ``continue`` statements.
Close 2327
* Don't emit ``protected-access`` when a single underscore prefixed attribute
is used inside a special method
Close 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 2898
* Ignore 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 2945
* Excluded ``attrs`` from ``too-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__`` from ``attribute-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 set ``check`` 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 calls
Close 2845
* Better postponed evaluation of annotations handling
Close 2847
* Support postponed evaluation of annotations for variable annotations.
Close 2838
* ``epylint.py_run`` defaults to ``python`` in case the current executable is not a Python one.
Close 2837
* Ignore raw docstrings when running Similarities checker with ``ignore-docstrings=yes`` option
* Fix crash when calling ``inherit_from_std_ex`` on a class which is its own ancestor
Close 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 a ``len(x)`` call is made without an explicit comparison
The 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 in ``preferred-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 a ``ValueError`` 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 the ``check_elif`` checker
Close 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 added
With this option, users can choose to ignore ``too-many-function-args``, ``unexpected-keyword-arg``,
and ``no-value-for-parameter`` for functions decorated
This PR pins pylint to the latest release 2.12.2.
Changelog
### 2.12.2 ``` ============================ Release date: 2021-11-25 * Fixed a false positive for ``unused-import`` where everything was not analyzed properly inside typing guards. * Fixed a false-positive regression for ``used-before-assignment`` for typed variables in the body of class methods that reference the same class Closes 5342 * Specified that the ``ignore-paths`` option considers "\" to represent a windows directory delimiter instead of a regular expression escape character. * Fixed a crash with the ``ignore-paths`` option when invoking the option via the command line. Closes 5437 * Fixed handling of Sphinx-style parameter docstrings with asterisks. These should be escaped with by prepending a "\". Closes 5406 * Add ``endLine`` and ``endColumn`` keys to output of ``JSONReporter``. Closes 5380 * Fixed handling of Google-style parameter specifications where descriptions are on the line following the parameter name. These were generating false positives for ``missing-param-doc``. Closes 5452 * Fix false negative for ``consider-iterating-dictionary`` during membership checks encapsulated in iterables or ``not in`` checks Closes 5323 * ``unused-import`` now check all ancestors for typing guards Closes 5316 ``` ### 2.12.1 ``` ============================ Release date: 2021-11-25 * Require Python ``3.6.2`` to run pylint. Closes 5065 ``` ### 2.12.0 ``` ============================ Release date: 2021-11-24 * Upgrade astroid to 2.9.0 Closes 4982 * Add ability to add ``end_line`` and ``end_column`` to the ``--msg-template`` option. With the standard ``TextReporter`` this will add the line and column number of the end of a node to the output of Pylint. If these numbers are unknown, they are represented by an empty string. * Introduced primer tests and a configuration tests framework. The helper classes available in ``pylint/testutil/`` are still unstable and might be modified in the near future. Closes 4412 5287 * Fix ``install graphiz`` message which isn't needed for puml output format. * ``MessageTest`` of the unittest ``testutil`` now requires the ``confidence`` attribute to match the expected value. If none is provided it is set to ``UNDEFINED``. * ``add_message`` of the unittest ``testutil`` now actually handles the ``col_offset`` parameter and allows it to be checked against actual output in a test. * Fix a crash in the ``check_elif`` extensions where an undetected if in a comprehension with an if statement within a f-string resulted in an out of range error. The checker no longer relies on counting if statements anymore and uses known if statements locations instead. It should not crash on badly parsed if statements anymore. * Fix ``simplify-boolean-expression`` when condition can be inferred as False. Closes 5200 * Fix exception when pyreverse parses ``property function`` of a class. * The functional ``testutils`` now accept ``end_lineno`` and ``end_column``. Expected output files without these will trigger a ``DeprecationWarning``. Expected output files can be easily updated with the ``python tests/test_functional.py --update-functional-output`` command. * The functional ``testutils`` now correctly check the distinction betweeen ``HIGH`` and ``UNDEFINED`` confidence. Expected output files without defiend ``confidence`` levels will now trigger a ``DeprecationWarning``. Expected output files can be easily updated with the ``python tests/test_functional.py --update-functional-output`` command. * The functional test runner now supports the option ``min_pyver_end_position`` to control on which python versions the ``end_lineno`` and ``end_column`` attributes should be checked. The default value is 3.8. * Fix ``accept-no-yields-doc`` and ``accept-no-return-doc`` not allowing missing ``yield`` or ``return`` documentation when a docstring is partially correct Closes 5223 * Add an optional extension ``consider-using-any-or-all`` : Emitted when a ``for`` loop only produces a boolean and could be replaced by ``any`` or ``all`` using a generator. Also suggests a suitable any or all statement. Closes 5008 * Properly identify parameters with no documentation and add new message called ``missing-any-param-doc`` Closes 3799 * Add checkers ``overridden-final-method`` & ``subclassed-final-class`` Closes 3197 * Fixed ``protected-access`` for accessing of attributes and methods of inner classes Closes 3066 * Added support for ``ModuleNotFoundError`` (``import-error`` and ``no-name-in-module``). ``ModuleNotFoundError`` inherits from ``ImportError`` and was added in Python ``3.6`` * ``undefined-variable`` now correctly flags variables which only receive a type annotations and never get assigned a value Closes 5140 * ``undefined-variable`` now correctly considers the line numbering and order of classes used in metaclass declarations Closes 4031 * ``used-before-assignment`` now correctly considers references to classes as type annotation or default values in first-level methods Closes 3771 * ``undefined-variable`` and ``unused-variable`` now correctly trigger for assignment expressions in functions defaults Fixes part of 3688 * ``undefined-variable`` now correctly triggers for assignment expressions in if ... else statements This includes a basic form of control flow inference for if ... else statements using constant boolean values Closes 3688 * Added the ``--enable-all-extensions`` command line option. It will load all available extensions which can be listed by running ``--list-extensions`` * Fix bug with importing namespace packages with relative imports Closes 2967 and 5131 * Improve and flatten ``unused-wildcard-import`` message Closes 3859 * In length checker, ``len-as-condition`` has been renamed as ``use-implicit-booleaness-not-len`` in order to be consistent with ``use-implicit-booleaness-not-comparison``. * Created new ``UnsupportedVersionChecker`` checker class that includes checks for features not supported by all versions indicated by a ``py-version``. * Added ``using-f-string-in-unsupported-version`` checker. Issued when ``py-version`` is set to a version that does not support f-strings (< 3.6) * Fix ``useless-super-delegation`` false positive when default keyword argument is a variable. * Properly emit ``duplicate-key`` when Enum members are duplicate dictionary keys Closes 5150 * Use ``py-version`` setting for alternative union syntax check (PEP 604), instead of the Python interpreter version. * Subclasses of ``dict`` are regarded as reversible by the ``bad-reversed-sequence`` checker (Python 3.8 onwards). Closes 4981 * Support configuring mixin class pattern via ``mixin-class-rgx`` * Added new checker ``use-implicit-booleaness-not-comparison``: Emitted when collection literal comparison is being used to check for emptiness. Closes 4774 * ``mising-param-doc`` now correctly parses asterisks for variable length and keyword parameters Closes 3733 * ``mising-param-doc`` now correctly handles Numpy parameter documentation without explicit typing Closes 5222 * ``pylint`` no longer crashes when checking assignment expressions within if-statements Closes 5178 * Update ``literal-comparison checker to ignore tuple literals Closes 3031 * Normalize the input to the ``ignore-paths`` option to allow both Posix and Windows paths Closes 5194 * Fix double emitting of ``not-callable`` on inferrable ``properties`` Closes 4426 * ``self-cls-assignment`` now also considers tuple assignment * Fix ``missing-function-docstring`` not being able to check ``__init__`` and other magic methods even if the ``no-docstring-rgx`` setting was set to do so * Added ``using-final-decorator-in-unsupported-version`` checker. Issued when ``py-version`` is set to a version that does not support ``typing.final`` (< 3.8) * Added configuration option ``exclude-too-few-public-methods`` to allow excluding classes from the ``min-public-methods`` checker. Closes 3370 * The ``--jobs`` parameter now fallbacks to 1 if the host operating system does not have functioning shared semaphore implementation. Closes 5216 * Fix crash for ``unused-private-member`` when checking private members on ``__class__`` Closes 5261 * Crashes when a list is encountered in a toml configuration do not happen anymore. Closes 4580 * Moved ``misplaced-comparison-constant`` to its own extension ``comparison_placement``. This checker was opinionated and now no longer a default. It can be reactived by adding ``pylint.extensions.comparison_placement`` to ``load-plugins`` in your config. Closes 1064 * A new ``bad-configuration-section`` checker was added that will emit for misplaced option in pylint's top level namespace for toml configuration. Top-level dictionaries or option defined in the wrong section will still silently not be taken into account, which is tracked in a follow-up issue. Follow-up in 5259 * Fix crash for ``protected-access`` on (outer) class traversal * Added new checker ``useless-with-lock`` to find incorrect usage of with statement and threading module locks. Emitted when ``with threading.Lock():`` is used instead of ``with lock_instance:``. Closes 5208 * Make yn validator case insensitive, to allow for ``True`` and ``False`` in config files. * Fix crash on ``open()`` calls when the ``mode`` argument is not a simple string. Partially closes 5321 * Inheriting from a class that implements ``__class_getitem__`` no longer raises ``inherit-non-class``. * Pyreverse - Add the project root directory to sys.path Closes 2479 * Don't emit ``consider-using-f-string`` if ``py-version`` is set to Python < ``3.6``. ``f-strings`` were added in Python ``3.6`` Closes 5019 * Fix regression for ``unspecified-encoding`` with ``pathlib.Path.read_text()`` Closes 5029 * Don't emit ``consider-using-f-string`` if the variables to be interpolated include a backslash * Fixed false positive for ``cell-var-from-loop`` when variable is used as the default value for a keyword-only parameter. Closes 5012 * Fix false-positive ``undefined-variable`` with ``Lambda``, ``IfExp``, and assignment expression. * Fix false-positive ``useless-suppression`` for ``wrong-import-order`` Closes 2366 * Fixed ``toml`` dependency issue Closes 5066 * Fix false-positive ``useless-suppression`` for ``line-too-long`` Closes 4212 * Fixed ``invalid-name`` not checking parameters of overwritten base ``object`` methods Closes 3614 * Fixed crash in ``consider-using-f-string`` if ``format`` is not called Closes 5058 * Fix crash with ``AssignAttr`` in ``if TYPE_CHECKING`` blocks. Closes 5111 * Improve node information for ``invalid-name`` on function argument. * Prevent return type checkers being called on functions with ellipses as body Closes 4736 * Add ``is_sys_guard`` and ``is_typing_guard`` helper functions from astroid to ``pylint.checkers.utils``. * Fix regression on ClassDef inference Closes 5030 Closes 5036 * Fix regression on Compare node inference Closes 5048 * Fix false-positive ``isinstance-second-argument-not-valid-type`` with ``typing.Callable``. Closes 3507 Closes 5087 * It is now recommended to do ``pylint`` development on ``Python`` 3.8 or higher. This allows using the latest ``ast`` parser. * All standard jobs in the ``pylint`` CI now run on ``Python`` 3.8 by default. We still support python 3.6 and 3.7 and run tests for those interpreters. * ``TypingChecker`` * Fix false-negative for ``deprecated-typing-alias`` and ``consider-using-alias`` with ``typing.Type`` + ``typing.Callable``. ``` ### 2.11.1 ``` ============================ Release date: 2021-09-16 * ``unspecified-encoding`` now checks the encoding of ``pathlib.Path()`` correctly Closes 5017 ``` ### 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 string * Added new extension ``SetMembershipChecker`` with ``use-set-for-membership`` check: Emitted when using an in-place defined ``list`` or ``tuple`` 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.8 Closes 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 annotations Closes 4936 * Fix false positive for ``protected-access`` if a protected member is used in type hints of function definitions * Fix false positive ``dict-iter-missing-items`` for dictionaries only using tuples as keys Closes 3282 * The ``unspecified-encoding`` checker now also checks calls to ``pathlib.Path().read_text()`` and ``pathlib.Path().write_text()`` Closes 4945 * Fix false positive ``superfluous-parens`` for tuples created with inner tuples Closes 4907 * Fix false positive ``unused-private-member`` for accessing attributes in a class using ``cls`` 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 code Closes 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) functions Closes 1375 Closes 330 * Fix false positives for invalid-all-format that are lists or tuples at runtime Closes 4711 * Fix ``no-self-use`` and ``docparams extension`` for async functions and methods. * Add documentation for ``pyreverse`` and ``symilar`` 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 checks Closes 4069 * The ``invalid-name`` message is now more detailed when using multiple naming style regexes. ``` ### 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 on ``copy.copy`` Closes 4891 ``` ### 2.10.1 ``` ============================ Release date: 2021-08-20 * pylint does not crash when PYLINT_HOME does not exist. Closes 4883 ``` ### 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 creation Closes 4775 * Added ``ignored-parents`` option to the design checker to ignore specific classes from the ``too-many-ancestors`` check (R0901). Partially closes 3057 * Added ``unspecified-encoding``: Emitted when open() is called without specifying an encoding Closes 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 standard ``XDG_CACHE_HOME``, and pylint now uses ``appdirs``. Closes 3878 * Added ``use-list-literal``: Emitted when ``list()`` is called with no arguments instead of using ``[]`` Closes 4365 * Added ``use-dict-literal``: Emitted when ``dict()`` 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 a ``while`` loop is used. Closes 4367 * Added ``forgotten-debug-statement``: Emitted when ``breakpoint``, ``pdb.set_trace`` or ``sys.breakpointhook`` calls are found Closes 3692 * Fix false-positive of ``unused-private-member`` when using nested functions in a class Closes 4673 * Fix crash for ``unused-private-member`` that occurred with nested attributes. Closes 4755 * Fix a false positive for ``unused-private-member`` with class names Closes 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 replaced Closes 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 line Closes 1682 * Added ``redundant-u-string-prefix`` checker: Emitted when the u prefix is added to a string Closes 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 both ``unused-variable`` and ``used-before-assignment`` are disabled. * Fix false postive for ``invalid-all-format`` if the list or tuple builtin functions are used Closes 4711 * Config files can now contain environment variables Closes 3839 * Fix false-positive ``used-before-assignment`` with an assignment expression in a ``Return`` node Closes 4828 * Added ``use-sequence-for-iteration``: Emitted when iterating over an in-place defined ``set``. * ``CodeStyleChecker`` * Limit ``consider-using-tuple`` to be emitted only for in-place defined ``lists``. * Emit ``consider-using-tuple`` even if list contains a ``starred`` expression. * Ignore decorators lines by similarities checker when ignore signatures flag enabled Closes 4839 * Allow ``true`` and ``false`` values in ``pylintrc`` for better compatibility with ``toml`` 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. ``` ### 2.9.6 ``` =========================== Release date: 2021-07-28 * Fix a false positive ``undefined-variable`` when variable name in decoration matches function argument Closes 3791 ``` ### 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 an AttributeInferenceError was not handled properly when failing to infer the real name of an import in astroid. Closes 4692 ``` ### 2.9.4 ``` =========================== Release date: 2021-07-20 * Added ``time.clock`` to deprecated functions/methods for python 3.3 * Fix 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 with ``with`` Closes 4676 * Fix false-positive ``deprecated-module`` when relative import uses deprecated module name. Closes 4629 * Fix false-positive ``consider-using-with`` (R1732) if ``contextlib.ExitStack`` takes care of calling the ``__exit__`` method Closes 4654 * Fix a false positive for ``unused-private-member`` when mutating a private attribute with ``cls`` 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 loop Closes 4664 * Don't emit ``cyclic-import`` message if import is guarded by ``typing.TYPE_CHECKING``. Closes 3525 * Fix false-positive ``not-callable`` with alternative ``TypedDict`` syntax Closes 4715 * Clarify documentation for consider-using-from-import * Don't emit ``unreachable`` warning for empty generator functions Closes 4698 * Don't emit ``import-error``, ``no-name-in-module``, and ``ungrouped-imports`` for imports guarded by ``sys.version_info`` or ``typing.TYPE_CHECKING``. Closes 3285 Closes 3382 * Fix ``invalid-overridden-method`` with nested property Closes 4368 * Fix false-positive of ``unused-private-member`` when using ``__new__`` in a class Closes 4668 * No longer emit ``consider-using-with`` for ``ThreadPoolExecutor`` and ``ProcessPoolExecutor`` as they have legitimate use cases without a ``with`` 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 ``` ### 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. ``` ### 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 the ``unused-private-member`` checker. Closes 4638 * Fix a false positive for ``unused-private-member`` when accessing a private variable with ``self`` Closes 4644 * Fix false-positive of ``unnecessary-dict-index-lookup`` and ``consider-using-dict-items`` for reassigned dict index lookups Closes 4630 ``` ### 2.9.1 ``` =========================== Release date: 2021-06-30 * Upgrade astroid to 2.6.2 Closes 4631 Closes 4633 ``` ### 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 using ``pylint.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 by ``tbump`` in order to not have hidden runtime dependencies to setuptools * Fix a crash when a test function is decorated with ``pytest.fixture`` and astroid can't infer the name of the decorator when using ``open`` without ``with``. 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 like ``open()`` 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 the ``collections.abc`` module Closes 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 properties * Created 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 behind ``if sys.version_info >= (x, x)`` * Fix incompatibility with Python 3.6.0 caused by ``typing.Counter`` and ``typing.NoReturn`` usage Closes 4412 * New checker ``use-maxsplit-arg``. Emitted either when accessing only the first or last element of ``str.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`` and ``logging-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 class Closes PyCQA/astroid942 * Fix ``assigning-non-slot`` false-positive with base that inherits from ``typing.Generic`` Closes 4509 Closes PyCQA/astroid999 * New checker ``invalid-all-format``. Emitted when ``__all__`` has an invalid format, i.e. isn't a ``tuple`` or ``list``. * Fix false positive ``unused-variable`` and ``undefined-variable`` with Pattern Matching in Python 3.10 * New 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 on ``Enum`` subclasses, following an upgrade in astroid Closes 1932 Closes 2062 * Fix issue with ``cached_property`` that caused ``invalid-overridden-method`` error when overriding a ``property``. Closes 4023 * Fix ``unused-import`` false positive for imported modules referenced in attribute lookups in type comments. Closes 4603 ``` ### 2.8.3 ``` =========================== Release date: 2021-05-31 * Astroid has been pinned to 2.5.6 for the 2.8 branch see 4527. ``` ### 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 not ``pylint-X.Y.Z`` anymore. * New warning message ``deprecated-class``. This message is emitted if import or call deprecated class of the standard library (like ``collections.Iterable`` that will be removed in Python 3.10). Closes 4388 ``` ### 2.8.1 ``` =========================== Release date: 2021-04-25 * Add numversion back (temporarily) in ``__pkginfo__`` because it broke Pylama and revert the unnecessary ``pylint.version`` breaking change. Closes 4399 ``` ### 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 (like ``open()`` or ``threading.Lock.acquire()``) that can be used as a context manager are called without a ``with`` 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 (R5601 ``confusing-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 with ``typing.Final`` * The packaging is now done via setuptools exclusively. ``doc``, ``tests``, ``man``, ``elisp`` and ``Changelog`` 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 with ``pylint.__version__``), other meta-information are still accessible with ``from 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.3 Closes 2822, 4206, 4284 * Add ``consider-using-min-max-builtin`` check for if statement which could be replaced by Python builtin min or max Closes 3406 * Don't auto-enable postponed evaluation of type annotations with Python 3.10 * Update ``astroid`` to 2.5.4 * Add 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 that ``assert 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 that ``inconsistent-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 with ``typing.Final`` are identified as such. Closes 4277 * Continuous integration with read the doc has been added. Closes 3850 * Don't show ``DuplicateBasesError`` for attribute access * Fix crash when checking ``setup.cfg`` for pylint config when there are non-ascii characters in there Closes 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 ``` ### 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 ``` ### 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 to ``extension-pkg-whitelist`` and the message ``blacklisted-name`` is now emitted as ``disallowed-name``. The previous names are accepted to maintain backward compatibility. * Move deprecated checker to ``DeprecatedMixin`` Closes 4086 * Bump ``astroid`` version to ``2.5.2`` * Fix false positive for ``method-hidden`` when using private attribute and method Closes 3936 * ``use-symbolic-message-instead`` now also works on legacy messages like ``C0111`` (``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 tuning ``redefined-builtin`` check. Close 3263 * Fix issue when executing with ``python -m pylint`` Closes 4161 * Exempt ``typing.TypedDict`` from ``too-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 with ``typing.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 arguments Closes 3202 * Fix regression with plugins on PYTHONPATH if latter is cwd Closes 4252 ``` ### 2.7.2 ``` =========================== Release date: 2021-02-28 * Fix False Positive on ``Enum.__members__.items()``, ``Enum.__members__.values``, and ``Enum.__members__.keys`` Closes 4123 * Properly strip dangerous sys.path entries (not just the first one) Closes 3636 * Workflow and packaging improvements ``` ### 2.7.1 ``` =========================== Release date: 2021-02-23 * Expose ``UnittestLinter`` in pylint.testutils * Don't check directories starting with '.' when using register_plugins Closes 4119 ``` ### 2.7.0 ``` =========================== Release date: 2021-02-21 * Introduce DeprecationMixin for reusable deprecation checks. Closes 4049 * Fix false positive for ``builtin-not-iterating`` when ``map`` receives iterable Closes 4078 * Python 3.6+ is now required. * Fix false positive for ``builtin-not-iterating`` when ``zip`` receives iterable * Add ``nan-comparison`` check for NaN comparisons * Bug fix for empty-comment message line number. Closes 4009 * Only emit ``bad-reversed-sequence`` on dictionaries if below py3.8 Closes 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 metaclass Close 3742 * Fix false positive for ``not-async-context-manager`` when ``contextlib.asynccontextmanager`` is used Close 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`` and ``unused-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/deactivate ``protected-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 of ``try/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 adds ``useless-param-doc`` and ``useless-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 bools * Fix 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 variadics Close 3737 * Fix a crash in ``consider-using-enumerate`` when encountering ``range()`` without arguments Close 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 members Close 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 <https://pypi.org/project/distlib>`_ Close 3555 * New check: ``consider-using-generator`` This check warns when a comprehension is used inside an ``any`` or ``all`` 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 ``` ### 2.6.1 ``` =========================== Release date: 2021-02-16 * Astroid version has been set as < 2.5 Close 4093 ``` ### 2.6.0 ``` =========================== Release date: 2020-08-20 * Fix various scope-related bugs in ``undefined-variable`` checker Close 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 options Close 1368 * ``missing-kwoa`` is no longer emitted when dealing with overload functions Close 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 floats * Fix a bug with ``ignore-docstrings`` ignoring all lines in a module * Fix ``pre-commit`` config that could lead to undetected duplicate lines of code * Fix 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, the ``known-standard-library`` option in pylint now maps to ``extra-standard-library`` in isort 5. If you really want what ``known-standard-library`` now means in isort 5, you must disable the ``wrong-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 calling ``infer_call_result`` Close 3690 * Fix a crash in parallel mode when the module's filepath is not set Close 3564 ``` ### 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 properties Close 3600 * ``continue-in-finally`` no longer emitted on Python 3.8 where it's now valid Close 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 checking ``cell-var-from-loop`` Close 3646 ``` ### 2.5.2 ``` =========================== Release date: 2020-05-05 * ``pylint.Run`` accepts ``do_exit`` as a deprecated parameter Close 3590 ``` ### 2.5.1 ``` =========================== Release date: 2020-05-05 * Fix a crash in ``method-hidden`` lookup for unknown base classes Close 3527 * Revert pylint.Run's ``exit`` parameter to ``do_exit`` This has been inadvertently changed several releases ago to ``do_exit``. Close 3533 * ``no-value-for-parameter`` variadic detection has improved for assign statements Close 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 ``` ### 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 the ``non-ascii-name`` rule. Close 2725 * Positional-only arguments are taken in account for ``useless-super-delegation`` * ``unidiomatic-typecheck`` is no longer emitted for ``in`` and ``not in`` operators Close 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 used Close 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 checks Close 3350 * Emit ``invalid-overridden-method`` for improper async def overrides. Close 3355 * Do not allow ``python -m pylint ...`` to import user code ``python -m pylint ...`` adds the current working directory as the first element of ``sys.path``. This opens up a potential security hole where ``pylint`` 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 iterables Close 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 when ``disable=line-too-long`` comment stands at their end Close 2957 * Fixed an ``AttributeError`` caused by improper handling of ``dataclasses`` inference in ``pyreverse`` Close 3256 * Do not exempt bare except from ``undefined-variable`` and similar checks If 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`` or ``ImportError``) Close 3235 * No longer emit ``assignment-from-no-return`` when a function only raises an exception Close 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 juxtaposition Close 3030 * ``implicit-str-concat-in-sequence`` was renamed ``implicit-str-concat`` * The ``json`` reporter no longer bypasses ``redirect_stdout``. Close 3227 * Move ``NoFileError``, ``OutputLine``, ``FunctionalTestReporter``, ``FunctionalTestFile``, ``LintModuleTest`` and related methods from ``test_functional.py`` to ``pylint.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 added Close 3190 * Flag mutable ``collections.*`` utilities as dangerous defaults Close 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`` option Pylint 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`` and ``unused-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 an ``if`` statement). * Recognize classes explicitly inheriting from ``abc.ABC`` or having an ``abc.ABCMeta`` metaclass as abstract. This makes them not trigger W0223. Closes 3098 * Fix overzealous ``arguments-differ`` when overridden function uses variadics No 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 ``` ### 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`` module Close 3191 ``` ### 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 for ``ImportFrom`` 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 when ``exit`` is imported in the local scope. Close 3147 * ``invalid-overridden-method`` takes ``abc.abstractproperty`` in account Close 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 from ``too-many-function-args`` Close 3170 ``` ### 2.4.2 ``` =========================== Release date: 2019-09-30 * ``ignored-modules`` can skip submodules. Close 3135 * ``self-assigning-variable`` skips class level assignments. Close 2930 * ``consider-using-sys-exit`` is exempted when ``exit()`` is imported from ``sys`` 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 ``` ### 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 (using ``TYPE_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. ``` ### 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 ignores ``cyclic-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`` and ``no-else-continue`` These checks highlight unnecessary ``else`` and ``elif`` blocks after ``break`` and ``continue`` statements. Close 2327 * Don't emit ``protected-access`` when a single underscore prefixed attribute is used inside a special method Close 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 2898 * Ignore 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 2945 * Excluded ``attrs`` from ``too-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__`` from ``attribute-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 set ``check`` 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 calls Close 2845 * Better postponed evaluation of annotations handling Close 2847 * Support postponed evaluation of annotations for variable annotations. Close 2838 * ``epylint.py_run`` defaults to ``python`` in case the current executable is not a Python one. Close 2837 * Ignore raw docstrings when running Similarities checker with ``ignore-docstrings=yes`` option * Fix crash when calling ``inherit_from_std_ex`` on a class which is its own ancestor Close 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 a ``len(x)`` call is made without an explicit comparison The 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 in ``preferred-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 a ``ValueError`` 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 the ``check_elif`` checker Close 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 added With this option, users can choose to ignore ``too-many-function-args``, ``unexpected-keyword-arg``, and ``no-value-for-parameter`` for functions decorated