Full changelog
==============

What's New in Pylint 2.0?
-------------------------

Release date: 2018-07-15

* ``try-except-raise`` should not be emitted if there are any parent exception class handlers.

  Closes #2284

* ``trailing-comma-tuple`` can be emitted for ``return`` statements as well.

  Closes #2269

* Fix a false positive ``inconsistent-return-statements`` message when exception is raised
  inside an else statement.

  Closes #1782

* ``ImportFrom`` nodes correctly use the full name for the import sorting checks.

  Closes #2181

* [].extend and similar builtin operations don't emit `dict-*-not-iterating` with the Python 3 porting checker

  Closes #2187

* Add a check ``consider-using-dict-comprehension`` which is emitted if for dict initialization
  the old style with list comprehensions is used.

* Add a check ``consider-using-set-comprehension`` which is emitted if for set initialization
  the old style with list comprehensions is used.

* ``logging-not-lazy`` is emitted whenever pylint infers that a string is built with addition

  Closes #2193

* Add a check ``chained-comparison`` which is emitted if a boolean operation can be simplified
  by chaining some of its operations.
  e.g "a < b and b < c", can be simplified as "a < b < c".

  Closes #2032

* Add a check ``consider-using-in`` for comparisons of a variable against
  multiple values with "==" and "or"s instead of checking if the variable
  is contained "in" a tuple of those values.

* ``in`` is considered iterating context for some of the Python 3 porting checkers

  Closes #2186

* Add ``--ignore-none`` flag to control if pylint should warn about ``no-member`` where the owner is None

* Fix a false positive related to ``too-many-arguments`` and bounded ``__get__`` methods

  Closes #2172

* ``mcs`` as the first parameter of metaclass's ``__new__`` method was replaced by ``cls``

  Closes #2028

* ``assignment-from-no-return`` considers methods as well.

  Closes #2081

* Support typing.TYPE_CHECKING for *:ref:`unused-import`* errors

  Closes #1948

* Inferred classes at a function level no longer emit ``invalid-name``
  when they don't respect the variable regular expression

  Closes #1049

* Added basic support for postponed evaluation of function annotations.

  Closes #2069

* Fix a bug with ``missing-kwoa`` and variadics parameters

  Closes #1111

* ``simplifiable-if-statement`` takes in account only when assigning to same targets

  Closes #1984

* Make ``len-as-condition`` test more cases, such as ``len() < 1`` or ``len <= 0``

* Fix false-positive ``line-too-long`` message emission for
  commented line at the end of a module

  Closes #1950

* Fix false-positive ``bad-continuation`` for with statements

  Closes #461

* Don't warn about ``stop-iteration-return`` when using ``next()`` over ``itertools.count``

  Closes #2158

* Add a check ``consider-using-get`` for unidiomatic usage of value/default-retrieval
  for a key from a dictionary

  Closes #2076

* :ref:`invalid-slice-index` is not emitted when the slice is used as index for a complex object.

  We only use a handful of known objects (list, set and friends) to figure out if
  we should emit :ref:`invalid-slice-index` when the slice is used to subscript an object.

* Don't emit ``unused-import`` anymore for typing imports used in type comments.

* Add a new check :ref:`useless-import-alias`'.

  Closes #2052

* Add ``comparison-with-callable`` to warn for comparison with bare callable, without calling it.

  Closes #2082

* Don't warn for ``missing-type-doc`` and/or ``missing-return-type-doc``, if type
  annotations exist on the function signature for a parameter and/or return type.

  Closes #2083

* Add ``--exit-zero`` option for continuous integration scripts to more
  easily call Pylint in environments that abort when a program returns a
  non-zero (error) status code.

  Closes #2042

* Warn if the first argument of an instance/ class method gets assigned

  Closes #977

* New check ``comparison-with-itself`` to check comparison between same value.

  Closes #2051

* Add a new warning, :ref:`logging-fstring-interpolation`', emitted when f-string
  is used within logging function calls.

  Closes #1998

* Don't show :ref:`useless-super-delegation`' if the subclass method has different type annotations.

  Closes #1923

* Add ``unhashable-dict-key`` check.

  Closes #586

* Don't warn that a global variable is unused if it is defined by an import

  Closes #1453

* Skip wildcard import check for ``__init__.py``.

  Closes #2026

* The Python 3 porting mode can now run with Python 3 as well.

* ``too-few-public-methods`` is not emitted for dataclasses.

  Closes #1793

* New verbose mode option, enabled with ``--verbose`` command line flag, to
  display of extra non-checker-related output. It is disabled by default.

  Closes #1863

* ``undefined-loop-variable`` takes in consideration non-empty iterred objects before emitting

  Closes #2039

* Add support for numpydoc optional return value names.

  Closes #2030

* ``singleton-comparison`` accounts for negative checks

  Closes #2037

* Add a check ``consider-using-in`` for comparisons of a variable against
  multiple values with "==" and "or"s instead of checking if the variable
  is contained "in" a tuple of those values.

  Closes #1977

* defaultdict and subclasses of dict are now handled for dict-iter-* checks

  Closes #2005

* ``logging-format-interpolation`` also emits when f-strings are used instead of % syntax.

  Closes #1788

