Changelog
### 2.2
```
=========================
Release date: 2018-11-25
* Consider ``range()`` objects for ``undefined-loop-variable`` leaking from iteration.
Close 2533
* ``deprecated-method`` can use the attribute name for identifying a deprecated method
Previously we were using the fully qualified name, which we still do, but the fully
qualified name for some ``unittest`` deprecated aliases leads to a generic
deprecation function. Instead on relying on that, we now also rely on the attribute
name, which should solve some false positives.
Close 1653
Close 1946
* Fix compatibility with changes to stdlib tokenizer.
* ``pylint`` is less eager to consume the whole line for pragmas
Close 2485
* Obtain the correct number of CPUs for virtualized or containerized environments.
Close 2519
* Change ``unbalanced-tuple-unpacking`` back to a warning.
It used to be a warning until a couple of years ago, after it was promoted to
an error. But the check might be suggesting the wrong thing in some cases,
for instance when checking against ``sys.argv`` which cannot be known at static
analysis time. Given it might rely on potential unknown data, it's best to
have it as a warning.
Close 2522
* Remove ``enumerate`` usage suggestion when defining ``__iter__`` (C0200)
Close 2477
* Emit ``too-many-starred-assignment`` only when the number of Starred nodes is per assignment elements
Close 2513
* `try-except-raise` checker now handles multilevel inheritance hirerachy for exceptions correctly.
Close 2484
* Add a new check, ``simplifiable-if-expression`` for expressions like ``True if cond else False``.
Close 2487
* ``too-few-public-methods`` is not reported for ``typing.NamedTuple``
Close 2459
* too-few-public-methods`` is not reported for dataclasses created with options.
Close 2488
* Remove wrong modules from 'bad-python3-import'.
Close 2453
* The ``json`` reporter prints an empty list when no messages are emitted
Close 2446
* Add a new check, ``duplicate-string-formatting-argument``
This new check is emitted whenever a duplicate string formatting argument
is found.
Close 497
* ``assignment-from-no-return`` is not emitted for coroutines.
Close 1715
* Report format string type mismatches.
* ``consider-using-ternary`` and ``simplified-boolean-expression`` no longer emit for sequence based checks
Close 2473
* Handle ``AstroidSyntaxError`` when trying to import a module.
Close 2313
* Allow ``__module__`` to be redefined at a class level. Close 2451
* ``pylint`` used to emit a ``unused-variable`` error if unused import was found in the function. Now instead of
``unused-variable``, ``unused-import`` is emitted.
Close 2421
* Handle asyncio.coroutine when looking for ``not-an-iterable`` check.
Close 996
* The ``locally-enabled`` check is gone.
Close 2442
* Infer decorated methods when looking for method-hidden
Close 2369
* Pick the latest value from the inferred values when looking for ``raising-non-exception``
Close 2431
* Extend the TYPE_CHECKING guard to TYPE_CHECKING name as well, not just the attribute
Close 2411
* Ignore import x.y.z as z cases for checker `useless-import-alias`.
Close 2309
* Fix false positive ``undefined-variable`` and ``used-before-assignment`` with nonlocal keyword usage.
Close 2049
* Stop ``protected-access`` exception for missing class attributes
* Don't emit `assignment-from-no-return` for decorated function nodes
Close 2385
* `unnecessary-pass` is now also emitted when a function or class contains only docstring and pass statement.
In Python, stubbed functions often have a body that contains just a single `pass` statement,
indicating that the function doesn't do anything. However, a stubbed function can also have just a
docstring, and function with a docstring and no body also does nothing.
Close 2208
* ``duplicate-argument-name`` is emitted for more than one duplicate argument per function
Close 1712
* Allow double indentation levels for more distinguishable indentations
Close 741
* Consider tuples in exception handler for ``try-except-raise``.
Close 2389
* Fix astroid.ClassDef check in checkers.utils.is_subclass_of
* Fix wildcard imports being ignored by the import checker
* Fix external/internal distinction being broken in the import graph
* Fix wildcard import check not skipping `__init__.py`
Close 2430
* Add new option to logging checker, ``logging_format_style``
* Fix --ignore-imports to understand multi-line imports
Close 1422
Close 2019
* Add a new check 'implicit-str-concat-in-sequence' to spot string concatenation inside lists, sets & tuples.
* ``literal-comparison`` is now emitted for 0 and 1 literals.
```
### 2.1.1
```
===========================
Release date: 2018-08-07
* fix pylint crash due to ``misplaced-format-function`` not correctly handling class attribute.
Close 2384
* Do not emit \*-builtin for Python 3 builtin checks when the builtin is used inside a try-except
Close PyCQA/pylint2228
* ``simplifiable-if-statement`` not emitted when dealing with subscripts
```
### 2.1
```
=========================
Release date: 2018-08-01
* `trailing-comma-tuple` gets emitted for ``yield`` statements as well.
Close 2363
* Get only the arguments of the scope function for `redefined-argument-from-local`
Close 2364
* Add a check `misplaced-format-function` which is emitted if format function is used on
non str object.
Close 2200
* `chain.from_iterable` no longer emits `dict-{}-not-iterating` when dealing with dict values and keys
* Demote the `try-except-raise` message from an error to a warning (E0705 -> W0706)
Close 2323
* Correctly handle the new name of the Python implementation of the `abc` module.
Close PyCQA/astroid2288
* Modules with `__getattr__` are exempted by default from `no-member`
There's no easy way to figure out if a module has a particular member when
the said module uses `__getattr__`, which is a new addition to Python 3.7.
Instead we assume the safe thing to do, in the same way we do for classes,
and skip those modules from checking.
Close 2331
* Fix a false positive `invalid name` message when method or attribute name is longer then 30 characters.
Close 2047
* Include the type of the next branch in `no-else-return`
Close 2295
* Fix inconsistent behaviour for bad-continuation on first line of file
Close 2281
* Fix not being able to disable certain messages on the last line through
the global disable option
Close 2278
* Don't emit `useless-return` when we have a single statement that is the return itself
We still want to be explicit when a function is supposed to return
an optional value; even though `pass` could still work, it's not explicit
enough and the function might look like it's missing an implementation.
Close 2300
* Fix false-positive undefined-variable for self referential class name in lamdbas
Close 704
* Don't crash when `pylint` is unable to infer the value of an argument to `next()`
Close 2316
* Don't emit `not-an-iterable` when dealing with async iterators.
But do emit it when using the usual iteration protocol against
async iterators.
Close 2311
* Can specify a default docstring type for when the check cannot guess the type
Close 1169
```
### 2.0
```
=========================
Release date: 2018-07-15
* `try-except-raise` should not be emitted if there are any parent exception class handlers.
Close 2284
* `trailing-comma-tuple` can be emitted for `return` statements as well.
Close 2269
* Fix a false positive ``inconsistent-return-statements`` message when exception is raised
inside an else statement.
Close 1782
* `ImportFrom` nodes correctly use the full name for the import sorting checks.
Close 2181
* [].extend and similar builtin operations don't emit `dict-*-not-iterating` with the Python 3 porting checker
Close 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
Close 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".
Close 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
Close 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
Close 2172
* `mcs` as the first parameter of metaclass's `__new__` method was replaced by `cls`
Close 2028
* `assignment-from-no-return` considers methods as well.
Close 2081
* Support typing.TYPE_CHECKING for *unused-import* errors
Close 1948
* Inferred classes at a function level no longer emit `invalid-name`
when they don't respect the variable regular expression
Close 1049
* Added basic support for postponed evaluation of function annotations.
Close 2069
* Fix a bug with `missing-kwoa` and variadics parameters
Close 1111
* `simplifiable-if-statement` takes in account only when assigning to same targets
Close 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
Close 1950
* Fix false-positive ``bad-continuation`` for with statements
Close 461
* Don't warn about `stop-iteration-return` when using `next()` over `itertools.count`
Close 2158
* Add a check `consider-using-get` for unidiomatic usage of value/default-retrieval
for a key from a dictionary
Close 2076
* 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 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 'useless-import-alias'.
Close 2052
* Add `comparison-with-callable` to warn for comparison with bare callable, without calling it.
Close 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.
Close 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.
Close 2042
* Warn if the first argument of an instance/ class method gets assigned
Close 977
* New check `comparison-with-itself` to check comparison between same value.
Close 2051
* Add a new warning, 'logging-fstring-interpolation', emitted when f-string
is used within logging function calls.
Close 1998
* Don't show 'useless-super-delegation' if the subclass method has different type annotations.
Close 1923
* Add `unhashable-dict-key` check.
Closes 586
* Don't warn that a global variable is unused if it is defined by an import
Close 1453
* Skip wildcard import check for `__init__.py`.
Close 2026
* The Python 3 porting mode can now run with Python 3 as well.
* `too-few-public-methods` is not emitted for dataclasses.
Close 1793
* New verbose mode option, enabled with `--verbose` command line flag, to
display of extra non-checker-related output. It is disabled by default.
Close 1863
* `undefined-loop-variable` takes in consideration non-empty iterred objects before emitting
Close 2039
* Add support for numpydoc optional return value names.
Close 2030
* `singleton-comparison` accounts for negative checks
Close 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.
Close 1977
* defaultdict and subclasses of dict are now handled for dict-iter-* checks
Close 2005
* `logging-format-interpolation` also emits when f-strings are used instead of % syntax.
Close 1788
* Don't trigger misplaced-bare-raise when the raise is in a finally clause
Close 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.
Close 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.
Close 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)
Close 1952
* Add a check `consider-swap-variables` for swapping variables with tuple unpacking
Close 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`
Close 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
Close 1831
* Fix stop-iteration-return false positive when next builtin has a
default value in a generator
Close 1830
* Fix emission of false positive ``no-member`` message for class with "private" attributes whose name is mangled.
Close 1643
* Fixed a crash which occurred when `Uninferable` wasn't properly handled in `stop-iteration-return`
Close 1779
* Use the proper node to get the name for redefined functions (1792)
Close 1774
* Don't crash when encountering bare raises while checking inconsistent returns
Close 1773
* Fix a false positive ``inconsistent-return-statements`` message when if statement is inside try/except.
Close 1770
* Fix a false positive ``inconsistent-return-statements`` message when while loop are used.
Close 1772
* Correct column number for whitespace conventions.
Previously the column was stuck at 0
Close 1649
* Fix ``unused-argument`` false positives with overshadowed variable in
dictionary comprehension.
Close 1731
* Fix false positive ``inconsistent-return-statements`` message when never
returning functions are used (i.e sys.exit for example).
Close 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.
Close 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.
Close 1794 (second part)
* Fix bad thread instantiation check when target function is provided in args.
Close 1840
* Fixed false positive when a numpy Attributes section follows a Parameters
section
Close 1867
* Fix incorrect file path when file absolute path contains multiple ``path_strip_prefix`` strings.
Close 1120
* Fix false positive undefined-variable for lambda argument in class definitions
Close 1824
* Add of a new checker that warns the user if some messages are enabled or disabled
by id instead of symbol.
Close 1599
* Suppress false-positive ``not-callable`` messages from certain
staticmethod descriptors
Close 1699
* Fix indentation handling with tabs
Close 1148
* Fix false-positive ``bad-continuation`` error
Close 638
* Fix false positive unused-variable in lambda default arguments
Close 1921
Close 1552
Close 1099
Close 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
Close 1978
* Fix `KeyError` raised when using docparams and NotImplementedError is documented.
Close 2102
* Fix 'method-hidden' raised when assigning to a property or data descriptor.
* Fix emitting ``useless-super-delegation`` when changing the default value of keyword arguments.
Close 2022
* Expand ignored-argument-names include starred arguments and keyword arguments
Close 2214
* Fix false-postive undefined-variable in nested lambda
Close 760
* Fix false-positive ``bad-whitespace`` message for typing annoatations
with ellipses in them
Close 1992
```
### 1.9
```
=========================
Release date: 2018-05-15
* Added two new Python 3 porting checks, `exception-escape` and `comprehension-escape`
These two are emitted whenever pylint detects that a variable defined in the
said blocks is used outside of the given block. On Python 3 these values are deleted.
* Added a new `deprecated-sys-function`, emitted when accessing removed sys members.
* Added `xreadlines-attribute`, emitted when the `xreadlines()` attribute is accessed.
* The Python 3 porting mode can now run with Python 3 as well.
* docparams extension allows abstract methods to document what overriding
implementations should return, and to raise NotImplementedError without
documenting it.
Closes 2044
* Special methods do not count towards `too-few-methods`,
and are considered part of the public API.
* Enum classes do not trigger `too-few-methods`
Close 605
* Added a new Python 2/3 check for accessing `operator.div`, which is removed in Python 3
Close 1936
* Added a new Python 2/3 check for accessing removed urllib functions
Close 1997
```
### 1.8.1
```
===========================
Release date: 2017-12-15
* Wrong version number in __pkginfo__.
```
### 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.
Close 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)
Close 1713
* Fixing u'' string in superfluous-parens message
Close 1420
* `abstract-class-instantiated` is now emitted for all inference paths.
Close 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
Close 1176
* Using the -j flag won't start more child linters than needed.
Contributed by Roman Ivanov in 1614
* Fix a false positive with bad-python3-import on relative imports
Close 1608
* Added a new Python 3 check, ``non-ascii-bytes-literals``
Close 1545
* Added a couple of new Python 3 checks for accessing dict methods in non-iterable context
* Protocol checks (not-a-mapping, not-an-iterable and co.) aren't emitted on classes with dynamic getattr
* Added a new warning, '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.
Close 1327
* In non-quiet mode, absolute path of used config file is logged to
standard error.
Close 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 ``AttribueError`` related to module or reporter class being not found.
Close 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.
Close 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.
Close 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
Close 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.
Close 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.
Close 1466
* Fix a false positive ``useless-super-delegation`` message when
parameters default values are different from those used in the base class.
Close 1085
* Disabling 'wrong-import-order', 'wrong-import-position', or
'ungrouped-imports' for a single line now prevents that line from
triggering violations on subsequent lines.
Close 1336
* Added a new Python check for inconsistent return statements inside method or function.
Close 1267
* Fix ``superfluous-parens`` false positive related to handling logical statements
involving ``in`` operator.
Close 574
* ``function-redefined`` message is no longer emitted for functions and
methods which names matches dummy variable name regular expression.
Close 1369
* Fix ``missing-param-doc`` and ``missing-type-doc`` false positives when
mixing ``Args`` and ``Keyword Args`` in Google docstring.
Close 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.
Close 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.
Close 1702
* Fix ``pylint disable=fixme`` directives ignored for comments following the
last statement in a file.
Close 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.
Close 1741
* If the rcfile specified on the command line doesn't exist, then an
IOError exception is raised.
Close 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.
Close 1742
```
Links
- PyPI: https://pypi.org/project/pylint
- Changelog: https://pyup.io/changelogs/pylint/
- Repo: https://github.com/PyCQA/pylint
Coverage remained the same at 100.0% when pulling 487a794742fdf954b0d46c1d210d972119b9f38c on pyup-update-pylint-1.7.2-to-2.2.1 into 666facaf6f5a6f7cfc9ade8be6c62a4e39ac9c3f on master.
This PR updates pylint from 1.7.2 to 2.2.1.
Changelog
### 2.2 ``` ========================= Release date: 2018-11-25 * Consider ``range()`` objects for ``undefined-loop-variable`` leaking from iteration. Close 2533 * ``deprecated-method`` can use the attribute name for identifying a deprecated method Previously we were using the fully qualified name, which we still do, but the fully qualified name for some ``unittest`` deprecated aliases leads to a generic deprecation function. Instead on relying on that, we now also rely on the attribute name, which should solve some false positives. Close 1653 Close 1946 * Fix compatibility with changes to stdlib tokenizer. * ``pylint`` is less eager to consume the whole line for pragmas Close 2485 * Obtain the correct number of CPUs for virtualized or containerized environments. Close 2519 * Change ``unbalanced-tuple-unpacking`` back to a warning. It used to be a warning until a couple of years ago, after it was promoted to an error. But the check might be suggesting the wrong thing in some cases, for instance when checking against ``sys.argv`` which cannot be known at static analysis time. Given it might rely on potential unknown data, it's best to have it as a warning. Close 2522 * Remove ``enumerate`` usage suggestion when defining ``__iter__`` (C0200) Close 2477 * Emit ``too-many-starred-assignment`` only when the number of Starred nodes is per assignment elements Close 2513 * `try-except-raise` checker now handles multilevel inheritance hirerachy for exceptions correctly. Close 2484 * Add a new check, ``simplifiable-if-expression`` for expressions like ``True if cond else False``. Close 2487 * ``too-few-public-methods`` is not reported for ``typing.NamedTuple`` Close 2459 * too-few-public-methods`` is not reported for dataclasses created with options. Close 2488 * Remove wrong modules from 'bad-python3-import'. Close 2453 * The ``json`` reporter prints an empty list when no messages are emitted Close 2446 * Add a new check, ``duplicate-string-formatting-argument`` This new check is emitted whenever a duplicate string formatting argument is found. Close 497 * ``assignment-from-no-return`` is not emitted for coroutines. Close 1715 * Report format string type mismatches. * ``consider-using-ternary`` and ``simplified-boolean-expression`` no longer emit for sequence based checks Close 2473 * Handle ``AstroidSyntaxError`` when trying to import a module. Close 2313 * Allow ``__module__`` to be redefined at a class level. Close 2451 * ``pylint`` used to emit a ``unused-variable`` error if unused import was found in the function. Now instead of ``unused-variable``, ``unused-import`` is emitted. Close 2421 * Handle asyncio.coroutine when looking for ``not-an-iterable`` check. Close 996 * The ``locally-enabled`` check is gone. Close 2442 * Infer decorated methods when looking for method-hidden Close 2369 * Pick the latest value from the inferred values when looking for ``raising-non-exception`` Close 2431 * Extend the TYPE_CHECKING guard to TYPE_CHECKING name as well, not just the attribute Close 2411 * Ignore import x.y.z as z cases for checker `useless-import-alias`. Close 2309 * Fix false positive ``undefined-variable`` and ``used-before-assignment`` with nonlocal keyword usage. Close 2049 * Stop ``protected-access`` exception for missing class attributes * Don't emit `assignment-from-no-return` for decorated function nodes Close 2385 * `unnecessary-pass` is now also emitted when a function or class contains only docstring and pass statement. In Python, stubbed functions often have a body that contains just a single `pass` statement, indicating that the function doesn't do anything. However, a stubbed function can also have just a docstring, and function with a docstring and no body also does nothing. Close 2208 * ``duplicate-argument-name`` is emitted for more than one duplicate argument per function Close 1712 * Allow double indentation levels for more distinguishable indentations Close 741 * Consider tuples in exception handler for ``try-except-raise``. Close 2389 * Fix astroid.ClassDef check in checkers.utils.is_subclass_of * Fix wildcard imports being ignored by the import checker * Fix external/internal distinction being broken in the import graph * Fix wildcard import check not skipping `__init__.py` Close 2430 * Add new option to logging checker, ``logging_format_style`` * Fix --ignore-imports to understand multi-line imports Close 1422 Close 2019 * Add a new check 'implicit-str-concat-in-sequence' to spot string concatenation inside lists, sets & tuples. * ``literal-comparison`` is now emitted for 0 and 1 literals. ``` ### 2.1.1 ``` =========================== Release date: 2018-08-07 * fix pylint crash due to ``misplaced-format-function`` not correctly handling class attribute. Close 2384 * Do not emit \*-builtin for Python 3 builtin checks when the builtin is used inside a try-except Close PyCQA/pylint2228 * ``simplifiable-if-statement`` not emitted when dealing with subscripts ``` ### 2.1 ``` ========================= Release date: 2018-08-01 * `trailing-comma-tuple` gets emitted for ``yield`` statements as well. Close 2363 * Get only the arguments of the scope function for `redefined-argument-from-local` Close 2364 * Add a check `misplaced-format-function` which is emitted if format function is used on non str object. Close 2200 * `chain.from_iterable` no longer emits `dict-{}-not-iterating` when dealing with dict values and keys * Demote the `try-except-raise` message from an error to a warning (E0705 -> W0706) Close 2323 * Correctly handle the new name of the Python implementation of the `abc` module. Close PyCQA/astroid2288 * Modules with `__getattr__` are exempted by default from `no-member` There's no easy way to figure out if a module has a particular member when the said module uses `__getattr__`, which is a new addition to Python 3.7. Instead we assume the safe thing to do, in the same way we do for classes, and skip those modules from checking. Close 2331 * Fix a false positive `invalid name` message when method or attribute name is longer then 30 characters. Close 2047 * Include the type of the next branch in `no-else-return` Close 2295 * Fix inconsistent behaviour for bad-continuation on first line of file Close 2281 * Fix not being able to disable certain messages on the last line through the global disable option Close 2278 * Don't emit `useless-return` when we have a single statement that is the return itself We still want to be explicit when a function is supposed to return an optional value; even though `pass` could still work, it's not explicit enough and the function might look like it's missing an implementation. Close 2300 * Fix false-positive undefined-variable for self referential class name in lamdbas Close 704 * Don't crash when `pylint` is unable to infer the value of an argument to `next()` Close 2316 * Don't emit `not-an-iterable` when dealing with async iterators. But do emit it when using the usual iteration protocol against async iterators. Close 2311 * Can specify a default docstring type for when the check cannot guess the type Close 1169 ``` ### 2.0 ``` ========================= Release date: 2018-07-15 * `try-except-raise` should not be emitted if there are any parent exception class handlers. Close 2284 * `trailing-comma-tuple` can be emitted for `return` statements as well. Close 2269 * Fix a false positive ``inconsistent-return-statements`` message when exception is raised inside an else statement. Close 1782 * `ImportFrom` nodes correctly use the full name for the import sorting checks. Close 2181 * [].extend and similar builtin operations don't emit `dict-*-not-iterating` with the Python 3 porting checker Close 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 Close 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". Close 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 Close 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 Close 2172 * `mcs` as the first parameter of metaclass's `__new__` method was replaced by `cls` Close 2028 * `assignment-from-no-return` considers methods as well. Close 2081 * Support typing.TYPE_CHECKING for *unused-import* errors Close 1948 * Inferred classes at a function level no longer emit `invalid-name` when they don't respect the variable regular expression Close 1049 * Added basic support for postponed evaluation of function annotations. Close 2069 * Fix a bug with `missing-kwoa` and variadics parameters Close 1111 * `simplifiable-if-statement` takes in account only when assigning to same targets Close 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 Close 1950 * Fix false-positive ``bad-continuation`` for with statements Close 461 * Don't warn about `stop-iteration-return` when using `next()` over `itertools.count` Close 2158 * Add a check `consider-using-get` for unidiomatic usage of value/default-retrieval for a key from a dictionary Close 2076 * 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 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 'useless-import-alias'. Close 2052 * Add `comparison-with-callable` to warn for comparison with bare callable, without calling it. Close 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. Close 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. Close 2042 * Warn if the first argument of an instance/ class method gets assigned Close 977 * New check `comparison-with-itself` to check comparison between same value. Close 2051 * Add a new warning, 'logging-fstring-interpolation', emitted when f-string is used within logging function calls. Close 1998 * Don't show 'useless-super-delegation' if the subclass method has different type annotations. Close 1923 * Add `unhashable-dict-key` check. Closes 586 * Don't warn that a global variable is unused if it is defined by an import Close 1453 * Skip wildcard import check for `__init__.py`. Close 2026 * The Python 3 porting mode can now run with Python 3 as well. * `too-few-public-methods` is not emitted for dataclasses. Close 1793 * New verbose mode option, enabled with `--verbose` command line flag, to display of extra non-checker-related output. It is disabled by default. Close 1863 * `undefined-loop-variable` takes in consideration non-empty iterred objects before emitting Close 2039 * Add support for numpydoc optional return value names. Close 2030 * `singleton-comparison` accounts for negative checks Close 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. Close 1977 * defaultdict and subclasses of dict are now handled for dict-iter-* checks Close 2005 * `logging-format-interpolation` also emits when f-strings are used instead of % syntax. Close 1788 * Don't trigger misplaced-bare-raise when the raise is in a finally clause Close 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. Close 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. Close 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) Close 1952 * Add a check `consider-swap-variables` for swapping variables with tuple unpacking Close 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` Close 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 Close 1831 * Fix stop-iteration-return false positive when next builtin has a default value in a generator Close 1830 * Fix emission of false positive ``no-member`` message for class with "private" attributes whose name is mangled. Close 1643 * Fixed a crash which occurred when `Uninferable` wasn't properly handled in `stop-iteration-return` Close 1779 * Use the proper node to get the name for redefined functions (1792) Close 1774 * Don't crash when encountering bare raises while checking inconsistent returns Close 1773 * Fix a false positive ``inconsistent-return-statements`` message when if statement is inside try/except. Close 1770 * Fix a false positive ``inconsistent-return-statements`` message when while loop are used. Close 1772 * Correct column number for whitespace conventions. Previously the column was stuck at 0 Close 1649 * Fix ``unused-argument`` false positives with overshadowed variable in dictionary comprehension. Close 1731 * Fix false positive ``inconsistent-return-statements`` message when never returning functions are used (i.e sys.exit for example). Close 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. Close 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. Close 1794 (second part) * Fix bad thread instantiation check when target function is provided in args. Close 1840 * Fixed false positive when a numpy Attributes section follows a Parameters section Close 1867 * Fix incorrect file path when file absolute path contains multiple ``path_strip_prefix`` strings. Close 1120 * Fix false positive undefined-variable for lambda argument in class definitions Close 1824 * Add of a new checker that warns the user if some messages are enabled or disabled by id instead of symbol. Close 1599 * Suppress false-positive ``not-callable`` messages from certain staticmethod descriptors Close 1699 * Fix indentation handling with tabs Close 1148 * Fix false-positive ``bad-continuation`` error Close 638 * Fix false positive unused-variable in lambda default arguments Close 1921 Close 1552 Close 1099 Close 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 Close 1978 * Fix `KeyError` raised when using docparams and NotImplementedError is documented. Close 2102 * Fix 'method-hidden' raised when assigning to a property or data descriptor. * Fix emitting ``useless-super-delegation`` when changing the default value of keyword arguments. Close 2022 * Expand ignored-argument-names include starred arguments and keyword arguments Close 2214 * Fix false-postive undefined-variable in nested lambda Close 760 * Fix false-positive ``bad-whitespace`` message for typing annoatations with ellipses in them Close 1992 ``` ### 1.9 ``` ========================= Release date: 2018-05-15 * Added two new Python 3 porting checks, `exception-escape` and `comprehension-escape` These two are emitted whenever pylint detects that a variable defined in the said blocks is used outside of the given block. On Python 3 these values are deleted. * Added a new `deprecated-sys-function`, emitted when accessing removed sys members. * Added `xreadlines-attribute`, emitted when the `xreadlines()` attribute is accessed. * The Python 3 porting mode can now run with Python 3 as well. * docparams extension allows abstract methods to document what overriding implementations should return, and to raise NotImplementedError without documenting it. Closes 2044 * Special methods do not count towards `too-few-methods`, and are considered part of the public API. * Enum classes do not trigger `too-few-methods` Close 605 * Added a new Python 2/3 check for accessing `operator.div`, which is removed in Python 3 Close 1936 * Added a new Python 2/3 check for accessing removed urllib functions Close 1997 ``` ### 1.8.1 ``` =========================== Release date: 2017-12-15 * Wrong version number in __pkginfo__. ``` ### 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. Close 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) Close 1713 * Fixing u'' string in superfluous-parens message Close 1420 * `abstract-class-instantiated` is now emitted for all inference paths. Close 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 Close 1176 * Using the -j flag won't start more child linters than needed. Contributed by Roman Ivanov in 1614 * Fix a false positive with bad-python3-import on relative imports Close 1608 * Added a new Python 3 check, ``non-ascii-bytes-literals`` Close 1545 * Added a couple of new Python 3 checks for accessing dict methods in non-iterable context * Protocol checks (not-a-mapping, not-an-iterable and co.) aren't emitted on classes with dynamic getattr * Added a new warning, '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. Close 1327 * In non-quiet mode, absolute path of used config file is logged to standard error. Close 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 ``AttribueError`` related to module or reporter class being not found. Close 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. Close 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. Close 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 Close 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. Close 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. Close 1466 * Fix a false positive ``useless-super-delegation`` message when parameters default values are different from those used in the base class. Close 1085 * Disabling 'wrong-import-order', 'wrong-import-position', or 'ungrouped-imports' for a single line now prevents that line from triggering violations on subsequent lines. Close 1336 * Added a new Python check for inconsistent return statements inside method or function. Close 1267 * Fix ``superfluous-parens`` false positive related to handling logical statements involving ``in`` operator. Close 574 * ``function-redefined`` message is no longer emitted for functions and methods which names matches dummy variable name regular expression. Close 1369 * Fix ``missing-param-doc`` and ``missing-type-doc`` false positives when mixing ``Args`` and ``Keyword Args`` in Google docstring. Close 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. Close 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. Close 1702 * Fix ``pylint disable=fixme`` directives ignored for comments following the last statement in a file. Close 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. Close 1741 * If the rcfile specified on the command line doesn't exist, then an IOError exception is raised. Close 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. Close 1742 ```Links
- PyPI: https://pypi.org/project/pylint - Changelog: https://pyup.io/changelogs/pylint/ - Repo: https://github.com/PyCQA/pylint