From 36fa243ce07859745be22f4d11ce483f100e8a71 Mon Sep 17 00:00:00 2001 From: STerliakov Date: Fri, 24 Jan 2025 05:25:03 +0100 Subject: [PATCH] :bug: Prevent invalid annotations caused by `list` shadowing by method signature (without autogen). --- codegen/parser/schemas/schema.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/codegen/parser/schemas/schema.py b/codegen/parser/schemas/schema.py index 51bb3bb89..4396b50e9 100644 --- a/codegen/parser/schemas/schema.py +++ b/codegen/parser/schemas/schema.py @@ -357,31 +357,38 @@ class ListSchema(SchemaData): @override def get_type_string(self, include_constraints: bool = True) -> str: - type_string = f"list[{self.item_schema.get_type_string()}]" + type_string = f"builtins.list[{self.item_schema.get_type_string()}]" if include_constraints and (args := self._get_field_args()): return f"Annotated[{type_string}, {self._get_field_string(args)}]" return type_string @override def get_param_type_string(self) -> str: - return f"list[{self.item_schema.get_param_type_string()}]" + # We **must** refer to `builtins.list` here explicitly to avoid shadowing: + # class A: + # def list(self): ... + # def meth(self) -> list[int]: ... # Oops, it's the `list` method, bad hint + return f"builtins.list[{self.item_schema.get_param_type_string()}]" @override def get_model_imports(self) -> set[str]: imports = super().get_model_imports() imports.add("from githubkit.compat import PYDANTIC_V2") + imports.add("import builtins") imports.update(self.item_schema.get_model_imports()) return imports @override def get_type_imports(self) -> set[str]: imports = super().get_type_imports() + imports.add("import builtins") imports.update(self.item_schema.get_type_imports()) return imports @override def get_param_imports(self) -> set[str]: imports = super().get_param_imports() + imports.add("import builtins") imports.update(self.item_schema.get_param_imports()) return imports @@ -389,6 +396,7 @@ def get_param_imports(self) -> set[str]: def get_using_imports(self) -> set[str]: imports = super().get_using_imports() imports.add("from githubkit.compat import PYDANTIC_V2") + imports.add("import builtins") imports.update(self.item_schema.get_using_imports()) return imports