forked from VimPlug/jedi
Clean the path in pickling.
This commit is contained in:
@@ -45,7 +45,8 @@ def load_grammar(version=None):
|
||||
return load_grammar()
|
||||
|
||||
|
||||
def parse(code, grammar=None, error_recovery=True, start_symbol='file_input'):
|
||||
def parse(code=None, path=None, grammar=None, error_recovery=True,
|
||||
start_symbol='file_input', cache=False):
|
||||
"""
|
||||
If you want to parse a Python file you want to start here, most likely.
|
||||
|
||||
@@ -53,6 +54,7 @@ def parse(code, grammar=None, error_recovery=True, start_symbol='file_input'):
|
||||
other ways to access it.
|
||||
|
||||
:param code: A unicode string that contains Python code.
|
||||
:param path: The path to the file you want to open. Only needed for caching.
|
||||
:param grammar: A Python grammar file, created with load_grammar.
|
||||
:param error_recovery: If enabled, any code will be returned. If it is
|
||||
invalid, it will be returned as an error node. If disabled, you will
|
||||
@@ -73,6 +75,9 @@ def parse(code, grammar=None, error_recovery=True, start_symbol='file_input'):
|
||||
if grammar is None:
|
||||
grammar = load_grammar()
|
||||
|
||||
if cache and path and not code:
|
||||
# In this case we do actual caching
|
||||
path = os.path.expanduser(path)
|
||||
tokens = source_tokens(code, use_exact_op_types=True)
|
||||
kwargs = {}
|
||||
if error_recovery:
|
||||
|
||||
@@ -118,6 +118,7 @@ class ParserPickling(object):
|
||||
greater than the original pickling time. In which case the pickled
|
||||
parser is not up to date.
|
||||
"""
|
||||
path = self._clean_path(path)
|
||||
try:
|
||||
pickle_changed_time = self._index[path]
|
||||
except KeyError:
|
||||
@@ -139,6 +140,7 @@ class ParserPickling(object):
|
||||
return parser_cache_item.parser
|
||||
|
||||
def save_parser(self, grammar, path, parser_cache_item):
|
||||
path = self._clean_path(path)
|
||||
self.__index = None
|
||||
try:
|
||||
files = self._index
|
||||
@@ -185,6 +187,9 @@ class ParserPickling(object):
|
||||
shutil.rmtree(self._cache_directory())
|
||||
self.__index = {}
|
||||
|
||||
def _clean_path(self, path):
|
||||
return os.path.expanduser(path)
|
||||
|
||||
def _get_hashed_path(self, grammar, path):
|
||||
file_hash = hashlib.sha256(path.encode("utf-8")).hexdigest()
|
||||
return self._get_path('%s-%s.pkl' % (grammar.sha256, file_hash))
|
||||
|
||||
@@ -19,7 +19,7 @@ from test.helpers import TestCase
|
||||
def parse(code, version='3.4'):
|
||||
code = dedent(code) + "\n\n"
|
||||
grammar = load_grammar(version=version)
|
||||
return _parse(code, grammar, error_recovery=False)
|
||||
return _parse(code, grammar=grammar, error_recovery=False)
|
||||
|
||||
|
||||
class TestDriver(TestCase):
|
||||
|
||||
Reference in New Issue
Block a user