Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(settings): allow enabling/disabling of language server diagnostics #80

Merged
merged 2 commits into from
Mar 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ plugins {
// Kotlin support
id("org.jetbrains.kotlin.jvm") version "1.9.21"
// Gradle IntelliJ Plugin
id("org.jetbrains.intellij") version "1.11.0"
id("org.jetbrains.intellij") version "1.17.2"
// Gradle Changelog Plugin
id("org.jetbrains.changelog") version "2.0.0"
// Kotlin Serializer Plugin
Expand Down
6 changes: 3 additions & 3 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ pluginVersion = 0.1.6

# See https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html
# for insight into build numbers and IntelliJ Platform versions.
pluginSinceBuild = 222
pluginUntilBuild = 233.*
pluginSinceBuild = 233
pluginUntilBuild = 241.*

# IntelliJ Platform Properties -> https://github.com/JetBrains/gradle-intellij-plugin#intellij-platform-properties
platformType = IC
Expand All @@ -23,7 +23,7 @@ platformPlugins =
javaVersion = 17

# Gradle Releases -> https://github.com/gradle/gradle/releases
gradleVersion = 7.3
gradleVersion = 7.6

# Opt-out flag for bundling Kotlin standard library.
# See https://plugins.jetbrains.com/docs/intellij/kotlin.html#kotlin-standard-library for details.
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ class JsonnetLSStartupHandler {
fun start() {

val languageServerRepo = JLSSettingsStateComponent.instance.state.releaseRepository
val enableEvalDiagnostics = JLSSettingsStateComponent.instance.state.enableEvalDiagnostics
val enableLintDiagnostics = JLSSettingsStateComponent.instance.state.enableLintDiagnostics
val platform = getPlatform()
val arch = getArch()

Expand Down Expand Up @@ -95,10 +97,17 @@ class JsonnetLSStartupHandler {
// Configure language server
// TODO: Make --tanka configurable
// TODO: add JPath configuration
var optionalArgs = arrayOf<String>()
if (enableEvalDiagnostics) {
optionalArgs += "--eval-diags"
}
if (enableLintDiagnostics) {
optionalArgs += "--lint"
}
IntellijLanguageClient.addServerDefinition(
RawCommandServerDefinition(
EXTENSIONS,
arrayOf(binFile.toString(), "--tanka", "--lint")
arrayOf(binFile.toString(), "--tanka", *optionalArgs)
)
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.github.zzehring.intellijjsonnet.settings

import com.intellij.ui.components.JBCheckBox
import com.intellij.ui.components.JBLabel
import com.intellij.ui.components.JBTextField
import com.intellij.util.ui.FormBuilder
Expand All @@ -11,12 +12,18 @@ import javax.swing.JPanel
* Supports creating and managing a {@link JPanel} for the Settings Dialog
*/
class JLSSettingsComponent {
var myMainPanel: JPanel
var repoPanel: JPanel
private val releaseRepository = JBTextField()
private val enableLintDiagnostics = JBCheckBox("Enable lint diagnostics on language server")
private val enableEvalDiagnostics = JBCheckBox("Enable eval diagnostics on language")

init {
this.myMainPanel = FormBuilder.createFormBuilder()
this.repoPanel = FormBuilder.createFormBuilder()
.addLabeledComponent(JBLabel("Release Repo (Github Repository from which to download language server): "), releaseRepository, 1, true)
.addComponent(enableEvalDiagnostics)
.addTooltip("Try to evaluate files to find errors and warnings. Disable on large projects to improve performance. IDE restart required.")
.addComponent(enableLintDiagnostics)
.addTooltip("Enable live linting diagnostics. Disable on large projects to improve performance. IDE restart required.")
.addComponentFillVertically(JPanel(), 0)
.panel
}
Expand All @@ -34,4 +41,20 @@ class JLSSettingsComponent {
releaseRepository.text = newPath
}

fun getEnableLintDiagnostics(): Boolean {
return enableLintDiagnostics.isSelected
}

fun setEnableLintDiagnostics(isSelected: Boolean) {
enableLintDiagnostics.isSelected = isSelected
}

fun getEnableEvalDiagnostics(): Boolean {
return enableEvalDiagnostics.isSelected
}

fun setEnableEvalDiagnostics(isSelected: Boolean) {
enableEvalDiagnostics.isSelected = isSelected
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,25 @@ class JLSSettingsConfigurable : Configurable {
private lateinit var mySettingsComponent: JLSSettingsComponent

@Nullable
override fun createComponent(): JComponent? {
override fun createComponent(): JComponent {
mySettingsComponent = JLSSettingsComponent()
return mySettingsComponent.myMainPanel
mySettingsComponent.setEnableLintDiagnostics(true)
mySettingsComponent.setEnableEvalDiagnostics(false)
return mySettingsComponent.repoPanel
}

override fun isModified(): Boolean {
val settings = JLSSettingsStateComponent.instance.state
return mySettingsComponent.getReleaseRepository() != settings.releaseRepository
|| mySettingsComponent.getEnableEvalDiagnostics() != settings.enableEvalDiagnostics
|| mySettingsComponent.getEnableLintDiagnostics() != settings.enableLintDiagnostics
}

override fun apply() {
val settings = JLSSettingsStateComponent.instance.state
settings.releaseRepository = mySettingsComponent.getReleaseRepository()
settings.enableEvalDiagnostics = mySettingsComponent.getEnableEvalDiagnostics()
settings.enableLintDiagnostics = mySettingsComponent.getEnableLintDiagnostics()
}

@Nls(capitalization = Nls.Capitalization.Title)
Expand All @@ -37,6 +43,8 @@ class JLSSettingsConfigurable : Configurable {
override fun reset() {
val settings = JLSSettingsStateComponent.instance.state
mySettingsComponent.setReleaseRepository(settings.releaseRepository)
mySettingsComponent.setEnableEvalDiagnostics(settings.enableEvalDiagnostics)
mySettingsComponent.setEnableLintDiagnostics(settings.enableLintDiagnostics)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import org.jetbrains.annotations.Nullable

@State(
name = "com.github.zzehring.intellijjsonnet.JLSSettingsState",
storages = [Storage("SdkSettingsPlugin.xml")]
storages = [Storage("JsonnetLsSettingsPlugin.xml")]
)
open class JLSSettingsStateComponent : PersistentStateComponent<JLSSettingsStateComponent.SettingsState> {

Expand All @@ -30,5 +30,7 @@ open class JLSSettingsStateComponent : PersistentStateComponent<JLSSettingsState

class SettingsState {
var releaseRepository = "grafana/jsonnet-language-server"
var enableLintDiagnostics = false
var enableEvalDiagnostics = false
}
}
Loading