Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-pylint for openSUSE:Factory checked in at 2026-03-02 17:40:57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-pylint (Old) and /work/SRC/openSUSE:Factory/.python-pylint.new.29461 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pylint" Mon Mar 2 17:40:57 2026 rev:53 rq:1335775 version:4.0.5 Changes: -------- --- /work/SRC/openSUSE:Factory/python-pylint/python-pylint.changes 2026-01-26 12:34:39.530019815 +0100 +++ /work/SRC/openSUSE:Factory/.python-pylint.new.29461/python-pylint.changes 2026-03-02 17:41:39.314647575 +0100 @@ -1,0 +2,20 @@ +Mon Mar 2 09:56:10 UTC 2026 - Dirk Müller <[email protected]> + +- update to 4.0.5: + * Fix possibly-used-before-assignment false positive when using + self.fail() in tests. + * Fixed false positive for ``logging-unsupported-format`` when + no arguments are provided to logging functions. + * According to Python's logging documentation, no formatting is + performed when no arguments are supplied, so strings like + ``logging.error("%test")`` are valid. + * Fix a false positive for ``invalid-name`` where a dataclass + field typed with ``Final`` was evaluated against the + ``class_const`` regex instead of the ``class_attribute`` regex. + * Avoid emitting `unspecified-encoding` (W1514) when `py- + version` is 3.15+. + * Fix `--known_third_party` config being ignored. + * Fixed dynamic color mapping for "fail-on" messages when using + multiple reporter/output formats. + +------------------------------------------------------------------- Old: ---- pylint-4.0.4-gh.tar.gz New: ---- pylint-4.0.5-gh.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-pylint.spec ++++++ --- /var/tmp/diff_new_pack.VZc4Zd/_old 2026-03-02 17:41:39.882671067 +0100 +++ /var/tmp/diff_new_pack.VZc4Zd/_new 2026-03-02 17:41:39.882671067 +0100 @@ -24,7 +24,7 @@ %endif %{?sle15_python_module_pythons} Name: python-pylint -Version: 4.0.4 +Version: 4.0.5 Release: 0 Summary: Syntax and style checker for Python code License: GPL-2.0-or-later @@ -40,7 +40,7 @@ Requires: python-dill >= 0.3.7 Requires: python-platformdirs >= 2.2 Requires: python-tomlkit >= 0.10.1 -Requires: (python-astroid >= 4.0.2 with python-astroid < 4.1.0~dev0) +Requires: (python-astroid >= 4.0.2 with python-astroid < 4.2.0) Requires: (python-isort >= 5 with python-isort < 8) Requires: (python-mccabe >= 0.6 with python-mccabe < 0.8) BuildArch: noarch @@ -52,7 +52,7 @@ %endif %if %{with tests} # SECTION pylint deps -BuildRequires: %{python_module astroid >= 4.0.2 with %python-astroid < 4.1.0~dev0} +BuildRequires: %{python_module astroid >= 4.0.2 with %python-astroid < 4.2.0} BuildRequires: %{python_module dill >= 0.3.7} BuildRequires: %{python_module enchant} BuildRequires: %{python_module isort >= 5 with %python-isort < 8} ++++++ pylint-4.0.4-gh.tar.gz -> pylint-4.0.5-gh.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-4.0.4/CONTRIBUTORS.txt new/pylint-4.0.5/CONTRIBUTORS.txt --- old/pylint-4.0.4/CONTRIBUTORS.txt 2025-11-30 14:24:33.000000000 +0100 +++ new/pylint-4.0.5/CONTRIBUTORS.txt 2026-02-20 10:02:31.000000000 +0100 @@ -313,6 +313,7 @@ - Grizzly Nyo <[email protected]> - Gabriel R. Sezefredo <[email protected]>: Fixed "exception-escape" false positive with generators - Filipe Brandenburger <[email protected]> +- Felix Preuschoff <[email protected]> - Fantix King <[email protected]> (UChicago) - Eric McDonald <[email protected]> - Elias Dorneles <[email protected]>: minor adjust to config defaults and docs @@ -494,6 +495,7 @@ - Michael Giuffrida <[email protected]> - Melvin Hazeleger <[email protected]> - Meltem Kenis <[email protected]> +- Mehraz Hossain Rumman <[email protected]> - Mehdi Drissi <[email protected]> - Matěj Grabovský <[email protected]> - Matthijs Blom <[email protected]> @@ -524,6 +526,7 @@ - Kayran Schmidt <[email protected]> - Karthik Nadig <[email protected]> - Jürgen Hermann <[email protected]> +- Julfried <[email protected]> - Josselin Feist <[email protected]> - Jonathan Kotta <[email protected]> - John Paraskevopoulos <[email protected]>: add 'differing-param-doc' and 'differing-type-doc' @@ -565,7 +568,6 @@ - Giuseppe Valente <[email protected]> - Gary Tyler McLeod <[email protected]> - Felix von Drigalski <[email protected]> -- Felix Preuschoff <[email protected]> - Fabrice Douchant <[email protected]> - Fabio Natali <[email protected]> - Fabian Damken <[email protected]> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-4.0.4/doc/user_guide/checkers/features.rst new/pylint-4.0.5/doc/user_guide/checkers/features.rst --- old/pylint-4.0.4/doc/user_guide/checkers/features.rst 2025-11-30 14:24:33.000000000 +0100 +++ new/pylint-4.0.5/doc/user_guide/checkers/features.rst 2026-02-20 10:02:31.000000000 +0100 @@ -1085,7 +1085,8 @@ :unspecified-encoding (W1514): *Using open without explicitly specifying an encoding* It is better to specify an encoding when opening documents. Using the system default implicitly can create problems on other operating systems. See - https://peps.python.org/pep-0597/ + https://peps.python.org/pep-0597/ This message can't be emitted when using + Python >= 3.15. :forgotten-debug-statement (W1515): *Leaving functions creating breakpoints in production code is not recommended* Calls to breakpoint(), sys.breakpointhook() and pdb.set_trace() should be removed from code that is not actively being debugged. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-4.0.4/doc/whatsnew/4/4.0/index.rst new/pylint-4.0.5/doc/whatsnew/4/4.0/index.rst --- old/pylint-4.0.4/doc/whatsnew/4/4.0/index.rst 2025-11-30 14:24:33.000000000 +0100 +++ new/pylint-4.0.5/doc/whatsnew/4/4.0/index.rst 2026-02-20 10:02:31.000000000 +0100 @@ -74,6 +74,52 @@ .. towncrier release notes start +What's new in Pylint 4.0.5? +--------------------------- +Release date: 2026-02-20 + + +False Positives Fixed +--------------------- + +- Fix possibly-used-before-assignment false positive when using self.fail() in tests. + + Closes #10743 (`#10743 <https://github.com/pylint-dev/pylint/issues/10743>`_) + +- Fixed false positive for ``logging-unsupported-format`` when no arguments are provided to logging functions. + + According to Python's logging documentation, no formatting is performed when no arguments are supplied, so strings like ``logging.error("%test")`` are valid. + + Closes #10752 (`#10752 <https://github.com/pylint-dev/pylint/issues/10752>`_) + +- Fix a false positive for ``invalid-name`` where a dataclass field typed with ``Final`` + was evaluated against the ``class_const`` regex instead of the ``class_attribute`` regex. + + Closes #10790 (`#10790 <https://github.com/pylint-dev/pylint/issues/10790>`_) + +- Avoid emitting `unspecified-encoding` (W1514) when `py-version` is 3.15+. + + Refs #10791 (`#10791 <https://github.com/pylint-dev/pylint/issues/10791>`_) + + + +Other Bug Fixes +--------------- + +- Fix `--known_third_party` config being ignored. + + Closes #10801 (`#10801 <https://github.com/pylint-dev/pylint/issues/10801>`_) + +- Fixed dynamic color mapping for "fail-on" messages when using multiple reporter/output formats. + + Closes #10825 (`#10825 <https://github.com/pylint-dev/pylint/issues/10825>`_) + +- dependency on isort is now set to <9, permitting to use isort 8. + + Closes #10857 (`#10857 <https://github.com/pylint-dev/pylint/issues/10857>`_) + + + What's new in Pylint 4.0.4? -------------------------------- Release date: 2025-11-30 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-4.0.4/pylint/__pkginfo__.py new/pylint-4.0.5/pylint/__pkginfo__.py --- old/pylint-4.0.4/pylint/__pkginfo__.py 2025-11-30 14:24:33.000000000 +0100 +++ new/pylint-4.0.5/pylint/__pkginfo__.py 2026-02-20 10:02:31.000000000 +0100 @@ -9,7 +9,7 @@ from __future__ import annotations -__version__ = "4.0.4" +__version__ = "4.0.5" def get_numversion_from_version(v: str) -> tuple[int, int, int]: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-4.0.4/pylint/checkers/base/name_checker/checker.py new/pylint-4.0.5/pylint/checkers/base/name_checker/checker.py --- old/pylint-4.0.4/pylint/checkers/base/name_checker/checker.py 2025-11-30 14:24:33.000000000 +0100 +++ new/pylint-4.0.5/pylint/checkers/base/name_checker/checker.py 2026-02-20 10:02:31.000000000 +0100 @@ -552,9 +552,14 @@ elif isinstance(frame, nodes.ClassDef) and not any( frame.local_attr_ancestors(node.name) ): - if utils.is_enum_member(node) or utils.is_assign_name_annotated_with( - node, "Final" - ): + if utils.is_assign_name_annotated_with_class_var_typing_name(node, "Final"): + self._check_name("class_const", node.name, node) + elif utils.is_assign_name_annotated_with(node, "Final"): + if frame.is_dataclass: + self._check_name("class_attribute", node.name, node) + else: + self._check_name("class_const", node.name, node) + elif utils.is_enum_member(node): self._check_name("class_const", node.name, node) else: self._check_name("class_attribute", node.name, node) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-4.0.4/pylint/checkers/imports.py new/pylint-4.0.5/pylint/checkers/imports.py --- old/pylint-4.0.4/pylint/checkers/imports.py 2025-11-30 14:24:33.000000000 +0100 +++ new/pylint-4.0.5/pylint/checkers/imports.py 2026-02-20 10:02:31.000000000 +0100 @@ -322,7 +322,6 @@ DEFAULT_PREFERRED_MODULES = () -# pylint: disable-next = too-many-instance-attributes class ImportsChecker(DeprecatedMixin, BaseChecker): """BaseChecker for import statements. @@ -459,15 +458,6 @@ ) self._excluded_edges: defaultdict[str, set[str]] = defaultdict(set) - self._isort_config = isort.Config( - # There is no typo here. EXTRA_standard_library is - # what most users want. The option has been named - # KNOWN_standard_library for ages in pylint, and we - # don't want to break compatibility. - extra_standard_library=linter.config.known_standard_library, - known_third_party=linter.config.known_third_party, - ) - def open(self) -> None: """Called before visiting project (i.e set of modules).""" self.linter.stats.dependencies = {} @@ -756,6 +746,21 @@ imports = [import_node for (import_node, _) in imports] return any(astroid.are_exclusive(import_node, node) for import_node in imports) + @property + def _isort_config(self) -> isort.Config: + """Get the config for use with isort. + + Only valid after CLI parsing finished, i.e. not in __init__ + """ + return isort.Config( + # There is no typo here. EXTRA_standard_library is + # what most users want. The option has been named + # KNOWN_standard_library for ages in pylint, and we + # don't want to break compatibility. + extra_standard_library=self.linter.config.known_standard_library, + known_third_party=self.linter.config.known_third_party, + ) + def _check_imports_order(self, _module_node: nodes.Module) -> tuple[ list[tuple[ImportNode, str]], list[tuple[ImportNode, str]], @@ -763,7 +768,7 @@ ]: """Checks imports of module `node` are grouped by category. - Imports must follow this order: standard, 3rd party, local + Imports must follow this order: standard, 3rd party, 1st party, local """ std_imports: list[tuple[ImportNode, str]] = [] third_party_imports: list[tuple[ImportNode, str]] = [] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-4.0.4/pylint/checkers/logging.py new/pylint-4.0.5/pylint/checkers/logging.py --- old/pylint-4.0.4/pylint/checkers/logging.py 2025-11-30 14:24:33.000000000 +0100 +++ new/pylint-4.0.5/pylint/checkers/logging.py 2026-02-20 10:02:31.000000000 +0100 @@ -355,12 +355,16 @@ keyword_args_cnt + implicit_pos_args + explicit_pos_args ) except utils.UnsupportedFormatCharacter as ex: - char = format_string[ex.index] - self.add_message( - "logging-unsupported-format", - node=node, - args=(char, ord(char), ex.index), - ) + if num_args > 0: + # Only report unsupported format characters if arguments are provided + # When no arguments are supplied, no formatting is performed + # https://docs.python.org/3/library/logging.html#logging.Logger.debug + char = format_string[ex.index] + self.add_message( + "logging-unsupported-format", + node=node, + args=(char, ord(char), ex.index), + ) return except utils.IncompleteFormatString: self.add_message("logging-format-truncated", node=node) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-4.0.4/pylint/checkers/stdlib.py new/pylint-4.0.5/pylint/checkers/stdlib.py --- old/pylint-4.0.4/pylint/checkers/stdlib.py 2025-11-30 14:24:33.000000000 +0100 +++ new/pylint-4.0.5/pylint/checkers/stdlib.py 2026-02-20 10:02:31.000000000 +0100 @@ -580,6 +580,7 @@ "It is better to specify an encoding when opening documents. " "Using the system default implicitly can create problems on other operating systems. " "See https://peps.python.org/pep-0597/", + {"maxversion": (3, 15)}, ), "W1515": ( "Leaving functions creating breakpoints in production code is not recommended", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-4.0.4/pylint/checkers/utils.py new/pylint-4.0.5/pylint/checkers/utils.py --- old/pylint-4.0.4/pylint/checkers/utils.py 2025-11-30 14:24:33.000000000 +0100 +++ new/pylint-4.0.5/pylint/checkers/utils.py 2026-02-20 10:02:31.000000000 +0100 @@ -6,7 +6,7 @@ from __future__ import annotations -import _string # pylint: disable=wrong-import-order # Ruff and Isort disagree about the order here +import _string import builtins import fnmatch import itertools @@ -238,7 +238,13 @@ SINGLETON_VALUES = {True, False, None} TERMINATING_FUNCS_QNAMES = frozenset( - {"_sitebuiltins.Quitter", "sys.exit", "posix._exit", "nt._exit"} + { + "_sitebuiltins.Quitter", + "sys.exit", + "posix._exit", + "nt._exit", + "unittest.case.TestCase.fail", + } ) @@ -1753,6 +1759,22 @@ match annotation: case nodes.Name(name=n) | nodes.Attribute(attrname=n) if n == typing_name: return True + return False + + +def is_assign_name_annotated_with_class_var_typing_name( + node: nodes.AssignName, typing_name: str +) -> bool: + if not is_assign_name_annotated_with(node, "ClassVar"): + return False + annotation = node.parent.annotation + if isinstance(annotation, nodes.Subscript): + annotation = annotation.slice + if isinstance(annotation, nodes.Subscript): + annotation = annotation.value + match annotation: + case nodes.Name(name=n) | nodes.Attribute(attrname=n) if n == typing_name: + return True return False diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-4.0.4/pylint/lint/pylinter.py new/pylint-4.0.5/pylint/lint/pylinter.py --- old/pylint-4.0.4/pylint/lint/pylinter.py 2025-11-30 14:24:33.000000000 +0100 +++ new/pylint-4.0.5/pylint/lint/pylinter.py 2026-02-20 10:02:31.000000000 +0100 @@ -545,9 +545,9 @@ if isinstance(self.reporter, ColorizedTextReporter): self.reporter.set_fail_on_symbols(self.fail_on_symbols) elif isinstance(self.reporter, reporters.MultiReporter): - for _reporter in self.reporter._sub_reporters: - if isinstance(self.reporter, ColorizedTextReporter): - self.reporter.set_fail_on_symbols(self.fail_on_symbols) + for reporter in self.reporter._sub_reporters: + if isinstance(reporter, ColorizedTextReporter): + reporter.set_fail_on_symbols(self.fail_on_symbols) def disable_reporters(self) -> None: """Disable all reporters.""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-4.0.4/pyproject.toml new/pylint-4.0.5/pyproject.toml --- old/pylint-4.0.4/pyproject.toml 2025-11-30 14:24:33.000000000 +0100 +++ new/pylint-4.0.5/pyproject.toml 2026-02-20 10:02:31.000000000 +0100 @@ -45,7 +45,7 @@ "dill>=0.2; python_version<'3.11'", "dill>=0.3.6; python_version>='3.11'", "dill>=0.3.7; python_version>='3.12'", - "isort>=5,!=5.13,<8", + "isort>=5,!=5.13,<9", "mccabe>=0.6,<0.8", "platformdirs>=2.2", "tomli>=1.1; python_version<'3.11'", @@ -94,7 +94,7 @@ # Configuration for the build system test-min = [ # Base test dependencies - "astroid==4.0.1", # Pinned to a specific version for tests + "astroid==4.0.2", # Pinned to a specific version for tests "py~=1.11.0", "pytest~=8.4", "pytest-benchmark~=5.1", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-4.0.4/tbump.toml new/pylint-4.0.5/tbump.toml --- old/pylint-4.0.4/tbump.toml 2025-11-30 14:24:33.000000000 +0100 +++ new/pylint-4.0.5/tbump.toml 2026-02-20 10:02:31.000000000 +0100 @@ -1,7 +1,7 @@ github_url = "https://github.com/pylint-dev/pylint" [version] -current = "4.0.4" +current = "4.0.5" regex = ''' ^(?P<major>0|[1-9]\d*) \. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-4.0.4/tests/checkers/unittest_utils.py new/pylint-4.0.5/tests/checkers/unittest_utils.py --- old/pylint-4.0.4/tests/checkers/unittest_utils.py 2025-11-30 14:24:33.000000000 +0100 +++ new/pylint-4.0.5/tests/checkers/unittest_utils.py 2026-02-20 10:02:31.000000000 +0100 @@ -622,3 +622,22 @@ assert utils.is_reassigned_before_current(first_assign_name, "x") is False finally: first_assign_name.lineno = original_lineno + + +def test_is_terminating_func_unittest_fail() -> None: + node = astroid.extract_node( + """ + from unittest import TestCase + import os + + class TestX(TestCase): + def test_foo(self): + if 'FOO' in os.environ: + x = 1 + else: + self.fail() #@ + print(x) + """ + ) + result = utils.is_terminating_func(node) + assert result is True diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-4.0.4/tests/functional/i/invalid/invalid_name/invalid_name_with_final_typing.py new/pylint-4.0.5/tests/functional/i/invalid/invalid_name/invalid_name_with_final_typing.py --- old/pylint-4.0.4/tests/functional/i/invalid/invalid_name/invalid_name_with_final_typing.py 2025-11-30 14:24:33.000000000 +0100 +++ new/pylint-4.0.5/tests/functional/i/invalid/invalid_name/invalid_name_with_final_typing.py 2026-02-20 10:02:31.000000000 +0100 @@ -3,7 +3,7 @@ # pylint: disable=missing-class-docstring, missing-function-docstring from dataclasses import dataclass -from typing import Final +from typing import ClassVar, Final module_snake_case_constant: Final[int] = 42 # [invalid-name] MODULE_UPPER_CASE_CONSTANT: Final[int] = 42 @@ -17,8 +17,11 @@ @dataclass class Class: - class_snake_case_constant: Final[int] = 42 # [invalid-name] - CLASS_UPPER_CASE_CONSTANT: Final[int] = 42 + class_snake_case_constant: ClassVar[Final[int]] = 42 # [invalid-name] + CLASS_UPPER_CASE_CONSTANT: ClassVar[Final[int]] = 42 + + field_annotated_with_final: Final[int] = 42 + FIELD_ANNOTATED_WITH_FINAL: Final[int] = 42 def method(self) -> None: method_snake_case_constant: Final[int] = 42 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-4.0.4/tests/functional/i/invalid/invalid_name/invalid_name_with_final_typing.txt new/pylint-4.0.5/tests/functional/i/invalid/invalid_name/invalid_name_with_final_typing.txt --- old/pylint-4.0.4/tests/functional/i/invalid/invalid_name/invalid_name_with_final_typing.txt 2025-11-30 14:24:33.000000000 +0100 +++ new/pylint-4.0.5/tests/functional/i/invalid/invalid_name/invalid_name_with_final_typing.txt 2026-02-20 10:02:31.000000000 +0100 @@ -1,4 +1,4 @@ invalid-name:8:0:8:26::"Constant name ""module_snake_case_constant"" doesn't conform to UPPER_CASE naming style":HIGH invalid-name:14:4:14:32:function:"Variable name ""FUNCTION_UPPER_CASE_CONSTANT"" doesn't conform to snake_case naming style":HIGH invalid-name:20:4:20:29:Class:"Class constant name ""class_snake_case_constant"" doesn't conform to UPPER_CASE naming style":HIGH -invalid-name:25:8:25:34:Class.method:"Variable name ""METHOD_UPPER_CASE_CONSTANT"" doesn't conform to snake_case naming style":HIGH +invalid-name:28:8:28:34:Class.method:"Variable name ""METHOD_UPPER_CASE_CONSTANT"" doesn't conform to snake_case naming style":HIGH diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-4.0.4/tests/functional/l/logging/logging_unsupported_format.py new/pylint-4.0.5/tests/functional/l/logging/logging_unsupported_format.py --- old/pylint-4.0.4/tests/functional/l/logging/logging_unsupported_format.py 1970-01-01 01:00:00.000000000 +0100 +++ new/pylint-4.0.5/tests/functional/l/logging/logging_unsupported_format.py 2026-02-20 10:02:31.000000000 +0100 @@ -0,0 +1,23 @@ +"""Tests for logging-unsupported-format (issue #10752) + +According to Python logging documentation, no formatting is performed +when no arguments are supplied. This test verifies that unsupported +format characters are only reported when arguments are provided. +""" + +import logging + +# These should NOT trigger warnings (no args = no formatting) +logging.error("%test") +logging.warning("%badformat") +logging.info("%z - invalid specifier") +logging.debug("%q %k %z - multiple invalid") + +# These SHOULD trigger warnings (args provided = formatting attempted) +logging.error("%test", 123) # [logging-unsupported-format] +logging.warning("%bad", "arg") # [logging-unsupported-format] +logging.info("Value: %s, Invalid: %z", "test", "val") # [logging-unsupported-format] + +# Valid format strings should work fine +logging.info("User %s logged in", "john") +logging.debug("Count: %d", 42) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-4.0.4/tests/functional/l/logging/logging_unsupported_format.txt new/pylint-4.0.5/tests/functional/l/logging/logging_unsupported_format.txt --- old/pylint-4.0.4/tests/functional/l/logging/logging_unsupported_format.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/pylint-4.0.5/tests/functional/l/logging/logging_unsupported_format.txt 2026-02-20 10:02:31.000000000 +0100 @@ -0,0 +1,3 @@ +logging-unsupported-format:17:0:17:27::Unsupported logging format character 't' (0x74) at index 1:UNDEFINED +logging-unsupported-format:18:0:18:30::Unsupported logging format character 'b' (0x62) at index 1:UNDEFINED +logging-unsupported-format:19:0:19:53::Unsupported logging format character 'z' (0x7a) at index 21:UNDEFINED diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-4.0.4/tests/functional/u/unspecified_encoding_py315.py new/pylint-4.0.5/tests/functional/u/unspecified_encoding_py315.py --- old/pylint-4.0.4/tests/functional/u/unspecified_encoding_py315.py 1970-01-01 01:00:00.000000000 +0100 +++ new/pylint-4.0.5/tests/functional/u/unspecified_encoding_py315.py 2026-02-20 10:02:31.000000000 +0100 @@ -0,0 +1,18 @@ +"""No warnings for using open() without specifying an encoding (Python 3.15+).""" + +import io +from pathlib import Path + +FILENAME = "foo.bar" + +open(FILENAME) +open(FILENAME, encoding=None) +io.open(FILENAME) +io.open(FILENAME, encoding=None) + +Path(FILENAME).open() +Path(FILENAME).open(encoding=None) +Path(FILENAME).read_text() +Path(FILENAME).read_text(encoding=None) +Path(FILENAME).write_text("string") +Path(FILENAME).write_text("string", encoding=None) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-4.0.4/tests/functional/u/unspecified_encoding_py315.rc new/pylint-4.0.5/tests/functional/u/unspecified_encoding_py315.rc --- old/pylint-4.0.4/tests/functional/u/unspecified_encoding_py315.rc 1970-01-01 01:00:00.000000000 +0100 +++ new/pylint-4.0.5/tests/functional/u/unspecified_encoding_py315.rc 2026-02-20 10:02:31.000000000 +0100 @@ -0,0 +1,6 @@ +[MAIN] +py-version=3.15 + +[Messages Control] +disable=all +enable=unspecified-encoding diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-4.0.4/tests/functional/u/unspecified_encoding_py38.rc new/pylint-4.0.5/tests/functional/u/unspecified_encoding_py38.rc --- old/pylint-4.0.4/tests/functional/u/unspecified_encoding_py38.rc 1970-01-01 01:00:00.000000000 +0100 +++ new/pylint-4.0.5/tests/functional/u/unspecified_encoding_py38.rc 2026-02-20 10:02:31.000000000 +0100 @@ -0,0 +1,2 @@ +[MAIN] +py-version=3.8 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-4.0.4/tests/functional/w/wrong_import_order2.py new/pylint-4.0.5/tests/functional/w/wrong_import_order2.py --- old/pylint-4.0.4/tests/functional/w/wrong_import_order2.py 2025-11-30 14:24:33.000000000 +0100 +++ new/pylint-4.0.5/tests/functional/w/wrong_import_order2.py 2026-02-20 10:02:31.000000000 +0100 @@ -8,6 +8,7 @@ # external imports import isort +import datetime # std import that should be treated as third-party from six import moves diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-4.0.4/tests/functional/w/wrong_import_order2.rc new/pylint-4.0.5/tests/functional/w/wrong_import_order2.rc --- old/pylint-4.0.4/tests/functional/w/wrong_import_order2.rc 1970-01-01 01:00:00.000000000 +0100 +++ new/pylint-4.0.5/tests/functional/w/wrong_import_order2.rc 2026-02-20 10:02:31.000000000 +0100 @@ -0,0 +1,2 @@ +[IMPORTS] +known-third-party=datetime diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-4.0.4/tests/testutils/data/m/minimal_messages_config.py new/pylint-4.0.5/tests/testutils/data/m/minimal_messages_config.py --- old/pylint-4.0.4/tests/testutils/data/m/minimal_messages_config.py 2025-11-30 14:24:33.000000000 +0100 +++ new/pylint-4.0.5/tests/testutils/data/m/minimal_messages_config.py 2026-02-20 10:02:31.000000000 +0100 @@ -5,6 +5,7 @@ ``test_minimal_messages_config_excluded_file``. """ -f = open("foo.txt") # [consider-using-with, unspecified-encoding] +f = open("foo.txt") # [consider-using-with] +# -1:<3.15: [unspecified-encoding] print("%d" % 1) # [consider-using-f-string]
