@@ -3,24 +3,51 @@ package cc.unitmesh.python.provider
3
3
import cc.unitmesh.devti.context.ClassContext
4
4
import cc.unitmesh.devti.provider.AutoTestService
5
5
import cc.unitmesh.devti.provider.context.TestFileContext
6
+ import com.intellij.execution.RunManager
7
+ import com.intellij.execution.actions.ConfigurationContext
8
+ import com.intellij.execution.actions.RunConfigurationProducer
9
+ import com.intellij.execution.configurations.RunConfiguration
6
10
import com.intellij.execution.configurations.RunProfile
7
11
import com.intellij.lang.injection.InjectedLanguageManager
8
12
import com.intellij.openapi.editor.Editor
9
13
import com.intellij.openapi.project.Project
14
+ import com.intellij.openapi.vfs.VirtualFile
10
15
import com.intellij.psi.PsiElement
11
16
import com.intellij.psi.PsiFile
17
+ import com.intellij.psi.PsiManager
12
18
import com.intellij.psi.util.PsiTreeUtil
13
19
import com.intellij.psi.util.PsiUtilBase
14
20
import com.jetbrains.python.PythonLanguage
15
21
import com.jetbrains.python.psi.PyClass
22
+ import com.jetbrains.python.psi.PyFile
16
23
import com.jetbrains.python.psi.PyFunction
17
24
import com.jetbrains.python.run.PythonRunConfiguration
25
+ import com.jetbrains.python.run.PythonRunConfigurationProducer
18
26
19
27
class PythonAutoTestService : AutoTestService () {
20
28
override fun isApplicable (element : PsiElement ): Boolean = element.language is PythonLanguage
21
29
22
30
override fun runConfigurationClass (project : Project ): Class <out RunProfile > = PythonRunConfiguration ::class .java
23
31
32
+ override fun createConfiguration (project : Project , virtualFile : VirtualFile ): RunConfiguration ? {
33
+ val psiFile: PyFile = PsiManager .getInstance(project).findFile(virtualFile) as ? PyFile ? : return null
34
+ val runManager = RunManager .getInstance(project)
35
+
36
+ val context = ConfigurationContext (psiFile)
37
+ val configProducer = RunConfigurationProducer .getInstance(
38
+ PythonRunConfigurationProducer ::class .java
39
+ )
40
+ var settings = configProducer.findExistingConfiguration(context)
41
+
42
+ if (settings == null ) {
43
+ val fromContext = configProducer.createConfigurationFromContext(context) ? : return null
44
+ settings = fromContext.configurationSettings
45
+ runManager.setTemporaryConfiguration(settings)
46
+ }
47
+ val configuration = settings.configuration as PythonRunConfiguration
48
+ return configuration
49
+ }
50
+
24
51
fun getElementForTests (project : Project , editor : Editor ): PsiElement ? {
25
52
val element = PsiUtilBase .getElementAtCaret(editor) ? : return null
26
53
val containingFile: PsiFile = element.containingFile ? : return null
0 commit comments