--- a/RefactoringRope/RefactoringClient.py Sat Sep 23 15:20:09 2017 +0200 +++ b/RefactoringRope/RefactoringClient.py Sat Sep 23 16:52:29 2017 +0200 @@ -76,6 +76,8 @@ self.__calculateIntroduceParameterChanges, "CalculateImportsChanges": self.__calculateImportsChanges, "CalculateRestructureChanges": self.__calculateRestructureChanges, + "RequestSignature": self.__requestSignature, + "CalculateSignatureChanges": self.__calculateSignatureChanges, } from FileSystemCommands import RefactoringClientFileSystemCommands @@ -1144,6 +1146,103 @@ result.update(errorDict) self.sendJson("Changes", result) + + def __requestSignature(self, params): + """ + Private method to calculate the 'Signature' based on the parameters + sent by the server. + + @param params dictionary containing the method parameters sent by + the server + @type dict + """ + changeGroup = params["ChangeGroup"] + title = params["Title"] + filename = params["FileName"] + offset = params["Offset"] + + errorDict = {} + result = { + "Subcommand": "Signature", + "ChangeGroup": changeGroup, + "Title": title, + } + + import rope.refactor.change_signature + resource = rope.base.libutils.path_to_resource( + self.__project, filename) + try: + changer = rope.refactor.change_signature.ChangeSignature( + self.__project, resource, offset) + result["DefinitionInfo"] = changer.get_args() + except Exception as err: + errorDict = self.__handleRopeError(err) + + result.update(errorDict) + + self.sendJson("Changes", result) + + def __calculateSignatureChanges(self, params): + """ + Private method to calculate the 'Signature' changes based on the + parameters sent by the server. + + @param params dictionary containing the method parameters sent by + the server + @type dict + """ + changeGroup = params["ChangeGroup"] + title = params["Title"] + filename = params["FileName"] + offset = params["Offset"] + removals = params["Removals"] + additions = params["Additions"] + newOrdering = params["Ordering"] + autodef = params["AutoDef"] + doHierarchy = params["Hierarchy"] + + errorDict = {} + result = { + "Subcommand": "Signature", + "ChangeGroup": changeGroup, + "Title": title, + } + + changers = [] + import rope.refactor.change_signature + # removals + for index in removals: + remover = rope.refactor.change_signature.ArgumentRemover(index) + changers.append(remover) + # additions + for index, name, default, value in additions: + adder = rope.refactor.change_signature.ArgumentAdder( + index, name, default, value) + changers.append(adder) + # new ordering + changers.append(rope.refactor.change_signature.ArgumentReorderer( + newOrdering, autodef=autodef)) + + resource = rope.base.libutils.path_to_resource( + self.__project, filename) + self.__progressHandle = ProgressHandle(self, title, True) + try: + changer = rope.refactor.change_signature.ChangeSignature( + self.__project, resource, offset) + changes = changer.get_changes( + changers, in_hierarchy=doHierarchy, + task_handle=self.__progressHandle) + except Exception as err: + errorDict = self.__handleRopeError(err) + self.__progressHandle.reset() + self.__progressHandle = None + + self.__changes[changeGroup] = changes + + result["Subcommand"] = "ChangesCalculated" + result.update(errorDict) + + self.sendJson("Changes", result) if __name__ == '__main__':