Example #1
0
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
Example #2
0
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
Example #3
0
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)
Example #4
0
 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')
Example #5
0
 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')
Example #6
0
    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)
Example #7
0
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)
Example #8
0
 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)
Example #10
0
    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)
Example #11
0
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
Example #12
0
 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)
Example #13
0
 def create_refactoring_operation(self, project, resource, start, end):
     return ExtractMethod(project, resource, start, end)
Example #14
0
 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)
Example #15
0
 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)