eric7/JediInterface/AssistantJedi.py

branch
eric7
changeset 8666
3a62b4009df9
parent 8593
1d66b6af60ed
child 8668
d29c775b8bd7
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())

eric ide

mercurial