def extract_method(_, multiproj, main_project, other_projects, file_path, cursor_position_start, cursor_position_end, replacement): """ Extract method 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( ExtractMethod, other_projects) extractor = crossrename(main_project, module, cursor_position_start, cursor_position_end) pending_changes = extractor.get_all_changes(replacement) else: extractor = ExtractMethod(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 extract_method(_, multiproj, main_project, other_projects, file_path, cursor_position_start, cursor_position_end, replacement): """ Extract method 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( ExtractMethod, other_projects) extractor = crossrename( main_project, module, cursor_position_start, cursor_position_end) pending_changes = extractor.get_all_changes(replacement) else: extractor = ExtractMethod( 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 extract_method(source_string, start, end, new_name): if new_name == '': new_name = 'extracted_method' project, resource = make_temporary_project_and_resource(source_string) extractor = ExtractMethod(project, resource, start, end) changes = extractor.get_changes(new_name, similar=True) return get_result(changes, project, resource)
def onRefactor(self): renamed = ExtractMethod( self.project, self.resource, self._startOffset, self._endOffset) changes = renamed.get_changes( self._newName, self._similar, self._global) for item in changes.changes: if isinstance(item, rope.base.change.ChangeContents): self.changes.append( Change(item.resource.real_path, ChangeType.EDIT, item.get_description())) else: raise Exception('Unknown Change')
def onRefactor(self): renamed = ExtractMethod( self.project, self.resource, self._startOffset, self._endOffset) changes = renamed.get_changes( self._newName, self._similar, self._global) for item in changes.changes: if isinstance(item, rope.base.change.ChangeContents): self.changes.append( Change(item.resource.real_path, ChangeType.EDIT, get_diff(item))) else: raise Exception('Unknown Change')
def run(self, edit, block=False): self.view.run_command("save") self.original_loc = self.view.rowcol(self.view.sel()[0].a) with ropemate.ropecontext(self.view) as context: self.sel = self.view.sel()[0] # word = self.view.substr(self.view.word(self.sel.b)) self.extract = ExtractMethod(context.project, context.resource, self.sel.a, self.sel.b) self.view.window().show_input_panel("New method name", "", self.new_name_entered, None, None)
class PythonRefactorExtractMethod(sublime_plugin.TextCommand): def run(self, edit, block=False): self.view.run_command("save") self.original_loc = self.view.rowcol(self.view.sel()[0].a) with ropemate.ropecontext(self.view) as context: self.sel = self.view.sel()[0] # word = self.view.substr(self.view.word(self.sel.b)) self.extract = ExtractMethod(context.project, context.resource, self.sel.a, self.sel.b) self.view.window().show_input_panel("New method name", "", self.new_name_entered, None, None) def new_name_entered(self, new_name): with ropemate.ropecontext(self.view) as context: if new_name is None: return changes = self.extract.get_changes(new_name) print changes self.handle = TaskHandle(name="extract_handle") self.handle.add_observer(self.refactoring_done) context.project.do(changes, task_handle=self.handle) def refactoring_done(self): percent_done = self.handle.current_jobset().get_percent_done() if percent_done == 100: self.view.run_command('revert') row, col = self.original_loc path = self.view.file_name() + ":%i:%i" % (row + 1, col + 1) self.view.window().open_file(path, sublime.ENCODED_POSITION)
def refactor_extract_method(self, start, end, name, make_global): """Extract region as a method.""" refactor = ExtractMethod(self.project, self.resource, start, end) return self._get_changes( refactor, name, similar=True, global_=make_global )
class PythonRefactorExtractMethod(sublime_plugin.TextCommand): def run(self, edit, block=False): self.view.run_command("save") self.original_loc = self.view.rowcol(self.view.sel()[0].a) with ropemate.ropecontext(self.view) as context: self.sel = self.view.sel()[0] # word = self.view.substr(self.view.word(self.sel.b)) self.extract = ExtractMethod(context.project, context.resource, self.sel.a, self.sel.b) self.view.window().show_input_panel( "New method name", "", self.new_name_entered, None, None) def new_name_entered(self, new_name): with ropemate.ropecontext(self.view) as context: if new_name is None: return changes = self.extract.get_changes(new_name) print changes self.handle = TaskHandle(name="extract_handle") self.handle.add_observer(self.refactoring_done) context.project.do(changes, task_handle=self.handle) def refactoring_done(self): percent_done = self.handle.current_jobset().get_percent_done() if percent_done == 100: self.view.run_command('revert') row, col = self.original_loc path = self.view.file_name() + ":%i:%i" % (row + 1, col + 1) self.view.window().open_file( path, sublime.ENCODED_POSITION)
def run(self, edit, block=False): self.view.run_command("save") self.original_loc = self.view.rowcol(self.view.sel()[0].a) with ropemate.ropecontext(self.view) as context: self.sel = self.view.sel()[0] # word = self.view.substr(self.view.word(self.sel.b)) self.extract = ExtractMethod(context.project, context.resource, self.sel.a, self.sel.b) self.view.window().show_input_panel( "New method name", "", self.new_name_entered, None, None)
def extract_method(): with ropemate.context as context: try: offset_length = len(os.environ.get('TM_SELECTED_TEXT', '')) if offset_length == 0: tooltip("You have to selected some code to extract it as a method") return context.input offset = caret_position(context.input)-offset_length extractor = ExtractMethod(context.project, context.resource, offset, offset+offset_length) func_name = get_input("Extracted method's name") if func_name is None: tooltip("Enter a name for the extraced function!") return context.input changes = extractor.get_changes(func_name) result = changes.changes[0].new_contents except Exception, e: tooltip(e) return context.input return result
def refactor_extract_method(self, start, end, name, make_global): """Extract region as a method.""" refactor = ExtractMethod(self.project, self.resource, start, end) changes = refactor.get_changes(name, similar=True, global_=make_global) return translate_changes(changes)
def create_refactoring_operation(self, project, resource, start, end): return ExtractMethod(project, resource, start, end)
def extract_method(self, project_path, file_path, start, end, source, new_name): project, resource = self._get_resource(project_path, file_path, source) rename = ExtractMethod(project, resource, start, end) changes = rename.get_changes(new_name) project.do(changes)