21 # Start-Of-Header |
21 # Start-Of-Header |
22 name = "Refactoring Rope Plugin" |
22 name = "Refactoring Rope Plugin" |
23 author = "Detlev Offenbach <detlev@die-offenbachs.de>" |
23 author = "Detlev Offenbach <detlev@die-offenbachs.de>" |
24 autoactivate = True |
24 autoactivate = True |
25 deactivateable = True |
25 deactivateable = True |
26 version = "6.6.1" |
26 version = "6.7.0" |
27 className = "RefactoringRopePlugin" |
27 className = "RefactoringRopePlugin" |
28 packageName = "RefactoringRope" |
28 packageName = "RefactoringRope" |
29 internalPackages = "rope" |
29 internalPackages = "rope" |
30 shortDescription = "Refactoring using the Rope library." |
30 shortDescription = "Refactoring using the Rope library." |
31 longDescription = """This plug-in implements refactoring functionality""" \ |
31 longDescription = """This plug-in implements refactoring functionality""" \ |
272 @param value the value to be set |
272 @param value the value to be set |
273 """ |
273 """ |
274 Preferences.Prefs.settings.setValue( |
274 Preferences.Prefs.settings.setValue( |
275 self.PreferencesKey + "/" + key, value) |
275 self.PreferencesKey + "/" + key, value) |
276 |
276 |
277 if key in ["CodeAssistEnabled", "CodeAssistCalltipsEnabled", |
277 ## if key in ["CodeAssistEnabled", "CodeAssistCalltipsEnabled", |
278 "MouseClickEnabled"]: |
278 ## "MouseClickEnabled"]: |
279 if value: |
279 ## if value: |
280 if e5App().getObject("Project").isOpen(): |
280 ## for editor in e5App().getObject("ViewManager")\ |
281 for editor in e5App().getObject("ViewManager")\ |
281 ## .getOpenEditors(): |
282 .getOpenEditors(): |
282 ## if editor not in self.__editors: |
283 if editor not in self.__editors: |
283 ## self.__editorOpened(editor) |
284 self.__editorOpened(editor) |
284 ## else: |
285 else: |
285 ## for editor in self.__editors[:]: |
286 for editor in self.__editors[:]: |
286 ## self.__editorClosed(editor) |
287 self.__editorClosed(editor) |
287 if key in ["MouseClickGotoModifiers", "MouseClickGotoButton"]: |
288 elif key in ["MouseClickGotoModifiers", "MouseClickGotoButton"]: |
|
289 for editor in self.__editors: |
288 for editor in self.__editors: |
290 self.__refactoringServer.disconnectEditor(editor) |
289 self.__disconnectMouseClickHandler(editor) |
291 self.__refactoringServer.connectEditor(editor) |
290 self.__connectMouseClickHandler(editor) |
|
291 ## for editor in self.__editors: |
|
292 ## # TODO: change these once mouse click has been moved to code assist |
|
293 ## self.__refactoringServer.disconnectEditor(editor) |
|
294 ## self.__refactoringServer.connectEditor(editor) |
|
295 |
|
296 def __determineLanguage(self): |
|
297 """ |
|
298 Private method to determine the valid language strings. |
|
299 |
|
300 @return list of valid language strings |
|
301 @rtype list of str |
|
302 """ |
|
303 return ["Python", "Python2", "Python3", "Pygments|Python", |
|
304 "Pygments|Python 3"] |
292 |
305 |
293 def __editorOpened(self, editor): |
306 def __editorOpened(self, editor): |
294 """ |
307 """ |
295 Private slot called, when a new editor was opened. |
308 Private slot called, when a new editor was opened. |
296 |
309 |
297 @param editor reference to the new editor |
310 @param editor reference to the new editor |
298 @type QScintilla.Editor.Editor |
311 @type QScintilla.Editor.Editor |
299 """ |
312 """ |
300 self.__connectEditor(editor) |
313 languages = self.__determineLanguage() |
|
314 |
|
315 if editor.getLanguage() in languages: |
|
316 self.__connectEditor(editor) |
301 |
317 |
302 editor.languageChanged.connect(self.__editorLanguageChanged) |
318 editor.languageChanged.connect(self.__editorLanguageChanged) |
303 self.__editors.append(editor) |
319 self.__editors.append(editor) |
304 |
320 |
305 def __editorClosed(self, editor): |
321 def __editorClosed(self, editor): |
320 |
336 |
321 @param language programming language of the editor |
337 @param language programming language of the editor |
322 @type str |
338 @type str |
323 """ |
339 """ |
324 editor = self.sender() |
340 editor = self.sender() |
|
341 languages = self.__determineLanguage() |
325 |
342 |
326 self.__disconnectEditor(editor) |
343 self.__disconnectEditor(editor) |
327 self.__connectEditor(editor) |
344 if language in languages: |
|
345 self.__connectEditor(editor) |
328 |
346 |
329 def __connectEditor(self, editor): |
347 def __connectEditor(self, editor): |
330 """ |
348 """ |
331 Private method to connect an editor. |
349 Private method to connect an editor. |
332 |
350 |
334 @type QScintilla.Editor.Editor |
352 @type QScintilla.Editor.Editor |
335 """ |
353 """ |
336 editor.editorAboutToBeSaved.connect(self.__editorAboutToBeSaved) |
354 editor.editorAboutToBeSaved.connect(self.__editorAboutToBeSaved) |
337 editor.editorSaved.connect(self.__editorSaved) |
355 editor.editorSaved.connect(self.__editorSaved) |
338 |
356 |
339 self.__codeAssistServer.connectEditor(editor) |
357 self.__setAutoCompletionHook(editor) |
340 self.__refactoringServer.connectEditor(editor) |
358 self.__setCalltipsHook(editor) |
|
359 |
|
360 self.__connectMouseClickHandler(editor) |
|
361 ## self.__codeAssistServer.connectEditor(editor) |
|
362 ## # TODO: delete these once mouse click has been moved to code assist |
|
363 ## if e5App().getObject("Project").isOpen(): |
|
364 ## self.__refactoringServer.connectEditor(editor) |
341 |
365 |
342 def __disconnectEditor(self, editor): |
366 def __disconnectEditor(self, editor): |
343 """ |
367 """ |
344 Private method to disconnect an editor. |
368 Private method to disconnect an editor. |
345 |
369 |
351 editor.editorSaved.disconnect(self.__editorSaved) |
375 editor.editorSaved.disconnect(self.__editorSaved) |
352 except TypeError: |
376 except TypeError: |
353 # just ignore it |
377 # just ignore it |
354 pass |
378 pass |
355 |
379 |
356 self.__codeAssistServer.disconnectEditor(editor) |
380 self.__unsetAutoCompletionHook(editor) |
357 self.__refactoringServer.disconnectEditor(editor) |
381 self.__unsetCalltipsHook(editor) |
|
382 |
|
383 self.__disconnectMouseClickHandler(editor) |
|
384 ## self.__codeAssistServer.disconnectEditor(editor) |
|
385 ## # TODO: delete these once mouse click has been moved to code assist |
|
386 ## self.__refactoringServer.disconnectEditor(editor) |
|
387 |
|
388 def __connectMouseClickHandler(self, editor): |
|
389 """ |
|
390 Private method to connect the mouse click handler to an editor. |
|
391 |
|
392 @param editor reference to the editor |
|
393 @type QScintilla.Editor |
|
394 """ |
|
395 if self.getPreferences("MouseClickGotoButton"): |
|
396 editor.setMouseClickHandler( |
|
397 "rope", |
|
398 self.getPreferences("MouseClickGotoModifiers"), |
|
399 self.getPreferences("MouseClickGotoButton"), |
|
400 self.__codeAssistServer.gotoDefinition |
|
401 ) |
|
402 |
|
403 def __disconnectMouseClickHandler(self, editor): |
|
404 """ |
|
405 Private method to disconnect the mouse click handler from an editor. |
|
406 |
|
407 @param editor reference to the editor |
|
408 @type QScintilla.Editor |
|
409 """ |
|
410 editor.removeMouseClickHandlers("rope") |
|
411 |
|
412 def __setAutoCompletionHook(self, editor): |
|
413 """ |
|
414 Private method to set the autocompletion hook. |
|
415 |
|
416 @param editor reference to the editor |
|
417 @type QScintilla.Editor |
|
418 """ |
|
419 try: |
|
420 editor.addCompletionListHook( |
|
421 "rope", self.__codeAssistServer.requestCompletions, True) |
|
422 self.__codeAssistServer.setAsyncCompletions(True) |
|
423 except TypeError: |
|
424 # interface before 17.11 |
|
425 editor.addCompletionListHook( |
|
426 "rope", self.__codeAssistServer.getCompletions) |
|
427 self.__codeAssistServer.setAsyncCompletions(False) |
|
428 |
|
429 def __unsetAutoCompletionHook(self, editor): |
|
430 """ |
|
431 Private method to unset the autocompletion hook. |
|
432 |
|
433 @param editor reference to the editor |
|
434 @type QScintilla.Editor |
|
435 """ |
|
436 editor.removeCompletionListHook("rope") |
|
437 |
|
438 def __setCalltipsHook(self, editor): |
|
439 """ |
|
440 Private method to set the calltip hook. |
|
441 |
|
442 @param editor reference to the editor |
|
443 @type QScintilla.Editor |
|
444 """ |
|
445 editor.addCallTipHook("rope", self.__codeAssistServer.getCallTips) |
|
446 |
|
447 def __unsetCalltipsHook(self, editor): |
|
448 """ |
|
449 Private method to unset the calltip hook. |
|
450 |
|
451 @param editor reference to the editor |
|
452 @type QScintilla.Editor |
|
453 """ |
|
454 editor.removeCallTipHook("rope") |
358 |
455 |
359 def __editorAboutToBeSaved(self, filename): |
456 def __editorAboutToBeSaved(self, filename): |
360 """ |
457 """ |
361 Private slot to get the old contents of the named file. |
458 Private slot to get the old contents of the named file. |
362 |
459 |