1
0
forked from VimPlug/jedi

Fix most of PEP 484.

This commit is contained in:
Dave Halter
2016-11-15 00:05:08 +01:00
parent 31514dfe76
commit f672b367da
5 changed files with 37 additions and 12 deletions

View File

@@ -72,12 +72,14 @@ class ParamName(ContextName):
def _get_param(self): def _get_param(self):
params = self.parent_context.get_params() params = self.parent_context.get_params()
return params[self.tree_name.parent.position_nr] param_node = search_ancestor(self.tree_name, 'param')
return params[param_node.position_nr]
class AnonymousInstanceParamName(ParamName): class AnonymousInstanceParamName(ParamName):
def infer(self): def infer(self):
if self.tree_name.parent.position_nr == 0: param_node = search_ancestor(self.tree_name, 'param')
if param_node.position_nr == 0:
# This is a speed optimization, to return the self param (because # This is a speed optimization, to return the self param (because
# it's known). This only affects anonymous instances. # it's known). This only affects anonymous instances.
return set([self.parent_context.instance]) return set([self.parent_context.instance])

View File

@@ -324,6 +324,31 @@ class SelfNameFilter(InstanceClassFilter):
yield name yield name
class ParamArguments(object):
"""
TODO This seems like a strange class, clean up?
"""
class LazyParamContext(object):
def __init__(self, fucking_param):
self._param = fucking_param
def infer(self):
return self._param.infer()
def __init__(self, class_context, funcdef):
self._class_context = class_context
self._funcdef = funcdef
def unpack(self, func=None):
params = search_params(
self._class_context.evaluator,
self._class_context,
self._funcdef
)
for p in params:
yield None, self.LazyParamContext(p)
class InstanceVarArgs(object): class InstanceVarArgs(object):
def __init__(self, instance, funcdef, var_args): def __init__(self, instance, funcdef, var_args):
self._instance = instance self._instance = instance
@@ -334,11 +359,8 @@ class InstanceVarArgs(object):
def _get_var_args(self): def _get_var_args(self):
if self._var_args is None: if self._var_args is None:
# TODO this parent_context might be wrong. test?! # TODO this parent_context might be wrong. test?!
return search_params( return ParamArguments(self._instance.class_context, self._funcdef)
self._instance.evaluator,
self._instance.class_context,
self._funcdef
)
return self._var_args return self._var_args
def unpack(self, func=None): def unpack(self, func=None):

View File

@@ -8,6 +8,7 @@ from jedi.evaluate import iterable
from jedi.evaluate import analysis from jedi.evaluate import analysis
from jedi.evaluate import context from jedi.evaluate import context
from jedi.evaluate import docstrings from jedi.evaluate import docstrings
from jedi.evaluate import pep0484
def try_iter_content(types, depth=0): def try_iter_content(types, depth=0):
@@ -184,7 +185,7 @@ class ExecutedParam(object):
self.string_name = self._original_param.name.value self.string_name = self._original_param.name.value
def infer(self): def infer(self):
pep0484_hints = set()#pep0484.follow_param(evaluator, param) pep0484_hints = pep0484.follow_param(self._root_context, self._original_param)
doc_params = docstrings.follow_param(self._root_context, self._original_param) doc_params = docstrings.follow_param(self._root_context, self._original_param)
if pep0484_hints or doc_params: if pep0484_hints or doc_params:
return list(set(pep0484_hints) | set(doc_params)) return list(set(pep0484_hints) | set(doc_params))

View File

@@ -77,8 +77,8 @@ def _fix_forward_reference(context, node):
return node return node
@memoize_default(None, evaluator_is_first_arg=True) @memoize_default()
def follow_param(evaluator, param): def follow_param(context, param):
annotation = param.annotation() annotation = param.annotation()
return _evaluate_for_annotation(context, annotation) return _evaluate_for_annotation(context, annotation)
@@ -96,7 +96,7 @@ def py__annotations__(funcdef):
return dct return dct
@memoize_default(None, evaluator_is_first_arg=True) @memoize_default()
def find_return_types(context, func): def find_return_types(context, func):
annotation = py__annotations__(func).get("return", None) annotation = py__annotations__(func).get("return", None)
return _evaluate_for_annotation(context, annotation) return _evaluate_for_annotation(context, annotation)

View File

@@ -644,7 +644,7 @@ class FunctionExecutionContext(Executed):
else: else:
returns = funcdef.returns returns = funcdef.returns
types = set(docstrings.find_return_types(self.get_root_context(), funcdef)) types = set(docstrings.find_return_types(self.get_root_context(), funcdef))
types |= set(pep0484.find_return_types(self.evaluator, funcdef)) types |= set(pep0484.find_return_types(self.get_root_context(), funcdef))
for r in returns: for r in returns:
check = flow_analysis.reachability_check(self, funcdef, r) check = flow_analysis.reachability_check(self, funcdef, r)