diff -r 5aa1070daa48 -r 3a62b4009df9 eric7/JediInterface/AssistantJedi.py --- a/eric7/JediInterface/AssistantJedi.py Sun Oct 03 18:36:41 2021 +0200 +++ b/eric7/JediInterface/AssistantJedi.py Mon Oct 04 19:59:06 2021 +0200 @@ -7,7 +7,10 @@ Module implementing the Jedi assistant plug-in. """ +import contextlib + from PyQt6.QtCore import pyqtSlot, QObject +from PyQt6.QtWidgets import QMenu import Preferences @@ -33,6 +36,7 @@ self.__jediServer = None self.__editors = [] + self.__menuActions = {} from .JediServer import JediServer self.__jediServer = JediServer(self.__vm, project, self.__ui) @@ -40,6 +44,8 @@ self.__ui.preferencesChanged.connect(self.__preferencesChanged) + self.__initRefactoringMenu() + self.__vm.editorOpenedEd.connect(self.__editorOpened) self.__vm.editorClosedEd.connect(self.__editorClosed) @@ -118,6 +124,14 @@ editor.registerMouseHoverHelpFunction( self.__jediServer.hoverHelp) + + menu = editor.getMenu("Main") + if menu is not None: + checkAction = editor.getMenu("Checks").menuAction() + act = menu.insertMenu(checkAction, self.__menu) + sep = menu.insertSeparator(checkAction) + self.__menuActions[editor] = [act, sep] + editor.showMenu.connect(self.__editorShowMenu) def __disconnectEditor(self, editor): """ @@ -133,6 +147,14 @@ editor.unregisterMouseHoverHelpFunction( self.__jediServer.hoverHelp) + + with contextlib.suppress(TypeError): + editor.showMenu.disconnect(self.__editorShowMenu) + menu = editor.getMenu("Main") + if menu is not None and editor in self.__menuActions: + for act in self.__menuActions[editor]: + menu.removeAction(act) + del self.__menuActions[editor] def __connectMouseClickHandler(self, editor): """ @@ -194,3 +216,28 @@ @type Editor """ editor.removeCallTipHook("jedi") + + def __initRefactoringMenu(self): + """ + Private method to initialize the Refactoring menu. + """ + # TODO: populate the Refactoring menu + self.__menu = QMenu(self.tr("Refactoring")) + self.__menu.addAction( + self.tr("Rename Variable"), + self.__jediServer.refactoringRenameVariable) + + def __editorShowMenu(self, menuName, menu, editor): + """ + Private slot called, when the the editor context menu or a submenu is + about to be shown. + + @param menuName name of the menu to be shown + @type str + @param menu reference to the menu + @type QMenu + @param editor reference to the editor + @type Editor + """ + if menuName == "Main": + self.__menu.setEnabled(editor.hasSelectedText())