Allow configuring of SourceKit-LSP’s options using .sourcekit-lsp configuration files

The idea here is to unify the different ways in which we can currently set options on SourceKit-LSP in a scalable way: Environment variables, command line arguments to `sourcekit-lsp` and initialization options.

The idea is that a user can define a `~/.sourcekit-lsp/.sourcekit-lsp` file (we store logs in `~/.sourcekit-lsp/logs` on non-Darwin platforms), which will be used as the default configuration for all SourceKit-LSP instances. They can also place a `.sourcekit-lsp` file in the root of a workspace to configure SourceKit-LSP for that project specifically, eg. setting arguments that need to be passed to `swift build` for that project and which thus also need to be set on SourceKit-LSP.

For compatibility reasons, I’m mapping the existing command line options into the new options structure for now. I hope to delete the command line arguments in the future and solely rely on `.sourcekit-lsp` configuration files.

Environment variable will be migrated to `.sourcekit-lsp` in a follow-up commit.
This commit is contained in:
Alex Hoppen
2024-06-26 18:57:12 +02:00
parent 12142c024c
commit d1cddb8c41
45 changed files with 721 additions and 673 deletions

View File

@@ -26,7 +26,8 @@ public final class InProcessSourceKitLSPClient: Sendable {
/// `messageHandler` handles notifications and requests sent from the SourceKit-LSP server to the client.
public init(
toolchainRegistry: ToolchainRegistry,
serverOptions: SourceKitLSPServer.Options = SourceKitLSPServer.Options(),
options: SourceKitLSPOptions = SourceKitLSPOptions(),
testHooks: TestHooks = TestHooks(),
capabilities: ClientCapabilities = ClientCapabilities(),
workspaceFolders: [WorkspaceFolder],
messageHandler: any MessageHandler
@@ -35,7 +36,8 @@ public final class InProcessSourceKitLSPClient: Sendable {
self.server = SourceKitLSPServer(
client: serverToClientConnection,
toolchainRegistry: toolchainRegistry,
options: serverOptions,
options: options,
testHooks: testHooks,
onExit: {
serverToClientConnection.close()
}