PluginRefactoringRope.py

branch
server_client_variant
changeset 191
2af42804bca2
parent 189
2711fdd91925
child 195
5d614a567be3
diff -r a1b9b4975806 -r 2af42804bca2 PluginRefactoringRope.py
--- a/PluginRefactoringRope.py	Sun Sep 24 17:09:39 2017 +0200
+++ b/PluginRefactoringRope.py	Sun Sep 24 17:10:48 2017 +0200
@@ -11,15 +11,13 @@
 
 import os
 
-from PyQt5.QtCore import Qt, QObject, QTranslator, QCoreApplication, QTimer
+from PyQt5.QtCore import Qt, QObject, QTranslator, QCoreApplication
 
 from E5Gui.E5Application import e5App
 
 import Preferences
 import Utilities
 
-from Preferences.Shortcuts import readShortcuts
-
 # Start-Of-Header
 name = "Refactoring Rope Plugin"
 author = "Detlev Offenbach <detlev@die-offenbachs.de>"
@@ -104,15 +102,12 @@
             os.path.join("RefactoringRope", "ConfigurationPage",
                          "preferences-refactoring.png"),
             createCallTipsPage, "editorCalltipsPage", None],
-    }
-    
-    ui = e5App().getObject("UserInterface")
-    if ui.versionIsNewer("6.0.99", "20150627") or ui.versionIsNewer("16.10"):
-        data["ropeMouseClickHandlerPage"] = [
+        "ropeMouseClickHandlerPage": [
             QCoreApplication.translate("RefactoringRopePlugin", "Rope"),
             os.path.join("RefactoringRope", "ConfigurationPage",
                          "preferences-refactoring.png"),
-            createMouseClickHandlerPage, "1editorMouseClickHandlers", None]
+            createMouseClickHandlerPage, "1editorMouseClickHandlers", None],
+    }
     
     return data
 