* Don't trigger :ref:`misplaced-bare-raise` when the raise is in a finally clause

  Closes #1924

* Add a new check, ``possibly-unused-variable``.

  This is similar to ``unused-variable``, the only difference is that it is
  emitted when we detect a locals() call in the scope of the unused variable.
  The ``locals()`` call could potentially use the said variable, by consuming
  all values that are present up to the point of the call. This new check
  allows to disable this error when the user intentionally uses ``locals()``
  to consume everything.

  Closes #1909.

* ``no-else-return`` accounts for multiple cases

   The check was a bit overrestrictive because we were checking for
   return nodes in the .orelse node. At that point though the if statement
   can be refactored to not have the orelse. This improves the detection of
   other cases, for instance it now detects TryExcept nodes that are part of
   the .else branch.

  Closes #1852

* Added two new checks, ``invalid-envvar-value`` and ``invalid-envvar-default``.

  The former is trigger whenever pylint detects that environment variable manipulation
  functions uses a different type than strings, while the latter is emitted whenever
  the said functions are using a default variable of different type than expected.

* Add a check ``consider-using-join`` for concatenation of strings using str.join(sequence)

  Closes #1952

* Add a check ``consider-swap-variables`` for swapping variables with tuple unpacking

  Closes #1922

* Add new checker ``try-except-raise`` that warns the user if an except handler block
  has a ``raise`` statement as its first operator. The warning is shown when there is
  a bare raise statement, effectively re-raising the exception that was caught or the
  type of the exception being raised is the same as the one being handled.

* Don't crash on invalid strings when checking for ``logging-format-interpolation``

  Closes #1944

* Exempt ``__doc__`` from triggering a ``redefined-builtin``

  ``__doc__`` can be used to specify a docstring for a module without
  passing it as a first-statement string.

* Fix false positive bad-whitespace from function arguments with default
  values and annotations

  Closes #1831

* Fix :ref:`stop-iteration-return` false positive when next builtin has a
  default value in a generator

  Closes #1830

* Fix emission of false positive ``no-member`` message for class with  "private" attributes whose name is mangled.

  Closes #1643

* Fixed a crash which occurred when ``Uninferable`` wasn't properly handled in ``stop-iteration-return``

  Closes #1779

* Use the proper node to get the name for redefined functions (#1792)

  Closes #1774

* Don't crash when encountering bare raises while checking inconsistent returns

  Closes #1773

* Fix a false positive ``inconsistent-return-statements`` message when if statement is inside try/except.

  Closes #1770

* Fix a false positive ``inconsistent-return-statements`` message when while loop are used.

  Closes #1772

* Correct column number for whitespace conventions.

  Previously the column was stuck at 0

  Closes #1649

* Fix ``unused-argument`` false positives with overshadowed variable in
  dictionary comprehension.

  Closes #1731

* Fix false positive ``inconsistent-return-statements`` message when never
  returning functions are used (i.e sys.exit for example).

  Closes #1771

* Fix error when checking if function is exception, as in ``bad-exception-context``.

* Fix false positive ``inconsistent-return-statements`` message when a
  function is defined under an if statement.

  Closes #1794

* New ``useless-return`` message when function or method ends with a "return" or
  "return None" statement and this is the only return statement in the body.

* Fix false positive ``inconsistent-return-statements`` message by
  avoiding useless exception inference if the exception is not handled.

  Closes #1794 (second part)

* Fix bad thread instantiation check when target function is provided in args.

  Closes #1840

* Fixed false positive when a numpy Attributes section follows a Parameters
  section

  Closes #1867

* Fix incorrect file path when file absolute path contains multiple ``path_strip_prefix`` strings.

  Closes #1120

* Fix false positive :ref:`undefined-variable` for lambda argument in class definitions

  Closes #1824

* Add of a new checker that warns the user if some messages are enabled or disabled
  by id instead of symbol.

  Closes #1599

* Suppress false-positive ``not-callable`` messages from certain
  staticmethod descriptors

  Closes #1699

* Fix indentation handling with tabs

  Closes #1148

* Fix false-positive ``bad-continuation`` error

  Closes #638

* Fix false positive :ref:`unused-variable` in lambda default arguments

  Closes #1921
  Closes #1552
  Closes #1099
  Closes #210

* Updated the default report format to include paths that can be clicked on in some terminals (e.g. iTerm).

* Fix inline def behavior with ``too-many-statements`` checker

  Closes #1978

* Fix ``KeyError`` raised when using docparams and NotImplementedError is documented.

  Closes #2102

* Fix :ref:`method-hidden`' raised when assigning to a property or data descriptor.

* Fix emitting ``useless-super-delegation`` when changing the default value of keyword arguments.

  Closes #2022

* Expand ignored-argument-names include starred arguments and keyword arguments

  Closes #2214

* Fix false-positive :ref:`undefined-variable` in nested lambda

  Closes #760

* Fix false-positive ``bad-whitespace`` message for typing annoatations
  with ellipses in them

  Close 1992

* Broke down "missing-docstrings" between "module", "class" and "function"

  For this to work we had to make multiple messages with the same old name
  possible.

  Closes #1164
