lsp

Use when implementing Language Server Protocol features - diagnostics, completions, hover, go-to-definition, and editor integration

$ Installer

git clone https://github.com/mcclowes/omg /tmp/omg && cp -r /tmp/omg/.claude/skills/lsp ~/.claude/skills/omg

// tip: Run this command in your terminal to install the skill


name: lsp

prettier-ignore

description: Use when implementing Language Server Protocol features - diagnostics, completions, hover, go-to-definition, and editor integration

Language Server Protocol (LSP)

Quick Start

import { createConnection, TextDocuments, ProposedFeatures } from 'vscode-languageserver/node';
import { TextDocument } from 'vscode-languageserver-textdocument';

const connection = createConnection(ProposedFeatures.all);
const documents = new TextDocuments(TextDocument);

connection.onInitialize((params) => ({
  capabilities: {
    textDocumentSync: TextDocumentSyncKind.Incremental,
    completionProvider: { resolveProvider: true },
    hoverProvider: true,
    definitionProvider: true,
    diagnosticProvider: { interFileDependencies: false, workspaceDiagnostics: false }
  }
}));

documents.onDidChangeContent((change) => {
  validateDocument(change.document);
});

documents.listen(connection);
connection.listen();

Core Concepts

  • Connection: JSON-RPC communication channel between client and server
  • TextDocuments: Manages open document state with incremental sync
  • Capabilities: Server declares features in onInitialize response
  • Diagnostics: Errors/warnings pushed via connection.sendDiagnostics()

Common Providers

ProviderPurposeKey Method
completionProviderAutocomplete suggestionsonCompletion
hoverProviderTooltip on hoveronHover
definitionProviderGo-to-definitiononDefinition
referencesProviderFind all referencesonReferences
documentSymbolProviderOutline/symbolsonDocumentSymbol
codeActionProviderQuick fixesonCodeAction

Key Patterns

  • Use TextDocument.positionAt(offset) and offsetAt(position) for conversions
  • Return null from handlers when no result available
  • Diagnostics use DiagnosticSeverity.Error | Warning | Information | Hint
  • Use Location for definitions, LocationLink for richer go-to-definition