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

What's New in Pylint 1.8.1?
---------------------------
Release date: 2017-12-15

* Wrong version number in __pkginfo__.


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

Release date: 2017-12-15

* Respect disable=... in config file when running with --py3k.

* New warning ``shallow-copy-environ`` added

  Shallow copy of os.environ doesn't work as people may expect. os.environ
  is not a dict object but rather a proxy object, so any changes made
  on copy may have unexpected effects on os.environ

  Instead of copy.copy(os.environ) method os.environ.copy() should be
  used.

  See https://bugs.python.org/issue15373 for details.

  Closes #1301

* Do not display no-absolute-import warning multiple times per file.

* ``trailing-comma-tuple`` refactor check now extends to assignment with
   more than one element (such as lists)

  Closes #1713

* Fixing u'' string in :ref:`superfluous-parens` message

  Closes #1420

* ``abstract-class-instantiated`` is now emitted for all inference paths.

  Closes #1673

* Add set of predefined naming style to ease configuration of checking
  naming conventions.

  Closes #1013

* Added a new check, ``keyword-arg-before-vararg``

  This is emitted for function definitions
  in which keyword arguments are placed before variable
  positional arguments (\*args).

  This may lead to args list getting modified if keyword argument's value
  is not provided in the function call assuming it will take default value
  provided in the definition.

* The ``invalid-name`` check contains the name of the template that caused the failure

  Closes #1176

* Using the -j flag won't start more child linters than needed.

  Closes #1614

* Fix a false positive with bad-python3-import on relative imports

  Closes #1608

* Added a new Python 3 check, ``non-ascii-bytes-literals``

  Closes #1545

* Added a couple of new Python 3 checks for accessing dict methods in non-iterable context

* Protocol checks (:ref:`not-a-mapping`, :ref:`not-an-iterable` and co.) aren't emitted on classes with dynamic getattr

* Added a new warning, :ref:`bad-thread-instantiation`'

  This message is emitted when the threading.Thread class does not
  receive the target argument, but receives just one argument, which
  is by default the group parameter.

  Closes #1327

* In non-quiet mode, absolute path of used config file is logged to
  standard error.

  Closes #1519

* Raise meaningful exception for invalid reporter class being selected

  When unknown reporter class will be selected as Pylint reporter,
  meaningful error message would be raised instead of bare ``ImportError``
  or ``AttributeError`` related to module or reporter class being not found.

  Closes #1388

* Added a new Python 3 check for accessing removed functions from itertools
  like ``izip`` or ``ifilterfalse``

* Added a new Python 3 check for accessing removed fields from the types
  module like ``UnicodeType`` or ``XRangeType``

* Added a new Python 3 check for declaring a method ``next`` that would have
  been treated as an iterator in Python 2 but a normal function in Python 3.

* Added a new key-value pair in json output. The key is ``message-id``
  and the value is the message id.

  Closes #1512

* Added a new Python 3.0 check for raising a StopIteration inside a generator.
  The check about raising a StopIteration inside a generator is also valid if the exception
  raised inherit from StopIteration.

  Closes #1385

* Added a new warning, ``raising-format-tuple``, to detect multi-argument
  exception construction instead of message string formatting.

* Added a new check for method of logging module that concatenate string via + operator

  Closes #1479

* Added parameter for limiting number of suggestions in spellchecking checkers

* Fix a corner-case in ``consider-using-ternary`` checker.

  When object ``A`` used in  ``X and A or B`` was falsy in boolean context,
  Pylint incorrectly emitted non-equivalent ternary-based suggestion.
  After a change message is correctly not emitted for this case.

  Closes #1559

* Added ``suggestion-mode`` configuration flag. When flag is enabled, informational
  message is emitted instead of cryptic error message for attributes accessed on
  c-extensions.

  Closes #1466

* Fix a false positive ``useless-super-delegation`` message when
  parameters default values are different from those used in the base class.

  Closes #1085

* Disabling :ref:`wrong-import-order`', :ref:`wrong-import-position`', or
  :ref:`ungrouped-imports`' for a single line now prevents that line from
  triggering violations on subsequent lines.

  Closes #1336

* Added a new Python check for inconsistent return statements inside method or function.

  Closes #1267

* Fix ``superfluous-parens`` false positive related to handling logical statements
  involving ``in`` operator.

  Closes #574

* ``function-redefined`` message is no longer emitted for functions and
  methods which names matches dummy variable name regular expression.

  Closes #1369

* Fix ``missing-param-doc`` and ``missing-type-doc`` false positives when
  mixing ``Args`` and ``Keyword Args`` in Google docstring.

  Closes #1409

 * Fix ``missing-docstring`` false negatives when modules, classes, or methods
   consist of compound statements that exceed the ``docstring-min-length``

* Fix ``useless-else-on-loop`` false positives when break statements are
  deeply nested inside loop.

  Closes #1661

* Fix no ``wrong-import-order`` message emitted on ordering of first and third party
  libraries. With this fix, pylint distinguishes third and first party
  modules when checking import order.

  Closes #1702

* Fix ``pylint disable=fixme`` directives ignored for comments following the
  last statement in a file.

  Closes #1681

* Fix ``line-too-long`` message deactivated by wrong disable directive.
  The directive ``disable=fixme`` doesn't deactivate anymore the emission
  of ``line-too-long`` message for long commented lines.

  Closes #1741

* If the rcfile specified on the command line doesn't exist, then an
  IOError exception is raised.

  Closes #1747

* Fix the wrong scope of the ``disable=`` directive after a commented line.
  For example when a ``disable=line-too-long`` directive is at the end of
  a long commented line, it no longer disables the emission of ``line-too-long``
  message for lines that follow.

  Closes #1742
