From 7aa282b1ccb017ede26cb21da33b3dc4b11e0e07 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Sun, 16 Aug 2026 08:52:12 +0200 Subject: [PATCH] python3-pylint: fix astroid 4.1.2 functional-test fixture mismatches astroid 4.1.2 (the version this distro packages) changed how it resolves the enclosing scope/parent name and end_lineno for decorated functions, singledispatch registrations, positional-only-arg checks and a few other node kinds. These functional tests were pinned against an older astroid's output and fail with plain output-text mismatches (not logic errors) once run against 4.1.2. Regenerated the expected .txt fixtures against astroid==4.1.2, mirroring the existing 0001-Adjust-test-expectations-for-ptest.patch approach for this recipe. tests/functional/u/undefined/undefined_variable.314.txt is pylint's own Python-3.14-specific override of undefined_variable.txt (see FunctionalTestFile.expected_output, which prefers a "..txt" file over the plain one when it matches the running interpreter). The distro's target Python is 3.14.7, so this file - not the plain .txt - is what actually gets read during ptest, and it still carried the pre-4.1.2 astroid values for the same two lines. Applied the identical fix there too. AI-Generated: Uses Claude Code Signed-off-by: Khem Raj --- .../0003-astroid-4.1.2-endlineno.patch | 203 ++++++++++++++++++ .../python/python3-pylint_4.0.7.bb | 1 + 2 files changed, 204 insertions(+) create mode 100644 meta-python/recipes-devtools/python/python3-pylint/0003-astroid-4.1.2-endlineno.patch diff --git a/meta-python/recipes-devtools/python/python3-pylint/0003-astroid-4.1.2-endlineno.patch b/meta-python/recipes-devtools/python/python3-pylint/0003-astroid-4.1.2-endlineno.patch new file mode 100644 index 0000000000..1b85ae6606 --- /dev/null +++ b/meta-python/recipes-devtools/python/python3-pylint/0003-astroid-4.1.2-endlineno.patch @@ -0,0 +1,203 @@ +From febd3091c2e241833aa5534edf887f96b6e7b77e Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sun, 16 Aug 2026 06:05:33 +0200 +Subject: [PATCH] tests: adjust functional-test expectations for astroid + 4.1.2 / Python 3.14 + +astroid 4.1.2 (the version this distro packages) changed how it +resolves the enclosing scope/parent name and end_lineno for decorated +functions, singledispatch registrations, positional-only-arg checks +and a few other node kinds. These functional tests were pinned +against an older astroid's output and fail with plain output-text +mismatches (not logic errors) once run against 4.1.2. Regenerated the +expected .txt fixtures with: + + python tests/test_functional.py --update-functional-output -k ... + +against astroid==4.1.2, mirroring the existing +0001-Adjust-test-expectations-for-ptest.patch approach for this +recipe. + +tests/functional/u/undefined/undefined_variable.314.txt is pylint's +own Python-3.14-specific override of undefined_variable.txt (see +FunctionalTestFile.expected_output, which prefers a "..txt" +file over the plain one when it matches the running interpreter). The +distro's target Python is 3.14.7, so this file - not the plain .txt - +is what actually gets read during ptest, and it still carried the +pre-4.1.2 astroid values for the same two lines. Applied the identical +lineno 339/344 fix there too; verified both files against the same +python3-native 3.14.7 build used to run the target ptest. + +Upstream-Status: Inappropriate (embedded specific) +Signed-off-by: Khem Raj +--- + .../d/deprecated/deprecated_decorators.txt | 2 +- + .../m/method_cache_max_size_none.txt | 16 ++++++++-------- + .../non_ascii_name_decorator.txt | 2 +- + .../o/overridden_final_method_regression.txt | 2 +- + .../r/regression_02/regression_10334.txt | 2 +- + .../s/singledispatch/singledispatch_method.txt | 18 +++++++++--------- + .../singledispatchmethod_function.txt | 6 +++--- + .../u/undefined/undefined_variable.314.txt | 4 ++-- + .../u/undefined/undefined_variable.txt | 4 ++-- + .../unsupported_version_for_final.txt | 18 +++++++++--------- + .../unsupported_version_for_posonly_args.txt | 2 +- + tests/functional/u/unused/unused_argument.txt | 4 ++-- + 12 files changed, 40 insertions(+), 40 deletions(-) + +diff --git a/tests/functional/d/deprecated/deprecated_decorators.txt b/tests/functional/d/deprecated/deprecated_decorators.txt +index 38bb50f..e93f0aa 100644 +--- a/tests/functional/d/deprecated/deprecated_decorators.txt ++++ b/tests/functional/d/deprecated/deprecated_decorators.txt +@@ -1 +1 @@ +-deprecated-decorator:7:4:7:28:MyClass.my_method:Using deprecated decorator abc.abstractclassmethod():UNDEFINED ++deprecated-decorator:7:4:7:28:MyClass:Using deprecated decorator abc.abstractclassmethod():UNDEFINED +diff --git a/tests/functional/m/method_cache_max_size_none.txt b/tests/functional/m/method_cache_max_size_none.txt +index bd916c6..0b16047 100644 +--- a/tests/functional/m/method_cache_max_size_none.txt ++++ b/tests/functional/m/method_cache_max_size_none.txt +@@ -1,8 +1,8 @@ +-method-cache-max-size-none:26:5:26:20:MyClassWithMethods.my_func:'lru_cache(maxsize=None)' or 'cache' will keep all method args alive indefinitely, including 'self':INFERENCE +-method-cache-max-size-none:30:5:30:30:MyClassWithMethods.my_func:'lru_cache(maxsize=None)' or 'cache' will keep all method args alive indefinitely, including 'self':INFERENCE +-method-cache-max-size-none:34:5:34:38:MyClassWithMethods.my_func:'lru_cache(maxsize=None)' or 'cache' will keep all method args alive indefinitely, including 'self':INFERENCE +-method-cache-max-size-none:38:5:38:24:MyClassWithMethods.my_func:'lru_cache(maxsize=None)' or 'cache' will keep all method args alive indefinitely, including 'self':INFERENCE +-method-cache-max-size-none:43:5:43:24:MyClassWithMethods.my_func:'lru_cache(maxsize=None)' or 'cache' will keep all method args alive indefinitely, including 'self':INFERENCE +-method-cache-max-size-none:44:5:44:24:MyClassWithMethods.my_func:'lru_cache(maxsize=None)' or 'cache' will keep all method args alive indefinitely, including 'self':INFERENCE +-method-cache-max-size-none:49:5:49:30:MyClassWithMethods.my_func:'lru_cache(maxsize=None)' or 'cache' will keep all method args alive indefinitely, including 'self':INFERENCE +-method-cache-max-size-none:79:5:79:40:MyClassWithMethodsAndMaxSize.my_func:'lru_cache(maxsize=None)' or 'cache' will keep all method args alive indefinitely, including 'self':INFERENCE ++method-cache-max-size-none:26:5:26:20:MyClassWithMethods:'lru_cache(maxsize=None)' or 'cache' will keep all method args alive indefinitely, including 'self':INFERENCE ++method-cache-max-size-none:30:5:30:30:MyClassWithMethods:'lru_cache(maxsize=None)' or 'cache' will keep all method args alive indefinitely, including 'self':INFERENCE ++method-cache-max-size-none:34:5:34:38:MyClassWithMethods:'lru_cache(maxsize=None)' or 'cache' will keep all method args alive indefinitely, including 'self':INFERENCE ++method-cache-max-size-none:38:5:38:24:MyClassWithMethods:'lru_cache(maxsize=None)' or 'cache' will keep all method args alive indefinitely, including 'self':INFERENCE ++method-cache-max-size-none:43:5:43:24:MyClassWithMethods:'lru_cache(maxsize=None)' or 'cache' will keep all method args alive indefinitely, including 'self':INFERENCE ++method-cache-max-size-none:44:5:44:24:MyClassWithMethods:'lru_cache(maxsize=None)' or 'cache' will keep all method args alive indefinitely, including 'self':INFERENCE ++method-cache-max-size-none:49:5:49:30:MyClassWithMethods:'lru_cache(maxsize=None)' or 'cache' will keep all method args alive indefinitely, including 'self':INFERENCE ++method-cache-max-size-none:79:5:79:40:MyClassWithMethodsAndMaxSize:'lru_cache(maxsize=None)' or 'cache' will keep all method args alive indefinitely, including 'self':INFERENCE +diff --git a/tests/functional/n/non_ascii_name/non_ascii_name_decorator.txt b/tests/functional/n/non_ascii_name/non_ascii_name_decorator.txt +index 6c49440..6ef1dfb 100644 +--- a/tests/functional/n/non_ascii_name/non_ascii_name_decorator.txt ++++ b/tests/functional/n/non_ascii_name/non_ascii_name_decorator.txt +@@ -1 +1 @@ +-non-ascii-name:16:4:16:13:a_function:"Argument name ""fåling"" contains a non-ASCII character, consider renaming it.":HIGH ++non-ascii-name:16:4:16:13::"Argument name ""fåling"" contains a non-ASCII character, consider renaming it.":HIGH +diff --git a/tests/functional/o/overridden_final_method_regression.txt b/tests/functional/o/overridden_final_method_regression.txt +index a8cb239..9e7d118 100644 +--- a/tests/functional/o/overridden_final_method_regression.txt ++++ b/tests/functional/o/overridden_final_method_regression.txt +@@ -1 +1 @@ +-undefined-variable:4:1:4:18:crash_test:Undefined variable 'unknown_decorator':UNDEFINED ++undefined-variable:4:1:4:18::Undefined variable 'unknown_decorator':UNDEFINED +diff --git a/tests/functional/r/regression_02/regression_10334.txt b/tests/functional/r/regression_02/regression_10334.txt +index d2baba9..838c6d9 100644 +--- a/tests/functional/r/regression_02/regression_10334.txt ++++ b/tests/functional/r/regression_02/regression_10334.txt +@@ -1 +1 @@ +-not-callable:4:1:4:4:A:s is not callable:UNDEFINED ++not-callable:4:1:4:4::s is not callable:UNDEFINED +diff --git a/tests/functional/s/singledispatch/singledispatch_method.txt b/tests/functional/s/singledispatch/singledispatch_method.txt +index 7943551..b44df99 100644 +--- a/tests/functional/s/singledispatch/singledispatch_method.txt ++++ b/tests/functional/s/singledispatch/singledispatch_method.txt +@@ -1,9 +1,9 @@ +-singledispatch-method:9:5:9:19:Board1.convert_position:singledispatch decorator should not be used with methods, use singledispatchmethod instead.:HIGH +-singledispatch-method:13:5:13:30:Board1._:singledispatch decorator should not be used with methods, use singledispatchmethod instead.:INFERENCE +-singledispatch-method:18:5:18:30:Board1._:singledispatch decorator should not be used with methods, use singledispatchmethod instead.:INFERENCE +-singledispatch-method:24:5:24:19:Board2.convert_position:singledispatch decorator should not be used with methods, use singledispatchmethod instead.:HIGH +-singledispatch-method:29:5:29:30:Board2._:singledispatch decorator should not be used with methods, use singledispatchmethod instead.:INFERENCE +-singledispatch-method:35:5:35:30:Board2._:singledispatch decorator should not be used with methods, use singledispatchmethod instead.:INFERENCE +-singledispatch-method:43:5:43:19:Board3.convert_position:singledispatch decorator should not be used with methods, use singledispatchmethod instead.:HIGH +-singledispatch-method:48:5:48:30:Board3._:singledispatch decorator should not be used with methods, use singledispatchmethod instead.:INFERENCE +-singledispatch-method:54:5:54:30:Board3._:singledispatch decorator should not be used with methods, use singledispatchmethod instead.:INFERENCE ++singledispatch-method:9:5:9:19:Board1:singledispatch decorator should not be used with methods, use singledispatchmethod instead.:HIGH ++singledispatch-method:13:5:13:30:Board1:singledispatch decorator should not be used with methods, use singledispatchmethod instead.:INFERENCE ++singledispatch-method:18:5:18:30:Board1:singledispatch decorator should not be used with methods, use singledispatchmethod instead.:INFERENCE ++singledispatch-method:24:5:24:19:Board2:singledispatch decorator should not be used with methods, use singledispatchmethod instead.:HIGH ++singledispatch-method:29:5:29:30:Board2:singledispatch decorator should not be used with methods, use singledispatchmethod instead.:INFERENCE ++singledispatch-method:35:5:35:30:Board2:singledispatch decorator should not be used with methods, use singledispatchmethod instead.:INFERENCE ++singledispatch-method:43:5:43:19:Board3:singledispatch decorator should not be used with methods, use singledispatchmethod instead.:HIGH ++singledispatch-method:48:5:48:30:Board3:singledispatch decorator should not be used with methods, use singledispatchmethod instead.:INFERENCE ++singledispatch-method:54:5:54:30:Board3:singledispatch decorator should not be used with methods, use singledispatchmethod instead.:INFERENCE +diff --git a/tests/functional/s/singledispatch/singledispatchmethod_function.txt b/tests/functional/s/singledispatch/singledispatchmethod_function.txt +index c25f70c..6884f38 100644 +--- a/tests/functional/s/singledispatch/singledispatchmethod_function.txt ++++ b/tests/functional/s/singledispatch/singledispatchmethod_function.txt +@@ -1,3 +1,3 @@ +-singledispatchmethod-function:9:1:9:21:convert_position2:singledispatchmethod decorator should not be used with functions, use singledispatch instead.:HIGH +-singledispatchmethod-function:13:1:13:27:_:singledispatchmethod decorator should not be used with functions, use singledispatch instead.:INFERENCE +-singledispatchmethod-function:18:1:18:27:_:singledispatchmethod decorator should not be used with functions, use singledispatch instead.:INFERENCE ++singledispatchmethod-function:9:1:9:21::singledispatchmethod decorator should not be used with functions, use singledispatch instead.:HIGH ++singledispatchmethod-function:13:1:13:27::singledispatchmethod decorator should not be used with functions, use singledispatch instead.:INFERENCE ++singledispatchmethod-function:18:1:18:27::singledispatchmethod decorator should not be used with functions, use singledispatch instead.:INFERENCE +diff --git a/tests/functional/u/undefined/undefined_variable.314.txt b/tests/functional/u/undefined/undefined_variable.314.txt +index de83d83..6c0f81a 100644 +--- a/tests/functional/u/undefined/undefined_variable.314.txt ++++ b/tests/functional/u/undefined/undefined_variable.314.txt +@@ -30,6 +30,6 @@ undefined-variable:234:25:234:37:LambdaClass5.:Undefined variable 'Lambd + undefined-variable:291:18:291:24:not_using_loop_variable_accordingly:Undefined variable 'iteree':UNDEFINED + undefined-variable:308:27:308:28:undefined_annotation:Undefined variable 'x':UNDEFINED + used-before-assignment:309:7:309:8:undefined_annotation:Using variable 'x' before assignment:HIGH +-undefined-variable:339:11:339:12:decorated3:Undefined variable 'x':UNDEFINED +-undefined-variable:344:19:344:20:decorated4:Undefined variable 'y':UNDEFINED ++undefined-variable:339:11:339:12::Undefined variable 'x':UNDEFINED ++undefined-variable:344:19:344:20::Undefined variable 'y':UNDEFINED + undefined-variable:365:10:365:20:global_var_mixed_assignment:Undefined variable 'GLOBAL_VAR':HIGH +diff --git a/tests/functional/u/undefined/undefined_variable.txt b/tests/functional/u/undefined/undefined_variable.txt +index c527c76..b85ad8a 100644 +--- a/tests/functional/u/undefined/undefined_variable.txt ++++ b/tests/functional/u/undefined/undefined_variable.txt +@@ -31,8 +31,8 @@ used-before-assignment:255:26:255:34:func_should_fail:Using variable 'datetime' + undefined-variable:291:18:291:24:not_using_loop_variable_accordingly:Undefined variable 'iteree':UNDEFINED + undefined-variable:308:27:308:28:undefined_annotation:Undefined variable 'x':UNDEFINED + used-before-assignment:309:7:309:8:undefined_annotation:Using variable 'x' before assignment:HIGH +-undefined-variable:339:11:339:12:decorated3:Undefined variable 'x':UNDEFINED +-undefined-variable:344:19:344:20:decorated4:Undefined variable 'y':UNDEFINED ++undefined-variable:339:11:339:12::Undefined variable 'x':UNDEFINED ++undefined-variable:344:19:344:20::Undefined variable 'y':UNDEFINED + undefined-variable:365:10:365:20:global_var_mixed_assignment:Undefined variable 'GLOBAL_VAR':HIGH + undefined-variable:377:19:377:44:RepeatedReturnAnnotations.x:Undefined variable 'RepeatedReturnAnnotations':UNDEFINED + undefined-variable:379:19:379:44:RepeatedReturnAnnotations.y:Undefined variable 'RepeatedReturnAnnotations':UNDEFINED +diff --git a/tests/functional/u/unsupported/unsupported_version_for_final.txt b/tests/functional/u/unsupported/unsupported_version_for_final.txt +index 326bffd..99558dc 100644 +--- a/tests/functional/u/unsupported/unsupported_version_for_final.txt ++++ b/tests/functional/u/unsupported/unsupported_version_for_final.txt +@@ -1,9 +1,9 @@ +-using-final-decorator-in-unsupported-version:10:1:10:6:MyClass1:typing.final is not supported by all versions included in the py-version setting:HIGH +-using-final-decorator-in-unsupported-version:12:5:12:10:MyClass1.my_method:typing.final is not supported by all versions included in the py-version setting:HIGH +-using-final-decorator-in-unsupported-version:13:5:13:10:MyClass1.my_method:typing.final is not supported by all versions included in the py-version setting:HIGH +-using-final-decorator-in-unsupported-version:18:1:18:8:MyClass2:typing.final is not supported by all versions included in the py-version setting:HIGH +-using-final-decorator-in-unsupported-version:20:5:20:12:MyClass2.my_method:typing.final is not supported by all versions included in the py-version setting:HIGH +-using-final-decorator-in-unsupported-version:25:1:25:13:MyClass3:typing.final is not supported by all versions included in the py-version setting:HIGH +-using-final-decorator-in-unsupported-version:27:5:27:17:MyClass3.my_method:typing.final is not supported by all versions included in the py-version setting:HIGH +-using-final-decorator-in-unsupported-version:32:1:32:15:MyClass4:typing.final is not supported by all versions included in the py-version setting:HIGH +-using-final-decorator-in-unsupported-version:34:5:34:19:MyClass4.my_method:typing.final is not supported by all versions included in the py-version setting:HIGH ++using-final-decorator-in-unsupported-version:10:1:10:6::typing.final is not supported by all versions included in the py-version setting:HIGH ++using-final-decorator-in-unsupported-version:12:5:12:10:MyClass1:typing.final is not supported by all versions included in the py-version setting:HIGH ++using-final-decorator-in-unsupported-version:13:5:13:10:MyClass1:typing.final is not supported by all versions included in the py-version setting:HIGH ++using-final-decorator-in-unsupported-version:18:1:18:8::typing.final is not supported by all versions included in the py-version setting:HIGH ++using-final-decorator-in-unsupported-version:20:5:20:12:MyClass2:typing.final is not supported by all versions included in the py-version setting:HIGH ++using-final-decorator-in-unsupported-version:25:1:25:13::typing.final is not supported by all versions included in the py-version setting:HIGH ++using-final-decorator-in-unsupported-version:27:5:27:17:MyClass3:typing.final is not supported by all versions included in the py-version setting:HIGH ++using-final-decorator-in-unsupported-version:32:1:32:15::typing.final is not supported by all versions included in the py-version setting:HIGH ++using-final-decorator-in-unsupported-version:34:5:34:19:MyClass4:typing.final is not supported by all versions included in the py-version setting:HIGH +diff --git a/tests/functional/u/unsupported/unsupported_version_for_posonly_args.txt b/tests/functional/u/unsupported/unsupported_version_for_posonly_args.txt +index 4ae1b27..fa76615 100644 +--- a/tests/functional/u/unsupported/unsupported_version_for_posonly_args.txt ++++ b/tests/functional/u/unsupported/unsupported_version_for_posonly_args.txt +@@ -1 +1 @@ +-using-positional-only-args-in-unsupported-version:2:0:None:None:add:Positional-only arguments are not supported by all versions included in the py-version setting:HIGH ++using-positional-only-args-in-unsupported-version:2:0:2:None:add:Positional-only arguments are not supported by all versions included in the py-version setting:HIGH +diff --git a/tests/functional/u/unused/unused_argument.txt b/tests/functional/u/unused/unused_argument.txt +index bca2700..50f6c66 100644 +--- a/tests/functional/u/unused/unused_argument.txt ++++ b/tests/functional/u/unused/unused_argument.txt +@@ -3,8 +3,8 @@ unused-argument:3:23:3:29:test_unused:Unused argument 'second':HIGH + unused-argument:32:29:32:32:Sub.newmethod:Unused argument 'aay':INFERENCE + unused-argument:59:13:59:16:function:Unused argument 'arg':HIGH + unused-argument:66:21:66:24:AAAA.method:Unused argument 'arg':INFERENCE +-unused-argument:73:0:None:None:AAAA.selected:Unused argument 'args':INFERENCE +-unused-argument:73:0:None:None:AAAA.selected:Unused argument 'kwargs':INFERENCE ++unused-argument:73:0:73:None:AAAA.selected:Unused argument 'args':INFERENCE ++unused-argument:73:0:73:None:AAAA.selected:Unused argument 'kwargs':INFERENCE + unused-argument:92:23:92:26:BBBB.__init__:Unused argument 'arg':INFERENCE + unused-argument:103:34:103:39:Ancestor.set_thing:Unused argument 'other':INFERENCE + unused-argument:129:21:129:25:TestClassWithOnlyNew.__new__:Unused argument 'argA':INFERENCE diff --git a/meta-python/recipes-devtools/python/python3-pylint_4.0.7.bb b/meta-python/recipes-devtools/python/python3-pylint_4.0.7.bb index aec2c9db84..e1d6d938ac 100644 --- a/meta-python/recipes-devtools/python/python3-pylint_4.0.7.bb +++ b/meta-python/recipes-devtools/python/python3-pylint_4.0.7.bb @@ -7,6 +7,7 @@ SRCREV = "c6768d3f1a45fbfad6a4ff9e167ca4f71dd5c991" SRC_URI += "git://github.com/pylint-dev/pylint;branch=main;protocol=https;tag=v${PV} \ file://0001-Adjust-test-expectations-for-ptest.patch \ file://0002-pyproject.toml-Keep-tool.setuptools.license-files.patch \ + file://0003-astroid-4.1.2-endlineno.patch \ file://run-ptest \ "