Beispiel #1
0
def create_move(project, resource, offset=None):
    """A factory for creating Move objects

    Based on `resource` and `offset`, return one of `MoveModule`,
    `MoveGlobal` or `MoveMethod` for performing move refactoring.

    """
    if offset is None:
        return MoveModule(project, resource)
    this_pymodule = project.get_pymodule(resource)
    pyname = evaluate.eval_location(this_pymodule, offset)
    if pyname is None:
        raise exceptions.RefactoringError(
            'Move only works on classes, functions, modules and methods.')
    pyobject = pyname.get_object()
    if isinstance(pyobject, pyobjects.PyModule) or \
       isinstance(pyobject, pyobjects.PyPackage):
        return MoveModule(project, pyobject.get_resource())
    if isinstance(pyobject, pyobjects.PyFunction) and \
       isinstance(pyobject.parent, pyobjects.PyClass):
        return MoveMethod(project, resource, offset)
    if isinstance(pyobject, pyobjects.PyDefinedObject) and \
       isinstance(pyobject.parent, pyobjects.PyModule):
        return MoveGlobal(project, resource, offset)
    raise exceptions.RefactoringError(
        'Move only works on global classes/functions, modules and methods.')
Beispiel #2
0
def create_move(project, resource, offset=None):
    """A factory for creating Move objects

    Based on `resource` and `offset`, return one of `MoveModule`,
    `MoveGlobal` or `MoveMethod` for performing move refactoring.

    """
    if offset is None:
        return MoveModule(project, resource)
    this_pymodule = project.get_pymodule(resource)
    pyname = evaluate.eval_location(this_pymodule, offset)
    if pyname is None:
        raise exceptions.RefactoringError(
            'Move only works on classes, functions, modules and methods.')
    pyobject = pyname.get_object()
    if isinstance(pyobject, pyobjects.PyModule) or \
       isinstance(pyobject, pyobjects.PyPackage):
        return MoveModule(project, pyobject.get_resource())
    if isinstance(pyobject, pyobjects.PyFunction) and \
       isinstance(pyobject.parent, pyobjects.PyClass):
        return MoveMethod(project, resource, offset)
    if isinstance(pyobject, pyobjects.PyDefinedObject) and \
       isinstance(pyobject.parent, pyobjects.PyModule):
        return MoveGlobal(project, resource, offset)
    raise exceptions.RefactoringError(
        'Move only works on global classes/functions, modules and methods.')
Beispiel #3
0
 def __init__(self, project, resource, offset):
     self.pycore = project.pycore
     self.resource = resource
     self.offset = offset
     self.old_name = worder.get_name_at(resource, offset)
     self.pymodule = self.pycore.resource_to_pyobject(self.resource)
     self.old_pyname = evaluate.eval_location(self.pymodule, offset)
Beispiel #4
0
 def __init__(self, project, resource, offset):
     self.project = project
     self.resource = resource
     self.offset = offset
     self.old_name = worder.get_name_at(resource, offset)
     self.pymodule = project.get_pymodule(self.resource)
     self.old_pyname = evaluate.eval_location(self.pymodule, offset)
Beispiel #5
0
 def __init__(self, project, resource, offset):
     self.project = project
     this_pymodule = self.project.get_pymodule(resource)
     pyname = evaluate.eval_location(this_pymodule, offset)
     self.method_name = worder.get_name_at(resource, offset)
     self.pyfunction = pyname.get_object()
     if self.pyfunction.get_kind() != "method":
         raise exceptions.RefactoringError("Only normal methods" " can be moved.")
 def __init__(self, project, resource, offset):
     self.pycore = project.pycore
     self.name = worder.get_name_at(resource, offset)
     this_pymodule = self.pycore.resource_to_pyobject(resource)
     self.pyname = evaluate.eval_location(this_pymodule, offset)
     if not self._is_an_attribute(self.pyname):
         raise exceptions.RefactoringError(
             'Encapsulate field should be performed on class attributes.')
     self.resource = self.pyname.get_definition_location()[0].get_resource()
Beispiel #7
0
 def __init__(self, project, resource, offset):
     self.project = project
     this_pymodule = self.project.get_pymodule(resource)
     pyname = evaluate.eval_location(this_pymodule, offset)
     self.method_name = worder.get_name_at(resource, offset)
     self.pyfunction = pyname.get_object()
     if self.pyfunction.get_kind() != 'method':
         raise exceptions.RefactoringError('Only normal methods'
                                           ' can be moved.')
Beispiel #8
0
Datei: move.py Projekt: Kha/rope
 def __init__(self, project, resource, offset):
     self.project = project
     self.pycore = project.pycore
     this_pymodule = self.pycore.resource_to_pyobject(resource)
     pyname = evaluate.eval_location(this_pymodule, offset)
     self.method_name = worder.get_name_at(resource, offset)
     self.pyfunction = pyname.get_object()
     if self.pyfunction.get_kind() != 'method':
         raise exceptions.RefactoringError('Only normal methods'
                                           ' can be moved.')
