diff --git a/builtin.py b/builtin.py index f2d0063d..50884b2f 100644 --- a/builtin.py +++ b/builtin.py @@ -177,7 +177,7 @@ class Parser(CachedModule): return {} else: mixin_dct = process_code(f.read()) - if is_py3k(): + if is_py3k() and self.name == _Builtin.name: # in the case of Py3k xrange is now range mixin_dct['range'] = mixin_dct['xrange'] return mixin_dct diff --git a/mixin/_functools.py b/mixin/_functools.py new file mode 100644 index 00000000..be8470f0 --- /dev/null +++ b/mixin/_functools.py @@ -0,0 +1,9 @@ +class partial(): + def __init__(self, func, *args, **keywords): + self.__func = func + self.__args = args + self.__keywords = keywords + + def __call__(self, *args, **kwargs): + # I know this doesn't work in Python, but Jedi can this ;-) + return self.__func(*self.__args, *args, **self.keywords, **kwargs) diff --git a/test/completion/std.py b/test/completion/std.py index fe5ab73b..409dafb4 100644 --- a/test/completion/std.py +++ b/test/completion/std.py @@ -31,3 +31,34 @@ weakref.proxy(1) weakref.ref(1) #? int() weakref.ref(1)() + +# ----------------- +# functools +# ----------------- +import functools + +basetwo = functools.partial(int, base=2) +#? int() +basetwo() + +def a(a, b): + return a, b +a = functools.partial(a, 0) + +#? int() +a('')[0] +#? str() +a('')[1] + +def my_decorator(f): + @functools.wraps(f) + def wrapper(*args, **kwds): + return f(*args, **kwds) + return wrapper + +@my_decorator +def example(a): + return a + +#? str() +example('')