Giter Site home page Giter Site logo

yaml-language-server's Issues

Yaml parser as separate NPM module

👋

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?

URI tests fail on Windows

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)

NPM Publishing

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?

Local schema changes are not reflected in real-time

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

Use textDocument.formatting.dynamicRegistration?

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;
	};

Doesn't like AWS CloudFormation templates

I understand the CloudFormation format is a bit non-standard, but it would at least be nice to have an option in this extension to disable syntax-checking. I mostly want it since it adds the YAML structure to the Code Outline extension.

image

Remove snippits

The snippits no longer fit with the theme of the LS. Remove them

Error with formatter in logs

[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.

clientSnippetSupport field in server.ts is unused

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.

let clientSnippetSupport = false;
let clientDynamicRegisterSupport = false;
// After the server has started the client sends an initilize request. The server receives
// in the passed params the rootPath of the workspace plus the client capabilities.
let workspaceRoot: URI;
connection.onInitialize((params: InitializeParams): InitializeResult => {
workspaceRoot = URI.parse(params.rootPath);
function hasClientCapability(...keys: string[]) {
let c = params.capabilities;
for (let i = 0; c && i < keys.length; i++) {
c = c[keys[i]];
}
return !!c;
}
clientSnippetSupport = hasClientCapability('textDocument', 'completion', 'completionItem', 'snippetSupport');
clientDynamicRegisterSupport = hasClientCapability('workspace', 'symbol', 'dynamicRegistration');
return {
capabilities: {
textDocumentSync: documents.syncKind,
completionProvider: { resolveProvider: true },
hoverProvider: true,
documentSymbolProvider: true,
documentFormattingProvider: false
}
};
});

Support for custom yaml tags (e.g. "!include")

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?

completionHelper will break yaml file if it contains \r charactor

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'

Cannot read property getNodeFromOffset of null

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 

[Regression] Cloudformation Support

Originally closed issue in #20 but it looks like Cloudformation support is no longer present.

image

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"
    ]

Diagnostics shouldn't span the entire document

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?

Detect common schemas

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.

Is it possible to support Helm.sh templating in option please?

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,

Incorrect yaml.customTags description in README.md

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.

The validator should support null values

Current yaml validator will report an error for null value when the schema type is string.
image

Actually, null is a valid string type. Similarly, array/object type should support null, too.

Support for large schema files

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.

project-specific config

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).

document how to use it with other editors

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?

Support multiple ressources with different schemas in kubernetes files

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.

Expose Atom edit

I see config options exposed in vscode but not atom

vscode:

image

atom:

?

Provide full autocompletion when there are multiple requires and only one is fullfilled

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

Hovers escape markdown

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:

image

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.