eric7/JediInterface/AssistantJedi.py

branch
eric7
changeset 8593
1d66b6af60ed
child 8666
3a62b4009df9
equal deleted inserted replaced
8592:ab8580937d4b 8593:1d66b6af60ed
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2015 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the Jedi assistant plug-in.
8 """
9
10 from PyQt6.QtCore import pyqtSlot, QObject
11
12 import Preferences
13
14
15 class AssistantJedi(QObject):
16 """
17 Class implementing the Jedi assistant interface.
18 """
19 def __init__(self, ui, viewManager, project):
20 """
21 Constructor
22
23 @param ui reference to the user interface object
24 @type UserInterface
25 @param viewManager reference to the viewmanager object
26 @type ViewManager
27 @param project reference to the project object
28 @type Project
29 """
30 super().__init__(ui)
31 self.__ui = ui
32 self.__vm = viewManager
33
34 self.__jediServer = None
35 self.__editors = []
36
37 from .JediServer import JediServer
38 self.__jediServer = JediServer(self.__vm, project, self.__ui)
39 self.__jediServer.activate()
40
41 self.__ui.preferencesChanged.connect(self.__preferencesChanged)
42
43 self.__vm.editorOpenedEd.connect(self.__editorOpened)
44 self.__vm.editorClosedEd.connect(self.__editorClosed)
45
46 @pyqtSlot()
47 def __preferencesChanged(self):
48 """
49 Private slot handling changes of the Disassembly viewer settings.
50 """
51 for editor in self.__editors:
52 self.__disconnectMouseClickHandler(editor)
53 self.__connectMouseClickHandler(editor)
54
55 def __determineLanguage(self):
56 """
57 Private method to determine the valid language strings.
58
59 @return list of valid language strings
60 @rtype list of str
61 """
62 return ["Python3", "MicroPython",
63 "Pygments|Python", "Pygments|Python 2.x",
64 "Cython"]
65
66 def __editorOpened(self, editor):
67 """
68 Private slot called, when a new editor was opened.
69
70 @param editor reference to the new editor
71 @type Editor
72 """
73 languages = self.__determineLanguage()
74
75 if editor.getLanguage() in languages:
76 self.__connectEditor(editor)
77
78 editor.languageChanged.connect(self.__editorLanguageChanged)
79 self.__editors.append(editor)
80
81 def __editorClosed(self, editor):
82 """
83 Private slot called, when an editor was closed.
84
85 @param editor reference to the editor
86 @type Editor
87 """
88 if editor in self.__editors:
89 editor.languageChanged.disconnect(self.__editorLanguageChanged)
90 self.__disconnectEditor(editor)
91 self.__editors.remove(editor)
92
93 def __editorLanguageChanged(self, language):
94 """
95 Private slot to handle the language change of an editor.
96
97 @param language programming language of the editor
98 @type str
99 """
100 editor = self.sender()
101 languages = self.__determineLanguage()
102
103 self.__disconnectEditor(editor)
104 if language in languages:
105 self.__connectEditor(editor)
106
107 def __connectEditor(self, editor):
108 """
109 Private method to connect an editor.
110
111 @param editor reference to the editor
112 @type Editor
113 """
114 self.__setAutoCompletionHook(editor)
115 self.__setCalltipsHook(editor)
116
117 self.__connectMouseClickHandler(editor)
118
119 editor.registerMouseHoverHelpFunction(
120 self.__jediServer.hoverHelp)
121
122 def __disconnectEditor(self, editor):
123 """
124 Private method to disconnect an editor.
125
126 @param editor reference to the editor
127 @type Editor
128 """
129 self.__unsetAutoCompletionHook(editor)
130 self.__unsetCalltipsHook(editor)
131
132 self.__disconnectMouseClickHandler(editor)
133
134 editor.unregisterMouseHoverHelpFunction(
135 self.__jediServer.hoverHelp)
136
137 def __connectMouseClickHandler(self, editor):
138 """
139 Private method to connect the mouse click handler to an editor.
140
141 @param editor reference to the editor
142 @type Editor
143 """
144 if Preferences.getJedi("MouseClickGotoButton"):
145 editor.setMouseClickHandler(
146 "jedi",
147 Preferences.getJedi("MouseClickGotoModifiers"),
148 Preferences.getJedi("MouseClickGotoButton"),
149 self.__jediServer.gotoDefinition
150 )
151
152 def __disconnectMouseClickHandler(self, editor):
153 """
154 Private method to disconnect the mouse click handler from an editor.
155
156 @param editor reference to the editor
157 @type Editor
158 """
159 editor.removeMouseClickHandlers("jedi")
160
161 def __setAutoCompletionHook(self, editor):
162 """
163 Private method to set the autocompletion hook.
164
165 @param editor reference to the editor
166 @type Editor
167 """
168 editor.addCompletionListHook(
169 "jedi", self.__jediServer.requestCompletions, True)
170
171 def __unsetAutoCompletionHook(self, editor):
172 """
173 Private method to unset the autocompletion hook.
174
175 @param editor reference to the editor
176 @type Editor
177 """
178 editor.removeCompletionListHook("jedi")
179
180 def __setCalltipsHook(self, editor):
181 """
182 Private method to set the calltip hook.
183
184 @param editor reference to the editor
185 @type Editor
186 """
187 editor.addCallTipHook("jedi", self.__jediServer.getCallTips)
188
189 def __unsetCalltipsHook(self, editor):
190 """
191 Private method to unset the calltip hook.
192
193 @param editor reference to the editor
194 @type Editor
195 """
196 editor.removeCallTipHook("jedi")

eric ide

mercurial