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)
}