unified-language-server
!Buildbuild-badgebuild
!Coveragecoverage-badgecoverage
!Downloadsdownloads-badgedownloads
!Sizesize-badgesize
!Sponsorssponsors-badgecollective
!Backersbackers-badgecollective
!Chatchat-badgechatCreate a language server based on unified ecosystems.
Contents
createUnifiedLanguageServer(options)
Watching files
Requests
ConfigurationWhat is this?
This package exports a function which can be used to create a language server based on unified processors. It can do the following:- format documents based on a unified processor
- validate documents based on a unified processor
- support configuration files (such as
.remarkrc
) using
unified-engine
unified-engineunified is a project that validates and transforms content with abstract syntax trees (ASTs). unified-engine is an engine to process multiple files with unified using configuration files. language server is a standardized language independent way for creating editor integrations.
When should I use this?
This package is useful when you want to create a language server for an existing unified ecosystem. Ideally this should follow the same rules as a CLI for this ecosystem created usingunified-args
unified-args.
The resulting package may then be used to create plugins for this ecosystem for
various editors.Install
This package is ESM only. In Node.js (version 16.0+), install with npm:npm install unified-language-server
Use
Let’s say you want to create a language server for remark.Create a file names
package.json
with the following content:{
"name": "remark-language-server",
"version": "1.0.0",
"bin": "./index.js",
"type": "module",
"dependencies": {
"remark": "^14.0.0",
"unified-language-server": "^1.0.0"
}
}
Then create
index.js
with the following content:import {remark} from 'remark'
import {createUnifiedLanguageServer} from 'unified-language-server'
process.title = 'remark-language-server'
createUnifiedLanguageServer({
ignoreName: '.remarkignore',
packageField: 'remarkConfig',
pluginPrefix: 'remark',
rcName: '.remarkrc',
processorName: 'remark',
processorSpecifier: 'remark',
defaultProcessor: remark
})
That’s all there is to it. You have just created a language server for remark.
API
createUnifiedLanguageServer(options)
Create a language server for a unified ecosystem.options
Configuration for unified-engine
and the language server.options.processorName
The package ID of the expected processor (string
, required, example:
'remark'
).
Will be loaded from the local workspace.options.processorSpecifier
The specifier to get the processor on the resolved module (string
, optional,
default: 'default'
).
For example, remark uses the specifier remark
to expose its processor and
a default export can be requested by passing 'default'
(the default).options.defaultProcessor
Optional fallback processor to use if processorName
can’t be found
locally in node_modules
(Unified
unified, optional).
This can be used to ship a processor with your package, to be used if no
processor is found locally.
If this isn’t passed, a warning is shown if processorName
can’t be found.options.ignoreName
Name of ignore files to load (string
, optional).options.packageField
Property at which configuration can be found in package.json files (string
,
optional).options.pluginPrefix
Optional prefix to use when searching for plugins (string
, optional).options.plugins
Plugins to use by default (Array|Object
, optional).options.rcName
Name of configuration files to load (string
, optional).Examples
For examples, see the following projects:redot-language-server
rehype-language-server
Types
This package is fully typed with TypeScript. It exports anOptions
type, which specifies the interface of the accepted
options.Language Server features
Watching files
Clients should watch theunified-engine
config filesunified-engine-configuration and notify the language server if a
change was made.Requests
Language servers created using this package implement the following language server features:textDocument/codeAction
expected
field
on reported messages.
A code action can either insert, replace, or delete text based on the range
of the message and the expected value.textDocument/didChange
textDocument/publishDiagnostics
.textDocument/didClose
textDocument/publishDiagnostics
.textDocument/didOpen
textDocument/publishDiagnostics
.textDocument/formatting
workspace/didChangeWatchedFiles
andworkspace/didChangeWorkspaceFolders
textDocument/publishDiagnostics
.Configuration
requireConfig
(default:false
)
Compatibility
Projects maintained by the unified collective are compatible with all maintained versions of Node.js. As of now, that is Node.js 16.0+. Our projects sometimes work with older versions, but this is not guaranteed.This project uses
vscode-languageserver
vscode-languageserver 7, which
implements language server protocol 3.17.0.
It should work anywhere where LSP 3.6.0 or later is implemented.Related
— create pipeline for working with syntax trees — create a CLI for a unified pipelineContribute
Seecontributing.md
contributing in unifiedjs/.github
health for ways
to get started.
See support.md
support for ways to get help.This project has a code of conductcoc. By interacting with this repository, organization, or community you agree to abide by its terms.