@@ -5,13 +5,23 @@ import cc.unitmesh.devti.provider.AutoTestService
5
5
import cc.unitmesh.devti.provider.context.TestFileContext
6
6
import cc.unitmesh.rust.context.RustClassContextBuilder
7
7
import cc.unitmesh.rust.context.RustMethodContextBuilder
8
+ import com.intellij.execution.RunManager
9
+ import com.intellij.execution.configurations.RunConfiguration
8
10
import com.intellij.execution.configurations.RunProfile
9
11
import com.intellij.openapi.application.ReadAction
12
+ import com.intellij.openapi.application.runReadAction
10
13
import com.intellij.openapi.project.Project
14
+ import com.intellij.openapi.project.guessProjectDir
15
+ import com.intellij.openapi.vfs.VirtualFile
11
16
import com.intellij.psi.PsiElement
12
17
import com.intellij.psi.PsiFile
13
18
import com.intellij.psi.util.PsiTreeUtil
19
+ import org.rust.cargo.project.model.cargoProjects
20
+ import org.rust.cargo.project.workspace.CargoWorkspace
14
21
import org.rust.cargo.runconfig.command.CargoCommandConfiguration
22
+ import org.rust.cargo.runconfig.command.CargoCommandConfigurationType
23
+ import org.rust.cargo.runconfig.mergeWithDefault
24
+ import org.rust.cargo.toolchain.CargoCommandLine
15
25
import org.rust.lang.RsLanguage
16
26
import org.rust.lang.core.psi.*
17
27
@@ -22,6 +32,24 @@ class RustTestService : AutoTestService() {
22
32
return element.language is RsLanguage
23
33
}
24
34
35
+ override fun createConfiguration (project : Project , virtualFile : VirtualFile ): RunConfiguration ? {
36
+ val pkg = findCargoPackage(project, virtualFile) ? : return null
37
+
38
+ val cmd = CargoCommandLine .forPackage(pkg, " test" , listOf (" --color" , " never" )).copy(emulateTerminal = false )
39
+
40
+ val configurationSetting = RunManager .getInstance(project)
41
+ .createConfiguration(" tests" , CargoCommandConfigurationType .getInstance().factory)
42
+ val configuration = configurationSetting.configuration as CargoCommandConfiguration
43
+ cmd.mergeWithDefault(configuration)
44
+ configuration.setFromCmd(cmd)
45
+
46
+ return configurationSetting.configuration
47
+ }
48
+
49
+ private fun findCargoPackage (project : Project , taskDir : VirtualFile ): CargoWorkspace .Package ? {
50
+ return runReadAction { project.cargoProjects.findPackageForFile(taskDir) }
51
+ }
52
+
25
53
override fun findOrCreateTestFile (sourceFile : PsiFile , project : Project , psiElement : PsiElement ): TestFileContext ? {
26
54
val testable = psiElement is RsImplItem || psiElement is RsFunction
27
55
var elementName = sourceFile.name
0 commit comments