← Back to list

lsp-implementation
by mcclowes
A pipe-oriented functional programming language with a tree-walk interpreter written in TypeScript.
⭐ 3🍴 0📅 Jan 12, 2026
SKILL.md
name: lsp-implementation
prettier-ignore
description: Use when implementing Language Server Protocol features - covers completions, hover, diagnostics, and navigation
Language Server Protocol Implementation
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(() => ({
capabilities: {
textDocumentSync: TextDocumentSyncKind.Incremental,
completionProvider: { triggerCharacters: [".", "/"] },
hoverProvider: true,
definitionProvider: true,
}
}));
documents.listen(connection);
connection.listen();
Core Features
Completions
connection.onCompletion((params): CompletionItem[] => {
const document = documents.get(params.textDocument.uri);
const position = params.position;
// Get context at cursor
const line = document?.getText({
start: { line: position.line, character: 0 },
end: position
});
// Return builtins
return [
{ label: "map", kind: CompletionItemKind.Function, detail: "(fn) -> List" },
{ label: "filter", kind: CompletionItemKind.Function, detail: "(fn) -> List" },
{ label: "reduce", kind: CompletionItemKind.Function, detail: "(init, fn) -> Value" },
];
});
Hover Information
connection.onHover((params): Hover | null => {
const document = documents.get(params.textDocument.uri);
const word = getWordAtPosition(document, params.position);
const builtin = BUILTINS[word];
if (builtin) {
return {
contents: {
kind: "markdown",
value: `**${word}**\n\n${builtin.description}\n\n\`\`\`lea\n${builtin.signature}\n\`\`\``
}
};
}
return null;
});
Diagnostics
documents.onDidChangeContent((change) => {
const document = change.document;
const diagnostics: Diagnostic[] = [];
try {
parse(document.getText());
} catch (error) {
if (error instanceof ParseError) {
diagnostics.push({
severity: DiagnosticSeverity.Error,
range: error.range,
message: error.message,
source: "lea"
});
}
}
connection.sendDiagnostics({ uri: document.uri, diagnostics });
});
Go to Definition
connection.onDefinition((params): Definition | null => {
const document = documents.get(params.textDocument.uri);
const word = getWordAtPosition(document, params.position);
// Find definition in AST
const definition = findDefinition(document.getText(), word);
if (definition) {
return {
uri: params.textDocument.uri,
range: definition.range
};
}
return null;
});
Protocol Messages
textDocument/completion- Code completionstextDocument/hover- Hover informationtextDocument/definition- Go to definitiontextDocument/references- Find all referencestextDocument/documentSymbol- Document outlinetextDocument/formatting- Code formatting
Reference Files
- references/capabilities.md - Server capabilities
- references/diagnostics.md - Error reporting
Score
Total Score
65/100
Based on repository quality metrics
✓SKILL.md
SKILL.mdファイルが含まれている
+20
✓LICENSE
ライセンスが設定されている
+10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
✓最近の活動
1ヶ月以内に更新
+10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
✓タグ
1つ以上のタグが設定されている
+5
Reviews
💬
Reviews coming soon

