From 5722a3458ec30390a88d1c4a4633ce28c8cbba21 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Fri, 19 Jul 2019 11:42:08 +0200 Subject: [PATCH] Evaluate annotations for dataclasses when infer is called on param --- jedi/plugins/stdlib.py | 5 ++++- test/test_evaluate/test_signature.py | 10 +++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/jedi/plugins/stdlib.py b/jedi/plugins/stdlib.py index a87fb4ed..2af87880 100644 --- a/jedi/plugins/stdlib.py +++ b/jedi/plugins/stdlib.py @@ -580,7 +580,10 @@ class DataclassParamName(BaseTreeParamName): return self._default_node def infer(self): - return NO_CONTEXTS # TODO implement + if self._annotation_node is None: + return NO_CONTEXTS # TODO implement + else: + return self.parent_context.eval_node(self._annotation_node) class ItemGetterCallable(ContextWrapper): diff --git a/test/test_evaluate/test_signature.py b/test/test_evaluate/test_signature.py index 9a95fd7c..f625097a 100644 --- a/test/test_evaluate/test_signature.py +++ b/test/test_evaluate/test_signature.py @@ -86,12 +86,16 @@ def test_dataclass_signature(Script, skip_pre_python37, start, start_params): code = dedent(''' name: str foo = 3 - unit_price: float - quantity_on_hand: int = 0 + price: float + quantity: int = 0.0 X(''') code = 'from dataclasses import dataclass\n' + start + code sig, = Script(code).call_signatures() - assert [p.name for p in sig.params] == start_params + ['name', 'unit_price', 'quantity_on_hand'] + assert [p.name for p in sig.params] == start_params + ['name', 'price', 'quantity'] + quantity, = sig.params[-1].infer() + assert quantity.name == 'int' + price, = sig.params[-2].infer() + assert price.name == 'float'