coc-yaml
Neoclideyaml extension for coc.nvim
Published Package Summary
coc-yaml
Fork of vscode-yaml that works with coc.nvim
Install
In your vim/neovim, run command:
:CocInstall coc-yaml
Features
- YAML validation:
- Detects whether the entire file is valid yaml
- 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
- Document Outlining (
:CocOutline):- Provides the document outlining of all completed nodes in the file
- Auto completion:
- Auto completes on all commands
- Scalar nodes autocomplete to schema's defaults if they exist
- Hover support:
- Hovering over a node shows description if provided by schema
- Formatter:
- Allows for formatting the current file
- On type formatting auto indent for array items
Auto completion and hover support are provided by the schema. Please refer to Language Server Settings to setup a schema
YAML version support
Starting from 1.0.0 the extension 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.
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, you 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.
You can then use the newly defined custom tags inside the 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 schemas
YAML Language support uses JSON Schemas to understand the shape of a YAML file, including its value sets, defaults and descriptions. The schema support is shipped with JSON Schema Draft 7.
We support schemas provided through JSON Schema Store. However, schemas can also be defined in a workspace.
The association of a YAML file to a schema can be done either in the YAML file itself using a modeline or in the User or Workspace settings under the property yaml.schemas.
Associating a schema in the YAML file
It is possible to specify a yaml schema using a modeline.
# yaml-language-server: $schema=<urlToTheSchema>
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 must be a relative path and not an absolute path. The entrance point for yaml.schemas is location in user and workspace settings
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 a reserved keyword field. It does not require a url as the language server will provide that. You just need the keyword kubernetes and a glob pattern.
Mapping a schema in an extension
- Supports
yamlValidationpoint which allows you to contribute a schema for a specific type of yaml file (Similar to jsonValidation) e.g.
{
"contributes": {
"yamlValidation": [
{
"fileMatch": "yourfile.yml",
"url": "./schema.json"
}
]
}
}
Contribute
Consider support coc.nvim development on Patreon or PayPal:
- yaml extension for coc.nvim
- onLanguage:yaml
Want to build, test, or contribute to coc.nvim extensions? Explore our official SDK and testing toolkits.
Open Developer GuideVersion History
Published with coc-yaml@1.9.3 as CHANGELOG.md.
1.7.1
- And
yaml.selectSchemacommand.
1.7.0
- Add configuration
yaml.disableDefaultProperties. - Add status bar item support for resolved schema.
- Support cache fetched schema result by etag.
- Support show information when max items exceed.
- Support
JSONSchemaDocumentContentProviderfor custom schema:json-schema.
Contributed Commands
All contributes.commands entries from the published package manifest for coc-yaml@1.9.3.
| Command (:CocCommand) | Description |
|---|---|
| yaml.selectSchema | Choose yaml schema for current file, update configuration in user's coc-settings.json |
| yaml.jumpToSchema | Open the schema for the current file |
| yaml.loadSchema | Associate a schema file path with the current file |
Configuration Schema
All contributes.configuration entries from the published package manifest, including each raw property schema for coc-settings.json.
Raw JSON Schema
{
"type": "boolean",
"default": true,
"description": "Enable/disable hover feature"
}Raw JSON Schema
{
"type": "boolean",
"default": true,
"description": "Enable/disable coc-yaml (requires restart)."
}Raw JSON Schema
{
"type": "object",
"default": {},
"description": "Associate schemas to Yaml files in the current workspace"
}Raw JSON Schema
{
"type": "array",
"default": [],
"description": "The execArgv option for node running yaml language server."
}Raw JSON Schema
{
"type": "boolean",
"default": true,
"description": "Enable/disable validation feature"
}Raw JSON Schema
{
"type": "boolean",
"default": true,
"description": "Enable/disable completion feature"
}Raw JSON Schema
{
"type": "array",
"default": [],
"description": "Custom tags for the parser to use"
}Raw JSON Schema
{
"type": "string",
"default": "Yaml",
"description": "Text shown in status line when coc-yaml is activated for current buffer."
}Raw JSON Schema
{
"enum": [
"off",
"messages",
"verbose"
],
"type": "string",
"default": "off",
"description": "Traces the communication between VSCode and the languageServerExample service."
}Raw JSON Schema
{
"type": "boolean",
"default": false,
"description": "Enable/disable default YAML formatter (requires restart)"
}Raw JSON Schema
{
"type": "string",
"default": "https://www.schemastore.org/api/json/catalog.json",
"description": "URL of schema store catalog to use"
}Raw JSON Schema
{
"type": "array",
"items": {
"type": "string"
},
"default": [],
"description": "Glob patterns of files for which the yaml language server is disabled, '!' prefixed patterns exclude files from an earlier pattern."
}Raw JSON Schema
{
"enum": [
"preserve",
"never",
"always"
],
"type": "string",
"default": "preserve",
"description": "Always: wrap prose if it exeeds the print width, Never: never wrap the prose, Preserve: wrap prose as-is"
}Raw JSON Schema
{
"type": "integer",
"default": 5000,
"description": "The maximum number of outline symbols and folding regions computed (limited for performance reasons)."
}Raw JSON Schema
{
"type": "integer",
"default": 80,
"description": "Specify the line length that the printer will wrap on"
}Raw JSON Schema
{
"type": "boolean",
"default": false,
"description": "Use single quotes instead of double quotes"
}Raw JSON Schema
{
"type": "boolean",
"default": true,
"description": "Automatically pull available YAML schemas from JSON Schema Store"
}Raw JSON Schema
{
"type": "boolean",
"default": true,
"description": "Print spaces between brackets in objects"
}Raw JSON Schema
{
"type": "boolean",
"default": false,
"description": "Disable adding not required properties with default values into completion text."
}Raw JSON Schema
{
"type": "boolean",
"default": false,
"description": "Globally set additionalProperties to false for all objects. So if its true, no extra properties are allowed inside yaml."
}