mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
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:
committed by
intellij-monorepo-bot
parent
87442acbd1
commit
c98d45b58b
@@ -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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user