diff --git a/AUTHORS.txt b/AUTHORS.txt index 52204a8b..29f46765 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -44,6 +44,7 @@ Mathias Rav (@Mortal) Daniel Fiterman (@dfit99) Simon Ruggier (@sruggier) Élie Gouzien (@ElieGouzien) - +Robin Roth (@robinro) +Malte Plath (@langsamer) Note: (@user) means a github user name. diff --git a/jedi/evaluate/__init__.py b/jedi/evaluate/__init__.py index d1453f32..20461071 100644 --- a/jedi/evaluate/__init__.py +++ b/jedi/evaluate/__init__.py @@ -249,6 +249,8 @@ class Evaluator(object): else: i = trailer.parent.children.index(trailer) to_evaluate = trailer.parent.children[:i] + if to_evaluate[0] == 'await': + to_evaluate.pop(0) context_set = context.eval_node(to_evaluate[0]) for trailer in to_evaluate[1:]: context_set = eval_trailer(context, context_set, trailer) diff --git a/jedi/evaluate/helpers.py b/jedi/evaluate/helpers.py index 6652287b..44522f8b 100644 --- a/jedi/evaluate/helpers.py +++ b/jedi/evaluate/helpers.py @@ -89,6 +89,10 @@ def evaluate_call_of_leaf(context, leaf, cut_own_trailer=False): base = power.children[0] trailers = power.children[1:cut] + if base == 'await': + base = trailers[0] + trailers = trailers[1:] + values = context.eval_node(base) from jedi.evaluate.syntax_tree import eval_trailer for trailer in trailers: diff --git a/test/completion/async_.py b/test/completion/async_.py index c6035e37..b2202137 100644 --- a/test/completion/async_.py +++ b/test/completion/async_.py @@ -23,3 +23,14 @@ async def x2(): async with open('asdf') as f: #? ['readlines'] f.readlines + +class A(): + @staticmethod + async def b(c=1, d=2): + return 1 + +#! 9 ['def b'] +await A.b() + +#! 11 ['param d=2'] +await A.b(d=3)