RefactoringRope/RefactoringClient.py

branch
server_client_variant
changeset 176
117d86025a5c
parent 175
72a1d9030d67
child 178
70b4fb448811
--- a/RefactoringRope/RefactoringClient.py	Wed Sep 20 19:49:26 2017 +0200
+++ b/RefactoringRope/RefactoringClient.py	Thu Sep 21 19:18:51 2017 +0200
@@ -63,6 +63,8 @@
             "CalculateChangeOccurrencesChanges":
                 self.__calculateChangeOccurrencesChanges,
             "CalculateExtractChanges": self.__calculateExtractChanges,
+            "RequestInlineType": self.__requestInlineType,
+            "CalculateInlineChanges": self.__calculateInlineChanges,
         }
         
         from FileSystemCommands import RefactoringClientFileSystemCommands
@@ -536,15 +538,6 @@
         resource = rope.base.libutils.path_to_resource(
             self.__project, filename)
         
-        try:
-            renamer = rope.refactor.rename.Rename(
-                self.__project, resource, offset)
-        except Exception as err:
-            errorDict = self.__handleRopeError(err)
-            result.update(errorDict)
-            self.sendJson("Changes", result)
-            return
-        
         if isLocal:
             resources = [resource]
         else:
@@ -553,6 +546,8 @@
         from ProgressHandle import ProgressHandle
         self.__progressHandle = ProgressHandle(self, title, True)
         try:
+            renamer = rope.refactor.rename.Rename(
+                self.__project, resource, offset)
             changes = renamer.get_changes(
                 newName,
                 resources=resources,
@@ -629,13 +624,6 @@
         try:
             renamer = rope.refactor.rename.ChangeOccurrences(
                 self.__project, resource, offset)
-        except Exception as err:
-            errorDict = self.__handleRopeError(err)
-            result.update(errorDict)
-            self.sendJson("Changes", result)
-            return
-        
-        try:
             changes = renamer.get_changes(
                 newName, only_calls=onlyCalls, reads=reads, writes=writes)
         except Exception as err:
@@ -686,13 +674,6 @@
                     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:
@@ -704,6 +685,97 @@
         result.update(errorDict)
         
         self.sendJson("Changes", result)
+    
+    def __requestInlineType(self, params):
+        """
+        Private method to determine the 'Inline' changes type 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": "InlineType",
+            "ChangeGroup": changeGroup,
+            "Title": title,
+        }
+        
+        import rope.refactor.inline
+        resource = rope.base.libutils.path_to_resource(
+            self.__project, filename)
+        try:
+            inliner = rope.refactor.inline.create_inline(
+                self.__project, resource, offset)
+            result.update({
+                "Name": inliner.name,
+                "Kind": inliner.get_kind(),
+            })
+        except Exception as err:
+            errorDict = self.__handleRopeError(err)
+        
+        result.update(errorDict)
+        
+        self.sendJson("Changes", result)
+    
+    def __calculateInlineChanges(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"]
+        offset = params["Offset"]
+        kind = params["Kind"]
+        
+        errorDict = {}
+        changes = []
+        result = {
+            "ChangeGroup": changeGroup,
+            "Title": title,
+        }
+        
+        import rope.refactor.extract
+        resource = rope.base.libutils.path_to_resource(
+            self.__project, filename)
+        from ProgressHandle import ProgressHandle
+        self.__progressHandle = ProgressHandle(self, title, True)
+        try:
+            inliner = rope.refactor.inline.create_inline(
+                self.__project, resource, offset)
+            if kind == "parameter":
+                opts = {
+                    "in_hierarchy": params["Hierarchy"],
+                }
+            else:
+                opts = {
+                    "remove": params["Remove"],
+                    "only_current": params["OnlyCurrent"],
+                }
+            changes = inliner.get_changes(
+                task_handle=self.__progressHandle, **opts)
+        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__':
     if len(sys.argv) != 4:

eric ide

mercurial