@@ -143,7 +138,6 @@
         self.__defaults = {
             "CodeAssistEnabled": False,
             "MaxFixes": 10,
-            "CodeAssistTimeout": 100,
             
             "CodeAssistCalltipsEnabled": False,
             "CalltipsMaxFixes": 10,
@@ -155,21 +149,13 @@
         
         self.__translator = None
         self.__loadTranslator()
-        
-        self.__acTimer = QTimer(self)
-        self.__acTimer.setSingleShot(True)
-        self.__acTimer.setInterval(self.getPreferences("CodeAssistTimeout"))
-        self.__acTimer.timeout.connect(self.__codeAssist)
     
     def __initialize(self):
         """
         Private slot to (re)initialize the plugin.
         """
-        self.__object = None
-        self.__caObject = None
-        
-        self.__mainAct = None
-        self.__mainMenu = None
+        self.__refactoringServer = None
+        self.__codeAssist = None
         
         self.__editors = []
         
@@ -183,49 +169,21 @@
         
         @return tuple of None and activation status (boolean)
         """
-        global error
-        error = ""     # clear previous error
-        
         global refactoringRopePluginObject
         refactoringRopePluginObject = self
         
-        from RefactoringRope.RefactoringServer import RefactoringServer
         from RefactoringRope.CodeAssist import CodeAssist
-        
-        self.__caObject = CodeAssist(self, self)
+        self.__codeAssist = CodeAssist(self, self)
         
-        self.__object = RefactoringServer(self, self.__ui)
-        self.__object.initActions()
-        e5App().registerPluginObject("RefactoringRope", self.__object)
-        try:
-            readShortcuts(pluginName="RefactoringRope")
-        except TypeError:
-            # backwards comaytibility, ignore
-            pass
-        
-        self.__mainMenu = self.__object.initMenu()
-        extrasAct = self.__ui.getMenuBarAction("extras")
-        self.__mainAct = self.__ui.menuBar().insertMenu(
-            extrasAct, self.__mainMenu)
-        self.__mainAct.setEnabled(False)
-        
-        if e5App().getObject("Project").isOpen():
-            self.__object.projectOpened()
+        from RefactoringRope.RefactoringServer import RefactoringServer
+        self.__refactoringServer = RefactoringServer(self, self.__ui)
+        self.__refactoringServer.activate()
         
         e5App().getObject("ViewManager").editorOpenedEd.connect(
             self.__editorOpened)
         e5App().getObject("ViewManager").editorClosedEd.connect(
             self.__editorClosed)
         
-        e5App().getObject("Project").projectOpened.connect(
-            self.__object.projectOpened)
-        e5App().getObject("Project").projectPropertiesChanged.connect(
-            self.__object.projectOpened)
-        e5App().getObject("Project").projectClosed.connect(
-            self.__object.projectClosed)
-        e5App().getObject("Project").newProject.connect(
-            self.__object.projectOpened)
-        
         if e5App().getObject("Project").isOpen():
             for editor in e5App().getObject("ViewManager").getOpenEditors():
                 self.__editorOpened(editor)
@@ -236,24 +194,13 @@
         """
         Public method to deactivate this plugin.
         """
-        e5App().unregisterPluginObject("RefactoringRope")
+        self.__refactoringServer.deactivate()
         
         e5App().getObject("ViewManager").editorOpenedEd.disconnect(
             self.__editorOpened)
         e5App().getObject("ViewManager").editorClosedEd.disconnect(
             self.__editorClosed)
         
-        e5App().getObject("Project").projectOpened.disconnect(
-            self.__object.projectOpened)
-        e5App().getObject("Project").projectPropertiesChanged.disconnect(
-            self.__object.projectOpened)
-        e5App().getObject("Project").projectClosed.disconnect(
-            self.__object.projectClosed)
-        e5App().getObject("Project").newProject.disconnect(
-            self.__object.projectOpened)
-        
-        self.__ui.menuBar().removeAction(self.__mainAct)
-        
         for editor in self.__editors[:]:
             self.__editorClosed(editor)
         
@@ -320,9 +267,8 @@
             for editor in self.__editors:
                 self.__disconnectMouseClickHandler(editor)
                 self.__connectMouseClickHandler(editor)
-        elif key == "CodeAssistTimeout":
-            self.__acTimer.setInterval(value)
     
+    # TODO: get this info from CodeAssistClient or Server
     def __determineLanguages(self):
         """
         Private method to determine the valid language strings.
@@ -341,6 +287,7 @@
         
         return langs
     
+    # TODO: move this to CodeAssist
     def __editorOpened(self, editor):
         """
         Private slot called, when a new editor was opened.
@@ -355,6 +302,7 @@
         editor.languageChanged.connect(self.__editorLanguageChanged)
         self.__editors.append(editor)
     
+    # TODO: move this to CodeAssist
     def __editorClosed(self, editor):
         """
         Private slot called, when an editor was closed.
@@ -366,6 +314,7 @@
             self.__disconnectEditor(editor)
             self.__editors.remove(editor)
     
+    # TODO: move this to CodeAssist
     def __editorLanguageChanged(self, language):
         """
         Private slot to handle the language change of an editor.
@@ -376,15 +325,9 @@
         langs = self.__determineLanguages()
         
         if language in langs:
-            try:
-                if editor.getCompletionListHook("rope") is None or \
-                        editor.getCallTipHook("rope") is None:
-                    self.__connectEditor(editor)
-            except AttributeError:
-                # old interface (before 6.1.0)
-                if editor.autoCompletionHook() != self.codeAssist or \
-                        editor.callTipHook() != self.codeAssistCallTip:
-                    self.__connectEditor(editor)
+            if editor.getCompletionListHook("rope") is None or \
+                    editor.getCallTipHook("rope") is None:
+                self.__connectEditor(editor)
         else:
             self.__disconnectEditor(editor)
     
@@ -397,6 +340,7 @@
         editor.editorAboutToBeSaved.connect(self.__editorAboutToBeSaved)
         editor.editorSaved.connect(self.__editorSaved)
         
+        # TODO: move this to CodeAssist
         if self.getPreferences("CodeAssistEnabled"):
             self.__setAutoCompletionHook(editor)
         if self.getPreferences("CodeAssistCalltipsEnabled"):
@@ -413,16 +357,12 @@
         @param editor reference to the editor (QScintilla.Editor)
         """
         if self.getPreferences("MouseClickGotoButton"):
-            try:
-                editor.setMouseClickHandler(
-                    "rope",
-                    self.getPreferences("MouseClickGotoModifiers"),
-                    self.getPreferences("MouseClickGotoButton"),
-                    self.__object.gotoDefinition
-                )
-            except AttributeError:
-                # eric versions before 6.1.0 don't support this
-                pass
+            editor.setMouseClickHandler(
+                "rope",
+                self.getPreferences("MouseClickGotoModifiers"),
+                self.getPreferences("MouseClickGotoButton"),
+                self.__refactoringServer.gotoDefinition
+            )
     
     def __disconnectEditor(self, editor):
         """
@@ -437,125 +377,42 @@
             # just ignore it
             pass
         
-        try:
-            if editor.getCompletionListHook("rope"):
-                self.__unsetAutoCompletionHook(editor)
-        except AttributeError:
-            # old interface (before 6.1.0)
-            if editor.autoCompletionHook() == self.codeAssist:
-                self.__unsetAutoCompletionHook(editor)
-        try:
-            if editor.getCallTipHook("rope"):
-                self.__unsetCalltipsHook(editor)
-        except AttributeError:
-            # old interface (before 6.1.0)
-            if editor.callTipHook() == self.codeAssistCallTip:
-                self.__unsetCalltipsHook(editor)
+        # TODO: move this to CodeAssist
+        if editor.getCompletionListHook("rope"):
+            self.__unsetAutoCompletionHook(editor)
+        if editor.getCallTipHook("rope"):
+            self.__unsetCalltipsHook(editor)
         
         self.__disconnectMouseClickHandler(editor)
     
+    # TODO: move this to CodeAssist
     def __disconnectMouseClickHandler(self, editor):
         """
         Private method to disconnect the mouse click handler from an editor.
         
         @param editor reference to the editor (QScintilla.Editor)
         """
-        try:
-            editor.removeMouseClickHandlers("rope")
-        except AttributeError:
-            # eric versions before 6.1.0 don't support this
-            pass
+        editor.removeMouseClickHandlers("rope")
     
-    def __completionListSelected(self, userListId, txt):
-        """
-        Private slot to handle the selection from the completion list.
-        
-        @param userListId the ID of the user list (should be 1) (integer)
-        @param txt the selected text (QString)
-        """
-        from QScintilla.Editor import EditorAutoCompletionListID
-        
-        editor = self.sender()
-        if userListId == EditorAutoCompletionListID:
-            lst = txt.split()
-            if len(lst) > 1:
-                txt = lst[0]
-            
-            if Preferences.getEditor("AutoCompletionReplaceWord"):
-                editor.selectCurrentWord()
-                editor.removeSelectedText()
-                line, col = editor.getCursorPosition()
-            else:
-                line, col = editor.getCursorPosition()
-                wLeft = editor.getWordLeft(line, col)
-                if not txt.startswith(wLeft):
-                    editor.selectCurrentWord()
-                    editor.removeSelectedText()
-                    line, col = editor.getCursorPosition()
-                elif wLeft:
-                    txt = txt[len(wLeft):]
-            editor.insert(txt)
-            editor.setCursorPosition(line, col + len(txt))
-    
+    # TODO: move this to CodeAssist
     def __setAutoCompletionHook(self, editor):
         """
         Private method to set the autocompletion hook.
         
         @param editor reference to the editor (QScintilla.Editor)
         """
-        try:
-            editor.addCompletionListHook("rope", self.getCompletionsList)
-        except AttributeError:
-            # old interface (before 6.1.0)
-            editor.userListActivated.connect(self.__completionListSelected)
-            editor.setAutoCompletionHook(self.codeAssist)
+        editor.addCompletionListHook("rope", self.getCompletionsList)
     
+    # TODO: move this to CodeAssist
     def __unsetAutoCompletionHook(self, editor):
         """
         Private method to unset the autocompletion hook.
         
         @param editor reference to the editor (QScintilla.Editor)
         """
-        try:
-            editor.removeCompletionListHook("rope")
-        except AttributeError:
-            # old interface (before 6.1.0)
-            editor.unsetAutoCompletionHook()
-            editor.userListActivated.disconnect(self.__completionListSelected)
+        editor.removeCompletionListHook("rope")
     
-    def codeAssist(self, editor, context=False):
-        """
-        Public method to determine the autocompletion proposals.
-        
-        @param editor reference to the editor object, that called this method
-            QScintilla.Editor)
-        @param context flag indicating to autocomplete a context (boolean)
-        """
-        self.__currentEditor = editor
-        if self.getPreferences("CodeAssistTimeout"):
-            self.__acTimer.stop()
-            self.__acTimer.start()
-        else:
-            self.__codeAssist()
-    
-    def __codeAssist(self):
-        """
-        Private slot to show a list with completion proposals.
-        """
-        from QScintilla.Editor import EditorAutoCompletionListID
-        
-        if self.__currentEditor is not None:
-            if self.__currentEditor.isListActive():
-                self.__currentEditor.cancelList()
-            completions = self.getCompletionsList(self.__currentEditor, False)
-            if len(completions) == 0:
-                # try QScintilla autocompletion
-                self.__currentEditor.autoCompleteQScintilla()
-            else:
-                completions.sort()
-                self.__currentEditor.showUserList(EditorAutoCompletionListID,
-                                                  completions)
-    
+    # TODO: move this to CodeAssist
     def getCompletionsList(self, editor, context):
         """
         Public method to get a list of possible completions.
