Skip to content

Commit 691fff5

Browse files
committed
feat(devins-python): add support for creating Python run configurations #100
1 parent 3c69b77 commit 691fff5

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

pycharm/src/main/kotlin/cc/unitmesh/python/provider/PythonAutoTestService.kt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,51 @@ package cc.unitmesh.python.provider
33
import cc.unitmesh.devti.context.ClassContext
44
import cc.unitmesh.devti.provider.AutoTestService
55
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
610
import com.intellij.execution.configurations.RunProfile
711
import com.intellij.lang.injection.InjectedLanguageManager
812
import com.intellij.openapi.editor.Editor
913
import com.intellij.openapi.project.Project
14+
import com.intellij.openapi.vfs.VirtualFile
1015
import com.intellij.psi.PsiElement
1116
import com.intellij.psi.PsiFile
17+
import com.intellij.psi.PsiManager
1218
import com.intellij.psi.util.PsiTreeUtil
1319
import com.intellij.psi.util.PsiUtilBase
1420
import com.jetbrains.python.PythonLanguage
1521
import com.jetbrains.python.psi.PyClass
22+
import com.jetbrains.python.psi.PyFile
1623
import com.jetbrains.python.psi.PyFunction
1724
import com.jetbrains.python.run.PythonRunConfiguration
25+
import com.jetbrains.python.run.PythonRunConfigurationProducer
1826

1927
class PythonAutoTestService : AutoTestService() {
2028
override fun isApplicable(element: PsiElement): Boolean = element.language is PythonLanguage
2129

2230
override fun runConfigurationClass(project: Project): Class<out RunProfile> = PythonRunConfiguration::class.java
2331

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+
2451
fun getElementForTests(project: Project, editor: Editor): PsiElement? {
2552
val element = PsiUtilBase.getElementAtCaret(editor) ?: return null
2653
val containingFile: PsiFile = element.containingFile ?: return null

0 commit comments

Comments
 (0)