Пример #1
0
    def __enter__(self):
        file_path = self.view.file_name()
        if file_path is None:
            # unsaved buffer
            file_path = self._create_temp_file()
        project_dir = self._find_ropeproject(file_path)
        if project_dir:
            self.project = project.Project(project_dir,
                                           fscommands=FileSystemCommands())
            self.importer = autoimport.AutoImport(project=self.project,
                                                  observe=True)
            if not os.path.exists("%s/.ropeproject/globalnames" % project_dir):
                # self.importer.generate_cache()
                self.build_cache()
            if os.path.exists("%s/__init__.py" % project_dir):
                sys.path.append(project_dir)
        else:
            # create a single-file project(ignoring other files in the folder)
            folder = os.path.dirname(file_path)
            ignored_res = os.listdir(folder)
            ignored_res.remove(os.path.basename(file_path))

            self.project = project.Project(ropefolder=None,
                                           projectroot=folder,
                                           ignored_resources=ignored_res,
                                           fscommands=FileSystemCommands())
            self.importer = autoimport.AutoImport(project=self.project,
                                                  observe=True)

        self.resource = libutils.path_to_resource(self.project, file_path)
        _update_python_path(self.project.prefs.get('python_path', []))
        self.input = self.view.substr(sublime.Region(0, self.view.size()))

        return self
Пример #2
0
    def __init__(self, view, single_file=False):
        self.view = view
        self.project = None
        self.resource = None
        self.tmpfile = None
        self.input = ""
        self.building = False

        self.file_path = self.view.file_name()
        if self.file_path is None:
            # unsaved buffer
            self.file_path = self._create_temp_file()
        self.project_dir = _find_ropeproject(self.file_path)

        if not single_file and self.project_dir:
            self.project = project.Project(self.project_dir,
                                           fscommands=FileSystemCommands())
            self.importer = autoimport.AutoImport(project=self.project,
                                                  observe=False)
            if os.path.exists("%s/__init__.py" % self.project_dir):
                sys.path.append(self.project_dir)
        else:
            # create a single-file project(ignoring other files in the folder)
            folder = os.path.dirname(self.file_path)
            ignored_res = os.listdir(folder)
            ignored_res.remove(os.path.basename(self.file_path))

            self.project = project.Project(ropefolder=None,
                                           projectroot=folder,
                                           ignored_resources=ignored_res,
                                           fscommands=FileSystemCommands())
            self.importer = autoimport.AutoImport(project=self.project,
                                                  observe=False)
Пример #3
0
 def _open_module(self):
     name, status = QtWidgets.QInputDialog.getText(self.main_window,
                                                   _('Open module'),
                                                   _('Python module:'))
     if status:
         project = Project(api.project.get_current_project(),
                           ropefolder=api.project.FOLDER,
                           fscommands=FileSystemCommands())
         try:
             mod = project.pycore.get_module(name)
         except ModuleNotFoundError:
             mod = None
         if mod:
             resource = mod.get_resource()
             if resource:
                 path = resource.real_path
                 if not os.path.isfile(path):
                     path = os.path.join(path, '__init__.py')
                 if os.path.exists(path):
                     api.editor.open_file(path)
                     return
         QtWidgets.QMessageBox.information(
             self.main_window, _('Module not found'),
             _('Cannot open %r, module not found or not editable...') %
             name)
Пример #4
0
    def __init__(self, path=None, project_path=None):
        """ Init Rope context. """
        self.path = path

        self.project = project.Project(project_path,
                                       fscommands=FileSystemCommands())

        self.importer = rope_autoimport.AutoImport(project=self.project,
                                                   observe=False)

        update_python_path(self.project.prefs.get('python_path', []))

        self.resource = None
        self.current = None
        self.options = dict(
            completeopt=env.var('&completeopt'),
            autoimport=env.var('g:pymode_rope_autoimport', True),
            autoimport_modules=env.var('g:pymode_rope_autoimport_modules'),
            goto_definition_cmd=env.var('g:pymode_rope_goto_definition_cmd'),
        )

        if os.path.exists("%s/__init__.py" % project_path):
            sys.path.append(project_path)

        if self.options.get('autoimport'):
            self.generate_autoimport_cache()

        env.debug('Context init', project_path)
        env.message('Init Rope project: %s' % project_path)
Пример #5
0
 def _on_current_project_changed(self, path):
     """
     Changes the active rope project when the current project changed in
     the IDE.
     :param path: Path of the new project.
     """
     self._main_project.close()
     self._main_project = Project(path,
                                  ropefolder=api.project.FOLDER,
                                  fscommands=FileSystemCommands())
     self._main_project.validate()
Пример #6
0
 def _get_other_projects(path_only=False):
     """
     Gets the list of secondary projects (all except current).
     """
     projects = []
     current = api.project.get_current_project()
     for path in api.project.get_projects():
         if path == current:
             continue
         if not path_only:
             prj = Project(path,
                           ropefolder=api.project.FOLDER,
                           fscommands=FileSystemCommands())
             prj.validate()
         else:
             prj = path
         projects.append(prj)
     return projects
