eric7/JediInterface/JediServer.py

Tue, 08 Feb 2022 16:21:09 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 08 Feb 2022 16:21:09 +0100
branch
eric7
changeset 8943
23f9c7b9e18e
parent 8920
fe16c3cf165d
child 9056
af7c8c7b7c62
child 9067
abad8563ee7d
child 9111
4ac66b6c33a4
permissions
-rw-r--r--

Implemented some performance improvements.

8593
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
8881
54e42bc2437a Updated copyright for 2022.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8669
diff changeset
3 # Copyright (c) 2015 - 2022 Detlev Offenbach <detlev@die-offenbachs.de>
8593
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the autocompletion interface to jedi.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import contextlib
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import os
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 import uuid
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
8943
23f9c7b9e18e Implemented some performance improvements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8920
diff changeset
14 from PyQt6.QtCore import pyqtSlot, QCoreApplication, QTimer, QThread
8666
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
15 from PyQt6.QtWidgets import QInputDialog, QLineEdit, QDialog
8593
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 from EricWidgets.EricApplication import ericApp
8666
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
18 from EricWidgets import EricMessageBox
8593
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 from EricNetwork.EricJsonServer import EricJsonServer
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 from QScintilla.Editor import Editor
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 import Preferences
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 import Globals
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26
8666
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
27 from .RefactoringPreviewDialog import RefactoringPreviewDialog
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
28
8593
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 class JediServer(EricJsonServer):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 Class implementing the interface to the jedi library.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 IdProject = "Project"
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 PictureIDs = {
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 "class": "?{0}".format(Editor.ClassID),
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 "_class": "?{0}".format(Editor.ClassProtectedID),
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 "__class": "?{0}".format(Editor.ClassPrivateID),
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 "instance": "?{0}".format(Editor.ClassID),
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 "_instance": "?{0}".format(Editor.ClassProtectedID),
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 "__instance": "?{0}".format(Editor.ClassPrivateID),
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 "function": "?{0}".format(Editor.MethodID),
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 "_function": "?{0}".format(Editor.MethodProtectedID),
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 "__function": "?{0}".format(Editor.MethodPrivateID),
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 "module": "?{0}".format(Editor.ModuleID),
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 "_module": "?{0}".format(Editor.ModuleID),
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 "__module": "?{0}".format(Editor.ModuleID),
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 "param": "?{0}".format(Editor.AttributeID),
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 "_param": "?{0}".format(Editor.AttributeProtectedID),
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 "__param": "?{0}".format(Editor.AttributePrivateID),
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 "statement": "?{0}".format(Editor.AttributeID),
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 "_statement": "?{0}".format(Editor.AttributeProtectedID),
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 "__statement": "?{0}".format(Editor.AttributePrivateID),
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 "import": "",
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 "None": "",
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 }
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 def __init__(self, viewManager, project, ui):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 Constructor
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 @param viewManager reference to the viewmanager object
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 @type ViewManager
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 @param project reference to the project object
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 @type Project
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 @param ui reference to the user interface
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 @type UserInterface
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 super().__init__(
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 "JediServer", multiplex=True, parent=ui)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 self.__ui = ui
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 self.__vm = viewManager
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 self.__ericProject = project
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 self.__editorLanguageMapping = {}
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 self.__documentationViewer = None
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 # attributes to store the resuls of the client side
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 self.__completions = None
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 self.__calltips = None
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 self.__methodMapping = {
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 "CompletionsResult": self.__processCompletionsResult,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 "CallTipsResult": self.__processCallTipsResult,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 "DocumentationResult": self.__processDocumentationResult,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 "HoverHelpResult": self.__processHoverHelpResult,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 "GotoDefinitionResult": self.__processGotoDefinitionResult,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 "GotoReferencesResult": self.__processGotoReferencesResult,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92
8668
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
93 "RefactoringDiff": self.__showRefactoringDiff,
8666
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
94 "RefactoringApplyResult": self.__checkRefactoringResult,
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
95
8593
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 "ClientException": self.__processClientException,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 }
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 # temporary store for editor references indexed by Uuid
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 self.__editors = {}
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 # Python 3
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 self.__ensureActive("Python3")
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 def __updateEditorLanguageMapping(self):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 Private method to update the editor language to connection mapping.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 self.__editorLanguageMapping = {}
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 for name in self.connectionNames():
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 if name == "Python3":
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 self.__editorLanguageMapping.update({
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 "Python3": "Python3",
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 "MicroPython": "Python3",
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 "Pygments|Python": "Python3",
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 "Pygments|Python 2.x": "Python3",
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 "Cython": "Python3",
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 })
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 def isSupportedLanguage(self, language):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 Public method to check, if the given language is supported.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 @param language editor programming language to check
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 @type str
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 @return flag indicating the support status
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 @rtype bool
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 return language in self.__editorLanguageMapping
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 def __idString(self, editor):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 Private method to determine the ID string for the back-end.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 @param editor reference to the editor to determine the ID string for
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 @type Editor
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 @return ID string
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 @rtype str
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 idString = ""
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 language = editor.getLanguage()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 if (
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 self.__ericProject.isOpen() and
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 self.__ericProject.getProjectLanguage() == language
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 ):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 filename = editor.getFileName()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 if self.__ericProject.isProjectSource(filename):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 idString = JediServer.IdProject
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 if not idString and language in self.__editorLanguageMapping:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 idString = self.__editorLanguageMapping[language]
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 return idString
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 def __prepareData(self, editor):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 Private method to gather data about current cursor position.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 @param editor reference to the editor object, that called this method
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 @type Editor
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 @return tuple of filename, line, index, source
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 @rtype tuple (str, int, int, str)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 filename = editor.getFileName()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 line, index = editor.getCursorPosition()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 line += 1 # jedi line numbers are 1 based
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 source = editor.text()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 return filename, line, index, source
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 def requestCompletions(self, editor, context, acText):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 Public method to request a list of possible completions.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 @param editor reference to the editor object, that called this method
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 @type Editor
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 @param context flag indicating to autocomplete a context
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 @type bool
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 @param acText text to be completed
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 @type str
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 if not Preferences.getJedi("JediCompletionsEnabled"):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 return
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 idString = self.__idString(editor)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 if not idString:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 return
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 filename, line, index, source = self.__prepareData(editor)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 fuzzy = Preferences.getJedi("JediFuzzyCompletionsEnabled")
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 self.__ensureActive(idString)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 self.sendJson("getCompletions", {
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 "FileName": filename,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 "Source": source,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 "Line": line,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 "Index": index,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 "Fuzzy": fuzzy,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 "CompletionText": acText,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 }, idString=idString)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 def __processCompletionsResult(self, result):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 Private method to process the completions sent by the client.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 @param result dictionary containing the result sent by the client
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 @type dict
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 names = []
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 for completion in result["Completions"]:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 name = completion['Name']
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 context = completion['FullName']
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 if context:
8920
fe16c3cf165d Fixed an issue in JediServer processing completion results from the client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
215 if context.endswith(".{0}".format(name)):
fe16c3cf165d Fixed an issue in JediServer processing completion results from the client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
216 context = context.rsplit(".", 1)[0]
8593
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 name = "{0} ({1})".format(name, context)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 name += JediServer.PictureIDs.get(completion['CompletionType'], '')
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 names.append(name)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 if "Error" not in result:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 editor = self.__vm.getOpenEditor(result["FileName"])
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 if editor is not None:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 editor.completionsListReady(names,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 result["CompletionText"])
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 def getCallTips(self, editor, pos, commas):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 Public method to calculate calltips.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 @param editor reference to the editor object, that called this method
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 @type Editor
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 @param pos position in the text for the calltip
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 @type int
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 @param commas minimum number of commas contained in the calltip
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 @type int
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 @return list of possible calltips
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 @rtype list of str
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 if not Preferences.getJedi("JediCalltipsEnabled"):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 return []
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 # reset the calltips buffer
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 self.__calltips = None
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 idString = self.__idString(editor)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 if not idString:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 return []
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 filename, line, index, source = self.__prepareData(editor)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 self.__ensureActive(idString)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 self.sendJson("getCallTips", {
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 "FileName": filename,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 "Source": source,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 "Line": line,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 "Index": index,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 }, idString=idString)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 # emulate the synchronous behaviour
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 timer = QTimer()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 timer.setSingleShot(True)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 timer.start(5000) # 5s timeout
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 while self.__calltips is None and timer.isActive():
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 QCoreApplication.processEvents()
8943
23f9c7b9e18e Implemented some performance improvements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8920
diff changeset
267 QThread.msleep(100)
8593
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 return [] if self.__calltips is None else self.__calltips
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 def __processCallTipsResult(self, result):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 Private method to process the calltips sent by the client.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 @param result dictionary containing the result sent by the client
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 @type dict
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 if "Error" in result:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 self.__calltips = []
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 else:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 self.__calltips = result["CallTips"]
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 def requestCodeDocumentation(self, editor):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 Public method to request source code documentation for the given
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 editor.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 @param editor reference to the editor to get source code documentation
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 for
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 @type Editor
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 if self.__documentationViewer is None:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 return
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 idString = self.__idString(editor)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 if not idString:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 language = editor.getLanguage()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 warning = (
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 self.tr("Language <b>{0}</b> is not supported.")
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 .format(language)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 )
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 self.__documentationViewer.documentationReady(
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 warning, isWarning=True)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 return
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307 filename, line, index, source = self.__prepareData(editor)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 sourceLines = source.splitlines()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 # Correct index if cursor is standing after an opening bracket
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 if line > 0 and index > 0 and sourceLines[line - 1][index - 1] == '(':
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 index -= 1
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313 self.__ensureActive(idString)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 self.sendJson("getDocumentation", {
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 "FileName": filename,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 "Source": source,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 "Line": line,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 "Index": index,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 }, idString=idString)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 def __processDocumentationResult(self, result):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 Private method to process the documentation sent by the client.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 @param result dictionary containing the result sent by the client
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 @type dict with keys 'name', 'module', 'argspec', 'docstring'
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 if self.__documentationViewer is None:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 return
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 docu = None
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 if "Error" not in result:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334 docu = result["DocumentationDict"]
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 docu["note"] = (
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 self.tr("Present in <i>{0}</i> module")
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 .format(docu["module"]))
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 if docu is None:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 msg = self.tr("No documentation available.")
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 self.__documentationViewer.documentationReady(
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 msg, isDocWarning=True)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 else:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344 self.__documentationViewer.documentationReady(docu)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 def gotoDefinition(self, editor):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 Public slot to find the definition for the word at the cursor position
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 and go to it.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 Note: This is executed upon a mouse click sequence.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 @param editor reference to the calling editor
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
354 @type Editor
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356 if not Preferences.getJedi("MouseClickEnabled"):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357 return
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 idString = self.__idString(editor)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360 if not idString:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361 return
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363 filename, line, index, source = self.__prepareData(editor)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365 self.__ensureActive(idString)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367 euuid = str(uuid.uuid4())
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368 self.__editors[euuid] = editor
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
369
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
370 self.sendJson("gotoDefinition", {
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371 "FileName": filename,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
372 "Source": source,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
373 "Line": line,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374 "Index": index,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
375 "Uuid": euuid,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
376 }, idString=idString)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
378 def __processGotoDefinitionResult(self, result):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 Private method callback for the goto definition result.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382 @param result dictionary containing the result data
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383 @type dict
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385 euuid = result["Uuid"]
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
386 if "Error" not in result:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
387 # ignore errors silently
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
388 location = result["GotoDefinitionDict"]
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
389 if location:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
390 self.__vm.openSourceFile(location["ModulePath"],
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
391 location["Line"],
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
392 addNext=True)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
393 else:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
394 ericApp().getObject("UserInterface").statusBar().showMessage(
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
395 self.tr('Jedi: No definition found'), 5000)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
396
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
397 with contextlib.suppress(KeyError):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
398 del self.__editors[euuid]
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
399
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
400 def __processGotoReferencesResult(self, result):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
401 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
402 Private method callback for the goto references result.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
403
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
404 @param result dictionary containing the result data
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
405 @type dict
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
406 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
407 euuid = result["Uuid"]
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
408 with contextlib.suppress(ImportError):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
409 from QScintilla.Editor import ReferenceItem
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
410
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
411 if "Error" not in result:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
412 # ignore errors silently
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
413 references = result["GotoReferencesList"]
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
414 if references:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
415 try:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
416 editor = self.__editors[euuid]
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
417 except KeyError:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
418 editor = None
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
419 if editor is not None:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
420 referenceItemsList = [
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
421 ReferenceItem(
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
422 modulePath=ref["ModulePath"],
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
423 codeLine=ref["Code"],
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
424 line=ref["Line"],
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
425 column=ref["Column"],
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
426 ) for ref in references
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
427 ]
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
428 editor.gotoReferenceHandler(referenceItemsList)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
429
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
430 with contextlib.suppress(KeyError):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
431 del self.__editors[euuid]
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
432
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
433 def hoverHelp(self, editor, line, index):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
434 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
435 Public method to initiate the display of mouse hover help.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
436
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
437 @param editor reference to the calling editor
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
438 @type Editor
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
439 @param line line number (zero based)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
440 @type int
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
441 @param index index within the line (zero based)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
442 @type int
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
443 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
444 idString = self.__idString(editor)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
445 if not idString:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
446 return
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
447
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
448 filename = editor.getFileName()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
449 line += 1 # jedi line numbers are 1 based
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
450 source = editor.text()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
451
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
452 self.__ensureActive(idString)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
453
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
454 euuid = str(uuid.uuid4())
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
455 self.__editors[euuid] = editor
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
456
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
457 self.sendJson("hoverHelp", {
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
458 "FileName": filename,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
459 "Source": source,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
460 "Line": line,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
461 "Index": index,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
462 "Uuid": euuid,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
463 }, idString=idString)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
464
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
465 def __processHoverHelpResult(self, result):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
466 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
467 Private method callback for the goto definition result.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
468
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
469 @param result dictionary containing the result data
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
470 @type dict
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
471 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
472 euuid = result["Uuid"]
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
473 if "Error" not in result:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
474 # ignore errors silently
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
475 helpText = result["HoverHelp"]
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
476 if helpText:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
477 with contextlib.suppress(KeyError):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
478 self.__editors[euuid].showMouseHoverHelpData(
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
479 result["Line"] - 1,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
480 result["Index"],
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
481 helpText
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
482 )
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
483 else:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
484 ericApp().getObject("UserInterface").statusBar().showMessage(
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
485 self.tr('Jedi: No mouse hover help found'), 5000)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
486
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
487 with contextlib.suppress(KeyError):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
488 del self.__editors[euuid]
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
489
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
490 #######################################################################
8666
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
491 ## Refactoring methods below
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
492 #######################################################################
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
493
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
494 @pyqtSlot()
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
495 def refactoringRenameVariable(self):
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
496 """
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
497 Public slot to rename the selected variable.
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
498 """
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
499 editor = self.__vm.activeWindow()
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
500 if editor:
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
501 idString = self.__idString(editor)
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
502 if not idString:
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
503 return
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
504
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
505 newName, ok = QInputDialog.getText(
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
506 None,
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
507 self.tr("Rename Variable"),
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
508 self.tr("Enter the new name for the variable:"),
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
509 QLineEdit.EchoMode.Normal
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
510 )
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
511
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
512 if ok and newName:
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
513 filename = editor.getFileName()
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
514 line, index = editor.getCursorPosition()
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
515 source = editor.text()
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
516
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
517 self.__ensureActive(idString)
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
518
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
519 euuid = str(uuid.uuid4())
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
520 self.__editors[euuid] = editor
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
521
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
522 self.sendJson("renameVariable", {
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
523 "FileName": filename,
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
524 "Source": source,
8668
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
525 "Line": line + 1,
8666
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
526 "Index": index,
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
527 "Uuid": euuid,
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
528 "NewName": newName,
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
529 }, idString=idString)
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
530
8668
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
531 @pyqtSlot()
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
532 def refactoringExtractNewVariable(self):
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
533 """
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
534 Public slot to extract a statement to a new variable.
8666
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
535 """
8668
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
536 editor = self.__vm.activeWindow()
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
537 if editor:
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
538 idString = self.__idString(editor)
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
539 if not idString:
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
540 return
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
541
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
542 newName, ok = QInputDialog.getText(
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
543 None,
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
544 self.tr("Extract Variable"),
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
545 self.tr("Enter the name for the new variable:"),
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
546 QLineEdit.EchoMode.Normal
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
547 )
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
548
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
549 if ok and newName:
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
550 filename = editor.getFileName()
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
551 sLine, sIndex, eLine, eIndex = editor.getSelection()
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
552 source = editor.text()
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
553
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
554 self.__ensureActive(idString)
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
555
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
556 euuid = str(uuid.uuid4())
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
557 self.__editors[euuid] = editor
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
558
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
559 self.sendJson("extractVariable", {
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
560 "FileName": filename,
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
561 "Source": source,
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
562 "Line": sLine + 1,
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
563 "Index": sIndex,
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
564 "EndLine": eLine + 1,
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
565 "EndIndex": eIndex,
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
566 "Uuid": euuid,
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
567 "NewName": newName,
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
568 }, idString=idString)
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
569
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
570 @pyqtSlot()
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
571 def refactoringInlineVariable(self):
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
572 """
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
573 Public slot to inline the selected variable.
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
574
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
575 Note: This is the opposite to Extract New Variable.
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
576 """
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
577 editor = self.__vm.activeWindow()
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
578 if editor:
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
579 idString = self.__idString(editor)
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
580 if not idString:
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
581 return
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
582
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
583 filename = editor.getFileName()
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
584 line, index = editor.getCursorPosition()
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
585 source = editor.text()
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
586
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
587 self.__ensureActive(idString)
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
588
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
589 euuid = str(uuid.uuid4())
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
590 self.__editors[euuid] = editor
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
591
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
592 self.sendJson("inlineVariable", {
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
593 "FileName": filename,
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
594 "Source": source,
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
595 "Line": line + 1,
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
596 "Index": index,
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
597 "Uuid": euuid,
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
598 }, idString=idString)
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
599
8669
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
600 @pyqtSlot()
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
601 def refactoringExtractFunction(self):
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
602 """
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
603 Public slot to extract an expression to a function.
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
604 """
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
605 editor = self.__vm.activeWindow()
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
606 if editor:
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
607 idString = self.__idString(editor)
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
608 if not idString:
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
609 return
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
610
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
611 newName, ok = QInputDialog.getText(
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
612 None,
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
613 self.tr("Extract Function"),
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
614 self.tr("Enter the name for the function:"),
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
615 QLineEdit.EchoMode.Normal
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
616 )
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
617
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
618 if ok and newName:
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
619 filename = editor.getFileName()
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
620 sLine, sIndex, eLine, eIndex = editor.getSelection()
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
621 source = editor.text()
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
622
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
623 self.__ensureActive(idString)
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
624
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
625 euuid = str(uuid.uuid4())
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
626 self.__editors[euuid] = editor
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
627
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
628 self.sendJson("extractFunction", {
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
629 "FileName": filename,
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
630 "Source": source,
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
631 "Line": sLine + 1,
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
632 "Index": sIndex,
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
633 "EndLine": eLine + 1,
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
634 "EndIndex": eIndex,
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
635 "Uuid": euuid,
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
636 "NewName": newName,
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
637 }, idString=idString)
c26ecdb00a8b Finished implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8668
diff changeset
638
8668
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
639 def __showRefactoringDiff(self, result):
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
640 """
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
641 Private method to show the diff of a refactoring.
8666
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
642
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
643 @param result dictionary containing the result data
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
644 @type dict
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
645 """
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
646 if "Error" not in result:
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
647 euuid = result["Uuid"]
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
648 diff = result["Diff"]
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
649 dlg = RefactoringPreviewDialog(self.tr("Rename Variable"), diff)
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
650 if dlg.exec() == QDialog.DialogCode.Accepted:
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
651 self.__applyRefactoring(euuid)
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
652 else:
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
653 self.__cancelRefactoring(euuid)
8668
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
654 else:
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
655 EricMessageBox.critical(
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
656 None,
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
657 self.tr("Refactoring"),
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
658 self.tr("<p>The refactoring could not be performed.</p>"
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
659 "<p>Reason: {0}</p>").format(result["ErrorString"])
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
660 )
8666
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
661
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
662 def __applyRefactoring(self, uid):
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
663 """
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
664 Private method to apply a given refactoring.
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
665
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
666 @param uid UID of the calculated refactoring
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
667 @type str
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
668 """
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
669 with contextlib.suppress(KeyError):
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
670 editor = self.__editors[uid]
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
671 idString = self.__idString(editor)
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
672
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
673 self.sendJson("applyRefactoring", {
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
674 "Uuid": uid,
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
675 }, idString=idString)
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
676
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
677 del self.__editors[uid]
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
678
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
679 def __cancelRefactoring(self, uid):
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
680 """
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
681 Private method to cancel a given refactoring.
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
682
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
683 @param uid UID of the calculated refactoring
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
684 @type str
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
685 """
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
686 with contextlib.suppress(KeyError):
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
687 editor = self.__editors[uid]
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
688 idString = self.__idString(editor)
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
689
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
690 self.sendJson("cancelRefactoring", {
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
691 "Uuid": uid,
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
692 }, idString=idString)
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
693
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
694 del self.__editors[uid]
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
695
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
696 def __checkRefactoringResult(self, result):
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
697 """
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
698 Private method to check the refactoring result for errors.
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
699
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
700 @param result dictionary containing the result data
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
701 @type dict
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
702 """
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
703 if "Error" in result:
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
704 EricMessageBox.critical(
8668
d29c775b8bd7 Continued implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8666
diff changeset
705 None,
8666
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
706 self.tr("Apply Refactoring"),
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
707 self.tr("<p>The refactoring could not be applied.</p>"
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
708 "<p>Reason: {0}</p>").format(result["ErrorString"])
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
709 )
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
710
3a62b4009df9 Started implementing the Jedi refactoring interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8606
diff changeset
711 #######################################################################
8593
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
712 ## Methods below handle the network connection
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
713 #######################################################################
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
714
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
715 def handleCall(self, method, params):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
716 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
717 Public method to handle a method call from the client.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
718
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
719 @param method requested method name
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
720 @type str
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
721 @param params dictionary with method specific parameters
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
722 @type dict
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
723 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
724 self.__methodMapping[method](params)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
725
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
726 def __processClientException(self, params):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
727 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
728 Private method to handle exceptions of the refactoring client.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
729
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
730 @param params dictionary containing the exception data
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
731 @type dict
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
732 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
733 if params["ExceptionType"] == "ProtocolError":
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
734 self.__ui.appendToStderr(
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
735 self.tr("The data received from the Jedi server could not be"
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
736 " decoded. Please report this issue with the received"
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
737 " data to the eric bugs email address.\n"
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
738 "Error: {0}\n"
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
739 "Data:\n{1}\n").format(
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
740 params["ExceptionValue"],
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
741 params["ProtocolData"]))
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
742 else:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
743 self.__ui.appendToStderr(
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
744 self.tr("An exception happened in the Jedi client. Please"
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
745 " report it to the eric bugs email address.\n"
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
746 "Exception: {0}\n"
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
747 "Value: {1}\n"
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
748 "Traceback: {2}\n").format(
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
749 params["ExceptionType"],
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
750 params["ExceptionValue"],
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
751 params["Traceback"]))
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
752
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
753 def __startJediClient(self, interpreter, idString, clientEnv):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
754 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
755 Private method to start the Jedi client with the given interpreter.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
756
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
757 @param interpreter interpreter to be used for the Jedi client
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
758 @type str
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
759 @param idString id of the client to be started
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
760 @type str
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
761 @param clientEnv dictionary with environment variables to run the
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
762 interpreter with
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
763 @type dict
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
764 @return flag indicating a successful start of the client
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
765 @rtype bool
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
766 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
767 ok = False
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
768
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
769 if interpreter:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
770 client = os.path.join(os.path.dirname(__file__),
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
771 "JediClient.py")
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
772 ok, exitCode = self.startClient(
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
773 interpreter, client,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
774 [Globals.getPythonLibraryDirectory()],
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
775 idString=idString, environment=clientEnv)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
776 if not ok:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
777 if exitCode == 42:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
778 self.__ui.appendToStderr("JediServer: " + self.tr(
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
779 "The jedi and/or parso library is not installed.\n"
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
780 ))
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
781 else:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
782 self.__ui.appendToStderr("JediServer: " + self.tr(
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
783 "'{0}' is not supported because the configured"
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
784 " interpreter could not be started.\n"
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
785 ).format(idString))
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
786 else:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
787 self.__ui.appendToStderr("JediServer: " + self.tr(
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
788 "'{0}' is not supported because no suitable interpreter is"
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
789 " configured.\n"
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
790 ).format(idString))
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
791
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
792 return ok
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
793
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
794 def __ensureActive(self, idString):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
795 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
796 Private method to ensure, that the requested client is active.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
797
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
798 A non-active client will be started.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
799
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
800 @param idString id of the client to be checked
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
801 @type str
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
802 @return flag indicating an active client
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
803 @rtype bool
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
804 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
805 ok = idString in self.connectionNames()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
806 if not ok:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
807 # client is not running
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
808 if idString == JediServer.IdProject:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
809 interpreter, clientEnv = self.__interpreterForProject()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
810 else:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
811 interpreter = ""
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
812 venvName = ""
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
813 clientEnv = os.environ.copy()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
814 if "PATH" in clientEnv:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
815 clientEnv["PATH"] = self.__ui.getOriginalPathString()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
816 # new code using virtual environments
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
817 venvManager = ericApp().getObject("VirtualEnvManager")
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
818 if idString == "Python3":
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
819 venvName = Preferences.getDebugger("Python3VirtualEnv")
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
820 if not venvName:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
821 venvName, _ = venvManager.getDefaultEnvironment()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
822 if venvName:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
823 interpreter = venvManager.getVirtualenvInterpreter(
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
824 venvName)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
825 execPath = venvManager.getVirtualenvExecPath(venvName)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
826
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
827 # build a suitable environment
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
828 if execPath:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
829 if "PATH" in clientEnv:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
830 clientEnv["PATH"] = os.pathsep.join(
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
831 [execPath, clientEnv["PATH"]])
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
832 else:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
833 clientEnv["PATH"] = execPath
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
834 if interpreter:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
835 ok = self.__startJediClient(interpreter, idString, clientEnv)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
836 else:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
837 ok = False
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
838 return ok
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
839
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
840 def __interpreterForProject(self):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
841 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
842 Private method to determine the interpreter for the current project and
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
843 the environment to run it.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
844
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
845 @return tuple containing the interpreter of the current project and the
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
846 environment variables
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
847 @rtype tuple of (str, dict)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
848 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
849 projectLanguage = self.__ericProject.getProjectLanguage()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
850 interpreter = ""
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
851 clientEnv = os.environ.copy()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
852 if "PATH" in clientEnv:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
853 clientEnv["PATH"] = self.__ui.getOriginalPathString()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
854
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
855 if (projectLanguage.startswith("Python") or
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
856 projectLanguage == "MicroPython"):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
857 # new code using virtual environments
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
858 venvManager = ericApp().getObject("VirtualEnvManager")
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
859
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
860 # get virtual environment from project first
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
861 venvName = self.__ericProject.getDebugProperty("VIRTUALENV")
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
862 if not venvName:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
863 # get it from debugger settings next
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
864 if projectLanguage in ("Python3", "MicroPython", "Cython"):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
865 venvName = Preferences.getDebugger("Python3VirtualEnv")
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
866 if not venvName:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
867 venvName, _ = venvManager.getDefaultEnvironment()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
868 else:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
869 venvName = ""
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
870 if venvName:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
871 interpreter = venvManager.getVirtualenvInterpreter(
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
872 venvName)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
873 execPath = venvManager.getVirtualenvExecPath(venvName)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
874
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
875 # build a suitable environment
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
876 if execPath:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
877 if "PATH" in clientEnv:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
878 clientEnv["PATH"] = os.pathsep.join(
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
879 [execPath, clientEnv["PATH"]])
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
880 else:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
881 clientEnv["PATH"] = execPath
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
882
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
883 return interpreter, clientEnv
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
884
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
885 @pyqtSlot()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
886 def handleNewConnection(self):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
887 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
888 Public slot for new incoming connections from a client.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
889 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
890 super().handleNewConnection()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
891
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
892 self.__updateEditorLanguageMapping()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
893
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
894 def activate(self):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
895 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
896 Public method to activate the Jedi server.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
897 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
898 self.__documentationViewer = self.__ui.documentationViewer()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
899 if self.__documentationViewer is not None:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
900 self.__documentationViewer.registerProvider(
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
901 "jedi", self.tr("Jedi"), self.requestCodeDocumentation,
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
902 self.isSupportedLanguage)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
903
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
904 self.__ericProject.projectOpened.connect(self.__projectOpened)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
905 self.__ericProject.projectClosed.connect(self.__projectClosed)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
906
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
907 def deactivate(self):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
908 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
909 Public method to deactivate the code assist server.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
910 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
911 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
912 Public method to shut down the code assist server.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
913 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
914 if self.__documentationViewer is not None:
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
915 self.__documentationViewer.unregisterProvider("jedi")
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
916
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
917 with contextlib.suppress(TypeError):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
918 self.__ericProject.projectOpened.disconnect(self.__projectOpened)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
919 self.__ericProject.projectClosed.disconnect(self.__projectClosed)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
920
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
921 self.stopAllClients()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
922
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
923 @pyqtSlot()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
924 def __projectOpened(self):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
925 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
926 Private slot to handle the projectOpened signal.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
927 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
928 self.__ensureActive(JediServer.IdProject)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
929 self.sendJson("openProject", {
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
930 "ProjectPath": self.__ericProject.getProjectPath(),
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
931 }, idString=JediServer.IdProject)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
932
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
933 @pyqtSlot()
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
934 def __projectClosed(self):
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
935 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
936 Private slot to handle the projectClosed signal.
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
937 """
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
938 self.__ensureActive(JediServer.IdProject)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
939 self.sendJson("closeProject", {}, idString=JediServer.IdProject)
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
940
1d66b6af60ed Jedi: integrated the Assistant Jedi plugin as a fixed part of eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
941 self.stopClient(idString=JediServer.IdProject)

eric ide

mercurial