Finally able to remove the user_context. This is awesome!

Now we only use the syntax tree to understand where the user is doing something.
This commit is contained in:
Dave Halter
2016-06-23 16:26:28 +02:00
parent 672bf9908c
commit 73e71b3c1a
6 changed files with 21 additions and 321 deletions

View File

@@ -16,7 +16,7 @@ import sys
from jedi._compatibility import unicode
from jedi.parser import load_grammar
from jedi.parser import tree
from jedi.parser.user_context import UserContext, UserContextParser
from jedi.parser.user_context import UserContextParser
from jedi import debug
from jedi import settings
from jedi import common
@@ -120,9 +120,8 @@ class Script(object):
cache.clear_time_caches()
debug.reset_time()
self._grammar = load_grammar(version='%s.%s' % sys.version_info[:2])
self._user_context = UserContext(self._source, self._pos)
self._parser = UserContextParser(self._grammar, self._source, path,
self._pos, self._user_context,
self._pos,
self._parsed_callback)
if sys_path is None:
venv = os.getenv('VIRTUAL_ENV')
@@ -373,7 +372,7 @@ class Interpreter(Script):
# changing).
self._parser = UserContextParser(self._grammar, self._source,
self._orig_path, self._pos,
self._user_context, self._parsed_callback,
self._parsed_callback,
use_fast_parser=False)
#interpreter.add_namespaces_to_parser(self._evaluator, namespaces,
#self._get_module())

View File

@@ -60,11 +60,8 @@ class Completion:
self._module = evaluator.wrap(parser.module())
self._code_lines = code_lines
line = self._code_lines[position[0] - 1]
# The first step of completions is to get the name
self._like_name = re.search(
r'(?!\d)\w+$|$', line[:position[1]]
).group(0)
self._like_name = helpers.get_on_completion_name(code_lines, position)
# The actual cursor position is not what we need to calculate
# everything. We want the start of the name we're on.
self._position = position[0], position[1] - len(self._like_name)

View File

@@ -27,6 +27,14 @@ def sorted_definitions(defs):
return sorted(defs, key=lambda x: (x.module_path or '', x.line or 0, x.column or 0))
def get_on_completion_name(lines, position):
line = lines[position[0] - 1]
# The first step of completions is to get the name
return re.search(
r'(?!\d)\w+$|$', line[:position[1]]
).group(0)
def _get_code(code_lines, start_pos, end_pos):
"""
:param code_start_pos: is where the code starts.