ChimeHQ/SwiftLSPClient
A Swift library for interacting with Language Server Protocol implementations
Example
import SwiftLSPClient
let executablePath = "path/to/your/lsp-server-executable"
let host = LanguageServerProcessHost(path: executablePath, arguments: [],
environment: [/* the environment your lsp server requires e.g. PATH */])
host.start { (server) in
guard let server = server else {
Swift.print("unable to launch server")
return
}
// Set-up notificationResponder to see log/error messages from LSP server
server.notificationResponder = <object conforming to NotificationResponder>
let processId = Int(ProcessInfo.processInfo.processIdentifier)
let capabilities = ClientCapabilities(workspace: nil, textDocument: nil, experimental: nil)
let params = InitializeParams(processId: processId,
rootPath: nil,
rootURI: nil,
initializationOptions: nil,
capabilities: capabilities,
trace: Tracing.off,
workspaceFolders: nil)
server.initialize(params: params, block: { (result) in
switch result {
case .failure(let error):
Swift.print("unable to initialize \(error)")
case .success(let value):
Swift.print("initialized \(value)")
}
})
}Supported Features
The LSP specification is large, and this library currently does not implement it all. The intention is to support the 3.x specification, but be as backwards-compatible as possible with pre-3.0 servers.
| Feature | Supported | | -------------------|:---------:| | window/showMessage | ✅ | | window/showMessageRequest | ✅ | | window/showDocument | - | | window/logMessage | ✅ | | window/workDoneProgress/create | - | | window/workDoneProgress/cancel | - | | $/cancelRequest | - | | $/progress | - | | initialize | ✅ | | shutdown | - | | exit | - | | telemetry/event | - | | $/logTrace | - | | $/setTrace | - | | client/registerCapability | ✅ | | client/unregisterCapability | ✅ | | workspace/workspaceFolders | - | | workspace/didChangeWorkspaceFolders | - | | workspace/didChangeConfiguration | - | | workspace/configuration | ✅ | | workspace/didChangeWatchedFiles | - | | workspace/symbol | - | | workspace/executeCommand | - | | workspace/applyEdit | - | | workspace/willCreateFiles | - | | workspace/didCreateFiles | - | | workspace/willRenameFiles | - | | workspace/didRenameFiles | - | | workspace/willDeleteFiles | - | | workspace/didDeleteFiles | - | | textDocument/didOpen | ✅ | | textDocument/didChange | ✅ | | textDocument/willSave | ✅ | | textDocument/willSaveWaitUntil | ✅ | | textDocument/didSave | ✅ | | textDocument/didClose | ✅ | | textDocument/publishDiagnostics | ✅ | | textDocument/completion | ✅ | | completionItem/resolve | - | | textDocument/hover | ✅ | | textDocument/signatureHelp | ✅ | | textDocument/declaration | ✅ | | textDocument/definition | ✅ | | textDocument/typeDefinition | ✅ | | textDocument/implementation | ✅ | | textDocument/references | ✅ | | textDocument/documentHighlight | - | | textDocument/documentSymbol | ✅ | | textDocument/codeAction | ✅ | | codeLens/resolve | - | | textDocument/codeLens | - | | workspace/codeLens/refresh | - | | textDocument/documentLink | - | | documentLink/resolve | - | | textDocument/documentColor | - | | textDocument/colorPresentation | - | | textDocument/formatting | ✅ | | textDocument/rangeFormatting | ✅ | | textDocument/onTypeFormatting | ✅ | | textDocument/rename | ✅ | | textDocument/prepareRename | ✅ | | textDocument/foldingRange | ✅ | | textDocument/selectionRange | - | | textDocument/prepareCallHierarchy | - | | textDocument/prepareCallHierarchy | - | | callHierarchy/incomingCalls | - | | callHierarchy/outgoingCalls | - | | textDocument/semanticTokens/full | ✅ | | textDocument/semanticTokens/full/delta | ✅ | | textDocument/semanticTokens/range | ✅ | | workspace/semanticTokens/refresh | ✅ | | textDocument/linkedEditingRange | - | | textDocument/moniker | - |
Integration
Swift Package Manager
dependencies: [
.package(url: "https://github.com/ChimeHQ/SwiftLSPClient")
]Suggestions or Feedback
We'd love to hear from you! Get in touch via an issue or pull request.
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.
Package Metadata
Repository: ChimeHQ/SwiftLSPClient
Stars: 103
Forks: 19
Open issues: 0
Default branch: main
Primary language: swift
License: BSD-3-Clause
Topics: language-server-protocol, swift
README: README.md
Archived: yes