Python: introduce failure as a sugar over Result.failure(Throwable(userVisibleText))

GitOrigin-RevId: cefb5234d830f4e306e385161dd07d35eb12989b
This commit is contained in:
Ilya.Kazakevich
2024-09-11 19:37:53 +02:00
committed by intellij-monorepo-bot
parent 1760e006dc
commit 6a9aebe3e6
4 changed files with 16 additions and 5 deletions

View File

@@ -29,6 +29,7 @@ import com.intellij.pycharm.community.ide.impl.configuration.PySdkConfigurationC
import com.intellij.ui.IdeBorderFactory
import com.intellij.ui.components.JBLabel
import com.intellij.util.ui.JBUI
import com.jetbrains.extensions.failure
import com.jetbrains.python.PyBundle
import com.jetbrains.python.PySdkBundle
import com.jetbrains.python.packaging.PyPackageManager
@@ -59,7 +60,7 @@ class PyRequirementsTxtOrSetupPySdkConfiguration : PyProjectSdkConfigurationExte
val data = askForEnvData(module, existingSdks, source)
if (data == null) {
return Result.failure(Throwable("askForEnvData is null"))
return failure("askForEnvData is null")
}
val (location, chosenBaseSdk, requirementsTxtOrSetupPy) = data

View File

@@ -0,0 +1,8 @@
package com.jetbrains.extensions
import com.intellij.openapi.util.NlsSafe
/**
* [Result] failure with user-readable error
*/
fun <T> failure(error: @NlsSafe String): Result<T> = Result.failure(Throwable(error))

View File

@@ -45,6 +45,7 @@ import com.intellij.openapi.vfs.VfsUtil
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.util.PathUtil
import com.intellij.webcore.packaging.PackagesNotificationPanel
import com.jetbrains.extensions.failure
import com.jetbrains.python.PyBundle
import com.jetbrains.python.packaging.ui.PyPackageManagementService
import com.jetbrains.python.psi.LanguageLevel
@@ -272,18 +273,18 @@ internal fun PyDetectedSdk.setupAssociatedLogged(existingSdks: List<Sdk>, associ
fun PyDetectedSdk.setupAssociated(existingSdks: List<Sdk>, associatedModulePath: String?, doAssociate: Boolean): Result<Sdk> {
if (!sdkSeemsValid) {
return Result.failure(Throwable("sdk is not valid"))
return failure("sdk is not valid")
}
val homePath = this.homePath
if (homePath == null) {
// e.g. directory is not there anymore
return Result.failure(Throwable("homePath is null"))
return failure("homePath is null")
}
val homeDir = this.homeDirectory
if (homeDir == null) {
return Result.failure(Throwable("homeDir is null"))
return failure("homeDir is null")
}
val suggestedName = if (doAssociate) {

View File

@@ -7,6 +7,7 @@ import com.intellij.openapi.diagnostic.logger
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread
import com.jetbrains.env.PyEnvTestCase
import com.jetbrains.env.PyEnvTestSettings
import com.jetbrains.extensions.failure
import com.jetbrains.python.packaging.findCondaExecutableRelativeToEnv
import com.jetbrains.python.sdk.PythonSdkUtil
import com.jetbrains.python.sdk.VirtualEnvReader
@@ -42,7 +43,7 @@ sealed class PythonType<T : Any>(private val tag: @NonNls String) {
VirtualEnvReader.Instance.findPythonInPythonRoot(envDir)
?: error("Can't find python binary in $envDir"), envDir)) // This is a misconfiguration, hence an error
}
?: Result.failure(Throwable("No python found. See ${PyEnvTestSettings::class} class for more info"))
?: failure("No python found. See ${PyEnvTestSettings::class} class for more info")
protected abstract suspend fun pythonPathToEnvironment(pythonBinary: PathToPythonBinary, envDir: Path): Pair<T, AutoCloseable>