What's New In Pylint 1.4#

What's New in Pylint 1.4.3?#

Release date: 2015-03-14

  • Remove three warnings: star-args, abstract-class-little-used, abstract-class-not-used. These warnings don't add any real value and they don't imply errors or problems in the code.

  • Added a new option for controlling the peephole optimizer in astroid. The option --optimize-ast will control the peephole optimizer, which is used to optimize a couple of AST subtrees. The current problem solved by the peephole optimizer is when multiple joined strings, with the addition operator, are encountered. If the numbers of such strings is high enough, Pylint will then fail with a maximum recursion depth exceeded error, due to its visitor architecture. The peephole just transforms such calls, if it can, into the final resulting string and this exhibit a problem, because the visit_binop method stops being called (in the optimized AST it will be a Const node).

What's New in Pylint 1.4.2?#

Release date: 2015-03-11

  • Don't require a docstring for empty modules.

    Closes #261

  • Fix a false positive with too-few-format-args string warning, emitted when the string format contained a normal positional argument ('{0}'), mixed with a positional argument which did an attribute access ('{0.__class__}').

    Closes #463

  • Take in account all the methods from the ancestors when checking for too-few-public-methods.

    Closes #471

  • Catch enchant errors and emit 'invalid-characters-in-docstring' when checking for spelling errors.

    Closes #469

  • Use all the inferred statements for the super-init-not-called check.

    Closes #389

  • Add a new warning, 'unichr-builtin', emitted by the Python 3 porting checker, when the unichr builtin is found.

    Closes #472

  • Add a new warning, 'intern-builtin', emitted by the Python 3 porting checker, when the intern builtin is found.

    Closes #473

  • Add support for editable installations.

  • The HTML output accepts the --msg-template option. Patch by Dan Goldsmith.

  • Add 'map-builtin-not-iterating' (replacing 'implicit-map-evaluation'), 'zip-builtin-not-iterating', 'range-builtin-not-iterating', and 'filter-builtin-not-iterating' which are emitted by --py3k when the appropriate built-in is not used in an iterating context (semantics taken from 2to3).

  • Add a new warning, 'unidiomatic-typecheck', emitted when an explicit typecheck uses type() instead of isinstance(). For example, type(x) == Y instead of isinstance(x, Y). Patch by Chris Rebert.

    Closes #299

  • Add support for combining the Python 3 checker mode with the --jobs flag (--py3k and --jobs).

    Closes #467

  • Add a new warning for the Python 3 porting checker, 'using-cmp-argument', emitted when the cmp argument for the list.sort or sorted builtin is encountered.

  • Make the --py3k flag commutative with the -E flag. Also, this patch fixes the leaks of error messages from the Python 3 checker when the errors mode was activated.

    Closes #437

What's New in Pylint 1.4.1?#

Release date: 2015-01-16

  • Look only in the current function's scope for bad-super-call.

    Closes #403

  • Check the return of properties when checking for not-callable.

    Closes #406

  • Warn about using the input() or round() built-ins for Python 3.

    Closes #411

  • Proper abstract method lookup while checking for abstract-class-instantiated.

    Closes #401

  • Use a mro traversal for finding abstract methods.

    Closes #415

  • Fix a false positive with catching-non-exception and tuples of exceptions.

  • Fix a false negative with raising-non-exception, when the raise used an uninferrable exception context.

  • Fix a false positive on Python 2 for raising-bad-type, when raising tuples in the form 'raise (ZeroDivisionError, None)'.

  • Fix a false positive with invalid-slots-objects, where the slot entry was a unicode string on Python 2.

    Closes #421

  • Add a new warning, 'redundant-unittest-assert', emitted when using unittest's methods assertTrue and assertFalse with constant value as argument. Patch by Vlad Temian.

  • Add a new JSON reporter, usable through -f flag.

  • Add the method names for the 'signature-differs' and 'argument-differs' warnings.

    Closes #433

  • Don't compile test files when installing.

  • Fix a crash which occurred when using multiple jobs and the files given as argument didn't exist at all.

What's New in Pylint 1.4.0?#

