Recent Releases of pylint
pylint - v3.3.8
What's new in Pylint 3.3.8?
Release date: 2025-08-09
This patch release includes an exceptional fix for a false negative issue. For details, see: https://github.com/pylint-dev/pylint/pull/10482#issuecomment-3164514082
False Positives Fixed
- Fix false positives for
possibly-used-before-assignmentwhen variables are exhaustively assigned within amatchblock.
Closes #9668
- Fix false positive for
missing-raises-docandmissing-yield-docwhen the method length is less than docstring-min-length.
Refs #10104
- Fix a false positive for
unused-variablewhen multiple except handlers bind the same name under a try block.
Closes #10426
False Negatives Fixed
- Fix false-negative for
used-before-assignmentwithfrom __future__ import annotationsin function definitions.
Refs #10482
Other Bug Fixes
- Fix a bug in Pyreverse where aggregations and associations were included in diagrams regardless of the selected --filter-mode (such as PUB_ONLY, ALL, etc.).
Closes #10373
- Fix double underscores erroneously rendering as bold in pyreverse's Mermaid output.
Closes #10402
- Python
Published by Pierre-Sassoulas 10 months ago
pylint - v3.3.7
What's new in Pylint 3.3.7?
Release date: 2025-05-04
False Positives Fixed
- Comparisons between two calls to
type()won't raise anunidiomatic-typecheckwarning anymore, consistent with the behavior applied only for==previously.
Closes #10161
Other Bug Fixes
- Fixed a crash when importing a class decorator that did not exist with the same name as a class attribute after the class definition.
Closes #10105
- Fix a crash caused by malformed format strings when using
.formatwith keyword arguments.
Closes #10282
- Using a slice as a class decorator now raises a
not-callablemessage instead of crashing. A lot of checks that dealt with decorators (too many to list) are now shortcut if the decorator can't immediately be inferred to a function or class definition.
Closes #10334
Other Changes
- The algorithm used for
no-membersuggestions is now more efficient and cuts the calculation when the distance score is already above the threshold.
Refs #10277
- Python
Published by Pierre-Sassoulas about 1 year ago
pylint - v3.3.5
What's new in Pylint 3.3.5?
Release date: 2025-03-09
False Positives Fixed
- Fix false positives for
use-implicit-booleaness-not-comparison,use-implicit-booleaness-not-comparison-to-stringanduse-implicit-booleaness-not-comparison-to-zerowhen chained comparisons are checked.
Closes #10065
- Fix a false positive for
invalid-getnewargs-ex-returnedwhen the tuple or dict has been assigned to a name.
Closes #10208
- Remove
getoptandoptparsefrom the list of deprecated modules.
Closes #10211
Other Bug Fixes
- Fixed conditional import x.y causing false positive possibly-used-before-assignment.
Closes #10081
- Fix a crash when something besides a class is found in an except handler.
Closes #10106
- Fixed raising invalid-name when using camelCase for private methods with two leading underscores.
Closes #10189
Other Changes
- Upload release assets to PyPI via Trusted Publishing.
Closes #10256
- Python
Published by Pierre-Sassoulas about 1 year ago
pylint - 3.3.4
Other Bug Fixes
- Fixes "skipped files" count calculation; the previous method was displaying an arbitrary number.
Closes #10073
- Fixes a crash that occurred when pylint was run in a container on a host with cgroupsv2 and restrictions on CPU usage.
Closes #10103
- Relaxed the requirements for isort so pylint can benefit from isort 6.
Closes #10203
- Python
Published by Pierre-Sassoulas over 1 year ago
pylint - v3.3.3
What's new in Pylint 3.3.3?
Release date: 2024-12-23
False Positives Fixed
- Fix false positives for
undefined-variablefor classes using Python 3.12 generic type syntax.
Closes #9335
- Fix a false positive for
use-implicit-booleaness-not-len. No lint should be emitted for generators (lenis not defined for generators).
Refs #10100
Other Bug Fixes
- Fix
Unable to import 'collections.abc' (import-error)on Python 3.13.1.
Closes #10112
- Python
Published by jacobtylerwalls over 1 year ago
pylint - v3.3.2
False Positives Fixed
- Fix a false positive for
potential-index-errorwhen an indexed iterable contains a starred element that evaluates to more than one item.
Closes #10076
Other Bug Fixes
- Fixes the issue with --source-root option not working when the source files are in a subdirectory of the source root (e.g. when using a /src layout).
Closes #10026
- Python
Published by Pierre-Sassoulas over 1 year ago
pylint -
Release date: 2024-09-20
Changes requiring user actions
- We migrated
symilarto argparse, from getopt, so the error and help output changed (for the better). We exit with 2 instead of sometime 1, sometime 2. The error output is not captured by the runner anymore. It's not possible to use a value for the boolean options anymore (--ignore-comments 1should become--ignore-comments).
Refs #9731
New Features
- Add new
declare-non-sloterror which reports when a class has a__slots__member and a type hint on the class is not present in__slots__.
Refs #9499
New Checks
- Added
too-many-positional-argumentsto allow distinguishing the configuration for too many total arguments (with keyword-only params specified after*) from the configuration for too many positional-or-keyword or positional-only arguments.
As part of evaluating whether this check makes sense for your project, ensure you
adjust the value of --max-positional-arguments.
Closes #9099
- Add
using-exception-groups-in-unsupported-versionandusing-generic-type-syntax-in-unsupported-versionfor uses of Python 3.11+ or 3.12+ features on lower supported versions provided with--py-version.
Closes #9791
- Add
using-assignment-expression-in-unsupported-versionfor uses of:=(walrus operator) on Python versions below 3.8 provided with--py-version.
Closes #9820
- Add
using-positional-only-args-in-unsupported-versionfor uses of positional-only args on Python versions below 3.8 provided with--py-version.
Closes #9823
- Add
unnecessary-default-type-argsto thetypingextension to detect the use of unnecessary default type args fortyping.Generatorandtyping.AsyncGenerator.
Refs #9938
False Negatives Fixed
- Fix computation of never-returning function:
Neveris handled in addition toNoReturn, and priority is given to the explicit--never-returning-functionsoption.
Closes #7565.
- Fix a false negative for
await-outside-asyncwhen await is inside Lambda.
Refs #9653
- Fix a false negative for
duplicate-argument-nameby includingpositional-only,*argsand**kwargsarguments in the check.
Closes #9669
- Fix false negative for
multiple-statementswhen multiple statements are present onelseandfinallylines oftry.
Refs #9759
- Fix false negatives when
isinstancedoes not have exactly two arguments. pylint now emits atoo-many-function-argsorno-value-for-parameterappropriately forisinstancecalls.
Closes #9847
Other Bug Fixes
--enablewith--disable=allnow produces an error, when an unknown msg code is used. Internalpylintmessages are no longer affected by--disable=all.
Closes #9403
- Impossible to compile regexes for paths in the configuration or argument given to pylint won't crash anymore but
raise an argparse error and display the error message from
re.compileinstead.
Closes #9680
- Fix a bug where a
tox.inifile with pylint configuration was ignored and it exists in the current directory.
.cfg and .ini files containing a Pylint configuration may now use a section named [pylint]. This enhancement impacts the scenario where these file types are used as defaults when they are present and have not been explicitly referred to, using the --rcfile option.
Closes #9727
- Improve file discovery for directories that are not python packages.
Closes #9764
Other Changes
- Remove support for launching pylint with Python 3.8.
Code that supports Python 3.8 can still be linted with the
--py-version=3.8setting.
Refs #9774
- Add support for Python 3.13.
Refs #9852
Internal Changes
- All variables, classes, functions and file names containing the word 'similar', when it was, in fact, referring to 'symilar' (the standalone program for the duplicate-code check) were renamed to 'symilar'.
Closes #9734
- Remove old-style classes (Python 2) code and remove check for new-style class since everything is new-style in Python 3. Updated doc for exception checker to remove reference to new style class.
Refs #9925
- Python
Published by Pierre-Sassoulas over 1 year ago
pylint - v3.2.7
What's new in Pylint 3.2.7?
Release date: 2024-08-31
False Positives Fixed
- Fixed a false positive
unreachableforNoReturncoroutine functions.
Closes #9840
Other Bug Fixes
- Fix crash in refactoring checker when calling a lambda bound as a method.
Closes #9865
- Fix a crash in
undefined-loop-variablewhen providing theiterableargument toenumerate().
Closes #9875
- Fix to address indeterminacy of error message in case a module name is same as another in a separate namespace.
Refs #9883
- Python
Published by jacobtylerwalls almost 2 years ago
pylint - v3.2.6
What's new in Pylint 3.2.6?
Release date: 2024-07-21
False Positives Fixed
- Quiet false positives for
unexpected-keyword-argwhen pylint cannot determine which of two or more dynamically defined classes is being instantiated.
Closes #9672
- Fix a false positive for
missing-param-docwhere a method which is decorated withtyping.overloadwas expected to have a docstring specifying its parameters.
Closes #9739
- Fix a regression that raised
invalid-nameon class attributes merely overriding invalid names from an ancestor.
Closes #9765
- Treat
assert_never()the same way when imported fromtyping_extensions.
Closes #9780
- Fix a false positive for
consider-using-min-max-builtinwhen the assignment target is an attribute.
Refs #9800
Other Bug Fixes
- Fix an
AssertionErrorarising from properties that return partial functions.
Closes #9214
- Fix a crash when a subclass extends
__slots__.
Closes #9814
- Python
Published by jacobtylerwalls almost 2 years ago
pylint - v3.2.5
What's new in Pylint 3.2.5 ?
Release date: 2024-06-28
Other Bug Fixes
- Fixed a false positive
unreachable-codewhen usingtyping.Anyas return type in python 3.8, thetyping.NoReturnare not taken into account anymore for python 3.8 however.
Closes #9751
- Python
Published by Pierre-Sassoulas almost 2 years ago
pylint - v3.2.4
What's new in Pylint 3.2.4?
Release date: 2024-06-25
False Positives Fixed
- Prevent emitting
possibly-used-before-assignmentwhen relying on names only potentially not defined in conditional blocks guarded by functions annotated withtyping.Neverortyping.NoReturn.
Closes #9674
Other Bug Fixes
- Fixed a crash when the lineno of a variable used as an annotation wasn't available for
undefined-variable.
Closes #8866
- Fixed a crash when the
startvalue in anenumeratewas non-constant and impossible to infer (like inenumerate(apples, start=int(random_apple_index)) forunnecessary-list-index-lookup.
Closes #9078
- Fixed a crash in
symilarwhen the-dor-ishort option were not properly recognized. It's still impossible to do-d=1(you must do-d 1).
Closes #9343
- Python
Published by Pierre-Sassoulas almost 2 years ago
pylint - v3.2.3
False Positives Fixed
- Classes with only an Ellipsis (
...) in their body do not trigger 'multiple-statements' anymore if they are inlined (in accordance with black's 2024 style).
Closes #9398
- Fix a false positive for
redefined-outer-namewhen there is a name defined in an exception-handling block which shares the same name as a local variable that has been defined in a function body.
Closes #9671
- Fix a false positive for
use-yield-fromwhen using the return value from theyieldatom.
Closes #9696
- Python
Published by Pierre-Sassoulas almost 2 years ago
pylint - v3.2.2
What's new in Pylint 3.2.2?
Release date: 2024-05-20
False Positives Fixed
- Fix multiple false positives for generic class syntax added in Python 3.12 (PEP 695).
Closes #9406
- Exclude context manager without cleanup from
contextmanager-generator-missing-cleanupchecks.
Closes #9625
- Python
Published by cdce8p about 2 years ago
pylint - v3.2.1
What's new in Pylint 3.2.1?
Release date: 2024-05-18
False Positives Fixed
- Exclude if/else branches containing terminating functions (e.g.
sys.exit()) frompossibly-used-before-assignmentchecks.
Closes #9627
- Don't emit
typevar-name-incorrect-variancewarnings for PEP 695 style TypeVars. The variance is inferred automatically by the type checker. Adding_coor_contrasuffix can help to reason about TypeVar.
Refs #9638
- Fix a false positive for
possibly-used-before-assignmentwhen usingtyping.assert_never()(3.11+) to indicate exhaustiveness.
Closes #9643
Other Bug Fixes
- Fix a false negative for
--ignore-patternswhen the directory to be linted is specified using a dot(.) and all files are ignored instead of only the files whose name begin with a dot.
Closes #9273
- Restore "errors / warnings by module" section to report output (with
-ry).
Closes #9145
trailing-comma-tupleshould now be correctly emitted when it was disabled globally but enabled via local message control, after removal of an over-optimisation.
Refs #9608
- Add
--prefer-stubs=yesoption to opt-in to the astroid 3.2 feature that prefers.pyistubs over same-named.pyfiles. This has the potential to reduceno-membererrors but at the cost of more errors such asnot-an-iterablefrom function bodies appearing as....
Defaults to no.
Closes #9626 Closes #9623
Internal Changes
- Update astroid version to 3.2.1. This solves some reports of
RecursionErrorand also makes the prefer .pyi stubs feature in astroid 3.2.0 opt-in with the aforementioned--prefer-stubs=yoption.
Refs #9139
- Python
Published by jacobtylerwalls about 2 years ago
pylint - v3.2.0
What's new in Pylint 3.2.0?
Release date: 2024-05-14
Of note: a github reporter, two new checks (possibly-used-before-assignment and contextmanager-generator-missing-cleanup), performance improvements, and an astroid upgrade providing support for @overload and .pyi stubs.
New Features
- Understand
six.PY2andsix.PY3for conditional imports.
Closes #3501
- A new
githubreporter has been added. This reporter returns the output ofpylintin a format that Github can use to automatically annotate code. Use it withpylint --output-format=githubon your Github Workflows.
Closes #9443.
New Checks
- Add check
possibly-used-before-assignmentwhen relying on names after anif/elseswitch when one branch failed to define the name, raise, or return.
Closes #1727
- Checks for generators that use contextmanagers that don't handle cleanup properly.
Is meant to raise visibilty on the case that a generator is not fully exhausted and the contextmanager is not cleaned up properly.
A contextmanager must yield a non-constant value and not handle cleanup for GeneratorExit.
The using generator must attempt to use the yielded context value
with x() as yand not justwith x().
Closes #2832
False Negatives Fixed
- If and Try nodes are now checked for useless return statements as well.
Closes #9449.
- Fix false negative for
property-with-parametersin the case of parameters which arepositional-only,keyword-only,variadic positionalorvariadic keyword.
Closes #9584
False Positives Fixed
- pylint now understands the
@overloaddecorator return values better.
Closes #4696 Refs #9606
Performance Improvements
- Ignored modules are now not checked at all, instead of being checked and then ignored. This should speed up the analysis of large codebases which have ignored modules.
Closes #9442
- ImportChecker's logic has been modified to avoid context files when possible. This makes it possible to cache module searches on astroid and reduce execution times.
Refs #9310.
- An internal check for
trailing-comma-tuplebeing enabled for a file or not is now done once per file instead of once for each token.
Refs #9608.
- Python
Published by jacobtylerwalls about 2 years ago
pylint - v3.1.1
What's new in Pylint 3.1.1?
Release date: 2024-05-13
False Positives Fixed
- Treat
attrs.defineandattrs.frozenas dataclass decorators intoo-few-public-methodscheck.
Closes #9345
- Fix a false positive with
singledispatchmethod-functionwhen a method is decorated with bothfunctools.singledispatchmethodandstaticmethod.
Closes #9531
- Fix a false positive for
consider-using-dict-itemswhen iterating usingkeys()and then deleting an item using the key as a lookup.
Closes #9554
- Python
Published by jacobtylerwalls about 2 years ago
pylint - v3.1.0
Two new checks--use-yield-from, deprecated-attribute-- and a smattering of bug fixes.
New Features
- Skip
consider-using-joincheck for non-empty separators if ansuggest-join-with-non-empty-separatoroption is set tono.
Closes #8701
- Discover
.pyifiles when linting.
These can be ignored with the ignore-patterns setting.
Closes #9097
- Check
TypeAliasandTypeVar(PEP 695) nodes forinvalid-name.
Refs #9196
- Support for resolving external toml files named pylintrc.toml and .pylintrc.toml.
Closes #9228
- Check for
.clear,.discard,.popandremovemethods being called on a set while it is being iterated over.
Closes #9334
New Checks
- New message
use-yield-fromadded to the refactoring checker. This message is emitted when yielding from a loop can be replaced byyield from.
Closes #9229.
- Added a
deprecated-attributemessage to check deprecated attributes in the stdlib.
Closes #8855
False Positives Fixed
- Fixed false positive for
inherit-non-classfor generic Protocols.
Closes #9106
- Exempt
TypedDictfromtyping_extensionsfromtoo-many-ancestorchecks.
Refs #9167
False Negatives Fixed
- Extend broad-exception-raised and broad-exception-caught to except*.
Closes #8827
- Fix a false-negative for unnecessary if blocks using a different than expected ordering of arguments.
Closes #8947.
Other Bug Fixes
- Improve the message provided for wrong-import-order check. Instead of the import statement ("import x"), the message now specifies the import that is out of order and which imports should come after it. As reported in the issue, this is particularly helpful if there are multiple imports on a single line that do not follow the PEP8 convention.
The message will report imports as follows: For "import X", it will report "(standard/third party/first party/local) import X" For "import X.Y" and "from X import Y", it will report "(standard/third party/first party/local) import X.Y" The import category is specified to provide explanation as to why pylint has issued the message and guidence to the developer on how to fix the problem.
Closes #8808
Other Changes
- Print how many files were checked in verbose mode.
Closes #8935
- Fix a crash when an enum class which is also decorated with a
dataclasses.dataclassdecorator is defined.
Closes #9100
Internal Changes
- Update astroid version to 3.1.0.
Refs #9457
- Python
Published by Pierre-Sassoulas over 2 years ago
pylint -
False Positives Fixed
used-before-assignmentis no longer emitted when using a name in a loop and depending on an earlier name assignment in anexceptblock paired withelse: continue.
Closes #6804
- Avoid false positives for
no-memberinvolving function attributes supplied by decorators.
Closes #9246
- Fixed false positive nested-min-max for nested lists.
Closes #9307
- Fix false positive for
used-before-assignmentin afinallyblock when assignments took place in both thetryblock and each exception handler.
Closes #9451
Other Bug Fixes
- Catch incorrect ValueError
"generator already executing"for Python 3.12.0 - 3.12.2. This is fixed upstream in Python 3.12.3.
Closes #9138
- Python
Published by Pierre-Sassoulas over 2 years ago
pylint - v3.0.3
What's new in Pylint 3.0.3?
Release date: 2023-12-11
False Positives Fixed
- Fixed false positive for
unnecessary-lambdawhen the call has keyword arguments but not the lambda.
Closes #9148
- Fixed incorrect suggestion for shallow copy in unnecessary-comprehension
Example of the suggestion: #pylint: disable=missing-module-docstring a = [1, 2, 3] b = [x for x in a] b[0] = 0 print(a) # [1, 2, 3]
After changing b = [x for x in a] to b = a based on the suggestion, the script now prints [0, 2, 3]. The correct suggestion should be use list(a) to preserve the original behavior.
Closes #9172
- Fix false positives for
undefined-variableandunused-argumentfor classes and functions using Python 3.12 generic type syntax.
Closes #9193
- Fixed
pointless-string-statementfalse positive for docstrings on Python 3.12 type aliases.
Closes #9268
- Fix false positive for
invalid-exception-operationwhen concatenating tuples of exception types.
Closes #9288
Other Bug Fixes
- Fix a bug where pylint was unable to walk recursively through a directory if the
directory has an
__init__.pyfile.
Closes #9210
- Python
Published by jacobtylerwalls over 2 years ago
pylint - v3.0.2
False Positives Fixed
- Fix
used-before-assignmentfalse positive for generic type syntax (PEP 695, Python 3.12).
Closes #9110
Other Bug Fixes
- Escape special symbols and newlines in messages.
Closes #7874
- Fixes suggestion for
nested-min-maxfor expressions with additive operators, list and dict comprehensions.
Closes #8524
- Fixes ignoring conditional imports with
ignore-imports=y.
Closes #8914
- Emit
inconsistent-quotesfor f-strings with 3.12 interpreter only if targeting pre-3.12 versions.
Closes #9113
- Python
Published by jacobtylerwalls over 2 years ago
pylint -
False Positives Fixed
- Fixed false positive for
inherit-non-classfor generic Protocols.
Closes #9106
Other Changes
- Fix a crash when an enum class which is also decorated with a
dataclasses.dataclassdecorator is defined.
Closes #9100
- Python
Published by Pierre-Sassoulas over 2 years ago
pylint -
Pylint now support python 3.12 officially.
This long anticipated major version also provides some important usability and performance improvements, along with enacting necessary breaking changes and long-announced deprecations. The documentation of each message with an example is very close too.
The required astroid version is now 3.0.0. See the astroid changelog for additional fixes, features, and performance improvements applicable to pylint.
Our code is now fully typed. The invalid-name message no longer checks for a minimum length of 3 characters by default. Dependencies like wrapt or setuptools were removed.
A new json2 reporter has been added. It features an enriched output that is easier to parse and provides more info, here's a sample output.
json
{
"messages": [
{
"type": "convention",
"symbol": "line-too-long",
"message": "Line too long (1/2)",
"messageId": "C0301",
"confidence": "HIGH",
"module": "0123",
"obj": "",
"line": 1,
"column": 0,
"endLine": 1,
"endColumn": 4,
"path": "0123",
"absolutePath": "0123"
}
],
"statistics": {
"messageTypeCount": {
"fatal": 0,
"error": 0,
"warning": 0,
"refactor": 0,
"convention": 1,
"info": 0
},
"modulesLinted": 1,
"score": 5.0
}
}
Breaking Changes
- Enabling or disabling individual messages will now take effect even if an
--enable=allordisable=allfollows in the same configuration file (or on the command line).
This means for the following example, fixme messages will now be emitted:
bash
pylint my_module --enable=fixme --disable=all
To regain the prior behavior, remove the superfluous earlier option.
Closes #3696
- Remove support for launching pylint with Python 3.7.
Code that supports Python 3.7 can still be linted with the
--py-version=3.7setting.
Refs #6306
- Disables placed in a
tryblock now apply to theexceptblock. Previously, they only happened to do so in the presence of anelseclause.
Refs #7767
pyreversenow uses a new default color palette that is more colorblind friendly. The color scheme is taken fromPaul Tol's Notes <https://personal.sron.nl/~pault/>_. If you prefer other colors, you can use the--color-paletteoption to specify custom colors.
Closes #8251
- Everything related to the
__implements__construct was removed. It was based on PEP245 that was proposed in 2001 and rejected in 2006.
The capability from pyreverse to take __implements__ into account when generating diagrams
was also removed.
Refs #8404
pyreverse: Support for the.vcgoutput format (Visualization of Compiler Graphs) has been dropped.
Closes #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
- Following a deprecation period,
pylint.config.PYLINTRCwas removed. Use thepylint.config.find_default_config_filesgenerator instead.
Closes #8862
Changes requiring user actions
- The
invalid-namemessage no longer checks for a minimum length of 3 characters by default. (This was an unadvertised commingling of concerns between casing and name length, and users regularly reported this to be surprising.)
If checking for a minimum length is still desired, it can be regained in two ways:
If you are content with a
disallowed-namemessage (instead ofinvalid-name), then simply add the optionbad-names-rgxs="^..?$", which will fail 1-2 character-long names. (Ensure you enabledisallowed-name.)If you would prefer an
invalid-namemessage to be emitted, or would prefer finer-grained control over the circumstances in which messages are emitted (classes vs. methods, etc.), then avail yourself of the regex options describedhere <https://pylint.readthedocs.io/en/stable/user_guide/configuration/all-options.html#main-checker>. (In particular, take note of the commented out options in the "example configuration" given at the bottom of the section.) The prior regexes can be found in thepull request <https://github.com/pylint-dev/pylint/pull/8813>that removed the length requirements.
Closes #2018
The compare to empty string checker (
pylint.extensions.emptystring) and the compare to zero checker (pylint.extensions.compare-to-zero) have been removed and their checks are now part of the implicit booleaness checker:compare-to-zerowas renameduse-implicit-booleaness-not-comparison-to-zeroandcompare-to-empty-stringwas renameduse-implicit-booleaness-not-comparison-to-stringand they now need to be enabled explicitly.- The
pylint.extensions.emptystringandpylint.extensions.compare-to-zeroextensions no longer exist and need to be removed from theload-pluginsoption. - Messages related to implicit booleaness were made more explicit and actionable. This permits to make their likeness explicit and will provide better performance as they share most of their conditions to be raised.
Closes #6871
- epylint was removed. It now lives at: https://github.com/emacsorphanage/pylint.
Refs #7737
- The
overgeneral-exceptionsoption now only takes fully qualified names into account (builtins.ExceptionnotException). 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
- Following a deprecation period, it's no longer possible to use
MASTERormasteras configuration section insetup.cfgortox.ini. It's bad practice to not start a section title with the tool name. Please usepylint.maininstead.
Refs #8465
- Package stats are now printed when running Pyreverse and a
--verboseflag was added to get the original output with parsed modules. You might need to activate the verbose option if you want to keep the old output.
Closes #8973
New Features
- A new
json2reporter has been added. It features a more enriched output that is easier to parse and provides more info.
Compared to json the only changes are that messages are now under the "messages"
key and that "message-id" now follows the camelCase convention and is renamed to
"messageId".
The new reporter also reports the "score" of the modules you linted as defined by the
evaluation option and provides statistics about the modules you linted.
We encourage users to use the new reporter as the json reporter will no longer
be maintained.
Closes #4741
- In Pyreverse package dependency diagrams, show when a module imports another only for type-checking.
Closes #8112
- Add new option (
--show-stdlib,-L) topyreverse. This is similar to the behavior of--show-builtinin that standard library modules are now not included by default, and this option will include them.
Closes #8181
- Add Pyreverse option to exclude standalone nodes from diagrams with
--no-standalone.
Closes #8476
New Checks
- Added
DataclassCheckermodule andinvalid-field-callchecker to check for invalid dataclasses.field() usage.
Refs #5159
- Add
return-in-finallyto emit a message if a return statement was found in a finally clause.
Closes #8260
- Add a new checker
kwarg-superseded-by-positional-argto warn when a function is called with a keyword argument which shares a name with a positional-only parameter and the function contains a keyword variadic parameter dictionary. It may be surprising behaviour when the keyword argument is added to the keyword variadic parameter dictionary.
Closes #8558
Extensions
- Add new
prefer-typing-namedtuplemessage to theCodeStyleCheckerto suggest rewriting calls tocollections.namedtupleas classes inheriting fromtyping.NamedTupleon Python 3.6+.
Requires load-plugins=pylint.extensions.code_style and enable=prefer-typing-namedtuple to be raised.
Closes #8660
False Positives Fixed
- Extend concept of "function ambiguity" in
safe_infer()from differing number of function arguments to differing set of argument names.
Solves false positives in tensorflow.
Closes #3613
- Fix
unused-argumentfalse positive when__new__does not use all the arguments of__init__.
Closes #3670
- Fix a false positive for
invalid-namewhen a type-annotated class variable in anenum.Enumclass has no assigned value.
Refs #7402
- Fix
unused-importfalse positive for usage ofsix.with_metaclass.
Closes #7506
- Fix false negatives and false positives for
too-many-try-statements,too-complex, andtoo-many-branchesby correctly counting statements under atry.
Refs #7767
- When checking for unbalanced dict unpacking in for-loops, Pylint will now test whether the length of each value to be unpacked matches the number of unpacking targets. Previously, Pylint would test the number of values for the loop iteration, which would produce a false unbalanced-dict-unpacking warning.
Closes #8156
- Fix false positive for
used-before-assignmentwhen usage and assignment are guarded by the same test in different statements.
Closes #8167
- Adds
asyncSetUpto the defaultdefining-attr-methodslist to silenceattribute-defined-outside-initwarning when usingunittest.IsolatedAsyncioTestCase.
Refs #8403
logging-not-lazyis not longer emitted for explicitly concatenated string arguments.
Closes #8410
- Fix false positive for isinstance-second-argument-not-valid-type when union types contains None.
Closes #8424
invalid-namenow allows for integers intypealiasnames:- now valid:
Good2Name,GoodName2. - still invalid:
_1BadName.
- now valid:
Closes #8485
- No longer consider
Unionas type annotation as type alias for naming checks.
Closes #8487
unnecessary-lambdano longer warns on lambdas which use its parameters in their body (other than the final arguments), e.g.lambda foo: (bar if foo else baz)(foo).
Closes #8496
- Fixed
unused-importso that it observes thedummy-variables-rgxoption.
Closes #8500
Uniontyped variables without assignment are no longer treated asTypeAlias.
Closes #8540
- Allow parenthesized implicitly concatenated strings when
check-str-concat-over-line-jumpsis enabled.
Closes #8552.
- Fix false positive for
positional-only-arguments-expectedwhen a function contains both a positional-only parameter that has a default value, and**kwargs.
Closes #8555
- Fix false positive for
keyword-arg-before-varargwhen a positional-only parameter with a default value precedes*args.
Closes #8570
- Fix false positive for
arguments-differwhen overriding__init_subclass__.
Closes #8919
- Fix a false positive for
no-value-for-parameterwhen a staticmethod is called in a class body.
Closes #9036
False Negatives Fixed
- Emit
used-before-assignmentwhen calling module-level functions before definition.
Closes #1144
- Apply
infer_kwarg_from_call()to more checks
These mostly solve false negatives for various checks,
save for one false positive for use-maxsplit-arg.
Closes #7761
TypeAliasvariables defined in functions are now checked forinvalid-nameerrors.
Closes #8536
- Fix false negative for
no-value-for-parameterwhen a function, whose signature contains both a positional-only parameternameand also*kwargs, is called with a keyword-argument forname.
Closes #8559
- Fix a false negative for
too-many-argumentsby considering positional-only and keyword-only parameters.
Closes #8667
- Emit
assignment-from-no-returnfor calls to builtin methods likedict.update(). Calls tolist.sort()now raiseassignment-from-no-returnrather thanassignment-from-nonefor consistency.
Closes #8714 Closes #8810
consider-using-augmented-assignis now applied to dicts and lists as well.
Closes #8959
Other Bug Fixes
- Support
duplicate-codemessage when parallelizing with--jobs.
Closes #374
- Support
cyclic-importmessage when parallelizing with--jobs.
Closes #4171
--jobscan now be used with--load-plugins.
This had regressed in astroid 2.5.0.
Closes #4874
- docparams extension considers type comments as type documentation.
Closes #6287
- When parsing comma-separated lists of regular expressions in the config, ignore commas that are inside braces since those indicate quantifiers, not delineation between expressions.
Closes #7229
- The
ignored-modulesoption will now be correctly taken into account forno-name-in-module.
Closes #7578
sys.argvis now always correctly considered as impossible to infer (instead of using the actual values given to pylint).
Closes #7710
- Avoid duplicative warnings for unqualified exception names in the
overgeneral-exceptionssetting when running with--jobs.
Closes #7774
- Don't show class fields more than once in Pyreverse diagrams.
Closes #8189
- Fix
used-before-assignmentfalse negative when TYPE_CHECKING imports are used in multiple scopes.
Closes #8198
--clear-cache-post-runnow also clears LRU caches for pylint utilities holding references to AST nodes.
Closes #8361
- Fix a crash when
TYPE_CHECKINGis used without importing it.
Closes #8434
- Fix a
used-before-assignmentfalse positive when imports are made under theTYPE_CHECKINGelse if branch.
Closes #8437
- Fix a regression of
preferred-moduleswhere a partial match was used instead of the required full match.
Closes #8453
- Fix a crash in pyreverse when "/" characters are used in the output filename e.g pyreverse -o png -p name/ path/to/project.
Closes #8504
- Don't show arrows more than once in Pyreverse diagrams.
Closes #8522
- Improve output of
consider-using-generatormessage formin()calls withdefaultkeyword.
Closes #8563
- Fixed a crash when generating a configuration file:
tomlkit.exceptions.TOMLKitError: Can't add a table to a dotted keycaused by tomlkitv0.11.8.
Closes #8632
- Fix a line break error in Pyreverse dot output.
Closes #8671
- Fix a false positive for
method-hiddenwhen usingcached_propertydecorator.
Closes #8753
- Dunder methods defined in lambda do not trigger
unnecessary-dunder-callanymore, if they cannot be replaced by the non-dunder call.
Closes #8769
- Don't show duplicate type annotations in Pyreverse diagrams.
Closes #8888
- Fixing inconsistent hashing issue in
BaseCheckercausing some reports not being exported.
Closes #9001
- Don't add
Optionalto|annotations withNonein Pyreverse diagrams.
Closes #9014
- Pyreverse doesn't show multiple class association arrows anymore, but only the strongest one.
Refs #9045
- Prevented data loss in the linter stats for messages relating
to the linter itself (e.g.
unknown-option-value), fixing problems with score, fail-on, etc.
Closes #9059
- Fix crash in refactoring checker when unary operand used with variable in for loop.
Closes #9074
Other Changes
- Pylint now exposes its type annotations.
Closes #5488 and #2079
- Search for
pyproject.tomlrecursively in parent directories up to a project or file system root.
Refs #7163, Closes #3289
- All code related to the optparse config parsing has been removed.
Refs #8405
- Pylint now supports python 3.12.
Refs #8718
- Add a CITATION.cff file to the root of the repository containing the necessary metadata to cite Pylint.
Closes #8760
- Renamed the "unneeded-not" error into "unnecessary_negation" to be clearer.
Closes #8789
Internal Changes
get_message_definitionwas removed from the base checker API. You can access message definitions through theMessageStore.
Refs #8401
- Everything related to the
__implements__construct was removed. It was based on PEP245 that was proposed in 2001 and rejected in 2006.
All the classes inheriting Interface in pylint.interfaces were removed.
Checker should only inherit BaseChecker or any of the other checker types
from pylint.checkers. Reporter should only inherit BaseReporter.
Refs #8404
modnameandmsg_storeare now required to be given inFileState.collect_block_lineshas also been removed.Pylinter.current_namecannot be null anymore.
Refs #8407
Reporter.set_outputwas removed in favor ofreporter.out = stream.
Refs #8408
- A number of old utility functions and classes have been removed:
MapReduceMixin: To make a checker reduce map data simply implement
get_map_data and reduce_map_data.
is_inside_lambda: Use utils.get_node_first_ancestor_of_type(x, nodes.Lambda)
check_messages: Use utils.only_required_for_messages
is_class_subscriptable_pep585_with_postponed_evaluation_enabled: Use
is_postponed_evaluation_enabled(node) and is_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. Use discover_package_path
and pass source root(s).
fix_import_path: Use augmented_sys_path and pass additional sys.path
entries as an argument obtained from discover_package_path.
get_global_option: Use checker.linter.config to get all global options.
Related private objects have been removed as well.
Refs #8409
colorize_ansinow only accepts aMessageStyleobject.
Refs #8412
- Following a deprecation period,
Pylinter.checknow only works with sequences of strings, not strings.
Refs #8463
- Following a deprecation period,
ColorizedTextReporteronly acceptsColorMappingDict.
Refs #8464
- Following a deprecation period,
MessageTest'send_lineandend_col_offsetmust be accurate in functional tests (for python 3.8 or above on cpython, and for python 3.9 or superior on pypy).
Refs #8466
- Following a deprecation period, the
do_exitargument of theRunclass (and of the_Runclass in testutils) were removed.
Refs #8472
- Following a deprecation period, the
py_versionargument of theMessageDefinition.may_be_emittedfunction is now required. The most likely solution is to use 'linter.config.pyversion' if you need to keep using this function, or to use 'MessageDefinition.ismessage_enabled' instead.
Refs #8473
- Following a deprecation period, the
OutputLineclass now requires the right number of argument all the time. The functional output can be regenerated automatically to achieve that easily.
Refs #8474
- Following a deprecation period,
is_typing_guard,is_node_in_typing_guarded_import_blockandis_node_in_guarded_import_blockfrompylint.utilswere removed: use a combination ofis_sys_guardandin_type_checking_blockinstead.
Refs #8475
- Following a deprecation period, the
locationargument of theMessageclass must now be aMessageLocationTuple.
Refs #8477
- Following a deprecation period, the
check_single_filefunction of thePylinteris replaced byPylinter.check_single_file_item.
Refs #8478
Performance Improvements
pylintruns (at least) ~5% faster after improvements toastroidthat make better use of the inference cache.
Refs pylint-dev/astroid#529
- - Optimize
is_trailing_comma().- Cache
class_is_abstract().
- Cache
Refs #1954
- Exit immediately if all messages are disabled.
Closes #8715
- Python
Published by Pierre-Sassoulas over 2 years ago
pylint -
2.17.7 is the last release before we only support pylint 3.0.0 or superior and python 3.8 or superior.
False Positives Fixed
- Fix a regression in pylint 2.17.6 / astroid 2.15.7 causing various
messages for code involving
TypeVar.
Closes #9069
Other Bug Fixes
- Fix crash in refactoring checker when unary operand used with variable in for loop.
Closes #9074
- Python
Published by Pierre-Sassoulas over 2 years ago
pylint -
3.0.0b0 is a beta release using the new astroid 3.0.0. Expect no more breaking changes before the official 3.0.0 release, and almost no changes from 3.0.0a7. We're aiming for a release for when python 3.12 is officially out (in 2 days, 2023-10-02).
- Python
Published by Pierre-Sassoulas over 2 years ago
pylint -
Other Bug Fixes
- When parsing comma-separated lists of regular expressions in the config, ignore commas that are inside braces since those indicate quantifiers, not delineation between expressions.
Closes #7229
sys.argvis now always correctly considered as impossible to infer (instead of using the actual values given to pylint).
Closes #9047
- Don't show class fields more than once in Pyreverse diagrams.
Closes #8189
- Don't show arrows more than once in Pyreverse diagrams.
Closes #8522
- Don't show duplicate type annotations in Pyreverse diagrams.
Closes #8888
- Don't add
Optionalto|annotations withNonein Pyreverse diagrams.
Closes #9014
- Python
Published by Pierre-Sassoulas over 2 years ago
pylint - v3.0.0a7
3.0.0a7 is an alpha release, other breaking changes will be added before the official 3.0.0 release. Compared to 3.0.0a6, this alpha brings mainly python 3.12 compatibility but also the changes you would usually expect with a minor of regular size. It will requires some changes to the configuration that should be automated when 3.0.0 is out, but aren't yet. Those changes can make the configuration incompatible or at least not equivalent if used with pylint 2.x.
- Python
Published by Pierre-Sassoulas almost 3 years ago
pylint -
What's new in Pylint 2.17.5?
Release date: 2023-07-26
False Positives Fixed
- Fix a false positive for
unused-variablewhen there is an import in aif TYPE_CHECKING:block andallow-global-unused-variablesis set tonoin the configuration.
Closes #8696
- Fix false positives generated when supplying arguments as
**kwargsto IO calls like open().
Closes #8719
- Fix a false positive where pylint was ignoring method calls annotated as
NoReturnduring theinconsistent-return-statementscheck.
Closes #8747
- Exempt parents with only type annotations from the
invalid-enum-extensionmessage.
Closes #8830
Other Bug Fixes
- Fixed crash when a call to
super()was placed after an operator (e.g.not).
Closes #8554
- Fix crash for
modified-while-iteratingchecker when deleting members of a dict returned from a call.
Closes #8598
- Fix crash in
invalid-metaclasscheck when a metaclass had duplicate bases.
Closes #8698
- Avoid
consider-using-f-stringon modulos with brackets in template.
Closes #8720.
- Fix a crash when
__all__exists but cannot be inferred.
Closes #8740
- Fix crash when a variable is assigned to a class attribute of identical name.
Closes #8754
- Fixed a crash when calling
copy.copy()without arguments.
Closes #8774
Other Changes
- Fix a crash when a
nonlocalis defined at module-level.
Closes #8735
- Python
Published by Pierre-Sassoulas almost 3 years ago
pylint - v2.17.4
False Positives Fixed
- Fix a false positive for
bad-dunder-namewhen there is a user-defined__index__method.
Closes #8613
Other Bug Fixes
pyreverse: added escaping of vertical bar character in annotation labels produced by DOT printer to ensure it is not treated as field separator of record-based nodes.
Closes #8603
- Fixed a crash when generating a configuration file:
tomlkit.exceptions.TOMLKitError: Can't add a table to a dotted keycaused by tomlkitv0.11.8.
Closes #8632
- Python
Published by Pierre-Sassoulas about 3 years ago
pylint -
What's new in Pylint 2.17.3?
Release date: 2023-04-24
False Positives Fixed
- Fix
unused-argumentfalse positive when__new__does not use all the arguments of__init__.
Closes #3670
- Fix
unused-importfalse positive for usage ofsix.with_metaclass.
Closes #7506
logging-not-lazyis not longer emitted for explicitly concatenated string arguments.
Closes #8410
- Fix false positive for isinstance-second-argument-not-valid-type when union types contains None.
Closes #8424
- Fixed
unused-importso that it observes thedummy-variables-rgxoption.
Closes #8500
Uniontyped variables without assignment are no longer treated asTypeAlias.
Closes #8540
- Fix false positive for
positional-only-arguments-expectedwhen a function contains both a positional-only parameter that has a default value, and**kwargs.
Closes #8555
- Fix false positive for
keyword-arg-before-varargwhen a positional-only parameter with a default value precedes*args.
Closes #8570
Other Bug Fixes
- Improve output of
consider-using-generatormessage formin()` calls withdefault`` keyword.
Closes #8563
- Python
Published by Pierre-Sassoulas about 3 years ago
pylint - v2.17.2
False Positives Fixed
invalid-namenow allows for integers intypealiasnames:- now valid:
Good2Name,GoodName2. - still invalid:
_1BadName.
- now valid:
Closes #8485
- No longer consider
Unionas type annotation as type alias for naming checks.
Closes #8487
unnecessary-lambdano longer warns on lambdas which use its parameters in their body (other than the final arguments), e.g.lambda foo: (bar if foo else baz)(foo).
Closes #8496
Other Bug Fixes
- Fix a crash in pyreverse when "/" characters are used in the output filename e.g pyreverse -o png -p name/ path/to/project.
Closes #8504
- Python
Published by Pierre-Sassoulas about 3 years ago
pylint - v3.0.0a6
3.0.0a6 is an alpha release, other breaking changes will be added before the official 3.0.0 release. We're including the new features and false negative fixes that will be in 3.0.0, so it's the latest current version of pylint.
Breaking Changes
pyreversenow 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-paletteoption to specify custom colors.
Closes #8251
- Everything related to the
__implements__construct was removed. It was based on PEP245 that was proposed in 2001 and rejected in 2006.
The capability from pyreverse to take __implements__ into account when
generating diagrams
was also removed.
Refs #8404
pyreverse: Support for the.vcgoutput format (Visualaization of Compiler Graphs) has been dropped.
Closes #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.
Refs #8462
Changes requiring user actions
- epylint was removed. It now lives at: https://github.com/emacsorphanage/pylint.
Refs #7737
- The 'overgeneral-exceptions' option now only takes fully qualified name
into account (
builtins.ExceptionnotException). 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
- Following a deprecation period, it's no longer possible to use
MASTERormasteras configuration section insetup.cfgortox.ini. It's bad practice to not start sections titles with the tool name. Please usepylint.maininstead.
Refs #8465
New Features
- Add new option (
--show-stdlib,-L) topyreverse. This is similar to the behavior of--show-builtinin that standard library modules are now not included by default, and this option will include them.
Closes #8181
False Positives Fixed
- Adds
asyncSetUpto the defaultdefining-attr-methodslist to silenceattribute-defined-outside-initwarning when usingunittest.IsolatedAsyncioTestCase.
Refs #8403
invalid-namenow allows for integers intypealiasnames:- now valid:
Good2Name,GoodName2. - still invalid:
_1BadName.
- now valid:
Closes #8485
- No longer consider
Unionas type annotation as type alias for naming checks.
Closes #8487
unnecessary-lambdano longer warns on lambdas which use its parameters in their body (other than the final arguments), e.g.lambda foo: (bar if foo else baz)(foo).
Closes #8496
Other Bug Fixes
--clear-cache-post-runnow also clears LRU caches for pylint utilities holding references to AST nodes.
Closes #8361
- Fix a crash when
TYPE_CHECKINGis used without importing it.
Closes #8434
- Fix a
used-before-assignmentfalse positive when imports are made under theTYPE_CHECKINGelse if branch.
Closes #8437
- Fix a regression of
preferred-moduleswhere a partial match was used instead of the required full match.
Closes #8453
Other Changes
- Pylint now exposes its type annotations.
Closes #5488 and #2079
- All code related to the optparse config parsing has been removed.
Refs #8405
Internal Changes
get_message_definitionwas removed from the base checker API. You can access message definitions through theMessageStore.
Refs #8401
- Everything related to the
__implements__construct was removed. It was based on PEP245 that was proposed in 2001 and rejected in 2006.
All the classes inheriting Interface in pylint.interfaces were
removed.
Checker should only inherit BaseChecker or any of the other checker
types
from pylint.checkers. Reporter should only inherit BaseReporter.
Refs #8404
modnameandmsg_storeare now required to be given inFileState.collect_block_lineshas also been removed.Pylinter.current_namecannot be null anymore.
Refs #8407
- 'Reporter.set_output' was removed in favor of 'reporter.out = stream'.
Refs #8408
- A number of old utility functions and classes have been removed:
MapReduceMixin: To make a checker reduce map data simply implement
get_map_data and reduce_map_data.
is_inside_lambda: Use utils.get_node_first_ancestor_of_type(x,
nodes.Lambda)
check_messages: Use utils.only_required_for_messages
is_class_subscriptable_pep585_with_postponed_evaluation_enabled: Use
is_postponed_evaluation_enabled(node) and
is_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. Use
discover_package_path
and pass source root(s).
fix_import_path: Use augmented_sys_path and pass additional
sys.path
entries as an argument obtained from discover_package_path.
get_global_option: Use checker.linter.config to get all global
options.
Related private objects have been removed as well.
Refs #8409
colorize_ansinow only accept aMessageStyleobject.
Refs #8412
The following utilities are deprecated in favor of the more robust
in_type_checking_blockand will be removed in pylint 3.0:is_node_in_guarded_import_blockis_node_in_typing_guarded_import_blockis_typing_guard
is_sys_guard is still available, which was part of
is_node_in_guarded_import_block.
Refs #8433
- Following a deprecation period,
Pylinter.checknow only work with sequences of strings, not strings.
Refs #8463
- Following a deprecation period,
ColorizedTextReporteronly acceptsColorMappingDict.
Refs #8464
- Following a deprecation period,
MessageTest'send_lineandend_col_offsetmust be accurate in functional tests (for python 3.8 or above on cpython, and for python 3.9 or superior on pypy).
Refs #8466
- Following a deprecation period, the
do_exitargument of theRunclass (and of the_Runclass in testutils) were removed.
Refs #8472
- Following a deprecation period, the
py_versionargument of theMessageDefinition.may_be_emittedfunction is now required. The most likely solution is to use 'linter.config.pyversion' if you need to keep using this function, or to use 'MessageDefinition.ismessage_enabled' instead.
Refs #8473
- Following a deprecation period, the
OutputLineclass now requires the right number of argument all the time. The functional output can be regenerated automatically to achieve that easily.
Refs #8474
- Following a deprecation period,
is_typing_guard,is_node_in_typing_guarded_import_blockandis_node_in_guarded_import_block: frompylint.utilswere removed: use a combination ofis_sys_guardandin_type_checking_blockinstead.
Refs #8475
- Following a deprecation period, the
locationargument of theMessageclass must now be aMessageLocationTuple.
Refs #8477
- Following a deprecation period, the
check_single_filefunction of thePylinteris replaced byPylinter.check_single_file_item.
Refs #8478
- Python
Published by Pierre-Sassoulas about 3 years ago
pylint -
False Positives Fixed
- Adds
asyncSetUpto the defaultdefining-attr-methodslist to silenceattribute-defined-outside-initwarning when usingunittest.IsolatedAsyncioTestCase.
Refs #8403
Other Bug Fixes
--clear-cache-post-runnow also clears LRU caches for pylint utilities holding references to AST nodes.
Closes #8361
- Fix a crash when
TYPE_CHECKINGis used without importing it.
Closes #8434
- Fix a regression of
preferred-moduleswhere a partial match was used instead of the required full match.
Closes #8453
Internal Changes
The following utilities are deprecated in favor of the more robust
in_type_checking_blockand will be removed in pylint 3.0:is_node_in_guarded_import_blockis_node_in_typing_guarded_import_blockis_typing_guard
is_sys_guard is still available, which was part of
is_node_in_guarded_import_block.
Refs #8433
- Python
Published by Pierre-Sassoulas about 3 years ago
pylint - v2.17.0
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 almost all 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.0?
Release date: 2023-03-08
New Features
pyreversenow supports custom color palettes with the--color-paletteoption.
Closes #6738
- Add
invalid-namecheck forTypeAliasnames.
Closes #7081
- Accept values of the form
<class name>.<attribute name>for theexclude-protectedlist.
Closes #7343
- Add
--versionoption topyreverse.
Refs #7851
- Adds new functionality with preferred-modules configuration to detect submodules.
Refs #7957
- Support implicit namespace packages (PEP 420).
Closes #8154
- Add globbing pattern support for
--source-roots.
Closes #8290
- Support globbing pattern when defining which file/directory/module to lint.
Closes #8310
- pylint now supports
TryStarnodes from Python 3.11 and should be fully compatible with Python 3.11.
Closes #8387
New Checks
- Add a
bad-chained-comparisoncheck that emits a warning when there is a chained comparison where one expression is semantically incompatible with the other.
Closes #6559
- Adds an
implicit-flag-aliascheck that emits a warning when a class derived fromenum.IntFlagassigns distinct integer values that share common bit positions.
Refs #8102
False Positives Fixed
- Fix various false positives for functions that return directly from structural pattern matching cases.
Closes #5288
- Fix false positive for
used-before-assignmentwhentyping.TYPE_CHECKINGis used with if/elif/else blocks.
Closes #7574
- Fix false positive for isinstance-second-argument-not-valid-type with union types.
Closes #8205
- Fix false positive for
used-before-assignmentfor named expressions appearing after the first element in a list, tuple, or set.
Closes #8252
- Fix false positive for
wrong-spelling-in-commentwith class names in a python 2 type comment.
Closes #8370
False Negatives Fixed
- Fix a false negative for 'missing-parentheses-for-call-in-test' when inference failed for the internal of the call as we did not need that information to raise correctly.
Refs #8185
- Fix false negative for inconsistent-returns with while-loops.
Closes #8280
Other Bug Fixes
- Fix
used-before-assignmentfalse positive when the walrus operator is used with a ternary operator in dictionary key/value initialization.
Closes #8125
- Fix
no-name-in-modulefalse positive raised when a package defines a variable with the same name as one of its submodules.
Closes #8148
- Fix a crash happening for python interpreter < 3.9 following a failed typing update.
Closes #8161
- Fix
nested-min-maxsuggestion message to indicate it's possible to splat iterable objects.
Closes #8168
- Fix a crash happening when a class attribute was negated in the start argument of an enumerate.
Closes #8207
- Prevent emitting
invalid-namefor the line on which aglobalstatement is declared.
Closes #8307
Other Changes
- Update explanation for
global-variable-not-assignedand add confidence.
Closes #5073
- The governance model and the path to become a maintainer have been documented as part of our effort to guarantee that the software supply chain in which pylint is included is secure.
Refs #8329
- Python
Published by Pierre-Sassoulas about 3 years ago
pylint - v2.16.3
False Positives Fixed
- Fix false positive for
wrong-spelling-in-commentwith class names in a python 2 type comment.
Closes #8370
Other Bug Fixes
- Prevent emitting
invalid-namefor the line on which aglobalstatement is declared.
Closes #8307
- Python
Published by Pierre-Sassoulas over 3 years ago
pylint -
New Features
- Add
--versionoption topyreverse.
Refs #7851
False Positives Fixed
- Fix false positive for
used-before-assignmentwhentyping.TYPE_CHECKINGis used with if/elif/else blocks.
Closes #7574
- Fix false positive for
used-before-assignmentfor named expressions appearing after the first element in a list, tuple, or set.
Closes #8252
Other Bug Fixes
- Fix
used-before-assignmentfalse positive when the walrus operator is used with a ternary operator in dictionary key/value initialization.
Closes #8125
- Fix
no-name-in-modulefalse positive raised when a package defines a variable with the same name as one of its submodules.
Closes #8148
- Fix
nested-min-maxsuggestion message to indicate it's possible to splat iterable objects.
Closes #8168
- Fix a crash happening when a class attribute was negated in the start argument of an enumerate.
Closes #8207
- Python
Published by Pierre-Sassoulas over 3 years ago
pylint - v2.16.0
Summary -- Release highlights
In 2.16.0 we added aggregation and composition understanding in pyreverse, and a way to clear
the cache in between run in server mode (originally for the VS Code integration). Apart from the bug
fixes there's also a lot of new checks, and new extensions that have been asked for for a long time
that were implemented.
If you want to benefit from all the new checks load the following plugins::
pylint.extensions.dict_init_mutate,
pylint.extensions.dunder,
pylint.extensions.typing,
pylint.extensions.magic_value,
We still welcome any community effort to help review, integrate, and add good/bad examples to the doc for
5953. This should be doable without any pylint or astroid
knowledge, so this is the perfect entrypoint if you want to contribute to pylint or open source without
any experience with our code!
Last but not least @clavedeluna and @nickdrozd became triagers, welcome to the team !
What's new in Pylint 2.16.0?
Changes requiring user actions
- The
accept-no-raise-docoption related tomissing-raises-docwill now be correctly taken into account all the time.
Pylint will no longer raise missing-raises-doc (W9006) when no exceptions are
documented and accept-no-raise-doc is true (issue #7208).
If you were expecting missing-raises-doc errors to be raised in that case,
you
will now have to add accept-no-raise-doc=no in your configuration to keep
the same behavior.
Closes #7208
New Features
Added the
no-headeroutput format. If enabled with--output-format=no-header, it will not include the module name in the output. Closes #5362Added configuration option
clear-cache-post-runto support server-like usage. Use this flag if you expect the linted files to be altered between runs. Refs #5401Add
--allow-reexport-from-packageoption to configure theuseless-import-aliascheck not to emit a warning if a name is reexported from a package. Closes #6006Update
pyreverseto differentiate between aggregations and compositions.pyreversechecks if it's an Instance or a Call of an object via method parameters (via type hints) to decide if it's a composition or an aggregation. Refs #6543
New Checks
Adds a
pointless-exception-statementcheck that emits a warning when an Exception is created and not assigned, raised or returned. Refs #3110Add a
shadowed-importmessage for aliased imports. Closes #4836Add new check called
unbalanced-dict-unpackingto check for unbalanced dict unpacking in assignment and for loops. Closes #5797Add new checker
positional-only-arguments-expectedto check for cases when positional-only arguments have been passed as keyword arguments. Closes #6489Added
singledispatch-methodwhich informs that@singledispatchshould decorate functions and not class/instance methods. Addedsingledispatchmethod-functionwhich informs that@singledispatchmethodshould decorate class/instance methods and not functions. Closes #6917Rename
broad-excepttobroad-exception-caughtand add new checkerbroad-exception-raisedwhich will warn if general exceptionsBaseExceptionorExceptionare raised. Closes #7494Added
nested-min-maxwhich flagsmin(1, min(2, 3))to simplify tomin(1, 2, 3). Closes #7546Extended
use-dict-literalto also warn about call todict()when passing keyword arguments. Closes #7690Add
named-expr-without-contextcheck to emit a warning if a named expression is used outside a context likeif,for,while, or a comprehension. Refs #7760Add
invalid-slice-stepcheck to warn about a slice step value of0for common builtin sequences. Refs #7762Add
consider-refactoring-into-while-conditioncheck to recommend refactoring when a while loop is defined with a constant condition with an immediateifstatement to check forbreakcondition as a first statement. Closes #8015
Extensions
Add new extension checker
dict-init-mutatethat flags mutating a dictionary immediately after the dictionary was created. Closes #2876Added
bad-dunder-nameextension check, which flags bad or misspelled dunder methods. You can use thegood-dunder-namesoption to allow specific dunder names. Closes #3038Added
consider-using-augmented-assigncheck forCodeStyleextension which flagsx = x + 1to simplify tox += 1. This check is disabled by default. To use it, load the code style extension withload-plugins=pylint.extensions.code_styleand addconsider-using-augmented-assignin theenableoption. Closes #3391Add
magic-numberplugin checker for comparison with constants instead of named constants or enums. You can use it with--load-plugins=pylint.extensions.magic_value. Closes #7281Add
redundant-typehint-argumentmessage fortypingplugin for duplicate assign typehints. Enable the plugin to enable the message with:--load-plugins=pylint.extensions.typing. Closes #7636
False Positives Fixed
Fix false positive for
unused-variableandunused-importwhen a name is only used in a string literal type annotation. Closes #3299Document a known false positive for
useless-suppressionwhen disablingline-too-longin a module with only comments and no code. Closes #3368trailing-whitespacesis no longer reported within strings. Closes #3822Fix false positive for
global-variable-not-assignedwhen a global variable is re-assigned via anImportFromnode. Closes #4809Fix false positive for
use-maxsplit-argwith custom split method. Closes #4857Fix
logging-fstring-interpolationfalse positive raised when logging and f-string with%sformatting. Closes #4984Fix false-positive for
used-before-assignmentin pattern matching with a guard. Closes #5327Fix
use-sequence-for-iterationwhen unpacking a set with*. Closes #5788Fix
deprecated-methodfalse positive when alias for method is similar to name of deprecated method. Closes #5886Fix false positive
assigning-non-slotwhen a class attribute is re-assigned. Closes #6001Fix false positive for
too-many-function-argswhen a function call is assigned to a class attribute inside the class where the function is defined. Closes #6592Fixes false positive
abstract-methodon Protocol classes. Closes #7209Pylint now understands the
kw_onlykeyword argument fordataclass. Closes #7290, closes #6550, closes #5857Fix false positive for
undefined-loop-variableinfor-elseloops that use a function having a return type annotation ofNoReturnorNever. Closes #7311Fix
used-before-assignmentfor functions/classes defined in type checking guard. Closes #7368Fix false positive for
unhashable-memberwhen subclassingdictand using the subclass as a dictionary key. Closes #7501Fix the message for
unnecessary-dunder-callfor__aiter__and__aneext__. Also only emit the warning whenpy-version>= 3.10. Closes #7529Fix
used-before-assignmentfalse positive when else branch callssys.exitor similar terminating functions. Closes #7563Fix a false positive for
used-before-assignmentfor imports guarded bytyping.TYPE_CHECKINGlater used in variable annotations. Closes #7609Fix a false positive for
simplify-boolean-expressionwhen multiple values are inferred for a constant. Closes #7626unnecessary-list-index-lookupwill not be wrongly emitted ifenumerateis called withstart. Closes #7682Don't warn about
stop-iteration-returnwhen usingnext()overitertools.cycle. Closes #7765Fixes
used-before-assignmentfalse positive when the walrus operator is used in a ternary operator. Closes #7779Fix
missing-param-docfalse positive when function parameter has an escaped underscore. Closes #7827Fixes
method-cache-max-size-nonefalse positive for methods inheriting fromEnum. Closes #7857multiple-statementsno longer triggers for function stubs using inlined.... Closes #7860Fix a false positive for
used-before-assignmentwhen a name guarded byif TYPE_CHECKING:is used as a type annotation in a function body and later re-imported in the same scope. Closes #7882Prevent
used-before-assignmentwhen imports guarded byif TYPE_CHECKINGare guarded again when used. Closes #7979Fixes false positive for
try-except-raisewith multiple exceptions in one except statement if exception are in different namespace. Closes #8051Fix
invalid-nameerrors fortyping_extension.TypeVar. Refs #8089Fix
no-kwoafalse positive for context managers. Closes #8100Fix a false positive for
redefined-variable-typewhenasyncmethods are present. Closes #8120
False Negatives Fixed
Code following a call to
quit,exit,sys.exitoros._exitwill be marked asunreachable. Refs #519Emit
used-before-assignmentwhen function arguments are redefined inside an inner function and accessed there before assignment. Closes #2374Fix a false negative for
unused-importwhen one module used an import in a type annotation that was also used in another module. Closes #4150Flag
superfluous-parensif parentheses are used during string concatenation. Closes #4792Emit
used-before-assignmentwhen relying on names only defined under conditions always testing false. Closes #4913consider-using-joincan now be emitted for non-empty string separators. Closes #6639Emit
used-before-assignmentfor further imports guarded byTYPE_CHECKINGPreviously, this message was only emitted for imports guarded directly underTYPE_CHECKING, not guarded two if-branches deep, nor whenTYPE_CHECKINGwas imported fromtypingunder an alias. Closes #7539Fix a false negative for
unused-importwhen a constant insidetyping.Annotatedwas treated as a reference to an import. Closes #7547consider-using-any-or-allmessage will now be raised in cases when boolean is initialized, reassigned during loop, and immediately returned. Closes #7699Extend
invalid-slice-indexto emit an warning for invalid slice indices used with string and byte sequences, and range objects. Refs #7762Fixes
unnecessary-list-index-lookupfalse negative whenenumerateis called withiterableas a kwarg. Closes #7770no-else-returnorno-else-raisewill be emitted ifexceptblock always returns or raises. Closes #7788Fix
dangerous-default-valuefalse negative when*is used. Closes #7818consider-using-withnow triggers forpathlib.Path.open. Closes #7964
Other Bug Fixes
Fix bug in detecting
unused-variablewhen iterating on variable. Closes #3044Fix bug in scanning of names inside arguments to
typing.Literal. See https://peps.python.org/pep-0586/#literals-enums-and-forward-references for details. Refs #3299Update
disallowed-namecheck to flag module-level variables. Closes #3701Pylint will no longer deadlock if a parallel job is killed but fail immediately instead. Closes #3899
Fix ignored files being linted when passed on stdin. Closes #4354
Fix
no-memberfalse negative when augmented assign is done manually, without+=. Closes #4562Any assertion on a populated tuple will now receive a
assert-on-tuplewarning. Closes #4655missing-return-doc,missing-raises-docandmissing-yields-docnow respect theno-docstring-rgxoption. Closes #4743Update
reimportedhelp message for clarity. Closes #4836consider-iterating-dictionarywill no longer be raised if bitwise operations are used. Closes #5478Using custom braces in
msg-templatewill now work properly. Closes #5636Pylint will now filter duplicates given to it before linting. The output should be the same whether a file is given/discovered multiple times or not. Closes #6242, #4053
Remove
__index__dunder method call fromunnecessary-dunder-callcheck. Closes #6795Fixed handling of
--as separator between positional arguments and flags. This was not actually fixed in 2.14.5. Closes #7003, Refs #7096Don't crash on
OSErrorin config file discovery. Closes #7169Messages sent to reporter are now copied so a reporter cannot modify the message sent to other reporters. Closes #7214
Fixed a case where custom plugins specified by command line could silently fail. Specifically, if a plugin relies on the
init-hookoption changingsys.pathbefore it can be imported, this will now emit abad-plugin-valuemessage. Before this change, it would silently fail to register the plugin for use, but would load any configuration, which could have unintended effects. Fixes part of #7264.Update
modified_iteratingchecker to fix a crash withforloops on empty list. Closes #7380Update wording for
arguments-differandarguments-renamedto clarify overriding object. Closes #7390disable-nextis now correctly scoped to only the succeeding line. Closes #7401Fixed a crash in the
unhashable-memberchecker when using alambdaas a dict key. Closes #7453Add
mailcapto deprecated modules list. Closes #7457Fix a crash in the
modified-iterating-dictchecker involving instance attributes. Closes #7461invalid-class-objectdoes not crash anymore when__class__is assigned alongside another variable. Closes #7467--help-msgnow accepts a comma-separated list of message IDs again. Closes #7471Allow specifying non-builtin exceptions in the
overgeneral-exceptionoption using an exception's qualified name. Closes #7495Report
no-self-argumentrather thanno-method-argumentfor methods with variadic arguments. Closes #7507Fixed an issue where
syntax-errorcouldn't be raised on files with invalid encodings. Closes #7522Fix false positive for
redefined-outer-namewhen aliasingtypinge.g. astand guarding imports undert.TYPE_CHECKING. Closes #7524Fixed a crash of the
modified_iteratingchecker when iterating on a set defined as a class attribute. Closes #7528Use
py-versionto determine if a message should be emitted for messages defined withmax-versionormin-version. Closes #7569Improve
bad-thread-instantiationcheck to warn iftargetis not passed in as a keyword argument or as a second argument. Closes #7570Fixes edge case of custom method named
nextraised an astroid error. Closes #7610Fixed a multi-processing crash that prevents using any more than 1 thread on MacOS. The returned module objects and errors that were cached by the linter plugin loader cannot be reliably pickled. This means that
dillwould throw an error when attempting to serialise the linter object for multi-processing use. Closes #7635.Fix crash that happened when parsing files with unexpected encoding starting with 'utf' like
utf13. Closes #7661Fix a crash when a child class with an
__init__method inherits from a parent class with an__init__class attribute. Closes #7742Fix
valid-metaclass-classmethod-first-argdefault config value from "cls" to "mcs" which would cause both a false-positive and false-negative. Closes #7782Fixes a crash in the
unnecessary_list_index_lookupcheck when usingenumeratewithstartand a class attribute. Closes #7821Fixes a crash in
stop-iteration-returnwhen thenextbuiltin is called without arguments. Closes #7828When pylint exit due to bad arguments being provided the exit code will now be the expected
32. Refs #7931Fixes a
ModuleNotFoundexception when running pylint on a Django project with thepylint_djangoplugin enabled. Closes #7938Fixed a crash when inferring a value and using its qname on a slice that was being incorrectly called. Closes #8067
Use better regex to check for private attributes. Refs #8081
Fix issue with new typing Union syntax in runtime context for Python 3.10+. Closes #8119
Other Changes
Pylint now provides basic support for Python 3.11. Closes #5920
Update message for
abstract-methodto include child class name. Closes #7124Update Pyreverse's dot and plantuml printers to detect when class methods are abstract and show them with italic font. For the dot printer update the label to use html-like syntax. Closes #7346
The
docparamsextension now considers typing in Numpy style docstrings as "documentation" for themissing-param-docmessage. Refs #7398Relevant
DeprecationWarningsare now raised withstacklevel=2, so they have the callsite attached in the message. Closes #7463Add a
minimaloption topylint-configand its toml generator. Closes #7485Add method name to the error messages of
no-method-argumentandno-self-argument. Closes #7507Prevent leaving the pip install cache in the Docker image. Refs #7544
Add a keyword-only
compare_constantsargument tosafe_infer. Refs #7626Add
default_enabledoption to optional message dict. Provides an option to disable a checker message by default. To use a disabled message, the user must enable it explicitly by adding the message to theenableoption. Refs #7629Sort
--generated-rcfileoutput. Refs #7655epylint is now deprecated and will be removed in pylint 3.0.0. All emacs and flymake related files were removed and their support will now happen in an external repository : https://github.com/emacsorphanage/pylint. Closes #7737
Adds test for existing preferred-modules configuration functionality. Refs #7957
Internal Changes
- Add and fix regression tests for plugin loading.
This shores up the tests that cover the loading of custom plugins as affected
by any changes made to the
sys.pathduring execution of aninit-hook. Given the existing contract of allowing plugins to be loaded by fiddling with the path in this way, this is now the last bit of work needed to close Github issue #7264. Closes #7264
- Python
Published by Pierre-Sassoulas over 3 years ago
pylint - v2.16.0b1
New beta release following a performance fix in the new pointless exception statement checks in https://github.com/PyCQA/pylint/issues/8073 and a false positive fixed in the unreleased consider-using-augmented-assign check in https://github.com/PyCQA/pylint/pull/8088. We're also using the latest version of astroid (2.13.3).
The complete changelog will be published when the actual 2.16.0 is released.
- Python
Published by Pierre-Sassoulas over 3 years ago
pylint - v2.16.0b0
This is the beta version of 2.16.0 the complete changelog will be published when the actual 2.16.0 is released.
In 2.16.0 we added aggregation and composition understanding in pyreverse, and a way to clear the cache in between run in server mode (originally for the VS Code integration). Apart from the bug fixes there's also a lot of new checks, and new extensions that have been asked for for a long time that were implemented.
If you want to benefit from all the new checks load the following plugins:
pylint.extensions.dict_init_mutate,
pylint.extensions.dunder,
pylint.extensions.typing,
pylint.extensions.magic_value,
We still welcome any community effort to help review, integrate, and add good/bad examples to the doc for https://github.com/PyCQA/pylint/issues/5953. This should be doable without any pylint or astroid knowledge, so this is the perfect entrypoint if you want to contribute to pylint or open source without any experience with our code!
Last but not least @clavedeluna and @nickdrozd became triagers, welcome to the team !
- Python
Published by Pierre-Sassoulas over 3 years ago
pylint - v2.15.10
False Positives Fixed
- Fix
use-sequence-for-iterationwhen unpacking a set with*.
Closes #5788
- Fix false positive
assigning-non-slotwhen a class attribute is re-assigned.
Closes #6001
- Fixes
used-before-assignmentfalse positive when the walrus operator is used in a ternary operator.
Closes #7779
- Prevent
used-before-assignmentwhen imports guarded byif TYPE_CHECKINGare guarded again when used.
Closes #7979
Other Bug Fixes
- Using custom braces in
msg-templatewill now work properly.
Closes #5636
- Python
Published by Pierre-Sassoulas over 3 years ago
pylint -
False Positives Fixed
- Fix false-positive for
used-before-assignmentin pattern matching with a guard.
Closes #5327
Other Bug Fixes
- Pylint will no longer deadlock if a parallel job is killed but fail immediately instead.
Closes #3899
- When pylint exit due to bad arguments being provided the exit code will now be the expected
32.
Refs #7931
- Fixes a
ModuleNotFoundexception when running pylint on a Django project with thepylint_djangoplugin enabled.
Closes #7938
- Python
Published by Pierre-Sassoulas over 3 years ago
pylint - v2.15.8
False Positives Fixed
- Document a known false positive for
useless-suppressionwhen disablingline-too-longin a module with only comments and no code.
Closes #3368
- Fix
logging-fstring-interpolationfalse positive raised when logging and f-string with%sformatting.
Closes #4984
- Fixes false positive
abstract-methodon Protocol classes.
Closes #7209
- Fix
missing-param-docfalse positive when function parameter has an escaped underscore.
Closes #7827
multiple-statementsno longer triggers for function stubs using inlined....
Closes #7860
- Python
Published by Pierre-Sassoulas over 3 years ago
pylint - v2.15.7
False Positives Fixed
- Fix
deprecated-methodfalse positive when alias for method is similar to name of deprecated method.
Closes #5886
- Fix a false positive for
used-before-assignmentfor imports guarded bytyping.TYPE_CHECKINGlater used in variable annotations.
Closes #7609
Other Bug Fixes
- Pylint will now filter duplicates given to it before linting. The output should be the same whether a file is given/discovered multiple times or not.
Closes #6242, #4053
- Fixes a crash in
stop-iteration-returnwhen thenextbuiltin is called without arguments.
Closes #7828
- Python
Published by Pierre-Sassoulas over 3 years ago
pylint - v2.15.6
False Positives Fixed
- Fix false positive for
unhashable-memberwhen subclassingdictand using the subclass as a dictionary key.
Closes #7501
unnecessary-list-index-lookupwill not be wrongly emitted ifenumerateis called withstart.
Closes #7682
- Don't warn about
stop-iteration-returnwhen usingnext()overitertools.cycle.
Closes #7765
Other Bug Fixes
- Messages sent to reporter are now copied so a reporter cannot modify the message sent to other reporters.
Closes #7214
- Fixes edge case of custom method named
nextraised an astroid error.
Closes #7610
- Fix crash that happened when parsing files with unexpected encoding starting
with 'utf' like
utf13.
Closes #7661
- Fix a crash when a child class with an
__init__method inherits from a parent class with an__init__class attribute.
Closes #7742
- Python
Published by Pierre-Sassoulas over 3 years ago
pylint - v2.15.5
What's new in Pylint 2.15.5?
Release date: 2022-10-21
False Positives Fixed
- Fix a false positive for
simplify-boolean-expressionwhen multiple values are inferred for a constant.
Closes #7626
Other Bug Fixes
- Remove
__index__dunder method call fromunnecessary-dunder-callcheck.
Closes #6795
- Fixed a multi-processing crash that prevents using any more than 1 thread on MacOS.
The returned module objects and errors that were cached by the linter plugin loader cannot be reliably pickled. This means that dill would throw an error when attempting to serialise the linter object for multi-processing use.
Closes #7635.
Other Changes
- Add a keyword-only
compare_constantsargument tosafe_infer.
Refs #7626
- Sort
--generated-rcfileoutput.
Refs #7655
- Python
Published by cdce8p over 3 years ago
pylint -
False Positives Fixed
- Fix the message for
unnecessary-dunder-callfor__aiter__and__anext__. Also only emit the warning whenpy-version>= 3.10.
Closes #7529
Other Bug Fixes
- Fix bug in detecting
unused-variablewhen iterating on variable.
Closes #3044
- Fixed handling of
--as separator between positional arguments and flags. This was not actually fixed in 2.14.5.
Closes #7003, Refs #7096
- Report
no-self-argumentrather thanno-method-argumentfor methods with variadic arguments.
Closes #7507
- Fixed an issue where
syntax-errorcouldn't be raised on files with invalid encodings.
Closes #7522
- Fix false positive for
redefined-outer-namewhen aliasingtypinge.g. astand guarding imports undert.TYPE_CHECKING.
Closes #7524
- Fixed a crash of the
modified_iteratingchecker when iterating on a set defined as a class attribute.
Closes #7528
- Fix bug in scanning of names inside arguments to
typing.Literal. See https://peps.python.org/pep-0586/#literals-enums-and-forward-references for details.
Refs #3299
Other Changes
- Add method name to the error messages of
no-method-argumentandno-self-argument.
Closes #7507
- Python
Published by Pierre-Sassoulas over 3 years ago
pylint -
- Fixed a crash in the
unhashable-memberchecker when using alambdaas a dict key.
Closes #7453
- Fix a crash in the modified-iterating-dict checker involving instance attributes.
Closes #7461
- invalid-class-object does not crash anymore when __class__ is assigned alongside another variable.
Closes #7467
- Fix false positive for global-variable-not-assigned when a global variable is re-assigned via an ImportFrom node.
Closes #4809
- Fix false positive for undefined-loop-variable in for-else loops that use a function
having a return type annotation of NoReturn or Never.
Closes #7311
- --help-msg now accepts a comma-separated list of message IDs again.
Closes #7471
- Python
Published by Pierre-Sassoulas over 3 years ago
pylint -
- Fixed a case where custom plugins specified by command line could silently fail.
Specifically, if a plugin relies on the init-hook option changing sys.path before
it can be imported, this will now emit a bad-plugin-value message. Before this
change, it would silently fail to register the plugin for use, but would load
any configuration, which could have unintended effects.
Fixes part of #7264.
- Fix used-before-assignment for functions/classes defined in type checking guard.
Closes #7368
- Update modified_iterating checker to fix a crash with for loops on empty list.
Closes #7380
- The docparams extension now considers typing in Numpy style docstrings
as "documentation" for the missing-param-doc message.
Refs #7398
- Fix false positive for unused-variable and unused-import when a name is only used in a string literal type annotation.
Closes #3299
- Fix false positive for too-many-function-args when a function call is assigned to a class attribute inside the class where the function is defined.
Closes #6592
- Fix used-before-assignment for functions/classes defined in type checking guard.
Closes #7368 - Fix ignored files being linted when passed on stdin.
Closes #4354
- missing-return-doc, missing-raises-doc and missing-yields-doc now respect
the no-docstring-rgx option.
Closes #4743
- Don't crash on OSError in config file discovery.
Closes #7169
- disable-next is now correctly scoped to only the succeeding line.
Closes #7401
- Update modified_iterating checker to fix a crash with for loops on empty list.
Closes #7380
- Python
Published by Pierre-Sassoulas over 3 years ago
pylint -
- Fix
used-before-assignmentfor functions/classes defined in type checking guard.
Closes #7368
- Update modified_iterating checker to fix a crash with for loops on empty list.
Closes #7380
- The docparams extension now considers typing in Numpy style docstrings
as "documentation" for the missing-param-doc message.
Refs #7398
- Fix false positive for unused-variable and unused-import when a name is only used in a string literal type annotation.
Closes #3299
- Fix false positive for too-many-function-args when a function call is assigned to a class attribute inside the class where the function is defined.
Closes #6592
- Fix used-before-assignment for functions/classes defined in type checking guard.
Closes #7368 - Fix ignored files being linted when passed on stdin.
Closes #4354
- missing-return-doc, missing-raises-doc and missing-yields-doc now respect
the no-docstring-rgx option.
Closes #4743
- Don't crash on OSError in config file discovery.
Closes #7169
- disable-next is now correctly scoped to only the succeeding line.
Closes #7401
- Update modified_iterating checker to fix a crash with for loops on empty list.
Closes #7380
- Python
Published by Pierre-Sassoulas over 3 years ago
pylint - v2.15.0
In pylint 2.15.0, we added a new check missing-timeout to warn of default timeout values that could cause a program to be hanging indefinitely.
We improved pylint's handling of namespace packages. More packages should be linted without resorting to using the --recursive=y option.
We still welcome any community effort to help review, integrate, and add good/bad examples to the doc for https://github.com/PyCQA/pylint/issues/5953. This should be doable without any pylint or astroid knowledge, so this is the perfect entrypoint if you want to contribute to pylint or open source without any experience with our code!
Internally, we changed the way we generate the release notes, thanks to DudeNr33. There will be no more conflict resolution to do in the changelog, and every contributor rejoice.
Marc Byrne became a maintainer, welcome to the team !
New Checks
- Added new checker
missing-timeoutto warn of default timeout values that could cause a program to be hanging indefinitely.
Refs #6780
False Positives Fixed
- Don't report
super-init-not-calledfor abstract__init__methods.
Closes #3975
- Don't report unsupported-binary-operation on Python <= 3.9 when using the | operator
with types, if one has a metaclass that overloads __or__ or __ror__ as appropriate.
Closes #4951
- Don't report no-value-for-parameter for dataclasses fields annotated with KW_ONLY.
Closes #5767
- Fixed inference of Enums when they are imported under an alias.
Closes #5776
- Prevent false positives when accessing PurePath.parents by index (not slice) on Python 3.10+.
Closes #5832
- unnecessary-list-index-lookup is now more conservative to avoid potential false positives.
Closes #6896
- Fix double emitting trailing-whitespace for multi-line docstrings.
Closes #6936
- import-error now correctly checks for contextlib.suppress guards on import statements.
Closes #7270
- Fix false positive for no-self-argument/no-method-argument when a staticmethod is applied to a function but uses a different name.
Closes #7300
- Fix undefined-loop-variable with break and continue statements in else blocks.
Refs #7311
False Negatives Fixed
- Emit
used-before-assignmentwhen relying on a name that is reimported later in a function.
Closes #4624
- Emit used-before-assignment for self-referencing named expressions (:=) lacking
prior assignments.
Closes #5653
- Emit used-before-assignment for self-referencing assignments under if conditions.
Closes #6643
- Emit modified-iterating-list and analogous messages for dicts and sets when iterating
literals, or when using the del keyword.
Closes #6648
- Emit used-before-assignment when calling nested functions before assignment.
Closes #6812
- Emit nonlocal-without-binding when a nonlocal name has been assigned at a later point in the same scope.
Closes #6883
- Emit using-constant-test when testing the truth value of a variable or call result
holding a generator.
Closes #6909
- Rename unhashable-dict-key to unhashable-member and emit when creating sets and dicts,
not just when accessing dicts.
Closes #7034, Closes #7055
Other Bug Fixes
- Fix a failure to lint packages with
__init__.pycontained in directories lacking__init__.py.
Closes #1667
- Fixed a syntax-error crash that was not handled properly when the declared encoding of a file
was utf-9.
Closes #3860
- Fix a crash in the not-callable check when there is ambiguity whether an instance is being incorrectly provided to __new__().
Closes #7109
- Fix crash when regex option raises a re.error exception.
Closes #7202
- Fix undefined-loop-variable from walrus in comprehension test.
Closes #7222
- Check for <cwd> before removing first item from sys.path in modify_sys_path.
Closes #7231 - Fix sys.path pollution in parallel mode.
Closes #7246
- Prevent useless-parent-delegation for delegating to a builtin
written in C (e.g. Exception.__init__) with non-self arguments.
Closes #7319
Other Changes
bad-exception-contexthas been renamed tobad-exception-causeas it is about the cause and not the context.
Closes #3694
- The message for literal-comparison is now more explicit about the problem and the
solution.
Closes #5237
- useless-super-delegation has been renamed to useless-parent-delegation in order to be more generic.
Closes #6953
- Pylint now uses towncrier for changelog generation.
Refs #6974
- Update astroid to 2.12.
Refs #7153
- Fix crash when a type-annotated __slots__ with no value is declared.
Closes #7280
Internal Changes
- Fixed an issue where it was impossible to update functional tests output when the existing output was impossible to parse. Instead of raising an error we raise a warning message and let the functional test fail with a default value.
Refs #6891
- pylint.testutils.primer is now a private API.
Refs #6905 - We changed the way we handle the changelog internally by using towncrier. If you're a contributor you won't have to fix merge conflicts in the changelog anymore.
Closes #6974
- Pylint is now using Scorecards to implement security recommendations from the
OpenSSF <https://openssf.org/>_. This is done in order to secure our supply chains using a combination
of automated tooling and best practices, most of which were already implemented before.
Refs #7267
- Python
Published by Pierre-Sassoulas almost 4 years ago
pylint -
- Fixed a crash in the
undefined-loop-variablecheck whenenumerate()is used in a ternary expression.
Closes #7131
- Fixed handling of
--as separator between positional arguments and flags.
Closes #7003
Fixed the disabling of
fixmeand its interaction withuseless-suppression.Allow lists of default values in parameter documentation for
Numpystyle.
Closes #4035
- Python
Published by Pierre-Sassoulas almost 4 years ago
pylint -
- The
differing-param-doccheck was triggered by positional only arguments.
Closes #6950
- Fixed an issue where scanning
.directory recursively with--ignore-path=^path/to/diris not ignoring thepath/to/dirdirectory.
Closes #6964
- Fixed regression that didn't allow quoted
init-hooksin option files.
Closes #7006
- Fixed a false positive for
modified-iterating-dictwhen updating an existing key.
Closes #6179
- Fixed an issue where many-core Windows machines (>~60 logical processors) would hang when using the default jobs count.
Closes #6965
- Fixed an issue with the recognition of
setup.cfgfiles. Only.cfgfiles that are exactly namedsetup.cfgrequire section names that start withpylint..
Closes #3630
- Don't report
import-private-namefor relative imports.
Closes #7078
- Python
Published by Pierre-Sassoulas almost 4 years ago
pylint -
- Fixed two false positives for
bad-super-callfor calls that refer to a non-direct parent.
Closes #4922, Closes #2903
- Fixed a false positive for
useless-super-delegationfor subclasses that specify the number of of parameters against a parent that uses a variadic argument.
Closes #2270
Allow suppressing
undefined-loop-variableandundefined-variablewithout raisinguseless-suppression.Fixed false positive for
undefined-variablefor__class__in inner methods.
Closes #4032
- Python
Published by Pierre-Sassoulas almost 4 years ago
pylint -
- Fixed a false positive for
unused-variablewhen a function returns anargparse.Namespaceobject.
Closes #6895
Avoided raising an identical
undefined-loop-variablemessage twice on the same line.Don't crash if
lint.run._query_cpu()is run within a Kubernetes Pod, that has only a fraction of a cpu core assigned. Just go with one process then.
Closes #6902
- Fixed a false positive in
consider-using-f-stringif the left side of a%is not a string.
Closes #6689
- Fixed a false positive in
unnecessary-list-index-lookupandunnecessary-dict-index-lookupwhen the subscript is updated in the body of a nested loop.
Closes #6818
- Fixed an issue with multi-line
init-hookoptions which did not record the line endings.
Closes #6888
Fixed a false positive for
used-before-assignmentwhen a try block returns but an except handler defines a name via type annotation.--errors-onlyno longer enables previously disabled messages. It was acting as "emit all and only error messages" without being clearly documented that way.
Closes #6811
- Python
Published by Pierre-Sassoulas almost 4 years ago
pylint -
- Avoid reporting
unnecessary-dict-index-lookuporunnecessary-list-index-lookupwhen the index lookup is part of a destructuring assignment.
Closes #6788
- Fixed parsing of unrelated options in
tox.ini.
Closes #6800
- Fixed a crash when linting
__new__()methods that return a call expression.
Closes #6805
- Don't crash if we can't find the user's home directory.
Closes #6802
- Fixed false positives for
unused-importwhen aliasingtypinge.g. astand guarding imports undert.TYPE_CHECKING.
Closes #3846
- Fixed a false positive regression in 2.13 for
used-before-assignmentwhere it is safe to rely on a name defined only in anexceptblock because theelseblock returned.
Closes #6790
- Fixed the use of abbreviations for some special options on the command line.
Closes #6810
- Fix a crash in the optional
pylint.extensions.private_importextension.
Closes #6624
bad-option-value(E0012) is now a warningunknown-option-value(W0012). Deleted messages that do not exist anymore in pylint now raiseuseless-option-value(R0022) instead ofbad-option-value. This allows to distinguish between genuine typos and configuration that could be cleaned up. Existing message disables forbad-option-valuewill still work on both new messages.
Refs #6794
- Python
Published by Pierre-Sassoulas almost 4 years ago
pylint -
This is 2.14.0 with breaking changes for 3.0 included. Released only so that the old alpha 4 release based on pylint 2.9.0 is not proposed by tools instead of 2.14.0. 2.14.0 is the stable version you should use that.
- Python
Published by Pierre-Sassoulas about 4 years ago
pylint -
Summary -- Release highlights
With 2.14 pylint only supports Python version 3.7.2 and above.
We introduced several new checks among which duplicate-value for sets,
comparison-of-constants, and checks related to lambdas. We removed no-init and
made no-self-use optional as they were too opinionated. We also added an option
to generate a toml configuration: --generate-toml-config.
We migrated to argparse from optparse and refactored the configuration handling
thanks to Daniël van Noord. On the user side it should change the output of the
--help command, and some inconsistencies and bugs should disappear. The behavior
between options set in a config file versus on the command line will be more consistent. For us,
it will permit to maintain this part of the code easily in the future and anticipate
optparse's removal in Python 3.12.
As a result of the refactor there are a lot of internal deprecations. If you're a library maintainer that depends on pylint, please verify that you're ready for pylint 3.0 by activating deprecation warnings.
We continued the integration of pylint-error and are now at 33%!. We still welcome
any community effort to help review, integrate, and add good/bad examples in #5953.
This should be doable without any pylint or astroid knowledge, so this is the perfect
entrypoint if you want to contribute to pylint or open source without any experience
with our code!
New checkers
- Added new checker
comparison-of-constants.
Closes #6076
- Added new checker
typevar-name-mismatch: TypeVar must be assigned to a variable with the same name as its name argument.
Closes #5224
invalid-enum-extension: Used when a class tries to extend an inherited Enum class.
Closes #5501
- Added new checker
typevar-double-variance: The "covariant" and "contravariant" keyword arguments cannot both be set to "True" in a TypeVar.
Closes #5895
- Add new check
unnecessary-dunder-callfor unnecessary dunder method calls.
Closes #5936
unnecessary-lambda-assignment: Lambda expression assigned to a variable. Define a function using the "def" keyword instead.unnecessary-direct-lambda-call: Lambda expression called directly. Execute the expression inline instead.
Closes #5976
potential-index-error: Emitted when the index of a list or tuple exceeds its length. This checker is currently quite conservative to avoid false positives. We welcome suggestions for improvements.
Closes #578
- Added new checker
unnecessary-list-index-lookupfor indexing into a list while iterating overenumerate().
Closes #4525
- Added new message called
duplicate-valuewhich identifies duplicate values inside sets.
Closes #5880
- Added the
super-without-bracketschecker, raised when a super call is missing its brackets.
Closes #4008
Removed checkers
- The
no-init(W0232) warning has been removed. It's ok to not have an__init__in a class.
Closes #2409
- Removed the
assign-to-new-keywordmessage as there are no new keywords in the supported Python versions any longer.
Closes #4683
- Moved
no-self-usecheck to optional extension. You now need to explicitly enable this check usingload-plugins=pylint.extensions.no_self_use.
Closes #5502
Extensions
RedefinedLoopNameChecker- Added optional extension
redefined-loop-nameto emit messages when a loop variable is redefined in the loop body.
- Added optional extension
Closes #5072
DocStringStyleChecker- Re-enable checker
bad-docstring-quotesfor Python <= 3.7.
- Re-enable checker
Closes #6087
NoSelfUseChecker- Added
no-self-usecheck, previously enabled by default.
- Added
Closes #5502
Other Changes
- Started ignoring underscore as a local variable for
too-many-locals.
Closes #6488
- Pylint can now be installed with an extra-require called
spelling(pip install pylint[spelling]). This will addpyenchantto pylint's dependencies. You will still need to install the requirements forpyenchant(theenchantlibrary and any dictionaries) yourself. You will also need to set thespelling-dictoption.
Refs #6462
- Improved wording of the message of
deprecated-module
Closes #6169
Pylintnow requires Python 3.7.2 or newer to run.
Closes #4301
We made a greater effort to reraise failures stemming from the
astroidlibrary asAstroidError, with the effect that pylint emitsastroid-errorrather than merelyfatal. Regardless, please report any such issues you encounter!We have improved our recognition of inline disable and enable comments. It is now possible to disable
bad-option-valueinline (as long as you disable it before the bad option value is raised, i.e.disable=bad-option-value,bad-messagenotdisable=bad-message,bad-option-value) as well as certain other previously unsupported messages.
Closes #3312
- The main checker name is now
maininstead ofmaster. The configuration does not need to be updated as sections' name are optional.
Closes #5467
- Update
invalid-slots-objectmessage to show bad object rather than its inferred value.
Closes #6101
- Fixed a crash in the
not-an-iterablechecker involving multiple starred expressions inside a call.
Closes #6372
- Fixed a crash in the
unused-private-memberchecker involving chained private attributes.
Closes #6709
- Disable spellchecking of mypy rule names in ignore directives.
Closes #5929
implicit-str-concatwill now be raised on calls likeopen("myfile.txt" "a+b")too.
Closes #6441
Fix a failure to respect inline disables for
fixmeoccurring on the last line of a module when pylint is launched with--enable=fixme.Removed the broken
generate-manoption.
Closes #5283 Closes #1887
Fixed failure to enable
deprecated-moduleafter adisable=allby makingImportsCheckersolely responsible for emittingdeprecated-moduleinstead of sharing responsibility withStdlibChecker. (This could have led to double messages.)Added the
generate-toml-configoption.
Refs #5462
bad-option-valuewill be emitted whenever a configuration value or command line invocation includes an unknown message.
Closes #4324
- Added the
unrecognized-optionmessage. Raised if we encounter any unrecognized options.
Closes #5259
Fix false negative for
bad-string-format-typeif the value to be formatted is passed in as a variable holding a constant.The concept of checker priority has been removed.
The
cache-max-size-nonechecker has been renamed tomethod-cache-max-size-none.
Closes #5670
- The
method-cache-max-size-nonechecker will now also checkfunctools.cache.
Closes #5670
BaseCheckerclasses now require thelinterargument to be passed.The
set_config_directlydecorator has been removed.Don't report
useless-super-delegationfor the__hash__method in classes that also override the__eq__method.
Closes #3934
- Fix falsely issuing
useless-suppressionon thewrong-import-positionchecker.
Closes #5219
- Fixed false positive
no-memberfor Enums with self-defined members.
Closes #5138
- Fix false negative for
no-memberwhen attempting to assign an instance attribute to itself without any prior assignment.
Closes #1555
- Changed message type from
redefined-outer-nametoredefined-loop-name(optional extension) for redefinitions of outer loop variables by inner loops.
Closes #5608
By default the similarity checker will now ignore imports and ignore function signatures when computing duplication. If you want to keep the previous behaviour set
ignore-importsandignore-signaturestoFalse.Pylint now expands the user path (i.e.
~tohome/yusef/) and expands environment variables (i.e.home/$USER/$projecttohome/yusef/pylintforUSER=yusefandproject=pylint) for pyreverse'soutput-directory,import-graph,ext-import-graph,int-import-graphoptions, and the spell checker'sspelling-private-dict-fileoption.
Refs #6493
- Don't emit
unsubscriptable-objectfor string annotations. Pylint doesn't check if class is only generic in type stubs only.
Closes #4369 and #6523
- Fix pyreverse crash
RuntimeError: dictionary changed size during iteration
Refs #6612
- Fix syntax for return type annotations in MermaidJS diagrams produced with
pyreverse.
Closes #6467
Fix type annotations of class and instance attributes using the alternative union syntax in
pyreversediagrams.Fix bug where it writes a plain text error message to stdout, invalidating output formats.
Closes #6597
- The refactoring checker now also raises 'consider-using-a-generator' messages for
max(),min()andsum().
Refs #6595
Update ranges for
using-constant-testandmissing-parentheses-for-call-in-testerror messages.Don't emit
no-memberinside type annotations withfrom __future__ import annotations.
Closes #6594
- Fix
unexpected-special-method-signaturefalse positive for__init_subclass__methods with one or more arguments.
Closes #6644
Deprecations
- The
ignore-mixin-membersoption has been deprecated. You should now use the newignored-checks-for-mixinsoption.
Closes #5205
interfaces.implementshas been deprecated and will be removed in 3.0. Please use standard inheritance patterns instead of__implements__.
Refs #2287
- All
Interfaceclasses inpylint.interfaceshave been deprecated. You can subclass the respective normal classes to get the same behaviour. The__implements__functionality was based on a rejected PEP from 2001: https://peps.python.org/pep-0245/
Closes #2287
MapReduceMixinhas been deprecated.BaseCheckernow implementsget_map_dataandreduce_map_data. If a checker actually needs to reduce data it should defineget_map_dataas returning something different thanNoneand let itsreduce_map_datahandle a list of the types returned byget_map_data. An example can be seen by looking atpylint/checkers/similar.py.The
configattribute ofBaseCheckerhas been deprecated. You can usechecker.linter.configto access the global configuration object instead of a checker-specific object.
Refs #5392
- The
levelattribute ofBaseCheckerhas been deprecated: everything is now displayed in--help, all the time.
Refs #5392
- The
set_optionmethod ofBaseCheckerhas been deprecated. You can usechecker.linter.set_optionto set an option on the global configuration object instead of a checker-specific object.
Refs #5392
- The
options_providersattribute ofArgumentsManagerhas been deprecated.
Refs #5392
- Fix saving of persistent data files in environments where the user's cache directory and the linted file are on a different drive.
Closes #6394
The
method-cache-max-size-nonechecker will now also checkfunctools.cache.The
configattribute ofPyLinteris now of theargparse.Namespacetype instead ofoptparse.Values.
Refs #5392
UnsupportedActionhas been deprecated.
Refs #5392
OptionsManagerMixInhas been deprecated.
Refs #5392
OptionParserhas been deprecated.
Refs #5392
Optionhas been deprecated.
Refs #5392
OptionsProviderMixInhas been deprecated.
Refs #5392
ConfigurationMixInhas been deprecated.The
option_groupsattribute ofPyLinterhas been deprecated.
Refs #5392
get_global_confighas been deprecated. You can now access all global options fromchecker.linter.config.
Refs #5392
OptionsManagerMixInhas been replaced withArgumentsManager.ArgumentsManageris considered private API and most methods that were public onOptionsManagerMixInhave now been deprecated and will be removed in a future release.
Refs #5392
OptionsProviderMixInhas been replaced withArgumentsProvider.ArgumentsProvideris considered private API and most methods that were public onOptionsProviderMixInhave now been deprecated and will be removed in a future release.
Refs #5392
pylint.pyreverse.ASTWalkerhas been removed, as it was only used internally by a single child class.
Refs #6712
pyreverse: Resolving and displaying implemented interfaces that are defined by the__implements__attribute has been deprecated and will be removed in 3.0.
Refs #6713
is_class_subscriptable_pep585_with_postponed_evaluation_enabledhas been deprecated. Useis_postponed_evaluation_enabled(node) and is_node_in_type_annotation_context(node)instead.
Refs #6536
- Python
Published by Pierre-Sassoulas about 4 years ago
pylint -
2.13.9 is the last release supporting python interpreter between 3.6.2 and 3.7.2.
- Respect ignore configuration options with
--recursive=y.
Closes #6471
- Fix false positives for
no-name-in-moduleandimport-errorfornumpy.distutilsandpydantic.
Closes #6497
- Fix
IndexErrorcrash inuninferable_final_decoratorsmethod.
Relates to #6531
- Fix a crash in
unnecessary-dict-index-lookupwhen subscripting an attribute.
Closes #6557
- Fix a crash when accessing
__code__and assigning it to a variable.
Closes #6539
- Fix a false positive for
undefined-loop-variablewhen usingenumerate().
Closes #6593
- Python
Published by Pierre-Sassoulas about 4 years ago
pylint - 2.14.0-b1
Provisional changelog for 2.14.0:
- We have improved our recognition of inline disable and enable comments. It is
now possible to disable
bad-option-valueinline (as long as you disable it before the bad option value is raised, i.e.disable=bad-option-value,bad-messagenotdisable=bad-message,bad-option-value) as well as certain other previously unsupported messages.
Closes #3312
- Added new checker
comparison-of-constants.
Closes #6076
- Started ignoring underscore as a local variable for
too-many-locals.
Closes #6488
- Improved wording of the message of
deprecated-module
Closes #6169
Pylintnow requires Python 3.7.2 or newer to run.
Closes #4301
BaseCheckerclasses now require thelinterargument to be passed.Fix a failure to respect inline disables for
fixmeoccurring on the last line of a module when pylint is launched with--enable=fixme.Update
invalid-slots-objectmessage to show bad object rather than its inferred value.
Closes #6101
- The main checker name is now
maininstead ofmaster. The configuration does not need to be updated as sections' name are optional.
Closes #5467
- Added new checker
typevar-name-mismatch: TypeVar must be assigned to a variable with the same name as its name argument.
Closes #5224
- Pylint can now be installed with an extra-require called
spelling(pip install pylint[spelling]). This will addpyenchantto pylint's dependencies. You will still need to install the requirements forpyenchant(theenchantlibrary and any dictionaries) yourself. You will also need to set thespelling-dictoption.
Refs #6462
- Removed the
assign-to-new-keywordmessage as there are no new keywords in the supported Python versions any longer.
Closes #4683
- Fixed a crash in the
not-an-iterablechecker involving multiple starred expressions inside a call.
Closes #6372
Fixed failure to enable
deprecated-moduleafter adisable=allby makingImportsCheckersolely responsible for emittingdeprecated-moduleinstead of sharing responsibility withStdlibChecker. (This could have led to double messages.)The
no-init(W0232) warning has been removed. It's ok to not have an__init__in a class.
Closes #2409
- The
configattribute ofBaseCheckerhas been deprecated. You can usechecker.linter.configto access the global configuration object instead of a checker-specific object.
Ref #5392
- The
levelattribute ofBaseCheckerhas been deprecated: everything is now displayed in--help, all the time.
Ref #5392
- The
options_providersattribute ofArgumentsManagerhas been deprecated.
Ref #5392
- The
option_groupsattribute ofPyLinterhas been deprecated.
Ref #5392
- All
Interfaceclasses inpylint.interfaceshave been deprecated. You can subclass the respective normal classes to get the same behaviour. The__implements__functionality was based on a rejected PEP from 2001: https://peps.python.org/pep-0245/
Closes #2287
- The
set_optionmethod ofBaseCheckerhas been deprecated. You can usechecker.linter.set_optionto set an option on the global configuration object instead of a checker-specific object.
Ref #5392
implicit-str-concatwill now be raised on calls likeopen("myfile.txt" "a+b")too.
Closes #6441
- The
configattribute ofPyLinteris now of theargparse.Namespacetype instead ofoptparse.Values.
Ref #5392
MapReduceMixinhas been deprecated.BaseCheckernow implementsget_map_dataandreduce_map_data. If a checker actually needs to reduce data it should defineget_map_dataas returning something different thanNoneand let itsreduce_map_datahandle a list of the types returned byget_map_data. An example can be seen by looking atpylint/checkers/similar.py.UnsupportedActionhas been deprecated.
Ref #5392
OptionsManagerMixInhas been deprecated.
Ref #5392
OptionParserhas been deprecated.
Ref #5392
Optionhas been deprecated.
Ref #5392
OptionsProviderMixInhas been deprecated.
Ref #5392
ConfigurationMixInhas been deprecated.
Ref #5392
get_global_confighas been deprecated. You can now access all global options fromchecker.linter.config.
Ref #5392
OptionsManagerMixInhas been replaced withArgumentsManager.ArgumentsManageris considered private API and most methods that were public onOptionsManagerMixInhave now been deprecated and will be removed in a future release.
Ref #5392
OptionsProviderMixInhas been replaced withArgumentsProvider.ArgumentsProvideris considered private API and most methods that were public onOptionsProviderMixInhave now been deprecated and will be removed in a future release.
Ref #5392
interfaces.implementshas been deprecated and will be removed in 3.0. Please use standard inheritance patterns instead of__implements__.
Ref #2287
invalid-enum-extension: Used when a class tries to extend an inherited Enum class.
Closes #5501
- Added the
unrecognized-optionmessage. Raised if we encounter any unrecognized options.
Closes #5259
- Added new checker
typevar-double-variance: The "covariant" and "contravariant" keyword arguments cannot both be set to "True" in a TypeVar.
Closes #5895
- Re-enable checker
bad-docstring-quotesfor Python <= 3.7.
Closes #6087
- Removed the broken
generate-manoption.
Closes #5283 Closes #1887
Fix false negative for
bad-string-format-typeif the value to be formatted is passed in as a variable holding a constant.Add new check
unnecessary-dunder-callfor unnecessary dunder method calls.
Closes #5936 Closes #6074
- The
cache-max-size-nonechecker has been renamed tomethod-cache-max-size-none.
Closes #5670
- The
method-cache-max-size-nonechecker will now also checkfunctools.cache.
Closes #5670
unnecessary-lambda-assignment: Lambda expression assigned to a variable. Define a function using the "def" keyword instead.unnecessary-direct-lambda-call: Lambda expression called directly. Execute the expression inline instead.
Closes #5976
potential-index-error: Emitted when the index of a list or tuple exceeds its length. This checker is currently quite conservative to avoid false positives. We welcome suggestions for improvements.
Closes #578
- Added optional extension
redefined-loop-nameto emit messages when a loop variable is redefined in the loop body.
Closes #5072
- Changed message type from
redefined-outer-nametoredefined-loop-name(optional extension) for redefinitions of outer loop variables by inner loops.
Closes #5608
- The
ignore-mixin-membersoption has been deprecated. You should now use the newignored-checks-for-mixinsoption.
Closes #5205
bad-option-valuewill be emitted whenever a configuration value or command line invocation includes an unknown message.
Closes #4324
- Avoid reporting
superfluous-parenson expressions using theis notoperator.
Closes #5930
- Added the
super-without-bracketschecker, raised when a super call is missing its brackets.
Closes #4008
- Added the
generate-toml-configoption.
Ref #5462
- Added new checker
unnecessary-list-index-lookupfor indexing into a list while iterating overenumerate().
Closes #4525
- Fix falsely issuing
useless-suppressionon thewrong-import-positionchecker.
Closes #5219
- Fixed false positive
no-memberfor Enums with self-defined members.
Closes #5138
- Fix false negative for
no-memberwhen attempting to assign an instance attribute to itself without any prior assignment.
Closes #1555
The concept of checker priority has been removed.
Add a new command line option
--minimal-messages-configforpytest, which disables all irrelevant messages when running the functional tests.duplicate-argument-namenow only raises once for each set of duplicated arguments.Fix bug where specifically enabling just
await-outside-asyncwas not possible.The
set_config_directlydecorator has been removed.Added new message called
duplicate-valuewhich identifies duplicate values inside sets.
Closes #5880
- Pylint now expands the user path (i.e.
~tohome/yusef/) and expands environment variables (i.e.home/$USER/$projecttohome/yusef/pylintforUSER=yusefandproject=pylint) for pyreverse'soutput-directory,import-graph,ext-import-graph,int-import-graphoptions, and the spell checker'sspelling-private-dict-fileoption.
Relates to #6493
- Created
NoSelfUseCheckerextension and moved theno-self-usecheck. You now need to explicitly enable this check usingload-plugins=pylint.extensions.no_self_use.
Closes #5502
- Fix saving of persistent data files in environments where the user's cache directory and the linted file are on a different drive.
Closes #6394
- Don't emit
unsubscriptable-objectfor string annotations. Pylint doesn't check if class is only generic in type stubs only.
Closes #4369 and #6523
is_class_subscriptable_pep585_with_postponed_evaluation_enabledhas been deprecated. Usesubscriptable_with_postponed_evaluation_enabledinstead.
Ref #6536
- Python
Published by Pierre-Sassoulas about 4 years ago
pylint -
- Fix a false positive for
undefined-loop-variablefor a variable used in a lambda inside the first of multiple loops.
Closes #6419
- Fix a crash when linting a file that passes an integer
mode=toopen
Closes #6414
- Avoid reporting
superfluous-parenson expressions using theis notoperator.
Closes #5930
- Fix a false positive for
undefined-loop-variablewhen theelseof aforloop raises or returns.
Closes #5971
- Fix false positive for
unused-variablefor classes inside functions and where a metaclass is provided via a call.
Closes #4020
- Fix false positive for
unsubscriptable-objectin Python 3.8 and below for statements guarded byif TYPE_CHECKING.
Closes #3979
- Python
Published by Pierre-Sassoulas about 4 years ago
pylint -
- Fix a crash caused by using the new config from 2.14.0 in 2.13.x code.
Closes #6408
- Python
Published by Pierre-Sassoulas about 4 years ago
pylint -
- Fix a crash in the
unsupported-membership-testchecker when assigning multiple constants to class attributes including__iter__via unpacking.
Closes #6366
- Asterisks are no longer required in Sphinx and Google style parameter documentation
for
missing-param-docand are parsed correctly.
Closes #5815 Closes #5406
- Fixed a false positive for
unused-variablewhen a builtin specified in--additional-builtinsis given a type annotation.
Closes #6388
- Fixed an
AstroidErrorin 2.13.0 raised by theduplicate-codechecker withignore-importsorignore-signaturesenabled.
Closes #6301
- Python
Published by Pierre-Sassoulas about 4 years ago
pylint -
- Fix false positive regression in 2.13.0 for
used-before-assignmentfor homonyms between variable assignments in try/except blocks and variables in subscripts in comprehensions.
Closes #6069 Closes #6136
lru-cache-decorating-methodhas been renamed tocache-max-size-noneand will only be emitted whenmaxsizeisNone.
Closes #6180
- Fix false positive for
unused-importwhen disabling bothused-before-assignmentandundefined-variable.
Closes #6089
Narrow the scope of the
unnecessary-ellipsischecker to:- functions & classes which contain both a docstring and an ellipsis.
- A body which contains an ellipsis
nodes.Exprnode & at least one other statement.
Fix false positive for
used-before-assignmentfor assignments taking place via nonlocal declarations after an earlier type annotation.
Closes #5394
- Fix crash for
redefined-slots-in-subclasswhen the type of the slot is not a const or a string.
Closes #6100
- Only raise
not-callablewhen all the inferred values of a property are not callable.
Closes #5931
- Fix a false negative for
subclassed-final-classwhen a set of other messages were disabled.
- Python
Published by Pierre-Sassoulas about 4 years ago
pylint -
- Fix false positive regression in 2.13.0 for
used-before-assignmentfor homonyms between variable assignments in try/except blocks and variables in a comprehension's filter.
Closes #6035
- Include
testing_pylintrcin source and wheel distributions.
Closes #6028
- Fix crash in
super-init-not-calledchecker when usingctypes.Union.
Closes #6027
- Fix crash for
unneccessary-ellipsischecker when an ellipsis is used inside of a container or a lambda expression.
Closes #6036 Closes #6037 Closes #6048
- Python
Published by Pierre-Sassoulas about 4 years ago
pylint -
- Fix false positive for
unnecessary-ellipsiswhen using an ellipsis as a default argument.
Closes #5973
- Fix crash involving unbalanced tuple unpacking.
Closes #5998
- Fix false positive for 'nonexistent-operator' when repeated '-' are separated (e.g. by parens).
Closes #5769
- Python
Published by Pierre-Sassoulas about 4 years ago
pylint -
- Fix crash when subclassing a
namedtuple.
Closes #5982
- Fix false positive for
superfluous-parensfor patterns like "return (a or b) in iterable".
Closes #5803
- Fix a false negative regression in 2.13.0 where
protected-accesswas not raised on functions.
Fixes #5989
- Better error messages in case of crash if pylint can't write the issue template.
Refer to #5987
- Python
Published by Pierre-Sassoulas about 4 years ago
pylint -
- Fix a regression in 2.13.0 where
used-before-assignmentwas emitted for the usage of a nonlocal in a try block.
Fixes #5965
- Avoid emitting
raising-bad-typewhen there is inference ambiguity on the variable being raised.
Closes #2793
- Loosen TypeVar default name pattern a bit to allow names with multiple uppercase
characters. E.g.
HVACModeTorIPAddressT.
Closes #5981
- Fixed false positive for
unused-argumentwhen anonlocalname is used in a nested function that is returned without being called by its parent.
Closes #5187
- Fix program crash for
modified_iterating-list/set/dictwhen the list/dict/set being iterated through is a function call.
Closes #5969
- Don't emit
broken-noreturnandbroken-collections-callableerrors insideif TYPE_CHECKINGblocks.
- Python
Published by Pierre-Sassoulas about 4 years ago
pylint - 2.13.0
Add missing dunder methods to
unexpected-special-method-signaturecheck.No longer emit
no-memberin for loops that referenceselfif the binary operation that started the for loop uses aselfthat is encapsulated in tuples or lists.
Ref PyCQA/astroid#1360 Closes #4826
- Output better error message if unsupported file formats are used with
pyreverse.
Closes #5950
Fix pyreverse diagrams type hinting for classmethods and staticmethods.
Fix pyreverse diagrams type hinting for methods returning None.
Fix matching
--notesoptions that end in a non-word character.
Closes #5840
- Updated the position of messages for class and function defintions to no longer cover
the complete definition. Only the
deforclass+ the name of the class/function are covered.
Closes #5466
using-f-string-in-unsupported-versionandusing-final-decorator-in-unsupported-versionmsgids were renamed fromW1601andW1602toW2601andW2602. Disabling using these msgids will break. This is done in order to restore consistency with the already existing msgids forapply-builtinandbasestring-builtinfrom the now deleted python 3K+ checker. There is now a check that we're not using existing msgids or symbols from deleted checkers.
Closes #5729
The line numbering for messages related to function arguments is now more accurate. This can require some message disables to be relocated to updated positions.
Add
--recursiveoption to allow recursive discovery of all modules and packages in subtree. Running pylint with--recursive=yoption will check all discovered.pyfiles and packages found inside subtree of directory provided as parameter to pylint.
Closes #352
- Add
modified-iterating-list,modified-iterating-dictandmodified-iterating-set, emitted when items are added to or removed from respectively a list, dictionary or set being iterated through.
Closes #5348
- Fix false-negative for
assignment-from-nonechecker using list.sort() method.
closes #5722
- New extension
import-private-name: indicate imports of external private packages and objects (prefixed with_). It can be loaded usingload-plugins=pylint.extensions.private_import.
Closes #5463
- Fixed crash from
arguments-differandarguments-renamedwhen methods were defined outside the top level of a class.
Closes #5648
- Removed the deprecated
check_docsextension. You can use thedocparamschecker to get the checks previously included incheck_docs.
Closes #5322
- Added a
testutilextra require to the packaging, asgitpythonshould not be a dependency all the time but is still required to use the primer helper code inpylint.testutil. You can install it withpip install pylint[testutil].
Closes #5486
- Reinstated checks from the python3 checker that are still useful for python 3
(
eq-without-hash). This is now in thepylint.extensions.eq_without_hashoptional extension.
Closes #5025
- Fixed an issue where
ungrouped-importscould not be disabled without raisinguseless-suppression.
Ref #2366
Added several checkers to deal with unicode security issues (see
Trojan Sources <https://trojansource.codes/>_ andPEP 672 <https://www.python.org/dev/peps/pep-0672/>_ for details) that also concern the readability of the code. In detail the following checks were added:bad-file-encodingchecks that the file is encoded in UTF-8 as suggested byPEP8 <https://www.python.org/dev/peps/pep-0008/#id20>. UTF-16 and UTF-32 arenot supported by Python <https://bugs.python.org/issue1503789>at the moment. If this ever changesinvalid-unicode-codecchecks that they aren't used, to allow for backwards compatibility.bidirectional-unicodechecks for bidirectional unicode characters that could make code execution different than what the user expects.invalid-character-backspace,invalid-character-carriage-return,invalid-character-sub,invalid-character-esc,invalid-character-zero-width-spaceandinvalid-character-nulto check for possibly harmful unescaped characters.
Closes #5281
- Use the
tomlipackage instead oftomlto parse.tomlfiles.
Closes #5885
- Fix false positive - Allow unpacking of
selfin a subclass oftyping.NamedTuple.
Closes #5312
- Fixed false negative
unpacking-non-sequencewhen value is an empty list.
Closes #5707
- Better warning messages for useless else or elif when a function returns early.
Closes #5614
- Fixed false positive
consider-using-dict-comprehensionwhen creating a dict using a list of tuples where key AND value vary depending on the same condition.
Closes #5588
- Fixed false positive for
global-variable-undefinedwhenglobalis used with a class name
Closes #3088
- Fixed false positive for
unused-variablewhen anonlocalname is assigned as part of a multi-name assignment.
Closes #3781
- Fixed a crash in
unspecified-encodingchecker when providingNoneto themodeargument of anopen()call.
Closes #5731
- Fixed a crash involving a
NewTypenamed with an f-string.
Closes #5770 Ref PyCQA/astroid#1400
- Improved
bad-open-modemessage when providingNoneto themodeargument of anopen()call.
Closes #5733
- Added
lru-cache-decorating-methodchecker with checks for the use offunctools.lru_cacheon class methods. This is unrecommended as it creates memory leaks by never letting the instance getting garbage collected.
Closes #5670
- Fixed crash with recursion error for inference of class attributes that referenced the class itself.
Closes #5408 Ref PyCQA/astroid#1392
- Fixed false positive for
unused-argumentwhen a method overridden in a subclass does nothing with the value of a keyword-only argument.
Closes #5771 Ref PyCQA/astroid#1382
- The issue template for crashes is now created for crashes which were previously not covered by this mechanism.
Closes #5668
- Rewrote checker for
non-ascii-name. It now ensures all Python names are ASCII and also properly checks the names of imports (non-ascii-module-import) as well as file names (non-ascii-file-name) and emits their respective new warnings.
Non ASCII characters could be homoglyphs (look alike characters) and hard to
enter on a non specialized keyboard.
See Confusable Characters in PEP 672 <https://www.python.org/dev/peps/pep-0672/#confusable-characters-in-identifiers>_
When run in parallel mode
pylintnow pickles the data passed to subprocesses with thedillpackage. Thedillpackage has therefore been added as a dependency.An astroid issue where symlinks were not being taken into account was fixed
Closes #1470 Closes #3499 Closes #4302 Closes #4798 Closes #5081
- Fix a crash in
unused-private-memberchecker when analyzing code usingtype(self)in bound methods.
Closes #5569
- Optimize parsing of long lines when
missing-final-newlineis enabled.
Closes #5724
- Fix false positives for
used-before-assignmentfrom using named expressions in a ternary operator test and using that expression as a call argument.
Closes #5177, #5212
- Fix false positive for
undefined-variablewhennamedtupleclass attributes are used as return annotations.
Closes #5568
- Fix false negative for
undefined-variableand related variable messages when the same undefined variable is used as a type annotation and is accessed multiple times, or is used as a default argument to a function.
Closes #5399
Pyreverse - add output in mermaidjs format
Emit
used-before-assignmentinstead ofundefined-variablewhen attempting to access unused type annotations.
Closes #5713
Added confidence level
CONTROL_FLOWfor warnings relying on assumptions about control flow.used-before-assignmentnow considers that assignments in a try block may not have occurred when the except or finally blocks are executed.
Closes #85, #2615
- Fixed false negative for
used-before-assignmentwhen a conditional or context manager intervened before the try statement that suggested it might fail.
Closes #4045
Fixed false negative for
used-before-assignmentin finally blocks if an except handler did not define the assignment that might have failed in the try block.Fixed extremely long processing of long lines with comma's.
Closes #5483
- Fixed crash on properties and inherited class methods when comparing them for equality against an empty dict.
Closes #5646
- Fixed a false positive for
assigning-non-slotwhen the slotted class defined__setattr__.
Closes #3793
Fixed a false positive for
invalid-class-objectwhen the object being assigned to the__class__attribute is uninferable.Fixed false positive for
used-before-assignmentwith self-referential type annotation in conditional statements within class methods.
Closes #5499
- Add checker
redefined-slots-in-subclass: Emitted when a slot is redefined in a subclass.
Closes #5617
- Fixed false positive for
global-variable-not-assignedwhen thedelstatement is used
Closes #5333
- By default, pylint does no longer take files starting with
.#into account. Those are consideredemacs file locks. See https://www.gnu.org/software/emacs/manual/html_node/elisp/File-Locks.html. This behavior can be reverted by redefining theignore-patternsoption.
Closes #367
- Fixed a false positive for
used-before-assignmentwhen a named expression appears as the first value in a container.
Closes #5112
used-before-assignmentnow assumes that assignments in except blocks may not have occurred and warns accordingly.
Closes #4761
- When evaluating statements after an except block,
used-before-assignmentassumes that assignments in the except blocks took place if the corresponding try block contained a return statement.
Closes #5500
- Fixed a false negative for
used-before-assignmentwhen some but not all except handlers defined a name relied upon after an except block when the corresponding try block contained a return statement.
Closes #5524
- When evaluating statements in the
elseclause of a loop,used-before-assignmentassumes that assignments in the except blocks took place if the except handlers constituted the only ways for the loop to finish without breaking early.
Closes #5683
used-before-assignmentnow checks names in try blocks.Fixed false positive with
used-before-assignmentfor assignment expressions in lambda statements.
Closes #5360, #3877
- Fixed a false positive (affecting unreleased development) for
used-before-assignmentinvolving homonyms between filtered comprehensions and assignments in except blocks.
Closes #5586
- Fixed crash with slots assignments and annotated assignments.
Closes #5479
- Fixed crash on list comprehensions that used
typeas inner variable name.
Closes #5461
- Fixed crash in
use-maxsplit-argchecker when providing thesepargument tostr.split()by keyword.
Closes #5737
- Fix false positive for
unused-variablefor a comprehension variable matching an outer scope type annotation.
Closes #5326
- Fix false negative for
undefined-variablefor a variable used multiple times in a comprehension matching an unused outer scope type annotation.
Closes #5654
Some files in
pylint.testutilswere deprecated. In the future imports should be done from thepylint.testutils.functionalnamespace directly.Fixed false positives for
no-value-for-parameterwith variadic positional arguments.
Closes #5416
safe_inferno longer makes an inference when given two function definitions with differing numbers of arguments.
Closes #3675
- Fix
comparison-with-callablefalse positive for callables that raise, such as typing constants.
Closes #5557
- Fixed a crash on
__init__nodes when the attribute was previously uninferable due to a cache limit size. This limit can be hit when the inheritance pattern of a class (and therefore of the__init__attribute) is very large.
Closes #5679
- Fix false positive for
used-before-assignmentfrom a class definition nested under a function subclassing a class defined outside the function.
Closes #4590
- Fix
unnecessary_dict_index_lookupfalse positive when deleting a dictionary's entry.
Closes #4716
- Fix false positive for
used-before-assignmentwhen an except handler shares a name with a test in a filtered comprehension.
Closes #5817
- Fix crash in
unnecessary-dict-index-lookupchecker if the output ofitems()is assigned to a 1-tuple.
Closes #5504
- When invoking
pylint,epylint,symilarorpyreverseby importing them in a python file you can now pass anargvkeyword besides patchingsys.argv.
Closes #5320
The
PyLinterclass will now be initialized with aTextReporteras its reporter if none is provided.Fix
super-init-not-calledwhen parent orselfis aProtocol
Closes #4790
- Fix false positive
not-callablewith attributes that aliasNamedTuple
Partially closes #1730
- Emit
redefined-outer-namewhen a nested except handler shadows an outer one.
Closes #4434 Closes #5370
- Fix false positive
super-init-not-calledfor classes that inherit theirinitfrom a parent.
Closes #4941
encodingcan now be supplied as a positional argument to calls that open files without triggeringunspecified-encoding.
Closes #5638
- Fatal errors now emit a score of 0.0 regardless of whether the linted module contained any statements
Closes #5451
fatalwas added to the variables permitted in score evaluation expressions.The default score evaluation now uses a floor of 0.
Closes #2399
- Fix false negative for
consider-iterating-dictionaryduring membership checks encapsulated in iterables ornot inchecks
Closes #5323
Fixed crash on uninferable decorators on Python 3.6 and 3.7
Add checker
unnecessary-ellipsis: Emitted when the ellipsis constant is used unnecessarily.
Closes #5460
- Disable checker
bad-docstring-quotesfor Python <= 3.7, because in these versions the line numbers for decorated functions and classes are not reliable which interferes with the checker.
Closes #3077
Fixed incorrect classification of Numpy-style docstring as Google-style docstring for docstrings with property setter documentation. Docstring classification is now based on the highest amount of matched sections instead of the order in which the docstring styles were tried.
Fixed detection of
arguments-differwhen superclass static methods lacked a@staticmethoddecorator.
Closes #5371
TypingChecker- Added new check
broken-noreturnto detect broken uses oftyping.NoReturnifpy-versionis set to Python3.7.1or below. https://bugs.python.org/issue34921 - Added new check
broken-collections-callableto detect broken uses ofcollections.abc.Callableifpy-versionis set to Python3.9.1or below. https://bugs.python.org/issue42965
- Added new check
The
testutilsfor unittests now acceptend_linenoandend_column. Tests without these will trigger aDeprecationWarning.arguments-differwill no longer complain about method redefinitions with extra parameters that have default values.
Closes #1556, #5338
- Fixed false positive
unexpected-keyword-argfor decorators.
Closes #258
- Importing the deprecated stdlib module
xml.etree.cElementTreenow emitsdeprecated_module.
Closes #5862
Disables for
deprecated-moduleand similar warnings for stdlib features deprecated in newer versions of Python no longer raiseuseless-suppressionwhen linting with older Python interpreters where those features are not yet deprecated.Importing the deprecated stdlib module
distutilsnow emitsdeprecated_moduleon Python 3.10+.missing-raises-docwill now check the class hierarchy of the raised exceptions
.. code-block:: python
def my_function()
"""My function.
Raises:
Exception: if something fails
"""
raise ValueError
Closes #4955
- Allow disabling
duplicate-codewith a disable comment when running through pylint.
Closes #214
- Improve
invalid-namecheck forTypeVarnames. The accepted pattern can be customized with--typevar-rgx.
Closes #3401
Added new checker
typevar-name-missing-variance. Emitted when a covariant or contravariantTypeVardoes not end with_coor_contrarespectively or when aTypeVaris not either but has a suffix.Allow usage of mccabe 0.7.x release
Closes #5878
- Fix
unused-private-memberfalse positive when accessing private methods throughproperty.
Closes #4756
- Python
Published by Pierre-Sassoulas about 4 years ago
pylint -
Fixed a false positive for
unused-importwhere everything was not analyzed properly inside typing guards.Fixed a false-positive regression for
used-before-assignmentfor typed variables in the body of class methods that reference the same class
Closes #5342
Specified that the
ignore-pathsoption considers "\" to represent a windows directory delimiter instead of a regular expression escape character.Fixed a crash with the
ignore-pathsoption when invoking the option via the command line.
Closes #5437
- Fixed handling of Sphinx-style parameter docstrings with asterisks. These should be escaped with by prepending a "\".
Closes #5406
- Add
endLineandendColumnkeys to output ofJSONReporter.
Closes #5380
- Fixed handling of Google-style parameter specifications where descriptions
are on the line following the parameter name. These were generating
false positives for
missing-param-doc.
Closes #5452
- Fix false negative for
consider-iterating-dictionaryduring membership checks encapsulated in iterables ornot inchecks
Closes #5323
unused-importnow check all ancestors for typing guards
Closes #5316
- Python
Published by Pierre-Sassoulas over 4 years ago
pylint - 2.12.0
- Upgrade astroid to 2.9.0
Closes #4982
Add ability to add
end_lineandend_columnto the--msg-templateoption. With the standardTextReporterthis will add the line and column number of the end of a node to the output of Pylint. If these numbers are unknown, they are represented by an empty string.Introduced primer tests and a configuration tests framework. The helper classes available in
pylint/testutil/are still unstable and might be modified in the near future.
Closes #4412 #5287
Fix
install graphizmessage which isn't needed for puml output format.MessageTestof the unittesttestutilnow requires theconfidenceattribute to match the expected value. If none is provided it is set toUNDEFINED.add_messageof the unittesttestutilnow actually handles thecol_offsetparameter and allows it to be checked against actual output in a test.Fix a crash in the
check_elifextensions where an undetected if in a comprehension with an if statement within a f-string resulted in an out of range error. The checker no longer relies on counting if statements anymore and uses known if statements locations instead. It should not crash on badly parsed if statements anymore.Fix
simplify-boolean-expressionwhen condition can be inferred as False.
Closes #5200
Fix exception when pyreverse parses
property functionof a class.The functional
testutilsnow acceptend_linenoandend_column. Expected output files without these will trigger aDeprecationWarning. Expected output files can be easily updated with thepython tests/test_functional.py --update-functional-outputcommand.The functional
testutilsnow correctly check the distinction betweeenHIGHandUNDEFINEDconfidence. Expected output files without defiendconfidencelevels will now trigger aDeprecationWarning. Expected output files can be easily updated with thepython tests/test_functional.py --update-functional-outputcommand.The functional test runner now supports the option
min_pyver_end_positionto control on which python versions theend_linenoandend_columnattributes should be checked. The default value is 3.8.Fix
accept-no-yields-docandaccept-no-return-docnot allowing missingyieldorreturndocumentation when a docstring is partially correct
Closes #5223
- Add an optional extension
consider-using-any-or-all: Emitted when aforloop only produces a boolean and could be replaced byanyorallusing a generator. Also suggests a suitable any or all statement.
Closes #5008
- Properly identify parameters with no documentation and add new message called
missing-any-param-doc
Closes #3799
* Add checkers overridden-final-method & subclassed-final-class
Closes #3197
- Fixed
protected-accessfor accessing of attributes and methods of inner classes
Closes #3066
Added support for
ModuleNotFoundError(import-errorandno-name-in-module).ModuleNotFoundErrorinherits fromImportErrorand was added in Python3.6undefined-variablenow correctly flags variables which only receive a type annotations and never get assigned a value
Closes #5140
undefined-variablenow correctly considers the line numbering and order of classes used in metaclass declarations
Closes #4031
used-before-assignmentnow correctly considers references to classes as type annotation or default values in first-level methods
Closes #3771
undefined-variableandunused-variablenow correctly trigger for assignment expressions in functions defaults
Fixes part of #3688
undefined-variablenow correctly triggers for assignment expressions in if ... else statements This includes a basic form of control flow inference for if ... else statements using constant boolean values
Closes #3688
Added the
--enable-all-extensionscommand line option. It will load all available extensions which can be listed by running--list-extensionsFix bug with importing namespace packages with relative imports
Closes #2967 and #5131
- Improve and flatten
unused-wildcard-importmessage
Closes #3859
In length checker,
len-as-conditionhas been renamed asuse-implicit-booleaness-not-lenin order to be consistent withuse-implicit-booleaness-not-comparison.Created new
UnsupportedVersionCheckerchecker class that includes checks for features not supported by all versions indicated by apy-version.- Added
using-f-string-in-unsupported-versionchecker. Issued whenpy-versionis set to a version that does not support f-strings (< 3.6)
- Added
Fix
useless-super-delegationfalse positive when default keyword argument is a variable.Properly emit
duplicate-keywhen Enum members are duplicate dictionary keys
Closes #5150
Use
py-versionsetting for alternative union syntax check (PEP 604), instead of the Python interpreter version.Subclasses of
dictare regarded as reversible by thebad-reversed-sequencechecker (Python 3.8 onwards).
Closes #4981
Support configuring mixin class pattern via
mixin-class-rgxAdded new checker
use-implicit-booleaness-not-comparison: Emitted when collection literal comparison is being used to check for emptiness.
Closes #4774
mising-param-docnow correctly parses asterisks for variable length and keyword parameters
Closes #3733
mising-param-docnow correctly handles Numpy parameter documentation without explicit typing
Closes #5222
pylintno longer crashes when checking assignment expressions within if-statements
Closes #5178
- Update
literal-comparison` checker to ignore tuple literals
Closes #3031
- Normalize the input to the
ignore-pathsoption to allow both Posix and Windows paths
Closes #5194
- Fix double emitting of
not-callableon inferrableproperties
Closes #4426
self-cls-assignmentnow also considers tuple assignmentFix
missing-function-docstringnot being able to check__init__and other magic methods even if theno-docstring-rgxsetting was set to do soAdded
using-final-decorator-in-unsupported-versionchecker. Issued whenpy-versionis set to a version that does not supporttyping.final(< 3.8)Added configuration option
exclude-too-few-public-methodsto allow excluding classes from themin-public-methodschecker.
Closes #3370
- The
--jobsparameter now fallbacks to 1 if the host operating system does not have functioning shared semaphore implementation.
Closes #5216
- Fix crash for
unused-private-memberwhen checking private members on__class__
Closes #5261
- Crashes when a list is encountered in a toml configuration do not happen anymore.
Closes #4580
- Moved
misplaced-comparison-constantto its own extensioncomparison_placement. This checker was opinionated and now no longer a default. It can be reactived by addingpylint.extensions.comparison_placementtoload-pluginsin your config.
Closes #1064
- A new
bad-configuration-sectionchecker was added that will emit for misplaced option in pylint's top level namespace for toml configuration. Top-level dictionaries or option defined in the wrong section will still silently not be taken into account, which is tracked in a follow-up issue.
Follow-up in #5259
Fix crash for
protected-accesson (outer) class traversalAdded new checker
useless-with-lockto find incorrect usage of with statement and threading module locks. Emitted whenwith threading.Lock():is used instead ofwith lock_instance:.
Closes #5208
Make yn validator case insensitive, to allow for
TrueandFalsein config files.Fix crash on
open()calls when themodeargument is not a simple string.
Partially closes #5321
Inheriting from a class that implements
__class_getitem__no longer raisesinherit-non-class.Pyreverse - Add the project root directory to sys.path
Closes #2479
- Don't emit
consider-using-f-stringifpy-versionis set to Python <3.6.f-stringswere added in Python3.6
Closes #5019
- Fix regression for
unspecified-encodingwithpathlib.Path.read_text()
Closes #5029
Don't emit
consider-using-f-stringif the variables to be interpolated include a backslashFixed false positive for
cell-var-from-loopwhen variable is used as the default value for a keyword-only parameter.
Closes #5012
Fix false-positive
undefined-variablewithLambda,IfExp, and assignment expression.Fix false-positive
useless-suppressionforwrong-import-order
Closes #2366
- Fixed
tomldependency issue
Closes #5066
- Fix false-positive
useless-suppressionforline-too-long
Closes #4212
- Fixed
invalid-namenot checking parameters of overwritten baseobjectmethods
Closes #3614
- Fixed crash in
consider-using-f-stringifformatis not called
Closes #5058
- Fix crash with
AssignAttrinif TYPE_CHECKINGblocks.
Closes #5111
Improve node information for
invalid-nameon function argument.Prevent return type checkers being called on functions with ellipses as body
Closes #4736
Add
is_sys_guardandis_typing_guardhelper functions from astroid topylint.checkers.utils.Fix regression on ClassDef inference
Closes #5030 Closes #5036
- Fix regression on Compare node inference
Closes #5048
- Fix false-positive
isinstance-second-argument-not-valid-typewithtyping.Callable.
Closes #3507 Closes #5087
It is now recommended to do
pylintdevelopment onPython3.8 or higher. This allows using the latestastparser.All standard jobs in the
pylintCI now run onPython3.8 by default. We still support python 3.6 and 3.7 and run tests for those interpreters.TypingChecker- Fix false-negative for
deprecated-typing-aliasandconsider-using-aliaswithtyping.Type+typing.Callable.
- Fix false-negative for
- Python
Published by Pierre-Sassoulas over 4 years ago
pylint -
unspecified-encodingnow checks the encoding ofpathlib.Path()correctly
Closes #5017
- Python
Published by Pierre-Sassoulas over 4 years ago
pylint -
The python3 porting mode checker and it's
py3koption were removed. You can still find it in older pylint versions.raising-bad-typeis now properly emitted when raising a stringAdded new extension
SetMembershipCheckerwithuse-set-for-membershipcheck: Emitted when using an in-place definedlistortupleto do a membership test.setsare better optimized for that.
Closes #4776
Added
py-versionconfig key (if[MASTER]section). Used for version dependant checks. Will default to whatever Python version pylint is executed with.CodeStyleChecker- Added
consider-using-assignment-expr: Emitted when an assignment is directly followed by an if statement and both can be combined by using an assignment expression:=. Requires Python 3.8
Closes #4862
- Added
Added
consider-using-f-string: Emitted when .format() or '%' is being used to format a string.
Closes #3592
- Fix false positive for
consider-using-withif a context manager is assigned to a variable in different paths of control flow (e. g. if-else clause).
Closes #4751
- https is now prefered in the documentation and http://pylint.pycqa.org correctly redirect to https://pylint.pycqa.org
Closes #3802
- Fix false positive for
function-redefinedfor simple type annotations
Closes #4936
Fix false positive for
protected-accessif a protected member is used in type hints of function definitionsFix false positive
dict-iter-missing-itemsfor dictionaries only using tuples as keys
Closes #3282
- The
unspecified-encodingchecker now also checks calls topathlib.Path().read_text()andpathlib.Path().write_text()
Closes #4945
- Fix false positive
superfluous-parensfor tuples created with inner tuples
Closes #4907
- Fix false positive
unused-private-memberfor accessing attributes in a class usingcls
Closes #4849
- Fix false positive
unused-private-memberfor private staticmethods accessed in classmethods.
Closes #4849
Extended
consider-using-incheck to work for attribute access.Setting
min-similarity-linesto 0 now makes the similarty checker stop checking for duplicate code
Closes #4901
- Fix a bug where pylint complained if the cache's parent directory does not exist
Closes #4900
- The
global-variable-not-assignedchecker now catches global variables that are never reassigned in a local scope and catches (reassigned) functions
Closes #1375 Closes #330
- Fix false positives for invalid-all-format that are lists or tuples at runtime
Closes #4711
Fix
no-self-useanddocparams extensionfor async functions and methods.Add documentation for
pyreverseandsymilar
Closes #4616
- Non symbolic messages with the wrong capitalisation now correctly trigger
use-symbolic-message-instead
Closes #5000
- The
consider-iterating-dictionarychecker now also considers membership checks
Closes #4069
- The
invalid-namemessage is now more detailed when using multiple naming style regexes.
- Python
Published by Pierre-Sassoulas over 4 years ago
pylint -
- We now use platformdirs instead of appdirs since the latter is not maintained.
Closes #4886
- Fix a crash in the checker raising
shallow-copy-environwhen failing to infer oncopy.copy
Closes #4891
- Python
Published by Pierre-Sassoulas almost 5 years ago
pylint -
- pylint does not crash when PYLINT_HOME does not exist.
Closes #4883
- Python
Published by AWhetter almost 5 years ago
pylint -
- pyreverse: add option to produce colored output.
Closes #4488
- pyreverse: add output in PlantUML format.
Closes #4498
consider-using-withis no longer triggered if a context manager is returned from a function.
Closes #4748
pylint does not crash with a traceback anymore when a file is problematic. It creates a template text file for opening an issue on the bug tracker instead. The linting can go on for other non problematic files instead of being impossible.
pyreverse: Show class has-a relationships inferred from the type-hint
Closes #4744
- Fixed a crash when importing beyond the top level package during
import-errormessage creation
Closes #4775
- Added
ignored-parentsoption to the design checker to ignore specific classes from thetoo-many-ancestorscheck (R0901).
Partially closes #3057
- Added
unspecified-encoding: Emitted when open() is called without specifying an encoding
Closes #3826
- Improved the Similarity checker performance. Fix issue with
--min-similarity-linesused with--jobs.
Close #4120 Close #4118
- Don't emit
no-membererror if guarded behind if statement.
Ref #1162 Closes #1990 Closes #4168
- The default for
PYLINTHOMEis now the standardXDG_CACHE_HOME, and pylint now usesappdirs.
Closes #3878
- Added
use-list-literal: Emitted whenlist()is called with no arguments instead of using[]
Closes #4365
- Added
use-dict-literal: Emitted whendict()is called with no arguments instead of using{}
Closes #4365
- Added optional extension
consider-ternary-expression: Emitted whenever a variable is assigned in both branches of an if/else block.
Closes #4366
- Added optional extension
while-used: Emitted whenever awhileloop is used.
Closes #4367
- Added
forgotten-debug-statement: Emitted whenbreakpoint,pdb.set_traceorsys.breakpointhookcalls are found
Closes #3692
- Fix false-positive of
unused-private-memberwhen using nested functions in a class
Closes #4673
- Fix crash for
unused-private-memberthat occurred with nested attributes.
Closes #4755
- Fix a false positive for
unused-private-memberwith class names
Closes #4681
- Fix false positives for
superfluous-parenswith walrus operator, ternary operator and inside list comprehension.
Closes #2818 Closes #3249 Closes #3608 Closes #4346
- Added
format-string-without-interpolationchecker: Emitted when formatting is applied to a string without any variables to be replaced
Closes #4042
- Refactor of
--list-msgs&--list-msgs-enabled: both options now show whether messages are emittable with the current interpreter.
Closes #4778
- Fix false negative for
used-before-assignmentwhen the variable is assigned in an exception handler, but used outside of the handler.
Closes #626
- Added
disable-nextoption: allows using# pylint: disable-next=msgidto disable a message for the following line
Closes #1682
- Added
redundant-u-string-prefixchecker: Emitted when the u prefix is added to a string
Closes #4102
- Fixed
cell-var-from-loopchecker: handle cell variables in comprehensions within functions, and function default argument expressions. Also handle basic variable shadowing.
Closes #2846 Closes #3107
Fixed bug with
cell-var-from-loopchecker: it no longer has false negatives when bothunused-variableandused-before-assignmentare disabled.Fix false postive for
invalid-all-formatif the list or tuple builtin functions are used
Closes #4711
- Config files can now contain environment variables
Closes #3839
- Fix false-positive
used-before-assignmentwith an assignment expression in aReturnnode
Closes #4828
Added
use-sequence-for-iteration: Emitted when iterating over an in-place definedset.CodeStyleChecker- Limit
consider-using-tupleto be emitted only for in-place definedlists. - Emit
consider-using-tupleeven if list contains astarredexpression.
- Limit
Ignore decorators lines by similarities checker when ignore signatures flag enabled
Closes #4839
Allow
trueandfalsevalues inpylintrcfor better compatibility withtomlconfig.Class methods' signatures are ignored the same way as functions' with similarities "ignore-signatures" option enabled
Closes #4653
Improve performance when inferring
Callnodes, by utilizing caching.Improve error message for invalid-metaclass when the node is an Instance.
- Python
Published by Pierre-Sassoulas almost 5 years ago
pylint -
- Fix a false positive
undefined-variablewhen variable name in decoration matches function argument
Closes #3791
- Python
Published by Pierre-Sassoulas almost 5 years ago
pylint -
- Fix a crash when there would be a 'TypeError object does not support item assignment' in the code we parse.
Closes #4439
- Fix crash if a callable returning a context manager was assigned to a list or dict item
Closes #4732
- Fix a crash when a AttributeInferenceError was not handled properly when failing to infer the real name of an import in astroid.
Closes #4692
- Python
Published by Pierre-Sassoulas almost 5 years ago
pylint -
Added
time.clockto deprecated functions/methods for python 3.3Fix bug in which --fail-on can return a zero exit code even when the specified issue is present
Closes #4296 Closes #3363
- Fix hard failure when handling missing attribute in a class with duplicated bases
Closes #4687
- Fix false-positive
consider-using-with(R1732) if a ternary conditional is used together withwith
Closes #4676
- Fix false-positive
deprecated-modulewhen relative import uses deprecated module name.
Closes #4629
- Fix false-positive
consider-using-with(R1732) ifcontextlib.ExitStacktakes care of calling the__exit__method
Closes #4654
- Fix a false positive for
unused-private-memberwhen mutating a private attribute withcls
Closes #4657
- Fix ignored empty functions by similarities checker with "ignore-signatures" option enabled
Closes #4652
- Fix false-positive of
use-maxsplit-argwhen index is incremented in a loop
Closes #4664
- Don't emit
cyclic-importmessage if import is guarded bytyping.TYPE_CHECKING.
Closes #3525
- Fix false-positive
not-callablewith alternativeTypedDictsyntax
Closes #4715
Clarify documentation for consider-using-from-import
Don't emit
unreachablewarning for empty generator functions
Closes #4698
- Don't emit
import-error,no-name-in-module, andungrouped-importsfor imports guarded bysys.version_infoortyping.TYPE_CHECKING.
Closes #3285 Closes #3382
- Fix
invalid-overridden-methodwith nested property
Closes #4368
- Fix false-positive of
unused-private-memberwhen using__new__in a class
Closes #4668
- No longer emit
consider-using-withforThreadPoolExecutorandProcessPoolExecutoras they have legitimate use cases without awithblock.
Closes #4689
- Fix crash when inferring variables assigned in match patterns
Closes #4685
- Fix a crash when a StopIteration was raised when inferring a faulty function in a context manager.
Closes #4723
- Python
Published by Pierre-Sassoulas almost 5 years ago
pylint -
- Fix a crash that happened when analyzing empty function with docstring
in the
similaritychecker.
Closes #4648
- The
similaritychecker no longer add three trailing whitespaces for empty lines in its report.
- Python
Published by Pierre-Sassoulas almost 5 years ago
pylint -
- Fix a crash that happened when analysing code using
type(self)to access a class attribute in theunused-private-memberchecker.
Closes #4638
- Fix a false positive for
unused-private-memberwhen accessing a private variable withself
Closes #4644
- Fix false-positive of
unnecessary-dict-index-lookupandconsider-using-dict-itemsfor reassigned dict index lookups
Closes #4630
- Python
Published by Pierre-Sassoulas almost 5 years ago
pylint -
- Upgrade astroid to 2.6.2
Closes #4631 Closes #4633
- Python
Published by Pierre-Sassoulas almost 5 years ago
pylint -
This is 2.9.0 with the breaking changes of the future version 3.0.
Fix the score option not being honored when exporting to JSON
The default setting was to have a score, but it did not work. Now it will give a score at the end of the json:
Close #3504
- Python
Published by Pierre-Sassoulas almost 5 years ago
pylint -
Python 3.10 is now supported.
Add type annotations to pyreverse dot files
Closes #1548
- Fix missing support for detecting deprecated aliases to existing functions/methods.
Closes #4618
astroid has been upgraded to 2.6.1
Added various deprecated functions/methods for python 3.10, 3.7, 3.6 and 3.3
Fix false positive
useless-type-docon ignored argument usingpylint.extensions.docparamswhen a function was typed using pep484 but not inside the docstring.
Closes #4117 Closes #4593
setuptools_scmhas been removed and replaced bytbumpin order to not have hidden runtime dependencies to setuptoolsFix a crash when a test function is decorated with
@pytest.fixtureand astroid can't infer the name of the decorator when usingopenwithoutwith.
Closes #4612
- Added
deprecated-decorator: Emitted when deprecated decorator is used.
Closes #4429
- Added
ignore-pathsbehaviour. Defined regex patterns are matched against full file path.
Close #2541
Fix false negative for
consider-using-withif calls likeopen()were used outside of assignment expressions.The warning for
arguments-differnow signals explicitly the difference it detected by naming the argument or arguments that changed and the type of change that occurred.Suppress
consider-using-withinside context managers.
Closes #4430
Added
--fail-onoption to return non-zero exit codes regardless of--fail-undervalue.numversion tuple contains integers again to fix multiple pylint's plugins that relied on it
Closes #4420
- Fix false-positive
too-many-ancestorswhen inheriting from builtin classes, especially from thecollections.abcmodule
Closes #4166 Closes #4415
Stdlib deprecated modules check is moved to stdlib checker. New deprecated modules are added.
Fix raising false-positive
no-memberon abstract propertiesCreated new error message called
arguments-renamedwhich identifies any changes at the parameter names of overridden functions.
Closes #3536
- New checker
consider-using-dict-items. Emitted when iterating over dictionary keys and then indexing the same dictionary with the key within loop body.
Closes #3389
Don't emit
import-errorif import guarded behindif sys.version_info >= (x, x)Fix incompatibility with Python 3.6.0 caused by
typing.Counterandtyping.NoReturnusage
Closes #4412
- New checker
use-maxsplit-arg. Emitted either when accessing only the first or last element ofstr.split().
Closes #4440
- Add ignore_signatures to duplicate code checker
Closes #3619
Fix documentation errors in "Block disables" paragraph of User Guide.
New checker
unnecessary-dict-index-lookup. Emitted when iterating over dictionary items (key-value pairs) and accessing the value by index lookup.
Closes #4470
- New checker
consider-using-from-import. Emitted when a submodule/member of a package is imported and aliased with the same name.
Closes #2309
- Allow comma-separated list in
output-formatand separate output files for each specified format.
Closes #1798
Make
using-constant-testdetect constant tests consisting of list literals like[]and[1, 2, 3].Improved error message of
unnecessary-comprehensionchecker by providing code suggestion.
Closes #4499
- New checker
unused-private-member. Emitted when a private member (i.e., starts with__) of a class is defined but not used.
Closes #4483
- Fix false negative of
consider-using-enumeratewhen iterating over an attribute.
Closes #3657
- New checker
invalid-class-object. Emitted when a non-class is assigned to a__class__attribute.
Closes #585
- Fix a crash when a plugin from the configuration could not be loaded and raise an error 'bad-plugin-value' instead
Closes #4555
- Added handling of floating point values when parsing configuration from pyproject.toml
Closes #4518
invalid-length-returned, now also works when nothing at all is returned following an upgrade in astroid.logging-format-interpolationandlogging-not-lazy, now works on logger class created from renamed logging import following an upgrade in astroid.Fix false-positive
no-memberwith generic base class
Closes PyCQA/astroid#942
- Fix
assigning-non-slotfalse-positive with base that inherits fromtyping.Generic
Closes #4509 Closes PyCQA/astroid#999
New checker
invalid-all-format. Emitted when__all__has an invalid format, i.e. isn't atupleorlist.Fix false positive
unused-variableandundefined-variablewith Pattern Matching in Python 3.10New checker
await-outside-async. Emitted when await is used outside an async function.Clarify documentation for
typingextension.
Closes #4545
Add new extension
CodeStyleChecker. It includes checkers that can improve code consistency. As such they don't necessarily provide a performance benefit and are often times opinionated.New checker
consider-using-tuple. Emitted when an in-place defined list or set can be replaced by a tuple.New checker
consider-using-namedtuple-or-dataclass. Emitted when dictionary values can be replaced by namedtuples or dataclass instances.Fix error that occurred when using
sliceas subscript for dict.Reduce false-positives around inference of
.valueand.nameproperties onEnumsubclasses, following an upgrade in astroid
Closes #1932 Closes #2062
- Fix issue with
cached_propertythat causedinvalid-overridden-methoderror when overriding aproperty.
Closes #4023
- Fix
unused-importfalse positive for imported modules referenced in attribute lookups in type comments.
Closes #4603
- Python
Published by Pierre-Sassoulas almost 5 years ago
pylint -
Pin astroid to 2.5.6 for pylint 2.8.3
- Python
Published by Pierre-Sassoulas about 5 years ago
pylint -
- Keep
__pkginfo__.numversiona tuple to avoid breaking pylint-django.
Closes #4405
scm_setuptools has been added to the packaging.
Pylint's tags are now the standard form
vX.Y.Zand notpylint-X.Y.Zanymore.
- Python
Published by Pierre-Sassoulas about 5 years ago
pylint -
- Add numversion back (temporarily) in
__pkginfo__because it broke Pylama and revert the unnecessarypylint.versionbreaking change.
Closes #4399
- Python
Published by Pierre-Sassoulas about 5 years ago
pylint -
- New refactoring message
consider-using-with. This message is emitted if resource-allocating functions or methods of the standard library (likeopen()orthreading.Lock.acquire()) that can be used as a context manager are called without awithblock.
Closes #3413
- Resolve false positives on unused variables in decorator functions
Closes #4252
Add new extension
ConfusingConsecutiveElifChecker. This optional checker emits a refactoring message (R5601confusing-consecutive-elif) if if/elif statements with different indentation levels follow directly one after the other.New option
--output=<file>to output result to a file rather than printing to stdout.
Closes #1070
- Use a prescriptive message for
unidiomatic-typecheck
Closes #3891
Apply
const-naming-styleto module constants annotated withtyping.FinalThe packaging is now done via setuptools exclusively.
doc,tests,man,elispandChangelogare not packaged anymore - reducing the size of the package by 75%.Debian packaging is now (officially) done in https://salsa.debian.org/python-team/packages/pylint.
The 'doc' extra-require has been removed.
__pkginfo__now only contain__version__(also accessible withpylint.__version__), other meta-information are still accessible withimport importlib;metadata.metadata('pylint').COPYING has been renamed to LICENSE for standardization.
Fix false-positive
used-before-assignmentin function returns.
Closes #4301
- Updated
astroidto 2.5.3
Closes #2822, #4206, #4284
- Add
consider-using-min-max-builtincheck for if statement which could be replaced by Python builtin min or max
Closes #3406
Don't auto-enable postponed evaluation of type annotations with Python 3.10
Update
astroidto 2.5.4Add new extension
TypingChecker. This optional checker can detect the use of deprecated typing aliases and can suggest the use of the alternative union syntax where possible. (For example, 'typing.Dict' can be replaced by 'dict', and 'typing.Unions' by '|', etc.) Make sure to check the config options if you plan on using it!Reactivates old counts in report mode.
Closes #3819
- During detection of
inconsistent-return-statementsconsider thatassert Falseis a return node.
Closes #4019
Run will not fail if score exactly equals
config.fail_under.Functions that never returns may declare
NoReturnas type hints, so thatinconsistent-return-statementsis not emitted.
Closes #4122, #4188
- Improved protected access checks to allow access inside class methods
Closes #1159
Fix issue with PEP 585 syntax and the use of
collections.abc.SetFix issue that caused class variables annotated with
typing.ClassVarto be identified as class constants. Now, class variables annotated withtyping.Finalare identified as such.
Closes #4277
- Continuous integration with read the doc has been added.
Closes #3850
Don't show
DuplicateBasesErrorfor attribute accessFix crash when checking
setup.cfgfor pylint config when there are non-ascii characters in there
Closes #4328
- Allow code flanked in backticks to be skipped by spellchecker
Closes #4319
- Allow Python tool directives (for black, flake8, zimports, isort, mypy, bandit, pycharm) at beginning of comments to be skipped by spellchecker
Closes #4320
Fix issue that caused emacs pylint to fail when used with tramp
Improve check for invalid PEP 585 syntax inside functions if postponed evaluation of type annotations is enabled
Improve check for invalid PEP 585 syntax as default function arguments
- Python
Published by Pierre-Sassoulas about 5 years ago
pylint -
- Fix a problem with disabled msgid not being ignored
Closes #4265
Fix issue with annotated class constants
- Closes #4264
- Python
Published by Pierre-Sassoulas about 5 years ago
pylint -
Introduce logic for checking deprecated attributes in DeprecationMixin.
Reduce usage of blacklist/whitelist terminology. Notably,
extension-pkg-allow-listis an alternative toextension-pkg-whitelistand the messageblacklisted-nameis now emitted asdisallowed-name. The previous names are accepted to maintain backward compatibility.Move deprecated checker to
DeprecatedMixin
Closes #4086
Bump
astroidversion to2.5.2Fix false positive for
method-hiddenwhen using private attribute and method
Closes #3936
use-symbolic-message-insteadnow also works on legacy messages likeC0111(missing-docstring).Remove unwanted print to stdout from
_emit_no_memberIntroduce a command-line option to specify pyreverse output directory
Closes #4159
- Fix issue with Enums and
class-attribute-naming-style=snake_case
Closes #4149
- Add
allowed-redefined-builtinsoption for fine tuningredefined-builtincheck.
Close #3263
- Fix issue when executing with
python -m pylint
Closes #4161
- Exempt
typing.TypedDictfromtoo-few-public-methodscheck.
Closes #4180
- Fix false-positive
no-memberfor typed annotations without default value.
Closes #3167
- Add
--class-const-naming-stylefor Enum constants and class variables annotated withtyping.ClassVar
Closes #4181
- Fix astroid.Inference error for undefined-variables with
len()`
Closes #4215
- Fix column index on FIXME warning messages
Closes #4218
- Improve handling of assignment expressions, better edge case handling
Closes #3763, #4238
Improve check if class is subscriptable PEP585
Fix documentation and filename handling of --import-graph
Fix false-positive for
unused-importon class keyword arguments
Closes #3202
- Fix regression with plugins on PYTHONPATH if latter is cwd
Closes #4252
- Python
Published by Pierre-Sassoulas about 5 years ago
pylint -
- Exempt all the names found in type annotations from
unused-import
The previous code was assuming that only typing names need to be
exempted, but we need to do that for the rest of the type comment
names as well.
Close #3112
- Relax type import detection for names that do not come from the
typingmodule
Close #3191
- Python
Published by Pierre-Sassoulas about 5 years ago
pylint -
- Fix a false negative for
undefined-variablewhen using class attribute in comprehension.
Close #3494
- Fix a false positive for
undefined-variablewhen using class attribute in decorator or as type hint.
Close #511 Close #1976
- Remove HTML quoting of messages in JSON output.
Close #2769
- Adjust the
invalid-namerule to work with non-ASCII identifiers and add thenon-ascii-namerule.
Close #2725
Positional-only arguments are taken in account for
useless-super-delegationunidiomatic-typecheckis no longer emitted forinandnot inoperators
Close #3337
- Positional-only argument annotations are taken in account for
unused-import
Close #3462
Add a command to list available extensions.
Allow used variables to be properly consumed when different checks are enabled / disabled
Close #3445
- Fix dangerous-default-value rule to account for keyword argument defaults
Close #3373
- Fix a false positive of
self-assigning-variableon tuple unpacking.
Close #3433
no-self-useis no longer emitted for typing stubs.
Close #3439
- Fix a false positive for
undefined-variablewhen__class__is used
Close #3090
- Emit
invalid-namefor variables defined in loops at module level.
Close #2695
- Add a check for cases where the second argument to
isinstanceis not a type.
Close #3308
- Add 'notes-rgx' option, to be used for fixme check.
Close #2874
function-redefinedexempts function redefined on a condition.
Close #2410
typing.overloadfunctions are exempted from docstring checks
Close #3350
- Emit
invalid-overridden-methodfor improper async def overrides.
Close #3355
- Do not allow
python -m pylint ...to import user code
python -m pylint ... adds the current working directory as the first element
of sys.path. This opens up a potential security hole where pylint will import
user level code as long as that code resides in modules having the same name as stdlib
or pylint's own modules.
Close #3386
- Add
dummy-variables-rgxoption for_redeclared-assigned-namecheck.
Close #3341
Fixed graph creation for relative paths
Add a check for asserts on string literals.
Close #3284
not inis considered iterating context for some of the Python 3 porting checkers.A new check
inconsistent-quoteswas added.Add a check for non string assignment to name attribute.
Close #583
__pow__,__imatmul__,__trunc__,__floor__, and__ceil__are recognized as special method names.
Close #3281
- Added errors for protocol functions when invalid return types are detected. E0304 (invalid-bool-returned): bool did not return a bool E0305 (invalid-index-returned): index did not return an integer E0306 (invalid-repr-returned): repr did not return a string E0307 (invalid-str-returned): str did not return a string E0308 (invalid-bytes-returned): bytes did not return a string E0309 (invalid-hash-returned): hash did not return an integer E0310 (invalid-length-hint-returned): length_hint did not return a non-negative integer E0311 (invalid-format-returned): format did not return a string E0312 (invalid-getnewargs-returned): getnewargs did not return a tuple E0313 (invalid-getnewargs-ex-returned): getnewargs_ex did not return a tuple of the form (tuple, dict)
Close #560
missing-*-docstringcan look for__doc__assignments.
Close #3301
undefined-variablecan now find undefined loop iterables
Close #498
safe_infercan infer a value as long as all the paths share the same type.
Close #2503
- Add a --fail-under
flag, also configurable in a .pylintrc file. If the final score is more than the specified score, it's considered a success and pylint exits with exitcode 0. Otherwise, it's considered a failure and pylint exits with its current exitcode based on the messages issued.
Close #2242
- Don't emit
line-too-longfor multilines whendisable=line-too-longcomment stands at their end
Close #2957
- Fixed an
AttributeErrorcaused by improper handling ofdataclassesinference inpyreverse
Close #3256
- Do not exempt bare except from
undefined-variableand similar checks
If a node was wrapped in a TryExcept, pylint was taking a hint
from the except handler when deciding to emit or not a message.
We were treating bare except as a fully fledged ignore but only
the corresponding exceptions should be handled that way (e.g. NameError or ImportError)
Close #3235
- No longer emit
assignment-from-no-returnwhen a function only raises an exception
Close #3218
- Allow import aliases to exempt
import-errorwhen used in type annotations.
Close #3178
Ellipsis` is exempted frommultiple-statements`` for function overloads.
Close #3224
- No longer emit
invalid-namefor non-constants found at module level.
Pylint was taking the following statement from PEP-8 too far, considering all module level variables as constants, which is not what the statement is saying:
Constants are usually defined on a module level and written in
all capital letters with underscores separating words.
Close #3111 Close #3132
- Allow
implicit-str-concat-in-sequenceto be emitted for string juxtaposition
Close #3030
implicit-str-concat-in-sequencewas renamedimplicit-str-concatThe
jsonreporter no longer bypassesredirect_stdout. Close #3227Move
NoFileError,OutputLine,FunctionalTestReporter,FunctionalTestFile,LintModuleTestand related methods fromtest_functional.pytopylint.testutilsto help testing for 3rd party pylint plugins.Can read config from a setup.cfg or pyproject.toml file.
Close #617
- Fix exception-escape false positive with generators
Close #3128
inspect.getargvaluesis no longer marked as deprecated.A new check
f-string-without-interpolationwas added
Close #3190
- Flag mutable
collections.*utilities as dangerous defaults
Close #3183
docparamsextension supports multiple types in raises sections.
Multiple types can also be separated by commas in all valid sections.
Closes #2729
Allow parallel linting when run under Prospector
Fixed false positives of
method-hiddenwhen a subclass defines the method that is being hidden.
Closes #414
Python 3 porting mode is 30-50% faster on most codebases
Python 3 porting mode no longer swallows syntax errors
Closes #2956
- Pass the actual PyLinter object to sub processes to allow using custom PyLinter classes.
PyLinter object (and all its members except reporter) needs to support pickling so the PyLinter object can be passed to worker processes.
- Clean up setup.py
Make pytest-runner a requirement only if running tests, similar to McCabe.
Clean up the setup.py file, resolving a number of warnings around it.
- Handle SyntaxError in files passed via
--from-stdinoption
Pylint no longer outputs a traceback, if a file, read from stdin, contains a syntaxerror.
Fix uppercase style to disallow 3+ uppercase followed by lowercase.
Fixed
undefined-variableandunused-importfalse positives when using a metaclass via an attribute.
Close #1603
- Emit
unused-argumentfor functions that partially uses their argument list before raising an exception.
Close #3246
Fixed
broad_try_clauseextension to check try/finally statements and to check for nested statements (e.g., inside of anifstatement).Recognize classes explicitly inheriting from
abc.ABCor having anabc.ABCMetametaclass as abstract. This makes them not trigger W0223.
Closes #3098
- Fix overzealous
arguments-differwhen overridden function uses variadics
No message is emitted if the overriding function provides positional or keyword variadics in its signature that can feasibly accept and pass on all parameters given by the overridden function.
Close #1482 Close #1553
- Multiple types of string formatting are allowed in logging functions.
The logging-fstring-interpolation message has been brought back to allow
multiple types of string formatting to be used.
Close #3361
- Python
Published by Pierre-Sassoulas about 5 years ago
pylint -
- Fix a crash in
method-hiddenlookup for unknown base classes
Close #3527
- Revert pylint.Run's
exitparameter todo_exit
This has been inadvertently changed several releases ago to do_exit.
Close #3533
no-value-for-parametervariadic detection has improved for assign statements
Close #3563
- Allow package files to be properly discovered with multiple jobs
Close #3524
- Allow linting directories without
__init__.pywhich was a regression in 2.5.
Close #3528
- Python
Published by Pierre-Sassoulas about 5 years ago
pylint -
pylint.Runacceptsdo_exitas a deprecated parameter
Close #3590
- Python
Published by Pierre-Sassoulas about 5 years ago
pylint -
- Fix a regression where disable comments that have checker names with numbers in them are not parsed correctly
Close #3666
property-with-parametersproperly handles abstract properties
Close #3600
continue-in-finallyno longer emitted on Python 3.8 where it's now valid
Close #3612
- Fix a regression where messages with dash are not fully parsed
Close #3604
In a TOML configuration file, it's now possible to use rich (non-string) types, such as list, integer or boolean instead of strings. For example, one can now define a list of message identifiers to enable like this::
enable = [ "use-symbolic-message-instead", "useless-suppression", ]
Close #3538
- Fix a regression where the score was not reported with multiple jobs
Close #3547
- Protect against
AttributeErrorwhen checkingcell-var-from-loop
Close #3646
- Python
Published by Pierre-Sassoulas about 5 years ago
pylint -
- Fix various scope-related bugs in
undefined-variablechecker
Close #1082, #3434, #3461
- bad-continuation and bad-whitespace have been removed, black or another formatter can help you with this better than Pylint
Close #246, #289, #638, #747, #1148, #1179, #1943, #2041, #2301, #2304, #2944, #3565
- The no-space-check option has been removed. It's no longer possible to consider empty line like a
trailing-whitespaceby using clever options
Close #1368
missing-kwoais no longer emitted when dealing with overload functions
Close #3655
- mixed-indentation has been removed, it is no longer useful since TabError is included directly in python3
Close #2984 #3573
Add
super-with-argumentscheck for flagging instances of Python 2 style super calls.Add an faq detailing which messages to disable to avoid duplicates w/ other popular linters
Fix superfluous-parens false-positive for the walrus operator
Close #3383
Fix
fail-undernot accepting floatsFix a bug with
ignore-docstringsignoring all lines in a moduleFix
pre-commitconfig that could lead to undetected duplicate lines of codeFix a crash in parallel mode when the module's filepath is not set
Close #3564
Add
raise-missing-fromcheck for exceptions that should have a cause.Support both isort 4 and isort 5. If you have pinned isort 4 in your projet requirements, nothing changes. If you use isort 5, though, note that the
known-standard-libraryoption is not interpreted the same in isort 4 and isort 5 (see the migration guide in isort documentation for further details). For compatibility's sake for most pylint users, theknown-standard-libraryoption in pylint now maps toextra-standard-libraryin isort 5. If you really want whatknown-standard-librarynow means in isort 5, you must disable thewrong-import-ordercheck in pylint and run isort manually with a proper isort configuration file.
Close #3722
- Python
Published by Pierre-Sassoulas about 5 years ago