diff --git a/jedi/evaluate/finder.py b/jedi/evaluate/finder.py index ad2a6c33..2e841c99 100644 --- a/jedi/evaluate/finder.py +++ b/jedi/evaluate/finder.py @@ -388,15 +388,11 @@ def _eval_param(evaluator, param, scope): and func.instance.is_generated and str(func.name) == '__init__': param = func.var.params[param.position_nr] - # Add pep0484 type hints + # Add pep0484 and docstring knowledge. pep0484_hints = pep0484.follow_param(evaluator, param) - if pep0484_hints: - return pep0484_hints - - # Add docstring knowledge. doc_params = docstrings.follow_param(evaluator, param) - if doc_params: - return doc_params + if pep0484_hints or doc_params: + return list(set(pep0484_hints) | set(doc_params)) if isinstance(param, ExecutedParam): return res_new | param.eval(evaluator) diff --git a/test/completion/pep0484.py b/test/completion/pep0484.py index 6a7ce6ce..b9ab88aa 100644 --- a/test/completion/pep0484.py +++ b/test/completion/pep0484.py @@ -7,7 +7,13 @@ class A(): pass -def function_parameters(a: A, b, c: str, d: int=4): +def function_parameters(a: A, b, c: str, d: int, e: str, f: str, g: int=4): + """ + :param e: if docstring and annotation agree, only one should be returned + :type e: str + :param f: if docstring and annotation disagree, both should be returned + :type f: int + """ #? A() a #? @@ -16,6 +22,12 @@ def function_parameters(a: A, b, c: str, d: int=4): c #? int() d + #? str() + e + #? int() str() + f + # int() + g def return_unspecified():