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 :ref:`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 :ref:`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: :ref:`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.
