What's New in Pylint 2.2
************************

Release:
   2.2

Date:
   2018-11-25


Summary -- Release highlights
=============================


New checkers
============

* String checker now reports format string type mismatches.

* "duplicate-string-formatting-argument" was added for detecting
  duplicate string formatting arguments that should be passed instead
  as named arguments.

* "logging-format-style" is a new option for the logging checker for
  usage of str.format() style format strings in calls to loggers.

  It accepts two options: "--logging-format-style=old" for using *%*
  style formatting, which is the assumed default, and "--logging-
  format-style=new" for using *{}* style formatting.

* "implicit-str-concat-in-sequence" detects string concatenation
  inside lists, sets & tuples.

  Example of code that would generate such warning:

     woops = ('a', 'b' 'c')


Other Changes
=============

* "try-except-raise" checker now handles multilevel inheritance
  hirerachy for exceptions correctly.

  Close #2484

* Ignore import x.y.z as z cases for checker "useless-import-alias".

* "unnecessary-pass" is now also emitted when a function or class
  contains only docstring and pass statement, in which case, docstring
  is enough for empty definition.

* Fix false positive "undefined-variable" and "used-before-assignment"
  with nonlocal keyword usage.

* Fix exceptions being raised when one of the params is not a ClassDef
  for "checkers.utils.is_subclass_of()".

* "pylint" now picks the latest value from the inferred values of the
  exception that gets raised, when looking for "raising-non-
  exception". This helps when reusing a variable name for multiple
  types, since "pylint" was picking just the first inferred value,
  leading to spurious false positives.

  Close #2431

* "pylint" used to emit a "not-an-iterable" error when looking at
  coroutines built with "asyncio.coroutine". This is no longer the
  case as we handle coroutines explicitly.

  Close #996

* "pylint" used to emit an "unused-variable" error if unused import
  was found in the function. Now instead of "unused-variable",
  "unused-import" is emitted.

  Close #2421
