From 434590383d4e0edd3aea2493db17db037cd9b77f Mon Sep 17 00:00:00 2001 From: "Ilya.Kazakevich" Date: Wed, 15 Oct 2025 19:30:57 +0200 Subject: [PATCH] [python] PY-79486: (WIP) Move tools to separate modules to access them from the frontend. We are slowly moving all tools to the separate modules to register them as EP. On the front we might have `ToolId` only. To map it to an icon we will use EP. GitOrigin-RevId: 3cd0ad9f8da4a69739c8f632a6305ddd7c29d62d --- .idea/modules.xml | 1 + build/bazel-generated-file-list.txt | 1 + python/BUILD.bazel | 1 + .../jetbrains/python/icons/PythonIcons.java | 2 - python/ide/impl/BUILD.bazel | 2 + .../intellij.pycharm.community.ide.impl.iml | 1 + .../configuration/PyHatchSdkConfiguration.kt | 6 +- .../configuration/PyPoetrySdkConfiguration.kt | 5 +- .../configuration/PyUvSdkConfiguration.kt | 5 +- python/impl.uv/BUILD.bazel | 26 +++++++ .../uv/icons/PythonCommunityImplUVIcons.java | 19 +++++ .../intellij.python.community.impl.uv.iml | 20 +++++ .../python/community/impl/uv}/expui/uv.svg | 0 .../intellij.python.community.impl.uv.xml | 11 +++ .../projectModel/uv => impl.uv/src}/UvTool.kt | 6 +- .../src}/package-info.java | 2 +- python/intellij.python.community.impl.iml | 1 + python/pluginCore/plugin-content.yaml | 3 + .../pluginCore/resources/META-INF/plugin.xml | 1 + .../intellij.python.community.impl.xml | 13 ++-- python/poetry/BUILD.bazel | 7 +- .../icons/PythonCommunityImplPoetryIcons.java | 19 +++++ .../intellij.python.community.impl.poetry.iml | 6 ++ .../community/impl/poetry/expui}/poetry.svg | 0 .../intellij.python.community.impl.poetry.xml | 6 ++ .../community/impl/poetry/impl}/PoetryTool.kt | 9 ++- .../impl/poetry/impl/package-info.java | 5 ++ python/python-hatch/BUILD.bazel | 2 +- .../python/hatch/icons}/package-info.java | 6 +- python/python-hatch/intellij.python.hatch.iml | 2 +- .../resources/intellij.python.hatch.xml | 3 + .../python/hatch/cli}/package-info.java | 6 +- .../intellij/python/hatch/impl}/HatchTool.kt | 7 +- .../python/hatch/impl}/package-info.java | 6 +- .../python/hatch/runtime}/package-info.java | 6 +- .../hatch/sdk/evolution/package-info.java | 5 ++ .../python/hatch/service/package-info.java | 5 ++ python/python-sdk-ui/BUILD.bazel | 2 + .../python/sdk/ui/icons/PythonSdkUIIcons.java | 3 - .../python-sdk-ui/intellij.python.sdk.ui.iml | 2 + .../python/sdk/ui/expui/tools/hatch.svg | 76 ------------------- .../intellij/python/sdk/ui/expui/tools/uv.svg | 4 - .../resources/intellij.python.sdk.ui.xml | 2 + .../tool/poetry/sdk/PoetryEvoSdkManager.kt | 4 +- .../sdk/ui/evolution/ui/autoconfiguration.kt | 3 +- .../com/jetbrains/python/sdk/add/v2/common.kt | 8 +- .../python/sdk/poetry/PoetrySdkProvider.kt | 3 +- .../python/sdk/poetry/PyPoetrySdkFlavor.kt | 3 +- .../com/jetbrains/python/sdk/poetry/poetry.kt | 2 - .../src/com/jetbrains/python/sdk/uv/UvExt.kt | 3 - .../python/sdk/uv/UvSdkFlavorAndData.kt | 3 +- .../jetbrains/python/sdk/uv/UvSdkProvider.kt | 3 +- .../python/sdk/uv/UvSystemPythonProvider.kt | 2 +- .../sdk/uv/run/UvRunConfigurationType.kt | 3 +- .../uv/sdk/evolution/UvSelectSdkProvider.kt | 44 ++++++----- 55 files changed, 235 insertions(+), 161 deletions(-) create mode 100644 python/impl.uv/BUILD.bazel create mode 100644 python/impl.uv/gen/com/intellij/python/community/impl/uv/icons/PythonCommunityImplUVIcons.java create mode 100644 python/impl.uv/intellij.python.community.impl.uv.iml rename python/{pluginResources/icons/com/jetbrains/pythonCore/python => impl.uv/resources/images/com/intellij/python/community/impl/uv}/expui/uv.svg (100%) create mode 100644 python/impl.uv/resources/intellij.python.community.impl.uv.xml rename python/{src/com/jetbrains/python/projectModel/uv => impl.uv/src}/UvTool.kt (96%) rename python/{src/com/jetbrains/python/projectModel => impl.uv/src}/package-info.java (79%) create mode 100644 python/poetry/gen/com/intellij/python/community/impl/poetry/icons/PythonCommunityImplPoetryIcons.java rename python/{python-sdk-ui/resources/icons/com/intellij/python/sdk/ui/expui/tools => poetry/resources/icons/com/intellij/python/community/impl/poetry/expui}/poetry.svg (100%) rename python/{src/com/jetbrains/python/projectModel/poetry => poetry/src/com/intellij/python/community/impl/poetry/impl}/PoetryTool.kt (80%) create mode 100644 python/poetry/src/com/intellij/python/community/impl/poetry/impl/package-info.java rename python/{src/com/jetbrains/python/projectModel/hatch => python-hatch/gen/com/intellij/python/hatch/icons}/package-info.java (52%) rename python/{src/com/jetbrains/python/projectModel/uv => python-hatch/src/com/intellij/python/hatch/cli}/package-info.java (52%) rename python/{src/com/jetbrains/python/projectModel/hatch => python-hatch/src/com/intellij/python/hatch/impl}/HatchTool.kt (83%) rename python/{src/com/jetbrains/python/projectModel/common => python-hatch/src/com/intellij/python/hatch/impl}/package-info.java (51%) rename python/{src/com/jetbrains/python/projectModel/poetry => python-hatch/src/com/intellij/python/hatch/runtime}/package-info.java (51%) create mode 100644 python/python-hatch/src/com/intellij/python/hatch/sdk/evolution/package-info.java create mode 100644 python/python-hatch/src/com/intellij/python/hatch/service/package-info.java delete mode 100644 python/python-sdk-ui/resources/icons/com/intellij/python/sdk/ui/expui/tools/hatch.svg delete mode 100644 python/python-sdk-ui/resources/icons/com/intellij/python/sdk/ui/expui/tools/uv.svg diff --git a/.idea/modules.xml b/.idea/modules.xml index 1ace0dfb8abe..9b8eb2fc5061 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -1370,6 +1370,7 @@ + diff --git a/build/bazel-generated-file-list.txt b/build/bazel-generated-file-list.txt index fe6e56b03590..46efbf3627a3 100644 --- a/build/bazel-generated-file-list.txt +++ b/build/bazel-generated-file-list.txt @@ -1417,6 +1417,7 @@ python/ide/impl python/ide/impl/intellij.pycharm.community.ide.impl.promotion python/ide/implTraining/intellij.pycharm.community.ide.implTraining python/impl.helperLocator +python/impl.uv python/installer python/intellij.python.community.communityOnly python/intellij.python.ml.features diff --git a/python/BUILD.bazel b/python/BUILD.bazel index d86dedf8f6b9..82bbedc49f0e 100644 --- a/python/BUILD.bazel +++ b/python/BUILD.bazel @@ -355,6 +355,7 @@ jvm_library( "//python/python-sdk-configurator/common", "//python/python-process-output:processOutput", "//platform/xdebugger-impl/shared", + "//python/impl.uv", ], exports = [ "//python/openapi:community", diff --git a/python/gen/com/jetbrains/python/icons/PythonIcons.java b/python/gen/com/jetbrains/python/icons/PythonIcons.java index c5d5f0ca2e59..d0716fb50c2c 100644 --- a/python/gen/com/jetbrains/python/icons/PythonIcons.java +++ b/python/gen/com/jetbrains/python/icons/PythonIcons.java @@ -102,6 +102,4 @@ public final class PythonIcons { @ScheduledForRemoval public static final @NotNull Icon ViewAsImage = load("icons/com/jetbrains/pythonCore/python/expui/viewAsImage.svg", "icons/com/jetbrains/pythonCore/python/viewAsImage.svg", 0, 0); } - - /** 16x16 */ public static final @NotNull Icon UV = load("icons/com/jetbrains/pythonCore/python/expui/uv.svg", -856014559, 0); } diff --git a/python/ide/impl/BUILD.bazel b/python/ide/impl/BUILD.bazel index d52614e7937d..92548c368b5b 100644 --- a/python/ide/impl/BUILD.bazel +++ b/python/ide/impl/BUILD.bazel @@ -70,6 +70,7 @@ jvm_library( "//python/python-sdk-configurator/common", "//python/python-sdk-ui:sdk-ui", "//python/python-exec-service/execService.python", + "//python/impl.uv", ], runtime_deps = ["//python/python-features-trainer:featuresTrainer"], plugins = ["@lib//:compose-plugin"] @@ -147,6 +148,7 @@ jvm_library( "//python/python-sdk-ui:sdk-ui", "//python/python-exec-service/execService.python", "//python/python-exec-service/execService.python:execService.python_test_lib", + "//python/impl.uv", ], plugins = ["@lib//:compose-plugin"] ) diff --git a/python/ide/impl/intellij.pycharm.community.ide.impl.iml b/python/ide/impl/intellij.pycharm.community.ide.impl.iml index 1c56928e0296..a5794f5bcb96 100644 --- a/python/ide/impl/intellij.pycharm.community.ide.impl.iml +++ b/python/ide/impl/intellij.pycharm.community.ide.impl.iml @@ -84,5 +84,6 @@ + \ No newline at end of file diff --git a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyHatchSdkConfiguration.kt b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyHatchSdkConfiguration.kt index 9f5a8b9eede8..12edc186cd3c 100644 --- a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyHatchSdkConfiguration.kt +++ b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyHatchSdkConfiguration.kt @@ -10,13 +10,13 @@ import com.intellij.python.hatch.HatchVirtualEnvironment import com.intellij.python.hatch.PythonVirtualEnvironment import com.intellij.python.hatch.cli.HatchEnvironment import com.intellij.python.hatch.getHatchService -import com.intellij.python.sdk.ui.icons.PythonSdkUIIcons +import com.intellij.python.hatch.impl.HATCH_TOOL_ID +import com.intellij.python.hatch.impl.HATCH_UI_INFO import com.jetbrains.python.PyToolUIInfo import com.jetbrains.python.ToolId import com.jetbrains.python.errorProcessing.PyResult import com.jetbrains.python.getOrLogException import com.jetbrains.python.hatch.sdk.createSdk -import com.jetbrains.python.projectModel.hatch.HATCH_TOOL_ID import com.jetbrains.python.sdk.configuration.* import com.jetbrains.python.util.runWithModalBlockingOrInBackground import org.jetbrains.annotations.ApiStatus @@ -27,7 +27,7 @@ class PyHatchSdkConfiguration : PyProjectTomlConfigurationExtension { private val LOGGER = Logger.getInstance(PyHatchSdkConfiguration::class.java) } - override val toolInfo: PyToolUIInfo = PyToolUIInfo("Hatch", PythonSdkUIIcons.Tools.Hatch) + override val toolInfo: PyToolUIInfo = HATCH_UI_INFO override val toolId: ToolId = HATCH_TOOL_ID override suspend fun checkEnvironmentAndPrepareSdkCreator(module: Module): CreateSdkInfo? = prepareSdkCreator( diff --git a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyPoetrySdkConfiguration.kt b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyPoetrySdkConfiguration.kt index 90123a4ec848..bcde30f3ecb3 100644 --- a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyPoetrySdkConfiguration.kt +++ b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyPoetrySdkConfiguration.kt @@ -12,6 +12,8 @@ import com.intellij.platform.ide.progress.withBackgroundProgress import com.intellij.platform.util.progress.reportRawProgress import com.intellij.pycharm.community.ide.impl.PyCharmCommunityCustomizationBundle import com.intellij.pycharm.community.ide.impl.findEnvOrNull +import com.intellij.python.community.impl.poetry.impl.POETRY_TOOL_ID +import com.intellij.python.community.impl.poetry.impl.POETRY_UI_INFO import com.intellij.python.pyproject.PyProjectToml import com.intellij.python.sdk.ui.icons.PythonSdkUIIcons import com.jetbrains.python.PyBundle @@ -20,7 +22,6 @@ import com.jetbrains.python.ToolId import com.jetbrains.python.errorProcessing.PyResult import com.jetbrains.python.poetry.findPoetryLock import com.jetbrains.python.poetry.getPyProjectTomlForPoetry -import com.jetbrains.python.projectModel.poetry.POETRY_TOOL_ID import com.jetbrains.python.sdk.PythonSdkType import com.jetbrains.python.sdk.basePath import com.jetbrains.python.sdk.configuration.* @@ -42,7 +43,7 @@ class PyPoetrySdkConfiguration : PyProjectTomlConfigurationExtension { private val LOGGER = Logger.getInstance(PyPoetrySdkConfiguration::class.java) } - override val toolInfo: PyToolUIInfo = PyToolUIInfo("Poetry", PythonSdkUIIcons.Tools.Poetry) + override val toolInfo: PyToolUIInfo = POETRY_UI_INFO override val toolId: ToolId = POETRY_TOOL_ID override suspend fun checkEnvironmentAndPrepareSdkCreator(module: Module): CreateSdkInfo? = prepareSdkCreator( diff --git a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyUvSdkConfiguration.kt b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyUvSdkConfiguration.kt index 6fee85b9d902..5641771aa6ca 100644 --- a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyUvSdkConfiguration.kt +++ b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyUvSdkConfiguration.kt @@ -10,6 +10,8 @@ import com.intellij.openapi.util.io.toNioPathOrNull import com.intellij.openapi.vfs.readText import com.intellij.pycharm.community.ide.impl.PyCharmCommunityCustomizationBundle import com.intellij.pycharm.community.ide.impl.findEnvOrNull +import com.intellij.python.community.impl.uv.UV_TOOL_ID +import com.intellij.python.community.impl.uv.UV_UI_INFO import com.intellij.python.pyproject.PyProjectToml import com.intellij.python.pyproject.model.api.SuggestedSdk import com.intellij.python.pyproject.model.api.suggestSdk @@ -19,7 +21,6 @@ import com.jetbrains.python.ToolId import com.jetbrains.python.errorProcessing.PyResult import com.jetbrains.python.getOrLogException import com.jetbrains.python.onSuccess -import com.jetbrains.python.projectModel.uv.UV_TOOL_ID import com.jetbrains.python.sdk.* import com.jetbrains.python.sdk.configuration.* import com.jetbrains.python.sdk.legacy.PythonSdkUtil @@ -40,7 +41,7 @@ class PyUvSdkConfiguration : PyProjectTomlConfigurationExtension { private val existingSdks by lazy { PythonSdkUtil.getAllSdks() } private val context = UserDataHolderBase() - override val toolInfo: PyToolUIInfo = PyToolUIInfo("uv", PythonSdkUIIcons.Tools.UV) + override val toolInfo: PyToolUIInfo = UV_UI_INFO override val toolId: ToolId = UV_TOOL_ID override suspend fun checkEnvironmentAndPrepareSdkCreator(module: Module): CreateSdkInfo? = prepareSdkCreator( diff --git a/python/impl.uv/BUILD.bazel b/python/impl.uv/BUILD.bazel new file mode 100644 index 000000000000..024ebecd2681 --- /dev/null +++ b/python/impl.uv/BUILD.bazel @@ -0,0 +1,26 @@ +### auto-generated section `build intellij.python.community.impl.uv` start +load("@rules_jvm//:jvm.bzl", "jvm_library", "resourcegroup") + +resourcegroup( + name = "impl.uv_resources", + srcs = glob(["resources/**/*"]), + strip_prefix = "resources" +) + +jvm_library( + name = "impl.uv", + module_name = "intellij.python.community.impl.uv", + visibility = ["//visibility:public"], + srcs = glob(["gen/**/*.kt", "gen/**/*.java", "src/**/*.kt", "src/**/*.java", "src/**/*.form"], allow_empty = True), + resources = [":impl.uv_resources"], + deps = [ + "@lib//:kotlin-stdlib", + "//python/python-pyproject:pyproject", + "//python/openapi:community", + "//plugins/toml/core", + "@lib//:jetbrains-annotations", + "//platform/util", + "//platform/core-api:core", + ] +) +### auto-generated section `build intellij.python.community.impl.uv` end \ No newline at end of file diff --git a/python/impl.uv/gen/com/intellij/python/community/impl/uv/icons/PythonCommunityImplUVIcons.java b/python/impl.uv/gen/com/intellij/python/community/impl/uv/icons/PythonCommunityImplUVIcons.java new file mode 100644 index 000000000000..83b24f801c2a --- /dev/null +++ b/python/impl.uv/gen/com/intellij/python/community/impl/uv/icons/PythonCommunityImplUVIcons.java @@ -0,0 +1,19 @@ +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.python.community.impl.uv.icons; + +import com.intellij.ui.IconManager; +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; + +/** + * NOTE THIS FILE IS AUTO-GENERATED + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead + */ +@org.jetbrains.annotations.ApiStatus.Internal +public final class PythonCommunityImplUVIcons { + private static @NotNull Icon load(@NotNull String path, int cacheKey, int flags) { + return IconManager.getInstance().loadRasterizedIcon(path, PythonCommunityImplUVIcons.class.getClassLoader(), cacheKey, flags); + } + /** 16x16 */ public static final @NotNull Icon UV = load("images/com/intellij/python/community/impl/uv/expui/uv.svg", -856014559, 0); +} diff --git a/python/impl.uv/intellij.python.community.impl.uv.iml b/python/impl.uv/intellij.python.community.impl.uv.iml new file mode 100644 index 000000000000..70a54141ead6 --- /dev/null +++ b/python/impl.uv/intellij.python.community.impl.uv.iml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/python/pluginResources/icons/com/jetbrains/pythonCore/python/expui/uv.svg b/python/impl.uv/resources/images/com/intellij/python/community/impl/uv/expui/uv.svg similarity index 100% rename from python/pluginResources/icons/com/jetbrains/pythonCore/python/expui/uv.svg rename to python/impl.uv/resources/images/com/intellij/python/community/impl/uv/expui/uv.svg diff --git a/python/impl.uv/resources/intellij.python.community.impl.uv.xml b/python/impl.uv/resources/intellij.python.community.impl.uv.xml new file mode 100644 index 000000000000..431b17e21191 --- /dev/null +++ b/python/impl.uv/resources/intellij.python.community.impl.uv.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/python/src/com/jetbrains/python/projectModel/uv/UvTool.kt b/python/impl.uv/src/UvTool.kt similarity index 96% rename from python/src/com/jetbrains/python/projectModel/uv/UvTool.kt rename to python/impl.uv/src/UvTool.kt index 4ec12cc634d4..5f5d993d2a78 100644 --- a/python/src/com/jetbrains/python/projectModel/uv/UvTool.kt +++ b/python/impl.uv/src/UvTool.kt @@ -1,9 +1,10 @@ // 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.projectModel.uv +package com.intellij.python.community.impl.uv import com.intellij.openapi.diagnostic.fileLogger import com.intellij.openapi.util.NlsSafe import com.intellij.openapi.util.getPathMatcher +import com.intellij.python.community.impl.uv.icons.PythonCommunityImplUVIcons import com.intellij.python.pyproject.model.spi.ProjectName import com.intellij.python.pyproject.model.spi.ProjectStructureInfo import com.intellij.python.pyproject.model.spi.PyProjectTomlProject @@ -11,7 +12,6 @@ import com.intellij.python.pyproject.model.spi.Tool import com.intellij.util.concurrency.annotations.RequiresBackgroundThread import com.jetbrains.python.PyToolUIInfo import com.jetbrains.python.ToolId -import com.jetbrains.python.sdk.uv.UV_UI_INFO import com.jetbrains.python.venvReader.Directory import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext @@ -26,6 +26,8 @@ import kotlin.io.path.relativeTo @ApiStatus.Internal val UV_TOOL_ID: ToolId = ToolId("uv") +val UV_UI_INFO: PyToolUIInfo = PyToolUIInfo("uv", PythonCommunityImplUVIcons.UV) + internal class UvTool : Tool { override val id: ToolId = UV_TOOL_ID diff --git a/python/src/com/jetbrains/python/projectModel/package-info.java b/python/impl.uv/src/package-info.java similarity index 79% rename from python/src/com/jetbrains/python/projectModel/package-info.java rename to python/impl.uv/src/package-info.java index 8436ba8b8592..e0aec686c1af 100644 --- a/python/src/com/jetbrains/python/projectModel/package-info.java +++ b/python/impl.uv/src/package-info.java @@ -1,5 +1,5 @@ // Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. @ApiStatus.Internal -package com.jetbrains.python.projectModel; +package com.intellij.python.community.impl.uv; import org.jetbrains.annotations.ApiStatus; \ No newline at end of file diff --git a/python/intellij.python.community.impl.iml b/python/intellij.python.community.impl.iml index eae3ef2caa1f..1b389d127b30 100644 --- a/python/intellij.python.community.impl.iml +++ b/python/intellij.python.community.impl.iml @@ -192,5 +192,6 @@ + \ No newline at end of file diff --git a/python/pluginCore/plugin-content.yaml b/python/pluginCore/plugin-content.yaml index fc24a91b5d7e..bc88b7d6028f 100644 --- a/python/pluginCore/plugin-content.yaml +++ b/python/pluginCore/plugin-content.yaml @@ -66,6 +66,9 @@ - name: lib/modules/intellij.python.community.impl.poetry.jar contentModules: - name: intellij.python.community.impl.poetry +- name: lib/modules/intellij.python.community.impl.uv.jar + contentModules: + - name: intellij.python.community.impl.uv - name: lib/modules/intellij.python.community.impl.venv.jar contentModules: - name: intellij.python.community.impl.venv diff --git a/python/pluginCore/resources/META-INF/plugin.xml b/python/pluginCore/resources/META-INF/plugin.xml index ca3b9fb05898..b240da25bfef 100644 --- a/python/pluginCore/resources/META-INF/plugin.xml +++ b/python/pluginCore/resources/META-INF/plugin.xml @@ -38,6 +38,7 @@ The Python plug-in provides smart editing for Python scripts. The feature set of + diff --git a/python/pluginResources/intellij.python.community.impl.xml b/python/pluginResources/intellij.python.community.impl.xml index 96fcb8e1d89e..bb676ec0059d 100644 --- a/python/pluginResources/intellij.python.community.impl.xml +++ b/python/pluginResources/intellij.python.community.impl.xml @@ -10,6 +10,7 @@ + @@ -53,8 +54,10 @@ language="Python" nameKey="INLAY.type.hints" providerId="python.type.inlays"> - \ No newline at end of file diff --git a/python/python-sdk-ui/resources/icons/com/intellij/python/sdk/ui/expui/tools/poetry.svg b/python/poetry/resources/icons/com/intellij/python/community/impl/poetry/expui/poetry.svg similarity index 100% rename from python/python-sdk-ui/resources/icons/com/intellij/python/sdk/ui/expui/tools/poetry.svg rename to python/poetry/resources/icons/com/intellij/python/community/impl/poetry/expui/poetry.svg diff --git a/python/poetry/resources/intellij.python.community.impl.poetry.xml b/python/poetry/resources/intellij.python.community.impl.poetry.xml index 00d4edebec03..441b07296405 100644 --- a/python/poetry/resources/intellij.python.community.impl.poetry.xml +++ b/python/poetry/resources/intellij.python.community.impl.poetry.xml @@ -1,5 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/python/src/com/jetbrains/python/projectModel/poetry/PoetryTool.kt b/python/poetry/src/com/intellij/python/community/impl/poetry/impl/PoetryTool.kt similarity index 80% rename from python/src/com/jetbrains/python/projectModel/poetry/PoetryTool.kt rename to python/poetry/src/com/intellij/python/community/impl/poetry/impl/PoetryTool.kt index 478177148711..6f4c8ee5b1c1 100644 --- a/python/src/com/jetbrains/python/projectModel/poetry/PoetryTool.kt +++ b/python/poetry/src/com/intellij/python/community/impl/poetry/impl/PoetryTool.kt @@ -1,12 +1,13 @@ // 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.projectModel.poetry +package com.intellij.python.community.impl.poetry.impl + import com.intellij.openapi.util.NlsSafe +import com.intellij.python.community.impl.poetry.icons.PythonCommunityImplPoetryIcons import com.intellij.python.pyproject.model.spi.ProjectName import com.intellij.python.pyproject.model.spi.ProjectStructureInfo import com.intellij.python.pyproject.model.spi.PyProjectTomlProject import com.intellij.python.pyproject.model.spi.Tool -import com.intellij.python.sdk.ui.icons.PythonSdkUIIcons import com.jetbrains.python.PyToolUIInfo import com.jetbrains.python.ToolId import com.jetbrains.python.venvReader.Directory @@ -15,11 +16,11 @@ import org.jetbrains.annotations.ApiStatus @ApiStatus.Internal val POETRY_TOOL_ID: ToolId = ToolId("poetry") - +val POETRY_UI_INFO: PyToolUIInfo = PyToolUIInfo("Poetry", PythonCommunityImplPoetryIcons.Poetry) internal class PoetryTool : Tool { override val id: ToolId = POETRY_TOOL_ID - override val ui: PyToolUIInfo = PyToolUIInfo("Poetry", PythonSdkUIIcons.Tools.Poetry) + override val ui: PyToolUIInfo = POETRY_UI_INFO override suspend fun getSrcRoots(toml: TomlTable, projectRoot: Directory): Set = emptySet() diff --git a/python/poetry/src/com/intellij/python/community/impl/poetry/impl/package-info.java b/python/poetry/src/com/intellij/python/community/impl/poetry/impl/package-info.java new file mode 100644 index 000000000000..2c5b27d37ea2 --- /dev/null +++ b/python/poetry/src/com/intellij/python/community/impl/poetry/impl/package-info.java @@ -0,0 +1,5 @@ +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +@Internal +package com.intellij.python.community.impl.poetry.impl; + +import static org.jetbrains.annotations.ApiStatus.Internal; diff --git a/python/python-hatch/BUILD.bazel b/python/python-hatch/BUILD.bazel index 5babe58dc43a..09214fc27989 100644 --- a/python/python-hatch/BUILD.bazel +++ b/python/python-hatch/BUILD.bazel @@ -32,11 +32,11 @@ jvm_library( "//python/openapi:community", "//python/python-exec-service:community-execService", "//python/python-sdk:sdk", - "//python/python-sdk-ui:sdk-ui", "//python/python-pyproject:pyproject", "//libraries/kotlinx/serialization/json", "//libraries/kotlinx/serialization/core", "@lib//:io-github-z4kn4fein-semver-jvm-provided", + "//python/python-sdk-ui:sdk-ui", "//python/python-exec-service/execService.python", ] ) diff --git a/python/src/com/jetbrains/python/projectModel/hatch/package-info.java b/python/python-hatch/gen/com/intellij/python/hatch/icons/package-info.java similarity index 52% rename from python/src/com/jetbrains/python/projectModel/hatch/package-info.java rename to python/python-hatch/gen/com/intellij/python/hatch/icons/package-info.java index 89f9c357a2ae..19c20eb7caae 100644 --- a/python/src/com/jetbrains/python/projectModel/hatch/package-info.java +++ b/python/python-hatch/gen/com/intellij/python/hatch/icons/package-info.java @@ -1,5 +1,5 @@ // Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -@ApiStatus.Internal -package com.jetbrains.python.projectModel.hatch; +@Internal +package com.intellij.python.hatch.icons; -import org.jetbrains.annotations.ApiStatus; \ No newline at end of file +import static org.jetbrains.annotations.ApiStatus.Internal; diff --git a/python/python-hatch/intellij.python.hatch.iml b/python/python-hatch/intellij.python.hatch.iml index 6dd283e0d9a2..24c9cb057a78 100644 --- a/python/python-hatch/intellij.python.hatch.iml +++ b/python/python-hatch/intellij.python.hatch.iml @@ -41,11 +41,11 @@ - + \ No newline at end of file diff --git a/python/python-hatch/resources/intellij.python.hatch.xml b/python/python-hatch/resources/intellij.python.hatch.xml index 6eba614293bf..9ccc2b5e9855 100644 --- a/python/python-hatch/resources/intellij.python.hatch.xml +++ b/python/python-hatch/resources/intellij.python.hatch.xml @@ -13,4 +13,7 @@ order="after CondaEvoProvider" implementation="com.intellij.python.hatch.sdk.evolution.HatchSelectSdkProvider"/> + + + \ No newline at end of file diff --git a/python/src/com/jetbrains/python/projectModel/uv/package-info.java b/python/python-hatch/src/com/intellij/python/hatch/cli/package-info.java similarity index 52% rename from python/src/com/jetbrains/python/projectModel/uv/package-info.java rename to python/python-hatch/src/com/intellij/python/hatch/cli/package-info.java index 6859e8c2241d..bab14718e048 100644 --- a/python/src/com/jetbrains/python/projectModel/uv/package-info.java +++ b/python/python-hatch/src/com/intellij/python/hatch/cli/package-info.java @@ -1,5 +1,5 @@ // Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -@ApiStatus.Internal -package com.jetbrains.python.projectModel.uv; +@Internal +package com.intellij.python.hatch.cli; -import org.jetbrains.annotations.ApiStatus; \ No newline at end of file +import static org.jetbrains.annotations.ApiStatus.Internal; diff --git a/python/src/com/jetbrains/python/projectModel/hatch/HatchTool.kt b/python/python-hatch/src/com/intellij/python/hatch/impl/HatchTool.kt similarity index 83% rename from python/src/com/jetbrains/python/projectModel/hatch/HatchTool.kt rename to python/python-hatch/src/com/intellij/python/hatch/impl/HatchTool.kt index c3ec8165d1da..2596679b7d6d 100644 --- a/python/src/com/jetbrains/python/projectModel/hatch/HatchTool.kt +++ b/python/python-hatch/src/com/intellij/python/hatch/impl/HatchTool.kt @@ -1,12 +1,12 @@ // 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.projectModel.hatch +package com.intellij.python.hatch.impl import com.intellij.openapi.util.NlsSafe +import com.intellij.python.hatch.icons.PythonHatchIcons import com.intellij.python.pyproject.model.spi.ProjectName import com.intellij.python.pyproject.model.spi.ProjectStructureInfo import com.intellij.python.pyproject.model.spi.PyProjectTomlProject import com.intellij.python.pyproject.model.spi.Tool -import com.intellij.python.sdk.ui.icons.PythonSdkUIIcons import com.jetbrains.python.PyToolUIInfo import com.jetbrains.python.ToolId import com.jetbrains.python.venvReader.Directory @@ -15,11 +15,12 @@ import org.jetbrains.annotations.ApiStatus @ApiStatus.Internal val HATCH_TOOL_ID: ToolId = ToolId("hatch") +val HATCH_UI_INFO: PyToolUIInfo = PyToolUIInfo("Hatch", PythonHatchIcons.Logo) internal class HatchTool : Tool { override val id: ToolId = HATCH_TOOL_ID - override val ui: PyToolUIInfo = PyToolUIInfo("Hatch", PythonSdkUIIcons.Tools.Hatch) + override val ui: PyToolUIInfo = HATCH_UI_INFO override suspend fun getSrcRoots(toml: TomlTable, projectRoot: Directory): Set = emptySet() diff --git a/python/src/com/jetbrains/python/projectModel/common/package-info.java b/python/python-hatch/src/com/intellij/python/hatch/impl/package-info.java similarity index 51% rename from python/src/com/jetbrains/python/projectModel/common/package-info.java rename to python/python-hatch/src/com/intellij/python/hatch/impl/package-info.java index 60b076fde051..26fd1bdb46e5 100644 --- a/python/src/com/jetbrains/python/projectModel/common/package-info.java +++ b/python/python-hatch/src/com/intellij/python/hatch/impl/package-info.java @@ -1,5 +1,5 @@ // Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -@ApiStatus.Internal -package com.jetbrains.python.projectModel.common; +@Internal +package com.intellij.python.hatch.impl; -import org.jetbrains.annotations.ApiStatus; \ No newline at end of file +import static org.jetbrains.annotations.ApiStatus.Internal; diff --git a/python/src/com/jetbrains/python/projectModel/poetry/package-info.java b/python/python-hatch/src/com/intellij/python/hatch/runtime/package-info.java similarity index 51% rename from python/src/com/jetbrains/python/projectModel/poetry/package-info.java rename to python/python-hatch/src/com/intellij/python/hatch/runtime/package-info.java index cc9c7ccbea8a..4fd21e63c6b0 100644 --- a/python/src/com/jetbrains/python/projectModel/poetry/package-info.java +++ b/python/python-hatch/src/com/intellij/python/hatch/runtime/package-info.java @@ -1,5 +1,5 @@ // Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -@ApiStatus.Internal -package com.jetbrains.python.projectModel.poetry; +@Internal +package com.intellij.python.hatch.runtime; -import org.jetbrains.annotations.ApiStatus; \ No newline at end of file +import static org.jetbrains.annotations.ApiStatus.Internal; diff --git a/python/python-hatch/src/com/intellij/python/hatch/sdk/evolution/package-info.java b/python/python-hatch/src/com/intellij/python/hatch/sdk/evolution/package-info.java new file mode 100644 index 000000000000..723ec02ec16f --- /dev/null +++ b/python/python-hatch/src/com/intellij/python/hatch/sdk/evolution/package-info.java @@ -0,0 +1,5 @@ +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +@Internal +package com.intellij.python.hatch.sdk.evolution; + +import static org.jetbrains.annotations.ApiStatus.Internal; diff --git a/python/python-hatch/src/com/intellij/python/hatch/service/package-info.java b/python/python-hatch/src/com/intellij/python/hatch/service/package-info.java new file mode 100644 index 000000000000..c8fc032c5cde --- /dev/null +++ b/python/python-hatch/src/com/intellij/python/hatch/service/package-info.java @@ -0,0 +1,5 @@ +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +@Internal +package com.intellij.python.hatch.service; + +import static org.jetbrains.annotations.ApiStatus.Internal; diff --git a/python/python-sdk-ui/BUILD.bazel b/python/python-sdk-ui/BUILD.bazel index 294b05167a8d..d6f74b64adfe 100644 --- a/python/python-sdk-ui/BUILD.bazel +++ b/python/python-sdk-ui/BUILD.bazel @@ -28,6 +28,8 @@ jvm_library( "//libraries/caffeine", "@lib//:io-github-z4kn4fein-semver-jvm", "//python/python-exec-service:community-execService", + "//python/poetry", + "//python/impl.uv", ] ) ### auto-generated section `build intellij.python.sdk.ui` end \ No newline at end of file diff --git a/python/python-sdk-ui/gen/com/intellij/python/sdk/ui/icons/PythonSdkUIIcons.java b/python/python-sdk-ui/gen/com/intellij/python/sdk/ui/icons/PythonSdkUIIcons.java index 1155889fb5cc..bb0331d2d516 100644 --- a/python/python-sdk-ui/gen/com/intellij/python/sdk/ui/icons/PythonSdkUIIcons.java +++ b/python/python-sdk-ui/gen/com/intellij/python/sdk/ui/icons/PythonSdkUIIcons.java @@ -20,9 +20,6 @@ public final class PythonSdkUIIcons { public static final class Tools { /** 16x16 */ public static final @NotNull Icon Anaconda = load("icons/com/intellij/python/sdk/ui/expui/tools/anaconda.svg", 1479605221, 2); - /** 16x16 */ public static final @NotNull Icon Hatch = load("icons/com/intellij/python/sdk/ui/expui/tools/hatch.svg", -958563001, 0); /** 16x16 */ public static final @NotNull Icon Pip = load("icons/com/intellij/python/sdk/ui/expui/tools/pip.svg", 123856126, 0); - /** 16x16 */ public static final @NotNull Icon Poetry = load("icons/com/intellij/python/sdk/ui/expui/tools/poetry.svg", -142471747, 0); - /** 16x16 */ public static final @NotNull Icon UV = load("icons/com/intellij/python/sdk/ui/expui/tools/uv.svg", -883297877, 0); } } diff --git a/python/python-sdk-ui/intellij.python.sdk.ui.iml b/python/python-sdk-ui/intellij.python.sdk.ui.iml index 0652d46da116..225964f4b84e 100644 --- a/python/python-sdk-ui/intellij.python.sdk.ui.iml +++ b/python/python-sdk-ui/intellij.python.sdk.ui.iml @@ -23,5 +23,7 @@ + + \ No newline at end of file diff --git a/python/python-sdk-ui/resources/icons/com/intellij/python/sdk/ui/expui/tools/hatch.svg b/python/python-sdk-ui/resources/icons/com/intellij/python/sdk/ui/expui/tools/hatch.svg deleted file mode 100644 index a1add0e6da4c..000000000000 --- a/python/python-sdk-ui/resources/icons/com/intellij/python/sdk/ui/expui/tools/hatch.svg +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/python/python-sdk-ui/resources/icons/com/intellij/python/sdk/ui/expui/tools/uv.svg b/python/python-sdk-ui/resources/icons/com/intellij/python/sdk/ui/expui/tools/uv.svg deleted file mode 100644 index 203da161c007..000000000000 --- a/python/python-sdk-ui/resources/icons/com/intellij/python/sdk/ui/expui/tools/uv.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/python/python-sdk-ui/resources/intellij.python.sdk.ui.xml b/python/python-sdk-ui/resources/intellij.python.sdk.ui.xml index feb3d5df81d9..8c1a97316468 100644 --- a/python/python-sdk-ui/resources/intellij.python.sdk.ui.xml +++ b/python/python-sdk-ui/resources/intellij.python.sdk.ui.xml @@ -2,6 +2,8 @@ + + diff --git a/python/python-sdk-ui/src/com/intellij/python/sdk/ui/evolution/tool/poetry/sdk/PoetryEvoSdkManager.kt b/python/python-sdk-ui/src/com/intellij/python/sdk/ui/evolution/tool/poetry/sdk/PoetryEvoSdkManager.kt index acbd6bf97edd..4ed42bcbf381 100644 --- a/python/python-sdk-ui/src/com/intellij/python/sdk/ui/evolution/tool/poetry/sdk/PoetryEvoSdkManager.kt +++ b/python/python-sdk-ui/src/com/intellij/python/sdk/ui/evolution/tool/poetry/sdk/PoetryEvoSdkManager.kt @@ -3,6 +3,8 @@ package com.intellij.python.sdk.ui.evolution.tool.poetry.sdk //import com.jetbrains.python.sdk.poetry.PyPoetrySdkAdditionalData import com.intellij.openapi.module.Module import com.intellij.openapi.projectRoots.Sdk +import com.intellij.python.community.impl.poetry.icons.PythonCommunityImplPoetryIcons +import com.intellij.python.community.impl.poetry.impl.POETRY_UI_INFO import com.intellij.python.sdk.ui.evolution.sdk.EvoSdk import com.intellij.python.sdk.ui.evolution.sdk.EvoSdkProvider import com.intellij.python.sdk.ui.icons.PythonSdkUIIcons @@ -17,7 +19,7 @@ internal object PoetryEvoSdkManager { val name = venvName.takeIf { !it.startsWith(module.name.lowercase()) } return EvoSdk( - icon = PythonSdkUIIcons.Tools.Poetry, + icon = PythonCommunityImplPoetryIcons.Poetry, name = name, pythonBinaryPath = pythonBinaryPath, ) diff --git a/python/python-sdk-ui/src/com/intellij/python/sdk/ui/evolution/ui/autoconfiguration.kt b/python/python-sdk-ui/src/com/intellij/python/sdk/ui/evolution/ui/autoconfiguration.kt index 1ccf9668a120..15a6c48a6904 100644 --- a/python/python-sdk-ui/src/com/intellij/python/sdk/ui/evolution/ui/autoconfiguration.kt +++ b/python/python-sdk-ui/src/com/intellij/python/sdk/ui/evolution/ui/autoconfiguration.kt @@ -3,6 +3,7 @@ package com.intellij.python.sdk.ui.evolution.ui import com.intellij.icons.AllIcons import com.intellij.openapi.actionSystem.AnAction import com.intellij.openapi.actionSystem.AnActionEvent +import com.intellij.python.community.impl.uv.icons.PythonCommunityImplUVIcons import com.intellij.python.sdk.ui.PySdkUiBundle import com.intellij.python.sdk.ui.evolution.sdk.EvoModuleSdk import com.intellij.python.sdk.ui.evolution.ui.components.EvoTreeLazyNodeElement @@ -24,7 +25,7 @@ internal val autoSetupWithAIAction = object : AnAction( internal val defaultUvAction = object : AnAction( { PySdkUiBundle.message("evo.sdk.status.bar.popup.shortcuts.uv") }, { "" }, - PythonSdkUIIcons.Tools.UV, + PythonCommunityImplUVIcons.UV, ) { override fun actionPerformed(e: AnActionEvent) { } diff --git a/python/src/com/jetbrains/python/sdk/add/v2/common.kt b/python/src/com/jetbrains/python/sdk/add/v2/common.kt index f07344b92142..17fd9aa54c9e 100644 --- a/python/src/com/jetbrains/python/sdk/add/v2/common.kt +++ b/python/src/com/jetbrains/python/sdk/add/v2/common.kt @@ -29,6 +29,8 @@ import com.intellij.python.community.execService.Args import com.intellij.python.community.execService.BinaryToExec import com.intellij.python.community.execService.ExecService import com.intellij.python.community.execService.execGetStdout +import com.intellij.python.community.impl.poetry.icons.PythonCommunityImplPoetryIcons +import com.intellij.python.community.impl.uv.icons.PythonCommunityImplUVIcons import com.intellij.python.hatch.icons.PythonHatchIcons import com.intellij.ui.dsl.builder.Align import com.intellij.ui.dsl.builder.Panel @@ -46,8 +48,6 @@ import com.jetbrains.python.sdk.flavors.PyFlavorAndData import com.jetbrains.python.sdk.flavors.PyFlavorData import com.jetbrains.python.sdk.flavors.VirtualEnvSdkFlavor import com.jetbrains.python.sdk.pipenv.PIPENV_ICON -import com.jetbrains.python.sdk.poetry.POETRY_ICON -import com.jetbrains.python.sdk.uv.UV_ICON import com.jetbrains.python.statistics.InterpreterTarget import com.jetbrains.python.statistics.PythonInterpreterInstallationIdsHolder.Companion.PYTHON_INSTALLATION_INTERRUPTED import com.jetbrains.python.target.PyTargetAwareAdditionalData @@ -143,9 +143,9 @@ enum class PythonSupportedEnvironmentManagers( ) { VIRTUALENV("sdk.create.custom.virtualenv", PythonIcons.Python.Virtualenv, { true }), CONDA("sdk.create.custom.conda", PythonIcons.Python.Anaconda, { true }), - POETRY("sdk.create.custom.poetry", POETRY_ICON), + POETRY("sdk.create.custom.poetry", PythonCommunityImplPoetryIcons.Poetry), PIPENV("sdk.create.custom.pipenv", PIPENV_ICON), - UV("sdk.create.custom.uv", UV_ICON), + UV("sdk.create.custom.uv", PythonCommunityImplUVIcons.UV), HATCH("sdk.create.custom.hatch", PythonHatchIcons.Logo, { it is FileSystem.Eel }), PYTHON("sdk.create.custom.python", PythonParserIcons.PythonFile, { true }) } diff --git a/python/src/com/jetbrains/python/sdk/poetry/PoetrySdkProvider.kt b/python/src/com/jetbrains/python/sdk/poetry/PoetrySdkProvider.kt index cf08137d6ba2..5b5ee8b4074f 100644 --- a/python/src/com/jetbrains/python/sdk/poetry/PoetrySdkProvider.kt +++ b/python/src/com/jetbrains/python/sdk/poetry/PoetrySdkProvider.kt @@ -3,6 +3,7 @@ package com.jetbrains.python.sdk.poetry import com.intellij.openapi.module.Module import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.projectRoots.SdkAdditionalData +import com.intellij.python.community.impl.poetry.icons.PythonCommunityImplPoetryIcons import com.jetbrains.python.PyBundle import com.jetbrains.python.sdk.PyInterpreterInspectionQuickFixData import com.jetbrains.python.sdk.PySdkProvider @@ -36,7 +37,7 @@ class PoetrySdkProvider : PySdkProvider { override fun getSdkAdditionalText(sdk: Sdk): String? = if (sdk.isPoetry) sdk.versionString else null override fun getSdkIcon(sdk: Sdk): Icon? { - return if (sdk.isPoetry) POETRY_ICON else null + return if (sdk.isPoetry) PythonCommunityImplPoetryIcons.Poetry else null } override fun loadAdditionalDataForSdk(element: Element): SdkAdditionalData? { diff --git a/python/src/com/jetbrains/python/sdk/poetry/PyPoetrySdkFlavor.kt b/python/src/com/jetbrains/python/sdk/poetry/PyPoetrySdkFlavor.kt index aa5953b1cb53..6553ecab24ba 100644 --- a/python/src/com/jetbrains/python/sdk/poetry/PyPoetrySdkFlavor.kt +++ b/python/src/com/jetbrains/python/sdk/poetry/PyPoetrySdkFlavor.kt @@ -1,6 +1,7 @@ // Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.jetbrains.python.sdk.poetry +import com.intellij.python.community.impl.poetry.icons.PythonCommunityImplPoetryIcons import com.jetbrains.python.sdk.flavors.CPythonSdkFlavor import com.jetbrains.python.sdk.flavors.PyFlavorData import com.jetbrains.python.sdk.flavors.PythonFlavorProvider @@ -12,7 +13,7 @@ import javax.swing.Icon */ object PyPoetrySdkFlavor : CPythonSdkFlavor() { - override fun getIcon(): Icon = POETRY_ICON + override fun getIcon(): Icon = PythonCommunityImplPoetryIcons.Poetry override fun getFlavorDataClass(): Class = PyFlavorData.Empty::class.java override fun isValidSdkPath(pathStr: String): Boolean = false diff --git a/python/src/com/jetbrains/python/sdk/poetry/poetry.kt b/python/src/com/jetbrains/python/sdk/poetry/poetry.kt index 453407f29bcb..ceade14760f9 100644 --- a/python/src/com/jetbrains/python/sdk/poetry/poetry.kt +++ b/python/src/com/jetbrains/python/sdk/poetry/poetry.kt @@ -25,8 +25,6 @@ import java.util.regex.Pattern import javax.swing.Icon import kotlin.io.path.pathString -// TODO: Provide a special icon for poetry -val POETRY_ICON: Icon = PythonIcons.Python.Origami @Internal fun suggestedSdkName(basePath: Path): @NlsSafe String = "Poetry (${PathUtil.getFileName(basePath.pathString)})" diff --git a/python/src/com/jetbrains/python/sdk/uv/UvExt.kt b/python/src/com/jetbrains/python/sdk/uv/UvExt.kt index 39b3ddf03598..43eb8a7305b6 100644 --- a/python/src/com/jetbrains/python/sdk/uv/UvExt.kt +++ b/python/src/com/jetbrains/python/sdk/uv/UvExt.kt @@ -42,9 +42,6 @@ internal fun suggestedSdkName(basePath: Path): @NlsSafe String { return "uv (${PathUtil.getFileName(basePath.pathString)})" } -val UV_ICON: Icon = PythonIcons.UV - - suspend fun setupNewUvSdkAndEnv( workingDir: Path, existingSdks: List, diff --git a/python/src/com/jetbrains/python/sdk/uv/UvSdkFlavorAndData.kt b/python/src/com/jetbrains/python/sdk/uv/UvSdkFlavorAndData.kt index a3a996957b14..aced2e4385c9 100644 --- a/python/src/com/jetbrains/python/sdk/uv/UvSdkFlavorAndData.kt +++ b/python/src/com/jetbrains/python/sdk/uv/UvSdkFlavorAndData.kt @@ -1,6 +1,7 @@ // Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.jetbrains.python.sdk.uv +import com.intellij.python.community.impl.uv.icons.PythonCommunityImplUVIcons import com.jetbrains.python.sdk.PythonSdkAdditionalData import com.jetbrains.python.sdk.flavors.CPythonSdkFlavor import com.jetbrains.python.sdk.flavors.PyFlavorData @@ -67,7 +68,7 @@ class UvSdkAdditionalData : PythonSdkAdditionalData { } object UvSdkFlavor : CPythonSdkFlavor() { - override fun getIcon(): Icon = UV_ICON + override fun getIcon(): Icon = PythonCommunityImplUVIcons.UV override fun getFlavorDataClass(): Class = PyFlavorData.Empty::class.java override fun isValidSdkPath(pathStr: String): Boolean { diff --git a/python/src/com/jetbrains/python/sdk/uv/UvSdkProvider.kt b/python/src/com/jetbrains/python/sdk/uv/UvSdkProvider.kt index c4274c077e49..fca35ca5737a 100644 --- a/python/src/com/jetbrains/python/sdk/uv/UvSdkProvider.kt +++ b/python/src/com/jetbrains/python/sdk/uv/UvSdkProvider.kt @@ -4,6 +4,7 @@ package com.jetbrains.python.sdk.uv import com.intellij.openapi.module.Module import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.projectRoots.SdkAdditionalData +import com.intellij.python.community.impl.uv.icons.PythonCommunityImplUVIcons import com.jetbrains.python.PyBundle import com.jetbrains.python.sdk.PyInterpreterInspectionQuickFixData import com.jetbrains.python.sdk.PySdkProvider @@ -33,7 +34,7 @@ class UvSdkProvider : PySdkProvider { override fun getSdkAdditionalText(sdk: Sdk): String? = if (sdk.isUv) sdk.versionString else null override fun getSdkIcon(sdk: Sdk): Icon? { - return if (sdk.isUv) UV_ICON else null + return if (sdk.isUv) PythonCommunityImplUVIcons.UV else null } override fun loadAdditionalDataForSdk(element: Element): SdkAdditionalData? { diff --git a/python/src/com/jetbrains/python/sdk/uv/UvSystemPythonProvider.kt b/python/src/com/jetbrains/python/sdk/uv/UvSystemPythonProvider.kt index 8f5a2afa6a68..18c62e187bee 100644 --- a/python/src/com/jetbrains/python/sdk/uv/UvSystemPythonProvider.kt +++ b/python/src/com/jetbrains/python/sdk/uv/UvSystemPythonProvider.kt @@ -3,6 +3,7 @@ package com.jetbrains.python.sdk.uv import com.intellij.platform.eel.EelApi import com.intellij.platform.eel.provider.localEel +import com.intellij.python.community.impl.uv.UV_UI_INFO import com.intellij.python.community.services.systemPython.SystemPythonProvider import com.jetbrains.python.PyToolUIInfo import com.jetbrains.python.PythonBinary @@ -27,4 +28,3 @@ internal class UvSystemPythonProvider : SystemPythonProvider { override val uiCustomization: PyToolUIInfo = UV_UI_INFO } -internal val UV_UI_INFO = PyToolUIInfo("uv", PythonIcons.UV) diff --git a/python/src/com/jetbrains/python/sdk/uv/run/UvRunConfigurationType.kt b/python/src/com/jetbrains/python/sdk/uv/run/UvRunConfigurationType.kt index ca56f8293faa..9025f346cca3 100644 --- a/python/src/com/jetbrains/python/sdk/uv/run/UvRunConfigurationType.kt +++ b/python/src/com/jetbrains/python/sdk/uv/run/UvRunConfigurationType.kt @@ -3,6 +3,7 @@ package com.jetbrains.python.sdk.uv.run import com.intellij.execution.configurations.ConfigurationTypeBase import com.intellij.openapi.util.NotNullLazyValue +import com.intellij.python.community.impl.uv.icons.PythonCommunityImplUVIcons import com.jetbrains.python.PyBundle import com.jetbrains.python.icons.PythonIcons @@ -13,7 +14,7 @@ internal class UvRunConfigurationType : UV_CONFIGURATION_ID, PyBundle.message("uv.run.configuration.type.display.name"), PyBundle.message("uv.run.configuration.type.description"), - NotNullLazyValue.createValue { PythonIcons.UV }, + NotNullLazyValue.createValue { PythonCommunityImplUVIcons.UV }, ) { init { addFactory(UvRunConfigurationFactory(this)) diff --git a/python/src/com/jetbrains/python/uv/sdk/evolution/UvSelectSdkProvider.kt b/python/src/com/jetbrains/python/uv/sdk/evolution/UvSelectSdkProvider.kt index a86634d47682..158d05947fca 100644 --- a/python/src/com/jetbrains/python/uv/sdk/evolution/UvSelectSdkProvider.kt +++ b/python/src/com/jetbrains/python/uv/sdk/evolution/UvSelectSdkProvider.kt @@ -1,6 +1,7 @@ package com.jetbrains.python.uv.sdk.evolution import com.intellij.openapi.ui.popup.ListSeparator +import com.intellij.python.community.impl.uv.icons.PythonCommunityImplUVIcons import com.jetbrains.python.Result import com.jetbrains.python.errorProcessing.PyResult import com.jetbrains.python.sdk.basePath @@ -22,27 +23,30 @@ import kotlin.collections.component2 private class UvSelectSdkProvider() : EvoSelectSdkProvider { - override fun getTreeElement(evoModuleSdk: EvoModuleSdk) = EvoTreeLazyNodeElement("uv", PythonIcons.UV) { - getUvExecutable() ?: return@EvoTreeLazyNodeElement PyResult.localizedError(PyBundle.message("evolution.uv.executable.is.not.found")) + override fun getTreeElement(evoModuleSdk: EvoModuleSdk): EvoTreeLazyNodeElement { + val icon = PythonCommunityImplUVIcons.UV + return EvoTreeLazyNodeElement("uv", icon) { + getUvExecutable() ?: return@EvoTreeLazyNodeElement PyResult.localizedError(PyBundle.message("evolution.uv.executable.is.not.found")) - val environments = VenvEvoSdkManager.findEnvironments(evoModuleSdk.module).getOr { - return@EvoTreeLazyNodeElement it - }.map { it.copy(icon = PythonIcons.UV) } - val envByFolders = environments.groupBy { it.pythonBinaryPath?.parent?.parent?.parent }.toMutableMap() - envByFolders.putIfAbsent( - evoModuleSdk.module.basePath?.let { Path.of(it) }, - listOf(EvoSdk(icon = PythonIcons.UV, name = ".venv", pythonBinaryPath = null)) - ) - val envSections = envByFolders.map { (basePath, sdks) -> - val label = basePath?.toString() ?: "undefined" - val leafs = sdks.map { evoSdk -> SelectEnvAction(evoSdk) }.map { action -> EvoTreeLeafElement(action) } - EvoTreeSection(ListSeparator(label), leafs + EvoTreeLeafElement(AddNewEnvAction())) + val environments = VenvEvoSdkManager.findEnvironments(evoModuleSdk.module).getOr { + return@EvoTreeLazyNodeElement it + }.map { it.copy(icon = icon) } + val envByFolders = environments.groupBy { it.pythonBinaryPath?.parent?.parent?.parent }.toMutableMap() + envByFolders.putIfAbsent( + evoModuleSdk.module.basePath?.let { Path.of(it) }, + listOf(EvoSdk(icon = icon, name = ".venv", pythonBinaryPath = null)) + ) + val envSections = envByFolders.map { (basePath, sdks) -> + val label = basePath?.toString() ?: "undefined" + val leafs = sdks.map { evoSdk -> SelectEnvAction(evoSdk) }.map { action -> EvoTreeLeafElement(action) } + EvoTreeSection(ListSeparator(label), leafs + EvoTreeLeafElement(AddNewEnvAction())) + } + + val sections = buildList { + addAll(envSections) + } + + Result.success(sections) } - - val sections = buildList { - addAll(envSections) - } - - Result.success(sections) } } \ No newline at end of file