diff -r 99dfcefcc4d8 -r d29c775b8bd7 eric7/JediInterface/JediClient.py --- a/eric7/JediInterface/JediClient.py Mon Oct 04 19:59:59 2021 +0200 +++ b/eric7/JediInterface/JediClient.py Tue Oct 05 18:13:40 2021 +0200 @@ -42,7 +42,6 @@ super().__init__(host, port, idString) # TODO: add additional methods for these topics - # - rename variable # - extract function # - extract variable # - inline variable @@ -58,6 +57,8 @@ "gotoReferences": self.__getReferences, "renameVariable": self.__renameVariable, + "extractVariable": self.__extractVariable, + "inlineVariable": self.__inlineVariable, "applyRefactoring": self.__applyRefactoring, "cancelRefactoring": self.__cancelRefactoring, } @@ -444,7 +445,79 @@ } result.update(errorDict) - self.sendJson("RenameVariableDiff", result) + self.sendJson("RefactoringDiff", result) + + def __extractVariable(self, params): + """ + Private method to extract a statement to a new variable. + + @param params dictionary containing the method parameters + @type dict + """ + filename = params["FileName"] + source = params["Source"] + line = params["Line"] + index = params["Index"] + endLine = params["EndLine"] + endIndex = params["EndIndex"] + uid = params["Uuid"] + newName = params["NewName"] + + errorDict = {} + diff = "" + + script = jedi.Script(source, path=filename, project=self.__project) + + try: + refactoring = script.extract_variable( + line, index, new_name=newName, + until_line=endLine, until_column=endIndex + ) + self.__refactorings[uid] = refactoring + diff = refactoring.get_diff() + except SuppressedException as err: + errorDict = self.__handleError(err) + + result = { + "Diff": diff, + "Uuid": uid, + } + result.update(errorDict) + + self.sendJson("RefactoringDiff", result) + + def __inlineVariable(self, params): + """ + Private method to inline a variable statement. + + @param params dictionary containing the method parameters + @type dict + """ + filename = params["FileName"] + source = params["Source"] + line = params["Line"] + index = params["Index"] + uid = params["Uuid"] + + errorDict = {} + diff = "" + + script = jedi.Script(source, path=filename, project=self.__project) + + try: + refactoring = script.inline(line, index) + self.__refactorings[uid] = refactoring + diff = refactoring.get_diff() + except SuppressedException as err: + errorDict = self.__handleError(err) + + result = { + "Diff": diff, + "Uuid": uid, + } + result.update(errorDict) + + self.sendJson("RefactoringDiff", result) def __applyRefactoring(self, params): """