From d4233732be20fc4a6f4185490f55d6a85fdcb73e Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Mon, 27 Apr 2026 14:24:23 +0200 Subject: [PATCH] Format unions with | consistently --- jedi/inference/compiled/access.py | 24 +++++++++++------------- test/test_inference/test_mixed.py | 2 +- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/jedi/inference/compiled/access.py b/jedi/inference/compiled/access.py index 7b1fc5b0..8fc2d832 100644 --- a/jedi/inference/compiled/access.py +++ b/jedi/inference/compiled/access.py @@ -507,19 +507,17 @@ class DirectObjectAccess: def _annotation_to_str(self, annotation): # In Python 3.14+, Union types are displayed as X | Y instead of Union[X, Y] - # We normalize to Union[X, Y] for consistency - if sys.version_info >= (3, 8): - import typing - origin = typing.get_origin(annotation) - if origin is typing.Union: - # Get the args and format them as Union[...] - args = typing.get_args(annotation) - formatted_args = ', '.join( - self._annotation_to_str(arg) if hasattr(arg, '__origin__') - else getattr(arg, '__name__', str(arg)) - for arg in args - ) - return f'Union[{formatted_args}]' + # We normalize to that for consistency + import typing + origin = typing.get_origin(annotation) + if origin is typing.Union: + # Get the args and format them as Union[...] + args = typing.get_args(annotation) + return ' | '.join( + self._annotation_to_str(arg) if hasattr(arg, '__origin__') + else getattr(arg, '__name__', str(arg)) + for arg in args + ) return inspect.formatannotation(annotation) def get_signature_params(self): diff --git a/test/test_inference/test_mixed.py b/test/test_inference/test_mixed.py index 479a4bbf..08199187 100644 --- a/test/test_inference/test_mixed.py +++ b/test/test_inference/test_mixed.py @@ -111,4 +111,4 @@ def test_compiled_signature_annotation_string(): s, = jedi.Interpreter('func()', [locals()]).get_signatures(1, 5) assert s.params[0].description == 'param x: Type' - assert s.params[1].description == 'param y: Union[Type, int]' + assert s.params[1].description == 'param y: Type | int'