Skip to content

Releases: pylint-dev/pylint

v2.9.0

29 Jun 19:15
Compare
Choose a tag to compare
  • 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 checkerconsider-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 pylint-dev/astroid#942

  • Fix assigning-non-slot false-positive with base that inherits from typing.Generic

    Closes #4509
    Closes pylint-dev/astroid#999

  • 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

v2.8.3

31 May 19:04
Compare
Choose a tag to compare

Pin astroid to 2.5.6 for pylint 2.8.3

v2.8.2

26 Apr 16:00
Compare
Choose a tag to compare
  • 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.

pylint-2.8.1

25 Apr 10:05
Compare
Choose a tag to compare
  • Add numversion back (temporarily) in __pkginfo__ because it broke Pylama and revert the unnecessary
    pylint.version breaking change.

    Closes #4399

pylint-2.8.0

24 Apr 19:47
Compare
Choose a tag to compare
  • 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 import importlib;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

pylint-2.7.4: Fix disabled warning not ignored (#4268)

30 Mar 07:30
c92e3ab
Compare
Choose a tag to compare
  • Fix a problem with disabled msgid not being ignored

    Closes #4265

  • Fix issue with annotated class constants

pylint-2.7.3

29 Mar 19:41
13dae7c
Compare
Choose a tag to compare
  • 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

pylint-2.7.2

28 Mar 19:36
Compare
Choose a tag to compare
  • 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

pylint-2.7.1

28 Mar 19:35
Compare
Choose a tag to compare
  • Expose UnittestLinter in pylint.testutils

  • Don't check directories starting with '.' when using register_plugins

    Closes #4119

pylint-2.7.0

28 Mar 19:35
Compare
Choose a tag to compare
  • 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, comman, 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

    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