mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-07 14:34:31 +08:00
Merge with master again
Some bugs were still present in master
This commit is contained in:
@@ -369,7 +369,7 @@ class Evaluator(object):
|
|||||||
scope_node = parent_scope(node)
|
scope_node = parent_scope(node)
|
||||||
return from_scope_node(scope_node, is_nested=True, node_is_object=node_is_object)
|
return from_scope_node(scope_node, is_nested=True, node_is_object=node_is_object)
|
||||||
|
|
||||||
def parse_and_get_code(self, code, path, **kwargs):
|
def parse_and_get_code(self, code=None, path=None, **kwargs):
|
||||||
if self.allow_different_encoding:
|
if self.allow_different_encoding:
|
||||||
if code is None:
|
if code is None:
|
||||||
with open(path, 'rb') as f:
|
with open(path, 'rb') as f:
|
||||||
|
|||||||
@@ -49,7 +49,20 @@ def get_module_info(evaluator, sys_path=None, full_name=None, **kwargs):
|
|||||||
else:
|
else:
|
||||||
module_path = _get_init_path(module_path)
|
module_path = _get_init_path(module_path)
|
||||||
elif module_file:
|
elif module_file:
|
||||||
|
if module_path.endswith(('.zip', '.egg')):
|
||||||
|
# Unfortunately we are reading unicode here already, not byes.
|
||||||
|
# It seems however hard to get bytes, because the zip importer
|
||||||
|
# logic just unpacks the zip file and returns a file descriptor
|
||||||
|
# that we cannot as easily access. Therefore we just read it as
|
||||||
|
# a string.
|
||||||
code = module_file.read()
|
code = module_file.read()
|
||||||
|
else:
|
||||||
|
# Read the code with a binary file, because the binary file
|
||||||
|
# might not be proper unicode. This is handled by the parser
|
||||||
|
# wrapper.
|
||||||
|
with open(module_path, 'rb') as f:
|
||||||
|
code = f.read()
|
||||||
|
|
||||||
module_file.close()
|
module_file.close()
|
||||||
|
|
||||||
return code, cast_path(module_path), is_pkg
|
return code, cast_path(module_path), is_pkg
|
||||||
|
|||||||
@@ -490,7 +490,7 @@ def tree_name_to_contexts(evaluator, context, tree_name):
|
|||||||
exceptions = context.eval_node(tree_name.get_previous_sibling().get_previous_sibling())
|
exceptions = context.eval_node(tree_name.get_previous_sibling().get_previous_sibling())
|
||||||
types = exceptions.execute_evaluated()
|
types = exceptions.execute_evaluated()
|
||||||
else:
|
else:
|
||||||
raise ValueError("Should not happen.")
|
raise ValueError("Should not happen. type: %s" % typ)
|
||||||
return types
|
return types
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ def test_complete_at_zero(Script):
|
|||||||
def test_wrong_encoding(Script, cwd_tmpdir):
|
def test_wrong_encoding(Script, cwd_tmpdir):
|
||||||
x = cwd_tmpdir.join('x.py')
|
x = cwd_tmpdir.join('x.py')
|
||||||
# Use both latin-1 and utf-8 (a really broken file).
|
# Use both latin-1 and utf-8 (a really broken file).
|
||||||
x.write_binary(u'foobar = 1\nä'.encode('latin-1') + 'ä'.encode())
|
x.write_binary(u'foobar = 1\nä'.encode('latin-1') + u'ä'.encode('utf-8'))
|
||||||
|
|
||||||
c, = Script('import x; x.foo', sys_path=['.']).completions()
|
c, = Script('import x; x.foo', sys_path=['.']).completions()
|
||||||
assert c.name == 'foobar'
|
assert c.name == 'foobar'
|
||||||
|
|||||||
@@ -12,6 +12,6 @@ def test_equals(Script, environment, source):
|
|||||||
if environment.version_info.major < 3:
|
if environment.version_info.major < 3:
|
||||||
pytest.skip("Ellipsis does not exists in 2")
|
pytest.skip("Ellipsis does not exists in 2")
|
||||||
script = Script(source)
|
script = Script(source)
|
||||||
node = script._get_module_node().children[0]
|
node = script._module_node.children[0]
|
||||||
first, = script._get_module().eval_node(node)
|
first, = script._get_module().eval_node(node)
|
||||||
assert isinstance(first, CompiledObject) and first.get_safe_value() is True
|
assert isinstance(first, CompiledObject) and first.get_safe_value() is True
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ from jedi.api.environment import Environment
|
|||||||
def test_paths_from_assignment(Script):
|
def test_paths_from_assignment(Script):
|
||||||
def paths(src):
|
def paths(src):
|
||||||
script = Script(src, path='/foo/bar.py')
|
script = Script(src, path='/foo/bar.py')
|
||||||
expr_stmt = script._get_module_node().children[0]
|
expr_stmt = script._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"]') == {'/foo/a'}
|
assert paths('sys.path[0:0] = ["a"]') == {'/foo/a'}
|
||||||
|
|||||||
Reference in New Issue
Block a user