RefactoringRope/RefactoringClient.py

branch
server_client_variant
changeset 184
4a806271f0b9
parent 183
bac69c80d5f4
child 185
3336637a673b
--- 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__':

eric ide

mercurial