What's New in Pylint 2.5


Summary -- Release highlights

New checkers

  • A new check isinstance-second-argument-not-valid-type was added.

    This check is emitted whenever pylint finds a call to the isinstance function with a second argument that is not a type. Such code is likely unintended as it will cause a TypeError to be thrown at runtime error.

  • A new check assert-on-string-literal was added.

    This check is emitted whenever pylint finds an assert statement with a string literal as its first argument. Such assert statements are probably unintended as they will always pass.

  • A new check f-string-without-interpolation was added.

    This check is emitted whenever pylint detects the use of an f-string without having any interpolated values in it, which means that the f-string can be a normal string.

  • Multiple checks for invalid return types of protocol functions were added:

    • invalid-bool-returned: __bool__ did not return a bool
    • invalid-index-returned: __index__ did not return an integer
    • invalid-repr-returned): __repr__ did not return a string
    • invalid-str-returned): __str__ did not return a string
    • invalid-bytes-returned): __bytes__ did not return a string
    • invalid-hash-returned): __hash__ did not return an integer
    • invalid-length-hint-returned): __length_hint__ did not return a non-negative integer
    • invalid-format-returned): __format__ did not return a string
    • invalid-getnewargs-returned): __getnewargs__ did not return a tuple
    • invalid-getnewargs-ex-returned): __getnewargs_ex__ did not return a tuple of the form (tuple, dict)
  • A new check inconsistent-quotes was added.

    This check is emitted when quotes delimiters (" and ') are not used consistently throughout a module. It allows avoiding unnecessary escaping, allowing, for example, "Don't error" in a module in which single-quotes otherwise delimit strings so that the single quote in Don't doesn't need to be escaped.

  • A new check non-str-assignment-to-dunder-name was added to ensure that only strings are assigned to __name__ attributes.

Other Changes

  • Configuration can be read from a setup.cfg or pyproject.toml file in the current directory. A setup.cfg must prepend pylintrc section names with pylint., for example [pylint.MESSAGES CONTROL]. A pyproject.toml file must prepend section names with tool.pylint., for example [tool.pylint.'MESSAGES CONTROL']. These files can also be passed in on the command line.

  • Add new good-names-rgx and bad-names-rgx to enable permitting or disallowing of names via regular expressions

    To enable better handling of whitelisting/blacklisting names, we added two new config options: good-names-rgxs: a comma- separated list of regexes, that if a name matches will be exempt of naming-checking. bad-names-rgxs: a comma- separated list of regexes, that if a name matches will be always marked as a blacklisted name.

  • Mutable collections.* are now flagged as dangerous defaults.

  • Add new --fail-under flag for setting the threshold for the score to fail overall tests. If the score is over the fail-under threshold, pylint will complete SystemExit with value 0 to indicate no errors.

  • Added a new option notes-rgx to make fixme warnings more flexible. Now either notes or notes-rgx option can be used to detect fixme warnings.

  • Non-ASCII characters are now allowed by invalid-name.

  • pylint no longer emits invalid-name for non-constants found at module level.

    Pylint was considering all module level variables as constants, which is not what PEP 8 is actually mandating.

  • A new check non-ascii-name was added to detect identifiers with non-ASCII characters.

  • Overloaded typing functions no longer trigger no-self-use, unused-argument, missing-docstring and similar checks that assumed that overloaded functions are normal functions.

  • python -m pylint can no longer be made to import files from the local directory.

  • A new command --list-extensions was added.

    This command lists all extensions present in pylint.extensions.

  • Various false positives have been fixed which you can read more about in the Changelog files.