| name | lsp |
| 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
| Provider |
Purpose |
Key Method |
completionProvider |
Autocomplete suggestions |
onCompletion |
hoverProvider |
Tooltip on hover |
onHover |
definitionProvider |
Go-to-definition |
onDefinition |
referencesProvider |
Find all references |
onReferences |
documentSymbolProvider |
Outline/symbols |
onDocumentSymbol |
codeActionProvider |
Quick fixes |
onCodeAction |
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