Serveur de langage Kale
step 3.1
Le serveur de langage repose sur la bibliothèque vscode-languageserver
. Afin de disposer de ces nouvelles dépendances, lancez la commande :
npm install
L'objet principal qui centralise toute l'infrastructure du serveur est l'objet obtenu avec la fonction createConnection
:
import { createConnection, ProposedFeatures } from "vscode-languageserver/node";
const connection = createConnection(ProposedFeatures.all);
/*
* ... more initialisations
*/
connection.listen();
Pour chaque requête ou notification à traiter l'objet connection
propose un hook pour intercepter le message et dans le cas
d'une requête pouvoir envoyer la réponse. Par exemple :
import { InitializeParams, InitializeResult, TextDocumentSyncKind } from "vscode-languageserver";
connection.onInitialize((params: InitializeParams): InitializeResult => {
return {
capabilities: {
textDocumentSync: TextDocumentSyncKind.Incremental,
} as any
}
});
Le serveur doit garder une version des documents ouverts afin de suivre leur modifications. La bibliothèque vscode-languageserver
met à disposition la fonction TextDocument.create()
pour créer des documents sur lesquels la fonction TextDocument.applyEdits()
permet d'appliquer les modifications. A chaque action sur un document (ouverture, changement et fermeture) le document doit être
validé avec notre lexer/parser/checker maison et les erreurs publiées sous forme de diagnostiques avec la méthode connection.sendDiagnostics()
.
Résultat
Ça y est votre serveur de langage est prêt ! Mais sans un vrai client graphique l'expérience est plutôt limitée. Dans le chapitre suivant une extension VSCode va être développée pour communiquer avec notre serveur.