def extract_variable(_, multiproj, main_project, other_projects, file_path, cursor_position_start, cursor_position_end, replacement): """ Extract variable from selection """ try: main_project.validate() module = libutils.path_to_resource(main_project, file_path) if multiproj: # we need to rename cross project crossrename = multiproject.MultiProjectRefactoring( ExtractVariable, other_projects) extractor = crossrename(main_project, module, cursor_position_start, cursor_position_end) pending_changes = extractor.get_all_changes(replacement) else: extractor = ExtractVariable(main_project, module, cursor_position_start, cursor_position_end) pending_changes = extractor.get_changes(replacement, similar=True) return multiproj, pending_changes except RopeError as e: error = RefactoringError() error.exc = str(e) error.traceback = traceback.format_exc() error.critical = False return error except Exception as e: error = RefactoringError() error.exc = str(e) error.traceback = traceback.format_exc() error.critical = True return error
def rename_symbol(_, main_project, multiproj, other_projects, file_path, cursor_position, replacement): """ Renames symbol under cusror. """ try: main_project.validate() module = libutils.path_to_resource(main_project, file_path) if multiproj: # we need to rename cross project crossrename = multiproject.MultiProjectRefactoring( Rename, other_projects) renamer = crossrename(main_project, module, cursor_position) pending_changes = renamer.get_all_changes(replacement, docs=True) else: renamer = Rename(main_project, module, cursor_position) pending_changes = renamer.get_changes(replacement, docs=True) return multiproj, pending_changes except RopeError as e: error = RefactoringError() error.exc = str(e) error.traceback = traceback.format_exc() error.critical = False return error except Exception as e: error = RefactoringError() error.exc = str(e) error.traceback = traceback.format_exc() error.critical = True return error
def test_rename_from_the_project_not_containing_the_change(self): self.project2.get_prefs().add("python_path", self.project1.address) self.mod1.write("var = 1\n") self.mod2.write( dedent("""\ import mod1 myvar = mod1.var """) ) refactoring = multiproject.MultiProjectRefactoring( rename.Rename, [self.project1] ) renamer = refactoring(self.project2, self.mod2, self.mod2.read().rindex("var")) multiproject.perform(renamer.get_all_changes("newvar")) self.assertEqual( dedent("""\ newvar = 1 """), self.mod1.read(), ) self.assertEqual( dedent("""\ import mod1 myvar = mod1.newvar """), self.mod2.read(), )
def test_move(self): self.mod1.write( dedent("""\ def a_func(): pass """) ) self.mod2.write( dedent("""\ import mod1 myvar = mod1.a_func() """) ) refactoring = multiproject.MultiProjectRefactoring( move.create_move, [self.project2] ) renamer = refactoring(self.project1, self.mod1, self.mod1.read().index("_func")) multiproject.perform(renamer.get_all_changes(self.other)) self.assertEqual("", self.mod1.read()) self.assertEqual( dedent("""\ def a_func(): pass """), self.other.read(), ) self.assertEqual( dedent("""\ import other myvar = other.a_func() """), self.mod2.read(), )
def test_rename(self): self.mod1.write('var = 1\n') self.mod2.write('import mod1\nmyvar = mod1.var\n') refactoring = multiproject.MultiProjectRefactoring( rename.Rename, [self.project2]) renamer = refactoring(self.project1, self.mod1, 1) multiproject.perform(renamer.get_all_changes('newvar')) self.assertEquals('newvar = 1\n', self.mod1.read()) self.assertEquals('import mod1\nmyvar = mod1.newvar\n', self.mod2.read())
def test_rename_from_the_project_not_containing_the_change(self): self.project2.get_prefs().add('python_path', self.project1.address) self.mod1.write('var = 1\n') self.mod2.write('import mod1\nmyvar = mod1.var\n') refactoring = multiproject.MultiProjectRefactoring( rename.Rename, [self.project1]) renamer = refactoring(self.project2, self.mod2, self.mod2.read().rindex('var')) multiproject.perform(renamer.get_all_changes('newvar')) self.assertEquals('newvar = 1\n', self.mod1.read()) self.assertEquals('import mod1\nmyvar = mod1.newvar\n', self.mod2.read())
def test_move(self): self.mod1.write('def a_func():\n pass\n') self.mod2.write('import mod1\nmyvar = mod1.a_func()\n') refactoring = multiproject.MultiProjectRefactoring( move.create_move, [self.project2]) renamer = refactoring(self.project1, self.mod1, self.mod1.read().index('_func')) multiproject.perform(renamer.get_all_changes(self.other)) self.assertEquals('', self.mod1.read()) self.assertEquals('def a_func():\n pass\n', self.other.read()) self.assertEquals('import other\nmyvar = other.a_func()\n', self.mod2.read())
def test_rename(self): self.mod1.write("var = 1\n") self.mod2.write( dedent("""\ import mod1 myvar = mod1.var """) ) refactoring = multiproject.MultiProjectRefactoring( rename.Rename, [self.project2] ) renamer = refactoring(self.project1, self.mod1, 1) multiproject.perform(renamer.get_all_changes("newvar")) self.assertEqual("newvar = 1\n", self.mod1.read()) self.assertEqual( dedent("""\ import mod1 myvar = mod1.newvar """), self.mod2.read(), )
def test_trivial_rename(self): self.mod1.write('var = 1\n') refactoring = multiproject.MultiProjectRefactoring(rename.Rename, []) renamer = refactoring(self.project1, self.mod1, 1) multiproject.perform(renamer.get_all_changes('newvar')) self.assertEquals('newvar = 1\n', self.mod1.read())
def __init__(self, project, refactoring_type, *args): cross_ref = multiproject.MultiProjectRefactoring( refactoring_type, list(project.cross_projects.values())) self.rope_ref = cross_ref(project.proj, *args)