forked from VimPlug/jedi
Move underscore memoization.
This commit is contained in:
@@ -12,14 +12,48 @@ there are global variables, which are holding the cache information. Some of
|
|||||||
these variables are being cleaned after every API usage.
|
these variables are being cleaned after every API usage.
|
||||||
"""
|
"""
|
||||||
import time
|
import time
|
||||||
|
import inspect
|
||||||
|
|
||||||
from jedi import settings
|
from jedi import settings
|
||||||
from jedi.parser.utils import parser_cache
|
from jedi.parser.utils import parser_cache
|
||||||
from jedi.parser.utils import underscore_memoization
|
|
||||||
|
|
||||||
_time_caches = {}
|
_time_caches = {}
|
||||||
|
|
||||||
|
|
||||||
|
def underscore_memoization(func):
|
||||||
|
"""
|
||||||
|
Decorator for methods::
|
||||||
|
|
||||||
|
class A(object):
|
||||||
|
def x(self):
|
||||||
|
if self._x:
|
||||||
|
self._x = 10
|
||||||
|
return self._x
|
||||||
|
|
||||||
|
Becomes::
|
||||||
|
|
||||||
|
class A(object):
|
||||||
|
@underscore_memoization
|
||||||
|
def x(self):
|
||||||
|
return 10
|
||||||
|
|
||||||
|
A now has an attribute ``_x`` written by this decorator.
|
||||||
|
"""
|
||||||
|
name = '_' + func.__name__
|
||||||
|
|
||||||
|
def wrapper(self):
|
||||||
|
try:
|
||||||
|
return getattr(self, name)
|
||||||
|
except AttributeError:
|
||||||
|
result = func(self)
|
||||||
|
if inspect.isgenerator(result):
|
||||||
|
result = list(result)
|
||||||
|
setattr(self, name, result)
|
||||||
|
return result
|
||||||
|
|
||||||
|
return wrapper
|
||||||
|
|
||||||
|
|
||||||
def clear_time_caches(delete_all=False):
|
def clear_time_caches(delete_all=False):
|
||||||
""" Jedi caches many things, that should be completed after each completion
|
""" Jedi caches many things, that should be completed after each completion
|
||||||
finishes.
|
finishes.
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import inspect
|
|
||||||
import time
|
import time
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
@@ -45,40 +44,6 @@ parser_cache = {}
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
def underscore_memoization(func):
|
|
||||||
"""
|
|
||||||
Decorator for methods::
|
|
||||||
|
|
||||||
class A(object):
|
|
||||||
def x(self):
|
|
||||||
if self._x:
|
|
||||||
self._x = 10
|
|
||||||
return self._x
|
|
||||||
|
|
||||||
Becomes::
|
|
||||||
|
|
||||||
class A(object):
|
|
||||||
@underscore_memoization
|
|
||||||
def x(self):
|
|
||||||
return 10
|
|
||||||
|
|
||||||
A now has an attribute ``_x`` written by this decorator.
|
|
||||||
"""
|
|
||||||
name = '_' + func.__name__
|
|
||||||
|
|
||||||
def wrapper(self):
|
|
||||||
try:
|
|
||||||
return getattr(self, name)
|
|
||||||
except AttributeError:
|
|
||||||
result = func(self)
|
|
||||||
if inspect.isgenerator(result):
|
|
||||||
result = list(result)
|
|
||||||
setattr(self, name, result)
|
|
||||||
return result
|
|
||||||
|
|
||||||
return wrapper
|
|
||||||
|
|
||||||
|
|
||||||
class _NodeCacheItem(object):
|
class _NodeCacheItem(object):
|
||||||
def __init__(self, node, lines, change_time=None):
|
def __init__(self, node, lines, change_time=None):
|
||||||
self.node = node
|
self.node = node
|
||||||
|
|||||||
Reference in New Issue
Block a user