npm.io
0.3.42 • Published 20h agoCLI

@danielx/civet-language-server

Licence
Version
0.3.42
Deps
4
Size
58.4 MB
Vulns
0
Weekly
0
Stars
2.0K

Civet Language Server

Standalone, editor-agnostic Language Server Protocol implementation for Civet. It also answers grammar-level requests (definition, references, document symbols, completions, hover) for Hera grammar files (.hera), parsed with the project's @danielx/hera.

Install

npm install -g @danielx/civet-language-server

For repository development:

pnpm -C lsp/server build
pnpm -C lsp/server test

Command Line

The package installs civet-lsp, which speaks LSP over stdio:

civet-lsp --stdio

Use this from editors or tools that can launch a standard LSP server process.

Browser Worker

The package also publishes browser-oriented entries for Monaco or other in-browser clients:

import { createCivetLspWorker } from '@danielx/civet-language-server/worker'

const worker = createCivetLspWorker({
  civetUrl: new URL('@danielx/civet/browser.min', import.meta.url),
  serverUrl: new URL('@danielx/civet-language-server/browser', import.meta.url),
})

civetUrl should point to a browser build that installs globalThis.Civet in the worker. serverUrl should point to @danielx/civet-language-server/browser or an equivalent browser bundle of this package.

For a working example, see the Playground and its source code.

Package Entries

Entry Purpose
@danielx/civet-language-server Conditional default entry: browser builds use the browser worker server; Node uses the Node stdio server
@danielx/civet-language-server/node Explicit Node stdio server entry
@danielx/civet-language-server/browser Explicit browser worker LSP server entry
@danielx/civet-language-server/worker Browser helper for creating and talking to the worker

Use /node or /browser when a bundler's package conditions are not the runtime you want. The command-line civet-lsp wrapper always launches the Node entry.

Source Layout

Path Purpose
source/server.civet Shared LSP server implementation
source/node.civet Node stdio entrypoint
source/browser.civet Browser worker entrypoint
source/worker.civet Browser-side worker helpers