From c98d45b58bb6b5f48f5635ff2d830a66cd5c7bc6 Mon Sep 17 00:00:00 2001 From: Timur Malanin Date: Fri, 12 Sep 2025 10:47:38 +0000 Subject: [PATCH] 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 GitOrigin-RevId: f023ddab144e0d88202f27ae23a031fa67f76715 --- .../intellij.python.community.impl.xml | 1 - .../python/sdk/uv/run/UvRunConfiguration.kt | 26 +---- .../sdk/uv/run/UvRunConfigurationProducer.kt | 101 ------------------ 3 files changed, 5 insertions(+), 123 deletions(-) delete mode 100644 python/src/com/jetbrains/python/sdk/uv/run/UvRunConfigurationProducer.kt diff --git a/python/pluginResources/intellij.python.community.impl.xml b/python/pluginResources/intellij.python.community.impl.xml index 6dcf16be68f8..59aaea2e9d4d 100644 --- a/python/pluginResources/intellij.python.community.impl.xml +++ b/python/pluginResources/intellij.python.community.impl.xml @@ -677,7 +677,6 @@ - diff --git a/python/src/com/jetbrains/python/sdk/uv/run/UvRunConfiguration.kt b/python/src/com/jetbrains/python/sdk/uv/run/UvRunConfiguration.kt index 09390ef85a94..9b4c59f3dc90 100644 --- a/python/src/com/jetbrains/python/sdk/uv/run/UvRunConfiguration.kt +++ b/python/src/com/jetbrains/python/sdk/uv/run/UvRunConfiguration.kt @@ -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 = listOf(), var env: Map = mapOf(), var checkSync: Boolean = true, @@ -42,18 +41,18 @@ data class UvRunConfigurationOptions( var uvArgs: List = 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(project, factory) { +) : AbstractPythonRunConfiguration(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 diff --git a/python/src/com/jetbrains/python/sdk/uv/run/UvRunConfigurationProducer.kt b/python/src/com/jetbrains/python/sdk/uv/run/UvRunConfigurationProducer.kt deleted file mode 100644 index 37c4a3e098c3..000000000000 --- a/python/src/com/jetbrains/python/sdk/uv/run/UvRunConfigurationProducer.kt +++ /dev/null @@ -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(), 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): 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 - } -} \ No newline at end of file