forked from VimPlug/jedi
evaluator stuff for dynamic
This commit is contained in:
@@ -30,8 +30,8 @@ from jedi.evaluate import representation as er
|
|||||||
from jedi import keywords
|
from jedi import keywords
|
||||||
from jedi.evaluate import builtin
|
from jedi.evaluate import builtin
|
||||||
from jedi.evaluate import imports
|
from jedi.evaluate import imports
|
||||||
import api_classes
|
from jedi.evaluate import dynamic
|
||||||
import dynamic
|
from jedi import api_classes
|
||||||
|
|
||||||
|
|
||||||
class NotFoundError(Exception):
|
class NotFoundError(Exception):
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ from jedi import cache
|
|||||||
from jedi.evaluate import representation as er
|
from jedi.evaluate import representation as er
|
||||||
from jedi.evaluate import imports
|
from jedi.evaluate import imports
|
||||||
from jedi import keywords
|
from jedi import keywords
|
||||||
import dynamic
|
from jedi.evaluate import dynamic
|
||||||
|
|
||||||
|
|
||||||
def _clear_caches():
|
def _clear_caches():
|
||||||
|
|||||||
@@ -32,8 +32,8 @@ DOCSTRING_RETURN_PATTERNS = [
|
|||||||
REST_ROLE_PATTERN = re.compile(r':[^`]+:`([^`]+)`')
|
REST_ROLE_PATTERN = re.compile(r':[^`]+:`([^`]+)`')
|
||||||
|
|
||||||
|
|
||||||
@memoize_default(None)
|
@memoize_default(None, is_function=True)
|
||||||
def follow_param(param):
|
def follow_param(evaluator, param):
|
||||||
func = param.parent_function
|
func = param.parent_function
|
||||||
# print func, param, param.parent_function
|
# print func, param, param.parent_function
|
||||||
param_str = _search_param_in_docstr(func.docstr, str(param.get_name()))
|
param_str = _search_param_in_docstr(func.docstr, str(param.get_name()))
|
||||||
@@ -52,7 +52,7 @@ def follow_param(param):
|
|||||||
p = Parser(param_str, None, user_position, no_docstr=True)
|
p = Parser(param_str, None, user_position, no_docstr=True)
|
||||||
if p.user_stmt is None:
|
if p.user_stmt is None:
|
||||||
return []
|
return []
|
||||||
return evaluate.follow_statement(p.user_stmt)
|
return evaluator.follow_statement(p.user_stmt)
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ from jedi.evaluate import imports
|
|||||||
from jedi.evaluate import recursion
|
from jedi.evaluate import recursion
|
||||||
from jedi.evaluate.cache import memoize_default
|
from jedi.evaluate.cache import memoize_default
|
||||||
from jedi import docstrings
|
from jedi import docstrings
|
||||||
from jedi import dynamic
|
from jedi.evaluate import dynamic
|
||||||
|
|
||||||
|
|
||||||
def get_defined_names_for_position(scope, position=None, start_scope=None):
|
def get_defined_names_for_position(scope, position=None, start_scope=None):
|
||||||
@@ -263,7 +263,7 @@ class Evaluator(object):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
if not r.is_generated:
|
if not r.is_generated:
|
||||||
res_new += dynamic.search_params(r)
|
res_new += dynamic.search_params(self, r)
|
||||||
if not res_new:
|
if not res_new:
|
||||||
c = r.get_commands()[0]
|
c = r.get_commands()[0]
|
||||||
if c in ('*', '**'):
|
if c in ('*', '**'):
|
||||||
|
|||||||
@@ -5,7 +5,8 @@
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
def memoize_default(default, cache_is_in_self=False, first_arg_is_evaluator=False):
|
def memoize_default(default, cache_is_in_self=False, is_function=False,
|
||||||
|
first_arg_is_evaluator=False):
|
||||||
""" This is a typical memoization decorator, BUT there is one difference:
|
""" This is a typical memoization decorator, BUT there is one difference:
|
||||||
To prevent recursion it sets defaults.
|
To prevent recursion it sets defaults.
|
||||||
|
|
||||||
@@ -15,7 +16,9 @@ def memoize_default(default, cache_is_in_self=False, first_arg_is_evaluator=Fals
|
|||||||
"""
|
"""
|
||||||
def func(function):
|
def func(function):
|
||||||
def wrapper(obj, *args, **kwargs):
|
def wrapper(obj, *args, **kwargs):
|
||||||
if cache_is_in_self:
|
if is_function:
|
||||||
|
cache = obj
|
||||||
|
elif cache_is_in_self:
|
||||||
cache = obj.memoize_cache
|
cache = obj.memoize_cache
|
||||||
elif first_arg_is_evaluator: # needed for meta classes
|
elif first_arg_is_evaluator: # needed for meta classes
|
||||||
cache = args[0].memoize_cache
|
cache = args[0].memoize_cache
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ def get_directory_modules_for_name(mods, name):
|
|||||||
yield c
|
yield c
|
||||||
|
|
||||||
|
|
||||||
def search_param_memoize(func):
|
def _search_param_memoize(func):
|
||||||
"""
|
"""
|
||||||
Is only good for search params memoize, respectively the closure,
|
Is only good for search params memoize, respectively the closure,
|
||||||
because it just caches the input, not the func, like normal memoize does.
|
because it just caches the input, not the func, like normal memoize does.
|
||||||
@@ -137,8 +137,8 @@ class ParamListener(object):
|
|||||||
self.param_possibilities.append(params)
|
self.param_possibilities.append(params)
|
||||||
|
|
||||||
|
|
||||||
@memoize_default([])
|
@memoize_default([], is_function=True)
|
||||||
def search_params(param):
|
def search_params(evaluator, param):
|
||||||
"""
|
"""
|
||||||
This is a dynamic search for params. If you try to complete a type:
|
This is a dynamic search for params. If you try to complete a type:
|
||||||
|
|
||||||
@@ -158,7 +158,7 @@ def search_params(param):
|
|||||||
"""
|
"""
|
||||||
Returns the values of a param, or an empty array.
|
Returns the values of a param, or an empty array.
|
||||||
"""
|
"""
|
||||||
@search_param_memoize
|
@_search_param_memoize
|
||||||
def get_posibilities(module, func_name):
|
def get_posibilities(module, func_name):
|
||||||
try:
|
try:
|
||||||
possible_stmts = module.used_names[func_name]
|
possible_stmts = module.used_names[func_name]
|
||||||
@@ -190,12 +190,12 @@ def search_params(param):
|
|||||||
continue
|
continue
|
||||||
scopes = [scope]
|
scopes = [scope]
|
||||||
if first:
|
if first:
|
||||||
scopes = evaluate.follow_call_path(iter(first), scope, pos)
|
scopes = evaluator.follow_call_path(iter(first), scope, pos)
|
||||||
pos = None
|
pos = None
|
||||||
for scope in scopes:
|
for scope in scopes:
|
||||||
s = evaluate.find_name(scope, func_name, position=pos,
|
s = evaluator.find_name(scope, func_name, position=pos,
|
||||||
search_global=not first,
|
search_global=not first,
|
||||||
resolve_decorator=False)
|
resolve_decorator=False)
|
||||||
|
|
||||||
c = [getattr(escope, 'base_func', None) or escope.base
|
c = [getattr(escope, 'base_func', None) or escope.base
|
||||||
for escope in s
|
for escope in s
|
||||||
@@ -203,7 +203,7 @@ def search_params(param):
|
|||||||
if compare in c:
|
if compare in c:
|
||||||
# only if we have the correct function we execute
|
# only if we have the correct function we execute
|
||||||
# it, otherwise just ignore it.
|
# it, otherwise just ignore it.
|
||||||
evaluate.follow_paths(iter(last), s, scope)
|
evaluator.follow_paths(iter(last), s, scope)
|
||||||
|
|
||||||
return listener.param_possibilities
|
return listener.param_possibilities
|
||||||
|
|
||||||
@@ -211,7 +211,7 @@ def search_params(param):
|
|||||||
for params in get_posibilities(module, func_name):
|
for params in get_posibilities(module, func_name):
|
||||||
for p in params:
|
for p in params:
|
||||||
if str(p) == param_name:
|
if str(p) == param_name:
|
||||||
result += evaluate.follow_statement(p.parent)
|
result += evaluator.follow_statement(p.parent)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
func = param.get_parent_until(pr.Function)
|
func = param.get_parent_until(pr.Function)
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ from jedi.evaluate import recursion
|
|||||||
from jedi.evaluate.cache import memoize_default, CachedMetaClass
|
from jedi.evaluate.cache import memoize_default, CachedMetaClass
|
||||||
from jedi.evaluate.interfaces import Iterable
|
from jedi.evaluate.interfaces import Iterable
|
||||||
from jedi import docstrings
|
from jedi import docstrings
|
||||||
from jedi import dynamic
|
from jedi.evaluate import dynamic
|
||||||
|
|
||||||
|
|
||||||
class Executable(pr.IsScope):
|
class Executable(pr.IsScope):
|
||||||
|
|||||||
Reference in New Issue
Block a user