Skip to content

Commit 7d6a92d

Browse files
committed
Client classes
1 parent cf88f68 commit 7d6a92d

3 files changed

Lines changed: 70 additions & 0 deletions

File tree

src/main/kotlin/insyncwithfoo/ryecharm/ty/lsp/TYServerDescriptor.kt

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,23 @@ import com.intellij.execution.configurations.GeneralCommandLine
44
import com.intellij.openapi.project.Project
55
import com.intellij.openapi.vfs.VirtualFile
66
import com.intellij.platform.lsp.api.ProjectWideLspServerDescriptor
7+
import com.intellij.platform.lsp.api.customization.LspCompletionCustomizer
8+
import com.intellij.platform.lsp.api.customization.LspCompletionDisabled
9+
import com.intellij.platform.lsp.api.customization.LspCustomization
10+
import com.intellij.platform.lsp.api.customization.LspDiagnosticsCustomizer
11+
import com.intellij.platform.lsp.api.customization.LspDiagnosticsDisabled
12+
import com.intellij.platform.lsp.api.customization.LspInlayHintCustomizer
13+
import com.intellij.platform.lsp.api.customization.LspInlayHintDisabled
714
import insyncwithfoo.ryecharm.common.logging.tyLogger
815
import insyncwithfoo.ryecharm.configurations.ty.tyConfigurations
916
import insyncwithfoo.ryecharm.isSupportedByTY
1017
import insyncwithfoo.ryecharm.message
1118
import insyncwithfoo.ryecharm.path
19+
import insyncwithfoo.ryecharm.ty.WorkspaceConfiguration
1220
import insyncwithfoo.ryecharm.ty.createInitializationOptionsObject
21+
import insyncwithfoo.ryecharm.ty.createWorkspaceConfigurationObject
1322
import org.eclipse.lsp4j.ClientCapabilities
23+
import org.eclipse.lsp4j.ConfigurationItem
1424
import java.nio.file.Path
1525

1626

@@ -20,6 +30,28 @@ internal class TYServerDescriptor(project: Project, private val executable: Path
2030

2131
private val configurations = project.tyConfigurations
2232

33+
override val lspCustomization = object : LspCustomization() {
34+
35+
override val diagnosticsCustomizer: LspDiagnosticsCustomizer
36+
get() = when (configurations.diagnostics) {
37+
true -> DiagnosticsSupport()
38+
else -> LspDiagnosticsDisabled
39+
}
40+
41+
override val inlayHintCustomizer: LspInlayHintCustomizer
42+
get() = when (configurations.inlayHints) {
43+
true -> InlayHintSupport()
44+
else -> LspInlayHintDisabled
45+
}
46+
47+
override val completionCustomizer: LspCompletionCustomizer
48+
get() = when (configurations.completions) {
49+
true -> CompletionSupport()
50+
else -> LspCompletionDisabled
51+
}
52+
53+
}
54+
2355
override val clientCapabilities: ClientCapabilities
2456
get() = super.clientCapabilities.apply {
2557
textDocument.apply {
@@ -50,6 +82,21 @@ internal class TYServerDescriptor(project: Project, private val executable: Path
5082
logger?.info("")
5183
}
5284

85+
override fun getWorkspaceConfiguration(item: ConfigurationItem): WorkspaceConfiguration? {
86+
val value = when (item.section) {
87+
"ty" -> project.createWorkspaceConfigurationObject()
88+
else -> null
89+
}
90+
91+
return value.also {
92+
val logger = project.tyLogger
93+
94+
logger?.info("Sending workspace configuration item for ${item.section} @ ${item.scopeUri}:")
95+
logger?.info("$it")
96+
logger?.info("")
97+
}
98+
}
99+
53100
override fun createCommandLine() = GeneralCommandLine().apply {
54101
withWorkingDirectory(project.path)
55102
withCharset(Charsets.UTF_8)

src/main/kotlin/insyncwithfoo/ryecharm/ty/lsp4ij/TYServerClient.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import insyncwithfoo.ryecharm.configurations.ty.tyConfigurations
77
import insyncwithfoo.ryecharm.configurations.tyExecutable
88
import insyncwithfoo.ryecharm.path
99
import insyncwithfoo.ryecharm.ty.createInitializationOptionsObject
10+
import insyncwithfoo.ryecharm.ty.createWorkspaceConfigurationObject
1011

1112

1213
internal class TYServerClient(project: Project) : LanguageClientImpl(project) {
@@ -31,4 +32,19 @@ internal class TYServerClient(project: Project) : LanguageClientImpl(project) {
3132
logger?.info("")
3233
}
3334

35+
override fun findSettings(section: String?): Any? {
36+
val value = when (section) {
37+
"ty" -> project.createWorkspaceConfigurationObject()
38+
else -> null
39+
}
40+
41+
return value.also {
42+
val logger = project.tyLogger
43+
44+
logger?.info("Sending workspace configuration item for $section:")
45+
logger?.info("$it")
46+
logger?.info("")
47+
}
48+
}
49+
3450
}

src/main/kotlin/insyncwithfoo/ryecharm/ty/lsp4ij/TYServerFactory.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.intellij.openapi.project.Project
44
import com.redhat.devtools.lsp4ij.LanguageServerEnablementSupport
55
import com.redhat.devtools.lsp4ij.LanguageServerFactory
66
import com.redhat.devtools.lsp4ij.client.LanguageClientImpl
7+
import com.redhat.devtools.lsp4ij.client.features.LSPClientFeatures
78
import com.redhat.devtools.lsp4ij.server.StreamConnectionProvider
89
import insyncwithfoo.ryecharm.RyeCharm
910
import insyncwithfoo.ryecharm.configurations.add
@@ -50,4 +51,10 @@ internal class TYServerFactory : LanguageServerFactory, LanguageServerEnablement
5051
return TYServerClient(project)
5152
}
5253

54+
@Suppress("UnstableApiUsage")
55+
override fun createClientFeatures() = LSPClientFeatures().apply {
56+
diagnosticFeature = DiagnosticFeature()
57+
inlayHintFeature = InlayHintFeature()
58+
}
59+
5360
}

0 commit comments

Comments
 (0)