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
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)
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)
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)
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()
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
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)
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)
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)
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)
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)
def __init__(self): self.log = '' self.fscommands = FileSystemCommands()
def __init__(self): self.log = "" self.fscommands = FileSystemCommands()
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