40 @type str |
40 @type str |
41 """ |
41 """ |
42 super().__init__(host, port, idString) |
42 super().__init__(host, port, idString) |
43 |
43 |
44 # TODO: add additional methods for these topics |
44 # TODO: add additional methods for these topics |
45 # - rename variable |
|
46 # - extract function |
45 # - extract function |
47 # - extract variable |
46 # - extract variable |
48 # - inline variable |
47 # - inline variable |
49 self.__methodMapping = { |
48 self.__methodMapping = { |
50 "openProject": self.__openProject, |
49 "openProject": self.__openProject, |
56 "hoverHelp": self.__getHoverHelp, |
55 "hoverHelp": self.__getHoverHelp, |
57 "gotoDefinition": self.__getAssignment, |
56 "gotoDefinition": self.__getAssignment, |
58 "gotoReferences": self.__getReferences, |
57 "gotoReferences": self.__getReferences, |
59 |
58 |
60 "renameVariable": self.__renameVariable, |
59 "renameVariable": self.__renameVariable, |
|
60 "extractVariable": self.__extractVariable, |
|
61 "inlineVariable": self.__inlineVariable, |
61 "applyRefactoring": self.__applyRefactoring, |
62 "applyRefactoring": self.__applyRefactoring, |
62 "cancelRefactoring": self.__cancelRefactoring, |
63 "cancelRefactoring": self.__cancelRefactoring, |
63 } |
64 } |
64 |
65 |
65 self.__id = idString |
66 self.__id = idString |
442 "Diff": diff, |
443 "Diff": diff, |
443 "Uuid": uid, |
444 "Uuid": uid, |
444 } |
445 } |
445 result.update(errorDict) |
446 result.update(errorDict) |
446 |
447 |
447 self.sendJson("RenameVariableDiff", result) |
448 self.sendJson("RefactoringDiff", result) |
|
449 |
|
450 def __extractVariable(self, params): |
|
451 """ |
|
452 Private method to extract a statement to a new variable. |
|
453 |
|
454 @param params dictionary containing the method parameters |
|
455 @type dict |
|
456 """ |
|
457 filename = params["FileName"] |
|
458 source = params["Source"] |
|
459 line = params["Line"] |
|
460 index = params["Index"] |
|
461 endLine = params["EndLine"] |
|
462 endIndex = params["EndIndex"] |
|
463 uid = params["Uuid"] |
|
464 newName = params["NewName"] |
|
465 |
|
466 errorDict = {} |
|
467 diff = "" |
|
468 |
|
469 script = jedi.Script(source, path=filename, project=self.__project) |
|
470 |
|
471 try: |
|
472 refactoring = script.extract_variable( |
|
473 line, index, new_name=newName, |
|
474 until_line=endLine, until_column=endIndex |
|
475 ) |
|
476 self.__refactorings[uid] = refactoring |
|
477 diff = refactoring.get_diff() |
|
478 except SuppressedException as err: |
|
479 errorDict = self.__handleError(err) |
|
480 |
|
481 result = { |
|
482 "Diff": diff, |
|
483 "Uuid": uid, |
|
484 } |
|
485 result.update(errorDict) |
|
486 |
|
487 self.sendJson("RefactoringDiff", result) |
|
488 |
|
489 def __inlineVariable(self, params): |
|
490 """ |
|
491 Private method to inline a variable statement. |
|
492 |
|
493 @param params dictionary containing the method parameters |
|
494 @type dict |
|
495 """ |
|
496 filename = params["FileName"] |
|
497 source = params["Source"] |
|
498 line = params["Line"] |
|
499 index = params["Index"] |
|
500 uid = params["Uuid"] |
|
501 |
|
502 errorDict = {} |
|
503 diff = "" |
|
504 |
|
505 script = jedi.Script(source, path=filename, project=self.__project) |
|
506 |
|
507 try: |
|
508 refactoring = script.inline(line, index) |
|
509 self.__refactorings[uid] = refactoring |
|
510 diff = refactoring.get_diff() |
|
511 except SuppressedException as err: |
|
512 errorDict = self.__handleError(err) |
|
513 |
|
514 result = { |
|
515 "Diff": diff, |
|
516 "Uuid": uid, |
|
517 } |
|
518 result.update(errorDict) |
|
519 |
|
520 self.sendJson("RefactoringDiff", result) |
448 |
521 |
449 def __applyRefactoring(self, params): |
522 def __applyRefactoring(self, params): |
450 """ |
523 """ |
451 Private method to apply a refactoring. |
524 Private method to apply a refactoring. |
452 |
525 |