Full changelog

What's New in Pylint 2.4.4?

Release date: 2019-11-13

  • Exempt all the names found in type annotations from unused-import

    The previous code was assuming that only typing names need to be exempted, but we need to do that for the rest of the type comment names as well.

    Closes #3112

  • Relax type import detection for names that do not come from the typing module

    Closes #3191

What's New in Pylint 2.4.3?

Release date: 2019-10-18

  • Fix an issue with unnecessary-comprehension in comprehensions with additional repacking of elements.

    Closes #3148

  • import-outside-toplevel is emitted for ImportFrom nodes as well.

    Closes #3175

  • Do not emit no-method-argument for functions using positional only args.

    Closes #3161

  • consider-using-sys-exit is no longer emitted when exit is imported in the local scope.

    Closes #3147

  • invalid-overridden-method takes abc.abstractproperty in account

    Closes #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

    Closes #3170

What's New in Pylint 2.4.2?

Release date: 2019-09-30

  • ignored-modules can skip submodules.

    Closes #3135

  • self-assigning-variable skips class level assignments.

    Closes #2930

  • consider-using-sys-exit is exempted when exit() is imported from sys

    Closes #3145

  • Exempt annotated assignments without variable from class-variable-slots-conflict

    Closes #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.

    Closes #3028

What's New in Pylint 2.4.1?

Release date: 2019-09-25

  • Exempt type checking definitions defined in both clauses of a type checking guard

    Closes #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.

    Closes #3119

  • Require astroid >= 2.3 to avoid any compatibility issues.

What's New in Pylint 2.4.0?

Release date: 2019-09-24

  • New check: import-outside-toplevel

    This check warns when modules are imported from places other than a module toplevel, e.g. inside a function or a class.

  • Handle inference ambiguity for invalid-format-index

    Closes #2752

  • Removed Python 2 specific checks such as relative-import, invalid-encoded-data, missing-super-argument.

  • Support forward references for function-redefined check.

    Closes #2540

  • Handle redefinitions in case of type checking imports.

    Closes #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.

    Closes #2925

  • useless-suppression check now ignores cyclic-import suppressions, which could lead to false positives due to incomplete context at the time of the check.

    Closes #3064

  • Added new checks, no-else-break and no-else-continue

    These checks highlight unnecessary else and elif blocks after break and continue statements.

    Closes #2327

  • Don't emit protected-access when a single underscore prefixed attribute is used inside a special method

    Closes #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.

    Closes #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.

    Closes #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.

    Closes #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

    Closes #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.

    Closes #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.

    Closes #3006

  • Excluded protocol classes from a couple of checks.

    Closes #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.

    Closes #2905

  • Excluded PEP 526 instance and class variables from no-member.

    Closes #2945

  • Excluded attrs from too-few-public-methods check.

    Closes #2988.

  • unused-import emitted for the right import names in function scopes.

    Closes #2928

  • Dropped support for Python 3.4.

  • assignment-from-no-return not triggered for async methods.

    Closes #2902

  • Don't emit attribute-defined-outside-init for variables defined in setters.

    Closes #409

  • Syntax errors report the column number.

    Closes #2914

  • Support fully qualified typing imports for type annotations.

    Closes #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.

    Closes #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.

    Closes #2848

  • When we can't infer bare except handlers, skip try-except-raise

    Closes #2853

  • Handle more unnecessary-lambda cases when dealing with additional kwargs in wrapped calls

    Closes #2845

  • Better postponed evaluation of annotations handling

    Closes #2847

  • Support postponed evaluation of annotations for variable annotations.

    Closes #2838

  • epylint.py_run defaults to python in case the current executable is not a Python one.

    Closes #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

    Closes #2680

  • Added a new check that warns the user if a function call is used inside a test but parentheses are missing.

    Closes #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.

    Closes #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.

    Closes #2807

  • old-division is not emitted for non-Const nodes.

    Closes #2808

  • Added method arguments to the dot writer for pyreverse.

    Closes #2139

  • Support for linting file from stdin.

    IDEs may benefit from the support for linting from an in-memory file.

    Closes #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)

    Closes #2761

  • Fix issue with pylint name in output of python -m pylint --version

    Closes #2764

  • Relicense logo material under the CC BY-SA 4.0 license.

  • Skip if expressions from f-strings for the check_elif checker

    Closes #2816

  • C0412 (ungrouped-import) is now compatible with isort.

    Closes #2806

  • Added new extension to detect too much code in a try clause

    Closes #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 with decorators that change the signature of a decorated function.

    Closes #259

  • Fixed a pragma comment on its own physical line being ignored when part of a logical line with the previous physical line.

    Closes #199

  • Fixed false undefined-loop-variable for a function defined in the loop, that uses the variable defined in that loop.

    Closes #202

  • Fixed unused-argument and function-redefined getting raised for functions decorated with typing.overload.

    Closes #1581

  • Fixed a false positive with consider-using-dict-comprehension for constructions that can't be converted to a comprehension

    Closes #2963

  • Added __post_init__ to defining-attr-methods in order to avoid attribute-defined-outside-init in dataclasses.

    Closes #2581

  • Changed description of W0199 to use the term 2-item-tuple instead of 2-uple.

  • Allow a . as a prefix for Sphinx name resolution.

  • Checkers must now keep a 1 to 1 relationship between "msgid" (ie: C1234) and "symbol" (i.e. : human-readable-symbol)

  • In checkers, an old_names can now be used for multiple new messages and pylint is now a little faster

    It means if you do a partial old_names for a message definition an exception will tell you that you must rename the associated identification.

  • Allow the choice of f-strings as a valid way of formatting logging strings.

    Closes #2395

  • Added --list-msgs-enabled command to list all enabled and disabled messages given the current RC file and command line arguments.