Release date: 2014-11-23

  • Added new options for controlling the loading of C extensions. By default, only C extensions from the stdlib will be loaded into the active Python interpreter for inspection, because they can run arbitrary code on import. The option --extension-pkg-whitelist can be used to specify modules or packages that are safe to load.

  • Change default max-line-length to 100 rather than 80

  • Drop BaseRawChecker class which were only there for backward compatibility for a while now

  • Don't try to analyze string formatting with objects coming from function arguments.

    Closes #373

  • Port source code to be Python 2/3 compatible. This drops the need for 2to3, but does drop support for Python 2.5.

  • Each message now comes with a confidence level attached, and can be filtered base on this level. This allows to filter out all messages that were emitted even though an inference failure happened during checking.

  • Improved presenting unused-import message.

    Closes #293

  • Add new checker for finding spelling errors. New messages: wrong-spelling-in-comment, wrong-spelling-in-docstring. New options: spelling-dict, spelling-ignore-words.

  • Add new '-j' option for running checks in sub-processes.

  • Added new checks for line endings if they are mixed (LF vs CRLF) or if they are not as expected. New messages: mixed-line-endings, unexpected-line-ending-format. New option: expected-line-ending-format.

  • 'dangerous-default-value' no longer evaluates the value of the arguments, which could result in long error messages or sensitive data being leaked.

    Closes #282

  • Fix a false positive with string formatting checker, when encountering a string which uses only position-based arguments.

    Closes #285

  • Fix a false positive with string formatting checker, when using keyword argument packing.

    Closes #288

  • Proper handle class level scope for lambdas.

  • Handle 'too-few-format-args' or 'too-many-format-args' for format strings with both named and positional fields.

    Closes #286

  • Analyze only strings by the string format checker.

    Closes #287

  • Properly handle nested format string fields.

    Closes #294

  • Don't emit 'attribute-defined-outside-init' if the attribute was set by a function call in a defining method.

    Closes #192

  • Properly handle unicode format strings for Python 2.

    Closes #296

  • Don't emit 'import-error' if an import was protected by a try-except, which excepted ImportError.

  • Fix an 'unused-import' false positive, when the error was emitted for all the members imported with 'from import' form.

    Closes #304

  • Don't emit 'invalid-name' when assigning a name in an ImportError handler.

    Closes #302

  • Don't count branches from nested functions.

  • Fix a false positive with 'too-few-format-args', when the format strings contains duplicate manual position arguments.

    Closes #310

  • fixme regex handles comments without spaces after the hash.

    Closes #311

  • Don't emit 'unused-import' when a special object is imported (__all__, __doc__ etc.).

    Closes #309

  • Look in the metaclass, if defined, for members not found in the current class.

    Closes #306

  • Don't emit 'protected-access' if the attribute is accessed using a property defined at the class level.

  • Detect calls of the parent's __init__, through a binded super() call.

  • Check that a class has an explicitly defined metaclass before emitting 'old-style-class' for Python 2.

  • Emit 'catching-non-exception' for non-class nodes.

    Closes #303

  • Order of reporting is consistent.

  • Add a new warning, 'boolean-datetime', emitted when an instance of 'datetime.time' is used in a boolean context.

    Closes #239

  • Fix a crash which occurred while checking for 'method-hidden', when the parent frame was something different than a function.

  • Generate html output for missing files.

    Closes #320

  • Fix a false positive with 'too-many-format-args', when the format string contains mixed attribute access arguments and manual fields.

    Closes #322

  • Extend the cases where 'undefined-variable' and 'used-before-assignment' can be detected.

    Closes #291

  • Add support for customising callback identifiers, by adding a new '--callbacks' command line option.

    Closes #326

  • Add a new warning, 'logging-format-interpolation', emitted when .format() string interpolation is used within logging function calls.

  • Don't emit 'unbalanced-tuple-unpacking' when the rhs of the assignment is a variable length argument.

    Closes #329

  • Add a new warning, 'inherit-non-class', emitted when a class inherits from something which is not a class.

    Closes #331

  • Fix another false positives with 'undefined-variable', where the variable can be found as a class assignment and used in a function annotation.

    Closes #342

  • Handle assignment of the string format method to a variable.

    Closes #351

  • Support wheel packaging format for PyPi.

    Closes #334

  • Check that various built-ins that do not exist in Python 3 are not used: apply, basestring, buffer, cmp, coerce, execfile, file, long raw_input, reduce, StandardError, unicode, reload and xrange.

  • Warn for magic methods which are not used in any way in Python 3: __coerce__, __delslice__, __getslice__, __setslice__, __cmp__, __oct__, __nonzero__ and __hex__.

  • Don't emit 'assigning-non-slot' when the assignment is for a property.

    Closes #359

  • Fix for regression: '{path}' was no longer accepted in '--msg-template'.

  • Report the percentage of all messages, not just for errors and warnings.

    Closes #319

  • 'too-many-public-methods' is reported only for methods defined in a class, not in its ancestors.

    Closes #248

  • 'too-many-lines' disable pragma can be located on any line, not only the first.

    Closes #321

  • Warn in Python 2 when an import statement is found without a corresponding from __future__ import absolute_import.

  • Warn in Python 2 when a non-floor division operation is found without a corresponding from __future__ import division.

  • Add a new option, 'exclude-protected', for excluding members from the protected-access warning.

    Closes #48

  • Warn in Python 2 when using dict.iter*(), dict.view*(); none of these methods are available in Python 3.

  • Warn in Python 2 when calling an object's next() method; Python 3 uses __next__() instead.

  • Warn when assigning to __metaclass__ at a class scope; in Python 3 a metaclass is specified as an argument to the 'class' statement.

  • Warn when performing parameter tuple unpacking; it is not supported in Python 3.

  • 'abstract-class-instantiated' is also emitted for Python 2. It was previously disabled.

  • Add 'long-suffix' error, emitted when encountering the long suffix on numbers.

  • Add support for disabling a checker, by specifying an 'enabled' attribute on the checker class.

  • Add a new CLI option, --py3k, for enabling Python 3 porting mode. This mode will disable all other checkers and will emit warnings and errors for constructs which are invalid or removed in Python 3.

  • Add 'old-octal-literal' to Python 3 porting checker, emitted when encountering octals with the old syntax.

  • Add 'implicit-map-evaluation' to Python 3 porting checker, emitted when encountering the use of map builtin, without explicit evaluation.