From cef769ecd8b3a50cd0784d8660b123f4bf0eaec2 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Mon, 9 Jul 2018 18:25:28 +0200 Subject: [PATCH] The encoding parameter should be used again (includes test), fixes #1167 --- jedi/api/__init__.py | 3 ++- jedi/evaluate/__init__.py | 4 ++-- test/test_api/test_unicode.py | 6 ++++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/jedi/api/__init__.py b/jedi/api/__init__.py index 994a3bc8..485e2c85 100644 --- a/jedi/api/__init__.py +++ b/jedi/api/__init__.py @@ -112,9 +112,10 @@ class Script(object): self._module_node, source = self._evaluator.parse_and_get_code( code=source, path=self.path, + encoding=encoding, cache=False, # No disk cache, because the current script often changes. diff_cache=settings.fast_parser, - cache_path=settings.cache_directory + cache_path=settings.cache_directory, ) debug.speed('parsed') self._code_lines = parso.split_lines(source, keepends=True) diff --git a/jedi/evaluate/__init__.py b/jedi/evaluate/__init__.py index 3ba52b89..01081a3a 100644 --- a/jedi/evaluate/__init__.py +++ b/jedi/evaluate/__init__.py @@ -373,12 +373,12 @@ class Evaluator(object): scope_node = parent_scope(node) return from_scope_node(scope_node, is_nested=True, node_is_object=node_is_object) - def parse_and_get_code(self, code=None, path=None, **kwargs): + def parse_and_get_code(self, code=None, path=None, encoding='utf-8', **kwargs): if self.allow_different_encoding: if code is None: with open(path, 'rb') as f: code = f.read() - code = python_bytes_to_unicode(code, errors='replace') + code = python_bytes_to_unicode(code, encoding=encoding, errors='replace') return self.grammar.parse(code=code, path=path, **kwargs), code diff --git a/test/test_api/test_unicode.py b/test/test_api/test_unicode.py index c74cb686..7fd28bb2 100644 --- a/test/test_api/test_unicode.py +++ b/test/test_api/test_unicode.py @@ -72,3 +72,9 @@ def test_wrong_encoding(Script, tmpdir): c, = Script('import x; x.foo', sys_path=[tmpdir.strpath]).completions() assert c.name == 'foobar' + + +def test_encoding_parameter(Script): + name = u('hö') + s = Script(name.encode('latin-1'), encoding='latin-1') + assert s._module_node.get_code() == name