diff --git a/jedi/api/__init__.py b/jedi/api/__init__.py index 725907a6..1aa73f7b 100644 --- a/jedi/api/__init__.py +++ b/jedi/api/__init__.py @@ -86,7 +86,8 @@ class Script(object): with open(path) as f: source = f.read() - lines = common.splitlines(source) + self.source = common.source_to_unicode(source, encoding) + lines = common.splitlines(self.source) line = max(len(lines), 1) if line is None else line if not (0 < line <= len(lines)): raise ValueError('`line` parameter is not in a valid range.') @@ -99,7 +100,6 @@ class Script(object): cache.clear_caches() debug.reset_time() - self.source = common.source_to_unicode(source, encoding) self._user_context = UserContext(self.source, self._pos) self._parser = UserContextParser(self.source, path, self._pos, self._user_context) self._evaluator = Evaluator() diff --git a/jedi/cache.py b/jedi/cache.py index 84f92c16..11c8f95e 100644 --- a/jedi/cache.py +++ b/jedi/cache.py @@ -100,9 +100,7 @@ def time_cache(time_add_setting): def cache_call_signatures(source, user_pos, stmt): """This function calculates the cache key.""" index = user_pos[0] - 1 - lines = source.splitlines() or [''] - if source and source[-1] == '\n': - lines.append('') + lines = common.splitlines(source) before_cursor = lines[index][:user_pos[1]] other_lines = lines[stmt.start_pos[0]:index] diff --git a/jedi/parser/user_context.py b/jedi/parser/user_context.py index 5fcbd1c3..4637039f 100644 --- a/jedi/parser/user_context.py +++ b/jedi/parser/user_context.py @@ -2,6 +2,7 @@ import re import os from jedi import cache +from jedi import common from jedi.parser import tokenize from jedi._compatibility import u from jedi.parser.fast import FastParser @@ -178,12 +179,7 @@ class UserContext(object): def get_line(self, line_nr): if not self._line_cache: - self._line_cache = self.source.splitlines() - if self.source: - if self.source[-1] == '\n': - self._line_cache.append(u('')) - else: # ''.splitlines() == [] - self._line_cache = [u('')] + self._line_cache = common.splitlines(self.source) if line_nr == 0: # This is a fix for the zeroth line. We need a newline there, for diff --git a/jedi/refactoring.py b/jedi/refactoring.py index 726ff6fd..fbd9bde6 100644 --- a/jedi/refactoring.py +++ b/jedi/refactoring.py @@ -83,7 +83,7 @@ def _rename(names, replace_str): with open(current_path) as f: source = f.read() - new_lines = common.source_to_unicode(source).splitlines() + new_lines = common.splitlines(common.source_to_unicode(source)) old_lines = new_lines[:] nr, indent = name.line, name.column @@ -101,7 +101,7 @@ def extract(script, new_name): :type source: str :return: list of changed lines/changed files """ - new_lines = common.source_to_unicode(script.source).splitlines() + new_lines = common.splitlines(common.source_to_unicode(script.source)) old_lines = new_lines[:] user_stmt = script._parser.user_stmt() @@ -160,7 +160,7 @@ def inline(script): """ :type script: api.Script """ - new_lines = common.source_to_unicode(script.source).splitlines() + new_lines = common.splitlines(common.source_to_unicode(script.source)) dct = {}