• Stars
    star
    1,048
  • Rank 43,968 (Top 0.9 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created over 7 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Language Server for YAML Files

CI version Coverage Status

YAML Language Server

Supports JSON Schema 7 and below. Starting from 1.0.0 the language server uses eemeli/yaml as the new YAML parser, which strictly enforces the specified YAML spec version. Default YAML spec version is 1.2, it can be changed with yaml.yamlVersion setting.

Features

  1. YAML validation:
    • Detects whether the entire file is valid yaml
  2. Validation:
    • Detects errors such as:
      • Node is not found
      • Node has an invalid key node type
      • Node has an invalid type
      • Node is not a valid child node
    • Detects warnings such as:
      • Node is an additional property of parent
  3. Auto completion:
    • Auto completes on all commands
    • Scalar nodes autocomplete to schema's defaults if they exist
  4. Hover support:
    • Hovering over a node shows description if available
  5. Document outlining:
    • Shows a complete document outline of all nodes in the document

Language Server Settings

The following settings are supported:

  • yaml.yamlVersion: Set default YAML spec version (1.2 or 1.1)
  • yaml.format.enable: Enable/disable default YAML formatter (requires restart)
  • yaml.format.singleQuote: Use single quotes instead of double quotes
  • yaml.format.bracketSpacing: Print spaces between brackets in objects
  • yaml.format.proseWrap: Always: wrap prose if it exceeds the print width, Never: never wrap the prose, Preserve: wrap prose as-is
  • yaml.format.printWidth: Specify the line length that the printer will wrap on
  • yaml.validate: Enable/disable validation feature
  • yaml.hover: Enable/disable hover
  • yaml.completion: Enable/disable autocompletion
  • yaml.schemas: Helps you associate schemas with files in a glob pattern
  • yaml.schemaStore.enable: When set to true the YAML language server will pull in all available schemas from JSON Schema Store
  • yaml.schemaStore.url: URL of a schema store catalog to use when downloading schemas.
  • yaml.customTags: Array of custom tags that the parser will validate against. It has two ways to be used. Either an item in the array is a custom tag such as "!Ref" and it will automatically map !Ref to scalar or you can specify the type of the object !Ref should be e.g. "!Ref sequence". The type of object can be either scalar (for strings and booleans), sequence (for arrays), map (for objects).
  • yaml.maxItemsComputed: The maximum number of outline symbols and folding regions computed (limited for performance reasons).
  • [yaml].editor.tabSize: the number of spaces to use when autocompleting. Takes priority over editor.tabSize.
  • editor.tabSize: the number of spaces to use when autocompleting. Default is 2.
  • http.proxy: The URL of the proxy server that will be used when attempting to download a schema. If it is not set or it is undefined no proxy server will be used.
  • http.proxyStrictSSL: If true the proxy server certificate should be verified against the list of supplied CAs. Default is false.
  • [yaml].editor.formatOnType: Enable/disable on type indent and auto formatting array
  • yaml.disableDefaultProperties: Disable adding not required properties with default values into completion text
  • yaml.suggest.parentSkeletonSelectedFirst: If true, the user must select some parent skeleton first before autocompletion starts to suggest the rest of the properties.\nWhen yaml object is not empty, autocompletion ignores this setting and returns all properties and skeletons.
  • yaml.style.flowMapping : Forbids flow style mappings if set to forbid
  • yaml.style.flowSequence : Forbids flow style sequences if set to forbid
  • yaml.keyOrdering : Enforces alphabetical ordering of keys in mappings when set to true. Default is false
Adding custom tags

In order to use the custom tags in your YAML file you need to first specify the custom tags in the setting of your code editor. For example, we can have the following custom tags:

"yaml.customTags": [
    "!Scalar-example scalar",
    "!Seq-example sequence",
    "!Mapping-example mapping"
]

The !Scalar-example would map to a scalar custom tag, the !Seq-example would map to a sequence custom tag, the !Mapping-example would map to a mapping custom tag.

We can then use the newly defined custom tags inside our YAML file:

some_key: !Scalar-example some_value
some_sequence: !Seq-example
  - some_seq_key_1: some_seq_value_1
  - some_seq_key_2: some_seq_value_2
some_mapping: !Mapping-example
  some_mapping_key_1: some_mapping_value_1
  some_mapping_key_2: some_mapping_value_2
Associating a schema to a glob pattern via yaml.schemas:

yaml.schemas applies a schema to a file. In other words, the schema (placed on the left) is applied to the glob pattern on the right. Your schema can be local or online. Your schema path must be relative to the project root and not an absolute path to the schema.

For example: If you have project structure

myProject

Β Β Β > myYamlFile.yaml

you can do

yaml.schemas: {
    "https://json.schemastore.org/composer": "/myYamlFile.yaml"
}

and that will associate the composer schema with myYamlFile.yaml.

More examples of schema association:

Using yaml.schemas settings

Single root schema association:

When associating a schema it should follow the format below

yaml.schemas: {
    "url": "globPattern",
    "Kubernetes": "globPattern"
}

e.g.

yaml.schemas: {
    "https://json.schemastore.org/composer": "/*"
}

e.g.

yaml.schemas: {
    "kubernetes": "/myYamlFile.yaml"
}

e.g.

yaml.schemas: {
    "https://json.schemastore.org/composer": "/*",
    "kubernetes": "/myYamlFile.yaml"
}

On Windows with full path:

yaml.schemas: {
    "C:\\Users\\user\\Documents\\custom_schema.json": "someFilePattern.yaml",
}

On Mac/Linux with full path:

yaml.schemas: {
    "/home/user/custom_schema.json": "someFilePattern.yaml",
}

Since 0.11.0 YAML Schemas can be used for validation:

 "/home/user/custom_schema.yaml": "someFilePattern.yaml"

A schema can be associated with multiple globs using a json array, e.g.

yaml.schemas: {
    "kubernetes": ["filePattern1.yaml", "filePattern2.yaml"]
}

e.g.

"yaml.schemas": {
    "http://json.schemastore.org/composer": ["/*"],
    "file:///home/johnd/some-schema.json": ["some.yaml"],
    "../relative/path/schema.json": ["/config*.yaml"],
    "/Users/johnd/some-schema.json": ["some.yaml"],
}

e.g.

"yaml.schemas": {
    "kubernetes": ["/myYamlFile.yaml"]
}

e.g.

"yaml.schemas": {
    "http://json.schemastore.org/composer": ["/*"],
    "kubernetes": ["/myYamlFile.yaml"]
}

Multi root schema association:

You can also use relative paths when working with multi root workspaces.

Suppose you have a multi root workspace that is laid out like:

My_first_project:
   test.yaml
   my_schema.json
My_second_project:
   test2.yaml
   my_schema2.json

You must then associate schemas relative to the root of the multi root workspace project.

yaml.schemas: {
    "My_first_project/my_schema.json": "test.yaml",
    "My_second_project/my_schema2.json": "test2.yaml"
}

yaml.schemas allows you to specify json schemas that you want to validate against the yaml that you write. Kubernetes is an optional field. It does not require a url as the language server will provide that. You just need the keyword kubernetes and a glob pattern.

Nested Schema References

Suppose a file is meant to be a component of an existing schema (like a job.yaml file in a circleci orb), but there isn't a standalone schema that you can reference. If there is a nested schema definition for this subcomponent, you can reference it using a url fragment, e.g.:

yaml.schemas: {
    "https://json.schemastore.org/circleciconfig#/definitions/jobs/additionalProperties": "/src/jobs/*.yaml",
}

Note This will require reading your existing schema and understanding the schemastore structure a bit. (TODO: link to a documentation or blog post here?)

Using inlined schema

It is possible to specify a yaml schema using a modeline.

# yaml-language-server: $schema=<urlToTheSchema>

Also it is possible to use relative path in a modeline:

# yaml-language-server: $schema=../relative/path/to/schema

or absolute path:

# yaml-language-server: $schema=/absolute/path/to/schema

Schema priority

The following is the priority of schema association in highest to lowest priority:

  1. Modeline
  2. CustomSchemaProvider API
  3. yaml.settings
  4. Schema association notification
  5. Schema Store

Containerized Language Server

An image is provided for users who would like to use the YAML language server without having to install dependencies locally.

The image is located at quay.io/redhat-developer/yaml-language-server

To run the image you can use:

docker run -it quay.io/redhat-developer/yaml-language-server:latest

Language Server Protocol version

yaml-language-server use [email protected] which implements LSP 3.16

Language Server Protocol extensions

SchemaSelectionRequests

SupportSchemaSelection Notification

The support schema selection notification is sent from a client to the server to inform server that client supports JSON Schema selection.

Notification:

  • method: 'yaml/supportSchemaSelection'
  • params: void

SchemaStoreInitialized Notification

The schema store initialized notification is sent from the server to a client to inform client that server has finished initializing/loading schemas from schema store, and client now can ask for schemas.

Notification:

  • method: 'yaml/schema/store/initialized'
  • params: void

GetAllSchemas Request

The get all schemas request sent from a client to server to get all known schemas.

Request:

  • method: 'yaml/get/all/jsonSchemas';
  • params: the document uri, server will mark used schema for document

Response:

  • result: JSONSchemaDescriptionExt[]
interface JSONSchemaDescriptionExt {
  /**
   * Schema URI
   */
  uri: string;
  /**
   * Schema name, from schema store
   */
  name?: string;
  /**
   * Schema description, from schema store
   */
  description?: string;
  /**
   * Is schema used for current document
   */
  usedForCurrentFile: boolean;
  /**
   * Is schema from schema store
   */
  fromStore: boolean;
}

GetSchemas Request

The request sent from a client to server to get schemas used for current document. Client can use this method to indicate in UI which schemas used for current YAML document.

Request:

  • method: 'yaml/get/jsonSchema';
  • params: the document uri to get used schemas

Response:

  • result: JSONSchemaDescription[]
interface JSONSchemaDescriptionExt {
  /**
   * Schema URI
   */
  uri: string;
  /**
   * Schema name, from schema store
   */
  name?: string;
  /**
   * Schema description, from schema store
   */
  description?: string;
}

Clients

This repository only contains the server implementation. Here are some known clients consuming this server:

Developer Support

Getting started

  1. Install prerequisites:
  2. Fork and clone this repository
  3. Install the dependencies
    cd yaml-language-server
    $ yarn install
  4. Build the language server
    $ yarn run build
  5. The new built server is now located in ./out/server/src/server.js.
    node (Yaml Language Server Location)/out/server/src/server.js [--stdio]

Connecting to the language server via stdio

We have included the option to connect to the language server via stdio to help with integrating the language server into different clients.

ESM and UMD Modules

Building the YAML Language Server produces CommonJS modules in the /out/server/src directory. In addition, a build also produces UMD (Universal Module Definition) modules and ES Modules (ESM) in the /lib directory. That gives you choices in using the YAML Language Server with different module loaders on the server side and in the browser with bundlers like webpack.

CI

We use a GitHub Action to publish each change in the main branch to npm registry with the next tag. You may use the next version to adopt the latest changes into your project.

More Repositories

1

vscode-java

Java Language Support for Visual Studio Code
TypeScript
2,060
star
2

odo

odo - Developer-focused CLI for fast & iterative container-based application development on Podman and Kubernetes. Implementation of the open Devfile standard.
Go
777
star
3

vscode-yaml

YAML support for VS Code with built-in kubernetes syntax support
TypeScript
643
star
4

vscode-xml

Editing XML in Visual Studio Code made easy
TypeScript
254
star
5

rpm-packaging-guide

RPM Packaging Guide
251
star
6

vscode-extension-tester

ExTester: Your Essential UI Testing Companion for Visual Studio Code Extensions! Seamlessly execute UI tests with Selenium WebDriver, ensuring robustness and reliability in your extension development journey. Simplify UI testing for your VS Code extensions and elevate the quality of your user interface effortlessly.
TypeScript
227
star
7

developers.redhat.com

Sources for developer.redhat.com
CSS
191
star
8

gitops-operator

An operator that gets you an ArgoCD for cluster configuration out-of-the-box on OpenShift along with the UI for visualizing environments.
Go
148
star
9

kam

GitOps Application Manager: An opinionated CLI that generates the Kubernetes resources for managing your Tekton-based CI manifests, ArgoCD-based CD manifests and Application manifests in Git.
Go
142
star
10

reactive-microservices-in-java

Source code from the Reactive Microservices in Java book
Shell
139
star
11

kestrel-linux-transport

Linux Transport for Kestrel
C#
118
star
12

intellij-quarkus

IntelliJ Quarkus Tools
Java
114
star
13

s2i-dotnetcore

.NET Core OpenShift images
Shell
111
star
14

service-binding-operator

[Deprecated] The Service Binding Operator: Connecting Applications with Services, in Kubernetes
Go
109
star
15

vscode-openshift-tools

OpenShift extension for Visual Studio Code
TypeScript
93
star
16

redhat-sso-quickstarts

Quickstarts for the Red Hat Single Sign-On (SSO) Server
Java
93
star
17

vscode-didact

Framework and tools for providing interactive tutorials with active links that call VS Code commands
TypeScript
79
star
18

devspaces

Red Hat OpenShift Dev Spaces (formerly Red Hat CodeReady Workspaces) forks of the registries, plus product-related tools/scripts
Shell
78
star
19

vscode-quarkus

Quarkus Tools for Visual Studio Code, by Red Hat
TypeScript
72
star
20

s2i-dotnetcore-ex

Example application for the OpenShift s2i-dotnetcore builder image
HTML
71
star
21

vscode-tekton

Tekton support for Visual Studio Code
TypeScript
69
star
22

opencompose

OpenCompose - A higher level abstraction for Kubernetes Resource
Go
64
star
23

lsp4ij

LSP Client for IntelliJ
Java
63
star
24

introduction-to-eclipse-vertx

An introduction to Eclipse Vert.x - a toolkit to build reactive and distributed systems
Java
62
star
25

vscode-server-connector

πŸ“¦ Connects Visual Studio Code to your server adapters and run, deploy apps !!
TypeScript
57
star
26

redhat-helm-charts

This repository contains the Helm charts that power charts in the OpenShift Developer Catalog
Smarty
48
star
27

quarkus-ls

Language server for Quarkus tooling
Java
43
star
28

app-services-cli

Command Line Interface for RHOAS
Go
41
star
29

web-terminal-operator

OpenShift Console Web Terminal
Go
40
star
30

rh-che

Eclipse Che hosted by Red Hat
Java
40
star
31

vscode-rsp-ui

A unified UI for all RSP servers and RSP server-providers to integrate with
TypeScript
38
star
32

cheat-sheets

Repository containing cheat sheets in asciidoc form
37
star
33

red-hat-developer-hub-software-templates

Collection of Software Templates for Red Hat Developer Hub
HTML
36
star
34

microservices-book

Source code for book Microservices for Java Developers - 2nd edition
Java
35
star
35

gitops-repo-example

34
star
36

rsp-server

A server management protocol based on LSP4J
Java
30
star
37

rsp-server-community

A repository for additions to rsp-server and the associated vscode extension to add support for other runtimes
Java
30
star
38

app-labels

Kuberbetes/OpenShift recommended labeling
27
star
39

argocd-terraform-controller

Argo CD Terraform Controller
Go
26
star
40

devspaces-images

Identical copies of the code used in Brew/OSBS to build OpenShift Dev Spaces, but made public to enable pull requests and easier contribution; also copies of CasC Jenkins job configs
TypeScript
26
star
41

devfile

devfile v1
24
star
42

devconsole-operator

Enable a developer-focused view in OpenShift 4 web console
Go
24
star
43

intellij-dependency-analytics

IntelliJ Dependency Analytics
Java
24
star
44

app-services-guides

End User Guides for popular programming languages and tools
JavaScript
24
star
45

vscode-redhat-telemetry

TypeScript
22
star
46

openshift-actions

Please see the new actions under the redhat-actions organization.
TypeScript
22
star
47

openshift-dd-ext

OpenShift Extension for Docker desktop
TypeScript
20
star
48

intellij-tekton

IntelliJ Tekton plugin
Java
20
star
49

intellij-kubernetes

IntelliJ Kubernetes plugin
Kotlin
20
star
50

oc-helm

oc CLI plugin to interact with Helm features provided by the OpenShift Console
Go
19
star
51

vscode-microprofile

Microprofile tools for Visual Studio Code
TypeScript
18
star
52

redhat-datagrid-tutorials

Red Hat Datagrid simple tutorials
Java
18
star
53

openshift-web-console-customizations

A collection of customized templates for the OpenShift Web Console
HTML
18
star
54

observability-operator

Operator installing the Telemetry stack in a Kubernetes cluster and installing the metrics and alerts
Go
17
star
55

intellij-openshift-connector

IntelliJ OpenShift Toolkit
Java
16
star
56

devspaces-chectl

Red Hat OpenShift Dev Spaces build of chectl, based on https://github.com/che-incubator/chectl/
TypeScript
16
star
57

openshift-vsts

OpenShift Extension for Azure DevOps.
TypeScript
14
star
58

henge

This project has merged into Kompose.
Go
14
star
59

parodos

Focused on helping enterprise developers get their code to production
Java
14
star
60

gitops-backend

Go
14
star
61

devspaces-demo

Files and script to run a Red Hat OpenShift Dev Spaces demo
Shell
13
star
62

app-services-operator

OpenShift Operator for binding Red Hat OpenShift Application Services
Java
13
star
63

vscode-knative

Knative & Serverless Function plugin for VSCode
TypeScript
13
star
64

red-hat-developers-documentation-rhdh

Red Hat Developer Hub documentation - upstream sources for https://gitlab.cee.redhat.com/red-hat-developers-documentation/rhdh
CSS
12
star
65

alizer

⛔️ DEPRECATED - Application analyzer toolkit, use https://github.com/devfile/alizer instead
Go
12
star
66

opencompose-old

OpenCompose Specification
12
star
67

eclipseide-jdtls

A language server client for Eclipse using JDT-LS
Java
11
star
68

web-terminal-tooling

Kubernetes and OpenShift command line tools packaged in a container.
Shell
10
star
69

vscode-openshift-extension-pack

A collection of extensions for working with Openshift resources in VS Code
10
star
70

dotnet-regular-tests

.NET Core tests for .NET Bunny (RHEL & Fedora RPM tests)
Shell
9
star
71

vscode-wizard

TypeScript
9
star
72

intellij-redhat-telemetry

IntelliJ Red Hat telemetry plugin
Java
9
star
73

mapt

Multi Architecture Provisioning Tool
Go
9
star
74

intellij-common-ui-test-library

IntelliJ IDEA UI test library is a tool for creating automated UI tests for IntelliJ IDEA plugin projects.
Java
9
star
75

kubernetes-image-puller

Kubernetes image puller, with Hosted Che specific settings. For use in Che or CodeReady Workspaces, see https://github.com/che-incubator/kubernetes-image-puller
Go
8
star
76

osd-monitor-poc

HTML
8
star
77

podman-desktop-demo

quick demo scripts for podman desktop
Java
8
star
78

helm-dump

helm-dump is a Helm plugin to create a Helm chart from existing cluster resources
Go
8
star
79

s2i-aspnet-musicstore-ex

OpenShift .NET Core quickstart application
C#
8
star
80

app-services-sdk-java

RedHat Managed Services APIs for Java
Java
8
star
81

app-services-ui

Application Services Federated UI
TypeScript
8
star
82

lab-docker-jboss-eap

Docker JBoss EAP Tutorial
Ruby
7
star
83

rhdh-plugin-export-backstage-backstage

7
star
84

odo-init-image

ODO v3 no loner users this image!!! (Container for ODO v2 to setup SupervisorD inside S2I builder image.)
Go
7
star
85

che-functional-tests

Che functional tests
Java
6
star
86

openshift-jenkins-operator

An operator-managed OpenShift Jenkins for OpenShift 4.x
Go
6
star
87

vscode-redhat-account

Provides authentication support for Red Hat accounts in Visual Studio Code.
TypeScript
6
star
88

dotnet-bunny

.NET Bunny is a simple script that hops through the folders and runs .NET Core tests based on json configuration.
C#
5
star
89

rsp-client

TypeScript
5
star
90

rhd-frontend

npm-installable package for RHDP website assets
CSS
5
star
91

vscode-project-initializer

Red Hat Developer Launcher Visual Studio Code Extension
TypeScript
5
star
92

che-starter

REST API for managing Eclipse Che workspaces
Java
5
star
93

app-services-ui-components

TypeScript
5
star
94

web-terminal-exec

OpenShift Web Terminal container responsible for pod exec
Go
5
star
95

intellij-common

Java
4
star
96

app-services-ui-shared

Shared contexts for the UIs
TypeScript
4
star
97

stickers

Red Hat Hexagon Stickers
4
star
98

code.quarkus.redhat.com

POC for the product version of code.quarkus.io
SCSS
4
star
99

backstage-odo-devfile-plugin

Custom Field Extension and Custom Actions Plugin for generating a starter project with a Devfile using `odo`
TypeScript
4
star
100

devfile-sample

Devfile Example for OpenShift Console
JavaScript
4
star