Bug fix: core.python.arguments.PythonASTArgumentsListParser.to_argument_list failed if a type annotation is not a single name

This commit is contained in:
2026-04-11 15:56:14 +02:00
parent 29714798f7
commit d8fd2b1948
2 changed files with 6 additions and 5 deletions
+5 -5
View File
@@ -127,26 +127,26 @@ class PythonASTArgumentsListParser:
if arg.annotation is None: if arg.annotation is None:
arguments.append(PythonFunctionArgument(arg.arg, PythonArgumentKind.POSITIONAL_ONLY, None, None)) arguments.append(PythonFunctionArgument(arg.arg, PythonArgumentKind.POSITIONAL_ONLY, None, None))
else: else:
arguments.append(PythonFunctionArgument(arg.arg, PythonArgumentKind.POSITIONAL_ONLY, None, arg.annotation.id)) arguments.append(PythonFunctionArgument(arg.arg, PythonArgumentKind.POSITIONAL_ONLY, None, ast.unparse(arg.annotation)))
for arg in self.ast_arguments_list.args: for arg in self.ast_arguments_list.args:
if arg.annotation is None: if arg.annotation is None:
arguments.append(PythonFunctionArgument(arg.arg, PythonArgumentKind.NORMAL, None, None)) arguments.append(PythonFunctionArgument(arg.arg, PythonArgumentKind.NORMAL, None, None))
else: else:
arguments.append(PythonFunctionArgument(arg.arg, PythonArgumentKind.NORMAL, None, arg.annotation.id)) arguments.append(PythonFunctionArgument(arg.arg, PythonArgumentKind.NORMAL, None, ast.unparse(arg.annotation)))
if self.ast_arguments_list.vararg is not None: if self.ast_arguments_list.vararg is not None:
if self.ast_arguments_list.vararg.annotation is None: if self.ast_arguments_list.vararg.annotation is None:
arguments.append(PythonFunctionArgument(self.ast_arguments_list.vararg.arg, PythonArgumentKind.VARARG, None, None)) arguments.append(PythonFunctionArgument(self.ast_arguments_list.vararg.arg, PythonArgumentKind.VARARG, None, None))
else: else:
arguments.append(PythonFunctionArgument(self.ast_arguments_list.vararg.arg, PythonArgumentKind.VARARG, None, self.ast_arguments_list.vararg.annotation.id)) arguments.append(PythonFunctionArgument(self.ast_arguments_list.vararg.arg, PythonArgumentKind.VARARG, None, ast.unparse(self.ast_arguments_list.vararg.annotation)))
for arg in self.ast_arguments_list.kwonlyargs: for arg in self.ast_arguments_list.kwonlyargs:
if arg.annotation is None: if arg.annotation is None:
arguments.append(PythonFunctionArgument(arg.arg, PythonArgumentKind.KEYWORD_ONLY, None, None)) arguments.append(PythonFunctionArgument(arg.arg, PythonArgumentKind.KEYWORD_ONLY, None, None))
else: else:
arguments.append(PythonFunctionArgument(arg.arg, PythonArgumentKind.KEYWORD_ONLY, None, arg.annotation.id)) arguments.append(PythonFunctionArgument(arg.arg, PythonArgumentKind.KEYWORD_ONLY, None, ast.unparse(arg.annotation)))
if self.ast_arguments_list.kwarg is not None: if self.ast_arguments_list.kwarg is not None:
if self.ast_arguments_list.kwarg.annotation is None: if self.ast_arguments_list.kwarg.annotation is None:
arguments.append(PythonFunctionArgument(self.ast_arguments_list.kwarg.arg, PythonArgumentKind.KWARGS, None, None)) arguments.append(PythonFunctionArgument(self.ast_arguments_list.kwarg.arg, PythonArgumentKind.KWARGS, None, None))
else: else:
arguments.append(PythonFunctionArgument(self.ast_arguments_list.kwarg.arg, PythonArgumentKind.KWARGS, None, self.ast_arguments_list.kwarg.annotation.id)) arguments.append(PythonFunctionArgument(self.ast_arguments_list.kwarg.arg, PythonArgumentKind.KWARGS, None, ast.unparse(self.ast_arguments_list.kwarg.annotation)))
return arguments return arguments
@@ -32,6 +32,7 @@ def argument_list(argument_list: str) -> ast.arguments:
@pytest.mark.parametrize('ast_arguments_list,expected', [ @pytest.mark.parametrize('ast_arguments_list,expected', [
(argument_list('a'), [PythonFunctionArgument('a', PythonArgumentKind.NORMAL, None, None)]), (argument_list('a'), [PythonFunctionArgument('a', PythonArgumentKind.NORMAL, None, None)]),
(argument_list('a: str'), [PythonFunctionArgument('a', PythonArgumentKind.NORMAL, None, 'str')]), (argument_list('a: str'), [PythonFunctionArgument('a', PythonArgumentKind.NORMAL, None, 'str')]),
(argument_list('a: str | int'), [PythonFunctionArgument('a', PythonArgumentKind.NORMAL, None, 'str | int')]),
(argument_list('a: str, b'), [ (argument_list('a: str, b'), [
PythonFunctionArgument('a', PythonArgumentKind.NORMAL, None, 'str'), PythonFunctionArgument('a', PythonArgumentKind.NORMAL, None, 'str'),
PythonFunctionArgument('b', PythonArgumentKind.NORMAL, None, None) PythonFunctionArgument('b', PythonArgumentKind.NORMAL, None, None)