From 04737b26372722b19292e82b167123ff29182496 Mon Sep 17 00:00:00 2001 From: Lumir Balhar Date: Tue, 10 Mar 2026 09:12:32 +0100 Subject: [PATCH] Fix Python 3.15 compatibility MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix getattr_static for Python 3.15 __dict__ GetSetDescriptorType - Accept abs() parameter name change ('x' → 'number') - Add Python 3.15 os module constants to test expectations Fixes instance attribute introspection and stdlib changes in Python 3.15. --- jedi/inference/compiled/getattr_static.py | 5 ++++- test/test_api/test_interpreter.py | 3 ++- test/test_utils.py | 3 +++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/jedi/inference/compiled/getattr_static.py b/jedi/inference/compiled/getattr_static.py index 03c199ef..770a471e 100644 --- a/jedi/inference/compiled/getattr_static.py +++ b/jedi/inference/compiled/getattr_static.py @@ -90,7 +90,10 @@ def getattr_static(obj, attr, default=_sentinel): if not _is_type(obj): klass = type(obj) dict_attr = _shadowed_dict(klass) - if (dict_attr is _sentinel or type(dict_attr) is types.MemberDescriptorType): + # In Python 3.15+, __dict__ is a GetSetDescriptorType instead of being _sentinel + if (dict_attr is _sentinel + or type(dict_attr) is types.MemberDescriptorType + or type(dict_attr) is types.GetSetDescriptorType): instance_result = _check_instance(obj, attr) else: klass = obj diff --git a/test/test_api/test_interpreter.py b/test/test_api/test_interpreter.py index 42193482..b87b0410 100644 --- a/test/test_api/test_interpreter.py +++ b/test/test_api/test_interpreter.py @@ -746,7 +746,8 @@ def test_complete_not_findable_class_source(): def test_param_infer_default(): abs_sig, = jedi.Interpreter('abs(', [{'abs': abs}]).get_signatures() param, = abs_sig.params - assert param.name == 'x' + # Parameter name changed from 'x' to 'number' in Python 3.15 + assert param.name in ('x', 'number') assert param.infer_default() == [] diff --git a/test/test_utils.py b/test/test_utils.py index 4fc19878..a212eec5 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -81,6 +81,9 @@ class TestSetupReadline(unittest.TestCase): '_', 'O_', 'EX_', 'EFD_', 'MFD_', 'TFD_', 'SF_', 'ST_', 'CLD_', 'POSIX_SPAWN_', 'P_', 'RWF_', 'CLONE_', 'SCHED_', 'SPLICE_', + # Python 3.15+ new constants + 'AT_', 'PIDFD_', 'STATX_', 'GRND_', 'XATTR_', + 'RTLD_', 'PRIO_', 'F_', 'SEEK_', 'NODEV', ] difference = { x for x in difference