diff --git a/package-lock.json b/package-lock.json index 6ce5d3f..a5692ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "vscode-languageserver": "^7.0.0", "vscode-languageserver-textdocument": "^1.0.3", - "yaml": "^2.0.0-9" + "yaml": "^2.0.0-10" }, "devDependencies": { "@types/chai": "^4.3.0", @@ -2156,9 +2156,9 @@ "dev": true }, "node_modules/yaml": { - "version": "2.0.0-9", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.0.0-9.tgz", - "integrity": "sha512-Bf2KowHjyVkIIiGMt7+fbhmlvKOaE8DWuD07bnL4+FQ9sPmEl/5IzGpBpoxPqOaHuyasBjJhyXDcISpJWfhCGw==", + "version": "2.0.0-10", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.0.0-10.tgz", + "integrity": "sha512-FHV8s5ODFFQXX/enJEU2EkanNl1UDBUz8oa4k5Qo/sR+Iq7VmhCDkRMb0/mjJCNeAWQ31W8WV6PYStDE4d9EIw==", "engines": { "node": ">= 12" } @@ -3738,9 +3738,9 @@ "dev": true }, "yaml": { - "version": "2.0.0-9", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.0.0-9.tgz", - "integrity": "sha512-Bf2KowHjyVkIIiGMt7+fbhmlvKOaE8DWuD07bnL4+FQ9sPmEl/5IzGpBpoxPqOaHuyasBjJhyXDcISpJWfhCGw==" + "version": "2.0.0-10", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.0.0-10.tgz", + "integrity": "sha512-FHV8s5ODFFQXX/enJEU2EkanNl1UDBUz8oa4k5Qo/sR+Iq7VmhCDkRMb0/mjJCNeAWQ31W8WV6PYStDE4d9EIw==" }, "yargs": { "version": "16.2.0", diff --git a/package.json b/package.json index a32342c..da9985f 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,6 @@ "dependencies": { "vscode-languageserver": "^7.0.0", "vscode-languageserver-textdocument": "^1.0.3", - "yaml": "^2.0.0-9" + "yaml": "^2.0.0-10" } } diff --git a/src/service/ComposeDocument.ts b/src/service/ComposeDocument.ts index 615b718..5c389ea 100644 --- a/src/service/ComposeDocument.ts +++ b/src/service/ComposeDocument.ts @@ -5,24 +5,16 @@ import { ErrorCodes, Position, Range, ResponseError, TextDocumentIdentifier, TextDocumentsConfiguration } from 'vscode-languageserver'; import { TextDocument } from 'vscode-languageserver-textdocument'; -import { CST, Document as YamlDocument, Parser, Composer, isDocument } from 'yaml'; +import { Document as YamlDocument, isDocument, parseDocument } from 'yaml'; import { CRLF, DocumentSettings, DocumentSettingsParams, DocumentSettingsRequest, LF } from '../client/DocumentSettings'; import { ExtendedPositionParams, PositionInfo } from './ExtendedParams'; import { getCurrentContext } from './utils/ActionContext'; import { Lazy } from './utils/Lazy'; -const EmptyDocumentCST: CST.Document = { - type: 'document', - offset: 0, - start: [], -}; - // The stated behavior of character number in the `Position` class is to roll back to line length if it exceeds the line length. So, this will work for any line <1m characters. That should cover most of them. const MaximumLineLength = 1000 * 1000; export class ComposeDocument { - public readonly fullCst = new Lazy(() => this.buildFullCst()); - public readonly documentCst = new Lazy(() => this.buildDocumentCst()); public readonly yamlDocument = new Lazy(() => this.buildYamlDocument()); private documentSettings: DocumentSettings | undefined; @@ -45,8 +37,6 @@ export class ComposeDocument { private update(doc: TextDocument): ComposeDocument { this.#textDocument = doc; this.yamlDocument.clear(); - this.documentCst.clear(); - this.fullCst.clear(); return this; } @@ -157,20 +147,8 @@ export class ComposeDocument { update: (document, changes, version) => document.update(TextDocument.update(document.textDocument, changes, version)), }; - private buildFullCst(): CST.Token[] { - return Array.from(new Parser().parse(this.textDocument.getText())); - } - - private buildDocumentCst(): CST.Document { - // The CST can consist of more than just the document - // Get the first `type === 'document'` item out of the list; this is the actual document - // If there isn't one, return `EmptyDocumentCST` - return this.fullCst.value.find(t => t.type === 'document') as CST.Document || EmptyDocumentCST; - } - private buildYamlDocument(): YamlDocument { - const composedTokens = new Composer({ merge: true }).compose(this.fullCst.value, true); - const [yamlDocument] = composedTokens; + const yamlDocument = parseDocument(this.textDocument.getText(), { merge: true, prettyErrors: true }); if (!isDocument(yamlDocument)) { throw new ResponseError(ErrorCodes.ParseError, 'Malformed YAML document'); diff --git a/src/test/providers/DiagnosticProvider.test.ts b/src/test/providers/DiagnosticProvider.test.ts index 17e06d0..a21bfba 100644 --- a/src/test/providers/DiagnosticProvider.test.ts +++ b/src/test/providers/DiagnosticProvider.test.ts @@ -68,7 +68,7 @@ services: }, { range: Range.create(8, 0, 8, 0), - contentCanary: 'sequence to end with ]', + contentCanary: 'and end with a ]', }, ];