PY-84135 Revert "PY-81854 Introduce UvRunConfigurationProducer to support run via uv run for UV SDKs"

This reverts commit 1a456731fcea42ad2f374b3baa90a3bbf058ca1f.


Merge-request: IJ-MR-175388
Merged-by: Timur Malanin <timur.malanin@jetbrains.com>

GitOrigin-RevId: f023ddab144e0d88202f27ae23a031fa67f76715
This commit is contained in:
Timur Malanin
2025-09-12 10:47:38 +00:00
committed by intellij-monorepo-bot
parent 87442acbd1
commit c98d45b58b
3 changed files with 5 additions and 123 deletions
@@ -677,7 +677,6 @@
<!-- uv -->
<configurationType implementation="com.jetbrains.python.sdk.uv.run.UvRunConfigurationType"/>
<runConfigurationProducer implementation="com.jetbrains.python.sdk.uv.run.UvRunConfigurationProducer"/>
</extensions>
<extensionPoints>
@@ -9,7 +9,6 @@ import com.intellij.execution.runners.ExecutionEnvironment
import com.intellij.openapi.options.SettingsEditor
import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.util.NlsActions
import com.intellij.openapi.util.NlsSafe
import com.intellij.util.xmlb.XmlSerializer
import com.jetbrains.python.PyBundle
@@ -34,7 +33,7 @@ enum class UvRunType {
@ApiStatus.Internal
data class UvRunConfigurationOptions(
var runType: UvRunType = UvRunType.SCRIPT,
@NlsActions.ActionText var scriptOrModule: String = "",
var scriptOrModule: String = "",
var args: List<String> = listOf(),
var env: Map<String, String> = mapOf(),
var checkSync: Boolean = true,
@@ -42,18 +41,18 @@ data class UvRunConfigurationOptions(
var uvArgs: List<String> = listOf()
) {
val uvSdk: Sdk?
get() = uvSdkKey?.let { PythonSdkUtil.findSdkByKey(it) }
get() = uvSdkKey?.let {PythonSdkUtil.findSdkByKey(it)}
val workingDirectory: Path?
get() = (uvSdk?.sdkAdditionalData as? UvSdkAdditionalData)?.uvWorkingDirectory
?: tryResolvePath(uvSdk?.associatedModulePath)
?: tryResolvePath(uvSdk?.associatedModulePath)
}
@ApiStatus.Internal
class UvRunConfiguration(
project: Project,
factory: ConfigurationFactory,
): AbstractPythonRunConfiguration<UvRunConfiguration>(project, factory) {
) : AbstractPythonRunConfiguration<UvRunConfiguration>(project, factory) {
var options: UvRunConfigurationOptions = UvRunConfigurationOptions(
uvSdkKey = module?.pythonSdk?.name ?: project.pythonSdk?.name,
)
@@ -63,7 +62,7 @@ class UvRunConfiguration(
override fun getState(
executor: Executor,
environment: ExecutionEnvironment,
): RunProfileState =
): RunProfileState? =
UvRunConfigurationState(this, environment, project)
override fun readExternal(element: Element) {
@@ -83,21 +82,6 @@ class UvRunConfiguration(
override fun getSdk(): Sdk? {
return options.uvSdk
}
override fun suggestedName(): String? {
return when (options.runType) {
UvRunType.SCRIPT -> {
val path = options.scriptOrModule
if (path.isBlank()) null else fileNameFromPath(path)
}
UvRunType.MODULE -> {
val moduleName = options.scriptOrModule
moduleName.ifBlank { null }
}
}
}
private fun fileNameFromPath(path: String): @NlsSafe String = Path.of(path).fileName.toString()
}
@ApiStatus.Internal
@@ -1,101 +0,0 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.uv.run
import com.intellij.execution.Location
import com.intellij.execution.actions.ConfigurationContext
import com.intellij.execution.actions.ConfigurationFromContext
import com.intellij.execution.actions.LazyRunConfigurationProducer
import com.intellij.execution.configurations.ConfigurationFactory
import com.intellij.execution.configurations.ConfigurationTypeUtil
import com.intellij.openapi.module.Module
import com.intellij.openapi.module.ModuleUtilCore
import com.intellij.openapi.project.DumbAware
import com.intellij.openapi.util.Ref
import com.intellij.openapi.util.text.StringUtil
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.intellij.testFramework.LightVirtualFile
import com.jetbrains.python.PythonFileType
import com.jetbrains.python.PythonLanguage
import com.jetbrains.python.psi.types.TypeEvalContext
import com.jetbrains.python.run.PythonRunConfigurationProducer
import com.jetbrains.python.run.RunnableScriptFilter
import com.jetbrains.python.sdk.pythonSdk
import com.jetbrains.python.sdk.uv.isUv
internal class UvRunConfigurationProducer : LazyRunConfigurationProducer<UvRunConfiguration>(), DumbAware {
override fun getConfigurationFactory(): ConfigurationFactory {
val type = ConfigurationTypeUtil.findConfigurationType(UvRunConfigurationType::class.java)
return type.configurationFactories.first()
}
override fun setupConfigurationFromContext(configuration: UvRunConfiguration, context: ConfigurationContext, sourceElement: Ref<PsiElement>): Boolean {
val location: Location<*> = context.location ?: return false
val script: PsiFile = location.psiElement.containingFile ?: return false
if (!isAvailable(location, script)) return false
val module: Module? = ModuleUtilCore.findModuleForPsiElement(script)
val uvSdk = module?.pythonSdk?.takeIf { it.isUv } ?: context.project.pythonSdk?.takeIf { it.isUv }
if (uvSdk == null) return false
val vFile: VirtualFile = script.virtualFile ?: return false
configuration.options = configuration.options.copy(
runType = UvRunType.SCRIPT,
scriptOrModule = vFile.path,
uvSdkKey = uvSdk.name,
)
val parent = vFile.parent
if (parent != null && StringUtil.isEmpty(configuration.workingDirectory)) {
configuration.workingDirectory = parent.path
}
if (module != null) {
configuration.isUseModuleSdk = true
configuration.module = module
}
configuration.setGeneratedName()
return true
}
override fun isConfigurationFromContext(configuration: UvRunConfiguration, context: ConfigurationContext): Boolean {
val location: Location<*> = context.location ?: return false
val script: PsiFile = location.psiElement.containingFile ?: return false
if (!isAvailable(location, script)) return false
val vFile: VirtualFile = script.virtualFile ?: return false
if (vFile is LightVirtualFile) return false
val uvSdk = (ModuleUtilCore.findModuleForPsiElement(script))?.pythonSdk?.takeIf { it.isUv }
?: context.project.pythonSdk?.takeIf { it.isUv }
?: return false
return configuration.options.scriptOrModule == vFile.path && configuration.options.uvSdkKey == uvSdk.name
}
override fun isPreferredConfiguration(self: ConfigurationFromContext, other: ConfigurationFromContext): Boolean {
return other.isProducedBy(PythonRunConfigurationProducer::class.java)
}
override fun shouldReplace(self: ConfigurationFromContext, other: ConfigurationFromContext): Boolean {
return other.isProducedBy(PythonRunConfigurationProducer::class.java)
}
private fun isAvailable(location: Location<*>, script: PsiFile?): Boolean {
if (script == null || script.fileType != PythonFileType.INSTANCE || !script.viewProvider.baseLanguage.isKindOf(PythonLanguage.INSTANCE)) {
return false
}
val module = ModuleUtilCore.findModuleForPsiElement(script)
if (module != null) {
for (f in RunnableScriptFilter.EP_NAME.extensionList) {
if (f.isRunnableScript(script, module, location, TypeEvalContext.userInitiated(location.project, null))) {
return false
}
}
}
return true
}
}