Refactor compiled.CompiledObject so it always owns an evaluator instance.

This commit is contained in:
Dave Halter
2015-12-08 02:19:33 +01:00
parent 18a10c436f
commit bef5fca516
13 changed files with 149 additions and 139 deletions

View File

@@ -12,7 +12,7 @@ import warnings
import sys
from itertools import chain
from jedi._compatibility import unicode, builtins
from jedi._compatibility import unicode
from jedi.parser import Parser, load_grammar
from jedi.parser.tokenize import source_tokens
from jedi.parser import tree
@@ -179,7 +179,7 @@ class Script(object):
if unfinished_dotted:
return completion_names
else:
return keywords.keyword_names('import')
return keywords.keyword_names(self._evaluator, 'import')
if isinstance(user_stmt, tree.Import):
module = self._parser.module()
@@ -190,7 +190,7 @@ class Script(object):
if names is None and not isinstance(user_stmt, tree.Import):
if not path and not dot:
# add keywords
completion_names += keywords.keyword_names(all=True)
completion_names += keywords.keyword_names(self._evaluator, all=True)
# TODO delete? We should search for valid parser
# transformations.
completion_names += self._simple_complete(path, dot, like)
@@ -206,8 +206,7 @@ class Script(object):
user_stmt = self._parser.user_stmt_with_whitespace()
b = compiled.builtin
completion_names = get_completions(user_stmt, b)
completion_names = get_completions(user_stmt, self._evaluator.BUILTINS)
if not dot:
# add named params
@@ -647,7 +646,7 @@ class Interpreter(Script):
paths = path.split('.') if path else []
namespaces = (NamespaceModule(), builtins)
namespaces = (NamespaceModule(), BUILTINS)
for p in paths:
old, namespaces = namespaces, []
for n in old:

View File

@@ -15,7 +15,6 @@ from jedi.parser import load_grammar
from jedi.parser.fast import FastParser
from jedi.evaluate import helpers
from jedi.evaluate import iterable
from jedi.evaluate import representation as er
def add_namespaces_to_parser(evaluator, namespaces, parser_module):
@@ -92,10 +91,7 @@ class LazyName(helpers.FakeName):
parser_path)
if not found:
evaluated = compiled.CompiledObject(obj)
if evaluated == builtins:
# The builtins module is special and always cached.
evaluated = compiled.builtin
evaluated = compiled.create(self._evaluator, obj)
found = [evaluated]
content = iterable.AlreadyEvaluated(found)

View File

@@ -3,7 +3,6 @@ import keyword
from jedi._compatibility import is_py3
from jedi import common
from jedi.evaluate import compiled
from jedi.evaluate.helpers import FakeName
try:
@@ -18,27 +17,27 @@ else:
keys = keyword.kwlist + ['None', 'False', 'True']
def keywords(string='', pos=(0, 0), all=False):
def keywords(evaluator, string='', pos=(0, 0), all=False):
if all:
return set([Keyword(k, pos) for k in keys])
return set([Keyword(evaluator, k, pos) for k in keys])
if string in keys:
return set([Keyword(string, pos)])
return set([Keyword(evaluator, string, pos)])
return set()
def keyword_names(*args, **kwargs):
return [k.name for k in keywords(*args, **kwargs)]
def keyword_names(evaluator, *args, **kwargs):
return [k.name for k in keywords(evaluator, *args, **kwargs)]
def get_operator(string, pos):
return Keyword(string, pos)
def get_operator(evaluator, string, pos):
return Keyword(evaluator, string, pos)
class Keyword(object):
def __init__(self, name, pos):
def __init__(self, evaluator, name, pos):
self.name = FakeName(name, self, pos)
self.start_pos = pos
self.parent = compiled.builtin
self.parent = evaluator.BUILTINS
def get_parent_until(self):
return self.parent