Show HN: Create a full language server in Go with 3.17 spec support

A Go library for building Language Server Protocol servers that handles JSON-RPC framing and message dispatch, targeting the LSP 3.17 specification.
A Go library for building Language Server Protocol servers. It handles JSON-RPC framing, message dispatch, and LSP type definitions so you can focus on your language logic.
This library targets LSP 3.17. The table below shows which parts of the specification are currently supported.
| Category | Feature | Supported | |---|---|---| Lifecycle | initialize / shutdown / exit | Yes | | $/cancelRequest | Yes | | | $/setTrace | Yes | | Text Document Sync | didOpen / didChange / didClose | Yes | | didSave | Yes | | | willSave / willSaveWaitUntil | Yes | | Language Features | completion | Yes | | completionItem/resolve | Yes | | | hover | Yes | | | signatureHelp | Yes | | | declaration | Yes | | | definition | Yes | | | typeDefinition | Yes | | | implementation | Yes | | | references | Yes | | | documentHighlight | Yes | | | documentSymbol | Yes | | | codeAction | Yes | | | codeAction/resolve | Yes | | | codeLens | Yes | | | codeLens/resolve | Yes | | | documentLink | Yes | | | documentLink/resolve | Yes | | | documentColor / colorPresentation | Yes | | | formatting | Yes | | | rangeFormatting | Yes | | | onTypeFormatting | Yes | | | rename | Yes | | | prepareRename | Yes | | | foldingRange | Yes | | | selectionRange | Yes | | | callHierarchy | Yes | | | semanticTokens (full / delta / range) | Yes | | | linkedEditingRange | Yes | | | moniker | Yes | | Workspace | workspaceSymbol | Yes | | executeCommand | Yes | | | didChangeWorkspaceFolders | Yes | | | didChangeConfiguration | Yes | | | didChangeWatchedFiles | Yes | | | workspace/willCreateFiles | Yes | | | workspace/willRenameFiles | Yes | | | workspace/willDeleteFiles | Yes | | Window | showMessage (server-to-client) | Yes | | showMessageRequest | Yes | | | logMessage | Yes | | | progress | Yes | | | showDocument | Yes | | Diagnostics | publishDiagnostics (server-to-client) | Yes | LSP 3.17 | || Language Features | typeHierarchy (prepare / supertypes / subtypes) | Yes | | inlayHint | Yes | | | inlayHint/resolve | Yes | | | inlineValue | Yes | | | textDocument/diagnostic (pull) | Yes | | Workspace | workspace/diagnostic | Yes | | workspace/codeLens/refresh | Yes | | | workspace/semanticTokens/refresh | Yes | | | workspace/inlayHint/refresh | Yes | | | workspace/inlineValue/refresh | Yes | | | workspace/diagnostic/refresh | Yes |
go get github.com/owenrumney/go-lsp
Define a handler struct that implements server.LifecycleHandler and any optional interfaces you need, then pass it to NewServer.
Source: Hacker News









