pkgsrc-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: pkgsrc/devel/py-pylint



Module Name:    pkgsrc
Committed By:   wiz
Date:           Sun Oct  4 17:01:25 UTC 2026

Modified Files:
        pkgsrc/devel/py-pylint: Makefile PLIST distinfo

Log Message:
py-pylint: update to 4.1.2.

4.1.2

False Positives Fixed

    Fixed a false positive unbalanced-tuple-unpacking when unpacking a tuple
    concatenation whose elements have several possible values.

    Fixed by upgrading astroid to 4.3.3.

    Closes #2621

Other Bug Fixes

    Fixed a crash when calling __bases__ on a class.

    Fixed by upgrading astroid to 4.3.3.

    Closes #11491

    Fix a crash (astroid-error) when the class of a called attribute cannot
    be fully inferred, for example when the attribute is used as a with
    statement target or inside a comprehension.

    Closes #11492

    Fix a crash when a name bound by a type statement (a TypeVar) is used in a with statement.

    Closes #11510

    Fixed a crash (TypeError) in the variables checker when checking a class
    whose metaclass name binding has no line number, for example a class defined
    with metaclass=__annotations__.

    Closes #11511

    Fix a crash in the using-final-decorator-in-unsupported-version check
    when import final is used.

    Closes #11521

    Fix a crash when a plugin passes confidence=None to add_message, as
    pylint-pytest does, for a message that is disabled. confidence=None is
    accepted again and means UNDEFINED, like in pylint 4.0. Passing it
    explicitly to add_message, add_ignored_message or Message now emits a
    DeprecationWarning: it will raise an error in pylint 5.0.

    Closes #11530

4.1.1

Other Changes

    Pylint 4.1.0 could not be uploaded to PyPI, because it required an unreleased
    version of dill on Python 3.15, and PyPI refuses such a dependency. 4.1.1 is
    the first 4.1 release available on PyPI, see the 4.1.0 changes below.

    Refs #11495

4.1.0

Startup is about 25% faster thanks to lazy imports. The import checker caches
its isort configuration, which makes pylint about 17% faster on ansible.
Finding the files to lint with --recursive=y no longer walks ignored
directories such as .venv or node_modules, which took seconds on large
trees. The duplicate-code checker and symilar also received optimizations
that result in considerable performance improvements and memory use reduction
on larger codebases. For example, pandas analysis went from 20 min to 55 s and
pylint does not get OOM-killed when analyzing cpython anymore.

Python 3.15 support progresses: the unpacking in comprehensions added by
PEP 798 no longer raises false positives, and the standard library
deprecations of Python 3.15 are followed.

For CI, there is a new built-in junit output format
(--output-format=junit), the NO_COLOR and FORCE_COLOR environment
variables are respected, and the files to lint can now be set with the
files option in the configuration file.

New checks: looping-through-iterator, impossible-comparison,
chained-comparison-all-equal and
using-comprehension-unpacking-in-unsupported-version.

Running with --jobs no longer duplicates the messages of extensions or
ignores extensions enabled in the configuration.

Plugin authors: the confidence parameter can no longer be None, except
in is_message_enabled, and the MSG_STATE_* constants are deprecated in
favor of the MessageDisableReason enum.

