SwiftLSPClient 已被替换。 它被拆分为两个独立的部分。 协议级别的支持位于 LanguageServerProtocol 中。 更高级别的客户端抽象位于 LanguageClient 中,这可能是您所需要的。
这是一个(现在已弃用的)Swift 库,用于与 Language Server Protocol 实现进行交互。
LSP 服务器提供关于源代码的丰富信息。 LSP 客户端使用这些信息。 该库主要关注客户端。 它是低级别的,并且仅提供围绕客户端和服务器之间传递的类型和消息的核心抽象。
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)")
}
})
}
LSP 规范 非常庞大,并且此库目前并未实现所有功能。 目的是支持 3.x 规范,但尽可能向后兼容 pre-3.0 服务器。
| 功能 | 支持 |
|---|---|
| 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 | - |
dependencies: [
.package(url: "https://github.com/ChimeHQ/SwiftLSPClient")
]
我们很乐意听取您的意见! 通过 issue 或 pull request 联系我们。
请注意,此项目是根据 贡献者行为准则 发布的。 通过参与此项目,您同意遵守其条款。