Created
September 12, 2017 05:09
-
-
Save mcepl/34cf6dfc99598573ea36b1c901c325b9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/rope/base/worder.py b/rope/base/worder.py | |
index c85c6b3..35bc3ca 100644 | |
--- a/rope/base/worder.py | |
+++ b/rope/base/worder.py | |
@@ -74,6 +74,9 @@ class Worder(object): | |
def is_from_statement(self, offset): | |
return self.code_finder.is_from_statement(offset) | |
- def is_from_star_statement(self, offset): | |
- return self.code_finder.is_from_star_statement(offset) | |
+ | |
def get_from_aliased(self, offset): | |
return self.code_finder.get_from_aliased(offset) | |
@@ -329,6 +332,18 @@ class _RealFinder(object): | |
from_names = self._find_first_non_space_char(from_names) | |
return self._find_import_end(from_names) >= offset | |
- def is_from_star_statement(self, offset): | |
- try: | |
- last_from = self.code.rindex('from ', 0, offset) | |
- from_import = self.code.index(' import ', last_from) | |
- from_names = from_import + 8 | |
- except ValueError: | |
- return False | |
- from_names = self._find_first_non_space_char(from_names) | |
- if self._find_import_end(from_names) < offset: | |
- return False | |
- ``` | |
return self.code[from_names] == '*' | |
``` | |
+ | |
def is_from_statement_module(self, offset): | |
if offset >= len(self.code) - 1: | |
return False | |
diff --git a/rope/refactor/move.py b/rope/refactor/move.py | |
index 1c9a03b..f5a00e1 100644 | |
--- a/rope/refactor/move.py | |
+++ b/rope/refactor/move.py | |
@@ -423,9 +423,14 @@ class MoveModule(object): | |
return destname + '.' + self.old_name | |
return self.old_name | |
- def _new_import(self, dest): | |
- def _new_normal_import(self, dest): | |
return importutils.NormalImport([(self._new_modname(dest), None)]) | |
- def _new_from_import(self, dest_name): | |
- module_name = '.'.join(dest_name[:-1]) | |
- name = dest_name[-1] | |
- return importutils.FromImport(module_name, 0, [(name, None)]) | |
+ | |
def _change_moving_module(self, changes, dest): | |
if not self.source.is_folder(): | |
pymodule = self.project.get_pymodule(self.source) | |
@@ -444,11 +449,23 @@ class MoveModule(object): | |
if pymodule is None: | |
pymodule = self.project.get_pymodule(resource) | |
new_name = self._new_modname(dest) | |
- new_import = self._new_import(dest) | |
- source = self.tools.rename_in_module( | |
- new_name, imports=True, pymodule=pymodule, resource=resource) | |
- should_import = self.tools.occurs_in_module( | |
- pymodule=pymodule, resource=resource, imports=False) | |
- dest_name = new_name.split('.') | |
- (in_from_stmt, is_star) = self.tools.occurs_in_from_statement( | |
- pymodule=pymodule, resource=resource, imports=True) | |
+ | |
- if in_from_stmt and len(dest_name) > 1: | |
- if is_star: | |
- dest_name.append('*') | |
- new_import = self._new_from_import(dest_name) | |
- source = resource.read() if resource else pymodule.source_code | |
- should_import = True | |
- else: | |
- new_import = self._new_normal_import(dest) | |
- source = self.tools.rename_in_module( | |
- new_name, imports=True, pymodule=pymodule, resource=resource) | |
- should_import = self.tools.occurs_in_module( | |
- ``` | |
pymodule=pymodule, resource=resource, imports=False) | |
``` | |
+ | |
pymodule = self.tools.new_pymodule(pymodule, source) | |
source = self.tools.remove_old_imports(pymodule) | |
if should_import: | |
@@ -517,11 +534,29 @@ class _MoveTools(object): | |
return source | |
def occurs_in_module(self, pymodule=None, resource=None, imports=True): | |
- for occurrence in self._find_occurrences(pymodule, resource, imports): | |
- return True | |
- return False | |
+ | |
- def occurs_in_from_statement(self, pymodule=None, resource=None, | |
- imports=True): | |
- for occurrence in self._find_occurrences(pymodule, resource, imports): | |
- if occurrence.is_in_from_statement(): | |
- return (True, occurrence.is_from_star_statement()) | |
- return (False, False) | |
+ | |
- def occurs_in_normal_import_statement(self, pymodule=None, resource=None, | |
- imports=True): | |
- for occurrence in self._find_occurrences(pymodule, resource, imports): | |
- if occurrence.is_in_normal_import_statement(): | |
- return True | |
- return False | |
+ | |
- def _find_occurrences(self, pymodule=None, resource=None, imports=True): | |
finder = self._create_finder(imports) | |
for occurrence in finder.find_occurrences(pymodule=pymodule, | |
resource=resource): | |
- return True | |
- return False | |
- ``` | |
yield occurrence | |
``` | |
def _create_finder(self, imports): | |
return occurrences.create_finder(self.project, self.old_name, | |
diff --git a/rope/refactor/occurrences.py b/rope/refactor/occurrences.py | |
index 14a2d7d..380255c 100644 | |
--- a/rope/refactor/occurrences.py | |
+++ b/rope/refactor/occurrences.py | |
@@ -142,8 +142,20 @@ class Occurrence(object): | |
@utils.saveit | |
def is_in_import_statement(self): | |
- return (self.tools.word_finder.is_from_statement(self.offset) or | |
- self.tools.word_finder.is_import_statement(self.offset)) | |
- return self.is_in_from_statement() or \ | |
- self.is_in_normal_import_statement() | |
+ | |
- @utils.saveit | |
- def is_in_from_statement(self): | |
- return self.tools.word_finder.is_from_statement(self.offset) | |
+ | |
- @utils.saveit | |
- def is_in_normal_import_statement(self): | |
- return self.tools.word_finder.is_import_statement(self.offset) | |
+ | |
- @utils.saveit | |
- def is_from_star_statement(self): | |
- ``` | |
return self.tools.word_finder.is_from_star_statement(self.offset) | |
``` | |
def is_called(self): | |
return self.tools.word_finder.is_a_function_being_called(self.offset) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment