From ab4f282b039e592bcb1a76d781ca0c04934d0f19 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Tue, 11 Feb 2020 00:18:49 +0100 Subject: [PATCH] Move rename function to refactoring --- jedi/api/__init__.py | 16 ++-------------- jedi/api/refactoring.py | 23 +++++++++++++++++++++++ test/refactor/rename.py | 21 +++++++++++++++++++++ 3 files changed, 46 insertions(+), 14 deletions(-) diff --git a/jedi/api/__init__.py b/jedi/api/__init__.py index 8574ee5f..095b19d2 100644 --- a/jedi/api/__init__.py +++ b/jedi/api/__init__.py @@ -31,6 +31,7 @@ from jedi.api.keywords import KeywordName from jedi.api.environment import InterpreterEnvironment from jedi.api.project import get_default_project, Project from jedi.api.errors import parso_to_jedi_errors +from jedi.api.refactoring import rename from jedi.inference import InferenceState from jedi.inference import imports from jedi.inference.references import find_references @@ -529,20 +530,7 @@ class Script(object): cursor and its references to a different name. """ definitions = self.get_references(line, column, include_builtins=False) - file_renames = [] - file_tree_name_map = {} - for d in definitions: - if d.type == 'module': - file_renames.append((d.module_path, new)) - else: - # This private access is ok in a way. It's not public to - # protect Jedi users from seeing it. - tree_name = d._name.tree_name - if tree_name is not None: - fmap = file_tree_name_map.setdefault(d.module_path, {}) - fmap[tree_name] = tree_name.prefix + new_name - from jedi.api.refactoring import Refactoring - return Refactoring(self._grammar, file_tree_name_map, file_renames) + return rename(self._grammar, definitions, new_name) def extract_variable(self): """ diff --git a/jedi/api/refactoring.py b/jedi/api/refactoring.py index a1620f11..5bc3af58 100644 --- a/jedi/api/refactoring.py +++ b/jedi/api/refactoring.py @@ -65,3 +65,26 @@ class Refactoring(object): for f in self.get_changed_files(): f.apply() + + +def _rename_path(path, new_name): + pass + + +def rename(grammar, definitions, new_name): + file_renames = [] + file_tree_name_map = {} + + for d in definitions: + if d.type == 'module': + file_renames.append( + (d.module_path, _rename_path(d.module_path, new_name)) + ) + else: + # This private access is ok in a way. It's not public to + # protect Jedi users from seeing it. + tree_name = d._name.tree_name + if tree_name is not None: + fmap = file_tree_name_map.setdefault(d.module_path, {}) + fmap[tree_name] = tree_name.prefix + new_name + return Refactoring(grammar, file_tree_name_map, file_renames) diff --git a/test/refactor/rename.py b/test/refactor/rename.py index 3ec10449..b1ddd22c 100644 --- a/test/refactor/rename.py +++ b/test/refactor/rename.py @@ -63,3 +63,24 @@ foobarbaz #? 0 renamed -foobarbaz +renamed +# ----- module +from import_tree import mod1 +#? 0 renamedm +mod1 +# +++++ +--- /home/dave/source/jedi/test/completion/import_tree/mod1.py ++++ /home/dave/source/jedi/test/completion/import_tree/renamedm.py +@@ -1,5 +1,5 @@ + a = 1 + from import_tree.random import a as c + +-foobarbaz = 3.0 ++renamed = 3.0 +--- /home/dave/source/jedi/test/refactor/rename.py ++++ /home/dave/source/jedi/test/refactor/rename.py +@@ -1,4 +1,4 @@ +-from import_tree import mod1 ++from import_tree import renamedm + #? 0 renamedm +-mod1 ++renamedm