What's New in Pylint 2.17#
- Release:
2.17
- Date:
2023-03-08
Summary -- Release highlights#
2.17 is a small release that is the first to support python 3.11 officially with the addition of TryStar nodes.
There's still two new default checks: bad-chained-comparison
and
implicit-flag-alias
, one of them already fixed a previously
undetected bug in sentry.
Thanks to the community effort our documentation is almost complete, and every messages should have a proper documentation now. A big thank you to everyone who participated !
The next release is going to be 3.0.0
, bring breaking changes and enact long
announced deprecations. There's going to be frequent beta releases,
before the official releases, everyone is welcome to try the betas
so we find problems before the actual release.
What's new in Pylint 2.17.1?#
Release date: TBA
Breaking Changes#
Add new option (
--show-stdlib
,-L
) topyreverse
. This is similar to the behavior of--show-builtin
in that standard library modules are now not included by default, and this option will include them.Closes #8181 (#8181)
pyreverse now uses a new default color palette that is more colorblind friendly. The color scheme is taken from Paul Tol's Notes. If you prefer other colors, you can use the --color-palette option to specify custom colors.
Closes #8251 (#8251)
get_message_definition
was removed from the base checker API. You can access message definitions through theMessageStore
.Refs #8401 (#8401)
Everything related to the
__implements__
construct was removed. It was based on PEP245 that was proposed in 2001 and rejected in 2006. It includes all the classes inheritingInterface
inpylint.interfaces
Checker
should only inheritBaseChecker
or any of the other checker types frompylint.checkers
.Reporter
should only inheritBaseReporter
.The capability from pyreverse to take
__implements__
into account when generating diagrams was also removed.Refs #8404 (#8404)
modname
andmsg_store
are now required to be given inFileState
.collect_block_lines
has also been removed.Pylinter.current_name
cannot be null anymore.Refs #8407 (#8407)
'Reporter.set_output' was removed in favor of 'reporter.out = stream'.
Refs #8408 (#8408)
A number of old utility functions and classes have been removed:
MapReduceMixin
: To make a checker reduce map data simply implementget_map_data
andreduce_map_data
.is_inside_lambda
: Useutils.get_node_first_ancestor_of_type(x, nodes.Lambda)
check_messages
: Useutils.only_required_for_messages
is_class_subscriptable_pep585_with_postponed_evaluation_enabled
: Useis_postponed_evaluation_enabled(node)
andis_node_in_type_annotation_context(node)
get_python_path
: assumption that there's always an __init__.py is not true since python 3.3 and is causing problems, particularly with PEP 420. Usediscover_package_path
and pass source root(s).fix_import_path
: Useaugmented_sys_path
and pass additionalsys.path
entries as an argument obtained fromdiscover_package_path
.get_global_option
: Usechecker.linter.config
to get all global options.Related private objects have been removed as well.
Refs #8409 (#8409)
colorize_ansi
now only accept aMessageStyle
object.Refs #8412 (#8412)
pyreverse
: Support for the.vcg
output format (Visualaization of Compiler Graphs) has been dropped.Closes #8416 (#8416)
The warning when the now useless old pylint cache directory (pylint.d) was found was removed. The cache dir is documented in [the FAQ](https://pylint.readthedocs.io/en/latest/faq.html#where-is-the-persistent-data-stored-to-compare-between-successive-runs).
Refs #8462 (#8462)
Changes requiring user actions#
epylint was removed. It now lives at: https://github.com/emacsorphanage/pylint.
Refs #7737 (#7737)
The 'overgeneral-exceptions' option now only takes fully qualified name into account (
builtins.Exception
notException
). If you overrode this option, you need to use the fully qualified name now.There's still a warning, but it will be removed in 3.1.0.
Refs #8411 (#8411)
Following a deprecation period, it's no longer possible to use
MASTER
ormaster
as configuration section insetup.cfg
ortox.ini
. It's bad practice to not start sections titles with the tool name. Please usepylint.main
instead.Refs #8465 (#8465)
False Positives Fixed#
Other Bug Fixes#
--clear-cache-post-run
now also clears LRU caches for pylint utilities holding references to AST nodes.Closes #8361 (#8361)
Fix a crash when
TYPE_CHECKING
is used without importing it.Closes #8434 (#8434)
Fix a regression of
preferred-modules
where a partial match was used instead of the required full match.Closes #8453 (#8453)
Other Changes#
Internal Changes#
The following utilities are deprecated in favor of the more robust
in_type_checking_block
and will be removed in pylint 3.0:is_node_in_guarded_import_block
is_node_in_typing_guarded_import_block
is_typing_guard
is_sys_guard
is still available, which was part ofis_node_in_guarded_import_block
.Refs #8433 (#8433)
Following a deprecation period,
Pylinter.check
now only work with sequences of strings, not strings.Refs #8463 (#8463)
Following a deprecation period,
ColorizedTextReporter
only acceptsColorMappingDict
.Refs #8464 (#8464)
Following a deprecation period,
MessageTest
'send_line
andend_col_offset
must be accurate in functional tests (for python 3.8 or above on cpython, and for python 3.9 or superior on pypy).Refs #8466 (#8466)
Following a deprecation period, the
do_exit
argument of theRun
class (and of the_Run
class in testutils) were removed.Refs #8472 (#8472)
Following a deprecation period, the
py_version
argument of theMessageDefinition.may_be_emitted
function is now required. The most likely solution is to use 'linter.config.py_version' if you need to keep using this function, or to use 'MessageDefinition.is_message_enabled' instead.Refs #8473 (#8473)
Following a deprecation period,
is_typing_guard
,is_node_in_typing_guarded_import_block
andis_node_in_guarded_import_block
: frompylint.utils
were removed: use a combination ofis_sys_guard
andin_type_checking_block
instead.Refs #8475 (#8475)
Following a deprecation period, the
location
argument of theMessage
class must now be aMessageLocationTuple
.Refs #8477 (#8477)
Following a deprecation period, the
check_single_file
function of thePylinter
is replaced byPylinter.check_single_file_item
.Refs #8478 (#8478)
What's new in Pylint 2.17.1?#
Release date: 2023-03-22
False Positives Fixed#
Adds
asyncSetUp
to the defaultdefining-attr-methods
list to silenceattribute-defined-outside-init
warning when usingunittest.IsolatedAsyncioTestCase
.Refs #8403 (#8403)
Other Bug Fixes#
--clear-cache-post-run
now also clears LRU caches for pylint utilities holding references to AST nodes.Closes #8361 (#8361)
Fix a crash when
TYPE_CHECKING
is used without importing it.Closes #8434 (#8434)
Fix a regression of
preferred-modules
where a partial match was used instead of the required full match.Closes #8453 (#8453)
Internal Changes#
The following utilities are deprecated in favor of the more robust
in_type_checking_block
and will be removed in pylint 3.0:is_node_in_guarded_import_block
is_node_in_typing_guarded_import_block
is_typing_guard
is_sys_guard
is still available, which was part ofis_node_in_guarded_import_block
.Refs #8433 (#8433)
What's new in Pylint 2.17.0?#
Release date: 2023-03-08
New Features#
pyreverse now supports custom color palettes with the --color-palette option.
Closes #6738 (#6738)
Add
invalid-name
check forTypeAlias
names.Closes #7081. (#7081)
Accept values of the form
<class name>.<attribute name>
for theexclude-protected
list.Closes #7343 (#7343)
Add --version option to pyreverse.
Refs #7851 (#7851)
Adds new functionality with preferred-modules configuration to detect submodules.
Refs #7957 (#7957)
Support implicit namespace packages (PEP 420).
Closes #8154 (#8154)
Add globbing pattern support for
--source-roots
.Closes #8290 (#8290)
Support globbing pattern when defining which file/directory/module to lint.
Closes #8310 (#8310)
pylint now supports
TryStar
nodes from Python 3.11 and should be fully compatible with Python 3.11.Closes #8387 (#8387)
New Checks#
Add a
bad-chained-comparison
check that emits a warning when there is a chained comparison where one expression is semantically incompatible with the other.Closes #6559 (#6559)
Adds an
implicit-flag-alias
check that emits a warning when a class derived fromenum.IntFlag
assigns distinct integer values that share common bit positions.Refs #8102 (#8102)
False Positives Fixed#
Fix various false positives for functions that return directly from structural pattern matching cases.
Closes #5288 (#5288)
Fix false positive for
used-before-assignment
whentyping.TYPE_CHECKING
is used with if/elif/else blocks.Closes #7574 (#7574)
Fix false positive for isinstance-second-argument-not-valid-type with union types.
Closes #8205 (#8205)
Fix false positive for
used-before-assignment
for named expressions appearing after the first element in a list, tuple, or set.Closes #8252 (#8252)
Fix false positive for
wrong-spelling-in-comment
with class names in a python 2 type comment.Closes #8370 (#8370)
False Negatives Fixed#
Other Bug Fixes#
Fix
used-before-assignment
false positive when the walrus operator is used with a ternary operator in dictionary key/value initialization.Closes #8125 (#8125)
Fix
no-name-in-module
false positive raised when a package defines a variable with the same name as one of its submodules.Closes #8148 (#8148)
Fix a crash happening for python interpreter < 3.9 following a failed typing update.
Closes #8161 (#8161)
Fix
nested-min-max
suggestion message to indicate it's possible to splat iterable objects.Closes #8168 (#8168)
Fix a crash happening when a class attribute was negated in the start argument of an enumerate.
Closes #8207 (#8207)
Prevent emitting
invalid-name
for the line on which aglobal
statement is declared.Closes #8307 (#8307)