redhat-developer / yaml-language-server Goto Github PK
View Code? Open in Web Editor NEWLanguage Server for YAML Files
License: MIT License
Language Server for YAML Files
License: MIT License
👋
I really like how you've wrapped yaml-ast-parser and would be keen to use your version of parser, which calculates line and column numbers in the AST. It'd be great if you published it as a separate npm module and provided TS typings so that people could use it in their projects.
In particular, I'm interested in using your parser in markdown frontmatter to be able to point to a particular semantic issue if it occurs (e.g. when a document references another document that does not exist). Perhaps, guys from Prettier could be also take it on board later to prettify YAMLS?
I'm assuming the first one can be ignored but the other ones are presumably valid errors.
1) Yaml Validation with kubernetes Test that validation does not throw errors Basic test:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
2) URI Parse Basic:
AssertionError: '\\bar.html' == '/bar.html'
+ expected - actual
-\bar.html
+/bar.html
at Context.it (test\uri.test.ts:15:20)
3) URI Create Basic:
AssertionError: '\\bar.html' == '/bar.html'
+ expected - actual
-\bar.html
+/bar.html
at Context.it (test\uri.test.ts:27:20)
4) URI File Basic:
AssertionError: '\\..\\uri.test.ts' == '/../uri.test.ts'
+ expected - actual
-\..\uri.test.ts
+/../uri.test.ts
at Context.it (test\uri.test.ts:38:20)
5) URI toJson toJson with system file:
AssertionError: 'c:\\test.txt' == 'c:/test.txt'
+ expected - actual
-c:\test.txt
+c:/test.txt
at Context.it (test\uri.test.ts:86:20)
it seems that watch section of package.json script has path issues
yaml-language-server/package.json
Line 43 in 655b869
../out
is not existed in the repo currently
related commit is 668c1204
Thanks for your awesome YAML language server implementation 💯
I would like to develop yaml-plugin for another editor.
Are you planning to publish the ./server/* on NPM?
Semi-related: #19
First thank you for creating this extension / language server!
I've noticed one problem in my particular usecase.
There I'm using JSON Schema definitions which are available locally. In case of VSCodes default JSON implementation, when the local Schema updates, the affected JSON files get re-evaluated and immediately reflect the updated Schema.
The yaml-language-server seems to cache those local schemas. I need to restart the VSCode (i guess the language-server really) to get the Schemas reloaded.
Best,
Simon
yaml-language-server currently uses workspace.symbol.dynamicRegistration
to determine whether it registers textDocument/formatting
capability.
According to the language-server-protocol spec, textDocument.formatting.dynamicRegistration
looks appropriate for the purpose.
/**
* Text document specific client capabilities.
*/
export interface TextDocumentClientCapabilities {
...
/**
* Capabilities specific to the `textDocument/formatting`
*/
formatting?: {
/**
* Whether formatting supports dynamic registration.
*/
dynamicRegistration?: boolean;
};
We should allow users to enter their glob pattern as an array
The snippits no longer fit with the theme of the LS. Remove them
[Info - 13:47:47] Registering request handler for textDocument/formatting failed.
[Error - 13:47:47] (node:18851) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): Error: Unhandled method client/registerCapability
[Error - 13:47:47] (node:18851) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
The following files are missing license headers:
It's not clear to me what this field is for. It gets initialized by reading the client's textDocument.completion.completionItem.snippetSupport
capability but is then never read or used.
yaml-language-server/src/server.ts
Lines 63 to 91 in d332a84
kind: PersistentVolume
apiVersion: v1
metadata: <- Autocompletion right after :
returns
[Trace - 16:51:10] Received response 'textDocument/completion - (48)' in 1ms.
No result returned.
but should return
Result: {
"items": [],
"isIncomplete": false
}
Part of: eclipse-che/che#9725
Hi!
There is an issue in YAML plugin for VS Code redhat-developer/vscode-yaml#76
In short: custom YAML tags such as !include
, !vault
(and many others) that are used in Ansible, CloudFomation, JenkinsJobBuilder and many other utilities are not supported. But these tags are Language feature (see more details in attached link)
As far as I understand, the problem is somewhere in lang. server. because it's used as backend for mentioned plugin.
Could you please investigate possibilities to implement this in language server, so folks from vscode-yaml will be able to support this in plugin?
When you're typing something like
kind: Ima
with kubernetes schema it fails to autocomplete only on the first line
Here is the code to repro the test
let content = "test\r\nfoo:bar\r\n"; let position = 3; let testTextDocument = TextDocument.create("file://~/Desktop/vscode-k8s/test.yaml", "yaml", 0, content); let res = completionHelper(testTextDocument, testTextDocument.positionAt(position), false); console.log(JSON.stringify(res.newText));
The test has output of "test\r:\r\no:bar\r\n" (foo has been cut off first two charactors 'fo'
With the addition of custom tags in 0.0.12 we can use them for autocompletion
Currently hover, document outlining, validation, and auto completion when using multiple Yaml Documents does not work as expected. These features only operate on the first yaml document in the file but should operate on all yaml documents in the file.
Currently it only works when one schema is listed. We need to add support for multiple schemas to be listed.
It seems that the following YAML file for a cert-manager configuration is not supported (getting Value is not accepted. Valid values: "v1"
):
apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
...
It also seems to be the case with other extension versions, e.g. certificates./v1beta1
and extensions/v1beta1
.
I am getting this error in the console a lot:
[Error - 11:20:19] Request textDocument/hover failed.
Message: Request textDocument/hover failed with message: Cannot read property 'getNodeFromOffset' of null
Code: -32603
Originally closed issue in #20 but it looks like Cloudformation support is no longer present.
This is with the following tags:
...
"yaml.customTags": [
"!Ref",
"!GetAtt",
"!FindInMap sequence",
"!FindInMap scalar",
"!GetAtt",
"!GetAZs",
"!Cidr",
"!ImportValue",
"!Join sequence",
"!Select",
"!Split",
"!Sub sequence",
"!Sub scalar",
"!And",
"!Equals",
"!If",
"!Not",
"!Or"
]
With large files ~10k lines, Monaco/VSCode performance degrades when a diagnostic spans a large number of those lines.
Syntax errors can cause the YAML Language Server to report a diagnostic from the location of the error all the way to EOF. Is it possible to force these errors to be restricted to a single line? Or even character when they cause unrecoverable parser errors?
Changed to "Unexpected property ${property_name}"
Is it possible to add some automatic detection of the schema type for a yaml file (for popular schemas)? This is to allow zero configuration in many cases. For example when looking at kubernetes resources the presence of apiVersion
, spec
and type
is a really good indicator.
According to microsoft/language-server-protocol#177 operations should work even if textDocument/didOpen
was not called for a language server. Opening a document or closing it only shifts where the content is managed (in memory or on disk) but shouldn't prevent an operation.
#comment
apiVersion: v1
The above is changed to the following after format.
apiVersion: v1
yaml-language-server: v0.0.12
Hi !
Helm is now the official package manager of Kubernetes. K8s configuration is a lot based under yaml files, and Helm have a templating system to help to replace values in the yaml configuration, but also to control the flow ( {{ if ... }} {{ end }} ).
Of course, it's not YAML compatible ( at least fo the flow control https://docs.helm.sh/chart_template_guide/#flow-control ).
May be it's possible to bypass the errors/warning, based on the extension (eg: file.helm) ?
Regards,
I was wondering how good the support is when not specifying yaml.schemas
?
Does it automatically query schemas from http://schemastore.org/json/?
Does it support $schema
?
README.md states (also vscode-yaml's README.md):
The following settings are supported:
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" or you can specify the type of the object !Ref should be by doing "!Ref Scalar". For example: ["!Ref", "!Some-Tag Scalar"]. The type of object can be one of Scalar, Sequence, Mapping, Map.However if I add the following to .vscode\settings.json:
{
"yaml.customTags": [
"!Ref Scalar"
]
}
The Yaml Support server crashes:
c:\Users\semidefinite\.vscode\extensions\redhat.vscode-yaml-0.0.13\node_modules\yaml-language-server\out\server\node_modules\js-yaml\lib\js-yaml\type.js:57
throw new YAMLException('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.');
^
YAMLException: Unknown kind "Scalar" is specified for "!Ref" YAML type.
at new Type (c:\Users\semidefinite\.vscode\extensions\redhat.vscode-yaml-0.0.13\node_modules\yaml-language-server\out\server\node_modules\js-yaml\lib\js-yaml\type.js:57:11)
at js_yaml_1.Schema.create.customTags.map (c:\Users\semidefinite\.vscode\extensions\redhat.vscode-yaml-0.0.13\node_modules\yaml-language-server\out\server\src\languageservice\parser\yamlParser.js:198:16)
at Array.map (native)
at Object.parse (c:\Users\semidefinite\.vscode\extensions\redhat.vscode-yaml-0.0.13\node_modules\yaml-language-server\out\server\src\languageservice\parser\yamlParser.js:196:71)
at validateTextDocument (c:\Users\semidefinite\.vscode\extensions\redhat.vscode-yaml-0.0.13\node_modules\yaml-language-server\out\server\src\server.js:338:37)
at Timeout.pendingValidationRequests.(anonymous function).setTimeout [as _onTimeout] (c:\Users\semidefinite\.vscode\extensions\redhat.vscode-yaml-0.0.13\node_modules\yaml-language-server\out\server\src\server.js:327:9)
at ontimeout (timers.js:386:14)
at tryOnTimeout (timers.js:250:5)
at Timer.listOnTimeout (timers.js:214:5)
[Info - 8:46:15 PM] Connection to server got closed. Server will restart.
Inspection of js-yaml\lib\js-yaml\type.js reveals the following definition:
var YAML_NODE_KINDS = [
'scalar',
'sequence',
'mapping'
];
If I replace "!Ref Scalar" with "!Ref scalar" all is well.
Currently vscode-yaml has all the changelog information pertaining to both vscode-yaml and yaml-language-server. We should maintain a changelog in this repo as well as vscode-yaml.
I have a JSON schema generated for Ansible modules to simplify writing of Ansible roles:
"yaml.schemas": {
"/opt/ansible-schemas/": "ansible.json"
}
(you can find the file here https://raw.githubusercontent.com/shaded-enmity/ansible-schema-generator/master/examples/ansible.json and some example Ansible role here https://raw.githubusercontent.com/shaded-enmity/prototype/master/ansible_roles/docker/tasks/main.yml)
The problem is that the completion doesn't really work properly and I'm seeing suggestions that are out of context - for example the state
key under yum
is not suggested at all.
Just wondering what would be the best way to define new schemas using neovim and LanguageClient
For example I have a project using !Sub
(For AWS CloudFormation) but this is not something that all projects share.
From what I can tell, in vscode
, the settings are global.
A solution might be to read from a config file local to the project e.g. .ide-yaml.config
(or whatever better standard).
I'd like to use it with neovim's language-server client. How do I start it? For e.g. rust, I'll just have to provide the path to start it. How do I integrate yaml-language-server?
With kubernetes, it is possible to have multiple resources in one file, separated by ---
.
Currently, if the resources have different apiVersion
, we get the following errors for each apiVersion
:
Matches multiple schemas when only one must validate.
I think the language server should be able to handle this situation.
As far as I can see anyOfMatching is not needed anymore and we can just redirect it to using the normal anyOf function again.
If you happen to be working in a workspace that has a folder/file path that matches one of the schema store json files, it supersedes what is set by the user. I am guessing this is because it comes later in the array.
Can we add a configuration option to not call:
setSchemaStoreSettingsIfNotSet()
I would prefer to not make the HTTP request in the first place.
E.g. If you do autocompletion right after the ":" it will show additionalSecrets, allowed, etc
apiVersion:
since this PR is merged.
E.g. In a case when you have multiple require statements that have the same elements in the same context
required: [
"name",
"age"
]
....
required: [
"name"
]
and a schema so far consists of
name: Josh
Auto completion should autocomplete from both of the fields but currently just autocomplete from the second one because the second one is technically valid as well
I have this in a JSON schema:
"working_directory": {
"description":
"In which directory to run the steps. (default: `~/project`. `project` is a literal string, not the name of the project.) You can also refer the directory with `$CIRCLE_WORKING_DIRECTORY` environment variable.",
"type": "string",
"default": "~/project"
},
Intead of rendering this as markdown, this is what the hover looks like:
This is the hover result:
[Trace - 01:47:59] Received response 'textDocument/hover - (21)' in 3ms.
Result: {
"contents": [
"In which directory to run the steps\\. \\(default: \\`~/project\\`\\. \\`project\\` is a literal string, not the name of the project\\.\\) You can also refer the directory with \\`$CIRCLE\\_WORKING\\_DIRECTORY\\` environment variable\\."
],
"range": {
"start": {
"line": 3,
"character": 4
},
"end": {
"line": 3,
"character": 21
}
}
}
Apparently the language server escapes the markdown
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.