From dca8308d66ecd6b713420b461a5a7f6ed2e0920a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Thu, 1 Sep 2022 18:16:19 +0100 Subject: [PATCH 1/4] Use in-process language server --- src/extension.ts | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 4eea09e9..7d392d3e 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,28 +1,15 @@ -import path from 'path' +import { newWasmServer } from '@cucumber/language-server' import vscode from 'vscode' -import { - LanguageClient, - LanguageClientOptions, - ServerOptions, - TransportKind, -} from 'vscode-languageclient/node' +import { LanguageClient, LanguageClientOptions, ServerOptions } from 'vscode-languageclient/node' let client: LanguageClient // this method is called when your extension is activated // your extension is activated the very first time the command is executed export async function activate(context: vscode.ExtensionContext) { - const serverModule = context.asAbsolutePath(path.join('out', 'cucumber-language-server.js')) - const debugOptions = { execArgv: ['--nolazy', '--inspect=6009'] } - - const serverOptions: ServerOptions = { - run: { module: serverModule, transport: TransportKind.ipc }, - debug: { - module: serverModule, - transport: TransportKind.ipc, - options: debugOptions, - }, - } + // const serverModule = context.asAbsolutePath(path.join('out', 'cucumber-language-server.js')) + // const serverOptions: ServerOptions = { module: serverModule, transport: TransportKind.ipc } + const serverOptions: ServerOptions = async () => newWasmServer(__dirname) const clientOptions: LanguageClientOptions = { // We need to list all supported languages here so that From 7c8c58f67e18c668fb45b5e4ea5680346a32be6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Thu, 8 Sep 2022 14:43:59 +0100 Subject: [PATCH 2/4] Start implementing Files API using VSCode APIs --- src/VscodeFiles.ts | 37 +++++++++++++++++++++++++++++++++++++ src/extension.ts | 4 +++- 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 src/VscodeFiles.ts diff --git a/src/VscodeFiles.ts b/src/VscodeFiles.ts new file mode 100644 index 00000000..940e52e9 --- /dev/null +++ b/src/VscodeFiles.ts @@ -0,0 +1,37 @@ +import { Files } from '@cucumber/language-server' +import { FileSystemProvider, Uri, workspace } from 'vscode' + +export class VscodeFiles implements Files { + constructor(private readonly rootUri: string, private readonly provider: FileSystemProvider) {} + + async exists(uri: string): Promise { + try { + await this.provider.stat(Uri.parse(uri)) + return true + } catch { + return false + } + } + + async findFiles(cwd: string, glob: string): Promise { + const files = await workspace.findFiles(glob) + return files.map((file) => file.path) + } + + join(...paths: string[]): string { + return Uri.joinPath(Uri.parse(this.rootUri), ...paths).path + } + + async readFile(path: string): Promise { + const data = await this.provider.readFile(Uri.parse(path)) + return new TextDecoder().decode(data) + } + + relative(uri: string): string { + return uri + } + + toUri(path: string): string { + return path + } +} diff --git a/src/extension.ts b/src/extension.ts index 7d392d3e..2dd206c8 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,6 +1,7 @@ import { newWasmServer } from '@cucumber/language-server' import vscode from 'vscode' import { LanguageClient, LanguageClientOptions, ServerOptions } from 'vscode-languageclient/node' +import { VscodeFiles } from './VscodeFiles' let client: LanguageClient @@ -9,7 +10,8 @@ let client: LanguageClient export async function activate(context: vscode.ExtensionContext) { // const serverModule = context.asAbsolutePath(path.join('out', 'cucumber-language-server.js')) // const serverOptions: ServerOptions = { module: serverModule, transport: TransportKind.ipc } - const serverOptions: ServerOptions = async () => newWasmServer(__dirname) + const makeFiles = (rootUri: string) => new VscodeFiles(rootUri, null) + const serverOptions: ServerOptions = async () => newWasmServer(__dirname, makeFiles) const clientOptions: LanguageClientOptions = { // We need to list all supported languages here so that From ef4b6f4671a71ddee319b59965ab66dd4817f2bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Tue, 13 Sep 2022 07:15:32 +0100 Subject: [PATCH 3/4] Fix VscodeFiles --- package-lock.json | 178 ++++++++++++++++---------------- package.json | 6 +- src/VscodeFiles.ts | 28 ++--- src/cucumber-language-server.ts | 3 +- src/extension.ts | 10 +- 5 files changed, 109 insertions(+), 116 deletions(-) diff --git a/package-lock.json b/package-lock.json index eabbf4c5..6cd48a2e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,15 +8,15 @@ "name": "cucumber-official", "version": "1.3.0", "dependencies": { - "@cucumber/language-server": "0.12.14", + "@cucumber/language-server": "0.13.1", "vscode-languageclient": "8.0.2" }, "devDependencies": { "@types/glob": "8.0.0", "@types/mocha": "9.1.1", "@types/vscode": "1.69.0", - "@typescript-eslint/eslint-plugin": "5.36.2", - "@typescript-eslint/parser": "5.36.2", + "@typescript-eslint/eslint-plugin": "5.37.0", + "@typescript-eslint/parser": "5.37.0", "esbuild": "0.15.7", "eslint": "8.23.1", "eslint-config-prettier": "8.5.0", @@ -67,9 +67,9 @@ } }, "node_modules/@cucumber/language-server": { - "version": "0.12.14", - "resolved": "https://registry.npmjs.org/@cucumber/language-server/-/language-server-0.12.14.tgz", - "integrity": "sha512-pUROWt3LNzeUFlglVI3gVQOkVQa5+u9sholkXJBDIu3gIobGJz6xKT98DP57HGC3JWFCMMOXnkiUGV2dUgYrtg==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@cucumber/language-server/-/language-server-0.13.1.tgz", + "integrity": "sha512-MHAngzL7LRQbanfmTMxlce2z/1nKJSM7p2Jhxc2iQaFDsL+159DOm4nVtXl+D2j8X/XKqcXlmcCupF3nBEvtzg==", "dependencies": { "@cucumber/gherkin-utils": "^8.0.0", "@cucumber/language-service": "^0.33.0", @@ -514,14 +514,14 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.36.2.tgz", - "integrity": "sha512-OwwR8LRwSnI98tdc2z7mJYgY60gf7I9ZfGjN5EjCwwns9bdTuQfAXcsjSB2wSQ/TVNYSGKf4kzVXbNGaZvwiXw==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.37.0.tgz", + "integrity": "sha512-Fde6W0IafXktz1UlnhGkrrmnnGpAo1kyX7dnyHHVrmwJOn72Oqm3eYtddrpOwwel2W8PAK9F3pIL5S+lfoM0og==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.36.2", - "@typescript-eslint/type-utils": "5.36.2", - "@typescript-eslint/utils": "5.36.2", + "@typescript-eslint/scope-manager": "5.37.0", + "@typescript-eslint/type-utils": "5.37.0", + "@typescript-eslint/utils": "5.37.0", "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", @@ -547,14 +547,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.36.2.tgz", - "integrity": "sha512-qS/Kb0yzy8sR0idFspI9Z6+t7mqk/oRjnAYfewG+VN73opAUvmYL3oPIMmgOX6CnQS6gmVIXGshlb5RY/R22pA==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.37.0.tgz", + "integrity": "sha512-01VzI/ipYKuaG5PkE5+qyJ6m02fVALmMPY3Qq5BHflDx3y4VobbLdHQkSMg9VPRS4KdNt4oYTMaomFoHonBGAw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.36.2", - "@typescript-eslint/types": "5.36.2", - "@typescript-eslint/typescript-estree": "5.36.2", + "@typescript-eslint/scope-manager": "5.37.0", + "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/typescript-estree": "5.37.0", "debug": "^4.3.4" }, "engines": { @@ -574,13 +574,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.36.2.tgz", - "integrity": "sha512-cNNP51L8SkIFSfce8B1NSUBTJTu2Ts4nWeWbFrdaqjmn9yKrAaJUBHkyTZc0cL06OFHpb+JZq5AUHROS398Orw==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.37.0.tgz", + "integrity": "sha512-F67MqrmSXGd/eZnujjtkPgBQzgespu/iCZ+54Ok9X5tALb9L2v3G+QBSoWkXG0p3lcTJsL+iXz5eLUEdSiJU9Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.36.2", - "@typescript-eslint/visitor-keys": "5.36.2" + "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/visitor-keys": "5.37.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -591,13 +591,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.36.2.tgz", - "integrity": "sha512-rPQtS5rfijUWLouhy6UmyNquKDPhQjKsaKH0WnY6hl/07lasj8gPaH2UD8xWkePn6SC+jW2i9c2DZVDnL+Dokw==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.37.0.tgz", + "integrity": "sha512-BSx/O0Z0SXOF5tY0bNTBcDEKz2Ec20GVYvq/H/XNKiUorUFilH7NPbFUuiiyzWaSdN3PA8JV0OvYx0gH/5aFAQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.36.2", - "@typescript-eslint/utils": "5.36.2", + "@typescript-eslint/typescript-estree": "5.37.0", + "@typescript-eslint/utils": "5.37.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -618,9 +618,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.36.2.tgz", - "integrity": "sha512-9OJSvvwuF1L5eS2EQgFUbECb99F0mwq501w0H0EkYULkhFa19Qq7WFbycdw1PexAc929asupbZcgjVIe6OK/XQ==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz", + "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -631,13 +631,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.36.2.tgz", - "integrity": "sha512-8fyH+RfbKc0mTspfuEjlfqA4YywcwQK2Amcf6TDOwaRLg7Vwdu4bZzyvBZp4bjt1RRjQ5MDnOZahxMrt2l5v9w==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz", + "integrity": "sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.36.2", - "@typescript-eslint/visitor-keys": "5.36.2", + "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/visitor-keys": "5.37.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -658,15 +658,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.36.2.tgz", - "integrity": "sha512-uNcopWonEITX96v9pefk9DC1bWMdkweeSsewJ6GeC7L6j2t0SJywisgkr9wUTtXk90fi2Eljj90HSHm3OGdGRg==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.37.0.tgz", + "integrity": "sha512-jUEJoQrWbZhmikbcWSMDuUSxEE7ID2W/QCV/uz10WtQqfOuKZUqFGjqLJ+qhDd17rjgp+QJPqTdPIBWwoob2NQ==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.36.2", - "@typescript-eslint/types": "5.36.2", - "@typescript-eslint/typescript-estree": "5.36.2", + "@typescript-eslint/scope-manager": "5.37.0", + "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/typescript-estree": "5.37.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -682,12 +682,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.36.2.tgz", - "integrity": "sha512-BtRvSR6dEdrNt7Net2/XDjbYKU5Ml6GqJgVfXT0CxTCJlnIqK7rAGreuWKMT2t8cFUT2Msv5oxw0GMRD7T5J7A==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz", + "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.36.2", + "@typescript-eslint/types": "5.37.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -8419,9 +8419,9 @@ } }, "@cucumber/language-server": { - "version": "0.12.14", - "resolved": "https://registry.npmjs.org/@cucumber/language-server/-/language-server-0.12.14.tgz", - "integrity": "sha512-pUROWt3LNzeUFlglVI3gVQOkVQa5+u9sholkXJBDIu3gIobGJz6xKT98DP57HGC3JWFCMMOXnkiUGV2dUgYrtg==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@cucumber/language-server/-/language-server-0.13.1.tgz", + "integrity": "sha512-MHAngzL7LRQbanfmTMxlce2z/1nKJSM7p2Jhxc2iQaFDsL+159DOm4nVtXl+D2j8X/XKqcXlmcCupF3nBEvtzg==", "requires": { "@cucumber/gherkin-utils": "^8.0.0", "@cucumber/language-service": "^0.33.0", @@ -8775,14 +8775,14 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.36.2.tgz", - "integrity": "sha512-OwwR8LRwSnI98tdc2z7mJYgY60gf7I9ZfGjN5EjCwwns9bdTuQfAXcsjSB2wSQ/TVNYSGKf4kzVXbNGaZvwiXw==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.37.0.tgz", + "integrity": "sha512-Fde6W0IafXktz1UlnhGkrrmnnGpAo1kyX7dnyHHVrmwJOn72Oqm3eYtddrpOwwel2W8PAK9F3pIL5S+lfoM0og==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.36.2", - "@typescript-eslint/type-utils": "5.36.2", - "@typescript-eslint/utils": "5.36.2", + "@typescript-eslint/scope-manager": "5.37.0", + "@typescript-eslint/type-utils": "5.37.0", + "@typescript-eslint/utils": "5.37.0", "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", @@ -8792,53 +8792,53 @@ } }, "@typescript-eslint/parser": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.36.2.tgz", - "integrity": "sha512-qS/Kb0yzy8sR0idFspI9Z6+t7mqk/oRjnAYfewG+VN73opAUvmYL3oPIMmgOX6CnQS6gmVIXGshlb5RY/R22pA==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.37.0.tgz", + "integrity": "sha512-01VzI/ipYKuaG5PkE5+qyJ6m02fVALmMPY3Qq5BHflDx3y4VobbLdHQkSMg9VPRS4KdNt4oYTMaomFoHonBGAw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.36.2", - "@typescript-eslint/types": "5.36.2", - "@typescript-eslint/typescript-estree": "5.36.2", + "@typescript-eslint/scope-manager": "5.37.0", + "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/typescript-estree": "5.37.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.36.2.tgz", - "integrity": "sha512-cNNP51L8SkIFSfce8B1NSUBTJTu2Ts4nWeWbFrdaqjmn9yKrAaJUBHkyTZc0cL06OFHpb+JZq5AUHROS398Orw==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.37.0.tgz", + "integrity": "sha512-F67MqrmSXGd/eZnujjtkPgBQzgespu/iCZ+54Ok9X5tALb9L2v3G+QBSoWkXG0p3lcTJsL+iXz5eLUEdSiJU9Q==", "dev": true, "requires": { - "@typescript-eslint/types": "5.36.2", - "@typescript-eslint/visitor-keys": "5.36.2" + "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/visitor-keys": "5.37.0" } }, "@typescript-eslint/type-utils": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.36.2.tgz", - "integrity": "sha512-rPQtS5rfijUWLouhy6UmyNquKDPhQjKsaKH0WnY6hl/07lasj8gPaH2UD8xWkePn6SC+jW2i9c2DZVDnL+Dokw==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.37.0.tgz", + "integrity": "sha512-BSx/O0Z0SXOF5tY0bNTBcDEKz2Ec20GVYvq/H/XNKiUorUFilH7NPbFUuiiyzWaSdN3PA8JV0OvYx0gH/5aFAQ==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.36.2", - "@typescript-eslint/utils": "5.36.2", + "@typescript-eslint/typescript-estree": "5.37.0", + "@typescript-eslint/utils": "5.37.0", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.36.2.tgz", - "integrity": "sha512-9OJSvvwuF1L5eS2EQgFUbECb99F0mwq501w0H0EkYULkhFa19Qq7WFbycdw1PexAc929asupbZcgjVIe6OK/XQ==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz", + "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.36.2.tgz", - "integrity": "sha512-8fyH+RfbKc0mTspfuEjlfqA4YywcwQK2Amcf6TDOwaRLg7Vwdu4bZzyvBZp4bjt1RRjQ5MDnOZahxMrt2l5v9w==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz", + "integrity": "sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.36.2", - "@typescript-eslint/visitor-keys": "5.36.2", + "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/visitor-keys": "5.37.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -8847,26 +8847,26 @@ } }, "@typescript-eslint/utils": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.36.2.tgz", - "integrity": "sha512-uNcopWonEITX96v9pefk9DC1bWMdkweeSsewJ6GeC7L6j2t0SJywisgkr9wUTtXk90fi2Eljj90HSHm3OGdGRg==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.37.0.tgz", + "integrity": "sha512-jUEJoQrWbZhmikbcWSMDuUSxEE7ID2W/QCV/uz10WtQqfOuKZUqFGjqLJ+qhDd17rjgp+QJPqTdPIBWwoob2NQ==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.36.2", - "@typescript-eslint/types": "5.36.2", - "@typescript-eslint/typescript-estree": "5.36.2", + "@typescript-eslint/scope-manager": "5.37.0", + "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/typescript-estree": "5.37.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.36.2.tgz", - "integrity": "sha512-BtRvSR6dEdrNt7Net2/XDjbYKU5Ml6GqJgVfXT0CxTCJlnIqK7rAGreuWKMT2t8cFUT2Msv5oxw0GMRD7T5J7A==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz", + "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.36.2", + "@typescript-eslint/types": "5.37.0", "eslint-visitor-keys": "^3.3.0" } }, diff --git a/package.json b/package.json index 2bbdd875..9b5bdc86 100644 --- a/package.json +++ b/package.json @@ -96,15 +96,15 @@ "upgrade": "npm-check-updates --upgrade" }, "dependencies": { - "@cucumber/language-server": "0.12.14", + "@cucumber/language-server": "0.13.1", "vscode-languageclient": "8.0.2" }, "devDependencies": { "@types/glob": "8.0.0", "@types/mocha": "9.1.1", "@types/vscode": "1.69.0", - "@typescript-eslint/eslint-plugin": "5.36.2", - "@typescript-eslint/parser": "5.36.2", + "@typescript-eslint/eslint-plugin": "5.37.0", + "@typescript-eslint/parser": "5.37.0", "esbuild": "0.15.7", "eslint": "8.23.1", "eslint-config-prettier": "8.5.0", diff --git a/src/VscodeFiles.ts b/src/VscodeFiles.ts index 940e52e9..f7eaf194 100644 --- a/src/VscodeFiles.ts +++ b/src/VscodeFiles.ts @@ -1,37 +1,29 @@ import { Files } from '@cucumber/language-server' -import { FileSystemProvider, Uri, workspace } from 'vscode' +import { FileSystem, Uri, workspace } from 'vscode' export class VscodeFiles implements Files { - constructor(private readonly rootUri: string, private readonly provider: FileSystemProvider) {} + constructor(private readonly rootUri: string, private readonly fs: FileSystem) {} async exists(uri: string): Promise { try { - await this.provider.stat(Uri.parse(uri)) + await this.fs.stat(Uri.parse(uri)) return true } catch { return false } } - async findFiles(cwd: string, glob: string): Promise { - const files = await workspace.findFiles(glob) - return files.map((file) => file.path) - } - - join(...paths: string[]): string { - return Uri.joinPath(Uri.parse(this.rootUri), ...paths).path - } - - async readFile(path: string): Promise { - const data = await this.provider.readFile(Uri.parse(path)) + async readFile(uri: string): Promise { + const data = await this.fs.readFile(Uri.parse(uri)) return new TextDecoder().decode(data) } - relative(uri: string): string { - return uri + async findUris(glob: string): Promise { + const uris = await workspace.findFiles(glob) + return uris.map((file) => file.toString()) } - toUri(path: string): string { - return path + relativePath(uri: string): string { + return workspace.asRelativePath(Uri.parse(uri), true) } } diff --git a/src/cucumber-language-server.ts b/src/cucumber-language-server.ts index 4025fae6..3c7e4f04 100644 --- a/src/cucumber-language-server.ts +++ b/src/cucumber-language-server.ts @@ -1,3 +1,4 @@ +import { NodeFiles } from '@cucumber/language-server/node' import { startWasmServer } from '@cucumber/language-server/wasm' -startWasmServer(__dirname) +startWasmServer(__dirname, (rootUri) => new NodeFiles(rootUri)) diff --git a/src/extension.ts b/src/extension.ts index 2dd206c8..c8a55933 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,21 +1,20 @@ import { newWasmServer } from '@cucumber/language-server' import vscode from 'vscode' import { LanguageClient, LanguageClientOptions, ServerOptions } from 'vscode-languageclient/node' + import { VscodeFiles } from './VscodeFiles' let client: LanguageClient -// this method is called when your extension is activated -// your extension is activated the very first time the command is executed +// eslint-disable-next-line @typescript-eslint/no-unused-vars export async function activate(context: vscode.ExtensionContext) { - // const serverModule = context.asAbsolutePath(path.join('out', 'cucumber-language-server.js')) - // const serverOptions: ServerOptions = { module: serverModule, transport: TransportKind.ipc } - const makeFiles = (rootUri: string) => new VscodeFiles(rootUri, null) + const makeFiles = (rootUri: string) => new VscodeFiles(rootUri, vscode.workspace.fs) const serverOptions: ServerOptions = async () => newWasmServer(__dirname, makeFiles) const clientOptions: LanguageClientOptions = { // We need to list all supported languages here so that // the language server is notified to reindex when a file changes + // https://code.visualstudio.com/docs/languages/identifiers#_known-language-identifiers documentSelector: [ { scheme: 'file', language: 'csharp' }, { scheme: 'file', language: 'cucumber' }, @@ -23,6 +22,7 @@ export async function activate(context: vscode.ExtensionContext) { { scheme: 'file', language: 'php' }, { scheme: 'file', language: 'ruby' }, { scheme: 'file', language: 'typescript' }, + { scheme: 'file', language: 'typescriptreact' }, { scheme: 'file', language: 'python' }, ], } From ca4cf74ecb321c3b25ca467fe7d6ffa751868625 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Tue, 13 Sep 2022 09:24:15 +0100 Subject: [PATCH 4/4] Update changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f9452bb9..6840bb23 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +### Changed +- The Cucumber Language Server is now started in-process ([#105](https://github.com/cucumber/vscode/pull/105)) + ## [1.3.0] - 2022-09-10 ### Added - Add support for `.tsx` ([#87](https://github.com/cucumber/language-service/issues/87) [#90](https://github.com/cucumber/language-service/pull/90))