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

https://news.ycombinator.com/rss Hits: 4
Summary

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: package main...

First seen: 2026-03-29 12:53

Last seen: 2026-03-29 15:55