underscore_decorators now automatically convert generators to lists

This commit is contained in:
Dave Halter
2014-01-23 15:21:52 +01:00
parent 6f2c1397b0
commit 162d794081
2 changed files with 9 additions and 4 deletions

View File

@@ -19,11 +19,12 @@ import sys
import json import json
import hashlib import hashlib
import gc import gc
import inspect
import shutil
try: try:
import cPickle as pickle import cPickle as pickle
except ImportError: except ImportError:
import pickle import pickle
import shutil
from jedi import settings from jedi import settings
from jedi import common from jedi import common
@@ -119,12 +120,15 @@ def underscore_memoization(func):
A now has an attribute ``_x`` written by this decorator. A now has an attribute ``_x`` written by this decorator.
""" """
name = '_' + func.__name__
def wrapper(self): def wrapper(self):
name = '_' + func.__name__
try: try:
return getattr(self, name) return getattr(self, name)
except AttributeError: except AttributeError:
result = func(self) result = func(self)
if inspect.isgenerator(result):
result = list(result)
setattr(self, name, result) setattr(self, name, result)
return result return result

View File

@@ -12,7 +12,7 @@ from jedi.cache import underscore_memoization
class Generator(use_metaclass(CachedMetaClass, pr.Base)): class Generator(use_metaclass(CachedMetaClass, pr.Base)):
""" Cares for `yield` statements. """ """Handling of `yield` functions."""
def __init__(self, evaluator, func, var_args): def __init__(self, evaluator, func, var_args):
super(Generator, self).__init__() super(Generator, self).__init__()
self._evaluator = evaluator self._evaluator = evaluator
@@ -28,10 +28,11 @@ class Generator(use_metaclass(CachedMetaClass, pr.Base)):
executes_generator = '__next__', 'send', 'next' executes_generator = '__next__', 'send', 'next'
for name in compiled.generator_obj.get_defined_names(): for name in compiled.generator_obj.get_defined_names():
if name.name in executes_generator: if name.name in executes_generator:
print(name)
parent = self parent = self
# TODO parents are fucked up # TODO parents are fucked up
#pr.Function(module, name, [], (0, 0), None) #pr.Function(module, name, [], (0, 0), None)
yield helpers.FakeName(name, parent) yield helpers.FakeName(name.name, parent)
else: else:
yield name yield name