Build Status Platforms Documentation Discord

LanguageServerProtocol

这是一个 Swift 库,用于与 Language Server Protocol 进行交互。 它包含类型定义和实用程序,可用于服务器端和客户端项目。

需要与服务器交互吗? 您可能需要查看 LanguageClient。 想要构建服务器吗? 看看 LanguageServer

类型处理方式

在可能的情况下,该库与 LSP 规范相匹配。 但是,此库中存在一些规范中没有的附加类型。 这是由于使用了匿名结构造成的。

该库使用嵌套结构和/或 TwoTypeOptionThreeTypeOption 类型来建模这些情况。

集成

dependencies: [
    .package(url: "https://github.com/ChimeHQ/LanguageServerProtocol", from: "0.11.0")
]

额外功能

在很大程度上,这个库致力于成为 Swift 中规范的直接版本。 但是,在某些地方,引入一些额外的功能是有意义的。

如果您需要支持其他通信通道,则必须使用来自 JSONRPC 包的 DataChannel 类型。 在 LanguageClient 中已经定义了一些专门的通道。

客户端支持

目前,在这个库中仍然有一些对客户端支持有用的部分

目的是将所有这些迁移到 LanguageClient 中,使该库纯粹专注于协议级别的支持。

用法

响应事件

您可以使用 eventSequence 响应服务器事件。 在这里要小心,因为某些服务器需要对某些请求做出响应。 还有可能并非所有请求类型都已映射到 ServerRequest 类型中。 规范很大! 如果您发现问题,请提出 issue!

Task {
    for await event in server.eventSequence {
        print("receieved event:", event)
        
        switch event {
        case let .request(id: id, request: request):
            request.relyWithError(MyError.unsupported)
        default:
            print("dropping notification/error")
        }
    }
}

支持的特性

LSP 规范很大,目前该库并未完全实现它。 目的是支持 3.x 规范,但尽可能向后兼容 3.0 之前的服务器。

消息 已支持
$/cancelRequest
$/logTrace
$/progress
$/setTrace
callHierarchy/incomingCalls
callHierarchy/outgoingCalls
client/registerCapability
client/unregisterCapability
codeAction/resolve
codeLens/resolve
completionItem/resolve
documentLink/resolve
exit
initialize
initialized
inlayHint/resolve
notebookDocument/didChange -
notebookDocument/didClose -
notebookDocument/didOpen -
notebookDocument/didSave -
server-defined
shutdown
telemetry/event
textDocument/codeAction
textDocument/codeLens
textDocument/colorPresentation
textDocument/completion
textDocument/declaration
textDocument/definition
textDocument/diagnostic
textDocument/didChange
textDocument/didClose
textDocument/didOpen
textDocument/didSave
textDocument/documentColor
textDocument/documentHighlight
textDocument/documentLink
textDocument/documentSymbol
textDocument/foldingRange
textDocument/formatting
textDocument/hover
textDocument/implementation
textDocument/inlayHint
textDocument/inlineValue -
textDocument/linkedEditingRange
textDocument/moniker
textDocument/onTypeFormatting
textDocument/prepareCallHierarchy
textDocument/prepareRename
textDocument/prepareTypeHierarchy
textDocument/publishDiagnostics
textDocument/rangeFormatting
textDocument/references
textDocument/rename
textDocument/selectionRange
textDocument/semanticTokens/full
textDocument/semanticTokens/full/delta
textDocument/semanticTokens/range
textDocument/signatureHelp
textDocument/typeDefinition
textDocument/willSave
textDocument/willSaveWaitUntil
typeHierarchy/subtypes
typeHierarchy/supertypes
window/logMessage
window/showDocument
window/showMessage
window/showMessageRequest
window/workDoneProgress/cancel
window/workDoneProgress/create
workspace/applyEdit
workspace/codeLens/refresh
workspace/configuration
workspace/diagnostic -
workspace/diagnostic/refresh -
workspace/didChangeConfiguration
workspace/didChangeWatchedFiles
workspace/didChangeWorkspaceFolders
workspace/didCreateFiles
workspace/didDeleteFiles
workspace/didRenameFiles
workspace/executeCommand
workspace/inlayHint/refresh
workspace/inlineValue/refresh -
workspace/semanticTokens/refresh
workspace/symbol
workspace/willCreateFiles
workspace/willDeleteFiles
workspace/willRenameFiles
workspace/workspaceFolders
workspaceSymbol/resolve

贡献和协作

我很乐意收到您的来信! Issues 或 pull requests 都可以。 还可以使用 Discord 服务器获得实时帮助,但我强烈倾向于以文档的形式回答。

我更喜欢协作,如果您有类似的项目,我很乐意找到合作的方式。

我更喜欢使用制表符进行缩进,以提高可访问性。 但是,我宁愿您使用您想要的系统并提出 PR,也不愿您因为空格而犹豫。

参与此项目即表示您同意遵守 贡献者行为准则