The required astroid version is now 4.3.2. See the astroid changelog for additional fixes, features, and performance improvements applicable to pylint.
Breaking Changes

    The confidence parameter is no longer nullable on any APIs except for
    is_message_enabled (where confidence=None means "don't filter by
    confidence"). The default became interfaces.UNDEFINED (an immutable value);
    the behavior is unchanged unless you were passing an explicit None. This
    avoids a runtime check in multiple function to set the default value conditionally.

    The constants.MSG_STATE_* integer were replaced by a MessageDisableReason enum.
    The old names remain as deprecated aliases pointing at the enum members.
    MessageDisableReason is an IntEnum so existing code comparing the return of
    _get_message_state_scope to the literal 0 / 1 / 2 keeps working.

    Refs #11018

New Features

    Add support for ignore-pattern-in-long-lines to allow ignoring specific parts of a line when checking line length.

    Refs #3352

    Support for the NO_COLOR and FORCE_COLOR environment variables has been added.
    When running pylint, the reporter that writes to stdout is switched between text
    and colorized according to the requested mode.
    The order is: NO_COLOR > FORCE_COLOR > --output-format=....

    Closes #3995

    The dict-init-mutate message now includes a suggested dictionary literal showing how to combine the initialization and subsequent mutations into a single statement.

    Closes #7819

    Add a built-in junit output format (--output-format=junit) that produces JUnit-compatible XML output for CI/CD integration with Jenkins, Azure DevOps, GitLab CI, and GitHub Actions.

    Closes #9143

    Trailing pragmas understood by other common tooling (# type: ignore,
    # pyright: ignore, # noqa, # pragma: no cover and
    # pragma: no branch) are no longer counted toward the line length, so a line
    is not flagged as line-too-long solely because of such a pragma. This mirrors
    the existing behaviour for Pylint's own # pylint: pragmas.

    Closes #10172

    pyreverse: add --no-signatures to show method names without parameter lists or return type annotations in class diagrams.

    Closes #10772

    Add support for --known-first-party similar to --known-third-party.

    Refs #10803

New Checks

    Added a new checker looping-through-iterator (W4801) to detect when an iterator from an outer scope is consumed in a nested loop, which can lead to the iterator being unexpectedly exhausted.

    Refs #2996

    Add new checks impossible-comparison and chained-comparison-all-equal.
    impossible-comparison flags boolean conditions whose chain of numeric
    comparisons is logically contradictory and can never be true (for example
    a > b and b > a). chained-comparison-all-equal flags boolean conditions
    whose operands form a cycle of weak inequalities (<= or >=) and can be
    simplified to a chain of equalities (for example a >= b and b >= a is
    equivalent to a == b).

    Closes #5814

    Add using-comprehension-unpacking-in-unsupported-version (W2607), emitted when
    the code uses the unpacking in comprehensions added by PEP 798 while
    py-version still includes a Python version that cannot compile it.

    Refs #10982

False Positives Fixed

    Fix a false positive for unnecessary-negation (C0117) when negating a
    comparison between dict views (dict.keys()/dict.items()), which like
    set/frozenset support only a partial (subset/superset) ordering, so
    not a.items() <= b.items() is not equivalent to a.items() > b.items().

    Closes #3668

    Fix false positives for attribute-defined-outside-init where __init__
    (etc.) uses a helper method to create attributes.

    Closes #5214

    Fix a false positive for consider-using-generator and use-a-generator
    with an asynchronous list comprehension. Turning it into a generator expression
    would create an asynchronous generator, which those functions cannot consume.

    Closes #7271

    Fixed a false positive assigning-non-slot when assigning to an inherited
    descriptor through an instance returned by a method annotated with the
    subclass. This regressed in pylint 3.0.0.

    Fixed by upgrading astroid to 4.1.0.

    Closes #8053

    Fixed a false positive no-member when a classmethod annotated with
    typing.Self is overridden in a subclass and its result is used directly,
    as in Subclass.build().only_on_subclass(). The return type is now narrowed
    to the subclass rather than the base class. This regressed in pylint 3.0.0.

    Fixed by upgrading astroid to 4.1.0.

    Closes #9159

    Avoid emitting deprecated-class for imports inside a recognized
    sys.version_info guard.

    Closes #9533

    Fix a false positive for inconsistent-return-statements when an instance
    method annotated with NoReturn (or Never) is called via the class
    rather than an instance (e.g. MyClass.raise_method(obj)). The unbound
    method form is now recognised as never returning, matching the existing
    behaviour for the bound-method form.

    Closes #9692

    Fix used-before-assignment false positive for names bound in only some arms of an if/elif/else chain.

    Closes #9879

    Fix a false positive for useless-parent-delegation when a method overrides a
    method of a C-level parent whose signature cannot be inspected, such as
    Exception.__init__. Because Exception.__init__ accepts *args, an
    override taking only self narrows the accepted arguments and is not useless.
    Overrides of object.__init__ are still reported.

    Closes #9994

    Fixed a false positive no-name-in-module when a module is imported with
    an alias that shadows its base module and a function named format is
    called on the alias.

    Fixed by upgrading astroid to 4.3.1.

    Closes #10193

    Fixed a false positive unsubscriptable-object on instances of a generic class defining __class_getitem__.

    Closes #10360

    Fixed a false positive unexpected-keyword-argument when passing dtype
    to numpy.concatenate().

    Fixed by upgrading astroid to 4.3.1.

    Closes #10548

    Fix a false positive for unexpected-keyword-arg for dataclasses
    using generic type aliases (PEP 695).

    Closes #10703

    Fix false positive unreachable when calling a function with @overload where one signature returns NoReturn.

    Closes #10785

    Fix a false positive for too-many-function-args for dataclasses
    using generic type aliases (PEP 695).

    Closes #10788

    Fix a false positive relative-beyond-top-level error when linting specific files in namespace packages in parallel mode by augmenting sys.path before loading plugins and expanding files 
consistently for parallel workers.

    Closes #10794

    Fix # pylint: enable inside a try block leaking into the except
    handler. For example in the following code, no-member is no longer
    incorrectly re-enabled in the except block:

    class Basket:
        # pylint: disable=no-member
        def pick(self):
            try:
                # pylint: enable=no-member
                print(self.apple)  # no-member emitted here
            except KeyError:
                print(self.banana)  # no-member NOT emitted here (correct)

    Requires astroid 4.2.

    Refs #10933

    Fix false positives for the Python 3.15 syntax added by PEP 798, unpacking in
    comprehensions:
        star-needs-assignment-target (E0114) was emitted for the unpacked element
        of a comprehension, e.g. [*sub for sub in lists].
        consider-using-dict-comprehension (R1717) was emitted for
        dict([*pairs for pairs in nested]), which flattens its argument and is
        therefore not equivalent to a key/value dict comprehension.

4.0.10

False Positives Fixed

    Fix false positives for :ref:unnecessary-lambda when a variable referenced in
    the called expression is assigned, reassigned, or deleted later in the same scope.

    Closes #8192

    Fix a false positive for unused-argument in dataclass __new__ methods
    when the arguments are consumed by a generated __init__ method.

    Closes #9843

    Fix a false positive for missing-kwoa when keyword-only arguments are passed
    through a **kwargs dictionary that is not a literal at the call site, for
    example one filled with options["key"] = value after its creation.

    Closes #10029

    ungrouped-imports no longer reports imports inside mutually exclusive
    OS guard branches (if os.name == "nt": / if sys.platform == "win32":),
    matching the existing behavior for sys.version_info guards.

    Closes #10460

Other Bug Fixes

    A TypeError crash could occur when checking a for loop that
    iterates over a subscript with non-numeric constant bounds or a zero
    step, e.g. for a, b in {"k": [][0: ""]}.values():.

    Closes #11472

    Fix a crash (AttributeError: 'ClassDef' object has no attribute 'expr') in the
    import-private-name extension when an annotated assignment's value is an
    attribute access on a call rooted at a non-Name node, e.g. x: str = ''().a.

    Closes #11479


To generate a diff of this commit:
cvs rdiff -u -r1.123 -r1.124 pkgsrc/devel/py-pylint/Makefile
cvs rdiff -u -r1.37 -r1.38 pkgsrc/devel/py-pylint/PLIST
cvs rdiff -u -r1.108 -r1.109 pkgsrc/devel/py-pylint/distinfo

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: pkgsrc/devel/py-pylint/Makefile
diff -u pkgsrc/devel/py-pylint/Makefile:1.123 pkgsrc/devel/py-pylint/Makefile:1.124
--- pkgsrc/devel/py-pylint/Makefile:1.123       Thu Sep 24 11:11:17 2026
+++ pkgsrc/devel/py-pylint/Makefile     Sun Oct  4 17:01:25 2026
@@ -1,8 +1,8 @@
-# $NetBSD: Makefile,v 1.123 2026/09/24 11:11:17 adam Exp $
+# $NetBSD: Makefile,v 1.124 2026/10/04 17:01:25 wiz Exp $
 #
 # Changes: https://github.com/pylint-dev/pylint/releases
 
-DISTNAME=      pylint-4.0.9
+DISTNAME=      pylint-4.1.2
 PKGNAME=       ${PYPKGPREFIX}-${DISTNAME}
 CATEGORIES=    devel python
 MASTER_SITES=  ${MASTER_SITE_PYPI:=p/pylint/}
@@ -21,15 +21,17 @@ DEPENDS+=   ${PYPKGPREFIX}-platformdirs>=2
 DEPENDS+=      ${PYPKGPREFIX}-tomlkit>=0.10.1:../../textproc/py-tomlkit
 TEST_DEPENDS+= ${PYPKGPREFIX}-gitpython>=3:../../devel/py-gitpython
 TEST_DEPENDS+= ${PYPKGPREFIX}-test-benchmark>=0:../../devel/py-test-benchmark
+TEST_DEPENDS+= ${PYPKGPREFIX}-test-remaster>=0:../../devel/py-test-remaster
 
 USE_LANGUAGES= # none
 
 PY_RENAME_BINARIES=    pylint pylint-config pyreverse symilar
 
-# as of 4.0.6
-# 25 failed, 1998 passed, 261 skipped, 5 xfailed
+# as of 4.1.2
+# 13 failed, 2250 passed, 315 skipped, 5 xfailed
 
 .include "../../lang/python/pyversion.mk"
+
 .if ${PYTHON_VERSION} < 311
 DEPENDS+=      ${PYPKGPREFIX}-tomli>=1.1:../../textproc/py-tomli
 .endif

Index: pkgsrc/devel/py-pylint/PLIST
diff -u pkgsrc/devel/py-pylint/PLIST:1.37 pkgsrc/devel/py-pylint/PLIST:1.38
--- pkgsrc/devel/py-pylint/PLIST:1.37   Sun Oct 19 18:58:54 2025
+++ pkgsrc/devel/py-pylint/PLIST        Sun Oct  4 17:01:25 2026
@@ -1,4 +1,4 @@
-@comment $NetBSD: PLIST,v 1.37 2025/10/19 18:58:54 wiz Exp $
+@comment $NetBSD: PLIST,v 1.38 2026/10/04 17:01:25 wiz Exp $
 bin/pylint-${PYVERSSUFFIX}
 bin/pylint-config-${PYVERSSUFFIX}
 bin/pyreverse-${PYVERSSUFFIX}
@@ -103,6 +103,9 @@ ${PYSITELIB}/pylint/checkers/lambda_expr
 ${PYSITELIB}/pylint/checkers/logging.py
 ${PYSITELIB}/pylint/checkers/logging.pyc
 ${PYSITELIB}/pylint/checkers/logging.pyo
+${PYSITELIB}/pylint/checkers/looping_iterator_checker.py
+${PYSITELIB}/pylint/checkers/looping_iterator_checker.pyc
+${PYSITELIB}/pylint/checkers/looping_iterator_checker.pyo
 ${PYSITELIB}/pylint/checkers/match_statements_checker.py
 ${PYSITELIB}/pylint/checkers/match_statements_checker.pyc
 ${PYSITELIB}/pylint/checkers/match_statements_checker.pyo
@@ -392,6 +395,9 @@ ${PYSITELIB}/pylint/pyreverse/main.pyo
 ${PYSITELIB}/pylint/pyreverse/mermaidjs_printer.py
 ${PYSITELIB}/pylint/pyreverse/mermaidjs_printer.pyc
 ${PYSITELIB}/pylint/pyreverse/mermaidjs_printer.pyo
+${PYSITELIB}/pylint/pyreverse/node_info.py
+${PYSITELIB}/pylint/pyreverse/node_info.pyc
+${PYSITELIB}/pylint/pyreverse/node_info.pyo
 ${PYSITELIB}/pylint/pyreverse/plantuml_printer.py
 ${PYSITELIB}/pylint/pyreverse/plantuml_printer.pyc
 ${PYSITELIB}/pylint/pyreverse/plantuml_printer.pyo
@@ -419,6 +425,9 @@ ${PYSITELIB}/pylint/reporters/collecting
 ${PYSITELIB}/pylint/reporters/json_reporter.py
 ${PYSITELIB}/pylint/reporters/json_reporter.pyc
 ${PYSITELIB}/pylint/reporters/json_reporter.pyo
+${PYSITELIB}/pylint/reporters/junit_reporter.py
+${PYSITELIB}/pylint/reporters/junit_reporter.pyc
+${PYSITELIB}/pylint/reporters/junit_reporter.pyo
 ${PYSITELIB}/pylint/reporters/multi_reporter.py
 ${PYSITELIB}/pylint/reporters/multi_reporter.pyc
 ${PYSITELIB}/pylint/reporters/multi_reporter.pyo
@@ -449,6 +458,9 @@ ${PYSITELIB}/pylint/testutils/__init__.p
 ${PYSITELIB}/pylint/testutils/_primer/__init__.py
 ${PYSITELIB}/pylint/testutils/_primer/__init__.pyc
 ${PYSITELIB}/pylint/testutils/_primer/__init__.pyo
+${PYSITELIB}/pylint/testutils/_primer/comparator.py
+${PYSITELIB}/pylint/testutils/_primer/comparator.pyc
+${PYSITELIB}/pylint/testutils/_primer/comparator.pyo
 ${PYSITELIB}/pylint/testutils/_primer/package_to_lint.py
 ${PYSITELIB}/pylint/testutils/_primer/package_to_lint.pyc
 ${PYSITELIB}/pylint/testutils/_primer/package_to_lint.pyo
@@ -458,15 +470,36 @@ ${PYSITELIB}/pylint/testutils/_primer/pr
 ${PYSITELIB}/pylint/testutils/_primer/primer_command.py
 ${PYSITELIB}/pylint/testutils/_primer/primer_command.pyc
 ${PYSITELIB}/pylint/testutils/_primer/primer_command.pyo
+${PYSITELIB}/pylint/testutils/_primer/primer_comment.py
+${PYSITELIB}/pylint/testutils/_primer/primer_comment.pyc
+${PYSITELIB}/pylint/testutils/_primer/primer_comment.pyo
 ${PYSITELIB}/pylint/testutils/_primer/primer_compare_command.py
 ${PYSITELIB}/pylint/testutils/_primer/primer_compare_command.pyc
 ${PYSITELIB}/pylint/testutils/_primer/primer_compare_command.pyo
+${PYSITELIB}/pylint/testutils/_primer/primer_configuration.py
+${PYSITELIB}/pylint/testutils/_primer/primer_configuration.pyc
+${PYSITELIB}/pylint/testutils/_primer/primer_configuration.pyo
 ${PYSITELIB}/pylint/testutils/_primer/primer_prepare_command.py
 ${PYSITELIB}/pylint/testutils/_primer/primer_prepare_command.pyc
 ${PYSITELIB}/pylint/testutils/_primer/primer_prepare_command.pyo
 ${PYSITELIB}/pylint/testutils/_primer/primer_run_command.py
 ${PYSITELIB}/pylint/testutils/_primer/primer_run_command.pyc
 ${PYSITELIB}/pylint/testutils/_primer/primer_run_command.pyo
+${PYSITELIB}/pylint/testutils/_primer/pyreverse_primer.py
+${PYSITELIB}/pylint/testutils/_primer/pyreverse_primer.pyc
+${PYSITELIB}/pylint/testutils/_primer/pyreverse_primer.pyo
+${PYSITELIB}/pylint/testutils/_primer/pyreverse_primer_command.py
+${PYSITELIB}/pylint/testutils/_primer/pyreverse_primer_command.pyc
+${PYSITELIB}/pylint/testutils/_primer/pyreverse_primer_command.pyo
+${PYSITELIB}/pylint/testutils/_primer/pyreverse_primer_compare_command.py
+${PYSITELIB}/pylint/testutils/_primer/pyreverse_primer_compare_command.pyc
+${PYSITELIB}/pylint/testutils/_primer/pyreverse_primer_compare_command.pyo
+${PYSITELIB}/pylint/testutils/_primer/pyreverse_primer_run_command.py
+${PYSITELIB}/pylint/testutils/_primer/pyreverse_primer_run_command.pyc
+${PYSITELIB}/pylint/testutils/_primer/pyreverse_primer_run_command.pyo
+${PYSITELIB}/pylint/testutils/_primer/pyreverse_primer_target.py
+${PYSITELIB}/pylint/testutils/_primer/pyreverse_primer_target.pyc
+${PYSITELIB}/pylint/testutils/_primer/pyreverse_primer_target.pyo
 ${PYSITELIB}/pylint/testutils/_run.py
 ${PYSITELIB}/pylint/testutils/_run.pyc
 ${PYSITELIB}/pylint/testutils/_run.pyo

Index: pkgsrc/devel/py-pylint/distinfo
diff -u pkgsrc/devel/py-pylint/distinfo:1.108 pkgsrc/devel/py-pylint/distinfo:1.109
--- pkgsrc/devel/py-pylint/distinfo:1.108       Thu Sep 24 11:11:17 2026
+++ pkgsrc/devel/py-pylint/distinfo     Sun Oct  4 17:01:25 2026
@@ -1,5 +1,5 @@
-$NetBSD: distinfo,v 1.108 2026/09/24 11:11:17 adam Exp $
+$NetBSD: distinfo,v 1.109 2026/10/04 17:01:25 wiz Exp $
 
-BLAKE2s (pylint-4.0.9.tar.gz) = d32fbe3595523f22622165301e2c19834e831b6f13f72132b96bec6763c10806
-SHA512 (pylint-4.0.9.tar.gz) = 499c7e5887b8b9781c7d051d7b332e4302477640433f344e6e99e35a1898266913ad74803958920ff884687929a9c2fa2ca1fee1cbdbbf5798520ddbebf8033c
-Size (pylint-4.0.9.tar.gz) = 1604187 bytes
+BLAKE2s (pylint-4.1.2.tar.gz) = 1248acb43fbd86fb172cd659b31f6b7db332add395eb0dca145136055c0bde40
+SHA512 (pylint-4.1.2.tar.gz) = 8f2fb385d0866865fe8ce7e5382586e1e5b4420544ab58773079c2387be4c6e93033f0f749a7972cce91faae9f957e3be397d695cab294f0752e4d1bc71f1c93
+Size (pylint-4.1.2.tar.gz) = 1739885 bytes



Home | Main Index | Thread Index | Old Index