npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

unified-language-server

v4.0.1

Published

Language server for unified

Downloads

1,629

Readme

unified-language-server

Build Coverage Downloads Size Sponsors Backers Chat

Create a language server based on unified ecosystems.

Contents

What 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 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 using 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, 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:

Types

This package is fully typed with TypeScript. It exports an Options type, which specifies the interface of the accepted options.

Language Server features

Watching files

Clients should watch the unified-engine config files 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 — the language server implements code actions based on the 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 — when a document is changed by the client, the language server processes it using a unified pipeline. Any messages collected are published to the client using textDocument/publishDiagnostics.
  • textDocument/didClose — when a document is closed by the client, the language server resets diagnostics by publishing an empty array using textDocument/publishDiagnostics.
  • textDocument/didOpen — when a document is opened by the client, the language server processes it using a unified pipeline. Any messages collected are published to the client using textDocument/publishDiagnostics.
  • textDocument/formatting — when document formatting is requested by the client, the language server processes it using a unified pipeline. The stringified result is returned.
  • workspace/didChangeWatchedFiles and workspace/didChangeWorkspaceFolders — when the client signals a watched file or workspace has changed, the language server processes all open files using a unified pipeline. Any messages collected are published to the client using textDocument/publishDiagnostics.

Configuration

  • requireConfig (default: false) — If true, files will only be checked if a configuration file is present.

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 7, which implements language server protocol 3.17.0. It should work anywhere where LSP 3.6.0 or later is implemented.

Related

  • unified — create pipeline for working with syntax trees
  • unified-args — create a CLI for a unified pipeline

Contribute

See contributing.md in unifiedjs/.github for ways to get started. See support.md for ways to get help.

This project has a code of conduct. By interacting with this repository, organization, or community you agree to abide by its terms.

License

MIT © @aecepoglu