From 9541bb9752e3105d986853a46fea42d569214438 Mon Sep 17 00:00:00 2001 From: FalsePattern Date: Sun, 6 Apr 2025 12:10:31 +0200 Subject: [PATCH] refactor toolchain directory structure --- .../execution/binary/ZigProfileStateBinary.kt | 4 +- .../base/ZigDebugEmitBinaryInstaller.kt | 4 +- .../runner/base/ZigDebugParametersBase.kt | 4 +- .../base/ZigDebugParametersEmitBinaryBase.kt | 4 +- .../runner/base/ZigDebugRunnerBase.kt | 8 ++-- .../runner/binary/ZigDebugParametersBinary.kt | 4 +- .../runner/binary/ZigDebugRunnerBinary.kt | 6 +-- .../runner/build/ZigDebugParametersBuild.kt | 4 +- .../runner/build/ZigDebugRunnerBuild.kt | 6 +-- .../runner/run/ZigDebugParametersRun.kt | 4 +- .../debugger/runner/run/ZigDebugRunnerRun.kt | 6 +-- .../runner/test/ZigDebugParametersTest.kt | 4 +- .../runner/test/ZigDebugRunnerTest.kt | 6 +-- .../com/falsepattern/zigbrains/ZBStartup.kt | 5 +-- .../project/execution/base/ZigProfileState.kt | 15 +------ .../zigbrains/project/run/ZigProgramRunner.kt | 4 +- .../zigbrains/project/run/ZigRegularRunner.kt | 4 +- .../ZigProjectConfigurationProvider.kt | 4 +- .../project/settings/ZigProjectSettings.kt | 2 +- .../settings/ZigProjectSettingsPanel.kt | 5 +-- .../settings/ZigProjectSettingsService.kt | 2 +- .../stdlib/ZigLibraryRootProvider.kt | 2 +- .../stdlib/ZigSyntheticLibrary.kt | 2 +- .../toolchain/ZigToolchainListEditor.kt | 26 +++--------- .../toolchain/ZigToolchainListService.kt | 14 ++++--- .../ZigToolchain.kt} | 8 +--- .../{ => base}/ZigToolchainProvider.kt | 40 ++++++++----------- .../{ => local}/LocalZigToolchain.kt | 10 ++--- .../LocalZigToolchainConfigurable.kt | 3 +- .../{ => local}/LocalZigToolchainPanel.kt | 2 +- .../{ => local}/LocalZigToolchainProvider.kt | 28 +++++-------- .../toolchain/tools/ZigCompilerTool.kt | 5 +-- .../project/toolchain/tools/ZigTool.kt | 4 +- .../ZigToolchainEnvironmentSerializable.kt | 7 ++-- .../resources/META-INF/zigbrains-core.xml | 4 +- .../ToolchainZLSConfigProvider.kt | 4 +- .../main/resources/META-INF/zigbrains-lsp.xml | 2 +- src/main/resources/META-INF/plugin.xml | 2 +- 38 files changed, 113 insertions(+), 155 deletions(-) rename core/src/main/kotlin/com/falsepattern/zigbrains/project/{toolchain => }/stdlib/ZigLibraryRootProvider.kt (95%) rename core/src/main/kotlin/com/falsepattern/zigbrains/project/{toolchain => }/stdlib/ZigSyntheticLibrary.kt (99%) rename core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/{AbstractZigToolchain.kt => base/ZigToolchain.kt} (89%) rename core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/{ => base}/ZigToolchainProvider.kt (64%) rename core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/{ => local}/LocalZigToolchain.kt (91%) rename core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/{ => local}/LocalZigToolchainConfigurable.kt (95%) rename core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/{ => local}/LocalZigToolchainPanel.kt (99%) rename core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/{ => local}/LocalZigToolchainProvider.kt (81%) rename core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/{ => tools}/ZigToolchainEnvironmentSerializable.kt (93%) rename lsp/src/main/kotlin/com/falsepattern/zigbrains/{project/toolchain => lsp}/ToolchainZLSConfigProvider.kt (96%) diff --git a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/execution/binary/ZigProfileStateBinary.kt b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/execution/binary/ZigProfileStateBinary.kt index 4f73207f..3da81d9c 100644 --- a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/execution/binary/ZigProfileStateBinary.kt +++ b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/execution/binary/ZigProfileStateBinary.kt @@ -24,14 +24,14 @@ package com.falsepattern.zigbrains.debugger.execution.binary import com.falsepattern.zigbrains.debugger.ZigDebugBundle import com.falsepattern.zigbrains.project.execution.base.ZigProfileState -import com.falsepattern.zigbrains.project.toolchain.AbstractZigToolchain +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain import com.intellij.execution.ExecutionException import com.intellij.execution.configurations.GeneralCommandLine import com.intellij.execution.runners.ExecutionEnvironment import kotlin.io.path.pathString class ZigProfileStateBinary(environment: ExecutionEnvironment, configuration: ZigExecConfigBinary) : ZigProfileState(environment, configuration) { - override suspend fun getCommandLine(toolchain: AbstractZigToolchain, debug: Boolean): GeneralCommandLine { + override suspend fun getCommandLine(toolchain: ZigToolchain, debug: Boolean): GeneralCommandLine { val cli = GeneralCommandLine() val cfg = configuration cfg.workingDirectory.path?.let { cli.withWorkingDirectory(it) } diff --git a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/base/ZigDebugEmitBinaryInstaller.kt b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/base/ZigDebugEmitBinaryInstaller.kt index 1f34ca3c..c73c0243 100644 --- a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/base/ZigDebugEmitBinaryInstaller.kt +++ b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/base/ZigDebugEmitBinaryInstaller.kt @@ -23,7 +23,7 @@ package com.falsepattern.zigbrains.debugger.runner.base import com.falsepattern.zigbrains.project.execution.base.ZigProfileState -import com.falsepattern.zigbrains.project.toolchain.AbstractZigToolchain +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain import com.falsepattern.zigbrains.shared.zigCoroutineScope import com.intellij.execution.configurations.GeneralCommandLine import com.intellij.execution.configurations.PtyCommandLine @@ -34,7 +34,7 @@ import java.io.File class ZigDebugEmitBinaryInstaller>( private val profileState: ProfileState, - private val toolchain: AbstractZigToolchain, + private val toolchain: ZigToolchain, private val executableFile: File, private val exeArgs: List ): Installer { diff --git a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/base/ZigDebugParametersBase.kt b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/base/ZigDebugParametersBase.kt index 038c564a..567a2700 100644 --- a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/base/ZigDebugParametersBase.kt +++ b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/base/ZigDebugParametersBase.kt @@ -23,7 +23,7 @@ package com.falsepattern.zigbrains.debugger.runner.base import com.falsepattern.zigbrains.project.execution.base.ZigProfileState -import com.falsepattern.zigbrains.project.toolchain.AbstractZigToolchain +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain import com.intellij.util.system.CpuArch import com.jetbrains.cidr.ArchitectureType import com.jetbrains.cidr.execution.RunParameters @@ -31,7 +31,7 @@ import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration abstract class ZigDebugParametersBase>( private val driverConfiguration: DebuggerDriverConfiguration, - protected val toolchain: AbstractZigToolchain, + protected val toolchain: ZigToolchain, protected val profileState: ProfileState ): RunParameters() { override fun getDebuggerDriverConfiguration(): DebuggerDriverConfiguration { diff --git a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/base/ZigDebugParametersEmitBinaryBase.kt b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/base/ZigDebugParametersEmitBinaryBase.kt index 55bca424..b1e945a8 100644 --- a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/base/ZigDebugParametersEmitBinaryBase.kt +++ b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/base/ZigDebugParametersEmitBinaryBase.kt @@ -24,7 +24,7 @@ package com.falsepattern.zigbrains.debugger.runner.base import com.falsepattern.zigbrains.debugger.ZigDebugBundle import com.falsepattern.zigbrains.project.execution.base.ZigProfileState -import com.falsepattern.zigbrains.project.toolchain.AbstractZigToolchain +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain import com.intellij.execution.ExecutionException import com.intellij.openapi.util.io.FileUtil import com.intellij.platform.util.progress.withProgressText @@ -39,7 +39,7 @@ import kotlin.io.path.isExecutable abstract class ZigDebugParametersEmitBinaryBase>( driverConfiguration: DebuggerDriverConfiguration, - toolchain: AbstractZigToolchain, + toolchain: ZigToolchain, profileState: ProfileState, ) : ZigDebugParametersBase(driverConfiguration, toolchain, profileState), PreLaunchAware { @Volatile diff --git a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/base/ZigDebugRunnerBase.kt b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/base/ZigDebugRunnerBase.kt index 7f176753..9e9cd863 100644 --- a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/base/ZigDebugRunnerBase.kt +++ b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/base/ZigDebugRunnerBase.kt @@ -26,7 +26,7 @@ import com.falsepattern.zigbrains.debugbridge.ZigDebuggerDriverConfigurationProv import com.falsepattern.zigbrains.debugger.ZigLocalDebugProcess import com.falsepattern.zigbrains.project.execution.base.ZigProfileState import com.falsepattern.zigbrains.project.run.ZigProgramRunner -import com.falsepattern.zigbrains.project.toolchain.AbstractZigToolchain +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain import com.falsepattern.zigbrains.shared.coroutine.runInterruptibleEDT import com.falsepattern.zigbrains.shared.coroutine.withEDTContext import com.intellij.execution.DefaultExecutionResult @@ -52,7 +52,7 @@ abstract class ZigDebugRunnerBase> : ZigProgra @Throws(ExecutionException::class) override suspend fun execute( state: ProfileState, - toolchain: AbstractZigToolchain, + toolchain: ZigToolchain, environment: ExecutionEnvironment ): RunContentDescriptor? { val project = environment.project @@ -67,7 +67,7 @@ abstract class ZigDebugRunnerBase> : ZigProgra @Throws(ExecutionException::class) private suspend fun executeWithDriver( state: ProfileState, - toolchain: AbstractZigToolchain, + toolchain: ZigToolchain, environment: ExecutionEnvironment, debuggerDriver: DebuggerDriverConfiguration ): RunContentDescriptor? { @@ -113,7 +113,7 @@ abstract class ZigDebugRunnerBase> : ZigProgra protected abstract fun getDebugParameters( state: ProfileState, debuggerDriver: DebuggerDriverConfiguration, - toolchain: AbstractZigToolchain + toolchain: ZigToolchain ): ZigDebugParametersBase private class SharedConsoleBuilder(private val console: ConsoleView) : TextConsoleBuilder() { diff --git a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/binary/ZigDebugParametersBinary.kt b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/binary/ZigDebugParametersBinary.kt index 95620485..887b8cf6 100644 --- a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/binary/ZigDebugParametersBinary.kt +++ b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/binary/ZigDebugParametersBinary.kt @@ -26,13 +26,13 @@ import com.falsepattern.zigbrains.debugger.ZigDebugBundle import com.falsepattern.zigbrains.debugger.execution.binary.ZigProfileStateBinary import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugEmitBinaryInstaller import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugParametersBase -import com.falsepattern.zigbrains.project.toolchain.AbstractZigToolchain +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain import com.intellij.execution.ExecutionException import com.jetbrains.cidr.execution.Installer import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration -class ZigDebugParametersBinary @Throws(ExecutionException::class) constructor(driverConfiguration: DebuggerDriverConfiguration, toolchain: AbstractZigToolchain, profileState: ZigProfileStateBinary) : +class ZigDebugParametersBinary @Throws(ExecutionException::class) constructor(driverConfiguration: DebuggerDriverConfiguration, toolchain: ZigToolchain, profileState: ZigProfileStateBinary) : ZigDebugParametersBase(driverConfiguration, toolchain, profileState) { private val executableFile = profileState.configuration.exePath.path?.toFile() ?: throw ExecutionException(ZigDebugBundle.message("exception.missing-exe-path")) override fun getInstaller(): Installer { diff --git a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/binary/ZigDebugRunnerBinary.kt b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/binary/ZigDebugRunnerBinary.kt index 6da574e4..34f7115a 100644 --- a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/binary/ZigDebugRunnerBinary.kt +++ b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/binary/ZigDebugRunnerBinary.kt @@ -27,8 +27,8 @@ import com.falsepattern.zigbrains.debugger.execution.binary.ZigProfileStateBinar import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugParametersBase import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugRunnerBase import com.falsepattern.zigbrains.project.execution.base.ZigProfileState -import com.falsepattern.zigbrains.project.toolchain.AbstractZigToolchain -import com.falsepattern.zigbrains.project.toolchain.LocalZigToolchain +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain +import com.falsepattern.zigbrains.project.toolchain.local.LocalZigToolchain import com.intellij.execution.configurations.RunProfile import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration @@ -36,7 +36,7 @@ class ZigDebugRunnerBinary: ZigDebugRunnerBase() { override fun getDebugParameters( state: ZigProfileStateBinary, debuggerDriver: DebuggerDriverConfiguration, - toolchain: AbstractZigToolchain + toolchain: ZigToolchain ): ZigDebugParametersBase { return ZigDebugParametersBinary(debuggerDriver, LocalZigToolchain.ensureLocal(toolchain), state) } diff --git a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/build/ZigDebugParametersBuild.kt b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/build/ZigDebugParametersBuild.kt index aa9e2e38..6dcda7be 100644 --- a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/build/ZigDebugParametersBuild.kt +++ b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/build/ZigDebugParametersBuild.kt @@ -28,7 +28,7 @@ import com.falsepattern.zigbrains.debugger.runner.base.PreLaunchProcessListener import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugEmitBinaryInstaller import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugParametersBase import com.falsepattern.zigbrains.project.execution.build.ZigProfileStateBuild -import com.falsepattern.zigbrains.project.toolchain.AbstractZigToolchain +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain import com.intellij.execution.ExecutionException import com.intellij.openapi.util.SystemInfo import com.intellij.platform.util.progress.withProgressText @@ -46,7 +46,7 @@ import kotlin.io.path.isRegularFile class ZigDebugParametersBuild( driverConfiguration: DebuggerDriverConfiguration, - toolchain: AbstractZigToolchain, + toolchain: ZigToolchain, profileState: ZigProfileStateBuild ) : ZigDebugParametersBase(driverConfiguration, toolchain, profileState), PreLaunchAware { @Volatile diff --git a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/build/ZigDebugRunnerBuild.kt b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/build/ZigDebugRunnerBuild.kt index 575ab657..97f99cff 100644 --- a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/build/ZigDebugRunnerBuild.kt +++ b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/build/ZigDebugRunnerBuild.kt @@ -27,8 +27,8 @@ import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugRunnerBase import com.falsepattern.zigbrains.project.execution.base.ZigProfileState import com.falsepattern.zigbrains.project.execution.build.ZigExecConfigBuild import com.falsepattern.zigbrains.project.execution.build.ZigProfileStateBuild -import com.falsepattern.zigbrains.project.toolchain.AbstractZigToolchain -import com.falsepattern.zigbrains.project.toolchain.LocalZigToolchain +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain +import com.falsepattern.zigbrains.project.toolchain.local.LocalZigToolchain import com.intellij.execution.configurations.RunProfile import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration @@ -36,7 +36,7 @@ class ZigDebugRunnerBuild: ZigDebugRunnerBase() { override fun getDebugParameters( state: ZigProfileStateBuild, debuggerDriver: DebuggerDriverConfiguration, - toolchain: AbstractZigToolchain + toolchain: ZigToolchain ): ZigDebugParametersBase { return ZigDebugParametersBuild(debuggerDriver, LocalZigToolchain.ensureLocal(toolchain), state) } diff --git a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/run/ZigDebugParametersRun.kt b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/run/ZigDebugParametersRun.kt index 32558668..01f9809e 100644 --- a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/run/ZigDebugParametersRun.kt +++ b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/run/ZigDebugParametersRun.kt @@ -25,11 +25,11 @@ package com.falsepattern.zigbrains.debugger.runner.run import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugEmitBinaryInstaller import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugParametersEmitBinaryBase import com.falsepattern.zigbrains.project.execution.run.ZigProfileStateRun -import com.falsepattern.zigbrains.project.toolchain.AbstractZigToolchain +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain import com.jetbrains.cidr.execution.Installer import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration -class ZigDebugParametersRun(driverConfiguration: DebuggerDriverConfiguration, toolchain: AbstractZigToolchain, profileState: ZigProfileStateRun) : +class ZigDebugParametersRun(driverConfiguration: DebuggerDriverConfiguration, toolchain: ZigToolchain, profileState: ZigProfileStateRun) : ZigDebugParametersEmitBinaryBase(driverConfiguration, toolchain, profileState) { override fun getInstaller(): Installer { return ZigDebugEmitBinaryInstaller(profileState, toolchain, executableFile, profileState.configuration.exeArgs.argsSplit()) diff --git a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/run/ZigDebugRunnerRun.kt b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/run/ZigDebugRunnerRun.kt index 9cc440d8..492492e0 100644 --- a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/run/ZigDebugRunnerRun.kt +++ b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/run/ZigDebugRunnerRun.kt @@ -27,8 +27,8 @@ import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugRunnerBase import com.falsepattern.zigbrains.project.execution.base.ZigProfileState import com.falsepattern.zigbrains.project.execution.run.ZigExecConfigRun import com.falsepattern.zigbrains.project.execution.run.ZigProfileStateRun -import com.falsepattern.zigbrains.project.toolchain.AbstractZigToolchain -import com.falsepattern.zigbrains.project.toolchain.LocalZigToolchain +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain +import com.falsepattern.zigbrains.project.toolchain.local.LocalZigToolchain import com.intellij.execution.configurations.RunProfile import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration @@ -36,7 +36,7 @@ class ZigDebugRunnerRun: ZigDebugRunnerBase() { override fun getDebugParameters( state: ZigProfileStateRun, debuggerDriver: DebuggerDriverConfiguration, - toolchain: AbstractZigToolchain + toolchain: ZigToolchain ): ZigDebugParametersBase { return ZigDebugParametersRun(debuggerDriver, LocalZigToolchain.ensureLocal(toolchain), state) } diff --git a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/test/ZigDebugParametersTest.kt b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/test/ZigDebugParametersTest.kt index 7f45423c..9044196e 100644 --- a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/test/ZigDebugParametersTest.kt +++ b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/test/ZigDebugParametersTest.kt @@ -25,11 +25,11 @@ package com.falsepattern.zigbrains.debugger.runner.test import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugEmitBinaryInstaller import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugParametersEmitBinaryBase import com.falsepattern.zigbrains.project.execution.test.ZigProfileStateTest -import com.falsepattern.zigbrains.project.toolchain.AbstractZigToolchain +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain import com.jetbrains.cidr.execution.Installer import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration -class ZigDebugParametersTest(driverConfiguration: DebuggerDriverConfiguration, toolchain: AbstractZigToolchain, profileState: ZigProfileStateTest) : +class ZigDebugParametersTest(driverConfiguration: DebuggerDriverConfiguration, toolchain: ZigToolchain, profileState: ZigProfileStateTest) : ZigDebugParametersEmitBinaryBase(driverConfiguration, toolchain, profileState) { override fun getInstaller(): Installer { return ZigDebugEmitBinaryInstaller(profileState, toolchain, executableFile, listOf()) diff --git a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/test/ZigDebugRunnerTest.kt b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/test/ZigDebugRunnerTest.kt index f4673d6d..f01a98c7 100644 --- a/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/test/ZigDebugRunnerTest.kt +++ b/cidr/src/main/kotlin/com/falsepattern/zigbrains/debugger/runner/test/ZigDebugRunnerTest.kt @@ -27,8 +27,8 @@ import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugRunnerBase import com.falsepattern.zigbrains.project.execution.base.ZigProfileState import com.falsepattern.zigbrains.project.execution.test.ZigExecConfigTest import com.falsepattern.zigbrains.project.execution.test.ZigProfileStateTest -import com.falsepattern.zigbrains.project.toolchain.AbstractZigToolchain -import com.falsepattern.zigbrains.project.toolchain.LocalZigToolchain +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain +import com.falsepattern.zigbrains.project.toolchain.local.LocalZigToolchain import com.intellij.execution.configurations.RunProfile import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration @@ -36,7 +36,7 @@ class ZigDebugRunnerTest: ZigDebugRunnerBase() { override fun getDebugParameters( state: ZigProfileStateTest, debuggerDriver: DebuggerDriverConfiguration, - toolchain: AbstractZigToolchain + toolchain: ZigToolchain ): ZigDebugParametersBase { return ZigDebugParametersTest(debuggerDriver, LocalZigToolchain.ensureLocal(toolchain), state) } diff --git a/core/src/main/kotlin/com/falsepattern/zigbrains/ZBStartup.kt b/core/src/main/kotlin/com/falsepattern/zigbrains/ZBStartup.kt index fa4d6f56..5df8c86c 100644 --- a/core/src/main/kotlin/com/falsepattern/zigbrains/ZBStartup.kt +++ b/core/src/main/kotlin/com/falsepattern/zigbrains/ZBStartup.kt @@ -24,9 +24,8 @@ package com.falsepattern.zigbrains import com.falsepattern.zigbrains.direnv.DirenvCmd import com.falsepattern.zigbrains.project.settings.zigProjectSettings -import com.falsepattern.zigbrains.project.toolchain.LocalZigToolchain -import com.falsepattern.zigbrains.project.toolchain.ZigToolchainProvider -import com.falsepattern.zigbrains.project.toolchain.suggestZigToolchain +import com.falsepattern.zigbrains.project.toolchain.local.LocalZigToolchain +import com.falsepattern.zigbrains.project.toolchain.base.suggestZigToolchain import com.intellij.ide.BrowserUtil import com.intellij.ide.plugins.PluginManager import com.intellij.notification.Notification diff --git a/core/src/main/kotlin/com/falsepattern/zigbrains/project/execution/base/ZigProfileState.kt b/core/src/main/kotlin/com/falsepattern/zigbrains/project/execution/base/ZigProfileState.kt index 251ca441..c6779014 100644 --- a/core/src/main/kotlin/com/falsepattern/zigbrains/project/execution/base/ZigProfileState.kt +++ b/core/src/main/kotlin/com/falsepattern/zigbrains/project/execution/base/ZigProfileState.kt @@ -24,28 +24,17 @@ package com.falsepattern.zigbrains.project.execution.base import com.falsepattern.zigbrains.ZigBrainsBundle import com.falsepattern.zigbrains.project.execution.ZigConsoleBuilder -import com.falsepattern.zigbrains.project.run.ZigProcessHandler import com.falsepattern.zigbrains.project.settings.zigProjectSettings -import com.falsepattern.zigbrains.project.toolchain.AbstractZigToolchain +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain import com.falsepattern.zigbrains.shared.cli.startIPCAwareProcess import com.falsepattern.zigbrains.shared.coroutine.runModalOrBlocking -import com.falsepattern.zigbrains.shared.ipc.IPCUtil -import com.falsepattern.zigbrains.shared.ipc.ipc -import com.intellij.build.BuildTextConsoleView -import com.intellij.execution.DefaultExecutionResult import com.intellij.execution.ExecutionException import com.intellij.execution.configurations.CommandLineState import com.intellij.execution.configurations.GeneralCommandLine import com.intellij.execution.configurations.PtyCommandLine -import com.intellij.execution.filters.TextConsoleBuilder import com.intellij.execution.process.ProcessHandler -import com.intellij.execution.process.ProcessTerminatedListener import com.intellij.execution.runners.ExecutionEnvironment -import com.intellij.openapi.project.Project import com.intellij.platform.ide.progress.ModalTaskOwner -import com.intellij.terminal.TerminalExecutionConsole -import com.intellij.util.system.OS -import kotlin.collections.contains import kotlin.io.path.pathString abstract class ZigProfileState> ( @@ -71,7 +60,7 @@ abstract class ZigProfileState> ( } @Throws(ExecutionException::class) - open suspend fun getCommandLine(toolchain: AbstractZigToolchain, debug: Boolean): GeneralCommandLine { + open suspend fun getCommandLine(toolchain: ZigToolchain, debug: Boolean): GeneralCommandLine { val workingDir = configuration.workingDirectory val zigExePath = toolchain.zig.path() diff --git a/core/src/main/kotlin/com/falsepattern/zigbrains/project/run/ZigProgramRunner.kt b/core/src/main/kotlin/com/falsepattern/zigbrains/project/run/ZigProgramRunner.kt index e897c893..c02fa66d 100644 --- a/core/src/main/kotlin/com/falsepattern/zigbrains/project/run/ZigProgramRunner.kt +++ b/core/src/main/kotlin/com/falsepattern/zigbrains/project/run/ZigProgramRunner.kt @@ -24,7 +24,7 @@ package com.falsepattern.zigbrains.project.run import com.falsepattern.zigbrains.project.execution.base.ZigProfileState import com.falsepattern.zigbrains.project.settings.zigProjectSettings -import com.falsepattern.zigbrains.project.toolchain.AbstractZigToolchain +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain import com.falsepattern.zigbrains.shared.zigCoroutineScope import com.intellij.execution.ExecutionException import com.intellij.execution.configurations.RunProfileState @@ -81,5 +81,5 @@ abstract class ZigProgramRunner>(protected val protected abstract fun castProfileState(state: ZigProfileState<*>): ProfileState? @Throws(ExecutionException::class) - abstract suspend fun execute(state: ProfileState, toolchain: AbstractZigToolchain, environment: ExecutionEnvironment): RunContentDescriptor? + abstract suspend fun execute(state: ProfileState, toolchain: ZigToolchain, environment: ExecutionEnvironment): RunContentDescriptor? } \ No newline at end of file diff --git a/core/src/main/kotlin/com/falsepattern/zigbrains/project/run/ZigRegularRunner.kt b/core/src/main/kotlin/com/falsepattern/zigbrains/project/run/ZigRegularRunner.kt index 771e94d2..1860ab1f 100644 --- a/core/src/main/kotlin/com/falsepattern/zigbrains/project/run/ZigRegularRunner.kt +++ b/core/src/main/kotlin/com/falsepattern/zigbrains/project/run/ZigRegularRunner.kt @@ -24,7 +24,7 @@ package com.falsepattern.zigbrains.project.run import com.falsepattern.zigbrains.project.execution.base.ZigExecConfig import com.falsepattern.zigbrains.project.execution.base.ZigProfileState -import com.falsepattern.zigbrains.project.toolchain.AbstractZigToolchain +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain import com.falsepattern.zigbrains.shared.coroutine.withEDTContext import com.intellij.execution.configurations.RunProfile import com.intellij.execution.executors.DefaultRunExecutor @@ -34,7 +34,7 @@ import com.intellij.execution.ui.RunContentDescriptor import com.intellij.openapi.application.ModalityState class ZigRegularRunner: ZigProgramRunner>(DefaultRunExecutor.EXECUTOR_ID) { - override suspend fun execute(state: ZigProfileState<*>, toolchain: AbstractZigToolchain, environment: ExecutionEnvironment): RunContentDescriptor? { + override suspend fun execute(state: ZigProfileState<*>, toolchain: ZigToolchain, environment: ExecutionEnvironment): RunContentDescriptor? { val exec = state.execute(environment.executor, this) return withEDTContext(ModalityState.any()) { val runContentBuilder = RunContentBuilder(exec, environment) diff --git a/core/src/main/kotlin/com/falsepattern/zigbrains/project/settings/ZigProjectConfigurationProvider.kt b/core/src/main/kotlin/com/falsepattern/zigbrains/project/settings/ZigProjectConfigurationProvider.kt index a609a3ee..af4c481d 100644 --- a/core/src/main/kotlin/com/falsepattern/zigbrains/project/settings/ZigProjectConfigurationProvider.kt +++ b/core/src/main/kotlin/com/falsepattern/zigbrains/project/settings/ZigProjectConfigurationProvider.kt @@ -22,7 +22,7 @@ package com.falsepattern.zigbrains.project.settings -import com.falsepattern.zigbrains.project.toolchain.AbstractZigToolchain +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain import com.falsepattern.zigbrains.shared.SubConfigurable import com.intellij.openapi.Disposable import com.intellij.openapi.extensions.ExtensionPointName @@ -58,6 +58,6 @@ interface ZigProjectConfigurationProvider { fun apply(project: Project) } interface ToolchainProvider { - val toolchain: AbstractZigToolchain? + val toolchain: ZigToolchain? } } \ No newline at end of file diff --git a/core/src/main/kotlin/com/falsepattern/zigbrains/project/settings/ZigProjectSettings.kt b/core/src/main/kotlin/com/falsepattern/zigbrains/project/settings/ZigProjectSettings.kt index facf092c..d97af0cd 100644 --- a/core/src/main/kotlin/com/falsepattern/zigbrains/project/settings/ZigProjectSettings.kt +++ b/core/src/main/kotlin/com/falsepattern/zigbrains/project/settings/ZigProjectSettings.kt @@ -22,7 +22,7 @@ package com.falsepattern.zigbrains.project.settings -import com.falsepattern.zigbrains.project.toolchain.LocalZigToolchain +import com.falsepattern.zigbrains.project.toolchain.local.LocalZigToolchain import com.intellij.openapi.project.Project import com.intellij.openapi.util.io.toNioPathOrNull import com.intellij.util.xmlb.annotations.Transient diff --git a/core/src/main/kotlin/com/falsepattern/zigbrains/project/settings/ZigProjectSettingsPanel.kt b/core/src/main/kotlin/com/falsepattern/zigbrains/project/settings/ZigProjectSettingsPanel.kt index b9a388a1..1f3271c4 100644 --- a/core/src/main/kotlin/com/falsepattern/zigbrains/project/settings/ZigProjectSettingsPanel.kt +++ b/core/src/main/kotlin/com/falsepattern/zigbrains/project/settings/ZigProjectSettingsPanel.kt @@ -24,9 +24,8 @@ package com.falsepattern.zigbrains.project.settings import com.falsepattern.zigbrains.ZigBrainsBundle import com.falsepattern.zigbrains.direnv.DirenvCmd -import com.falsepattern.zigbrains.project.toolchain.LocalZigToolchain -import com.falsepattern.zigbrains.project.toolchain.ZigToolchainProvider -import com.falsepattern.zigbrains.project.toolchain.suggestZigToolchain +import com.falsepattern.zigbrains.project.toolchain.local.LocalZigToolchain +import com.falsepattern.zigbrains.project.toolchain.base.suggestZigToolchain import com.falsepattern.zigbrains.shared.coroutine.launchWithEDT import com.falsepattern.zigbrains.shared.coroutine.withEDTContext import com.falsepattern.zigbrains.shared.zigCoroutineScope diff --git a/core/src/main/kotlin/com/falsepattern/zigbrains/project/settings/ZigProjectSettingsService.kt b/core/src/main/kotlin/com/falsepattern/zigbrains/project/settings/ZigProjectSettingsService.kt index 6820c488..71b337d0 100644 --- a/core/src/main/kotlin/com/falsepattern/zigbrains/project/settings/ZigProjectSettingsService.kt +++ b/core/src/main/kotlin/com/falsepattern/zigbrains/project/settings/ZigProjectSettingsService.kt @@ -22,7 +22,7 @@ package com.falsepattern.zigbrains.project.settings -import com.falsepattern.zigbrains.project.toolchain.stdlib.ZigSyntheticLibrary +import com.falsepattern.zigbrains.project.stdlib.ZigSyntheticLibrary import com.falsepattern.zigbrains.shared.zigCoroutineScope import com.intellij.openapi.components.* import com.intellij.openapi.project.Project diff --git a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/stdlib/ZigLibraryRootProvider.kt b/core/src/main/kotlin/com/falsepattern/zigbrains/project/stdlib/ZigLibraryRootProvider.kt similarity index 95% rename from core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/stdlib/ZigLibraryRootProvider.kt rename to core/src/main/kotlin/com/falsepattern/zigbrains/project/stdlib/ZigLibraryRootProvider.kt index e8ce9239..4cceeae4 100644 --- a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/stdlib/ZigLibraryRootProvider.kt +++ b/core/src/main/kotlin/com/falsepattern/zigbrains/project/stdlib/ZigLibraryRootProvider.kt @@ -20,7 +20,7 @@ * along with ZigBrains. If not, see . */ -package com.falsepattern.zigbrains.project.toolchain.stdlib +package com.falsepattern.zigbrains.project.stdlib import com.intellij.openapi.project.Project import com.intellij.openapi.roots.AdditionalLibraryRootsProvider diff --git a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/stdlib/ZigSyntheticLibrary.kt b/core/src/main/kotlin/com/falsepattern/zigbrains/project/stdlib/ZigSyntheticLibrary.kt similarity index 99% rename from core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/stdlib/ZigSyntheticLibrary.kt rename to core/src/main/kotlin/com/falsepattern/zigbrains/project/stdlib/ZigSyntheticLibrary.kt index 5b7fac8d..dd73c2cc 100644 --- a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/stdlib/ZigSyntheticLibrary.kt +++ b/core/src/main/kotlin/com/falsepattern/zigbrains/project/stdlib/ZigSyntheticLibrary.kt @@ -20,7 +20,7 @@ * along with ZigBrains. If not, see . */ -package com.falsepattern.zigbrains.project.toolchain.stdlib +package com.falsepattern.zigbrains.project.stdlib import com.falsepattern.zigbrains.Icons import com.falsepattern.zigbrains.project.settings.ZigProjectSettings diff --git a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/ZigToolchainListEditor.kt b/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/ZigToolchainListEditor.kt index a006aed4..fb917897 100644 --- a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/ZigToolchainListEditor.kt +++ b/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/ZigToolchainListEditor.kt @@ -24,6 +24,10 @@ package com.falsepattern.zigbrains.project.toolchain import com.falsepattern.zigbrains.Icons import com.falsepattern.zigbrains.ZigBrainsBundle +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain +import com.falsepattern.zigbrains.project.toolchain.base.createNamedConfigurable +import com.falsepattern.zigbrains.project.toolchain.base.render +import com.falsepattern.zigbrains.project.toolchain.base.suggestZigToolchains import com.falsepattern.zigbrains.shared.coroutine.withEDTContext import com.falsepattern.zigbrains.shared.zigCoroutineScope import com.intellij.icons.AllIcons @@ -31,9 +35,7 @@ import com.intellij.openapi.actionSystem.AnAction import com.intellij.openapi.actionSystem.AnActionEvent import com.intellij.openapi.actionSystem.Presentation import com.intellij.openapi.application.ModalityState -import com.intellij.openapi.application.PathManager import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory -import com.intellij.openapi.progress.coroutineToIndicator import com.intellij.openapi.project.DumbAwareAction import com.intellij.openapi.project.Project import com.intellij.openapi.project.ProjectManager @@ -41,47 +43,31 @@ import com.intellij.openapi.ui.ComboBox import com.intellij.openapi.ui.DialogBuilder import com.intellij.openapi.ui.MasterDetailsComponent import com.intellij.openapi.util.Disposer -import com.intellij.openapi.util.io.toNioPathOrNull import com.intellij.platform.ide.progress.ModalTaskOwner import com.intellij.platform.ide.progress.TaskCancellation import com.intellij.platform.ide.progress.withModalProgress -import com.intellij.platform.util.progress.withProgressText import com.intellij.ui.* -import com.intellij.ui.components.JBList import com.intellij.ui.components.panels.OpaquePanel import com.intellij.ui.components.textFieldWithBrowseButton -import com.intellij.ui.dsl.builder.Align import com.intellij.ui.dsl.builder.AlignX import com.intellij.ui.dsl.builder.Cell import com.intellij.ui.dsl.builder.panel import com.intellij.ui.popup.list.ComboBoxPopup import com.intellij.util.Consumer import com.intellij.util.IconUtil -import com.intellij.util.download.DownloadableFileService -import com.intellij.util.system.CpuArch -import com.intellij.util.text.SemVer import com.intellij.util.ui.EmptyIcon import com.intellij.util.ui.JBUI import com.intellij.util.ui.UIUtil -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async -import kotlinx.coroutines.withContext -import kotlinx.serialization.ExperimentalSerializationApi -import kotlinx.serialization.json.Json -import kotlinx.serialization.json.JsonObject -import kotlinx.serialization.json.decodeFromStream import java.awt.BorderLayout import java.awt.Component -import java.nio.file.Path import java.util.* import javax.accessibility.AccessibleContext import javax.swing.DefaultComboBoxModel import javax.swing.JComponent import javax.swing.JList -import javax.swing.JPanel import javax.swing.ListCellRenderer import javax.swing.border.Border -import javax.swing.event.DocumentEvent import javax.swing.tree.DefaultTreeModel class ZigToolchainListEditor() : MasterDetailsComponent() { @@ -187,7 +173,7 @@ class ZigToolchainListEditor() : MasterDetailsComponent() { override fun getDisplayName() = ZigBrainsBundle.message("settings.toolchains.title") - private fun addToolchain(uuid: UUID, toolchain: AbstractZigToolchain) { + private fun addToolchain(uuid: UUID, toolchain: ZigToolchain) { val node = MyNode(toolchain.createNamedConfigurable(uuid, ProjectManager.getInstance().defaultProject)) addNode(node, myRoot) } @@ -210,7 +196,7 @@ private sealed interface TCListElemIn private sealed interface TCListElem : TCListElemIn { @JvmRecord - data class Toolchain(val toolchain: AbstractZigToolchain) : TCListElem + data class Toolchain(val toolchain: ZigToolchain) : TCListElem object Download : TCListElem object FromDisk : TCListElem } diff --git a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/ZigToolchainListService.kt b/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/ZigToolchainListService.kt index b38bca87..b53a4a0e 100644 --- a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/ZigToolchainListService.kt +++ b/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/ZigToolchainListService.kt @@ -22,8 +22,10 @@ package com.falsepattern.zigbrains.project.toolchain +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain +import com.falsepattern.zigbrains.project.toolchain.base.resolve +import com.falsepattern.zigbrains.project.toolchain.base.toRef import com.intellij.openapi.components.* -import com.intellij.util.xmlb.annotations.MapAnnotation import java.util.UUID @Service(Service.Level.APP) @@ -32,16 +34,16 @@ import java.util.UUID storages = [Storage("zigbrains.xml")] ) class ZigToolchainListService: SerializablePersistentStateComponent(State()) { - fun setToolchain(uuid: UUID, toolchain: AbstractZigToolchain) { + fun setToolchain(uuid: UUID, toolchain: ZigToolchain) { updateState { - val newMap = HashMap() + val newMap = HashMap() newMap.putAll(it.toolchains) newMap.put(uuid.toString(), toolchain.toRef()) it.copy(toolchains = newMap) } } - fun getToolchain(uuid: UUID): AbstractZigToolchain? { + fun getToolchain(uuid: UUID): ZigToolchain? { return state.toolchains[uuid.toString()]?.resolve() } @@ -52,7 +54,7 @@ class ZigToolchainListService: SerializablePersistentStateComponent> + val toolchains: Sequence> get() = state.toolchains .asSequence() .mapNotNull { @@ -63,7 +65,7 @@ class ZigToolchainListService: SerializablePersistentStateComponent = emptyMap(), + val toolchains: Map = emptyMap(), ) } diff --git a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/AbstractZigToolchain.kt b/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/base/ZigToolchain.kt similarity index 89% rename from core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/AbstractZigToolchain.kt rename to core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/base/ZigToolchain.kt index a388e64d..1d381947 100644 --- a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/AbstractZigToolchain.kt +++ b/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/base/ZigToolchain.kt @@ -20,20 +20,16 @@ * along with ZigBrains. If not, see . */ -package com.falsepattern.zigbrains.project.toolchain +package com.falsepattern.zigbrains.project.toolchain.base import com.falsepattern.zigbrains.project.toolchain.tools.ZigCompilerTool import com.intellij.execution.configurations.GeneralCommandLine import com.intellij.openapi.project.Project -import com.intellij.util.xmlb.Converter import com.intellij.util.xmlb.annotations.Attribute import com.intellij.util.xmlb.annotations.MapAnnotation -import com.intellij.util.xmlb.annotations.OptionTag import java.nio.file.Path -import java.util.UUID - -abstract class AbstractZigToolchain { +abstract class ZigToolchain { val zig: ZigCompilerTool by lazy { ZigCompilerTool(this) } abstract fun workingDirectory(project: Project? = null): Path? diff --git a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/ZigToolchainProvider.kt b/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/base/ZigToolchainProvider.kt similarity index 64% rename from core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/ZigToolchainProvider.kt rename to core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/base/ZigToolchainProvider.kt index 7c4ded3b..9cf1dee4 100644 --- a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/ZigToolchainProvider.kt +++ b/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/base/ZigToolchainProvider.kt @@ -20,58 +20,52 @@ * along with ZigBrains. If not, see . */ -package com.falsepattern.zigbrains.project.toolchain +package com.falsepattern.zigbrains.project.toolchain.base import com.intellij.openapi.extensions.ExtensionPointName import com.intellij.openapi.project.Project import com.intellij.openapi.ui.NamedConfigurable import com.intellij.openapi.util.UserDataHolder import com.intellij.ui.SimpleColoredComponent -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.asFlow -import kotlinx.coroutines.flow.filter -import kotlinx.coroutines.flow.flatMapMerge -import kotlinx.coroutines.flow.flattenConcat -import kotlinx.coroutines.flow.map import java.util.UUID private val EXTENSION_POINT_NAME = ExtensionPointName.create("com.falsepattern.zigbrains.toolchainProvider") -sealed interface ZigToolchainProvider { - suspend fun suggestToolchain(project: Project?, extraData: UserDataHolder): AbstractZigToolchain? +internal interface ZigToolchainProvider { + suspend fun suggestToolchain(project: Project?, extraData: UserDataHolder): ZigToolchain? val serialMarker: String - fun isCompatible(toolchain: AbstractZigToolchain): Boolean - fun deserialize(data: Map): AbstractZigToolchain? - fun serialize(toolchain: AbstractZigToolchain): Map - fun matchesSuggestion(toolchain: AbstractZigToolchain, suggestion: AbstractZigToolchain): Boolean - fun createConfigurable(uuid: UUID, toolchain: AbstractZigToolchain, project: Project): NamedConfigurable - fun suggestToolchains(): List - fun render(toolchain: AbstractZigToolchain, component: SimpleColoredComponent) + fun isCompatible(toolchain: ZigToolchain): Boolean + fun deserialize(data: Map): ZigToolchain? + fun serialize(toolchain: ZigToolchain): Map + fun matchesSuggestion(toolchain: ZigToolchain, suggestion: ZigToolchain): Boolean + fun createConfigurable(uuid: UUID, toolchain: ZigToolchain, project: Project): NamedConfigurable + fun suggestToolchains(): List + fun render(toolchain: ZigToolchain, component: SimpleColoredComponent) } -fun AbstractZigToolchain.Ref.resolve(): AbstractZigToolchain? { +fun ZigToolchain.Ref.resolve(): ZigToolchain? { val marker = this.marker ?: return null val data = this.data ?: return null val provider = EXTENSION_POINT_NAME.extensionList.find { it.serialMarker == marker } ?: return null return provider.deserialize(data) } -fun AbstractZigToolchain.toRef(): AbstractZigToolchain.Ref { +fun ZigToolchain.toRef(): ZigToolchain.Ref { val provider = EXTENSION_POINT_NAME.extensionList.find { it.isCompatible(this) } ?: throw IllegalStateException() - return AbstractZigToolchain.Ref(provider.serialMarker, provider.serialize(this)) + return ZigToolchain.Ref(provider.serialMarker, provider.serialize(this)) } -suspend fun Project?.suggestZigToolchain(extraData: UserDataHolder): AbstractZigToolchain? { +suspend fun Project?.suggestZigToolchain(extraData: UserDataHolder): ZigToolchain? { return EXTENSION_POINT_NAME.extensionList.firstNotNullOfOrNull { it.suggestToolchain(this, extraData) } } -fun AbstractZigToolchain.createNamedConfigurable(uuid: UUID, project: Project): NamedConfigurable { +fun ZigToolchain.createNamedConfigurable(uuid: UUID, project: Project): NamedConfigurable { val provider = EXTENSION_POINT_NAME.extensionList.find { it.isCompatible(this) } ?: throw IllegalStateException() return provider.createConfigurable(uuid, this, project) } -fun suggestZigToolchains(existing: List): List { +fun suggestZigToolchains(existing: List): List { return EXTENSION_POINT_NAME.extensionList.flatMap { ext -> val compatibleExisting = existing.filter { ext.isCompatible(it) } val suggestions = ext.suggestToolchains() @@ -79,7 +73,7 @@ fun suggestZigToolchains(existing: List): List. */ -package com.falsepattern.zigbrains.project.toolchain +package com.falsepattern.zigbrains.project.toolchain.local import com.falsepattern.zigbrains.direnv.DirenvCmd import com.falsepattern.zigbrains.project.settings.zigProjectSettings +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain import com.intellij.execution.ExecutionException import com.intellij.execution.configurations.GeneralCommandLine import com.intellij.openapi.project.Project @@ -32,12 +33,9 @@ import com.intellij.openapi.util.KeyWithDefaultValue import com.intellij.openapi.util.SystemInfo import com.intellij.openapi.util.io.toNioPathOrNull import com.intellij.openapi.vfs.toNioPathOrNull -import kotlinx.coroutines.runBlocking import java.nio.file.Path -import java.util.UUID -import kotlin.io.path.pathString -data class LocalZigToolchain(val location: Path, val std: Path? = null, val name: String? = null): AbstractZigToolchain() { +data class LocalZigToolchain(val location: Path, val std: Path? = null, val name: String? = null): ZigToolchain() { override fun workingDirectory(project: Project?): Path? { return project?.guessProjectDir()?.toNioPathOrNull() } @@ -58,7 +56,7 @@ data class LocalZigToolchain(val location: Path, val std: Path? = null, val name val DIRENV_KEY = KeyWithDefaultValue.create("ZIG_LOCAL_DIRENV") @Throws(ExecutionException::class) - fun ensureLocal(toolchain: AbstractZigToolchain): LocalZigToolchain { + fun ensureLocal(toolchain: ZigToolchain): LocalZigToolchain { if (toolchain is LocalZigToolchain) { return toolchain } else { diff --git a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/LocalZigToolchainConfigurable.kt b/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/local/LocalZigToolchainConfigurable.kt similarity index 95% rename from core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/LocalZigToolchainConfigurable.kt rename to core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/local/LocalZigToolchainConfigurable.kt index 3cfb420d..2ceb6618 100644 --- a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/LocalZigToolchainConfigurable.kt +++ b/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/local/LocalZigToolchainConfigurable.kt @@ -20,8 +20,9 @@ * along with ZigBrains. If not, see . */ -package com.falsepattern.zigbrains.project.toolchain +package com.falsepattern.zigbrains.project.toolchain.local +import com.falsepattern.zigbrains.project.toolchain.zigToolchainList import com.intellij.openapi.project.Project import com.intellij.openapi.ui.NamedConfigurable import com.intellij.openapi.util.NlsContexts diff --git a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/LocalZigToolchainPanel.kt b/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/local/LocalZigToolchainPanel.kt similarity index 99% rename from core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/LocalZigToolchainPanel.kt rename to core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/local/LocalZigToolchainPanel.kt index 4cea024c..d486a7f3 100644 --- a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/LocalZigToolchainPanel.kt +++ b/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/local/LocalZigToolchainPanel.kt @@ -20,7 +20,7 @@ * along with ZigBrains. If not, see . */ -package com.falsepattern.zigbrains.project.toolchain +package com.falsepattern.zigbrains.project.toolchain.local import com.falsepattern.zigbrains.ZigBrainsBundle import com.falsepattern.zigbrains.shared.coroutine.withEDTContext diff --git a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/LocalZigToolchainProvider.kt b/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/local/LocalZigToolchainProvider.kt similarity index 81% rename from core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/LocalZigToolchainProvider.kt rename to core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/local/LocalZigToolchainProvider.kt index d83e8419..5d63ee66 100644 --- a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/LocalZigToolchainProvider.kt +++ b/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/local/LocalZigToolchainProvider.kt @@ -20,14 +20,14 @@ * along with ZigBrains. If not, see . */ -package com.falsepattern.zigbrains.project.toolchain +package com.falsepattern.zigbrains.project.toolchain.local import com.falsepattern.zigbrains.direnv.DirenvCmd import com.falsepattern.zigbrains.direnv.emptyEnv import com.falsepattern.zigbrains.project.settings.zigProjectSettings +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchainProvider import com.intellij.openapi.project.Project -import com.intellij.openapi.projectRoots.Sdk -import com.intellij.openapi.roots.ui.configuration.SdkPopupBuilder import com.intellij.openapi.ui.NamedConfigurable import com.intellij.openapi.util.UserDataHolder import com.intellij.openapi.util.io.FileUtil @@ -36,12 +36,6 @@ import com.intellij.openapi.util.text.StringUtil import com.intellij.ui.SimpleColoredComponent import com.intellij.ui.SimpleTextAttributes import com.intellij.util.EnvironmentUtil -import com.intellij.util.IconUtil -import com.intellij.util.system.OS -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.asFlow -import kotlinx.coroutines.flow.mapNotNull -import kotlinx.serialization.json.* import java.io.File import java.util.UUID import kotlin.io.path.pathString @@ -60,18 +54,18 @@ class LocalZigToolchainProvider: ZigToolchainProvider { override val serialMarker: String get() = "local" - override fun deserialize(data: Map): AbstractZigToolchain? { + override fun deserialize(data: Map): ZigToolchain? { val location = data["location"]?.toNioPathOrNull() ?: return null val std = data["std"]?.toNioPathOrNull() val name = data["name"] return LocalZigToolchain(location, std, name) } - override fun isCompatible(toolchain: AbstractZigToolchain): Boolean { + override fun isCompatible(toolchain: ZigToolchain): Boolean { return toolchain is LocalZigToolchain } - override fun serialize(toolchain: AbstractZigToolchain): Map { + override fun serialize(toolchain: ZigToolchain): Map { toolchain as LocalZigToolchain val map = HashMap() toolchain.location.pathString.let { map["location"] = it } @@ -81,8 +75,8 @@ class LocalZigToolchainProvider: ZigToolchainProvider { } override fun matchesSuggestion( - toolchain: AbstractZigToolchain, - suggestion: AbstractZigToolchain + toolchain: ZigToolchain, + suggestion: ZigToolchain ): Boolean { toolchain as LocalZigToolchain suggestion as LocalZigToolchain @@ -91,20 +85,20 @@ class LocalZigToolchainProvider: ZigToolchainProvider { override fun createConfigurable( uuid: UUID, - toolchain: AbstractZigToolchain, + toolchain: ZigToolchain, project: Project ): NamedConfigurable { toolchain as LocalZigToolchain return LocalZigToolchainConfigurable(uuid, toolchain, project) } - override fun suggestToolchains(): List { + override fun suggestToolchains(): List { val res = HashSet() EnvironmentUtil.getValue("PATH")?.split(File.pathSeparatorChar)?.let { res.addAll(it.toList()) } return res.mapNotNull { LocalZigToolchain.tryFromPathString(it) } } - override fun render(toolchain: AbstractZigToolchain, component: SimpleColoredComponent) { + override fun render(toolchain: ZigToolchain, component: SimpleColoredComponent) { toolchain as LocalZigToolchain component.append(presentDetectedPath(toolchain.location.pathString)) if (toolchain.name != null) { diff --git a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/tools/ZigCompilerTool.kt b/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/tools/ZigCompilerTool.kt index 1f67b4a7..82bcc4d7 100644 --- a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/tools/ZigCompilerTool.kt +++ b/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/tools/ZigCompilerTool.kt @@ -22,15 +22,14 @@ package com.falsepattern.zigbrains.project.toolchain.tools -import com.falsepattern.zigbrains.project.toolchain.AbstractZigToolchain -import com.falsepattern.zigbrains.project.toolchain.ZigToolchainEnvironmentSerializable +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain import com.intellij.openapi.project.Project import kotlinx.coroutines.runBlocking import kotlinx.serialization.SerializationException import kotlinx.serialization.json.Json import java.nio.file.Path -class ZigCompilerTool(toolchain: AbstractZigToolchain) : ZigTool(toolchain) { +class ZigCompilerTool(toolchain: ZigToolchain) : ZigTool(toolchain) { override val toolName: String get() = "zig" diff --git a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/tools/ZigTool.kt b/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/tools/ZigTool.kt index c7a1e507..fa9c5d49 100644 --- a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/tools/ZigTool.kt +++ b/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/tools/ZigTool.kt @@ -22,7 +22,7 @@ package com.falsepattern.zigbrains.project.toolchain.tools -import com.falsepattern.zigbrains.project.toolchain.AbstractZigToolchain +import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain import com.falsepattern.zigbrains.shared.cli.call import com.falsepattern.zigbrains.shared.cli.createCommandLineSafe import com.intellij.execution.configurations.GeneralCommandLine @@ -31,7 +31,7 @@ import com.intellij.openapi.project.Project import java.nio.file.Path import kotlin.io.path.isRegularFile -abstract class ZigTool(val toolchain: AbstractZigToolchain) { +abstract class ZigTool(val toolchain: ZigToolchain) { abstract val toolName: String suspend fun callWithArgs(workingDirectory: Path?, vararg parameters: String, timeoutMillis: Long = Long.MAX_VALUE, ipcProject: Project? = null): Result { diff --git a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/ZigToolchainEnvironmentSerializable.kt b/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/tools/ZigToolchainEnvironmentSerializable.kt similarity index 93% rename from core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/ZigToolchainEnvironmentSerializable.kt rename to core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/tools/ZigToolchainEnvironmentSerializable.kt index 8bda26d3..15e8a7ae 100644 --- a/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/ZigToolchainEnvironmentSerializable.kt +++ b/core/src/main/kotlin/com/falsepattern/zigbrains/project/toolchain/tools/ZigToolchainEnvironmentSerializable.kt @@ -19,15 +19,16 @@ * You should have received a copy of the GNU Lesser General Public License * along with ZigBrains. If not, see . */ -package com.falsepattern.zigbrains.project.toolchain +package com.falsepattern.zigbrains.project.toolchain.tools + +import com.falsepattern.zigbrains.project.toolchain.local.LocalZigToolchain import com.intellij.openapi.project.Project import com.intellij.openapi.util.io.toNioPathOrNull import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import java.nio.file.Path - @JvmRecord @Serializable data class ZigToolchainEnvironmentSerializable( @@ -49,4 +50,4 @@ data class ZigToolchainEnvironmentSerializable( return null } -} +} \ No newline at end of file diff --git a/core/src/main/resources/META-INF/zigbrains-core.xml b/core/src/main/resources/META-INF/zigbrains-core.xml index b5ec5fe5..7d1247b8 100644 --- a/core/src/main/resources/META-INF/zigbrains-core.xml +++ b/core/src/main/resources/META-INF/zigbrains-core.xml @@ -164,7 +164,7 @@ /> @@ -183,7 +183,7 @@ . */ -package com.falsepattern.zigbrains.project.toolchain +package com.falsepattern.zigbrains.lsp import com.falsepattern.zigbrains.lsp.config.SuspendingZLSConfigProvider import com.falsepattern.zigbrains.lsp.config.ZLSConfig import com.falsepattern.zigbrains.project.settings.zigProjectSettings +import com.falsepattern.zigbrains.project.toolchain.base.suggestZigToolchain import com.intellij.notification.Notification import com.intellij.notification.NotificationType import com.intellij.openapi.project.Project @@ -32,7 +33,6 @@ import com.intellij.openapi.util.UserDataHolderBase import com.intellij.openapi.util.io.toNioPathOrNull import kotlin.io.path.pathString - class ToolchainZLSConfigProvider: SuspendingZLSConfigProvider { override suspend fun getEnvironment(project: Project, previous: ZLSConfig): ZLSConfig { val svc = project.zigProjectSettings diff --git a/lsp/src/main/resources/META-INF/zigbrains-lsp.xml b/lsp/src/main/resources/META-INF/zigbrains-lsp.xml index d07aaa59..d4b6c582 100644 --- a/lsp/src/main/resources/META-INF/zigbrains-lsp.xml +++ b/lsp/src/main/resources/META-INF/zigbrains-lsp.xml @@ -56,7 +56,7 @@ implementation="com.falsepattern.zigbrains.lsp.settings.ZLSSettingsConfigProvider" />