RefactoringRope/RefactoringClient.py

branch
server_client_variant
changeset 175
72a1d9030d67
parent 174
04583cac110f
child 176
117d86025a5c
--- a/RefactoringRope/RefactoringClient.py	Tue Sep 19 19:40:18 2017 +0200
+++ b/RefactoringRope/RefactoringClient.py	Wed Sep 20 19:49:26 2017 +0200
@@ -62,6 +62,7 @@
             "CalculateRenameChanges": self.__calculateRenameChanges,
             "CalculateChangeOccurrencesChanges":
                 self.__calculateChangeOccurrencesChanges,
+            "CalculateExtractChanges": self.__calculateExtractChanges,
         }
         
         from FileSystemCommands import RefactoringClientFileSystemCommands
@@ -599,8 +600,8 @@
     
     def __calculateChangeOccurrencesChanges(self, params):
         """
-        Private method to calculate the rename changes based on the parameters
-        sent by the server.
+        Private method to calculate the 'Change Occurrences' changes based on
+        the parameters sent by the server.
         
         @param params dictionary containing the method parameters sent by
             the server
@@ -646,6 +647,63 @@
         result.update(errorDict)
         
         self.sendJson("Changes", result)
+    
+    def __calculateExtractChanges(self, params):
+        """
+        Private method to calculate the 'Extract' 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"]
+        startOffset = params["StartOffset"]
+        endOffset = params["EndOffset"]
+        kind = params["Kind"]
+        newName = params["NewName"]
+        similar = params["Similar"]
+        global_ = params["Global"]
+        
+        errorDict = {}
+        changes = []
+        result = {
+            "ChangeGroup": changeGroup,
+            "Title": title,
+        }
+        
+        import rope.refactor.extract
+        resource = rope.base.libutils.path_to_resource(
+            self.__project, filename)
+        try:
+            if kind == "variable":
+                extractor = rope.refactor.extract.ExtractVariable(
+                    self.__project, resource, startOffset, endOffset)
+            elif kind == "method":
+                extractor = rope.refactor.extract.ExtractMethod(
+                    self.__project, resource, startOffset, endOffset)
+            else:
+                raise Exception("Invalid extraction kind <{0}>.".format(kind))
+        except Exception as err:
+            errorDict = self.__handleRopeError(err)
+            result.update(errorDict)
+            self.sendJson("Changes", result)
+            return
+        
+        try:
+            changes = extractor.get_changes(
+                newName, similar=similar, global_=global_)
+        except Exception as err:
+            errorDict = self.__handleRopeError(err)
+        
+        self.__changes[changeGroup] = changes
+        
+        result["Subcommand"] = "ChangesCalculated"
+        result.update(errorDict)
+        
+        self.sendJson("Changes", result)
 
 if __name__ == '__main__':
     if len(sys.argv) != 4:

eric ide

mercurial