Skip to content

Releases: pylint-dev/pylint

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

pylint-2.6.2

28 Mar 19:39
Compare
Choose a tag to compare
  • Astroid version has been set as < 2.5

    Close #4093

pylint-2.6.0

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

pylint-2.5.3

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