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.debugger.ZigDebugBundle
|
||||||
import com.falsepattern.zigbrains.project.execution.base.ZigProfileState
|
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.ExecutionException
|
||||||
import com.intellij.execution.configurations.GeneralCommandLine
|
import com.intellij.execution.configurations.GeneralCommandLine
|
||||||
import com.intellij.execution.runners.ExecutionEnvironment
|
import com.intellij.execution.runners.ExecutionEnvironment
|
||||||
import kotlin.io.path.pathString
|
import kotlin.io.path.pathString
|
||||||
|
|
||||||
class ZigProfileStateBinary(environment: ExecutionEnvironment, configuration: ZigExecConfigBinary) : ZigProfileState<ZigExecConfigBinary>(environment, configuration) {
|
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 cli = GeneralCommandLine()
|
||||||
val cfg = configuration
|
val cfg = configuration
|
||||||
cfg.workingDirectory.path?.let { cli.withWorkingDirectory(it) }
|
cfg.workingDirectory.path?.let { cli.withWorkingDirectory(it) }
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
package com.falsepattern.zigbrains.debugger.runner.base
|
package com.falsepattern.zigbrains.debugger.runner.base
|
||||||
|
|
||||||
import com.falsepattern.zigbrains.project.execution.base.ZigProfileState
|
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.falsepattern.zigbrains.shared.zigCoroutineScope
|
||||||
import com.intellij.execution.configurations.GeneralCommandLine
|
import com.intellij.execution.configurations.GeneralCommandLine
|
||||||
import com.intellij.execution.configurations.PtyCommandLine
|
import com.intellij.execution.configurations.PtyCommandLine
|
||||||
|
@ -34,7 +34,7 @@ import java.io.File
|
||||||
|
|
||||||
class ZigDebugEmitBinaryInstaller<ProfileState: ZigProfileState<*>>(
|
class ZigDebugEmitBinaryInstaller<ProfileState: ZigProfileState<*>>(
|
||||||
private val profileState: ProfileState,
|
private val profileState: ProfileState,
|
||||||
private val toolchain: AbstractZigToolchain,
|
private val toolchain: ZigToolchain,
|
||||||
private val executableFile: File,
|
private val executableFile: File,
|
||||||
private val exeArgs: List<String>
|
private val exeArgs: List<String>
|
||||||
): Installer {
|
): Installer {
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
package com.falsepattern.zigbrains.debugger.runner.base
|
package com.falsepattern.zigbrains.debugger.runner.base
|
||||||
|
|
||||||
import com.falsepattern.zigbrains.project.execution.base.ZigProfileState
|
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.intellij.util.system.CpuArch
|
||||||
import com.jetbrains.cidr.ArchitectureType
|
import com.jetbrains.cidr.ArchitectureType
|
||||||
import com.jetbrains.cidr.execution.RunParameters
|
import com.jetbrains.cidr.execution.RunParameters
|
||||||
|
@ -31,7 +31,7 @@ import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration
|
||||||
|
|
||||||
abstract class ZigDebugParametersBase<ProfileState: ZigProfileState<*>>(
|
abstract class ZigDebugParametersBase<ProfileState: ZigProfileState<*>>(
|
||||||
private val driverConfiguration: DebuggerDriverConfiguration,
|
private val driverConfiguration: DebuggerDriverConfiguration,
|
||||||
protected val toolchain: AbstractZigToolchain,
|
protected val toolchain: ZigToolchain,
|
||||||
protected val profileState: ProfileState
|
protected val profileState: ProfileState
|
||||||
): RunParameters() {
|
): RunParameters() {
|
||||||
override fun getDebuggerDriverConfiguration(): DebuggerDriverConfiguration {
|
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.debugger.ZigDebugBundle
|
||||||
import com.falsepattern.zigbrains.project.execution.base.ZigProfileState
|
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.ExecutionException
|
||||||
import com.intellij.openapi.util.io.FileUtil
|
import com.intellij.openapi.util.io.FileUtil
|
||||||
import com.intellij.platform.util.progress.withProgressText
|
import com.intellij.platform.util.progress.withProgressText
|
||||||
|
@ -39,7 +39,7 @@ import kotlin.io.path.isExecutable
|
||||||
|
|
||||||
abstract class ZigDebugParametersEmitBinaryBase<ProfileState: ZigProfileState<*>>(
|
abstract class ZigDebugParametersEmitBinaryBase<ProfileState: ZigProfileState<*>>(
|
||||||
driverConfiguration: DebuggerDriverConfiguration,
|
driverConfiguration: DebuggerDriverConfiguration,
|
||||||
toolchain: AbstractZigToolchain,
|
toolchain: ZigToolchain,
|
||||||
profileState: ProfileState,
|
profileState: ProfileState,
|
||||||
) : ZigDebugParametersBase<ProfileState>(driverConfiguration, toolchain, profileState), PreLaunchAware {
|
) : ZigDebugParametersBase<ProfileState>(driverConfiguration, toolchain, profileState), PreLaunchAware {
|
||||||
@Volatile
|
@Volatile
|
||||||
|
|
|
@ -26,7 +26,7 @@ import com.falsepattern.zigbrains.debugbridge.ZigDebuggerDriverConfigurationProv
|
||||||
import com.falsepattern.zigbrains.debugger.ZigLocalDebugProcess
|
import com.falsepattern.zigbrains.debugger.ZigLocalDebugProcess
|
||||||
import com.falsepattern.zigbrains.project.execution.base.ZigProfileState
|
import com.falsepattern.zigbrains.project.execution.base.ZigProfileState
|
||||||
import com.falsepattern.zigbrains.project.run.ZigProgramRunner
|
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.runInterruptibleEDT
|
||||||
import com.falsepattern.zigbrains.shared.coroutine.withEDTContext
|
import com.falsepattern.zigbrains.shared.coroutine.withEDTContext
|
||||||
import com.intellij.execution.DefaultExecutionResult
|
import com.intellij.execution.DefaultExecutionResult
|
||||||
|
@ -52,7 +52,7 @@ abstract class ZigDebugRunnerBase<ProfileState : ZigProfileState<*>> : ZigProgra
|
||||||
@Throws(ExecutionException::class)
|
@Throws(ExecutionException::class)
|
||||||
override suspend fun execute(
|
override suspend fun execute(
|
||||||
state: ProfileState,
|
state: ProfileState,
|
||||||
toolchain: AbstractZigToolchain,
|
toolchain: ZigToolchain,
|
||||||
environment: ExecutionEnvironment
|
environment: ExecutionEnvironment
|
||||||
): RunContentDescriptor? {
|
): RunContentDescriptor? {
|
||||||
val project = environment.project
|
val project = environment.project
|
||||||
|
@ -67,7 +67,7 @@ abstract class ZigDebugRunnerBase<ProfileState : ZigProfileState<*>> : ZigProgra
|
||||||
@Throws(ExecutionException::class)
|
@Throws(ExecutionException::class)
|
||||||
private suspend fun executeWithDriver(
|
private suspend fun executeWithDriver(
|
||||||
state: ProfileState,
|
state: ProfileState,
|
||||||
toolchain: AbstractZigToolchain,
|
toolchain: ZigToolchain,
|
||||||
environment: ExecutionEnvironment,
|
environment: ExecutionEnvironment,
|
||||||
debuggerDriver: DebuggerDriverConfiguration
|
debuggerDriver: DebuggerDriverConfiguration
|
||||||
): RunContentDescriptor? {
|
): RunContentDescriptor? {
|
||||||
|
@ -113,7 +113,7 @@ abstract class ZigDebugRunnerBase<ProfileState : ZigProfileState<*>> : ZigProgra
|
||||||
protected abstract fun getDebugParameters(
|
protected abstract fun getDebugParameters(
|
||||||
state: ProfileState,
|
state: ProfileState,
|
||||||
debuggerDriver: DebuggerDriverConfiguration,
|
debuggerDriver: DebuggerDriverConfiguration,
|
||||||
toolchain: AbstractZigToolchain
|
toolchain: ZigToolchain
|
||||||
): ZigDebugParametersBase<ProfileState>
|
): ZigDebugParametersBase<ProfileState>
|
||||||
|
|
||||||
private class SharedConsoleBuilder(private val console: ConsoleView) : TextConsoleBuilder() {
|
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.execution.binary.ZigProfileStateBinary
|
||||||
import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugEmitBinaryInstaller
|
import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugEmitBinaryInstaller
|
||||||
import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugParametersBase
|
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.intellij.execution.ExecutionException
|
||||||
import com.jetbrains.cidr.execution.Installer
|
import com.jetbrains.cidr.execution.Installer
|
||||||
import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration
|
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) {
|
ZigDebugParametersBase<ZigProfileStateBinary>(driverConfiguration, toolchain, profileState) {
|
||||||
private val executableFile = profileState.configuration.exePath.path?.toFile() ?: throw ExecutionException(ZigDebugBundle.message("exception.missing-exe-path"))
|
private val executableFile = profileState.configuration.exePath.path?.toFile() ?: throw ExecutionException(ZigDebugBundle.message("exception.missing-exe-path"))
|
||||||
override fun getInstaller(): Installer {
|
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.ZigDebugParametersBase
|
||||||
import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugRunnerBase
|
import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugRunnerBase
|
||||||
import com.falsepattern.zigbrains.project.execution.base.ZigProfileState
|
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.project.toolchain.LocalZigToolchain
|
import com.falsepattern.zigbrains.project.toolchain.local.LocalZigToolchain
|
||||||
import com.intellij.execution.configurations.RunProfile
|
import com.intellij.execution.configurations.RunProfile
|
||||||
import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration
|
import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ class ZigDebugRunnerBinary: ZigDebugRunnerBase<ZigProfileStateBinary>() {
|
||||||
override fun getDebugParameters(
|
override fun getDebugParameters(
|
||||||
state: ZigProfileStateBinary,
|
state: ZigProfileStateBinary,
|
||||||
debuggerDriver: DebuggerDriverConfiguration,
|
debuggerDriver: DebuggerDriverConfiguration,
|
||||||
toolchain: AbstractZigToolchain
|
toolchain: ZigToolchain
|
||||||
): ZigDebugParametersBase<ZigProfileStateBinary> {
|
): ZigDebugParametersBase<ZigProfileStateBinary> {
|
||||||
return ZigDebugParametersBinary(debuggerDriver, LocalZigToolchain.ensureLocal(toolchain), state)
|
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.ZigDebugEmitBinaryInstaller
|
||||||
import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugParametersBase
|
import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugParametersBase
|
||||||
import com.falsepattern.zigbrains.project.execution.build.ZigProfileStateBuild
|
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.execution.ExecutionException
|
||||||
import com.intellij.openapi.util.SystemInfo
|
import com.intellij.openapi.util.SystemInfo
|
||||||
import com.intellij.platform.util.progress.withProgressText
|
import com.intellij.platform.util.progress.withProgressText
|
||||||
|
@ -46,7 +46,7 @@ import kotlin.io.path.isRegularFile
|
||||||
|
|
||||||
class ZigDebugParametersBuild(
|
class ZigDebugParametersBuild(
|
||||||
driverConfiguration: DebuggerDriverConfiguration,
|
driverConfiguration: DebuggerDriverConfiguration,
|
||||||
toolchain: AbstractZigToolchain,
|
toolchain: ZigToolchain,
|
||||||
profileState: ZigProfileStateBuild
|
profileState: ZigProfileStateBuild
|
||||||
) : ZigDebugParametersBase<ZigProfileStateBuild>(driverConfiguration, toolchain, profileState), PreLaunchAware {
|
) : ZigDebugParametersBase<ZigProfileStateBuild>(driverConfiguration, toolchain, profileState), PreLaunchAware {
|
||||||
@Volatile
|
@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.base.ZigProfileState
|
||||||
import com.falsepattern.zigbrains.project.execution.build.ZigExecConfigBuild
|
import com.falsepattern.zigbrains.project.execution.build.ZigExecConfigBuild
|
||||||
import com.falsepattern.zigbrains.project.execution.build.ZigProfileStateBuild
|
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.falsepattern.zigbrains.project.toolchain.LocalZigToolchain
|
import com.falsepattern.zigbrains.project.toolchain.local.LocalZigToolchain
|
||||||
import com.intellij.execution.configurations.RunProfile
|
import com.intellij.execution.configurations.RunProfile
|
||||||
import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration
|
import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ class ZigDebugRunnerBuild: ZigDebugRunnerBase<ZigProfileStateBuild>() {
|
||||||
override fun getDebugParameters(
|
override fun getDebugParameters(
|
||||||
state: ZigProfileStateBuild,
|
state: ZigProfileStateBuild,
|
||||||
debuggerDriver: DebuggerDriverConfiguration,
|
debuggerDriver: DebuggerDriverConfiguration,
|
||||||
toolchain: AbstractZigToolchain
|
toolchain: ZigToolchain
|
||||||
): ZigDebugParametersBase<ZigProfileStateBuild> {
|
): ZigDebugParametersBase<ZigProfileStateBuild> {
|
||||||
return ZigDebugParametersBuild(debuggerDriver, LocalZigToolchain.ensureLocal(toolchain), state)
|
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.ZigDebugEmitBinaryInstaller
|
||||||
import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugParametersEmitBinaryBase
|
import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugParametersEmitBinaryBase
|
||||||
import com.falsepattern.zigbrains.project.execution.run.ZigProfileStateRun
|
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.Installer
|
||||||
import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration
|
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) {
|
ZigDebugParametersEmitBinaryBase<ZigProfileStateRun>(driverConfiguration, toolchain, profileState) {
|
||||||
override fun getInstaller(): Installer {
|
override fun getInstaller(): Installer {
|
||||||
return ZigDebugEmitBinaryInstaller(profileState, toolchain, executableFile, profileState.configuration.exeArgs.argsSplit())
|
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.base.ZigProfileState
|
||||||
import com.falsepattern.zigbrains.project.execution.run.ZigExecConfigRun
|
import com.falsepattern.zigbrains.project.execution.run.ZigExecConfigRun
|
||||||
import com.falsepattern.zigbrains.project.execution.run.ZigProfileStateRun
|
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.falsepattern.zigbrains.project.toolchain.LocalZigToolchain
|
import com.falsepattern.zigbrains.project.toolchain.local.LocalZigToolchain
|
||||||
import com.intellij.execution.configurations.RunProfile
|
import com.intellij.execution.configurations.RunProfile
|
||||||
import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration
|
import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ class ZigDebugRunnerRun: ZigDebugRunnerBase<ZigProfileStateRun>() {
|
||||||
override fun getDebugParameters(
|
override fun getDebugParameters(
|
||||||
state: ZigProfileStateRun,
|
state: ZigProfileStateRun,
|
||||||
debuggerDriver: DebuggerDriverConfiguration,
|
debuggerDriver: DebuggerDriverConfiguration,
|
||||||
toolchain: AbstractZigToolchain
|
toolchain: ZigToolchain
|
||||||
): ZigDebugParametersBase<ZigProfileStateRun> {
|
): ZigDebugParametersBase<ZigProfileStateRun> {
|
||||||
return ZigDebugParametersRun(debuggerDriver, LocalZigToolchain.ensureLocal(toolchain), state)
|
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.ZigDebugEmitBinaryInstaller
|
||||||
import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugParametersEmitBinaryBase
|
import com.falsepattern.zigbrains.debugger.runner.base.ZigDebugParametersEmitBinaryBase
|
||||||
import com.falsepattern.zigbrains.project.execution.test.ZigProfileStateTest
|
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.Installer
|
||||||
import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration
|
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) {
|
ZigDebugParametersEmitBinaryBase<ZigProfileStateTest>(driverConfiguration, toolchain, profileState) {
|
||||||
override fun getInstaller(): Installer {
|
override fun getInstaller(): Installer {
|
||||||
return ZigDebugEmitBinaryInstaller(profileState, toolchain, executableFile, listOf())
|
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.base.ZigProfileState
|
||||||
import com.falsepattern.zigbrains.project.execution.test.ZigExecConfigTest
|
import com.falsepattern.zigbrains.project.execution.test.ZigExecConfigTest
|
||||||
import com.falsepattern.zigbrains.project.execution.test.ZigProfileStateTest
|
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.falsepattern.zigbrains.project.toolchain.LocalZigToolchain
|
import com.falsepattern.zigbrains.project.toolchain.local.LocalZigToolchain
|
||||||
import com.intellij.execution.configurations.RunProfile
|
import com.intellij.execution.configurations.RunProfile
|
||||||
import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration
|
import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ class ZigDebugRunnerTest: ZigDebugRunnerBase<ZigProfileStateTest>() {
|
||||||
override fun getDebugParameters(
|
override fun getDebugParameters(
|
||||||
state: ZigProfileStateTest,
|
state: ZigProfileStateTest,
|
||||||
debuggerDriver: DebuggerDriverConfiguration,
|
debuggerDriver: DebuggerDriverConfiguration,
|
||||||
toolchain: AbstractZigToolchain
|
toolchain: ZigToolchain
|
||||||
): ZigDebugParametersBase<ZigProfileStateTest> {
|
): ZigDebugParametersBase<ZigProfileStateTest> {
|
||||||
return ZigDebugParametersTest(debuggerDriver, LocalZigToolchain.ensureLocal(toolchain), state)
|
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.direnv.DirenvCmd
|
||||||
import com.falsepattern.zigbrains.project.settings.zigProjectSettings
|
import com.falsepattern.zigbrains.project.settings.zigProjectSettings
|
||||||
import com.falsepattern.zigbrains.project.toolchain.LocalZigToolchain
|
import com.falsepattern.zigbrains.project.toolchain.local.LocalZigToolchain
|
||||||
import com.falsepattern.zigbrains.project.toolchain.ZigToolchainProvider
|
import com.falsepattern.zigbrains.project.toolchain.base.suggestZigToolchain
|
||||||
import com.falsepattern.zigbrains.project.toolchain.suggestZigToolchain
|
|
||||||
import com.intellij.ide.BrowserUtil
|
import com.intellij.ide.BrowserUtil
|
||||||
import com.intellij.ide.plugins.PluginManager
|
import com.intellij.ide.plugins.PluginManager
|
||||||
import com.intellij.notification.Notification
|
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.ZigBrainsBundle
|
||||||
import com.falsepattern.zigbrains.project.execution.ZigConsoleBuilder
|
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.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.cli.startIPCAwareProcess
|
||||||
import com.falsepattern.zigbrains.shared.coroutine.runModalOrBlocking
|
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.ExecutionException
|
||||||
import com.intellij.execution.configurations.CommandLineState
|
import com.intellij.execution.configurations.CommandLineState
|
||||||
import com.intellij.execution.configurations.GeneralCommandLine
|
import com.intellij.execution.configurations.GeneralCommandLine
|
||||||
import com.intellij.execution.configurations.PtyCommandLine
|
import com.intellij.execution.configurations.PtyCommandLine
|
||||||
import com.intellij.execution.filters.TextConsoleBuilder
|
|
||||||
import com.intellij.execution.process.ProcessHandler
|
import com.intellij.execution.process.ProcessHandler
|
||||||
import com.intellij.execution.process.ProcessTerminatedListener
|
|
||||||
import com.intellij.execution.runners.ExecutionEnvironment
|
import com.intellij.execution.runners.ExecutionEnvironment
|
||||||
import com.intellij.openapi.project.Project
|
|
||||||
import com.intellij.platform.ide.progress.ModalTaskOwner
|
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
|
import kotlin.io.path.pathString
|
||||||
|
|
||||||
abstract class ZigProfileState<T: ZigExecConfig<T>> (
|
abstract class ZigProfileState<T: ZigExecConfig<T>> (
|
||||||
|
@ -71,7 +60,7 @@ abstract class ZigProfileState<T: ZigExecConfig<T>> (
|
||||||
}
|
}
|
||||||
|
|
||||||
@Throws(ExecutionException::class)
|
@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 workingDir = configuration.workingDirectory
|
||||||
val zigExePath = toolchain.zig.path()
|
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.execution.base.ZigProfileState
|
||||||
import com.falsepattern.zigbrains.project.settings.zigProjectSettings
|
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.falsepattern.zigbrains.shared.zigCoroutineScope
|
||||||
import com.intellij.execution.ExecutionException
|
import com.intellij.execution.ExecutionException
|
||||||
import com.intellij.execution.configurations.RunProfileState
|
import com.intellij.execution.configurations.RunProfileState
|
||||||
|
@ -81,5 +81,5 @@ abstract class ZigProgramRunner<ProfileState : ZigProfileState<*>>(protected val
|
||||||
protected abstract fun castProfileState(state: ZigProfileState<*>): ProfileState?
|
protected abstract fun castProfileState(state: ZigProfileState<*>): ProfileState?
|
||||||
|
|
||||||
@Throws(ExecutionException::class)
|
@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.ZigExecConfig
|
||||||
import com.falsepattern.zigbrains.project.execution.base.ZigProfileState
|
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.falsepattern.zigbrains.shared.coroutine.withEDTContext
|
||||||
import com.intellij.execution.configurations.RunProfile
|
import com.intellij.execution.configurations.RunProfile
|
||||||
import com.intellij.execution.executors.DefaultRunExecutor
|
import com.intellij.execution.executors.DefaultRunExecutor
|
||||||
|
@ -34,7 +34,7 @@ import com.intellij.execution.ui.RunContentDescriptor
|
||||||
import com.intellij.openapi.application.ModalityState
|
import com.intellij.openapi.application.ModalityState
|
||||||
|
|
||||||
class ZigRegularRunner: ZigProgramRunner<ZigProfileState<*>>(DefaultRunExecutor.EXECUTOR_ID) {
|
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)
|
val exec = state.execute(environment.executor, this)
|
||||||
return withEDTContext(ModalityState.any()) {
|
return withEDTContext(ModalityState.any()) {
|
||||||
val runContentBuilder = RunContentBuilder(exec, environment)
|
val runContentBuilder = RunContentBuilder(exec, environment)
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
package com.falsepattern.zigbrains.project.settings
|
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.falsepattern.zigbrains.shared.SubConfigurable
|
||||||
import com.intellij.openapi.Disposable
|
import com.intellij.openapi.Disposable
|
||||||
import com.intellij.openapi.extensions.ExtensionPointName
|
import com.intellij.openapi.extensions.ExtensionPointName
|
||||||
|
@ -58,6 +58,6 @@ interface ZigProjectConfigurationProvider {
|
||||||
fun apply(project: Project)
|
fun apply(project: Project)
|
||||||
}
|
}
|
||||||
interface ToolchainProvider {
|
interface ToolchainProvider {
|
||||||
val toolchain: AbstractZigToolchain?
|
val toolchain: ZigToolchain?
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
package com.falsepattern.zigbrains.project.settings
|
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.project.Project
|
||||||
import com.intellij.openapi.util.io.toNioPathOrNull
|
import com.intellij.openapi.util.io.toNioPathOrNull
|
||||||
import com.intellij.util.xmlb.annotations.Transient
|
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.ZigBrainsBundle
|
||||||
import com.falsepattern.zigbrains.direnv.DirenvCmd
|
import com.falsepattern.zigbrains.direnv.DirenvCmd
|
||||||
import com.falsepattern.zigbrains.project.toolchain.LocalZigToolchain
|
import com.falsepattern.zigbrains.project.toolchain.local.LocalZigToolchain
|
||||||
import com.falsepattern.zigbrains.project.toolchain.ZigToolchainProvider
|
import com.falsepattern.zigbrains.project.toolchain.base.suggestZigToolchain
|
||||||
import com.falsepattern.zigbrains.project.toolchain.suggestZigToolchain
|
|
||||||
import com.falsepattern.zigbrains.shared.coroutine.launchWithEDT
|
import com.falsepattern.zigbrains.shared.coroutine.launchWithEDT
|
||||||
import com.falsepattern.zigbrains.shared.coroutine.withEDTContext
|
import com.falsepattern.zigbrains.shared.coroutine.withEDTContext
|
||||||
import com.falsepattern.zigbrains.shared.zigCoroutineScope
|
import com.falsepattern.zigbrains.shared.zigCoroutineScope
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
package com.falsepattern.zigbrains.project.settings
|
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.falsepattern.zigbrains.shared.zigCoroutineScope
|
||||||
import com.intellij.openapi.components.*
|
import com.intellij.openapi.components.*
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
* along with ZigBrains. If not, see <https://www.gnu.org/licenses/>.
|
* 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.project.Project
|
||||||
import com.intellij.openapi.roots.AdditionalLibraryRootsProvider
|
import com.intellij.openapi.roots.AdditionalLibraryRootsProvider
|
|
@ -20,7 +20,7 @@
|
||||||
* along with ZigBrains. If not, see <https://www.gnu.org/licenses/>.
|
* 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.Icons
|
||||||
import com.falsepattern.zigbrains.project.settings.ZigProjectSettings
|
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.Icons
|
||||||
import com.falsepattern.zigbrains.ZigBrainsBundle
|
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.coroutine.withEDTContext
|
||||||
import com.falsepattern.zigbrains.shared.zigCoroutineScope
|
import com.falsepattern.zigbrains.shared.zigCoroutineScope
|
||||||
import com.intellij.icons.AllIcons
|
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.AnActionEvent
|
||||||
import com.intellij.openapi.actionSystem.Presentation
|
import com.intellij.openapi.actionSystem.Presentation
|
||||||
import com.intellij.openapi.application.ModalityState
|
import com.intellij.openapi.application.ModalityState
|
||||||
import com.intellij.openapi.application.PathManager
|
|
||||||
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory
|
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory
|
||||||
import com.intellij.openapi.progress.coroutineToIndicator
|
|
||||||
import com.intellij.openapi.project.DumbAwareAction
|
import com.intellij.openapi.project.DumbAwareAction
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.project.ProjectManager
|
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.DialogBuilder
|
||||||
import com.intellij.openapi.ui.MasterDetailsComponent
|
import com.intellij.openapi.ui.MasterDetailsComponent
|
||||||
import com.intellij.openapi.util.Disposer
|
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.ModalTaskOwner
|
||||||
import com.intellij.platform.ide.progress.TaskCancellation
|
import com.intellij.platform.ide.progress.TaskCancellation
|
||||||
import com.intellij.platform.ide.progress.withModalProgress
|
import com.intellij.platform.ide.progress.withModalProgress
|
||||||
import com.intellij.platform.util.progress.withProgressText
|
|
||||||
import com.intellij.ui.*
|
import com.intellij.ui.*
|
||||||
import com.intellij.ui.components.JBList
|
|
||||||
import com.intellij.ui.components.panels.OpaquePanel
|
import com.intellij.ui.components.panels.OpaquePanel
|
||||||
import com.intellij.ui.components.textFieldWithBrowseButton
|
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.AlignX
|
||||||
import com.intellij.ui.dsl.builder.Cell
|
import com.intellij.ui.dsl.builder.Cell
|
||||||
import com.intellij.ui.dsl.builder.panel
|
import com.intellij.ui.dsl.builder.panel
|
||||||
import com.intellij.ui.popup.list.ComboBoxPopup
|
import com.intellij.ui.popup.list.ComboBoxPopup
|
||||||
import com.intellij.util.Consumer
|
import com.intellij.util.Consumer
|
||||||
import com.intellij.util.IconUtil
|
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.EmptyIcon
|
||||||
import com.intellij.util.ui.JBUI
|
import com.intellij.util.ui.JBUI
|
||||||
import com.intellij.util.ui.UIUtil
|
import com.intellij.util.ui.UIUtil
|
||||||
import kotlinx.coroutines.Dispatchers
|
|
||||||
import kotlinx.coroutines.async
|
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.BorderLayout
|
||||||
import java.awt.Component
|
import java.awt.Component
|
||||||
import java.nio.file.Path
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import javax.accessibility.AccessibleContext
|
import javax.accessibility.AccessibleContext
|
||||||
import javax.swing.DefaultComboBoxModel
|
import javax.swing.DefaultComboBoxModel
|
||||||
import javax.swing.JComponent
|
import javax.swing.JComponent
|
||||||
import javax.swing.JList
|
import javax.swing.JList
|
||||||
import javax.swing.JPanel
|
|
||||||
import javax.swing.ListCellRenderer
|
import javax.swing.ListCellRenderer
|
||||||
import javax.swing.border.Border
|
import javax.swing.border.Border
|
||||||
import javax.swing.event.DocumentEvent
|
|
||||||
import javax.swing.tree.DefaultTreeModel
|
import javax.swing.tree.DefaultTreeModel
|
||||||
|
|
||||||
class ZigToolchainListEditor() : MasterDetailsComponent() {
|
class ZigToolchainListEditor() : MasterDetailsComponent() {
|
||||||
|
@ -187,7 +173,7 @@ class ZigToolchainListEditor() : MasterDetailsComponent() {
|
||||||
|
|
||||||
override fun getDisplayName() = ZigBrainsBundle.message("settings.toolchains.title")
|
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))
|
val node = MyNode(toolchain.createNamedConfigurable(uuid, ProjectManager.getInstance().defaultProject))
|
||||||
addNode(node, myRoot)
|
addNode(node, myRoot)
|
||||||
}
|
}
|
||||||
|
@ -210,7 +196,7 @@ private sealed interface TCListElemIn
|
||||||
|
|
||||||
private sealed interface TCListElem : TCListElemIn {
|
private sealed interface TCListElem : TCListElemIn {
|
||||||
@JvmRecord
|
@JvmRecord
|
||||||
data class Toolchain(val toolchain: AbstractZigToolchain) : TCListElem
|
data class Toolchain(val toolchain: ZigToolchain) : TCListElem
|
||||||
object Download : TCListElem
|
object Download : TCListElem
|
||||||
object FromDisk : TCListElem
|
object FromDisk : TCListElem
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,8 +22,10 @@
|
||||||
|
|
||||||
package com.falsepattern.zigbrains.project.toolchain
|
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.openapi.components.*
|
||||||
import com.intellij.util.xmlb.annotations.MapAnnotation
|
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
@Service(Service.Level.APP)
|
@Service(Service.Level.APP)
|
||||||
|
@ -32,16 +34,16 @@ import java.util.UUID
|
||||||
storages = [Storage("zigbrains.xml")]
|
storages = [Storage("zigbrains.xml")]
|
||||||
)
|
)
|
||||||
class ZigToolchainListService: SerializablePersistentStateComponent<ZigToolchainListService.State>(State()) {
|
class ZigToolchainListService: SerializablePersistentStateComponent<ZigToolchainListService.State>(State()) {
|
||||||
fun setToolchain(uuid: UUID, toolchain: AbstractZigToolchain) {
|
fun setToolchain(uuid: UUID, toolchain: ZigToolchain) {
|
||||||
updateState {
|
updateState {
|
||||||
val newMap = HashMap<String, AbstractZigToolchain.Ref>()
|
val newMap = HashMap<String, ZigToolchain.Ref>()
|
||||||
newMap.putAll(it.toolchains)
|
newMap.putAll(it.toolchains)
|
||||||
newMap.put(uuid.toString(), toolchain.toRef())
|
newMap.put(uuid.toString(), toolchain.toRef())
|
||||||
it.copy(toolchains = newMap)
|
it.copy(toolchains = newMap)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getToolchain(uuid: UUID): AbstractZigToolchain? {
|
fun getToolchain(uuid: UUID): ZigToolchain? {
|
||||||
return state.toolchains[uuid.toString()]?.resolve()
|
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
|
get() = state.toolchains
|
||||||
.asSequence()
|
.asSequence()
|
||||||
.mapNotNull {
|
.mapNotNull {
|
||||||
|
@ -63,7 +65,7 @@ class ZigToolchainListService: SerializablePersistentStateComponent<ZigToolchain
|
||||||
|
|
||||||
data class State(
|
data class State(
|
||||||
@JvmField
|
@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/>.
|
* 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.falsepattern.zigbrains.project.toolchain.tools.ZigCompilerTool
|
||||||
import com.intellij.execution.configurations.GeneralCommandLine
|
import com.intellij.execution.configurations.GeneralCommandLine
|
||||||
import com.intellij.openapi.project.Project
|
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.Attribute
|
||||||
import com.intellij.util.xmlb.annotations.MapAnnotation
|
import com.intellij.util.xmlb.annotations.MapAnnotation
|
||||||
import com.intellij.util.xmlb.annotations.OptionTag
|
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
import java.util.UUID
|
|
||||||
|
|
||||||
|
abstract class ZigToolchain {
|
||||||
abstract class AbstractZigToolchain {
|
|
||||||
val zig: ZigCompilerTool by lazy { ZigCompilerTool(this) }
|
val zig: ZigCompilerTool by lazy { ZigCompilerTool(this) }
|
||||||
|
|
||||||
abstract fun workingDirectory(project: Project? = null): Path?
|
abstract fun workingDirectory(project: Project? = null): Path?
|
|
@ -20,58 +20,52 @@
|
||||||
* along with ZigBrains. If not, see <https://www.gnu.org/licenses/>.
|
* 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.extensions.ExtensionPointName
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.ui.NamedConfigurable
|
import com.intellij.openapi.ui.NamedConfigurable
|
||||||
import com.intellij.openapi.util.UserDataHolder
|
import com.intellij.openapi.util.UserDataHolder
|
||||||
import com.intellij.ui.SimpleColoredComponent
|
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
|
import java.util.UUID
|
||||||
|
|
||||||
private val EXTENSION_POINT_NAME = ExtensionPointName.create<ZigToolchainProvider>("com.falsepattern.zigbrains.toolchainProvider")
|
private val EXTENSION_POINT_NAME = ExtensionPointName.create<ZigToolchainProvider>("com.falsepattern.zigbrains.toolchainProvider")
|
||||||
|
|
||||||
sealed interface ZigToolchainProvider {
|
internal interface ZigToolchainProvider {
|
||||||
suspend fun suggestToolchain(project: Project?, extraData: UserDataHolder): AbstractZigToolchain?
|
suspend fun suggestToolchain(project: Project?, extraData: UserDataHolder): ZigToolchain?
|
||||||
|
|
||||||
val serialMarker: String
|
val serialMarker: String
|
||||||
fun isCompatible(toolchain: AbstractZigToolchain): Boolean
|
fun isCompatible(toolchain: ZigToolchain): Boolean
|
||||||
fun deserialize(data: Map<String, String>): AbstractZigToolchain?
|
fun deserialize(data: Map<String, String>): ZigToolchain?
|
||||||
fun serialize(toolchain: AbstractZigToolchain): Map<String, String>
|
fun serialize(toolchain: ZigToolchain): Map<String, String>
|
||||||
fun matchesSuggestion(toolchain: AbstractZigToolchain, suggestion: AbstractZigToolchain): Boolean
|
fun matchesSuggestion(toolchain: ZigToolchain, suggestion: ZigToolchain): Boolean
|
||||||
fun createConfigurable(uuid: UUID, toolchain: AbstractZigToolchain, project: Project): NamedConfigurable<UUID>
|
fun createConfigurable(uuid: UUID, toolchain: ZigToolchain, project: Project): NamedConfigurable<UUID>
|
||||||
fun suggestToolchains(): List<AbstractZigToolchain>
|
fun suggestToolchains(): List<ZigToolchain>
|
||||||
fun render(toolchain: AbstractZigToolchain, component: SimpleColoredComponent)
|
fun render(toolchain: ZigToolchain, component: SimpleColoredComponent)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun AbstractZigToolchain.Ref.resolve(): AbstractZigToolchain? {
|
fun ZigToolchain.Ref.resolve(): ZigToolchain? {
|
||||||
val marker = this.marker ?: return null
|
val marker = this.marker ?: return null
|
||||||
val data = this.data ?: return null
|
val data = this.data ?: return null
|
||||||
val provider = EXTENSION_POINT_NAME.extensionList.find { it.serialMarker == marker } ?: return null
|
val provider = EXTENSION_POINT_NAME.extensionList.find { it.serialMarker == marker } ?: return null
|
||||||
return provider.deserialize(data)
|
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()
|
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) }
|
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()
|
val provider = EXTENSION_POINT_NAME.extensionList.find { it.isCompatible(this) } ?: throw IllegalStateException()
|
||||||
return provider.createConfigurable(uuid, this, project)
|
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 ->
|
return EXTENSION_POINT_NAME.extensionList.flatMap { ext ->
|
||||||
val compatibleExisting = existing.filter { ext.isCompatible(it) }
|
val compatibleExisting = existing.filter { ext.isCompatible(it) }
|
||||||
val suggestions = ext.suggestToolchains()
|
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()
|
val provider = EXTENSION_POINT_NAME.extensionList.find { it.isCompatible(this) } ?: throw IllegalStateException()
|
||||||
return provider.render(this, component)
|
return provider.render(this, component)
|
||||||
}
|
}
|
|
@ -20,10 +20,11 @@
|
||||||
* along with ZigBrains. If not, see <https://www.gnu.org/licenses/>.
|
* 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.DirenvCmd
|
||||||
import com.falsepattern.zigbrains.project.settings.zigProjectSettings
|
import com.falsepattern.zigbrains.project.settings.zigProjectSettings
|
||||||
|
import com.falsepattern.zigbrains.project.toolchain.base.ZigToolchain
|
||||||
import com.intellij.execution.ExecutionException
|
import com.intellij.execution.ExecutionException
|
||||||
import com.intellij.execution.configurations.GeneralCommandLine
|
import com.intellij.execution.configurations.GeneralCommandLine
|
||||||
import com.intellij.openapi.project.Project
|
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.SystemInfo
|
||||||
import com.intellij.openapi.util.io.toNioPathOrNull
|
import com.intellij.openapi.util.io.toNioPathOrNull
|
||||||
import com.intellij.openapi.vfs.toNioPathOrNull
|
import com.intellij.openapi.vfs.toNioPathOrNull
|
||||||
import kotlinx.coroutines.runBlocking
|
|
||||||
import java.nio.file.Path
|
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? {
|
override fun workingDirectory(project: Project?): Path? {
|
||||||
return project?.guessProjectDir()?.toNioPathOrNull()
|
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")
|
val DIRENV_KEY = KeyWithDefaultValue.create<Boolean>("ZIG_LOCAL_DIRENV")
|
||||||
|
|
||||||
@Throws(ExecutionException::class)
|
@Throws(ExecutionException::class)
|
||||||
fun ensureLocal(toolchain: AbstractZigToolchain): LocalZigToolchain {
|
fun ensureLocal(toolchain: ZigToolchain): LocalZigToolchain {
|
||||||
if (toolchain is LocalZigToolchain) {
|
if (toolchain is LocalZigToolchain) {
|
||||||
return toolchain
|
return toolchain
|
||||||
} else {
|
} else {
|
|
@ -20,8 +20,9 @@
|
||||||
* along with ZigBrains. If not, see <https://www.gnu.org/licenses/>.
|
* 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.project.Project
|
||||||
import com.intellij.openapi.ui.NamedConfigurable
|
import com.intellij.openapi.ui.NamedConfigurable
|
||||||
import com.intellij.openapi.util.NlsContexts
|
import com.intellij.openapi.util.NlsContexts
|
|
@ -20,7 +20,7 @@
|
||||||
* along with ZigBrains. If not, see <https://www.gnu.org/licenses/>.
|
* 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.ZigBrainsBundle
|
||||||
import com.falsepattern.zigbrains.shared.coroutine.withEDTContext
|
import com.falsepattern.zigbrains.shared.coroutine.withEDTContext
|
|
@ -20,14 +20,14 @@
|
||||||
* along with ZigBrains. If not, see <https://www.gnu.org/licenses/>.
|
* 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.DirenvCmd
|
||||||
import com.falsepattern.zigbrains.direnv.emptyEnv
|
import com.falsepattern.zigbrains.direnv.emptyEnv
|
||||||
import com.falsepattern.zigbrains.project.settings.zigProjectSettings
|
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.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.ui.NamedConfigurable
|
||||||
import com.intellij.openapi.util.UserDataHolder
|
import com.intellij.openapi.util.UserDataHolder
|
||||||
import com.intellij.openapi.util.io.FileUtil
|
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.SimpleColoredComponent
|
||||||
import com.intellij.ui.SimpleTextAttributes
|
import com.intellij.ui.SimpleTextAttributes
|
||||||
import com.intellij.util.EnvironmentUtil
|
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.io.File
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
import kotlin.io.path.pathString
|
import kotlin.io.path.pathString
|
||||||
|
@ -60,18 +54,18 @@ class LocalZigToolchainProvider: ZigToolchainProvider {
|
||||||
override val serialMarker: String
|
override val serialMarker: String
|
||||||
get() = "local"
|
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 location = data["location"]?.toNioPathOrNull() ?: return null
|
||||||
val std = data["std"]?.toNioPathOrNull()
|
val std = data["std"]?.toNioPathOrNull()
|
||||||
val name = data["name"]
|
val name = data["name"]
|
||||||
return LocalZigToolchain(location, std, name)
|
return LocalZigToolchain(location, std, name)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun isCompatible(toolchain: AbstractZigToolchain): Boolean {
|
override fun isCompatible(toolchain: ZigToolchain): Boolean {
|
||||||
return toolchain is LocalZigToolchain
|
return toolchain is LocalZigToolchain
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun serialize(toolchain: AbstractZigToolchain): Map<String, String> {
|
override fun serialize(toolchain: ZigToolchain): Map<String, String> {
|
||||||
toolchain as LocalZigToolchain
|
toolchain as LocalZigToolchain
|
||||||
val map = HashMap<String, String>()
|
val map = HashMap<String, String>()
|
||||||
toolchain.location.pathString.let { map["location"] = it }
|
toolchain.location.pathString.let { map["location"] = it }
|
||||||
|
@ -81,8 +75,8 @@ class LocalZigToolchainProvider: ZigToolchainProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun matchesSuggestion(
|
override fun matchesSuggestion(
|
||||||
toolchain: AbstractZigToolchain,
|
toolchain: ZigToolchain,
|
||||||
suggestion: AbstractZigToolchain
|
suggestion: ZigToolchain
|
||||||
): Boolean {
|
): Boolean {
|
||||||
toolchain as LocalZigToolchain
|
toolchain as LocalZigToolchain
|
||||||
suggestion as LocalZigToolchain
|
suggestion as LocalZigToolchain
|
||||||
|
@ -91,20 +85,20 @@ class LocalZigToolchainProvider: ZigToolchainProvider {
|
||||||
|
|
||||||
override fun createConfigurable(
|
override fun createConfigurable(
|
||||||
uuid: UUID,
|
uuid: UUID,
|
||||||
toolchain: AbstractZigToolchain,
|
toolchain: ZigToolchain,
|
||||||
project: Project
|
project: Project
|
||||||
): NamedConfigurable<UUID> {
|
): NamedConfigurable<UUID> {
|
||||||
toolchain as LocalZigToolchain
|
toolchain as LocalZigToolchain
|
||||||
return LocalZigToolchainConfigurable(uuid, toolchain, project)
|
return LocalZigToolchainConfigurable(uuid, toolchain, project)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun suggestToolchains(): List<AbstractZigToolchain> {
|
override fun suggestToolchains(): List<ZigToolchain> {
|
||||||
val res = HashSet<String>()
|
val res = HashSet<String>()
|
||||||
EnvironmentUtil.getValue("PATH")?.split(File.pathSeparatorChar)?.let { res.addAll(it.toList()) }
|
EnvironmentUtil.getValue("PATH")?.split(File.pathSeparatorChar)?.let { res.addAll(it.toList()) }
|
||||||
return res.mapNotNull { LocalZigToolchain.tryFromPathString(it) }
|
return res.mapNotNull { LocalZigToolchain.tryFromPathString(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun render(toolchain: AbstractZigToolchain, component: SimpleColoredComponent) {
|
override fun render(toolchain: ZigToolchain, component: SimpleColoredComponent) {
|
||||||
toolchain as LocalZigToolchain
|
toolchain as LocalZigToolchain
|
||||||
component.append(presentDetectedPath(toolchain.location.pathString))
|
component.append(presentDetectedPath(toolchain.location.pathString))
|
||||||
if (toolchain.name != null) {
|
if (toolchain.name != null) {
|
|
@ -22,15 +22,14 @@
|
||||||
|
|
||||||
package com.falsepattern.zigbrains.project.toolchain.tools
|
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.project.toolchain.ZigToolchainEnvironmentSerializable
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import kotlinx.serialization.SerializationException
|
import kotlinx.serialization.SerializationException
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
|
|
||||||
class ZigCompilerTool(toolchain: AbstractZigToolchain) : ZigTool(toolchain) {
|
class ZigCompilerTool(toolchain: ZigToolchain) : ZigTool(toolchain) {
|
||||||
override val toolName: String
|
override val toolName: String
|
||||||
get() = "zig"
|
get() = "zig"
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
package com.falsepattern.zigbrains.project.toolchain.tools
|
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.call
|
||||||
import com.falsepattern.zigbrains.shared.cli.createCommandLineSafe
|
import com.falsepattern.zigbrains.shared.cli.createCommandLineSafe
|
||||||
import com.intellij.execution.configurations.GeneralCommandLine
|
import com.intellij.execution.configurations.GeneralCommandLine
|
||||||
|
@ -31,7 +31,7 @@ import com.intellij.openapi.project.Project
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
import kotlin.io.path.isRegularFile
|
import kotlin.io.path.isRegularFile
|
||||||
|
|
||||||
abstract class ZigTool(val toolchain: AbstractZigToolchain) {
|
abstract class ZigTool(val toolchain: ZigToolchain) {
|
||||||
abstract val toolName: String
|
abstract val toolName: String
|
||||||
|
|
||||||
suspend fun callWithArgs(workingDirectory: Path?, vararg parameters: String, timeoutMillis: Long = Long.MAX_VALUE, ipcProject: Project? = null): Result<ProcessOutput> {
|
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
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with ZigBrains. If not, see <https://www.gnu.org/licenses/>.
|
* 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.project.Project
|
||||||
import com.intellij.openapi.util.io.toNioPathOrNull
|
import com.intellij.openapi.util.io.toNioPathOrNull
|
||||||
import kotlinx.serialization.SerialName
|
import kotlinx.serialization.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
|
|
||||||
|
|
||||||
@JvmRecord
|
@JvmRecord
|
||||||
@Serializable
|
@Serializable
|
||||||
data class ZigToolchainEnvironmentSerializable(
|
data class ZigToolchainEnvironmentSerializable(
|
|
@ -164,7 +164,7 @@
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<additionalLibraryRootsProvider
|
<additionalLibraryRootsProvider
|
||||||
implementation="com.falsepattern.zigbrains.project.toolchain.stdlib.ZigLibraryRootProvider"
|
implementation="com.falsepattern.zigbrains.project.stdlib.ZigLibraryRootProvider"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!--suppress PluginXmlValidity -->
|
<!--suppress PluginXmlValidity -->
|
||||||
|
@ -183,7 +183,7 @@
|
||||||
|
|
||||||
<extensions defaultExtensionNs="com.falsepattern.zigbrains">
|
<extensions defaultExtensionNs="com.falsepattern.zigbrains">
|
||||||
<toolchainProvider
|
<toolchainProvider
|
||||||
implementation="com.falsepattern.zigbrains.project.toolchain.LocalZigToolchainProvider"
|
implementation="com.falsepattern.zigbrains.project.toolchain.local.LocalZigToolchainProvider"
|
||||||
/>
|
/>
|
||||||
<projectConfigProvider
|
<projectConfigProvider
|
||||||
implementation="com.falsepattern.zigbrains.project.settings.ZigCoreProjectConfigurationProvider"
|
implementation="com.falsepattern.zigbrains.project.settings.ZigCoreProjectConfigurationProvider"
|
||||||
|
|
|
@ -20,11 +20,12 @@
|
||||||
* along with ZigBrains. If not, see <https://www.gnu.org/licenses/>.
|
* 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.SuspendingZLSConfigProvider
|
||||||
import com.falsepattern.zigbrains.lsp.config.ZLSConfig
|
import com.falsepattern.zigbrains.lsp.config.ZLSConfig
|
||||||
import com.falsepattern.zigbrains.project.settings.zigProjectSettings
|
import com.falsepattern.zigbrains.project.settings.zigProjectSettings
|
||||||
|
import com.falsepattern.zigbrains.project.toolchain.base.suggestZigToolchain
|
||||||
import com.intellij.notification.Notification
|
import com.intellij.notification.Notification
|
||||||
import com.intellij.notification.NotificationType
|
import com.intellij.notification.NotificationType
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
|
@ -32,7 +33,6 @@ import com.intellij.openapi.util.UserDataHolderBase
|
||||||
import com.intellij.openapi.util.io.toNioPathOrNull
|
import com.intellij.openapi.util.io.toNioPathOrNull
|
||||||
import kotlin.io.path.pathString
|
import kotlin.io.path.pathString
|
||||||
|
|
||||||
|
|
||||||
class ToolchainZLSConfigProvider: SuspendingZLSConfigProvider {
|
class ToolchainZLSConfigProvider: SuspendingZLSConfigProvider {
|
||||||
override suspend fun getEnvironment(project: Project, previous: ZLSConfig): ZLSConfig {
|
override suspend fun getEnvironment(project: Project, previous: ZLSConfig): ZLSConfig {
|
||||||
val svc = project.zigProjectSettings
|
val svc = project.zigProjectSettings
|
|
@ -56,7 +56,7 @@
|
||||||
implementation="com.falsepattern.zigbrains.lsp.settings.ZLSSettingsConfigProvider"
|
implementation="com.falsepattern.zigbrains.lsp.settings.ZLSSettingsConfigProvider"
|
||||||
/>
|
/>
|
||||||
<zlsConfigProvider
|
<zlsConfigProvider
|
||||||
implementation="com.falsepattern.zigbrains.project.toolchain.ToolchainZLSConfigProvider"
|
implementation="com.falsepattern.zigbrains.lsp.ToolchainZLSConfigProvider"
|
||||||
/>
|
/>
|
||||||
<projectConfigProvider
|
<projectConfigProvider
|
||||||
implementation="com.falsepattern.zigbrains.lsp.ZLSProjectConfigurationProvider"
|
implementation="com.falsepattern.zigbrains.lsp.ZLSProjectConfigurationProvider"
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
name="projectConfigProvider"
|
name="projectConfigProvider"
|
||||||
/>
|
/>
|
||||||
<extensionPoint
|
<extensionPoint
|
||||||
interface="com.falsepattern.zigbrains.project.toolchain.ZigToolchainProvider"
|
interface="com.falsepattern.zigbrains.project.toolchain.base.ZigToolchainProvider"
|
||||||
dynamic="true"
|
dynamic="true"
|
||||||
name="toolchainProvider"
|
name="toolchainProvider"
|
||||||
/>
|
/>
|
||||||
|
|
Loading…
Add table
Reference in a new issue