refactor toolchain directory structure
This commit is contained in:
parent
2c500d40a5
commit
9541bb9752
38 changed files with 113 additions and 155 deletions
|
@ -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<ZigExecConfigBinary>(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) }
|
||||
|
|
|
@ -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<ProfileState: ZigProfileState<*>>(
|
||||
private val profileState: ProfileState,
|
||||
private val toolchain: AbstractZigToolchain,
|
||||
private val toolchain: ZigToolchain,
|
||||
private val executableFile: File,
|
||||
private val exeArgs: List<String>
|
||||
): Installer {
|
||||
|
|
|
@ -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<ProfileState: ZigProfileState<*>>(
|
||||
private val driverConfiguration: DebuggerDriverConfiguration,
|
||||
protected val toolchain: AbstractZigToolchain,
|
||||
protected val toolchain: ZigToolchain,
|
||||
protected val profileState: ProfileState
|
||||
): RunParameters() {
|
||||
override fun getDebuggerDriverConfiguration(): DebuggerDriverConfiguration {
|
||||
|
|
|
@ -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<ProfileState: ZigProfileState<*>>(
|
||||
driverConfiguration: DebuggerDriverConfiguration,
|
||||
toolchain: AbstractZigToolchain,
|
||||
toolchain: ZigToolchain,
|
||||
profileState: ProfileState,
|
||||
) : ZigDebugParametersBase<ProfileState>(driverConfiguration, toolchain, profileState), PreLaunchAware {
|
||||
@Volatile
|
||||
|
|
|
@ -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<ProfileState : ZigProfileState<*>> : 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<ProfileState : ZigProfileState<*>> : 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<ProfileState : ZigProfileState<*>> : ZigProgra
|
|||
protected abstract fun getDebugParameters(
|
||||
state: ProfileState,
|
||||
debuggerDriver: DebuggerDriverConfiguration,
|
||||
toolchain: AbstractZigToolchain
|
||||
toolchain: ZigToolchain
|
||||
): ZigDebugParametersBase<ProfileState>
|
||||
|
||||
private class SharedConsoleBuilder(private val console: ConsoleView) : TextConsoleBuilder() {
|
||||
|
|
|
@ -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<ZigProfileStateBinary>(driverConfiguration, toolchain, profileState) {
|
||||
private val executableFile = profileState.configuration.exePath.path?.toFile() ?: throw ExecutionException(ZigDebugBundle.message("exception.missing-exe-path"))
|
||||
override fun getInstaller(): Installer {
|
||||
|
|
|
@ -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<ZigProfileStateBinary>() {
|
|||
override fun getDebugParameters(
|
||||
state: ZigProfileStateBinary,
|
||||
debuggerDriver: DebuggerDriverConfiguration,
|
||||
toolchain: AbstractZigToolchain
|
||||
toolchain: ZigToolchain
|
||||
): ZigDebugParametersBase<ZigProfileStateBinary> {
|
||||
return ZigDebugParametersBinary(debuggerDriver, LocalZigToolchain.ensureLocal(toolchain), state)
|
||||
}
|
||||
|
|
|
@ -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<ZigProfileStateBuild>(driverConfiguration, toolchain, profileState), PreLaunchAware {
|
||||
@Volatile
|
||||
|
|
|
@ -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<ZigProfileStateBuild>() {
|
|||
override fun getDebugParameters(
|
||||
state: ZigProfileStateBuild,
|
||||
debuggerDriver: DebuggerDriverConfiguration,
|
||||
toolchain: AbstractZigToolchain
|
||||
toolchain: ZigToolchain
|
||||
): ZigDebugParametersBase<ZigProfileStateBuild> {
|
||||
return ZigDebugParametersBuild(debuggerDriver, LocalZigToolchain.ensureLocal(toolchain), state)
|
||||
}
|
||||
|
|
|
@ -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<ZigProfileStateRun>(driverConfiguration, toolchain, profileState) {
|
||||
override fun getInstaller(): Installer {
|
||||
return ZigDebugEmitBinaryInstaller(profileState, toolchain, executableFile, profileState.configuration.exeArgs.argsSplit())
|
||||
|
|
|
@ -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<ZigProfileStateRun>() {
|
|||
override fun getDebugParameters(
|
||||
state: ZigProfileStateRun,
|
||||
debuggerDriver: DebuggerDriverConfiguration,
|
||||
toolchain: AbstractZigToolchain
|
||||
toolchain: ZigToolchain
|
||||
): ZigDebugParametersBase<ZigProfileStateRun> {
|
||||
return ZigDebugParametersRun(debuggerDriver, LocalZigToolchain.ensureLocal(toolchain), state)
|
||||
}
|
||||
|
|
|
@ -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<ZigProfileStateTest>(driverConfiguration, toolchain, profileState) {
|
||||
override fun getInstaller(): Installer {
|
||||
return ZigDebugEmitBinaryInstaller(profileState, toolchain, executableFile, listOf())
|
||||
|
|
|
@ -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<ZigProfileStateTest>() {
|
|||
override fun getDebugParameters(
|
||||
state: ZigProfileStateTest,
|
||||
debuggerDriver: DebuggerDriverConfiguration,
|
||||
toolchain: AbstractZigToolchain
|
||||
toolchain: ZigToolchain
|
||||
): ZigDebugParametersBase<ZigProfileStateTest> {
|
||||
return ZigDebugParametersTest(debuggerDriver, LocalZigToolchain.ensureLocal(toolchain), state)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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<T: ZigExecConfig<T>> (
|
||||
|
@ -71,7 +60,7 @@ abstract class ZigProfileState<T: ZigExecConfig<T>> (
|
|||
}
|
||||
|
||||
@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()
|
||||
|
||||
|
|
|
@ -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<ProfileState : ZigProfileState<*>>(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?
|
||||
}
|
|
@ -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<ZigProfileState<*>>(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)
|
||||
|
|
|
@ -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?
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
* along with ZigBrains. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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
|
|
@ -20,7 +20,7 @@
|
|||
* along with ZigBrains. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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<ZigToolchainListService.State>(State()) {
|
||||
fun setToolchain(uuid: UUID, toolchain: AbstractZigToolchain) {
|
||||
fun setToolchain(uuid: UUID, toolchain: ZigToolchain) {
|
||||
updateState {
|
||||
val newMap = HashMap<String, AbstractZigToolchain.Ref>()
|
||||
val newMap = HashMap<String, ZigToolchain.Ref>()
|
||||
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<ZigToolchain
|
|||
}
|
||||
}
|
||||
|
||||
val toolchains: Sequence<Pair<UUID, AbstractZigToolchain>>
|
||||
val toolchains: Sequence<Pair<UUID, ZigToolchain>>
|
||||
get() = state.toolchains
|
||||
.asSequence()
|
||||
.mapNotNull {
|
||||
|
@ -63,7 +65,7 @@ class ZigToolchainListService: SerializablePersistentStateComponent<ZigToolchain
|
|||
|
||||
data class State(
|
||||
@JvmField
|
||||
val toolchains: Map<String, AbstractZigToolchain.Ref> = emptyMap(),
|
||||
val toolchains: Map<String, ZigToolchain.Ref> = emptyMap(),
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -20,20 +20,16 @@
|
|||
* along with ZigBrains. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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?
|
|
@ -20,58 +20,52 @@
|
|||
* along with ZigBrains. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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<ZigToolchainProvider>("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<String, String>): AbstractZigToolchain?
|
||||
fun serialize(toolchain: AbstractZigToolchain): Map<String, String>
|
||||
fun matchesSuggestion(toolchain: AbstractZigToolchain, suggestion: AbstractZigToolchain): Boolean
|
||||
fun createConfigurable(uuid: UUID, toolchain: AbstractZigToolchain, project: Project): NamedConfigurable<UUID>
|
||||
fun suggestToolchains(): List<AbstractZigToolchain>
|
||||
fun render(toolchain: AbstractZigToolchain, component: SimpleColoredComponent)
|
||||
fun isCompatible(toolchain: ZigToolchain): Boolean
|
||||
fun deserialize(data: Map<String, String>): ZigToolchain?
|
||||
fun serialize(toolchain: ZigToolchain): Map<String, String>
|
||||
fun matchesSuggestion(toolchain: ZigToolchain, suggestion: ZigToolchain): Boolean
|
||||
fun createConfigurable(uuid: UUID, toolchain: ZigToolchain, project: Project): NamedConfigurable<UUID>
|
||||
fun suggestToolchains(): List<ZigToolchain>
|
||||
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<UUID> {
|
||||
fun ZigToolchain.createNamedConfigurable(uuid: UUID, project: Project): NamedConfigurable<UUID> {
|
||||
val provider = EXTENSION_POINT_NAME.extensionList.find { it.isCompatible(this) } ?: throw IllegalStateException()
|
||||
return provider.createConfigurable(uuid, this, project)
|
||||
}
|
||||
|
||||
fun suggestZigToolchains(existing: List<AbstractZigToolchain>): List<AbstractZigToolchain> {
|
||||
fun suggestZigToolchains(existing: List<ZigToolchain>): List<ZigToolchain> {
|
||||
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<AbstractZigToolchain>): List<AbstractZig
|
|||
}
|
||||
}
|
||||
|
||||
fun AbstractZigToolchain.render(component: SimpleColoredComponent) {
|
||||
fun ZigToolchain.render(component: SimpleColoredComponent) {
|
||||
val provider = EXTENSION_POINT_NAME.extensionList.find { it.isCompatible(this) } ?: throw IllegalStateException()
|
||||
return provider.render(this, component)
|
||||
}
|
|
@ -20,10 +20,11 @@
|
|||
* along with ZigBrains. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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<Boolean>("ZIG_LOCAL_DIRENV")
|
||||
|
||||
@Throws(ExecutionException::class)
|
||||
fun ensureLocal(toolchain: AbstractZigToolchain): LocalZigToolchain {
|
||||
fun ensureLocal(toolchain: ZigToolchain): LocalZigToolchain {
|
||||
if (toolchain is LocalZigToolchain) {
|
||||
return toolchain
|
||||
} else {
|
|
@ -20,8 +20,9 @@
|
|||
* along with ZigBrains. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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
|
|
@ -20,7 +20,7 @@
|
|||
* along with ZigBrains. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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
|
|
@ -20,14 +20,14 @@
|
|||
* along with ZigBrains. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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<String, String>): AbstractZigToolchain? {
|
||||
override fun deserialize(data: Map<String, String>): 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<String, String> {
|
||||
override fun serialize(toolchain: ZigToolchain): Map<String, String> {
|
||||
toolchain as LocalZigToolchain
|
||||
val map = HashMap<String, String>()
|
||||
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<UUID> {
|
||||
toolchain as LocalZigToolchain
|
||||
return LocalZigToolchainConfigurable(uuid, toolchain, project)
|
||||
}
|
||||
|
||||
override fun suggestToolchains(): List<AbstractZigToolchain> {
|
||||
override fun suggestToolchains(): List<ZigToolchain> {
|
||||
val res = HashSet<String>()
|
||||
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) {
|
|
@ -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"
|
||||
|
||||
|
|
|
@ -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<ProcessOutput> {
|
||||
|
|
|
@ -19,15 +19,16 @@
|
|||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with ZigBrains. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
|
@ -164,7 +164,7 @@
|
|||
/>
|
||||
|
||||
<additionalLibraryRootsProvider
|
||||
implementation="com.falsepattern.zigbrains.project.toolchain.stdlib.ZigLibraryRootProvider"
|
||||
implementation="com.falsepattern.zigbrains.project.stdlib.ZigLibraryRootProvider"
|
||||
/>
|
||||
|
||||
<!--suppress PluginXmlValidity -->
|
||||
|
@ -183,7 +183,7 @@
|
|||
|
||||
<extensions defaultExtensionNs="com.falsepattern.zigbrains">
|
||||
<toolchainProvider
|
||||
implementation="com.falsepattern.zigbrains.project.toolchain.LocalZigToolchainProvider"
|
||||
implementation="com.falsepattern.zigbrains.project.toolchain.local.LocalZigToolchainProvider"
|
||||
/>
|
||||
<projectConfigProvider
|
||||
implementation="com.falsepattern.zigbrains.project.settings.ZigCoreProjectConfigurationProvider"
|
||||
|
|
|
@ -20,11 +20,12 @@
|
|||
* along with ZigBrains. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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
|
|
@ -56,7 +56,7 @@
|
|||
implementation="com.falsepattern.zigbrains.lsp.settings.ZLSSettingsConfigProvider"
|
||||
/>
|
||||
<zlsConfigProvider
|
||||
implementation="com.falsepattern.zigbrains.project.toolchain.ToolchainZLSConfigProvider"
|
||||
implementation="com.falsepattern.zigbrains.lsp.ToolchainZLSConfigProvider"
|
||||
/>
|
||||
<projectConfigProvider
|
||||
implementation="com.falsepattern.zigbrains.lsp.ZLSProjectConfigurationProvider"
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
name="projectConfigProvider"
|
||||
/>
|
||||
<extensionPoint
|
||||
interface="com.falsepattern.zigbrains.project.toolchain.ZigToolchainProvider"
|
||||
interface="com.falsepattern.zigbrains.project.toolchain.base.ZigToolchainProvider"
|
||||
dynamic="true"
|
||||
name="toolchainProvider"
|
||||
/>
|
||||
|
|
Loading…
Add table
Reference in a new issue