forked from VimPlug/jedi
Preparing for an eventual replacement of using expr_stmt for all nodes.
This commit is contained in:
@@ -285,7 +285,7 @@ class Script(object):
|
|||||||
i = imports.get_importer(self._evaluator, names, module, level)
|
i = imports.get_importer(self._evaluator, names, module, level)
|
||||||
return i.follow(self._evaluator)
|
return i.follow(self._evaluator)
|
||||||
|
|
||||||
scopes = self._evaluator.eval_statement(eval_stmt)
|
scopes = self._evaluator.eval_element(eval_stmt)
|
||||||
|
|
||||||
return scopes
|
return scopes
|
||||||
|
|
||||||
@@ -294,9 +294,10 @@ class Script(object):
|
|||||||
tokenizer = source_tokens(cursor_txt)
|
tokenizer = source_tokens(cursor_txt)
|
||||||
r = Parser(self._grammar, cursor_txt, tokenizer=tokenizer)
|
r = Parser(self._grammar, cursor_txt, tokenizer=tokenizer)
|
||||||
try:
|
try:
|
||||||
# Take the last statement available.
|
# Take the last statement available that is not an endmarker.
|
||||||
stmt = r.module.statements[-1]
|
# And because it's a simple_stmt, we need to get the first child.
|
||||||
except IndexError:
|
stmt = r.module.children[-2].children[0]
|
||||||
|
except (AttributeError, IndexError):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
user_stmt = self._parser.user_stmt()
|
user_stmt = self._parser.user_stmt()
|
||||||
|
|||||||
@@ -159,6 +159,8 @@ class Evaluator(object):
|
|||||||
return [er.LambdaWrapper(self, element)]
|
return [er.LambdaWrapper(self, element)]
|
||||||
elif element.isinstance(er.LambdaWrapper):
|
elif element.isinstance(er.LambdaWrapper):
|
||||||
return [element] # TODO this is no real evaluation.
|
return [element] # TODO this is no real evaluation.
|
||||||
|
elif element.type == 'expr_stmt':
|
||||||
|
return self.eval_statement(element)
|
||||||
elif element.type == 'power':
|
elif element.type == 'power':
|
||||||
types = self._eval_atom(element.children[0])
|
types = self._eval_atom(element.children[0])
|
||||||
for trailer in element.children[1:]:
|
for trailer in element.children[1:]:
|
||||||
|
|||||||
+7
-6
@@ -173,6 +173,10 @@ class Leaf(Base):
|
|||||||
return (self._start_pos[0] + self.position_modifier.line,
|
return (self._start_pos[0] + self.position_modifier.line,
|
||||||
self._start_pos[1] + len(self.value))
|
self._start_pos[1] + len(self.value))
|
||||||
|
|
||||||
|
def move(self, line_offset, column_offset):
|
||||||
|
self._start_pos = (self._start_pos[0] + line_offset,
|
||||||
|
self._start_pos[1] + column_offset)
|
||||||
|
|
||||||
def get_previous(self):
|
def get_previous(self):
|
||||||
"""
|
"""
|
||||||
Returns the previous leaf in the parser tree.
|
Returns the previous leaf in the parser tree.
|
||||||
@@ -427,11 +431,7 @@ class BaseNode(Base):
|
|||||||
Move the Node's start_pos.
|
Move the Node's start_pos.
|
||||||
"""
|
"""
|
||||||
for c in self.children:
|
for c in self.children:
|
||||||
if isinstance(c, Leaf):
|
c.move(line_offset, column_offset)
|
||||||
c.start_pos = (c.start_pos[0] + line_offset,
|
|
||||||
c.start_pos[1] + column_offset)
|
|
||||||
else:
|
|
||||||
c.move(line_offset, column_offset)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def start_pos(self):
|
def start_pos(self):
|
||||||
@@ -460,7 +460,8 @@ class BaseNode(Base):
|
|||||||
def get_statement_for_position(self, pos):
|
def get_statement_for_position(self, pos):
|
||||||
for c in self.children:
|
for c in self.children:
|
||||||
if c.start_pos <= pos <= c.end_pos:
|
if c.start_pos <= pos <= c.end_pos:
|
||||||
if c.type in ('expr_stmt', 'import_from', 'import_name'):
|
if c.type not in ('decorated', 'simple_stmt', 'suite') \
|
||||||
|
and not isinstance(c, (Flow, ClassOrFunc)):
|
||||||
return c
|
return c
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user