eric7/JediInterface/JediClient.py

branch
eric7
changeset 8669
c26ecdb00a8b
parent 8668
d29c775b8bd7
child 8881
54e42bc2437a
--- a/eric7/JediInterface/JediClient.py	Tue Oct 05 18:13:40 2021 +0200
+++ b/eric7/JediInterface/JediClient.py	Tue Oct 05 19:36:02 2021 +0200
@@ -41,10 +41,6 @@
         """
         super().__init__(host, port, idString)
         
-        # TODO: add additional methods for these topics
-        #       - extract function
-        #       - extract variable
-        #       - inline variable
         self.__methodMapping = {
             "openProject": self.__openProject,
             "closeProject": self.__closeProject,
@@ -59,6 +55,7 @@
             "renameVariable": self.__renameVariable,
             "extractVariable": self.__extractVariable,
             "inlineVariable": self.__inlineVariable,
+            "extractFunction": self.__extractFunction,
             "applyRefactoring": self.__applyRefactoring,
             "cancelRefactoring": self.__cancelRefactoring,
         }
@@ -519,6 +516,45 @@
         
         self.sendJson("RefactoringDiff", result)
     
+    def __extractFunction(self, params):
+        """
+        Private method to extract an expression to a new function.
+        
+        @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_function(
+                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 __applyRefactoring(self, params):
         """
         Private method to apply a refactoring.

eric ide

mercurial