From 05798105c3544680d56e5fe00efc303e6b36637d Mon Sep 17 00:00:00 2001 From: Remco Haszing Date: Mon, 7 Aug 2023 15:53:50 +0200 Subject: [PATCH 01/11] Add volar-service-yaml This provides all features from the YAML language service through Volar. --- packages/yaml/package.json | 29 ++++++ packages/yaml/src/index.ts | 163 ++++++++++++++++++++++++++++++ packages/yaml/tsconfig.build.json | 11 ++ pnpm-lock.yaml | 123 +++++++++++++++++++--- 4 files changed, 313 insertions(+), 13 deletions(-) create mode 100644 packages/yaml/package.json create mode 100644 packages/yaml/src/index.ts create mode 100644 packages/yaml/tsconfig.build.json diff --git a/packages/yaml/package.json b/packages/yaml/package.json new file mode 100644 index 00000000..248c3ecc --- /dev/null +++ b/packages/yaml/package.json @@ -0,0 +1,29 @@ +{ + "name": "volar-service-yaml", + "version": "0.0.11", + "main": "out/index.js", + "license": "MIT", + "files": [ + "out/**/*.js", + "out/**/*.d.ts" + ], + "repository": { + "type": "git", + "url": "https://github.com/volarjs/services.git", + "directory": "packages/json" + }, + "dependencies": { + "yaml-language-server": "1.14.0" + }, + "devDependencies": { + "vscode-languageserver-textdocument": "^1.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~1.10.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } +} diff --git a/packages/yaml/src/index.ts b/packages/yaml/src/index.ts new file mode 100644 index 00000000..b1a7f20f --- /dev/null +++ b/packages/yaml/src/index.ts @@ -0,0 +1,163 @@ +import { type Service } from '@volar/language-service' +import { type TextDocument } from 'vscode-languageserver-textdocument' +import { + getLanguageService, + type LanguageSettings, + type LanguageService +} from 'yaml-language-server' + +export interface Provide { + 'yaml/languageService': () => LanguageService; +} + +function isYaml(document: TextDocument): boolean { + return document.languageId === 'yaml' +} + +function noop(): undefined {} + +/** + * Create a Volar language service for YAML documents. + */ +export function createYamlService( + settings: LanguageSettings +): Service { + return (context) => { + const ls = getLanguageService({ + async schemaRequestService(uri) { + if (uri.startsWith('file:') && context?.env.fs) { + const result = await context?.env.fs.readFile(uri); + if (result) { + return result; + } + + throw new Error(`No such file: ${uri}`); + } + + // @ts-expect-error This exists as an experimental API in Node 16. + const response = await fetch(uri); + if (response.ok) { + return response.text(); + } + + throw new Error(await response.text()); + }, + telemetry: { + send: noop, + sendError: noop, + sendTrack: noop + }, + // @ts-expect-error https://github.com/redhat-developer/yaml-language-server/pull/910 + clientCapabilities: context?.env?.clientCapabilities, + workspaceContext: { + resolveRelativePath(relativePath, resource) { + return String(new URL(relativePath, resource)); + } + } + }); + + ls.configure({ + completion: true, + customTags: [], + format: true, + hover: true, + isKubernetes: false, + validate: true, + yamlVersion: '1.2', + ...settings + }); + + return { + provide: { + 'yaml/languageService': () => ls + }, + + triggerCharacters: [' ', ':'], + + provideCodeActions(document, range, context) { + if (isYaml(document)) { + return ls.getCodeAction(document, { + context, + range, + textDocument: document + }); + } + }, + + provideCodeLenses(document) { + if (isYaml(document)) { + return ls.getCodeLens(document); + } + }, + + provideCompletionItems(document, position) { + if (isYaml(document)) { + return ls.doComplete(document, position, false); + } + }, + + provideDefinition(document, position) { + if (isYaml(document)) { + return ls.doDefinition(document, {position, textDocument: document}); + } + }, + + provideDiagnostics(document) { + if (isYaml(document)) { + return ls.doValidation(document, false); + } + }, + + provideDocumentSymbols(document) { + if (isYaml(document)) { + return ls.findDocumentSymbols2(document, {}); + } + }, + + provideHover(document, position) { + if (isYaml(document)) { + return ls.doHover(document, position); + } + }, + + provideDocumentLinks(document) { + if (isYaml(document)) { + return ls.findLinks(document); + } + }, + + provideFoldingRanges(document) { + if (isYaml(document)) { + return ls.getFoldingRanges(document, {}); + } + }, + + provideOnTypeFormattingEdits(document, position, ch, options) { + if (isYaml(document)) { + return ls.doDocumentOnTypeFormatting(document, { + ch, + options, + position, + textDocument: document + }); + } + }, + + provideDocumentFormattingEdits(document) { + if (isYaml(document)) { + return ls.doFormat(document, {}); + } + }, + + provideSelectionRanges(document, positions) { + if (isYaml(document)) { + return ls.getSelectionRanges(document, positions); + } + }, + + resolveCodeLens(codeLens) { + return ls.resolveCodeLens(codeLens); + } + } + } +} diff --git a/packages/yaml/tsconfig.build.json b/packages/yaml/tsconfig.build.json new file mode 100644 index 00000000..bebd3ba6 --- /dev/null +++ b/packages/yaml/tsconfig.build.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "outDir": "out", + "rootDir": "src", + }, + "include": [ + "src", + ], +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 37994e7e..9fdba46b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,9 +1,5 @@ lockfileVersion: '6.0' -settings: - autoInstallPeers: false - excludeLinksFromLockfile: false - importers: .: @@ -16,7 +12,7 @@ importers: version: 2.5.0 '@types/node': specifier: latest - version: 20.4.5 + version: 20.4.8 '@volar/language-service': specifier: latest version: 1.10.0 @@ -56,7 +52,7 @@ importers: devDependencies: '@types/eslint': specifier: latest - version: 8.44.1 + version: 8.44.2 packages/html: dependencies: @@ -199,6 +195,16 @@ importers: specifier: ^5.0.4 version: 5.0.6 + packages/yaml: + dependencies: + yaml-language-server: + specifier: 1.14.0 + version: 1.14.0 + devDependencies: + vscode-languageserver-textdocument: + specifier: ^1.0.8 + version: 1.0.8 + packages: /@aashutoshrathi/word-wrap@1.2.6: @@ -952,8 +958,8 @@ packages: minimatch: 9.0.2 dev: true - /@types/eslint@8.44.1: - resolution: {integrity: sha512-XpNDc4Z5Tb4x+SW1MriMVeIsMoONHCkWFMkR/aPJbzEsxqHy+4Glu/BqTdPrApfDeMaXbtNh6bseNgl5KaWrSg==} + /@types/eslint@8.44.2: + resolution: {integrity: sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==} dependencies: '@types/estree': 1.0.1 '@types/json-schema': 7.0.12 @@ -970,15 +976,15 @@ packages: /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 20.4.5 + '@types/node': 20.4.8 dev: false /@types/minimist@1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true - /@types/node@20.4.5: - resolution: {integrity: sha512-rt40Nk13II9JwQBdeYqmbn2Q6IVTA5uPhvSO+JVqdXw/6/4glI6oR9ezty/A9Hg5u7JH4OmYmuQ+XvjKm0Datg==} + /@types/node@20.4.8: + resolution: {integrity: sha512-0mHckf6D2DiIAzh8fM8f3HQCvMKDpK94YQ0DSVkfWTG9BZleYIWudw9cJxX8oCk9bM+vAkDyujDV6dmKHbvQpg==} /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -987,7 +993,7 @@ packages: /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: - '@types/node': 20.4.5 + '@types/node': 20.4.8 dev: false /@types/semver@7.5.0: @@ -1008,7 +1014,7 @@ packages: /@types/vfile@3.0.2: resolution: {integrity: sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==} dependencies: - '@types/node': 20.4.5 + '@types/node': 20.4.8 '@types/unist': 2.0.6 '@types/vfile-message': 2.0.0 dev: false @@ -1141,6 +1147,15 @@ packages: uri-js: 4.4.1 dev: false + /ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: false + /ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} dependencies: @@ -3017,6 +3032,10 @@ packages: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: false + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: false + /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: false @@ -4051,6 +4070,14 @@ packages: hasBin: true dev: false + /prettier@2.8.7: + resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==} + engines: {node: '>=10.13.0'} + hasBin: true + requiresBuild: true + dev: false + optional: true + /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} @@ -4319,11 +4346,20 @@ packages: engines: {node: '>= 0.10'} dev: false + /request-light@0.5.8: + resolution: {integrity: sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==} + dev: false + /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} dev: true + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: false + /resolve-cwd@3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} @@ -5313,6 +5349,17 @@ packages: vscode-uri: 3.0.7 dev: false + /vscode-json-languageservice@4.1.8: + resolution: {integrity: sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==} + engines: {npm: '>=7.0.0'} + dependencies: + jsonc-parser: 3.2.0 + vscode-languageserver-textdocument: 1.0.8 + vscode-languageserver-types: 3.17.3 + vscode-nls: 5.2.0 + vscode-uri: 3.0.7 + dev: false + /vscode-json-languageservice@5.3.5: resolution: {integrity: sha512-DasT+bKtpaS2rTPEB4VMROnvO1WES2KD8RZZxXbumnk9sk5wco10VdB6sJgTlsKQN14tHQLZDXuHnSoSAlE8LQ==} dependencies: @@ -5323,10 +5370,22 @@ packages: vscode-uri: 3.0.7 dev: false + /vscode-jsonrpc@6.0.0: + resolution: {integrity: sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==} + engines: {node: '>=8.0.0 || >=10.0.0'} + dev: false + /vscode-jsonrpc@8.1.0: resolution: {integrity: sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==} engines: {node: '>=14.0.0'} + /vscode-languageserver-protocol@3.16.0: + resolution: {integrity: sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==} + dependencies: + vscode-jsonrpc: 6.0.0 + vscode-languageserver-types: 3.16.0 + dev: false + /vscode-languageserver-protocol@3.17.3: resolution: {integrity: sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==} dependencies: @@ -5336,9 +5395,20 @@ packages: /vscode-languageserver-textdocument@1.0.8: resolution: {integrity: sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==} + /vscode-languageserver-types@3.16.0: + resolution: {integrity: sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==} + dev: false + /vscode-languageserver-types@3.17.3: resolution: {integrity: sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==} + /vscode-languageserver@7.0.0: + resolution: {integrity: sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==} + hasBin: true + dependencies: + vscode-languageserver-protocol: 3.16.0 + dev: false + /vscode-nls@5.2.0: resolution: {integrity: sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==} dev: false @@ -5541,6 +5611,29 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + /yaml-language-server@1.14.0: + resolution: {integrity: sha512-HnNiHM5AOTXuM8ZpubzqgTy+7V5kFiMXVedOT2yjhvnxCw6pbMXcD/ymHaaT5v2ue0H8GGH4NFkvCEzcIcTJDg==} + hasBin: true + dependencies: + ajv: 8.12.0 + lodash: 4.17.21 + request-light: 0.5.8 + vscode-json-languageservice: 4.1.8 + vscode-languageserver: 7.0.0 + vscode-languageserver-textdocument: 1.0.8 + vscode-languageserver-types: 3.17.3 + vscode-nls: 5.2.0 + vscode-uri: 3.0.7 + yaml: 2.2.2 + optionalDependencies: + prettier: 2.8.7 + dev: false + + /yaml@2.2.2: + resolution: {integrity: sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==} + engines: {node: '>= 14'} + dev: false + /yargs-parser@10.1.0: resolution: {integrity: sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==} dependencies: @@ -5587,3 +5680,7 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: false + +settings: + autoInstallPeers: false + excludeLinksFromLockfile: false From b8001cb82b62d14e8253d047b92bec3be37275d0 Mon Sep 17 00:00:00 2001 From: Remco Haszing Date: Mon, 7 Aug 2023 16:03:28 +0200 Subject: [PATCH 02/11] Add yaml to readme --- readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/readme.md b/readme.md index d03906a6..aa83e0b8 100644 --- a/readme.md +++ b/readme.md @@ -18,3 +18,4 @@ | typescript | [TypeScript](https://github.com/microsoft/TypeScript) | ✅ | ✅ | ✅ | ✅ | | typescript-twoslash-queries | [vscode-twoslash-queries](https://github.com/orta/vscode-twoslash-queries) | | ✅ | | | | vetur | [vls](https://github.com/vuejs/vetur) | | ✅ | | | +| yaml | [yamml-language-server](https://github.com/redhat-developer/yaml-language-server) | | ✅ | ✅ | ✅ | From dff8d960c669f5dc02263468750ade3f4aa55d66 Mon Sep 17 00:00:00 2001 From: Remco Haszing Date: Fri, 18 Aug 2023 12:51:53 +0200 Subject: [PATCH 03/11] Pick yaml language service from nested dependency This provides better tree shaking and fewer quirks when bundling. --- packages/yaml/src/index.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/yaml/src/index.ts b/packages/yaml/src/index.ts index b1a7f20f..a14ce738 100644 --- a/packages/yaml/src/index.ts +++ b/packages/yaml/src/index.ts @@ -1,10 +1,7 @@ import { type Service } from '@volar/language-service' import { type TextDocument } from 'vscode-languageserver-textdocument' -import { - getLanguageService, - type LanguageSettings, - type LanguageService -} from 'yaml-language-server' +import { type LanguageSettings, type LanguageService } from 'yaml-language-server' +import { getLanguageService } from 'yaml-language-server/lib/umd/languageservice/yamlLanguageService.js' export interface Provide { 'yaml/languageService': () => LanguageService; From f931d2b18ceadd46a18d1fed318839c47ef171af Mon Sep 17 00:00:00 2001 From: Remco Haszing Date: Thu, 24 Aug 2023 11:41:16 +0200 Subject: [PATCH 04/11] Update packages/yaml/package.json Co-authored-by: Erika <3019731+Princesseuh@users.noreply.github.com> --- packages/yaml/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yaml/package.json b/packages/yaml/package.json index 248c3ecc..1eb729db 100644 --- a/packages/yaml/package.json +++ b/packages/yaml/package.json @@ -10,7 +10,7 @@ "repository": { "type": "git", "url": "https://github.com/volarjs/services.git", - "directory": "packages/json" + "directory": "packages/yaml" }, "dependencies": { "yaml-language-server": "1.14.0" From c26ba8616874b92d4d4b68191ec5fb0f0ed6ffba Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Fri, 1 Sep 2023 21:00:03 +0800 Subject: [PATCH 05/11] chore: format --- packages/yaml/src/index.ts | 288 ++++++++++++++++++------------------- 1 file changed, 144 insertions(+), 144 deletions(-) diff --git a/packages/yaml/src/index.ts b/packages/yaml/src/index.ts index a14ce738..81c81d88 100644 --- a/packages/yaml/src/index.ts +++ b/packages/yaml/src/index.ts @@ -1,160 +1,160 @@ -import { type Service } from '@volar/language-service' -import { type TextDocument } from 'vscode-languageserver-textdocument' -import { type LanguageSettings, type LanguageService } from 'yaml-language-server' -import { getLanguageService } from 'yaml-language-server/lib/umd/languageservice/yamlLanguageService.js' +import { type Service } from '@volar/language-service'; +import { type TextDocument } from 'vscode-languageserver-textdocument'; +import { type LanguageSettings, type LanguageService } from 'yaml-language-server'; +import { getLanguageService } from 'yaml-language-server/lib/umd/languageservice/yamlLanguageService.js'; export interface Provide { - 'yaml/languageService': () => LanguageService; + 'yaml/languageService': () => LanguageService; } function isYaml(document: TextDocument): boolean { - return document.languageId === 'yaml' + return document.languageId === 'yaml'; } -function noop(): undefined {} +function noop(): undefined { } /** * Create a Volar language service for YAML documents. */ export function createYamlService( - settings: LanguageSettings + settings: LanguageSettings ): Service { - return (context) => { - const ls = getLanguageService({ - async schemaRequestService(uri) { - if (uri.startsWith('file:') && context?.env.fs) { - const result = await context?.env.fs.readFile(uri); - if (result) { - return result; - } - - throw new Error(`No such file: ${uri}`); - } + return (context) => { + const ls = getLanguageService({ + async schemaRequestService(uri) { + if (uri.startsWith('file:') && context?.env.fs) { + const result = await context?.env.fs.readFile(uri); + if (result) { + return result; + } + + throw new Error(`No such file: ${uri}`); + } // @ts-expect-error This exists as an experimental API in Node 16. - const response = await fetch(uri); - if (response.ok) { - return response.text(); - } - - throw new Error(await response.text()); - }, - telemetry: { - send: noop, - sendError: noop, - sendTrack: noop - }, - // @ts-expect-error https://github.com/redhat-developer/yaml-language-server/pull/910 - clientCapabilities: context?.env?.clientCapabilities, - workspaceContext: { - resolveRelativePath(relativePath, resource) { - return String(new URL(relativePath, resource)); - } - } - }); - - ls.configure({ - completion: true, - customTags: [], - format: true, - hover: true, - isKubernetes: false, - validate: true, - yamlVersion: '1.2', - ...settings - }); - - return { - provide: { - 'yaml/languageService': () => ls - }, - - triggerCharacters: [' ', ':'], - - provideCodeActions(document, range, context) { - if (isYaml(document)) { - return ls.getCodeAction(document, { - context, - range, - textDocument: document - }); - } - }, - - provideCodeLenses(document) { - if (isYaml(document)) { - return ls.getCodeLens(document); - } - }, - - provideCompletionItems(document, position) { - if (isYaml(document)) { - return ls.doComplete(document, position, false); - } - }, - - provideDefinition(document, position) { - if (isYaml(document)) { - return ls.doDefinition(document, {position, textDocument: document}); - } - }, - - provideDiagnostics(document) { - if (isYaml(document)) { - return ls.doValidation(document, false); - } - }, - - provideDocumentSymbols(document) { - if (isYaml(document)) { - return ls.findDocumentSymbols2(document, {}); - } - }, - - provideHover(document, position) { - if (isYaml(document)) { - return ls.doHover(document, position); - } - }, - - provideDocumentLinks(document) { - if (isYaml(document)) { - return ls.findLinks(document); - } - }, - - provideFoldingRanges(document) { - if (isYaml(document)) { - return ls.getFoldingRanges(document, {}); - } - }, - - provideOnTypeFormattingEdits(document, position, ch, options) { - if (isYaml(document)) { - return ls.doDocumentOnTypeFormatting(document, { - ch, - options, - position, - textDocument: document - }); - } - }, - - provideDocumentFormattingEdits(document) { - if (isYaml(document)) { - return ls.doFormat(document, {}); - } - }, - - provideSelectionRanges(document, positions) { - if (isYaml(document)) { - return ls.getSelectionRanges(document, positions); - } - }, - - resolveCodeLens(codeLens) { - return ls.resolveCodeLens(codeLens); - } - } - } + const response = await fetch(uri); + if (response.ok) { + return response.text(); + } + + throw new Error(await response.text()); + }, + telemetry: { + send: noop, + sendError: noop, + sendTrack: noop + }, + // @ts-expect-error https://github.com/redhat-developer/yaml-language-server/pull/910 + clientCapabilities: context?.env?.clientCapabilities, + workspaceContext: { + resolveRelativePath(relativePath, resource) { + return String(new URL(relativePath, resource)); + } + } + }); + + ls.configure({ + completion: true, + customTags: [], + format: true, + hover: true, + isKubernetes: false, + validate: true, + yamlVersion: '1.2', + ...settings + }); + + return { + provide: { + 'yaml/languageService': () => ls + }, + + triggerCharacters: [' ', ':'], + + provideCodeActions(document, range, context) { + if (isYaml(document)) { + return ls.getCodeAction(document, { + context, + range, + textDocument: document + }); + } + }, + + provideCodeLenses(document) { + if (isYaml(document)) { + return ls.getCodeLens(document); + } + }, + + provideCompletionItems(document, position) { + if (isYaml(document)) { + return ls.doComplete(document, position, false); + } + }, + + provideDefinition(document, position) { + if (isYaml(document)) { + return ls.doDefinition(document, { position, textDocument: document }); + } + }, + + provideDiagnostics(document) { + if (isYaml(document)) { + return ls.doValidation(document, false); + } + }, + + provideDocumentSymbols(document) { + if (isYaml(document)) { + return ls.findDocumentSymbols2(document, {}); + } + }, + + provideHover(document, position) { + if (isYaml(document)) { + return ls.doHover(document, position); + } + }, + + provideDocumentLinks(document) { + if (isYaml(document)) { + return ls.findLinks(document); + } + }, + + provideFoldingRanges(document) { + if (isYaml(document)) { + return ls.getFoldingRanges(document, {}); + } + }, + + provideOnTypeFormattingEdits(document, position, ch, options) { + if (isYaml(document)) { + return ls.doDocumentOnTypeFormatting(document, { + ch, + options, + position, + textDocument: document + }); + } + }, + + provideDocumentFormattingEdits(document) { + if (isYaml(document)) { + return ls.doFormat(document, {}); + } + }, + + provideSelectionRanges(document, positions) { + if (isYaml(document)) { + return ls.getSelectionRanges(document, positions); + } + }, + + resolveCodeLens(codeLens) { + return ls.resolveCodeLens(codeLens); + } + }; + }; } From 36708f06f1c34f6cf37edd157669cfad9e892fed Mon Sep 17 00:00:00 2001 From: Remco Haszing Date: Fri, 1 Sep 2023 15:43:02 +0200 Subject: [PATCH 06/11] Remove yaml formatting provider --- packages/yaml/src/index.ts | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/packages/yaml/src/index.ts b/packages/yaml/src/index.ts index 81c81d88..62db0183 100644 --- a/packages/yaml/src/index.ts +++ b/packages/yaml/src/index.ts @@ -129,23 +129,6 @@ export function createYamlService( } }, - provideOnTypeFormattingEdits(document, position, ch, options) { - if (isYaml(document)) { - return ls.doDocumentOnTypeFormatting(document, { - ch, - options, - position, - textDocument: document - }); - } - }, - - provideDocumentFormattingEdits(document) { - if (isYaml(document)) { - return ls.doFormat(document, {}); - } - }, - provideSelectionRanges(document, positions) { if (isYaml(document)) { return ls.getSelectionRanges(document, positions); From de0c50e0219e21c53c6877a8e8065019ac8fff3f Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Fri, 1 Sep 2023 21:47:58 +0800 Subject: [PATCH 07/11] fix: triggerCharacters missing for language server register --- packages/yaml/src/index.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/yaml/src/index.ts b/packages/yaml/src/index.ts index 62db0183..22a7f118 100644 --- a/packages/yaml/src/index.ts +++ b/packages/yaml/src/index.ts @@ -20,6 +20,14 @@ export function createYamlService( settings: LanguageSettings ): Service { return (context) => { + + if (!context) { + // support for register + return { + triggerCharacters: [' ', ':'] + }; + } + const ls = getLanguageService({ async schemaRequestService(uri) { if (uri.startsWith('file:') && context?.env.fs) { From 1d497070877df47a4e4aea8998602cee5820f081 Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Sun, 3 Sep 2023 13:33:32 +0800 Subject: [PATCH 08/11] chore: use export default --- packages/yaml/src/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/yaml/src/index.ts b/packages/yaml/src/index.ts index 22a7f118..67822609 100644 --- a/packages/yaml/src/index.ts +++ b/packages/yaml/src/index.ts @@ -16,9 +16,9 @@ function noop(): undefined { } /** * Create a Volar language service for YAML documents. */ -export function createYamlService( +export default ( settings: LanguageSettings -): Service { +): Service => { return (context) => { if (!context) { From 51d529cbc3fbe73af69d1163f83603565b0c3bf8 Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Sun, 3 Sep 2023 13:36:56 +0800 Subject: [PATCH 09/11] chore: format --- packages/yaml/src/index.ts | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/packages/yaml/src/index.ts b/packages/yaml/src/index.ts index 67822609..f3b7478b 100644 --- a/packages/yaml/src/index.ts +++ b/packages/yaml/src/index.ts @@ -16,16 +16,11 @@ function noop(): undefined { } /** * Create a Volar language service for YAML documents. */ -export default ( - settings: LanguageSettings -): Service => { - return (context) => { +export default (settings: LanguageSettings): Service => { + return (context): ReturnType> => { if (!context) { - // support for register - return { - triggerCharacters: [' ', ':'] - }; + return { triggerCharacters: [' ', ':'] } as any; } const ls = getLanguageService({ From 95c171a96eb794ef18dcca7f603b39a315e15a68 Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Sun, 3 Sep 2023 13:43:28 +0800 Subject: [PATCH 10/11] chore: simplify schemaRequestService --- packages/yaml/src/index.ts | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/packages/yaml/src/index.ts b/packages/yaml/src/index.ts index f3b7478b..922627fb 100644 --- a/packages/yaml/src/index.ts +++ b/packages/yaml/src/index.ts @@ -24,24 +24,7 @@ export default (settings: LanguageSettings): Service => { } const ls = getLanguageService({ - async schemaRequestService(uri) { - if (uri.startsWith('file:') && context?.env.fs) { - const result = await context?.env.fs.readFile(uri); - if (result) { - return result; - } - - throw new Error(`No such file: ${uri}`); - } - - // @ts-expect-error This exists as an experimental API in Node 16. - const response = await fetch(uri); - if (response.ok) { - return response.text(); - } - - throw new Error(await response.text()); - }, + schemaRequestService: async (uri) => await context.env.fs?.readFile(uri) ?? '', telemetry: { send: noop, sendError: noop, @@ -53,7 +36,7 @@ export default (settings: LanguageSettings): Service => { resolveRelativePath(relativePath, resource) { return String(new URL(relativePath, resource)); } - } + }, }); ls.configure({ @@ -140,7 +123,7 @@ export default (settings: LanguageSettings): Service => { resolveCodeLens(codeLens) { return ls.resolveCodeLens(codeLens); - } + }, }; }; } From 55f62b807a946cecbb58998e5cd5ab33e28d110f Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Sun, 3 Sep 2023 13:56:46 +0800 Subject: [PATCH 11/11] chore: unused umd path for now --- packages/yaml/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yaml/src/index.ts b/packages/yaml/src/index.ts index 922627fb..14e90175 100644 --- a/packages/yaml/src/index.ts +++ b/packages/yaml/src/index.ts @@ -1,7 +1,7 @@ import { type Service } from '@volar/language-service'; import { type TextDocument } from 'vscode-languageserver-textdocument'; import { type LanguageSettings, type LanguageService } from 'yaml-language-server'; -import { getLanguageService } from 'yaml-language-server/lib/umd/languageservice/yamlLanguageService.js'; +import { getLanguageService } from 'yaml-language-server'; export interface Provide { 'yaml/languageService': () => LanguageService;