--- a/RefactoringRope/RefactoringServer.py Sat Jun 25 18:06:56 2022 +0200 +++ b/RefactoringRope/RefactoringServer.py Wed Sep 21 15:30:34 2022 +0200 @@ -34,39 +34,40 @@ """ Class implementing the refactoring interface to rope. """ + def __init__(self, plugin, parent=None): """ Constructor - + @param plugin reference to the plugin object @type RefactoringRopePlugin @param parent parent @type QObject """ - super().__init__( - "RefactoringServer", parent=parent) - + super().__init__("RefactoringServer", parent=parent) + self.__plugin = plugin self.__ui = parent self.__vm = ericApp().getObject("ViewManager") self.__ericProject = ericApp().getObject("Project") - self.__projectpath = '' + self.__projectpath = "" self.__projectLanguage = "" self.__projectopen = False self.__ropeConfig = {} - + self.__mainMenu = None self.__mainAct = None self.__separatorAct = None - + self.__progressDialog = None self.__helpDialog = None self.__historyDialog = None self.__refactoringDialogs = {} - + from .FileSystemCommands import EricFileSystemCommands + self.__fsCommands = EricFileSystemCommands(self.__ericProject) - + self.__methodMapping = { "Config": self.__setConfig, "Progress": self.__processProgress, @@ -74,700 +75,866 @@ "QueryDefinitionResult": self.__queryDefinitionResult, "QueryImplementationsResult": self.__queryImplementationsResult, "SoaFinished": self.__soaFinished, - "FileSystemCommand": self.__fsCommands.processFileSystemCommand, - "ClientException": self.__processClientException, - "HistoryResult": self.__processHistoryResult, - "Changes": self.__processChanges, } - + @pyqtSlot() def handleNewConnection(self): """ Public slot for new incoming connections from a client. """ super().handleNewConnection() - + self.sendJson("GetConfig", {}) - + def activate(self): """ Public method to activate the refactoring server. - + This is performed when the rope plug-in is activated. """ self.__initActions() ericApp().registerPluginObject("RefactoringRope", self) readShortcuts(pluginName="RefactoringRope") - + self.__mainMenu = self.__initMenu() projectToolsMenu = self.__ui.getMenu("project_tools") if projectToolsMenu is not None: insertBeforeAct = projectToolsMenu.actions()[0] self.__mainAct = projectToolsMenu.insertMenu( - insertBeforeAct, self.__mainMenu) - self.__separatorAct = projectToolsMenu.insertSeparator( - insertBeforeAct) + insertBeforeAct, self.__mainMenu + ) + self.__separatorAct = projectToolsMenu.insertSeparator(insertBeforeAct) else: projectAct = self.__ui.getMenuBarAction("project") actions = self.__ui.menuBar().actions() insertBeforeAct = actions[actions.index(projectAct) + 1] self.__mainAct = self.__ui.menuBar().insertMenu( - insertBeforeAct, self.__mainMenu) + insertBeforeAct, self.__mainMenu + ) self.__mainAct.setEnabled(False) - + if ericApp().getObject("Project").isOpen(): self.projectOpened() - - ericApp().getObject("Project").projectOpened.connect( - self.projectOpened) + + ericApp().getObject("Project").projectOpened.connect(self.projectOpened) ericApp().getObject("Project").projectPropertiesChanged.connect( - self.projectOpened) - ericApp().getObject("Project").projectClosed.connect( - self.projectClosed) - ericApp().getObject("Project").newProject.connect( - self.projectOpened) - + self.projectOpened + ) + ericApp().getObject("Project").projectClosed.connect(self.projectClosed) + ericApp().getObject("Project").newProject.connect(self.projectOpened) + def deactivate(self): """ Public method to deactivate the refactoring server. """ ericApp().unregisterPluginObject("RefactoringRope") - - ericApp().getObject("Project").projectOpened.disconnect( - self.projectOpened) + + ericApp().getObject("Project").projectOpened.disconnect(self.projectOpened) ericApp().getObject("Project").projectPropertiesChanged.disconnect( - self.projectOpened) - ericApp().getObject("Project").projectClosed.disconnect( - self.projectClosed) - ericApp().getObject("Project").newProject.disconnect( - self.projectOpened) - + self.projectOpened + ) + ericApp().getObject("Project").projectClosed.disconnect(self.projectClosed) + ericApp().getObject("Project").newProject.disconnect(self.projectOpened) + projectToolsMenu = self.__ui.getMenu("project_tools") if projectToolsMenu is not None: projectToolsMenu.removeAction(self.__separatorAct) projectToolsMenu.removeAction(self.__mainAct) else: self.__ui.menuBar().removeAction(self.__mainAct) - + self.projectClosed() - + def getMainWindow(self): """ Public method to get a reference to the IDE main window. - + @return reference to the IDE main window @rtype UserInterface """ return self.__ui - + def __initActions(self): """ Private method to define the refactoring actions. """ self.actions = [] - + ##################################################### ## Rename refactoring actions ##################################################### - + self.refactoringRenameAct = EricAction( - self.tr('Rename'), - self.tr('&Rename'), - 0, 0, - self, 'refactoring_rename') - self.refactoringRenameAct.setStatusTip(self.tr( - 'Rename the highlighted object')) - self.refactoringRenameAct.setWhatsThis(self.tr( - """<b>Rename</b>""" - """<p>Rename the highlighted Python object.</p>""" - )) - self.refactoringRenameAct.triggered.connect( - self.__rename) + self.tr("Rename"), self.tr("&Rename"), 0, 0, self, "refactoring_rename" + ) + self.refactoringRenameAct.setStatusTip(self.tr("Rename the highlighted object")) + self.refactoringRenameAct.setWhatsThis( + self.tr( + """<b>Rename</b>""" """<p>Rename the highlighted Python object.</p>""" + ) + ) + self.refactoringRenameAct.triggered.connect(self.__rename) self.actions.append(self.refactoringRenameAct) - + self.refactoringRenameLocalAct = EricAction( - self.tr('Local Rename'), - self.tr('&Local Rename'), - 0, 0, - self, 'refactoring_rename_local') - self.refactoringRenameLocalAct.setStatusTip(self.tr( - 'Rename the highlighted object in the current module only')) - self.refactoringRenameLocalAct.setWhatsThis(self.tr( - """<b>Local Rename</b>""" - """<p>Rename the highlighted Python object in the current""" - """ module only.</p>""" - )) - self.refactoringRenameLocalAct.triggered.connect( - self.__renameLocal) + self.tr("Local Rename"), + self.tr("&Local Rename"), + 0, + 0, + self, + "refactoring_rename_local", + ) + self.refactoringRenameLocalAct.setStatusTip( + self.tr("Rename the highlighted object in the current module only") + ) + self.refactoringRenameLocalAct.setWhatsThis( + self.tr( + """<b>Local Rename</b>""" + """<p>Rename the highlighted Python object in the current""" + """ module only.</p>""" + ) + ) + self.refactoringRenameLocalAct.triggered.connect(self.__renameLocal) self.actions.append(self.refactoringRenameLocalAct) - + self.refactoringRenameModuleAct = EricAction( - self.tr('Rename Current Module'), - self.tr('Rename Current Module'), - 0, 0, - self, 'refactoring_rename_module') - self.refactoringRenameModuleAct.setStatusTip(self.tr( - 'Rename the current module')) - self.refactoringRenameModuleAct.setWhatsThis(self.tr( - """<b>Rename Current Module</b>""" - """<p>Rename the current module.</p>""" - )) - self.refactoringRenameModuleAct.triggered.connect( - self.__renameModule) + self.tr("Rename Current Module"), + self.tr("Rename Current Module"), + 0, + 0, + self, + "refactoring_rename_module", + ) + self.refactoringRenameModuleAct.setStatusTip( + self.tr("Rename the current module") + ) + self.refactoringRenameModuleAct.setWhatsThis( + self.tr( + """<b>Rename Current Module</b>""" + """<p>Rename the current module.</p>""" + ) + ) + self.refactoringRenameModuleAct.triggered.connect(self.__renameModule) self.actions.append(self.refactoringRenameModuleAct) - + self.refactoringChangeOccurrencesAct = EricAction( - self.tr('Change Occurrences'), - self.tr('Change &Occurrences'), - 0, 0, - self, 'refactoring_change_occurrences') - self.refactoringChangeOccurrencesAct.setStatusTip(self.tr( - 'Change all occurrences in the local scope')) - self.refactoringChangeOccurrencesAct.setWhatsThis(self.tr( - """<b>Change Occurrences</b>""" - """<p>Change all occurrences in the local scope.</p>""" - )) - self.refactoringChangeOccurrencesAct.triggered.connect( - self.__changeOccurrences) + self.tr("Change Occurrences"), + self.tr("Change &Occurrences"), + 0, + 0, + self, + "refactoring_change_occurrences", + ) + self.refactoringChangeOccurrencesAct.setStatusTip( + self.tr("Change all occurrences in the local scope") + ) + self.refactoringChangeOccurrencesAct.setWhatsThis( + self.tr( + """<b>Change Occurrences</b>""" + """<p>Change all occurrences in the local scope.</p>""" + ) + ) + self.refactoringChangeOccurrencesAct.triggered.connect(self.__changeOccurrences) self.actions.append(self.refactoringChangeOccurrencesAct) - + ##################################################### ## Extract refactoring actions ##################################################### - + self.refactoringExtractMethodAct = EricAction( - self.tr('Extract method'), - self.tr('Extract &Method'), - 0, 0, - self, 'refactoring_extract_method') - self.refactoringExtractMethodAct.setStatusTip(self.tr( - 'Extract the highlighted area as a method')) - self.refactoringExtractMethodAct.setWhatsThis(self.tr( - """<b>Extract method</b>""" - """<p>Extract the highlighted area as a method or function.</p>""" - )) - self.refactoringExtractMethodAct.triggered.connect( - self.__extractMethod) + self.tr("Extract method"), + self.tr("Extract &Method"), + 0, + 0, + self, + "refactoring_extract_method", + ) + self.refactoringExtractMethodAct.setStatusTip( + self.tr("Extract the highlighted area as a method") + ) + self.refactoringExtractMethodAct.setWhatsThis( + self.tr( + """<b>Extract method</b>""" + """<p>Extract the highlighted area as a method or function.</p>""" + ) + ) + self.refactoringExtractMethodAct.triggered.connect(self.__extractMethod) self.actions.append(self.refactoringExtractMethodAct) - + self.refactoringExtractLocalVariableAct = EricAction( - self.tr('Extract local variable'), - self.tr('&Extract Local Variable'), - 0, 0, - self, 'refactoring_extract_variable') - self.refactoringExtractLocalVariableAct.setStatusTip(self.tr( - 'Extract the highlighted area as a local variable')) - self.refactoringExtractLocalVariableAct.setWhatsThis(self.tr( - """<b>Extract local variable</b>""" - """<p>Extract the highlighted area as a local variable.</p>""" - )) + self.tr("Extract local variable"), + self.tr("&Extract Local Variable"), + 0, + 0, + self, + "refactoring_extract_variable", + ) + self.refactoringExtractLocalVariableAct.setStatusTip( + self.tr("Extract the highlighted area as a local variable") + ) + self.refactoringExtractLocalVariableAct.setWhatsThis( + self.tr( + """<b>Extract local variable</b>""" + """<p>Extract the highlighted area as a local variable.</p>""" + ) + ) self.refactoringExtractLocalVariableAct.triggered.connect( - self.__extractLocalVariable) + self.__extractLocalVariable + ) self.actions.append(self.refactoringExtractLocalVariableAct) - + ##################################################### ## Inline refactoring actions ##################################################### - + self.refactoringInlineAct = EricAction( - self.tr('Inline'), - self.tr('&Inline'), - 0, 0, - self, 'refactoring_inline') - self.refactoringInlineAct.setStatusTip(self.tr( - 'Inlines the selected local variable or method')) - self.refactoringInlineAct.setWhatsThis(self.tr( - """<b>Inline</b>""" - """<p>Inlines the selected local variable or method.</p>""" - )) - self.refactoringInlineAct.triggered.connect( - self.__inline) + self.tr("Inline"), self.tr("&Inline"), 0, 0, self, "refactoring_inline" + ) + self.refactoringInlineAct.setStatusTip( + self.tr("Inlines the selected local variable or method") + ) + self.refactoringInlineAct.setWhatsThis( + self.tr( + """<b>Inline</b>""" + """<p>Inlines the selected local variable or method.</p>""" + ) + ) + self.refactoringInlineAct.triggered.connect(self.__inline) self.actions.append(self.refactoringInlineAct) - + ##################################################### ## Move refactoring actions ##################################################### - + self.refactoringMoveMethodAct = EricAction( - self.tr('Move method'), - self.tr('Mo&ve Method'), - 0, 0, - self, 'refactoring_move_method') - self.refactoringMoveMethodAct.setStatusTip(self.tr( - 'Move the highlighted method to another class')) - self.refactoringMoveMethodAct.setWhatsThis(self.tr( - """<b>Move method</b>""" - """<p>Move the highlighted method to another class.</p>""" - )) + self.tr("Move method"), + self.tr("Mo&ve Method"), + 0, + 0, + self, + "refactoring_move_method", + ) + self.refactoringMoveMethodAct.setStatusTip( + self.tr("Move the highlighted method to another class") + ) + self.refactoringMoveMethodAct.setWhatsThis( + self.tr( + """<b>Move method</b>""" + """<p>Move the highlighted method to another class.</p>""" + ) + ) self.refactoringMoveMethodAct.triggered.connect( - lambda: self.__move("move_method")) + lambda: self.__move("move_method") + ) self.actions.append(self.refactoringMoveMethodAct) - + self.refactoringMoveModuleAct = EricAction( - self.tr('Move current module'), - self.tr('Move Current Module'), - 0, 0, - self, 'refactoring_move_module') - self.refactoringMoveModuleAct.setStatusTip(self.tr( - 'Move the current module to another package')) - self.refactoringMoveModuleAct.setWhatsThis(self.tr( - """<b>Move current module</b>""" - """<p>Move the current module to another package.</p>""" - )) + self.tr("Move current module"), + self.tr("Move Current Module"), + 0, + 0, + self, + "refactoring_move_module", + ) + self.refactoringMoveModuleAct.setStatusTip( + self.tr("Move the current module to another package") + ) + self.refactoringMoveModuleAct.setWhatsThis( + self.tr( + """<b>Move current module</b>""" + """<p>Move the current module to another package.</p>""" + ) + ) self.refactoringMoveModuleAct.triggered.connect( - lambda: self.__move("move_module")) + lambda: self.__move("move_module") + ) self.actions.append(self.refactoringMoveModuleAct) - + ##################################################### ## Use function refactoring action ##################################################### - + self.refactoringUseFunctionAct = EricAction( - self.tr('Use Function'), - self.tr('Use Function'), - 0, 0, - self, 'refactoring_use_function') - self.refactoringUseFunctionAct.setStatusTip(self.tr( - 'Use a function wherever possible.')) - self.refactoringUseFunctionAct.setWhatsThis(self.tr( - """<b>Use function</b>""" - """<p>Tries to use a function wherever possible.</p>""" - )) - self.refactoringUseFunctionAct.triggered.connect( - self.__useFunction) + self.tr("Use Function"), + self.tr("Use Function"), + 0, + 0, + self, + "refactoring_use_function", + ) + self.refactoringUseFunctionAct.setStatusTip( + self.tr("Use a function wherever possible.") + ) + self.refactoringUseFunctionAct.setWhatsThis( + self.tr( + """<b>Use function</b>""" + """<p>Tries to use a function wherever possible.</p>""" + ) + ) + self.refactoringUseFunctionAct.triggered.connect(self.__useFunction) self.actions.append(self.refactoringUseFunctionAct) - + ##################################################### ## Introduce refactorings actions ##################################################### - + self.refactoringIntroduceFactoryAct = EricAction( - self.tr('Introduce Factory Method'), - self.tr('Introduce &Factory Method'), - 0, 0, - self, 'refactoring_introduce_factory_method') - self.refactoringIntroduceFactoryAct.setStatusTip(self.tr( - 'Introduce a factory method or function')) - self.refactoringIntroduceFactoryAct.setWhatsThis(self.tr( - """<b>Introduce Factory Method</b>""" - """<p>Introduce a factory method or function.</p>""" - )) + self.tr("Introduce Factory Method"), + self.tr("Introduce &Factory Method"), + 0, + 0, + self, + "refactoring_introduce_factory_method", + ) + self.refactoringIntroduceFactoryAct.setStatusTip( + self.tr("Introduce a factory method or function") + ) + self.refactoringIntroduceFactoryAct.setWhatsThis( + self.tr( + """<b>Introduce Factory Method</b>""" + """<p>Introduce a factory method or function.</p>""" + ) + ) self.refactoringIntroduceFactoryAct.triggered.connect( - self.__introduceFactoryMethod) + self.__introduceFactoryMethod + ) self.actions.append(self.refactoringIntroduceFactoryAct) - + self.refactoringIntroduceParameterAct = EricAction( - self.tr('Introduce Parameter'), - self.tr('Introduce &Parameter'), - 0, 0, - self, 'refactoring_introduce_parameter_method') - self.refactoringIntroduceParameterAct.setStatusTip(self.tr( - 'Introduce a parameter in a function')) - self.refactoringIntroduceParameterAct.setWhatsThis(self.tr( - """<b>Introduce Parameter</b>""" - """<p>Introduce a parameter in a function.</p>""" - )) + self.tr("Introduce Parameter"), + self.tr("Introduce &Parameter"), + 0, + 0, + self, + "refactoring_introduce_parameter_method", + ) + self.refactoringIntroduceParameterAct.setStatusTip( + self.tr("Introduce a parameter in a function") + ) + self.refactoringIntroduceParameterAct.setWhatsThis( + self.tr( + """<b>Introduce Parameter</b>""" + """<p>Introduce a parameter in a function.</p>""" + ) + ) self.refactoringIntroduceParameterAct.triggered.connect( - self.__introduceParameter) + self.__introduceParameter + ) self.actions.append(self.refactoringIntroduceParameterAct) - + ##################################################### ## Import refactorings actions ##################################################### - + self.refactoringImportsOrganizeAct = EricAction( - self.tr('Organize Imports'), - self.tr('&Organize Imports'), - 0, 0, - self, 'refactoring_organize_imports') - self.refactoringImportsOrganizeAct.setStatusTip(self.tr( - 'Sort imports according to PEP-8')) - self.refactoringImportsOrganizeAct.setWhatsThis(self.tr( - """<b>Organize Imports</b>""" - """<p>Sort imports according to PEP-8.</p>""" - )) - self.refactoringImportsOrganizeAct.triggered.connect( - self.__importsOrganize) + self.tr("Organize Imports"), + self.tr("&Organize Imports"), + 0, + 0, + self, + "refactoring_organize_imports", + ) + self.refactoringImportsOrganizeAct.setStatusTip( + self.tr("Sort imports according to PEP-8") + ) + self.refactoringImportsOrganizeAct.setWhatsThis( + self.tr( + """<b>Organize Imports</b>""" + """<p>Sort imports according to PEP-8.</p>""" + ) + ) + self.refactoringImportsOrganizeAct.triggered.connect(self.__importsOrganize) self.actions.append(self.refactoringImportsOrganizeAct) - + self.refactoringImportsStarExpandAct = EricAction( - self.tr('Expand Star Imports'), - self.tr('E&xpand Star Imports'), - 0, 0, - self, 'refactoring_expand_star_imports') - self.refactoringImportsStarExpandAct.setStatusTip(self.tr( - 'Expand imports like "from xxx import *"')) - self.refactoringImportsStarExpandAct.setWhatsThis(self.tr( - """<b>Expand Star Imports</b>""" - """<p>Expand imports like "from xxx import *".</p>""" - """<p>Select the import to act on or none to do all.""" - """ Unused imports are deleted.</p>""" - )) - self.refactoringImportsStarExpandAct.triggered.connect( - self.__importsExpandStar) + self.tr("Expand Star Imports"), + self.tr("E&xpand Star Imports"), + 0, + 0, + self, + "refactoring_expand_star_imports", + ) + self.refactoringImportsStarExpandAct.setStatusTip( + self.tr('Expand imports like "from xxx import *"') + ) + self.refactoringImportsStarExpandAct.setWhatsThis( + self.tr( + """<b>Expand Star Imports</b>""" + """<p>Expand imports like "from xxx import *".</p>""" + """<p>Select the import to act on or none to do all.""" + """ Unused imports are deleted.</p>""" + ) + ) + self.refactoringImportsStarExpandAct.triggered.connect(self.__importsExpandStar) self.actions.append(self.refactoringImportsStarExpandAct) - + self.refactoringImportsRelativeToAbsoluteAct = EricAction( - self.tr('Relative to Absolute'), - self.tr('Relative to &Absolute'), - 0, 0, - self, 'refactoring_relative_to_absolute_imports') - self.refactoringImportsRelativeToAbsoluteAct.setStatusTip(self.tr( - 'Transform relative imports to absolute ones')) - self.refactoringImportsRelativeToAbsoluteAct.setWhatsThis(self.tr( - """<b>Relative to Absolute</b>""" - """<p>Transform relative imports to absolute ones.</p>""" - """<p>Select the import to act on or none to do all.""" - """ Unused imports are deleted.</p>""" - )) + self.tr("Relative to Absolute"), + self.tr("Relative to &Absolute"), + 0, + 0, + self, + "refactoring_relative_to_absolute_imports", + ) + self.refactoringImportsRelativeToAbsoluteAct.setStatusTip( + self.tr("Transform relative imports to absolute ones") + ) + self.refactoringImportsRelativeToAbsoluteAct.setWhatsThis( + self.tr( + """<b>Relative to Absolute</b>""" + """<p>Transform relative imports to absolute ones.</p>""" + """<p>Select the import to act on or none to do all.""" + """ Unused imports are deleted.</p>""" + ) + ) self.refactoringImportsRelativeToAbsoluteAct.triggered.connect( - self.__importsRelativeToAbsolute) + self.__importsRelativeToAbsolute + ) self.actions.append(self.refactoringImportsRelativeToAbsoluteAct) - + self.refactoringImportsFromsToImportsAct = EricAction( - self.tr('Froms to Imports'), - self.tr('Froms to &Imports'), - 0, 0, - self, 'refactoring_froms_to_imports') - self.refactoringImportsFromsToImportsAct.setStatusTip(self.tr( - 'Transform From imports to plain imports')) - self.refactoringImportsFromsToImportsAct.setWhatsThis(self.tr( - """<b>Froms to Imports</b>""" - """<p>Transform From imports to plain imports.</p>""" - """<p>Select the import to act on or none to do all.""" - """ Unused imports are deleted.</p>""" - )) + self.tr("Froms to Imports"), + self.tr("Froms to &Imports"), + 0, + 0, + self, + "refactoring_froms_to_imports", + ) + self.refactoringImportsFromsToImportsAct.setStatusTip( + self.tr("Transform From imports to plain imports") + ) + self.refactoringImportsFromsToImportsAct.setWhatsThis( + self.tr( + """<b>Froms to Imports</b>""" + """<p>Transform From imports to plain imports.</p>""" + """<p>Select the import to act on or none to do all.""" + """ Unused imports are deleted.</p>""" + ) + ) self.refactoringImportsFromsToImportsAct.triggered.connect( - self.__importsFromToImport) + self.__importsFromToImport + ) self.actions.append(self.refactoringImportsFromsToImportsAct) - + self.refactoringImportsHandleLongAct = EricAction( - self.tr('Handle Long Imports'), - self.tr('Handle &Long Imports'), - 0, 0, - self, 'refactoring_organize_imports') - self.refactoringImportsHandleLongAct.setStatusTip(self.tr( - 'Transform long import statements to look better')) - self.refactoringImportsHandleLongAct.setWhatsThis(self.tr( - """<b>Handle Long Imports</b>""" - """<p>Transform long import statements to look better.</p>""" - """<p>Select the import to act on or none to do all.""" - """ Unused imports are deleted.</p>""" - )) - self.refactoringImportsHandleLongAct.triggered.connect( - self.__importsHandleLong) + self.tr("Handle Long Imports"), + self.tr("Handle &Long Imports"), + 0, + 0, + self, + "refactoring_organize_imports", + ) + self.refactoringImportsHandleLongAct.setStatusTip( + self.tr("Transform long import statements to look better") + ) + self.refactoringImportsHandleLongAct.setWhatsThis( + self.tr( + """<b>Handle Long Imports</b>""" + """<p>Transform long import statements to look better.</p>""" + """<p>Select the import to act on or none to do all.""" + """ Unused imports are deleted.</p>""" + ) + ) + self.refactoringImportsHandleLongAct.triggered.connect(self.__importsHandleLong) self.actions.append(self.refactoringImportsHandleLongAct) - + ##################################################### ## Various refactorings actions ##################################################### - + self.refactoringRestructureAct = EricAction( - self.tr('Restructure'), - self.tr('Res&tructure'), - 0, 0, - self, 'refactoring_restructure') - self.refactoringRestructureAct.setStatusTip(self.tr( - 'Restructure code')) - self.refactoringRestructureAct.setWhatsThis(self.tr( - """<b>Restructure</b>""" - """<p>Restructure code. See "Rope Help" for examples.</p>""" - )) - self.refactoringRestructureAct.triggered.connect( - self.__restructure) + self.tr("Restructure"), + self.tr("Res&tructure"), + 0, + 0, + self, + "refactoring_restructure", + ) + self.refactoringRestructureAct.setStatusTip(self.tr("Restructure code")) + self.refactoringRestructureAct.setWhatsThis( + self.tr( + """<b>Restructure</b>""" + """<p>Restructure code. See "Rope Help" for examples.</p>""" + ) + ) + self.refactoringRestructureAct.triggered.connect(self.__restructure) self.actions.append(self.refactoringRestructureAct) - + self.refactoringChangeSignatureAct = EricAction( - self.tr('Change Method Signature'), - self.tr('&Change Method Signature'), - 0, 0, - self, 'refactoring_change_method_signature') - self.refactoringChangeSignatureAct.setStatusTip(self.tr( - 'Change the signature of the selected method or function')) - self.refactoringChangeSignatureAct.setWhatsThis(self.tr( - """<b>Change Method Signature</b>""" - """<p>Change the signature of the selected method""" - """ or function.</p>""" - )) - self.refactoringChangeSignatureAct.triggered.connect( - self.__changeSignature) + self.tr("Change Method Signature"), + self.tr("&Change Method Signature"), + 0, + 0, + self, + "refactoring_change_method_signature", + ) + self.refactoringChangeSignatureAct.setStatusTip( + self.tr("Change the signature of the selected method or function") + ) + self.refactoringChangeSignatureAct.setWhatsThis( + self.tr( + """<b>Change Method Signature</b>""" + """<p>Change the signature of the selected method""" + """ or function.</p>""" + ) + ) + self.refactoringChangeSignatureAct.triggered.connect(self.__changeSignature) self.actions.append(self.refactoringChangeSignatureAct) - + self.refactoringInlineArgumentDefaultAct = EricAction( - self.tr('Inline Argument Default'), - self.tr('Inline &Argument Default'), - 0, 0, - self, 'refactoring_inline_argument_default') - self.refactoringInlineArgumentDefaultAct.setStatusTip(self.tr( - 'Inline a parameters default value')) - self.refactoringInlineArgumentDefaultAct.setWhatsThis(self.tr( - """<b>Inline Argument Default</b>""" - """<p>Inline a parameters default value.</p>""" - )) + self.tr("Inline Argument Default"), + self.tr("Inline &Argument Default"), + 0, + 0, + self, + "refactoring_inline_argument_default", + ) + self.refactoringInlineArgumentDefaultAct.setStatusTip( + self.tr("Inline a parameters default value") + ) + self.refactoringInlineArgumentDefaultAct.setWhatsThis( + self.tr( + """<b>Inline Argument Default</b>""" + """<p>Inline a parameters default value.</p>""" + ) + ) self.refactoringInlineArgumentDefaultAct.triggered.connect( - self.__inlineArgumentDefault) + self.__inlineArgumentDefault + ) self.actions.append(self.refactoringInlineArgumentDefaultAct) - + self.refactoringTransformModuleAct = EricAction( - self.tr('Transform Module to Package'), - self.tr('Transform Module to Package'), - 0, 0, - self, 'refactoring_transform_module_to_package') - self.refactoringTransformModuleAct.setStatusTip(self.tr( - 'Transform the current module to a package')) - self.refactoringTransformModuleAct.setWhatsThis(self.tr( - """<b>Transform Module to Package</b>""" - """<p>Transform the current module to a package.</p>""" - )) + self.tr("Transform Module to Package"), + self.tr("Transform Module to Package"), + 0, + 0, + self, + "refactoring_transform_module_to_package", + ) + self.refactoringTransformModuleAct.setStatusTip( + self.tr("Transform the current module to a package") + ) + self.refactoringTransformModuleAct.setWhatsThis( + self.tr( + """<b>Transform Module to Package</b>""" + """<p>Transform the current module to a package.</p>""" + ) + ) self.refactoringTransformModuleAct.triggered.connect( - self.__transformModuleToPackage) + self.__transformModuleToPackage + ) self.actions.append(self.refactoringTransformModuleAct) - + self.refactoringEncapsulateAttributeAct = EricAction( - self.tr('Encapsulate Attribute'), - self.tr('Encap&sulate Attribute'), - 0, 0, - self, 'refactoring_encapsulate_attribute') - self.refactoringEncapsulateAttributeAct.setStatusTip(self.tr( - 'Generate a getter/setter for an attribute')) - self.refactoringEncapsulateAttributeAct.setWhatsThis(self.tr( - """<b>Encapsulate Attribute</b>""" - """<p>Generate a getter/setter for an attribute and changes""" - """ its occurrences to use them.</p>""" - )) + self.tr("Encapsulate Attribute"), + self.tr("Encap&sulate Attribute"), + 0, + 0, + self, + "refactoring_encapsulate_attribute", + ) + self.refactoringEncapsulateAttributeAct.setStatusTip( + self.tr("Generate a getter/setter for an attribute") + ) + self.refactoringEncapsulateAttributeAct.setWhatsThis( + self.tr( + """<b>Encapsulate Attribute</b>""" + """<p>Generate a getter/setter for an attribute and changes""" + """ its occurrences to use them.</p>""" + ) + ) self.refactoringEncapsulateAttributeAct.triggered.connect( - self.__encapsulateAttribute) + self.__encapsulateAttribute + ) self.actions.append(self.refactoringEncapsulateAttributeAct) - + self.refactoringLocalVariableToAttributeAct = EricAction( - self.tr('Local Variable to Attribute'), - self.tr('Local Varia&ble to Attribute'), - 0, 0, - self, 'refactoring_local_variable_to_attribute') - self.refactoringLocalVariableToAttributeAct.setStatusTip(self.tr( - 'Change a local variable to an attribute')) - self.refactoringLocalVariableToAttributeAct.setWhatsThis(self.tr( - """<b>Local Variable to Attribute</b>""" - """<p>Change a local variable to an attribute.</p>""" - )) + self.tr("Local Variable to Attribute"), + self.tr("Local Varia&ble to Attribute"), + 0, + 0, + self, + "refactoring_local_variable_to_attribute", + ) + self.refactoringLocalVariableToAttributeAct.setStatusTip( + self.tr("Change a local variable to an attribute") + ) + self.refactoringLocalVariableToAttributeAct.setWhatsThis( + self.tr( + """<b>Local Variable to Attribute</b>""" + """<p>Change a local variable to an attribute.</p>""" + ) + ) self.refactoringLocalVariableToAttributeAct.triggered.connect( - self.__convertLocalToAttribute) + self.__convertLocalToAttribute + ) self.actions.append(self.refactoringLocalVariableToAttributeAct) - + self.refactoringMethodToMethodObjectAct = EricAction( - self.tr('Method To Method Object'), - self.tr('Method To Method Ob&ject'), - 0, 0, - self, 'refactoring_method_to_methodobject') - self.refactoringMethodToMethodObjectAct.setStatusTip(self.tr( - 'Transform a function or a method to a method object')) - self.refactoringMethodToMethodObjectAct.setWhatsThis(self.tr( - """<b>Method To Method Object</b>""" - """<p>Transform a function or a method to a method object.</p>""" - )) + self.tr("Method To Method Object"), + self.tr("Method To Method Ob&ject"), + 0, + 0, + self, + "refactoring_method_to_methodobject", + ) + self.refactoringMethodToMethodObjectAct.setStatusTip( + self.tr("Transform a function or a method to a method object") + ) + self.refactoringMethodToMethodObjectAct.setWhatsThis( + self.tr( + """<b>Method To Method Object</b>""" + """<p>Transform a function or a method to a method object.</p>""" + ) + ) self.refactoringMethodToMethodObjectAct.triggered.connect( - self.__methodToMethodObject) + self.__methodToMethodObject + ) self.actions.append(self.refactoringMethodToMethodObjectAct) - + ##################################################### ## History actions ##################################################### - + self.refactoringProjectHistoryAct = EricAction( - self.tr('Show Project History'), - self.tr('Show Project History...'), - 0, 0, - self, 'refactoring_show_project_history') - self.refactoringProjectHistoryAct.setStatusTip(self.tr( - 'Show the refactoring history of the project')) - self.refactoringProjectHistoryAct.setWhatsThis(self.tr( - """<b>Show Project History</b>""" - """<p>This opens a dialog to show the refactoring history of""" - """ the project.</p>""" - )) - self.refactoringProjectHistoryAct.triggered.connect( - self.__showProjectHistory) + self.tr("Show Project History"), + self.tr("Show Project History..."), + 0, + 0, + self, + "refactoring_show_project_history", + ) + self.refactoringProjectHistoryAct.setStatusTip( + self.tr("Show the refactoring history of the project") + ) + self.refactoringProjectHistoryAct.setWhatsThis( + self.tr( + """<b>Show Project History</b>""" + """<p>This opens a dialog to show the refactoring history of""" + """ the project.</p>""" + ) + ) + self.refactoringProjectHistoryAct.triggered.connect(self.__showProjectHistory) self.actions.append(self.refactoringProjectHistoryAct) - + self.refactoringFileHistoryAct = EricAction( - self.tr('Show Current File History'), - self.tr('Show Current File History...'), - 0, 0, - self, 'refactoring_show_file_history') - self.refactoringFileHistoryAct.setStatusTip(self.tr( - 'Show the refactoring history of the current file')) - self.refactoringFileHistoryAct.setWhatsThis(self.tr( - """<b>Show Current File History</b>""" - """<p>This opens a dialog to show the refactoring history of""" - """ the current file.</p>""" - )) - self.refactoringFileHistoryAct.triggered.connect( - self.__showFileHistory) + self.tr("Show Current File History"), + self.tr("Show Current File History..."), + 0, + 0, + self, + "refactoring_show_file_history", + ) + self.refactoringFileHistoryAct.setStatusTip( + self.tr("Show the refactoring history of the current file") + ) + self.refactoringFileHistoryAct.setWhatsThis( + self.tr( + """<b>Show Current File History</b>""" + """<p>This opens a dialog to show the refactoring history of""" + """ the current file.</p>""" + ) + ) + self.refactoringFileHistoryAct.triggered.connect(self.__showFileHistory) self.actions.append(self.refactoringFileHistoryAct) - + self.refactoringClearHistoryAct = EricAction( - self.tr('Clear History'), - self.tr('Clear History'), - 0, 0, - self, 'refactoring_clear_history') - self.refactoringClearHistoryAct.setStatusTip(self.tr( - 'Clear the refactoring history')) - self.refactoringClearHistoryAct.setWhatsThis(self.tr( - """<b>Clear History</b>""" - """<p>Clears the refactoring history.</p>""" - )) - self.refactoringClearHistoryAct.triggered.connect( - self.__clearHistory) + self.tr("Clear History"), + self.tr("Clear History"), + 0, + 0, + self, + "refactoring_clear_history", + ) + self.refactoringClearHistoryAct.setStatusTip( + self.tr("Clear the refactoring history") + ) + self.refactoringClearHistoryAct.setWhatsThis( + self.tr( + """<b>Clear History</b>""" """<p>Clears the refactoring history.</p>""" + ) + ) + self.refactoringClearHistoryAct.triggered.connect(self.__clearHistory) self.actions.append(self.refactoringClearHistoryAct) - + ##################################################### ## Query actions ##################################################### - + self.queryReferencesAct = EricAction( - self.tr('Find occurrences'), - self.tr('Find &Occurrences'), - 0, 0, - self, 'refactoring_find_occurrences') - self.queryReferencesAct.setStatusTip(self.tr( - 'Find occurrences of the highlighted object')) - self.queryReferencesAct.setWhatsThis(self.tr( - """<b>Find occurrences</b>""" - """<p>Find occurrences of the highlighted class, method,""" - """ function or variable.</p>""" - )) - self.queryReferencesAct.triggered.connect( - self.__queryReferences) + self.tr("Find occurrences"), + self.tr("Find &Occurrences"), + 0, + 0, + self, + "refactoring_find_occurrences", + ) + self.queryReferencesAct.setStatusTip( + self.tr("Find occurrences of the highlighted object") + ) + self.queryReferencesAct.setWhatsThis( + self.tr( + """<b>Find occurrences</b>""" + """<p>Find occurrences of the highlighted class, method,""" + """ function or variable.</p>""" + ) + ) + self.queryReferencesAct.triggered.connect(self.__queryReferences) self.actions.append(self.queryReferencesAct) - + self.queryDefinitionAct = EricAction( - self.tr('Find definition'), - self.tr('Find &Definition'), - 0, 0, - self, 'refactoring_find_definition') - self.queryDefinitionAct.setStatusTip(self.tr( - 'Find definition of the highlighted item')) - self.queryDefinitionAct.setWhatsThis(self.tr( - """<b>Find definition</b>""" - """<p>Find the definition of the highlighted class, method,""" - """ function or variable.</p>""" - )) - self.queryDefinitionAct.triggered.connect( - self.__queryDefinition) + self.tr("Find definition"), + self.tr("Find &Definition"), + 0, + 0, + self, + "refactoring_find_definition", + ) + self.queryDefinitionAct.setStatusTip( + self.tr("Find definition of the highlighted item") + ) + self.queryDefinitionAct.setWhatsThis( + self.tr( + """<b>Find definition</b>""" + """<p>Find the definition of the highlighted class, method,""" + """ function or variable.</p>""" + ) + ) + self.queryDefinitionAct.triggered.connect(self.__queryDefinition) self.actions.append(self.queryDefinitionAct) - + self.queryImplementationsAct = EricAction( - self.tr('Find implementations'), - self.tr('Find &Implementations'), - 0, 0, - self, 'refactoring_find_implementations') - self.queryImplementationsAct.setStatusTip(self.tr( - 'Find places where the selected method is overridden')) - self.queryImplementationsAct.setWhatsThis(self.tr( - """<b>Find implementations</b>""" - """<p>Find places where the selected method is overridden.</p>""" - )) - self.queryImplementationsAct.triggered.connect( - self.__queryImplementations) + self.tr("Find implementations"), + self.tr("Find &Implementations"), + 0, + 0, + self, + "refactoring_find_implementations", + ) + self.queryImplementationsAct.setStatusTip( + self.tr("Find places where the selected method is overridden") + ) + self.queryImplementationsAct.setWhatsThis( + self.tr( + """<b>Find implementations</b>""" + """<p>Find places where the selected method is overridden.</p>""" + ) + ) + self.queryImplementationsAct.triggered.connect(self.__queryImplementations) self.actions.append(self.queryImplementationsAct) - + ##################################################### ## Various actions ##################################################### - + self.refactoringEditConfigAct = EricAction( - self.tr('Configure Rope'), - self.tr('&Configure Rope'), - 0, 0, - self, 'refactoring_edit_config') - self.refactoringEditConfigAct.setStatusTip(self.tr( - 'Open the rope configuration file')) - self.refactoringEditConfigAct.setWhatsThis(self.tr( - """<b>Configure Rope</b>""" - """<p>Opens the rope configuration file in an editor.</p>""" - )) - self.refactoringEditConfigAct.triggered.connect( - self.__editConfig) + self.tr("Configure Rope"), + self.tr("&Configure Rope"), + 0, + 0, + self, + "refactoring_edit_config", + ) + self.refactoringEditConfigAct.setStatusTip( + self.tr("Open the rope configuration file") + ) + self.refactoringEditConfigAct.setWhatsThis( + self.tr( + """<b>Configure Rope</b>""" + """<p>Opens the rope configuration file in an editor.</p>""" + ) + ) + self.refactoringEditConfigAct.triggered.connect(self.__editConfig) self.refactoringEditConfigAct.setMenuRole(QAction.MenuRole.NoRole) self.actions.append(self.refactoringEditConfigAct) - + self.refactoringHelpAct = EricAction( - self.tr('Rope Help'), - self.tr('Rope &Help'), - 0, 0, - self, 'refactoring_help') - self.refactoringHelpAct.setStatusTip(self.tr( - 'Show help about the rope refactorings')) - self.refactoringHelpAct.setWhatsThis(self.tr( - """<b>Rope help</b>""" - """<p>Show some help text about the rope refactorings.</p>""" - )) - self.refactoringHelpAct.triggered.connect( - self.__showRopeHelp) + self.tr("Rope Help"), self.tr("Rope &Help"), 0, 0, self, "refactoring_help" + ) + self.refactoringHelpAct.setStatusTip( + self.tr("Show help about the rope refactorings") + ) + self.refactoringHelpAct.setWhatsThis( + self.tr( + """<b>Rope help</b>""" + """<p>Show some help text about the rope refactorings.</p>""" + ) + ) + self.refactoringHelpAct.triggered.connect(self.__showRopeHelp) self.actions.append(self.refactoringHelpAct) - + self.refactoringAllSoaAct = EricAction( - self.tr('Analyse all modules'), - self.tr('&Analyse all modules'), - 0, 0, - self, 'refactoring_analyze_all') - self.refactoringAllSoaAct.setStatusTip(self.tr( - 'Perform static object analysis on all modules')) - self.refactoringAllSoaAct.setWhatsThis(self.tr( - """<b>Analyse all modules</b>""" - """<p>Perform static object analysis (SOA) on all modules. """ - """This might be time consuming. Analysis of all modules """ - """should only be neccessary, if the project was created """ - """with the rope plugin disabled or if files were added.</p>""" - )) - self.refactoringAllSoaAct.triggered.connect( - self.__performSOA) + self.tr("Analyse all modules"), + self.tr("&Analyse all modules"), + 0, + 0, + self, + "refactoring_analyze_all", + ) + self.refactoringAllSoaAct.setStatusTip( + self.tr("Perform static object analysis on all modules") + ) + self.refactoringAllSoaAct.setWhatsThis( + self.tr( + """<b>Analyse all modules</b>""" + """<p>Perform static object analysis (SOA) on all modules. """ + """This might be time consuming. Analysis of all modules """ + """should only be neccessary, if the project was created """ + """with the rope plugin disabled or if files were added.</p>""" + ) + ) + self.refactoringAllSoaAct.triggered.connect(self.__performSOA) self.actions.append(self.refactoringAllSoaAct) - + self.updateConfigAct = EricAction( - self.tr('Update Configuration'), - self.tr('&Update Configuration'), - 0, 0, - self, 'refactoring_update_configuration') - self.updateConfigAct.setStatusTip(self.tr( - 'Generates a new configuration file overwriting the current one.')) - self.updateConfigAct.setWhatsThis(self.tr( - """<b>Update Configuration</b>""" - """<p>Generates a new configuration file overwriting""" - """ the current one.</p>""" - )) - self.updateConfigAct.triggered.connect( - self.__updateConfig) + self.tr("Update Configuration"), + self.tr("&Update Configuration"), + 0, + 0, + self, + "refactoring_update_configuration", + ) + self.updateConfigAct.setStatusTip( + self.tr("Generates a new configuration file overwriting the current one.") + ) + self.updateConfigAct.setWhatsThis( + self.tr( + """<b>Update Configuration</b>""" + """<p>Generates a new configuration file overwriting""" + """ the current one.</p>""" + ) + ) + self.updateConfigAct.triggered.connect(self.__updateConfig) self.actions.append(self.updateConfigAct) - + for act in self.actions: act.setEnabled(False) - + def __initMenu(self): """ Private slot to initialize the refactoring menu. - + @return the menu generated @rtype QMenu """ - menu = QMenu(self.tr('&Refactoring'), self.__ui) + menu = QMenu(self.tr("&Refactoring"), self.__ui) menu.setTearOffEnabled(True) - - act = menu.addAction('rope', self.__ropeInfo) + + act = menu.addAction("rope", self.__ropeInfo) font = act.font() font.setBold(True) act.setFont(font) menu.addSeparator() - + smenu = menu.addMenu(self.tr("&Query")) smenu.addAction(self.queryReferencesAct) smenu.addAction(self.queryDefinitionAct) smenu.addAction(self.queryImplementationsAct) - + smenu = menu.addMenu(self.tr("&Refactoring")) smenu.addAction(self.refactoringRenameAct) smenu.addAction(self.refactoringRenameLocalAct) @@ -798,38 +965,38 @@ smenu.addAction(self.refactoringMoveModuleAct) smenu.addAction(self.refactoringTransformModuleAct) smenu.addSeparator() - + imenu = smenu.addMenu(self.tr("Im&ports")) imenu.addAction(self.refactoringImportsOrganizeAct) imenu.addAction(self.refactoringImportsStarExpandAct) imenu.addAction(self.refactoringImportsRelativeToAbsoluteAct) imenu.addAction(self.refactoringImportsFromsToImportsAct) imenu.addAction(self.refactoringImportsHandleLongAct) - + smenu.addSeparator() - + hmenu = smenu.addMenu(self.tr("History")) hmenu.aboutToShow.connect(self.__showRefactoringHistoryMenu) hmenu.addAction(self.refactoringProjectHistoryAct) hmenu.addAction(self.refactoringFileHistoryAct) hmenu.addSeparator() hmenu.addAction(self.refactoringClearHistoryAct) - + smenu = menu.addMenu(self.tr("&Utilities")) smenu.addAction(self.refactoringAllSoaAct) smenu.addSeparator() smenu.addAction(self.updateConfigAct) - + menu.addSeparator() menu.addAction(self.refactoringEditConfigAct) menu.addAction(self.refactoringHelpAct) - + return menu ################################################################## ## slots below implement general functionality ################################################################## - + def __ropeInfo(self): """ Private slot to show some info about rope. @@ -838,24 +1005,28 @@ EricMessageBox.about( self.__ui, self.tr("About rope"), - self.tr("{0}\nVersion {1}\n\n{2}".format( - self.__ropeConfig["RopeInfo"], - self.__ropeConfig["RopeVersion"], - self.__ropeConfig["RopeCopyright"]))) - + self.tr( + "{0}\nVersion {1}\n\n{2}".format( + self.__ropeConfig["RopeInfo"], + self.__ropeConfig["RopeVersion"], + self.__ropeConfig["RopeCopyright"], + ) + ), + ) + def __showRefactoringHistoryMenu(self): """ Private slot called before the refactoring history menu is shown. """ aw = self.__vm.activeWindow() enable = aw is not None and bool(aw.getFileName()) - + self.refactoringFileHistoryAct.setEnabled(enable) - + def handleRopeError(self, result): """ Public method to handle a rope error. - + @param result dictionary containing the error information @type dict @return flag indicating, that the error is to be ignored @@ -863,40 +1034,44 @@ """ if "Error" not in result: return True - + title = result.get("Title", self.tr("Rope Error")) - - if result["Error"] == 'ModuleSyntaxError': + + if result["Error"] == "ModuleSyntaxError": res = EricMessageBox.warning( - self.__ui, title, - self.tr("Rope error: {0}").format( - result["ErrorString"]), - EricMessageBox.Ok | EricMessageBox.Open) + self.__ui, + title, + self.tr("Rope error: {0}").format(result["ErrorString"]), + EricMessageBox.Ok | EricMessageBox.Open, + ) if res == EricMessageBox.Open: self.__vm.openSourceFile( - os.path.join(self.__ericProject.getProjectPath(), - result["ErrorFile"]), - result["ErrorLine"]) + os.path.join( + self.__ericProject.getProjectPath(), result["ErrorFile"] + ), + result["ErrorLine"], + ) elif result["Error"] == "InterruptedTaskError": return True else: from .ErrorDialog import ErrorDialog + ErrorDialog( title, self.tr("Rope error: {0}").format(result["ErrorString"]), traceback=result["Traceback"], - parent=self.__ui + parent=self.__ui, ).exec() - + return False - + def __getOffset(self, editor, line, index): r""" Private method to get the offset into the text treating CRLF as ONE character. - + Note: rope seems to convert all EOL styles to just \n. - + @param editor reference to the editor @type Editor @param line line for the offset @@ -915,59 +1090,57 @@ ################################################################## ## slots below implement the various refactorings ################################################################## - + def __processChanges(self, result): """ Private method to process the changes data sent by the refactoring client. - + @param result dictionary containing the changes data @type dict """ if self.handleRopeError(result): changeGroup = result["ChangeGroup"] with contextlib.suppress(KeyError): - self.__refactoringDialogs[changeGroup].processChangeData( - result) - + self.__refactoringDialogs[changeGroup].processChangeData(result) + def __refactoringDialogClosed(self, changeGroup): """ Private slot handling the closing of a refactoring dialog. - + @param changeGroup name of the refactoring change group the dialog belonged to @type str """ with contextlib.suppress(KeyError): del self.__refactoringDialogs[changeGroup] - + ##################################################### ## Rename refactorings ##################################################### - + def __rename(self): """ Private slot to handle the Rename action. """ - self.__doRename(self.tr('Rename')) - + self.__doRename(self.tr("Rename")) + def __renameLocal(self): """ Private slot to handle the Local Rename action. """ - self.__doRename(self.tr('Local Rename'), isLocal=True) - + self.__doRename(self.tr("Local Rename"), isLocal=True) + def __renameModule(self): """ Private slot to handle the Rename Current Module action. """ - self.__doRename(self.tr('Rename Current Module'), - renameModule=True) - + self.__doRename(self.tr("Rename Current Module"), renameModule=True) + def __doRename(self, title, isLocal=False, renameModule=False): """ Private method to perform the various renaming refactorings. - + @param title title of the refactoring @type str @param isLocal flag indicating to restrict refactoring to @@ -977,25 +1150,28 @@ @type bool """ aw = self.__vm.activeWindow() - + if aw is None: return - + if not renameModule and not aw.hasSelectedText(): # no selection available EricMessageBox.warning( - self.__ui, title, - self.tr("Highlight the declaration you want to rename" - " and try again.")) + self.__ui, + title, + self.tr( + "Highlight the declaration you want to rename" " and try again." + ), + ) return - + if isLocal: if not self.confirmBufferIsSaved(aw): return else: if not self.confirmAllBuffersSaved(): return - + filename = aw.getFileName() if renameModule: offset = None @@ -1007,644 +1183,682 @@ if line != line1: # selection span more than one line EricMessageBox.warning( - self.__ui, title, - self.tr("The selection must not extend beyond" - " one line.")) + self.__ui, + title, + self.tr("The selection must not extend beyond" " one line."), + ) return index = int(index + (index1 - index) / 2) # keep it inside the object offset = self.__getOffset(aw, line, index) selectedText = aw.selectedText() - + from .RenameDialog import RenameDialog - dlg = RenameDialog(self, title, filename, offset, isLocal, - selectedText=selectedText, parent=self.__ui) + + dlg = RenameDialog( + self, + title, + filename, + offset, + isLocal, + selectedText=selectedText, + parent=self.__ui, + ) changeGroup = dlg.getChangeGroupName() self.__refactoringDialogs[changeGroup] = dlg - dlg.finished.connect( - lambda: self.__refactoringDialogClosed(changeGroup)) + dlg.finished.connect(lambda: self.__refactoringDialogClosed(changeGroup)) dlg.show() - + def __changeOccurrences(self): """ Private slot to perform the Change Occurrences refactoring. """ aw = self.__vm.activeWindow() - + if aw is None: return - + title = self.tr("Change Occurrences") if not aw.hasSelectedText(): # no selection available EricMessageBox.warning( - self.__ui, title, - self.tr("Highlight an occurrence to be changed" - " and try again.")) + self.__ui, + title, + self.tr("Highlight an occurrence to be changed" " and try again."), + ) return - + if not self.confirmBufferIsSaved(aw): return - + filename = aw.getFileName() line, index, line1, index1 = aw.getSelection() offset = self.__getOffset(aw, line, index) - + from .ChangeOccurrencesDialog import ChangeOccurrencesDialog - dlg = ChangeOccurrencesDialog(self, title, filename, offset, - parent=self.__ui) + + dlg = ChangeOccurrencesDialog(self, title, filename, offset, parent=self.__ui) changeGroup = dlg.getChangeGroupName() self.__refactoringDialogs[changeGroup] = dlg - dlg.finished.connect( - lambda: self.__refactoringDialogClosed(changeGroup)) + dlg.finished.connect(lambda: self.__refactoringDialogClosed(changeGroup)) dlg.show() - + ##################################################### ## Extract refactorings ##################################################### - + def __extractMethod(self): """ Private slot to handle the Extract Method action. """ self.__doExtract(self.tr("Extract Method"), "method") - + def __extractLocalVariable(self): """ Private slot to handle the Extract Local Variable action. """ self.__doExtract(self.tr("Extract Local Variable"), "variable") - + def __doExtract(self, title, kind): """ Private method to perform the extract refactoring. - + @param title title of the refactoring @type str @param kind kind of extraction to be done @type str ("method" or "variable") """ aw = self.__vm.activeWindow() - + if aw is None: return - + if not aw.hasSelectedText(): # no selection available EricMessageBox.warning( - self.__ui, title, - self.tr("Highlight the region of code you want to extract" - " and try again.")) + self.__ui, + title, + self.tr( + "Highlight the region of code you want to extract" " and try again." + ), + ) return - + if not self.confirmBufferIsSaved(aw): return - + filename = aw.getFileName() startline, startcolumn, endline, endcolumn = aw.getSelection() startOffset = self.__getOffset(aw, startline, startcolumn) endOffset = self.__getOffset(aw, endline, endcolumn) - + from .ExtractDialog import ExtractDialog - dlg = ExtractDialog(self, title, filename, startOffset, endOffset, - kind, parent=self.__ui) + + dlg = ExtractDialog( + self, title, filename, startOffset, endOffset, kind, parent=self.__ui + ) changeGroup = dlg.getChangeGroupName() self.__refactoringDialogs[changeGroup] = dlg - dlg.finished.connect( - lambda: self.__refactoringDialogClosed(changeGroup)) + dlg.finished.connect(lambda: self.__refactoringDialogClosed(changeGroup)) dlg.show() - + ##################################################### ## Inline refactorings ##################################################### - + def __inline(self): """ Private slot to handle the Inline Local Variable action. """ aw = self.__vm.activeWindow() - + if aw is None: return - + title = self.tr("Inline") if not aw.hasSelectedText(): # no selection available EricMessageBox.warning( - self.__ui, title, - self.tr("Highlight the local variable, method or parameter" - " you want to inline and try again.")) + self.__ui, + title, + self.tr( + "Highlight the local variable, method or parameter" + " you want to inline and try again." + ), + ) return - + if not self.confirmAllBuffersSaved(): return - + filename = aw.getFileName() line, index, line1, index1 = aw.getSelection() offset = self.__getOffset(aw, line, index) - + from .InlineDialog import InlineDialog + dlg = InlineDialog(self, title, filename, offset, parent=self.__ui) changeGroup = dlg.getChangeGroupName() self.__refactoringDialogs[changeGroup] = dlg - dlg.finished.connect( - lambda: self.__refactoringDialogClosed(changeGroup)) + dlg.finished.connect(lambda: self.__refactoringDialogClosed(changeGroup)) dlg.show() - + ##################################################### ## Move refactorings ##################################################### - + def __move(self, moveKind): """ Private slot to handle the Move Method action. - + @param moveKind kind of move to be performed @type str (one of 'move_method' or 'move_module') """ aw = self.__vm.activeWindow() - + if aw is None: return - + if moveKind == "move_method": title = self.tr("Move Method") if not aw.hasSelectedText(): # no selection available EricMessageBox.warning( - self.__ui, title, - self.tr("Highlight the method to move" - " and try again.")) + self.__ui, + title, + self.tr("Highlight the method to move" " and try again."), + ) return else: title = self.tr("Move Current Module") - + if not self.confirmAllBuffersSaved(): return - + filename = aw.getFileName() if moveKind == "move_method": line, index, line1, index1 = aw.getSelection() offset = self.__getOffset(aw, line, index) else: offset = None - + from .MoveDialog import MoveDialog + dlg = MoveDialog(self, title, filename, offset, parent=self.__ui) changeGroup = dlg.getChangeGroupName() self.__refactoringDialogs[changeGroup] = dlg - dlg.finished.connect( - lambda: self.__refactoringDialogClosed(changeGroup)) + dlg.finished.connect(lambda: self.__refactoringDialogClosed(changeGroup)) dlg.show() - + ##################################################### ## Use function refactoring ##################################################### - + def __useFunction(self): """ Private slot to use a function wherever possible. """ aw = self.__vm.activeWindow() - + if aw is None: return - + title = self.tr("Use Function") if not aw.hasSelectedText(): # no selection available EricMessageBox.warning( - self.__ui, title, - self.tr("Highlight a global function and try again.")) + self.__ui, title, self.tr("Highlight a global function and try again.") + ) return - + if not self.confirmAllBuffersSaved(): return - + filename = aw.getFileName() line, index, line1, index1 = aw.getSelection() offset = self.__getOffset(aw, line, index) - + from .UseFunctionDialog import UseFunctionDialog - dlg = UseFunctionDialog(self, title, filename, offset, - parent=self.__ui) + + dlg = UseFunctionDialog(self, title, filename, offset, parent=self.__ui) changeGroup = dlg.getChangeGroupName() self.__refactoringDialogs[changeGroup] = dlg - dlg.finished.connect( - lambda: self.__refactoringDialogClosed(changeGroup)) + dlg.finished.connect(lambda: self.__refactoringDialogClosed(changeGroup)) dlg.show() - + ##################################################### ## Introduce refactorings ##################################################### - + def __introduceFactoryMethod(self): """ Private slot to introduce a factory method or global function. """ aw = self.__vm.activeWindow() - + if aw is None: return - + title = self.tr("Introduce Factory Method") if not aw.hasSelectedText(): # no selection available EricMessageBox.warning( - self.__ui, title, - self.tr("Highlight the class to introduce a factory" - " method for and try again.")) + self.__ui, + title, + self.tr( + "Highlight the class to introduce a factory" + " method for and try again." + ), + ) return - + if not self.confirmAllBuffersSaved(): return - + filename = aw.getFileName() line, index, line1, index1 = aw.getSelection() offset = self.__getOffset(aw, line, index) - + from .IntroduceFactoryDialog import IntroduceFactoryDialog - dlg = IntroduceFactoryDialog(self, title, filename, offset, - parent=self.__ui) + + dlg = IntroduceFactoryDialog(self, title, filename, offset, parent=self.__ui) changeGroup = dlg.getChangeGroupName() self.__refactoringDialogs[changeGroup] = dlg - dlg.finished.connect( - lambda: self.__refactoringDialogClosed(changeGroup)) + dlg.finished.connect(lambda: self.__refactoringDialogClosed(changeGroup)) dlg.show() - + def __introduceParameter(self): """ Private slot to introduce a parameter in a function. """ aw = self.__vm.activeWindow() - + if aw is None: return - + title = self.tr("Introduce Parameter") if not aw.hasSelectedText(): # no selection available EricMessageBox.warning( - self.__ui, title, - self.tr("Highlight the code for the new parameter" - " and try again.")) + self.__ui, + title, + self.tr("Highlight the code for the new parameter" " and try again."), + ) return - + if not self.confirmAllBuffersSaved(): return - + filename = aw.getFileName() line, index, line1, index1 = aw.getSelection() offset = self.__getOffset(aw, line, index) - + from .IntroduceParameterDialog import IntroduceParameterDialog - dlg = IntroduceParameterDialog(self, title, filename, offset, - parent=self.__ui) + + dlg = IntroduceParameterDialog(self, title, filename, offset, parent=self.__ui) changeGroup = dlg.getChangeGroupName() self.__refactoringDialogs[changeGroup] = dlg - dlg.finished.connect( - lambda: self.__refactoringDialogClosed(changeGroup)) + dlg.finished.connect(lambda: self.__refactoringDialogClosed(changeGroup)) dlg.show() - + ##################################################### ## Import refactorings ##################################################### - + def __importsOrganize(self): """ Private slot to organize imports. """ - self.__doImports( - self.tr("Organize Imports"), - "organize_imports") - + self.__doImports(self.tr("Organize Imports"), "organize_imports") + def __importsExpandStar(self): """ Private slot to expand star imports. """ - self.__doImports( - self.tr("Expand Star Imports"), - "expand_star_imports") - + self.__doImports(self.tr("Expand Star Imports"), "expand_star_imports") + def __importsRelativeToAbsolute(self): """ Private slot to transform relative to absolute imports. """ - self.__doImports( - self.tr("Relative to Absolute"), - "relatives_to_absolutes") - + self.__doImports(self.tr("Relative to Absolute"), "relatives_to_absolutes") + def __importsFromToImport(self): """ Private slot to transform from imports to plain imports. """ - self.__doImports( - self.tr("Froms to Imports"), - "froms_to_imports") - + self.__doImports(self.tr("Froms to Imports"), "froms_to_imports") + def __importsHandleLong(self): """ Private slot to handle long imports. """ - self.__doImports( - self.tr("Handle Long Imports"), - "handle_long_imports") - + self.__doImports(self.tr("Handle Long Imports"), "handle_long_imports") + def __doImports(self, title, methodName): """ Private method to perform the various imports refactorings. - + @param title title to be used for the import refactoring @type str @param methodName name of the method performing the import refactoring @type str """ aw = self.__vm.activeWindow() - + if aw is None: return - + if not self.confirmBufferIsSaved(aw): return - + filename = aw.getFileName() if aw.hasSelectedText(): line, index, line1, index1 = aw.getSelection() offset = self.__getOffset(aw, line, index) else: offset = None - + from .ConfirmationDialog import ConfirmationDialog + dlg = ConfirmationDialog( - self, title, "Imports", "CalculateImportsChanges", { + self, + title, + "Imports", + "CalculateImportsChanges", + { "MethodName": methodName, "FileName": filename, "Offset": offset, }, - parent=self.__ui) + parent=self.__ui, + ) changeGroup = dlg.getChangeGroupName() self.__refactoringDialogs[changeGroup] = dlg - dlg.finished.connect( - lambda: self.__refactoringDialogClosed(changeGroup)) + dlg.finished.connect(lambda: self.__refactoringDialogClosed(changeGroup)) dlg.show() - + ##################################################### ## Various refactorings ##################################################### - + def __restructure(self): """ Private slot to restructure code. """ from .RestructureDialog import RestructureDialog + title = self.tr("Restructure") dlg = RestructureDialog(self, title, parent=self.__ui) changeGroup = dlg.getChangeGroupName() self.__refactoringDialogs[changeGroup] = dlg - dlg.finished.connect( - lambda: self.__refactoringDialogClosed(changeGroup)) + dlg.finished.connect(lambda: self.__refactoringDialogClosed(changeGroup)) dlg.show() - + def __changeSignature(self): """ Private slot to change the signature of a method or function. """ aw = self.__vm.activeWindow() - + if aw is None: return - + title = self.tr("Change Method Signature") if not aw.hasSelectedText(): # no selection available EricMessageBox.warning( - self.__ui, title, - self.tr("Highlight the method or function to change" - " and try again.")) + self.__ui, + title, + self.tr("Highlight the method or function to change" " and try again."), + ) return - + if not self.confirmAllBuffersSaved(): return - + filename = aw.getFileName() line, index, line1, index1 = aw.getSelection() offset = self.__getOffset(aw, line, index) - + from .ChangeSignatureDialog import ChangeSignatureDialog - dlg = ChangeSignatureDialog(self, title, filename, offset, - parent=self.__ui) + + dlg = ChangeSignatureDialog(self, title, filename, offset, parent=self.__ui) changeGroup = dlg.getChangeGroupName() self.__refactoringDialogs[changeGroup] = dlg - dlg.finished.connect( - lambda: self.__refactoringDialogClosed(changeGroup)) + dlg.finished.connect(lambda: self.__refactoringDialogClosed(changeGroup)) dlg.show() - + def __inlineArgumentDefault(self): """ Private slot to inline the default value of a parameter of a method or function. """ aw = self.__vm.activeWindow() - + if aw is None: return - + title = self.tr("Inline Argument Default") if not aw.hasSelectedText(): # no selection available EricMessageBox.warning( - self.__ui, title, - self.tr("Highlight the method or function to inline" - " a parameter's default and try again.")) + self.__ui, + title, + self.tr( + "Highlight the method or function to inline" + " a parameter's default and try again." + ), + ) return - + if not self.confirmAllBuffersSaved(): return - + filename = aw.getFileName() line, index, line1, index1 = aw.getSelection() offset = self.__getOffset(aw, line, index) - + from .InlineArgumentDefaultDialog import InlineArgumentDefaultDialog - dlg = InlineArgumentDefaultDialog(self, title, filename, offset, - parent=self.__ui) + + dlg = InlineArgumentDefaultDialog( + self, title, filename, offset, parent=self.__ui + ) changeGroup = dlg.getChangeGroupName() self.__refactoringDialogs[changeGroup] = dlg - dlg.finished.connect( - lambda: self.__refactoringDialogClosed(changeGroup)) + dlg.finished.connect(lambda: self.__refactoringDialogClosed(changeGroup)) dlg.show() - + def __transformModuleToPackage(self): """ Private slot to transform a module to a package. """ aw = self.__vm.activeWindow() - + if aw is None: return - + title = self.tr("Transform Module to Package") - + if not self.confirmAllBuffersSaved(): return - + filename = aw.getFileName() - + from .ConfirmationDialog import ConfirmationDialog + dlg = ConfirmationDialog( - self, title, "ModuleToPackage", "CalculateModuleToPackageChanges", + self, + title, + "ModuleToPackage", + "CalculateModuleToPackageChanges", { "FileName": filename, }, - parent=self.__ui) + parent=self.__ui, + ) changeGroup = dlg.getChangeGroupName() self.__refactoringDialogs[changeGroup] = dlg - dlg.finished.connect( - lambda: self.__refactoringDialogClosed(changeGroup)) + dlg.finished.connect(lambda: self.__refactoringDialogClosed(changeGroup)) dlg.show() - + def __encapsulateAttribute(self): """ Private slot to encapsulate an attribute. """ aw = self.__vm.activeWindow() - + if aw is None: return - + title = self.tr("Encapsulate Attribute") if not aw.hasSelectedText(): # no selection available EricMessageBox.warning( - self.__ui, title, - self.tr("Highlight the attribute to encapsulate" - " and try again.")) + self.__ui, + title, + self.tr("Highlight the attribute to encapsulate" " and try again."), + ) return - + if not self.confirmAllBuffersSaved(): return - + filename = aw.getFileName() line, index, line1, index1 = aw.getSelection() offset = self.__getOffset(aw, line, index) - + from .GetterSetterDialog import GetterSetterDialog - dlg = GetterSetterDialog(self, title, filename, offset, - parent=self.__ui) + + dlg = GetterSetterDialog(self, title, filename, offset, parent=self.__ui) changeGroup = dlg.getChangeGroupName() self.__refactoringDialogs[changeGroup] = dlg - dlg.finished.connect( - lambda: self.__refactoringDialogClosed(changeGroup)) + dlg.finished.connect(lambda: self.__refactoringDialogClosed(changeGroup)) dlg.show() - + def __convertLocalToAttribute(self): """ Private slot to convert a local variable to an attribute. """ aw = self.__vm.activeWindow() - + if aw is None: return - + title = self.tr("Local Variable to Attribute") if not aw.hasSelectedText(): # no selection available EricMessageBox.warning( - self.__ui, title, - self.tr("Highlight the local variable to make an attribute" - " and try again.")) + self.__ui, + title, + self.tr( + "Highlight the local variable to make an attribute" + " and try again." + ), + ) return - + if not self.confirmAllBuffersSaved(): return - + filename = aw.getFileName() line, index, line1, index1 = aw.getSelection() offset = self.__getOffset(aw, line, index) - + from .ConfirmationDialog import ConfirmationDialog + dlg = ConfirmationDialog( - self, title, "LocalToAttribute", - "CalculateLocalToAttributeChanges", { + self, + title, + "LocalToAttribute", + "CalculateLocalToAttributeChanges", + { "FileName": filename, "Offset": offset, }, - parent=self.__ui) + parent=self.__ui, + ) changeGroup = dlg.getChangeGroupName() self.__refactoringDialogs[changeGroup] = dlg - dlg.finished.connect( - lambda: self.__refactoringDialogClosed(changeGroup)) + dlg.finished.connect(lambda: self.__refactoringDialogClosed(changeGroup)) dlg.show() - + def __methodToMethodObject(self): """ Private slot to change the signature of a method or function. """ aw = self.__vm.activeWindow() - + if aw is None: return - + title = self.tr("Replace Method With Method Object") if not aw.hasSelectedText(): # no selection available EricMessageBox.warning( - self.__ui, title, - self.tr("Highlight the method or function to convert" - " and try again.")) + self.__ui, + title, + self.tr( + "Highlight the method or function to convert" " and try again." + ), + ) return - + if not self.confirmAllBuffersSaved(): return - + filename = aw.getFileName() line, index, line1, index1 = aw.getSelection() offset = self.__getOffset(aw, line, index) - + from .MethodToMethodObjectDialog import MethodToMethodObjectDialog - dlg = MethodToMethodObjectDialog(self, title, filename, offset, - parent=self.__ui) + + dlg = MethodToMethodObjectDialog( + self, title, filename, offset, parent=self.__ui + ) changeGroup = dlg.getChangeGroupName() self.__refactoringDialogs[changeGroup] = dlg - dlg.finished.connect( - lambda: self.__refactoringDialogClosed(changeGroup)) + dlg.finished.connect(lambda: self.__refactoringDialogClosed(changeGroup)) dlg.show() - + ##################################################### ## Refactoring History ##################################################### - + def __showProjectHistory(self): """ Private method to show the project refactoring history. """ if self.__historyDialog is not None: self.__historyDialog.close() - + from .HistoryDialog import HistoryDialog + self.__historyDialog = HistoryDialog(self, parent=self.__ui) self.__historyDialog.finished.connect(self.__historyDialogClosed) self.__historyDialog.show() - + def __showFileHistory(self): """ Private method to show the refactoring history of the current file. """ aw = self.__vm.activeWindow() - + if aw is None: return - + if self.__historyDialog is not None: self.__historyDialog.close() - + from .HistoryDialog import HistoryDialog + filename = aw.getFileName() if filename: self.__historyDialog = HistoryDialog( - self, filename=filename, parent=self.__ui) + self, filename=filename, parent=self.__ui + ) self.__historyDialog.show() - + def __clearHistory(self): """ Private slot to clear the redo and undo lists. @@ -1652,65 +1866,72 @@ res = EricMessageBox.yesNo( None, self.tr("Clear History"), - self.tr("Do you really want to clear the refactoring history?")) + self.tr("Do you really want to clear the refactoring history?"), + ) if res: - self.sendJson("History", { - "Subcommand": "Clear", - }) - + self.sendJson( + "History", + { + "Subcommand": "Clear", + }, + ) + if self.__historyDialog is not None: self.__historyDialog.historyCleared() - + def __processHistoryResult(self, result): """ Private method to process the history data sent by the refactoring client. - + @param result dictionary containing the history data @type dict """ if self.handleRopeError(result) and self.__historyDialog is not None: self.__historyDialog.processHistoryCommand(result) - + def __historyDialogClosed(self): """ Private slot handling the closing of the history dialog. """ self.__historyDialog = None - + ##################################################### ## Find actions including mouse click handler ##################################################### - + def __queryReferences(self): """ Private slot to handle the Find References action. """ aw = self.__vm.activeWindow() - + if aw is None: return - + title = self.tr("Find Occurrences") - + if not self.confirmAllBuffersSaved(): return - + filename = aw.getFileName() line, index = aw.getCursorPosition() offset = self.__getOffset(aw, line, index) - - self.sendJson("QueryReferences", { - "Title": title, - "FileName": filename, - "Offset": offset, - }) - + + self.sendJson( + "QueryReferences", + { + "Title": title, + "FileName": filename, + "Offset": offset, + }, + ) + def __queryReferencesResult(self, result): """ Private method to handle the "Query References" result sent by the client. - + @param result dictionary containing the result data @type dict """ @@ -1718,47 +1939,54 @@ title = result["Title"] if result["EntriesCount"] > 0: from .MatchesDialog import MatchesDialog + self.dlg = MatchesDialog(self.__ui, True) self.dlg.show() for occurrence in result["Entries"]: self.dlg.addEntry( # file name, lineno, unsure - occurrence[0], occurrence[1], occurrence[2]) + occurrence[0], + occurrence[1], + occurrence[2], + ) else: EricMessageBox.warning( - self.__ui, title, - self.tr("No occurrences found.")) - + self.__ui, title, self.tr("No occurrences found.") + ) + def __queryDefinition(self): """ Private slot to handle the Find Definition action. """ aw = self.__vm.activeWindow() - + if aw is None: return - + title = self.tr("Find Definition") - + if not self.confirmAllBuffersSaved(): return - + filename = aw.getFileName() line, index = aw.getCursorPosition() offset = self.__getOffset(aw, line, index) - - self.sendJson("QueryDefinition", { - "Title": title, - "FileName": filename, - "Offset": offset, - "Source": aw.text(), - }) - + + self.sendJson( + "QueryDefinition", + { + "Title": title, + "FileName": filename, + "Offset": offset, + "Source": aw.text(), + }, + ) + def __queryDefinitionResult(self, result): """ Private method to handle the "Query Definition" result sent by the client. - + @param result dictionary containing the result data @type dict """ @@ -1766,46 +1994,50 @@ title = result["Title"] if "Location" in result: location = result["Location"] - + from .MatchesDialog import MatchesDialog + self.dlg = MatchesDialog(self.__ui, False) self.dlg.show() self.dlg.addEntry(location[0], location[1]) # file name, lineno else: EricMessageBox.warning( - self.__ui, title, - self.tr("No matching definition found.")) - + self.__ui, title, self.tr("No matching definition found.") + ) + def __queryImplementations(self): """ Private slot to handle the Find Implementations action. """ aw = self.__vm.activeWindow() - + if aw is None: return - + title = self.tr("Find Implementations") - + if not self.confirmAllBuffersSaved(): return - + filename = aw.getFileName() line, index = aw.getCursorPosition() offset = self.__getOffset(aw, line, index) - - self.sendJson("QueryImplementations", { - "Title": title, - "FileName": filename, - "Offset": offset, - }) - + + self.sendJson( + "QueryImplementations", + { + "Title": title, + "FileName": filename, + "Offset": offset, + }, + ) + def __queryImplementationsResult(self, result): """ Private method to handle the "Query Implementations" result sent by the client. - + @param result dictionary containing the result data @type dict """ @@ -1813,20 +2045,25 @@ title = result["Title"] if result["EntriesCount"] > 0: from .MatchesDialog import MatchesDialog + self.dlg = MatchesDialog(self.__ui, True) self.dlg.show() for occurrence in result["Entries"]: self.dlg.addEntry( # file name, lineno, unsure - occurrence[0], occurrence[1], occurrence[2]) + occurrence[0], + occurrence[1], + occurrence[2], + ) else: EricMessageBox.warning( - self.__ui, title, self.tr("No implementations found.")) - + self.__ui, title, self.tr("No implementations found.") + ) + ##################################################### ## Various actions ##################################################### - + def __editConfig(self): """ Private slot to open the rope configuration file in an editor. @@ -1837,6 +2074,7 @@ configfile = os.path.join(ropedir, "config.py") if os.path.exists(configfile): from QScintilla.MiniEditor import MiniEditor + self.__editor = MiniEditor(configfile) self.__editor.show() self.__editor.editorSaved.connect(self.__configChanged) @@ -1844,14 +2082,17 @@ EricMessageBox.critical( self.__ui, self.tr("Configure Rope"), - self.tr("""The Rope configuration file '{0}' does""" - """ not exist.""").format(configfile)) + self.tr( + """The Rope configuration file '{0}' does""" """ not exist.""" + ).format(configfile), + ) else: EricMessageBox.critical( self.__ui, self.tr("Configure Rope"), - self.tr("""The Rope admin directory does not exist.""")) - + self.tr("""The Rope admin directory does not exist."""), + ) + def __updateConfig(self): """ Private slot to update the configuration file. @@ -1859,8 +2100,11 @@ res = EricMessageBox.yesNo( self.__ui, self.tr("Update Configuration"), - self.tr("""Shall rope's current configuration be replaced """ - """by a new default configuration?""")) + self.tr( + """Shall rope's current configuration be replaced """ + """by a new default configuration?""" + ), + ) if res: src = self.__defaultConfig() cname = self.__ropeConfigFile() @@ -1874,22 +2118,25 @@ EricMessageBox.critical( None, self.tr("Update Configuration"), - self.tr("""<p>The configuration could not be""" - """ updated.</p><p>Reason: {0}</p>""") - .format(str(err))) - + self.tr( + """<p>The configuration could not be""" + """ updated.</p><p>Reason: {0}</p>""" + ).format(str(err)), + ) + def __showRopeHelp(self): """ Private slot to show help about the refactorings offered by Rope. """ if self.__helpDialog is None: from .HelpDialog import HelpDialog + self.__helpDialog = HelpDialog( self.tr("Help about rope refactorings"), - self.__ropeConfig["RopeHelpFile"] + self.__ropeConfig["RopeHelpFile"], ) self.__helpDialog.show() - + def __performSOA(self): """ Private slot to perform SOA on all modules. @@ -1898,39 +2145,48 @@ res = EricMessageBox.yesNo( self.__ui, title, - self.tr("""This action might take some time. """ - """Do you really want to perform SOA?""")) + self.tr( + """This action might take some time. """ + """Do you really want to perform SOA?""" + ), + ) if res: - - self.sendJson("PerformSoa", { - "Title": title, - }) - + + self.sendJson( + "PerformSoa", + { + "Title": title, + }, + ) + def __soaFinished(self, result): """ Private method to handle the "Soa Finished" result sent by the client. - + @param result dictionary containing the result data @type dict """ if self.handleRopeError(result): title = result["Title"] - + EricMessageBox.information( self.__ui, title, - self.tr("""Static object analysis (SOA) done. """ - """SOA database updated.""")) - + self.tr( + """Static object analysis (SOA) done. """ + """SOA database updated.""" + ), + ) + ################################################################## ## methods below are private utility methods ################################################################## - + def __processProgress(self, params): """ Private method to handle Progress commands. - + @param params dictionary containing the progress data @type dict """ @@ -1938,36 +2194,37 @@ if subcommand == "Init": if self.__progressDialog is not None: self.__progressDialog.reset() - + progressDialog = RopeProgressDialog( - self, params["Title"], params["Interruptable"]) + self, params["Title"], params["Interruptable"] + ) progressDialog.show() progressDialog.raise_() self.__progressDialog = progressDialog QApplication.processEvents() - + elif subcommand == "Progress" and self.__progressDialog is not None: self.__progressDialog.updateProgress(params) self.__progressDialog.raise_() - + elif subcommand == "Reset" and self.__progressDialog is not None: self.__progressDialog.reset() - + def __setConfig(self, params): """ Private method to set the rope client configuration data. - + @param params dictionary containing the configuration data @type dict """ self.__ropeConfig = params # keys: RopeFolderName, DefaultConfig, RopeHelpFile, # RopeInfo, RopeVersion, RopeCopyright, PythonVersion - + def __ropeConfigFile(self): """ Private method to get the name of the rope configuration file. - + @return name of the rope configuration file @rtype str """ @@ -1979,17 +2236,17 @@ if not os.path.exists(configfile): configfile = None return configfile - + def __configChanged(self): """ Private slot called, when the rope config file has changed. """ self.sendJson("ConfigChanged", {}) - + def __defaultConfig(self): """ Private slot to return the contents of rope's default configuration. - + @return string containing the source of rope's default configuration @rtype str @@ -1998,40 +2255,40 @@ return self.__ropeConfig["DefaultConfig"] else: return "" - + ################################################################## ## methods below are public utility methods ################################################################## - + def getActions(self): """ Public method to get a list of all actions. - + @return list of all actions @rtype list of EricAction """ return self.actions[:] - + def projectOpened(self): """ Public slot to handle the projectOpened signal. """ if self.__projectopen: self.projectClosed() - + self.__projectopen = True self.__projectpath = self.__ericProject.getProjectPath() self.__projectLanguage = self.__ericProject.getProjectLanguage() - + ok = False - + if self.__projectLanguage in ("Python3", "MicroPython", "Cython"): clientEnv = os.environ.copy() if "PATH" in clientEnv: clientEnv["PATH"] = self.__ui.getOriginalPathString() - + venvManager = ericApp().getObject("VirtualEnvManager") - + # get virtual environment from project first venvName = self.__ericProject.getDebugProperty("VIRTUALENV") if venvName: @@ -2043,57 +2300,63 @@ isRemote = False if (not venvName) or isRemote: # get it from debugger settings next - if self.__projectLanguage in ( - "Python3", "MicroPython", "Cython" - ): + if self.__projectLanguage in ("Python3", "MicroPython", "Cython"): venvName = Preferences.getDebugger("Python3VirtualEnv") if not venvName: venvName, _ = venvManager.getDefaultEnvironment() else: venvName = "" if venvName: - interpreter = venvManager.getVirtualenvInterpreter( - venvName) + interpreter = venvManager.getVirtualenvInterpreter(venvName) execPath = venvManager.getVirtualenvExecPath(venvName) - + # build a suitable environment if execPath: if "PATH" in clientEnv: clientEnv["PATH"] = os.pathsep.join( - [execPath, clientEnv["PATH"]]) + [execPath, clientEnv["PATH"]] + ) else: clientEnv["PATH"] = execPath else: interpreter = "" if interpreter: if isRemote: - self.__ui.appendToStderr(self.tr( - "The project is configured for remote access." - " Using local interpreter instead." - )) + self.__ui.appendToStderr( + self.tr( + "The project is configured for remote access." + " Using local interpreter instead." + ) + ) ok = self.__startRefactoringClient(interpreter, clientEnv) if not ok: - self.__ui.appendToStderr(self.tr( - "Project language '{0}' is not supported because" - " the configured interpreter could not be started." - " Refactoring is disabled." - ).format(self.__projectLanguage)) + self.__ui.appendToStderr( + self.tr( + "Project language '{0}' is not supported because" + " the configured interpreter could not be started." + " Refactoring is disabled." + ).format(self.__projectLanguage) + ) else: for act in self.actions: act.setEnabled(True) else: - self.__ui.appendToStderr(self.tr( - "Project language '{0}' is not supported because no" - " suitable interpreter is configured. Refactoring is" - " disabled." - ).format(self.__projectLanguage)) + self.__ui.appendToStderr( + self.tr( + "Project language '{0}' is not supported because no" + " suitable interpreter is configured. Refactoring is" + " disabled." + ).format(self.__projectLanguage) + ) else: - self.__ui.appendToStderr(self.tr( - "Refactoring for project language '{0}' is not supported." - ).format(self.__projectLanguage)) - + self.__ui.appendToStderr( + self.tr( + "Refactoring for project language '{0}' is not supported." + ).format(self.__projectLanguage) + ) + self.__mainMenu.menuAction().setEnabled(ok) - + def projectClosed(self): """ Public slot to handle the projectClosed signal. @@ -2101,7 +2364,7 @@ for act in self.actions: act.setEnabled(False) self.__mainMenu.menuAction().setEnabled(False) - + if self.__helpDialog is not None: self.__helpDialog.close() self.__helpDialog = None @@ -2111,20 +2374,20 @@ for dlg in self.__refactoringDialogs.values(): dlg.close() self.__refactoringDialogs = {} - + self.sendJson("CloseProject", {}, flush=True) - + self.__projectopen = False - self.__projectpath = '' + self.__projectpath = "" self.__projectLanguage = "" self.__ropeConfig = {} - + self.stopClient() - + def confirmBufferIsSaved(self, editor): """ Public method to check, if an editor has unsaved changes. - + @param editor reference to the editor to be checked @type Editor @return flag indicating, that the editor doesn't contain @@ -2134,84 +2397,82 @@ res = editor.checkDirty() self.sendJson("Validate", {}) return res - + def confirmAllBuffersSaved(self): """ Public method to check, if any editor has unsaved changes. - + @return flag indicating, that no editor contains unsaved edits @rtype bool """ res = self.__vm.checkAllDirty() self.sendJson("Validate", {}) return res - + def refreshEditors(self, changedFiles): """ Public method to refresh modified editors. - + @param changedFiles list of changed files @type list of str """ - openFiles = [Utilities.normcasepath(f) - for f in self.__vm.getOpenFilenames()] - + openFiles = [Utilities.normcasepath(f) for f in self.__vm.getOpenFilenames()] + for fileName in changedFiles: normfile = Utilities.normcasepath(fileName) if normfile in openFiles: editor = self.__vm.getEditor(normfile)[1] editor.refresh() - + aw = self.__vm.activeWindow() if aw is not None: filename = aw.getFileName() if filename is not None: - self.__vm.openSourceFile(filename, - aw.getCursorPosition()[0] + 1) - + self.__vm.openSourceFile(filename, aw.getCursorPosition()[0] + 1) + def reportChanged(self, filename, oldSource): """ Public slot to report some changed sources. - + @param filename file name of the changed source @type str @param oldSource source code before the change @type str """ - if ( - self.__ericProject.isOpen() and - self.__ericProject.isProjectFile(filename) - ): + if self.__ericProject.isOpen() and self.__ericProject.isProjectFile(filename): editor = self.__vm.getOpenEditor(filename) if ( - self.__ropeConfig and - editor is not None and - editor.getLanguage() == self.__ropeConfig["PythonVersion"] + self.__ropeConfig + and editor is not None + and editor.getLanguage() == self.__ropeConfig["PythonVersion"] ): - self.sendJson("ReportChanged", { - "FileName": filename, - "OldSource": oldSource, - }) - + self.sendJson( + "ReportChanged", + { + "FileName": filename, + "OldSource": oldSource, + }, + ) + ####################################################################### ## Methods below handle the network connection ####################################################################### - + def handleCall(self, method, params): """ Public method to handle a method call from the client. - + @param method requested method name @type str @param params dictionary with method specific parameters @type dict """ self.__methodMapping[method](params) - + def __processClientException(self, params): """ Private method to handle exceptions of the refactoring client. - + @param params dictionary containing the exception data @type dict """ @@ -2219,37 +2480,45 @@ EricMessageBox.critical( None, self.tr("Refactoring Protocol Error"), - self.tr("""<p>The data received from the refactoring""" - """ server could not be decoded. Please report""" - """ this issue with the received data to the""" - """ eric bugs email address.</p>""" - """<p>Error: {0}</p>""" - """<p>Data:<br/>{1}</p>""") - .format(params["ExceptionValue"], - Utilities.html_encode(params["ProtocolData"])), - EricMessageBox.Ok + self.tr( + """<p>The data received from the refactoring""" + """ server could not be decoded. Please report""" + """ this issue with the received data to the""" + """ eric bugs email address.</p>""" + """<p>Error: {0}</p>""" + """<p>Data:<br/>{1}</p>""" + ).format( + params["ExceptionValue"], + Utilities.html_encode(params["ProtocolData"]), + ), + EricMessageBox.Ok, ) else: EricMessageBox.critical( None, self.tr("Refactoring Client Error"), - self.tr("<p>An exception happened in the refactoring" - " client. Please report it to the eric bugs" - " email address.</p>" - "<p>Exception: {0}</p>" - "<p>Value: {1}</p>" - "<p>Traceback: {2}</p>") - .format(Utilities.html_encode(params["ExceptionType"]), - params["ExceptionValue"], - params["Traceback"].replace("\r\n", "<br/>") - .replace("\n", "<br/>").replace("\r", "<br/>")), - EricMessageBox.Ok + self.tr( + "<p>An exception happened in the refactoring" + " client. Please report it to the eric bugs" + " email address.</p>" + "<p>Exception: {0}</p>" + "<p>Value: {1}</p>" + "<p>Traceback: {2}</p>" + ).format( + Utilities.html_encode(params["ExceptionType"]), + params["ExceptionValue"], + params["Traceback"] + .replace("\r\n", "<br/>") + .replace("\n", "<br/>") + .replace("\r", "<br/>"), + ), + EricMessageBox.Ok, ) - + def __startRefactoringClient(self, interpreter, clientEnv): """ Private method to start the refactoring client. - + @param interpreter interpreter to be used for the refactoring client @type str @param clientEnv dictionary with environment variables to run the @@ -2259,16 +2528,18 @@ @rtype bool """ if interpreter: - client = os.path.join(os.path.dirname(__file__), - "RefactoringClient.py") + client = os.path.join(os.path.dirname(__file__), "RefactoringClient.py") ok, exitCode = self.startClient( - interpreter, client, + interpreter, + client, [self.__projectpath, Globals.getPythonLibraryDirectory()], - environment=clientEnv) + environment=clientEnv, + ) if not ok and exitCode == 42: - self.__ui.appendToStderr("RefactoringServer: " + self.tr( - "The rope refactoring library is not installed.\n" - )) + self.__ui.appendToStderr( + "RefactoringServer: " + + self.tr("The rope refactoring library is not installed.\n") + ) else: ok = False return ok