diff --git a/docs/configurations/ty.md b/docs/configurations/ty.md index b3e747d7..cac5e76f 100644 --- a/docs/configurations/ty.md +++ b/docs/configurations/ty.md @@ -101,6 +101,14 @@ language server setting. Default: `true` +## Go to definition + +Whether PyCharm's Go to Declaration +and related features should defer to ty. + +Default: `true` + + ## Log level The amount of logs the language server will emit. diff --git a/src/main/kotlin/insyncwithfoo/ryecharm/configurations/ty/Configurations.kt b/src/main/kotlin/insyncwithfoo/ryecharm/configurations/ty/Configurations.kt index 68c5bfdb..135827fd 100644 --- a/src/main/kotlin/insyncwithfoo/ryecharm/configurations/ty/Configurations.kt +++ b/src/main/kotlin/insyncwithfoo/ryecharm/configurations/ty/Configurations.kt @@ -60,6 +60,8 @@ internal class TYConfigurations : DisplayableState(), Copyable { var completions by property(true) var completionsAutoImport by property(true) + var goToDefinition by property(true) + var logLevel by enum(LogLevel.INFO) var logFile by string(null) } diff --git a/src/main/kotlin/insyncwithfoo/ryecharm/configurations/ty/Panels.kt b/src/main/kotlin/insyncwithfoo/ryecharm/configurations/ty/Panels.kt index 081a4819..3e3a059a 100644 --- a/src/main/kotlin/insyncwithfoo/ryecharm/configurations/ty/Panels.kt +++ b/src/main/kotlin/insyncwithfoo/ryecharm/configurations/ty/Panels.kt @@ -81,6 +81,10 @@ private fun Row.completionsAutoImportInput(block: Cell.() -> Unit) = checkBox(message("configurations.ty.completionsAutoImport.label")).apply(block) +private fun Row.goToDefinitionInput(block: Cell.() -> Unit) = + checkBox(message("configurations.ty.goToDefinition.label")).apply(block) + + private fun Row.logLevelInput(block: Cell>.() -> Unit) = comboBox().apply(block) @@ -165,6 +169,11 @@ private fun TYPanel.makeComponent() = panel { } } + row { + goToDefinitionInput { bindSelected(state::goToDefinition) } + overrideCheckbox(state::goToDefinition) + } + separator() row(message("configurations.ty.logLevel.label")) { diff --git a/src/main/kotlin/insyncwithfoo/ryecharm/ty/lsp/GoToDefinitionSupport.kt b/src/main/kotlin/insyncwithfoo/ryecharm/ty/lsp/GoToDefinitionSupport.kt new file mode 100644 index 00000000..a253e081 --- /dev/null +++ b/src/main/kotlin/insyncwithfoo/ryecharm/ty/lsp/GoToDefinitionSupport.kt @@ -0,0 +1,6 @@ +package insyncwithfoo.ryecharm.ty.lsp + +import com.intellij.platform.lsp.api.customization.LspGoToDefinitionSupport + + +internal class GoToDefinitionSupport : LspGoToDefinitionSupport() diff --git a/src/main/kotlin/insyncwithfoo/ryecharm/ty/lsp/TYServerDescriptor.kt b/src/main/kotlin/insyncwithfoo/ryecharm/ty/lsp/TYServerDescriptor.kt index fcfacc6b..7359a2cf 100644 --- a/src/main/kotlin/insyncwithfoo/ryecharm/ty/lsp/TYServerDescriptor.kt +++ b/src/main/kotlin/insyncwithfoo/ryecharm/ty/lsp/TYServerDescriptor.kt @@ -9,6 +9,8 @@ import com.intellij.platform.lsp.api.customization.LspCompletionDisabled import com.intellij.platform.lsp.api.customization.LspCustomization import com.intellij.platform.lsp.api.customization.LspDiagnosticsCustomizer import com.intellij.platform.lsp.api.customization.LspDiagnosticsDisabled +import com.intellij.platform.lsp.api.customization.LspGoToDefinitionCustomizer +import com.intellij.platform.lsp.api.customization.LspGoToDefinitionDisabled import com.intellij.platform.lsp.api.customization.LspInlayHintCustomizer import com.intellij.platform.lsp.api.customization.LspInlayHintDisabled import insyncwithfoo.ryecharm.common.logging.tyLogger @@ -50,6 +52,12 @@ internal class TYServerDescriptor(project: Project, private val executable: Path else -> LspCompletionDisabled } + override val goToDefinitionCustomizer: LspGoToDefinitionCustomizer + get() = when (configurations.goToDefinition) { + true -> GoToDefinitionSupport() + else -> LspGoToDefinitionDisabled + } + } override val clientCapabilities: ClientCapabilities diff --git a/src/main/resources/messages/ryecharm.properties b/src/main/resources/messages/ryecharm.properties index d381425e..8d91b5f1 100644 --- a/src/main/resources/messages/ryecharm.properties +++ b/src/main/resources/messages/ryecharm.properties @@ -216,6 +216,8 @@ configurations.ty.inlayHintsCallArgumentNames.label = Call argument names configurations.ty.completions.label = Completions configurations.ty.completionsAutoImport.label = Auto-import +configurations.ty.goToDefinition.label = Go to definition + configurations.ty.logLevel.label = Log level: configurations.ty.logLevel.trace = Trace configurations.ty.logLevel.debug = Debug diff --git a/src/test/kotlin/insyncwithfoo/ryecharm/configurations/ty/TYConfigurationsTest.kt b/src/test/kotlin/insyncwithfoo/ryecharm/configurations/ty/TYConfigurationsTest.kt index e4d61a1d..7c6bc116 100644 --- a/src/test/kotlin/insyncwithfoo/ryecharm/configurations/ty/TYConfigurationsTest.kt +++ b/src/test/kotlin/insyncwithfoo/ryecharm/configurations/ty/TYConfigurationsTest.kt @@ -12,7 +12,7 @@ internal class TYConfigurationsTest : ConfigurationsTest() { @Test fun `test shape`() { - doShapeTest(expectedSize = 14) { + doShapeTest(expectedSize = 15) { assertEquals(null, executable) assertEquals(null, configurationFile) @@ -31,6 +31,8 @@ internal class TYConfigurationsTest : ConfigurationsTest() { assertEquals(true, completions) assertEquals(true, completionsAutoImport) + assertEquals(true, goToDefinition) + assertEquals(LogLevel.INFO, logLevel) assertEquals(null, logFile) }