Beispiel #9
0
 def __init__(self, project, resource, offset):
     self.pycore = project.pycore
     this_pymodule = self.pycore.resource_to_pyobject(resource)
     self.old_pyname = evaluate.eval_location(this_pymodule, offset)
     self.old_name = self.old_pyname.get_object().get_name()
     pymodule = self.old_pyname.get_object().get_module()
     self.source = pymodule.get_resource()
     self.tools = _MoveTools(self.pycore, self.source, self.old_pyname, self.old_name)
     self.import_tools = self.tools.import_tools
     self._check_exceptional_conditions()
Beispiel #10
0
 def __init__(self, project, resource, offset):
     self.project = project
     this_pymodule = self.project.get_pymodule(resource)
     self.old_pyname = evaluate.eval_location(this_pymodule, offset)
     self.old_name = self.old_pyname.get_object().get_name()
     pymodule = self.old_pyname.get_object().get_module()
     self.source = pymodule.get_resource()
     self.tools = _MoveTools(self.project, self.source, self.old_pyname,
                             self.old_name)
     self.import_tools = self.tools.import_tools
     self._check_exceptional_conditions()
 def __init__(self, project, resource, offset):
     self.pycore = project.pycore
     this_pymodule = self.pycore.resource_to_pyobject(resource)
     pyname = evaluate.eval_location(this_pymodule, offset)
     if pyname is None or not isinstance(pyname.get_object(),
                                         pyobjects.PyFunction):
         raise exceptions.RefactoringError(
             'Replace method with method object refactoring should be '
             'performed on a function.')
     self.pyfunction = pyname.get_object()
     self.pymodule = self.pyfunction.get_module()
     self.resource = self.pymodule.get_resource()
Beispiel #12
0
    def __init__(self, project, resource, offset):
        self.pycore = project.pycore
        self.offset = offset

        this_pymodule = self.pycore.resource_to_pyobject(resource)
        self.old_pyname = evaluate.eval_location(this_pymodule, offset)
        if self.old_pyname is None or not isinstance(self.old_pyname.get_object(),
                                                     rope.base.pyobjects.PyClass):
            raise rope.base.exceptions.RefactoringError(
                'Introduce factory should be performed on a class.')
        self.old_name = self.old_pyname.get_object().get_name()
        self.pymodule = self.old_pyname.get_object().get_module()
        self.resource = self.pymodule.get_resource()
Beispiel #13
0
    def __init__(self, project, resource, offset):
        self.project = project
        self.offset = offset

        this_pymodule = self.project.get_pymodule(resource)
        self.old_pyname = evaluate.eval_location(this_pymodule, offset)
        if self.old_pyname is None or not isinstance(
                self.old_pyname.get_object(), rope.base.pyobjects.PyClass):
            raise rope.base.exceptions.RefactoringError(
                "Introduce factory should be performed on a class.")
        self.old_name = self.old_pyname.get_object().get_name()
        self.pymodule = self.old_pyname.get_object().get_module()
        self.resource = self.pymodule.get_resource()
Beispiel #14
0
 def __init__(self, project, resource, offset):
     self.project = project
     self.offset = offset
     this_pymodule = project.pycore.resource_to_pyobject(resource)
     pyname = evaluate.eval_location(this_pymodule, offset)
     if pyname is None:
         raise exceptions.RefactoringError('Unresolvable name selected')
     self.pyfunction = pyname.get_object()
     if not isinstance(self.pyfunction, pyobjects.PyFunction) or \
        not isinstance(self.pyfunction.parent, pyobjects.PyModule):
         raise exceptions.RefactoringError(
             'Use function works for global functions, only.')
     self.resource = self.pyfunction.get_module().get_resource()
     self._check_returns()
Beispiel #15
0
 def __init__(self, project, resource, offset):
     self.project = project
     self.offset = offset
     this_pymodule = project.pycore.resource_to_pyobject(resource)
     pyname = evaluate.eval_location(this_pymodule, offset)
     if pyname is None:
         raise exceptions.RefactoringError('Unresolvable name selected')
     self.pyfunction = pyname.get_object()
     if not isinstance(self.pyfunction, pyobjects.PyFunction) or \
        not isinstance(self.pyfunction.parent, pyobjects.PyModule):
         raise exceptions.RefactoringError(
             'Use function works for global functions, only.')
     self.resource = self.pyfunction.get_module().get_resource()
     self._check_returns()
Beispiel #16
0
 def __init__(self, project, resource, offset):
     self.project = project
     this_pymodule = self.project.get_pymodule(resource)
     self.old_pyname = evaluate.eval_location(this_pymodule, offset)
     if self.old_pyname is None:
         raise exceptions.RefactoringError("Move refactoring should be performed on a " "class/function/variable.")
     if self._is_variable(self.old_pyname):
         self.old_name = worder.get_name_at(resource, offset)
         pymodule = this_pymodule
     else:
         self.old_name = self.old_pyname.get_object().get_name()
         pymodule = self.old_pyname.get_object().get_module()
     self._check_exceptional_conditions()
     self.source = pymodule.get_resource()
     self.tools = _MoveTools(self.project, self.source, self.old_pyname, self.old_name)
     self.import_tools = self.tools.import_tools
