1
0
forked from VimPlug/jedi

Rewrite the next function.

This commit is contained in:
Dave Halter
2016-12-03 02:54:09 +01:00
parent da1a163da7
commit 7607db801f
4 changed files with 22 additions and 12 deletions

View File

@@ -93,6 +93,7 @@ class Evaluator(object):
self.analysis = []
self.dynamic_params_depth = 0
self.is_analysis = False
self.python_version = sys.version_info[:2]
if sys_path is None:
sys_path = sys.path

View File

@@ -6,17 +6,6 @@ possible for the auto completion.
"""
def next(iterator, default=None):
if random.choice([0, 1]):
if hasattr("next"):
return iterator.next()
else:
return iterator.__next__()
else:
if default is not None:
return default
def iter(collection, sentinel=None):
if sentinel:
yield collection()

View File

@@ -123,7 +123,7 @@ def has_builtin_methods(cls):
def register_builtin_method(method_name, python_version_match=None):
def wrapper(func):
if python_version_match and python_version_match + int(is_py3) == 3:
if python_version_match and python_version_match == 2 + int(is_py3):
# Some functions do only apply to certain versions.
return func
dct = func.__dict__.setdefault('registered_builtin_methods', {})

View File

@@ -106,6 +106,25 @@ def argument_clinic(string, want_obj=False, want_context=False, want_arguments=F
return f
@argument_clinic('iterator[, default], /')
def builtins_next(evaluator, iterators, defaults):
if evaluator.python_version[0] == 2:
name = 'next'
else:
name = '__next__'
types = set()
for iterator in iterators:
if isinstance(iterator, AbstractInstanceContext):
for filter in iterator.get_filters(include_self_names=True):
for n in filter.get(name):
for context in n.infer():
types |= context.execute_evaluated()
if types:
return types
return defaults
@argument_clinic('object, name[, default], /')
def builtins_getattr(evaluator, objects, names, defaults=None):
# follow the first param
@@ -249,6 +268,7 @@ def _return_first_param(evaluator, firsts):
_implemented = {
'builtins': {
'next': builtins_next,
'getattr': builtins_getattr,
'type': builtins_type,
'super': builtins_super,