@@ -565,7 +422,7 @@
         @param context flag indicating to autocomplete a context (boolean)
         @return list of possible completions (list of strings)
         """
-        completions = self.__caObject.getCompletions(editor)
+        completions = self.__codeAssist.getCompletions(editor)
         return completions
     
     def __editorAboutToBeSaved(self, filename):
@@ -591,38 +448,33 @@
         @param filename name of the file that was saved (string)
         """
         if filename == self.__savedEditorName and self.__oldEditorText:
-            self.__object.reportChanged(self.__savedEditorName,
+            self.__refactoringServer.reportChanged(self.__savedEditorName,
                                         self.__oldEditorText)
-            self.__caObject.reportChanged(self.__savedEditorName,
+            self.__codeAssist.reportChanged(self.__savedEditorName,
                                           self.__oldEditorText)
         else:
-            self.__object.reportChanged(filename, "")
-            self.__caObject.reportChanged(filename, "")
+            self.__refactoringServer.reportChanged(filename, "")
+            self.__codeAssist.reportChanged(filename, "")
     
+    # TODO: move this to CodeAssist
     def __setCalltipsHook(self, editor):
         """
         Private method to set the calltip hook.
         
         @param editor reference to the editor (QScintilla.Editor)
         """
-        try:
-            editor.addCallTipHook("rope", self.codeAssistCallTip)
-        except AttributeError:
-            # old interface (before 6.1.0)
-            editor.setCallTipHook(self.codeAssistCallTip)
+        editor.addCallTipHook("rope", self.codeAssistCallTip)
     
+    # TODO: move this to CodeAssist
     def __unsetCalltipsHook(self, editor):
         """
         Private method to unset the calltip hook.
         
         @param editor reference to the editor (QScintilla.Editor)
         """
-        try:
-            editor.removeCallTipHook("rope")
-        except AttributeError:
-            # old interface (before 6.1.0)
-            editor.unsetCallTipHook()
+        editor.removeCallTipHook("rope")
     
+    # TODO: move this to CodeAssist
     def codeAssistCallTip(self, editor, pos, commas):
         """
         Public method to return a list of calltips.
@@ -633,7 +485,7 @@
             (integer)
         @return list of possible calltips (list of strings)
         """
-        cts = self.__caObject.getCallTips(pos, editor)
+        cts = self.__codeAssist.getCallTips(pos, editor)
         return cts
 
 #

eric ide

mercurial