Пример #7
0
 def activate(self):
     self._preview_dock = None
     self._occurrences_dock = None
     self._occurrences_results = None
     self._review_widget = None
     api.signals.connect_slot(api.signals.CURRENT_PROJECT_CHANGED,
                              self._on_current_project_changed)
     api.signals.connect_slot(api.signals.EDITOR_CREATED,
                              self._on_editor_created)
     api.signals.connect_slot(api.signals.CURRENT_EDITOR_CHANGED,
                              self._update_edit_actions_state)
     path = api.project.get_current_project()
     self._main_project = Project(path,
                                  ropefolder=api.project.FOLDER,
                                  fscommands=FileSystemCommands())
     self._main_project.validate()
     api.signals.connect_slot(api.signals.DOCUMENT_SAVED,
                              self._on_document_saved)
Пример #8
0
class _MockFSCommands(object):
    def __init__(self):
        self.log = ''
        self.fscommands = FileSystemCommands()

    def create_file(self, path):
        self.log += 'create_file '
        self.fscommands.create_file(path)

    def create_folder(self, path):
        self.log += 'create_folder '
        self.fscommands.create_folder(path)

    def move(self, path, new_location):
        self.log += 'move '
        self.fscommands.move(path, new_location)

    def remove(self, path):
        self.log += 'remove '
        self.fscommands.remove(path)
Пример #9
0
class _MockFSCommands(object):
    def __init__(self):
        self.log = ""
        self.fscommands = FileSystemCommands()

    def create_file(self, path):
        self.log += "create_file "
        self.fscommands.create_file(path)

    def create_folder(self, path):
        self.log += "create_folder "
        self.fscommands.create_folder(path)

    def move(self, path, new_location):
        self.log += "move "
        self.fscommands.move(path, new_location)

    def remove(self, path):
        self.log += "remove "
        self.fscommands.remove(path)
Пример #10
0
class _DeprecatedFSCommands(object):
    def __init__(self):
        self.log = ""
        self.fscommands = FileSystemCommands()

    def create_file(self, path):
        self.log += "create_file "
        self.fscommands.create_file(path)

    def create_folder(self, path):
        self.log += "create_folder "
        self.fscommands.create_folder(path)

    def move(self, path, new_location):
        self.log += "move "
        self.fscommands.move(path, new_location)

    def remove(self, path):
        self.log += "remove "
        self.fscommands.remove(path)
Пример #11
0
 def _on_document_saved(path, old_content):
     if not path:
         return
     project = None
     for project in api.project.get_projects():
         prj_path = project + os.sep
         if prj_path in path:
             project = Project(prj_path,
                               ropefolder=api.project.FOLDER,
                               fscommands=FileSystemCommands())
             break
     if project:
         if path.endswith('_rc.py'):
             return
         api.tasks.start(_('Refactoring: reporting changes'),
                         report_changes,
                         None,
                         args=(project, path, old_content),
                         use_thread=False)
Пример #12
0
 def __init__(self):
     self.log = ''
     self.fscommands = FileSystemCommands()
Пример #13
0
 def __init__(self):
     self.log = ""
     self.fscommands = FileSystemCommands()
Пример #14
0
def find_usages(_, main_project, other_projects, file_path, offset):
    """
    Find usages of symbol under cursor.
    """
    try:
        occurrences = []
        if other_projects:
            for path in [main_project] + other_projects:
                prj = Project(path,
                              ropefolder=api.project.FOLDER,
                              fscommands=FileSystemCommands())
                prj.validate()
                mod = libutils.path_to_resource(prj, file_path)
                occurrences += find_occurrences(prj,
                                                mod,
                                                offset,
                                                unsure=False,
                                                in_hierarchy=True)
                prj.close()
        else:
            prj = Project(main_project,
                          ropefolder=api.project.FOLDER,
                          fscommands=FileSystemCommands())
            prj.validate()
            mod = libutils.path_to_resource(prj, file_path)
            occurrences = find_occurrences(prj,
                                           mod,
                                           offset,
                                           unsure=False,
                                           in_hierarchy=True)
        # transform results to a serialisable list of usages that is ready
        # to use by the find_results widget.
        occurrences_map = {}
        for location in occurrences:
            path = location.resource.real_path
            lineno = location.lineno - 1
            # convert file region to line region
            content = location.resource.read()
            offset = location.offset
            char = content[offset]
            while char != '\n':  # find start of line
                offset -= 1
                char = content[offset]
            # update offsets
            start = location.offset - offset - 1
            end = location.region[1] - offset - 1
            line_text = content.splitlines()[lineno]
            data = (lineno, line_text, [(start, end)])
            if path not in occurrences_map:
                occurrences_map[path] = [data]
            else:
                occurrences_map[path].append(data)
        results = []
        for key, value in occurrences_map.items():
            results.append((key, value))
        results = sorted(results, key=lambda x: x[0])
        return results
    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