Source

ropemacs / rope / contrib / ropemacs.py

The default branch has multiple heads

Ali Gholami Rudi 1fc1902 





Ali Gholami Rudi 792b528 
Ali Gholami Rudi 1fc1902 

Ali Gholami Rudi 3e6d774 
Ali Gholami Rudi 1fc1902 







Ali Gholami Rudi e44b235 
Ali Gholami Rudi 1fc1902 
Ali Gholami Rudi e44b235 

Ali Gholami Rudi 1fc1902 
Ali Gholami Rudi e44b235 


Ali Gholami Rudi 1fc1902 
Ali Gholami Rudi 3e6d774 
Ali Gholami Rudi e44b235 
Ali Gholami Rudi bc601cd 

Ali Gholami Rudi e44b235 

Ali Gholami Rudi 3e6d774 
Ali Gholami Rudi bc601cd 
Ali Gholami Rudi e44b235 
Ali Gholami Rudi 7cbfb42 
Ali Gholami Rudi e44b235 
Ali Gholami Rudi 3e6d774 
Ali Gholami Rudi e44b235 
Ali Gholami Rudi 5536b53 
Ali Gholami Rudi e44b235 


Ali Gholami Rudi 5536b53 
Ali Gholami Rudi 5f1f3b9 
Ali Gholami Rudi 5536b53 



Ali Gholami Rudi 792b528 











Ali Gholami Rudi 5536b53 






Ali Gholami Rudi 3e6d774 
Ali Gholami Rudi 5536b53 

Ali Gholami Rudi e44b235 


Ali Gholami Rudi 792b528 
Ali Gholami Rudi e44b235 


Ali Gholami Rudi 792b528 
Ali Gholami Rudi e44b235 
Ali Gholami Rudi 792b528 
import os

from Pymacs import lisp

import rope.refactor.rename
from rope.base import project, libutils
from rope.ide import codeassist


class interactive(object):

    def __init__(self, mode=''):
        self.mode = mode

    def __call__(self, func):
        func.interaction = self.mode
        return func

class RopeInterface(object):

    def __init__(self):
        self.project = None

    def init(self):
        """Initialize rope mode"""
        #lisp.global_set_key(lisp.kbd('C-c r r'), lisp.rope_rename)

    @interactive('DRope Project Root Folder: ')
    def set_project(self, root):
        if self.project is not None:
            self.close_project()
        self.project = project.Project(root)

    @interactive()
    def close_project(self):
        self.project.close()
        self.project = None

    @interactive('sNew Name: ')
    def rename(self, newname):
        self._check_project()
        lisp.save_some_buffers()
        filename = lisp.buffer_file_name()
        resource = libutils.path_to_resource(self.project, filename)
        offset = lisp.point_min() + lisp.point()
        renamer = rope.refactor.rename.Rename(self.project, resource, offset)
        changes = renamer.get_changes(newname)
        self.project.do(changes)
        self._reload_buffers(changes.get_changed_resources())

    @interactive('')
    def goto_definition(self):
        self._check_project()
        filename = lisp.buffer_file_name()
        resource = libutils.path_to_resource(self.project, filename)
        offset = lisp.point_min() + lisp.point()
        definition = codeassist.get_definition_location(
            self.project, lisp.buffer_string(), offset, resource)
        if definition[0] is not None:
            buffer = lisp.find_file(definition[0].real_path)
        lisp.goto_line(definition[1])

    def _check_project(self):
        if self.project is None:
            lisp.call_interactively(lisp.rope_set_project)

    def _reload_buffers(self, changed_resources):
        for resource in changed_resources:
            buffer = lisp.find_buffer_visiting(resource.real_path)
            if buffer and resource.exists():
                lisp.set_buffer(buffer)
                lisp.revert_buffer(None, 1)


interface = RopeInterface()

init = interface.init
set_project = interface.set_project
close_project = interface.close_project

rename = interface.rename

goto_definition = interface.goto_definition