1
0
forked from VimPlug/jedi

Fix some stuff to make parso work again.

This commit is contained in:
Dave Halter
2017-06-02 00:00:31 +02:00
parent af26cc9f05
commit e0485b032e
6 changed files with 11 additions and 9 deletions

View File

@@ -458,7 +458,7 @@ def names(source=None, path=None, encoding='utf-8', all_scopes=False,
classes.Definition( classes.Definition(
script._evaluator, script._evaluator,
TreeNameDefinition( TreeNameDefinition(
module_context.create_context(name.parent), module_context.create_context(name if name.parent.type == 'file_input' else name.parent),
name name
) )
) for name in get_module_names(script._get_module_node(), all_scopes) ) for name in get_module_names(script._get_module_node(), all_scopes)

View File

@@ -98,6 +98,7 @@ def _get_code_for_stack(code_lines, module_node, position):
user_stmt = leaf.parent user_stmt = leaf.parent
else: else:
user_stmt = leaf.get_definition() user_stmt = leaf.get_definition()
if user_stmt.parent.type == 'simple_stmt': if user_stmt.parent.type == 'simple_stmt':
user_stmt = user_stmt.parent user_stmt = user_stmt.parent

View File

@@ -449,10 +449,9 @@ class Evaluator(object):
if is_simple_name: if is_simple_name:
if name.parent.type == 'classdef' and name.parent.name == name: if name.parent.type == 'classdef' and name.parent.name == name:
return [er.ClassContext(self, name.parent, context)] return [er.ClassContext(self, name.parent, context)]
elif name.parent.type == 'funcdef': elif name.parent.type == 'funcdef' and name.parent.name == name:
return [er.FunctionContext(self, context, name.parent)] return [er.FunctionContext(self, context, name.parent)]
elif name.parent.type == 'file_input':
raise NotImplementedError
if def_.type == 'expr_stmt' and name in def_.get_defined_names(): if def_.type == 'expr_stmt' and name in def_.get_defined_names():
return self.eval_statement(context, def_, name) return self.eval_statement(context, def_, name)
elif def_.type == 'for_stmt' and \ elif def_.type == 'for_stmt' and \
@@ -592,7 +591,7 @@ class Evaluator(object):
if node_is_context and parser_utils.is_scope(node): if node_is_context and parser_utils.is_scope(node):
scope_node = node scope_node = node
else: else:
if node.parent.type in ('funcdef', 'classdef'): if node.parent.type in ('funcdef', 'classdef') and node.parent.name == node:
# When we're on class/function names/leafs that define the # When we're on class/function names/leafs that define the
# object itself and not its contents. # object itself and not its contents.
node = node.parent node = node.parent

View File

@@ -12,6 +12,6 @@ import pytest
]) ])
def test_equals(source): def test_equals(source):
script = Script(source) script = Script(source)
node = script._get_module_node().children[0].children[0] node = script._get_module_node().children[0]
first, = script._get_module().eval_node(node) first, = script._get_module().eval_node(node)
assert isinstance(first, CompiledObject) and first.obj is True assert isinstance(first, CompiledObject) and first.obj is True

View File

@@ -11,7 +11,7 @@ from jedi import Script
def test_paths_from_assignment(): def test_paths_from_assignment():
def paths(src): def paths(src):
script = Script(src) script = Script(src)
expr_stmt = script._get_module_node().children[0].children[0] expr_stmt = script._get_module_node().children[0]
return set(sys_path._paths_from_assignment(script._get_module(), expr_stmt)) return set(sys_path._paths_from_assignment(script._get_module(), expr_stmt))
assert paths('sys.path[0:0] = ["a"]') == set(['a']) assert paths('sys.path[0:0] = ["a"]') == set(['a'])

View File

@@ -11,8 +11,10 @@ import pytest
class TestCallAndName(): class TestCallAndName():
def get_call(self, source): def get_call(self, source):
# Get the simple_stmt and then the first one. # Get the simple_stmt and then the first one.
simple_stmt = parse(source).children[0] node = parse(source).children[0]
return simple_stmt.children[0] if node.type == 'simple_stmt':
return node.children[0]
return node
def test_name_and_call_positions(self): def test_name_and_call_positions(self):
name = self.get_call('name\nsomething_else') name = self.get_call('name\nsomething_else')