@platformos/platformos-language-server-common
v0.0.19
Published
<h1 align="center" style="position: relative;" > <br> <img src="https://github.com/Platform-OS/platformos-tools/blob/master/packages/vscode-extension/images/platformos_logo.png?raw=true" alt="platformOS logo" width="200"> <br> platformOS Languag
Keywords
Readme
The Language Server Protocol empowers developers to provide code editing features to all code editors in a single code base with no code-editor-specific code.
This module serves as a runtime-agnostic Liquid Language Server.
You may be interested in the sibling modules:
@platformos/platformos-language-server-common— (you are here) Runtime agnostic Language Server that can run in browser or Node.js.@platformos/platformos-language-server-browser— Browser specific wrapper over the common library.@platformos/platformos-language-server-node— Node.js specific wrapper over the common library.
Usage
The language server is integrated in the platformOS CLI (pos-cli).
Node
The Node.js version comes with batteries included and uses STDIN and STDOUT as the communication channel.
// slim-cli.ts
import { startServer } from '@platformos/platformos-language-server-node';
// start the server (batteries included)
startServer();Browser
The browser version accepts a Web Worker as argument.
// worker.ts
import { startServer, Dependencies } from '@platformos/platformos-language-server-browser';
// Provide implementations for the dependency injections
const dependencies: Dependencies = { /* ... */ };
// In a Web Worker, the self object refers to the worker.
startServer(self as any as Worker, dependencies);Learn more
Read the Language Server Protocol Spec
It's important to understand the following concepts:
- Language Client
- Language Server
- Messages
- Requests / Response
- Notifications
- Message direction
- Client Capabilities
- Server Capabilities
- TextDocument synchronization
- Lifecycle methods
Take a look at the
vscode-languageserver-*libraries offered by VS Code.They have
vscodein their name, but onlyvscode-languageclientis VS Code specific, the other libraries can be used in non-VS Code contexts (we do this here).This library provides the
connectionobject and is runtime agnostic. The entire spec is implemented and thus you can hook into every message type.Examples:
connection.onInitialize(params => {}),connection.onTextDocumentDidOpen(params => {}), etc.vscode-languageserver-protocolThis library is useful to reuse and type check message parameter types.
Examples:
PublishDiagnosticsNotification,DiagnosticClientCapabilities,DiagnosticServerCapabilities, etc.This library is useful to get the types of specific parts of the Protocol.
Examples:
Diagnostic,URI,TextDocument,Position,Range,LocationLink, etc.
