Skip to content

Commit 802d634

Browse files
committed
feat(devins-rsut): add support for creating Rust run configurations #100
1 parent 691fff5 commit 802d634

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

rust/src/main/kotlin/cc/unitmesh/rust/provider/RustTestService.kt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,23 @@ import cc.unitmesh.devti.provider.AutoTestService
55
import cc.unitmesh.devti.provider.context.TestFileContext
66
import cc.unitmesh.rust.context.RustClassContextBuilder
77
import cc.unitmesh.rust.context.RustMethodContextBuilder
8+
import com.intellij.execution.RunManager
9+
import com.intellij.execution.configurations.RunConfiguration
810
import com.intellij.execution.configurations.RunProfile
911
import com.intellij.openapi.application.ReadAction
12+
import com.intellij.openapi.application.runReadAction
1013
import com.intellij.openapi.project.Project
14+
import com.intellij.openapi.project.guessProjectDir
15+
import com.intellij.openapi.vfs.VirtualFile
1116
import com.intellij.psi.PsiElement
1217
import com.intellij.psi.PsiFile
1318
import com.intellij.psi.util.PsiTreeUtil
19+
import org.rust.cargo.project.model.cargoProjects
20+
import org.rust.cargo.project.workspace.CargoWorkspace
1421
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
1525
import org.rust.lang.RsLanguage
1626
import org.rust.lang.core.psi.*
1727

@@ -22,6 +32,24 @@ class RustTestService : AutoTestService() {
2232
return element.language is RsLanguage
2333
}
2434

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+
2553
override fun findOrCreateTestFile(sourceFile: PsiFile, project: Project, psiElement: PsiElement): TestFileContext? {
2654
val testable = psiElement is RsImplItem || psiElement is RsFunction
2755
var elementName = sourceFile.name

0 commit comments

Comments
 (0)