Beispiel #17
0
    def get_changes(self):
        name = worder.get_name_at(self.resource, self.offset)
        this_pymodule = self.project.get_pymodule(self.resource)
        pyname = evaluate.eval_location(this_pymodule, self.offset)
        if not self._is_a_method_local(pyname):
            raise exceptions.RefactoringError(
                'Convert local variable to field should be performed on \n'
                'a local variable of a method.')

        pymodule, lineno = pyname.get_definition_location()
        function_scope = pymodule.get_scope().get_inner_scope_for_line(lineno)
        # Not checking redefinition
        #self._check_redefinition(name, function_scope)

        new_name = self._get_field_name(function_scope.pyobject, name)
        changes = Rename(self.project, self.resource, self.offset).\
            get_changes(new_name, resources=[self.resource])
        return changes
Beispiel #18
0
 def __init__(self, project, resource, offset):
     self.project = project
     this_pymodule = self.project.get_pymodule(resource)
     self.old_pyname = evaluate.eval_location(this_pymodule, offset)
     if self.old_pyname is None:
         raise exceptions.RefactoringError(
             'Move refactoring should be performed on a '
             'class/function/variable.')
     if self._is_variable(self.old_pyname):
         self.old_name = worder.get_name_at(resource, offset)
         pymodule = this_pymodule
     else:
         self.old_name = self.old_pyname.get_object().get_name()
         pymodule = self.old_pyname.get_object().get_module()
     self._check_exceptional_conditions()
     self.source = pymodule.get_resource()
     self.tools = _MoveTools(self.project, self.source, self.old_pyname,
                             self.old_name)
     self.import_tools = self.tools.import_tools
Beispiel #19
0
def thing_at(project, resource, offset=None):
    """Determine the kind of thing at an offset in a resource.

    This is based heavily on the logic in `rope.refactor.move.create_move`.

    Args:
        project: A `rope.base.project.Project` instance
        resource: The `Resource` to inspect
        offset: The offset into `Resource` of the thing to inspect

    Returns: A `ThingType` or `None`.
    """
    if offset is None:
        return ThingType.Module

    this_pymodule = project.get_pymodule(resource)
    pyname = evaluate.eval_location(this_pymodule, offset)

    if pyname is not None:
        obj = pyname.get_object()
        if isinstance(obj, pyobjects.PyModule):
            return ThingType.Module
        elif isinstance(obj, pyobjects.PyPackage):
            return ThingType.Package
        elif isinstance(obj, pyobjects.PyFunction):
            if isinstance(obj.parent, pyobjects.PyClass):
                return ThingType.Method
            else:
                return ThingType.Function
        elif isinstance(obj, pyobjects.PyClass):
            return ThingType.Class

        # elif isinstance(pyobject, pyobjects.PyDefinedObject) and \
        #      isinstance(pyobject.parent, pyobjects.PyModule) or \
        #      isinstance(pyname, pynames.AssignedName):
        #     return ThingType.AssignedName

    return None
Beispiel #20
0
 def _get_name_and_pyname(self):
     return (worder.get_name_at(self.resource, self.offset),
             evaluate.eval_location(self.pymodule, self.offset))
Beispiel #21
0
def _get_pyname(project, resource, offset):
    pymodule = project.get_pymodule(resource)
    pyname = evaluate.eval_location(pymodule, offset)
    if isinstance(pyname, pynames.ImportedName):
        pyname = pyname._get_imported_pyname()
    return pyname
Beispiel #22
0
def _get_pyname(pycore, resource, offset):
    pymodule = pycore.resource_to_pyobject(resource)
    pyname = evaluate.eval_location(pymodule, offset)
    if isinstance(pyname, pynames.ImportedName):
        pyname = pyname._get_imported_pyname()
    return pyname
Beispiel #23
0
def _get_pyname(project, resource, offset):
    pymodule = project.get_pymodule(resource)
    pyname = evaluate.eval_location(pymodule, offset)
    if isinstance(pyname, pynames.ImportedName):
        pyname = pyname._get_imported_pyname()
    return pyname
 def _get_name_and_pyname(self):
     return (worder.get_name_at(self.resource, self.offset),
             evaluate.eval_location(self.pymodule, self.offset))
Beispiel #25
0
def _get_pyname(pycore, resource, offset):
    pymodule = pycore.resource_to_pyobject(resource)
    pyname = evaluate.eval_location(pymodule, offset)
    if isinstance(pyname, pynames.ImportedName):
        pyname = pyname._get_imported_pyname()
    return pyname