WIP worker-based LSP server instead of mirror model

This commit is contained in:
Henning Dieterichs 2025-12-19 17:09:05 +01:00
parent ec78a33c7b
commit 39e9e78254
No known key found for this signature in database
GPG key ID: 771381EFFDB9EC06
8 changed files with 15895 additions and 192 deletions

View file

@ -1,5 +1,7 @@
import * as fs from 'fs'; import * as fs from 'fs';
import * as path from 'path'; import * as path from 'path';
import yargs from 'yargs';
import { hideBin } from 'yargs/helpers';
/** /**
* Utility class for writing formatted code with proper indentation * Utility class for writing formatted code with proper indentation
@ -259,12 +261,16 @@ interface BooleanLiteralType {
class LSPTypesGenerator { class LSPTypesGenerator {
private writer = new LineWriter(); private writer = new LineWriter();
constructor(
private readonly metaModelPath: string,
private readonly outPath: string
) { }
/** /**
* Load and parse the metaModel.json file * Load and parse the metaModel.json file
*/ */
private loadMetaModel(): MetaModel { private loadMetaModel(): MetaModel {
const metaModelPath = path.join(__dirname, '..', 'metaModel.json'); const content = fs.readFileSync(this.metaModelPath, 'utf-8');
const content = fs.readFileSync(metaModelPath, 'utf-8');
return JSON.parse(content) as MetaModel; return JSON.parse(content) as MetaModel;
} }
@ -561,7 +567,7 @@ class LSPTypesGenerator {
// Server requests (sent from client to server) // Server requests (sent from client to server)
for (const request of metaModel.requests) { for (const request of metaModel.requests) {
if (request.messageDirection === 'clientToServer' || request.messageDirection === 'both') { if (request.messageDirection === 'clientToServer' || request.messageDirection === 'both') {
generateRequest(request); generateRequest(request, true);
} }
} }
@ -670,18 +676,34 @@ class LSPTypesGenerator {
this.generateApiContract(metaModel); this.generateApiContract(metaModel);
// Write types file // Write types file
const srcDir = path.join(__dirname, '..', 'src'); const outDir = path.dirname(this.outPath);
if (!fs.existsSync(srcDir)) { if (!fs.existsSync(outDir)) {
fs.mkdirSync(srcDir, { recursive: true }); fs.mkdirSync(outDir, { recursive: true });
} }
fs.writeFileSync(path.join(srcDir, 'types.ts'), this.writer.toString()); fs.writeFileSync(this.outPath, this.writer.toString());
console.log('Generated LSP types file: src/types.ts'); console.log(`Generated LSP types file: ${this.outPath}`);
} }
} }
// Run the generator // Run the generator
if (require.main === module) { if (require.main === module) {
const generator = new LSPTypesGenerator(); const argv = yargs(hideBin(process.argv))
.option('input', {
alias: 'i',
type: 'string',
description: 'Path to metaModel.json',
default: path.join(__dirname, '..', 'spec', 'metaModel.json')
})
.option('output', {
alias: 'o',
type: 'string',
description: 'Output file',
default: path.join(__dirname, '..', 'src', 'types.ts')
})
.help()
.parseSync();
const generator = new LSPTypesGenerator(argv.input, argv.output);
generator.generate(); generator.generate();
} }

View file

@ -13,9 +13,12 @@
"@hediet/json-rpc-websocket": "^0.5.1" "@hediet/json-rpc-websocket": "^0.5.1"
}, },
"devDependencies": { "devDependencies": {
"@types/yargs": "^17.0.35",
"rolldown": "^1.0.0-beta.41", "rolldown": "^1.0.0-beta.41",
"rolldown-plugin-dts": "^0.16.11", "rolldown-plugin-dts": "^0.16.11",
"rollup-plugin-delete": "^3.0.1" "rollup-plugin-delete": "^3.0.1",
"tsx": "^4.21.0",
"yargs": "^18.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"monaco-editor-core": "^0.54.0-dev-20250929" "monaco-editor-core": "^0.54.0-dev-20250929"
@ -143,6 +146,448 @@
"tslib": "^2.4.0" "tslib": "^2.4.0"
} }
}, },
"node_modules/@esbuild/aix-ppc64": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz",
"integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==",
"cpu": [
"ppc64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"aix"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/android-arm": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz",
"integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==",
"cpu": [
"arm"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/android-arm64": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz",
"integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/android-x64": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz",
"integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/darwin-arm64": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz",
"integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/darwin-x64": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz",
"integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/freebsd-arm64": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz",
"integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/freebsd-x64": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz",
"integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/linux-arm": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz",
"integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==",
"cpu": [
"arm"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/linux-arm64": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz",
"integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/linux-ia32": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz",
"integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==",
"cpu": [
"ia32"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/linux-loong64": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz",
"integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==",
"cpu": [
"loong64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/linux-mips64el": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz",
"integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==",
"cpu": [
"mips64el"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/linux-ppc64": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz",
"integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==",
"cpu": [
"ppc64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/linux-riscv64": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz",
"integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==",
"cpu": [
"riscv64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/linux-s390x": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz",
"integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==",
"cpu": [
"s390x"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/linux-x64": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz",
"integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/netbsd-arm64": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz",
"integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"netbsd"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/netbsd-x64": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz",
"integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"netbsd"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/openbsd-arm64": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz",
"integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"openbsd"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/openbsd-x64": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz",
"integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"openbsd"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/openharmony-arm64": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz",
"integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"openharmony"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/sunos-x64": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz",
"integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"sunos"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/win32-arm64": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz",
"integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/win32-ia32": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz",
"integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==",
"cpu": [
"ia32"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/win32-x64": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz",
"integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@hediet/json-rpc": { "node_modules/@hediet/json-rpc": {
"version": "0.5.0", "version": "0.5.0",
"resolved": "https://registry.npmjs.org/@hediet/json-rpc/-/json-rpc-0.5.0.tgz", "resolved": "https://registry.npmjs.org/@hediet/json-rpc/-/json-rpc-0.5.0.tgz",
@ -894,6 +1339,49 @@
"@types/node": "*" "@types/node": "*"
} }
}, },
"node_modules/@types/yargs": {
"version": "17.0.35",
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
"integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/@types/yargs-parser": {
"version": "21.0.3",
"resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
"integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
"dev": true,
"license": "MIT"
},
"node_modules/ansi-regex": {
"version": "6.2.2",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
"integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
}
},
"node_modules/ansi-styles": {
"version": "6.2.3",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
"integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/ansis": { "node_modules/ansis": {
"version": "4.2.0", "version": "4.2.0",
"resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz", "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz",
@ -944,6 +1432,21 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/cliui": {
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz",
"integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==",
"dev": true,
"license": "ISC",
"dependencies": {
"string-width": "^7.2.0",
"strip-ansi": "^7.1.0",
"wrap-ansi": "^9.0.0"
},
"engines": {
"node": ">=20"
}
},
"node_modules/debug": { "node_modules/debug": {
"version": "4.4.3", "version": "4.4.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
@ -1010,6 +1513,65 @@
} }
} }
}, },
"node_modules/emoji-regex": {
"version": "10.6.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
"integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
"dev": true,
"license": "MIT"
},
"node_modules/esbuild": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz",
"integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"bin": {
"esbuild": "bin/esbuild"
},
"engines": {
"node": ">=18"
},
"optionalDependencies": {
"@esbuild/aix-ppc64": "0.27.2",
"@esbuild/android-arm": "0.27.2",
"@esbuild/android-arm64": "0.27.2",
"@esbuild/android-x64": "0.27.2",
"@esbuild/darwin-arm64": "0.27.2",
"@esbuild/darwin-x64": "0.27.2",
"@esbuild/freebsd-arm64": "0.27.2",
"@esbuild/freebsd-x64": "0.27.2",
"@esbuild/linux-arm": "0.27.2",
"@esbuild/linux-arm64": "0.27.2",
"@esbuild/linux-ia32": "0.27.2",
"@esbuild/linux-loong64": "0.27.2",
"@esbuild/linux-mips64el": "0.27.2",
"@esbuild/linux-ppc64": "0.27.2",
"@esbuild/linux-riscv64": "0.27.2",
"@esbuild/linux-s390x": "0.27.2",
"@esbuild/linux-x64": "0.27.2",
"@esbuild/netbsd-arm64": "0.27.2",
"@esbuild/netbsd-x64": "0.27.2",
"@esbuild/openbsd-arm64": "0.27.2",
"@esbuild/openbsd-x64": "0.27.2",
"@esbuild/openharmony-arm64": "0.27.2",
"@esbuild/sunos-x64": "0.27.2",
"@esbuild/win32-arm64": "0.27.2",
"@esbuild/win32-ia32": "0.27.2",
"@esbuild/win32-x64": "0.27.2"
}
},
"node_modules/escalade": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/fast-glob": { "node_modules/fast-glob": {
"version": "3.3.3", "version": "3.3.3",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
@ -1061,11 +1623,33 @@
"os": [ "os": [
"darwin" "darwin"
], ],
"peer": true,
"engines": { "engines": {
"node": "^8.16.0 || ^10.6.0 || >=11.0.0" "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
} }
}, },
"node_modules/get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true,
"license": "ISC",
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
},
"node_modules/get-east-asian-width": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz",
"integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/get-tsconfig": { "node_modules/get-tsconfig": {
"version": "4.11.0", "version": "4.11.0",
"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.11.0.tgz", "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.11.0.tgz",
@ -1541,6 +2125,40 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/string-width": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
"integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"emoji-regex": "^10.3.0",
"get-east-asian-width": "^1.0.0",
"strip-ansi": "^7.1.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/strip-ansi": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
"integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
"node_modules/to-regex-range": { "node_modules/to-regex-range": {
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@ -1562,6 +2180,26 @@
"license": "0BSD", "license": "0BSD",
"optional": true "optional": true
}, },
"node_modules/tsx": {
"version": "4.21.0",
"resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz",
"integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==",
"dev": true,
"license": "MIT",
"dependencies": {
"esbuild": "~0.27.0",
"get-tsconfig": "^4.7.5"
},
"bin": {
"tsx": "dist/cli.mjs"
},
"engines": {
"node": ">=18.0.0"
},
"optionalDependencies": {
"fsevents": "~2.3.3"
}
},
"node_modules/undici-types": { "node_modules/undici-types": {
"version": "7.16.0", "version": "7.16.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
@ -1581,6 +2219,24 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/wrap-ansi": {
"version": "9.0.2",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz",
"integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^6.2.1",
"string-width": "^7.0.0",
"strip-ansi": "^7.1.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"node_modules/ws": { "node_modules/ws": {
"version": "8.18.3", "version": "8.18.3",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
@ -1602,6 +2258,44 @@
"optional": true "optional": true
} }
} }
},
"node_modules/y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"dev": true,
"license": "ISC",
"engines": {
"node": ">=10"
}
},
"node_modules/yargs": {
"version": "18.0.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz",
"integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==",
"dev": true,
"license": "MIT",
"dependencies": {
"cliui": "^9.0.1",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"string-width": "^7.2.0",
"y18n": "^5.0.5",
"yargs-parser": "^22.0.0"
},
"engines": {
"node": "^20.19.0 || ^22.12.0 || >=23"
}
},
"node_modules/yargs-parser": {
"version": "22.0.0",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz",
"integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==",
"dev": true,
"license": "ISC",
"engines": {
"node": "^20.19.0 || ^22.12.0 || >=23"
}
} }
} }
} }

View file

@ -14,9 +14,12 @@
"monaco-editor-core": "^0.54.0-dev-20250929" "monaco-editor-core": "^0.54.0-dev-20250929"
}, },
"devDependencies": { "devDependencies": {
"@types/yargs": "^17.0.35",
"rolldown": "^1.0.0-beta.41", "rolldown": "^1.0.0-beta.41",
"rolldown-plugin-dts": "^0.16.11", "rolldown-plugin-dts": "^0.16.11",
"rollup-plugin-delete": "^3.0.1" "rollup-plugin-delete": "^3.0.1",
"tsx": "^4.21.0",
"yargs": "^18.0.0"
}, },
"scripts": { "scripts": {
"build": "npx rolldown -c rolldown.config.mjs", "build": "npx rolldown -c rolldown.config.mjs",

File diff suppressed because it is too large Load diff

View file

@ -31,7 +31,6 @@ export class LspDiagnosticsFeature extends Disposable {
} }
})); }));
debugger;
this._register(this._connection.connection.registerNotificationHandler( this._register(this._connection.connection.registerNotificationHandler(
api.client.textDocumentPublishDiagnostics, api.client.textDocumentPublishDiagnostics,
(params) => this._handlePublishDiagnostics(params) (params) => this._handlePublishDiagnostics(params)

View file

@ -3,8 +3,10 @@
// This file is auto-generated. Do not edit manually. // This file is auto-generated. Do not edit manually.
import { import {
contract, unverifiedRequest, contract,
unverifiedNotification Contract,
unverifiedRequest,
unverifiedNotification,
} from "@hediet/json-rpc"; } from "@hediet/json-rpc";
/** /**
@ -2102,7 +2104,7 @@ export interface InitializeResult {
serverInfo?: { serverInfo?: {
name: string; name: string;
version?: string version?: string
}; };
} }
/** /**
@ -2538,11 +2540,11 @@ export interface CompletionList {
editRange?: Range | { editRange?: Range | {
insert: Range; insert: Range;
replace: Range replace: Range
}; };
insertTextFormat?: InsertTextFormat; insertTextFormat?: InsertTextFormat;
insertTextMode?: InsertTextMode; insertTextMode?: InsertTextMode;
data?: LSPAny data?: LSPAny
}; };
/** /**
* The completion items. * The completion items.
*/ */
@ -2868,7 +2870,7 @@ export interface CodeAction {
*/ */
disabled?: { disabled?: {
reason: string reason: string
}; };
/** /**
* The workspace edit this code action performs. * The workspace edit this code action performs.
*/ */
@ -2922,7 +2924,7 @@ export interface WorkspaceSymbol extends BaseSymbolInformation {
*/ */
location: Location | { location: Location | {
uri: string uri: string
}; };
/** /**
* A data entry field that is preserved on a workspace symbol between a * A data entry field that is preserved on a workspace symbol between a
* workspace symbol request and a workspace symbol resolve request. * workspace symbol request and a workspace symbol resolve request.
@ -3547,13 +3549,13 @@ export interface SemanticTokensOptions extends WorkDoneProgressOptions {
*/ */
range?: boolean | { range?: boolean | {
}; };
/** /**
* Server supports providing semantic tokens for a full document. * Server supports providing semantic tokens for a full document.
*/ */
full?: boolean | { full?: boolean | {
delta?: boolean delta?: boolean
}; };
} }
/** /**
@ -4127,13 +4129,13 @@ export interface NotebookDocumentChangeEvent {
array: NotebookCellArrayChange; array: NotebookCellArrayChange;
didOpen?: (TextDocumentItem)[]; didOpen?: (TextDocumentItem)[];
didClose?: (TextDocumentIdentifier)[] didClose?: (TextDocumentIdentifier)[]
}; };
data?: (NotebookCell)[]; data?: (NotebookCell)[];
textContent?: ({ textContent?: ({
document: VersionedTextDocumentIdentifier; document: VersionedTextDocumentIdentifier;
changes: (TextDocumentContentChangeEvent)[] changes: (TextDocumentContentChangeEvent)[]
})[] })[]
}; };
} }
/** /**
@ -4251,7 +4253,7 @@ export interface _InitializeParams extends WorkDoneProgressParams {
clientInfo?: { clientInfo?: {
name: string; name: string;
version?: string version?: string
}; };
/** /**
* The locale the client is currently showing the user interface * The locale the client is currently showing the user interface
* in. This must not necessarily be the locale of the operating * in. This must not necessarily be the locale of the operating
@ -4487,7 +4489,7 @@ export interface ServerCapabilities {
workspace?: { workspace?: {
workspaceFolders?: WorkspaceFoldersServerCapabilities; workspaceFolders?: WorkspaceFoldersServerCapabilities;
fileOperations?: FileOperationOptions fileOperations?: FileOperationOptions
}; };
/** /**
* Experimental server capabilities. * Experimental server capabilities.
*/ */
@ -4690,7 +4692,7 @@ export interface CompletionOptions extends WorkDoneProgressOptions {
*/ */
completionItem?: { completionItem?: {
labelDetailsSupport?: boolean labelDetailsSupport?: boolean
}; };
} }
/** /**
@ -5333,13 +5335,13 @@ export interface NotebookDocumentSyncOptions {
notebook: string | NotebookDocumentFilter; notebook: string | NotebookDocumentFilter;
cells?: ({ cells?: ({
language: string language: string
})[] })[]
} | { } | {
notebook?: string | NotebookDocumentFilter; notebook?: string | NotebookDocumentFilter;
cells: ({ cells: ({
language: string language: string
})[] })[]
})[]; })[];
/** /**
* Whether save notification should be forwarded to * Whether save notification should be forwarded to
* the server. Will only be honored if mode === `notebook`. * the server. Will only be honored if mode === `notebook`.
@ -5816,7 +5818,7 @@ export interface GeneralClientCapabilities {
staleRequestSupport?: { staleRequestSupport?: {
cancel: boolean; cancel: boolean;
retryOnContentModified: (string)[] retryOnContentModified: (string)[]
}; };
/** /**
* Client capabilities specific to regular expressions. * Client capabilities specific to regular expressions.
* *
@ -5908,7 +5910,7 @@ export interface WorkspaceEditClientCapabilities {
*/ */
changeAnnotationSupport?: { changeAnnotationSupport?: {
groupsOnLabel?: boolean groupsOnLabel?: boolean
}; };
} }
export interface DidChangeConfigurationClientCapabilities { export interface DidChangeConfigurationClientCapabilities {
@ -5947,7 +5949,7 @@ export interface WorkspaceSymbolClientCapabilities {
*/ */
symbolKind?: { symbolKind?: {
valueSet?: (SymbolKind)[] valueSet?: (SymbolKind)[]
}; };
/** /**
* The client supports tags on `SymbolInformation`. * The client supports tags on `SymbolInformation`.
* Clients supporting tags have to handle unknown tags gracefully. * Clients supporting tags have to handle unknown tags gracefully.
@ -5956,7 +5958,7 @@ export interface WorkspaceSymbolClientCapabilities {
*/ */
tagSupport?: { tagSupport?: {
valueSet: (SymbolTag)[] valueSet: (SymbolTag)[]
}; };
/** /**
* The client support partial workspace symbols. The client will send the * The client support partial workspace symbols. The client will send the
* request `workspaceSymbol/resolve` to the server to resolve additional * request `workspaceSymbol/resolve` to the server to resolve additional
@ -5966,7 +5968,7 @@ export interface WorkspaceSymbolClientCapabilities {
*/ */
resolveSupport?: { resolveSupport?: {
properties: (string)[] properties: (string)[]
}; };
} }
/** /**
@ -6167,19 +6169,19 @@ export interface CompletionClientCapabilities {
preselectSupport?: boolean; preselectSupport?: boolean;
tagSupport?: { tagSupport?: {
valueSet: (CompletionItemTag)[] valueSet: (CompletionItemTag)[]
}; };
insertReplaceSupport?: boolean; insertReplaceSupport?: boolean;
resolveSupport?: { resolveSupport?: {
properties: (string)[] properties: (string)[]
}; };
insertTextModeSupport?: { insertTextModeSupport?: {
valueSet: (InsertTextMode)[] valueSet: (InsertTextMode)[]
}; };
labelDetailsSupport?: boolean labelDetailsSupport?: boolean
}; };
completionItemKind?: { completionItemKind?: {
valueSet?: (CompletionItemKind)[] valueSet?: (CompletionItemKind)[]
}; };
/** /**
* Defines how the client handles whitespace and indentation * Defines how the client handles whitespace and indentation
* when accepting a completion item that uses multi line * when accepting a completion item that uses multi line
@ -6201,7 +6203,7 @@ export interface CompletionClientCapabilities {
*/ */
completionList?: { completionList?: {
itemDefaults?: (string)[] itemDefaults?: (string)[]
}; };
} }
export interface HoverClientCapabilities { export interface HoverClientCapabilities {
@ -6232,9 +6234,9 @@ export interface SignatureHelpClientCapabilities {
documentationFormat?: (MarkupKind)[]; documentationFormat?: (MarkupKind)[];
parameterInformation?: { parameterInformation?: {
labelOffsetSupport?: boolean labelOffsetSupport?: boolean
}; };
activeParameterSupport?: boolean activeParameterSupport?: boolean
}; };
/** /**
* The client supports to send additional context information for a * The client supports to send additional context information for a
* `textDocument/signatureHelp` request. A client that opts into * `textDocument/signatureHelp` request. A client that opts into
@ -6348,7 +6350,7 @@ export interface DocumentSymbolClientCapabilities {
*/ */
symbolKind?: { symbolKind?: {
valueSet?: (SymbolKind)[] valueSet?: (SymbolKind)[]
}; };
/** /**
* The client supports hierarchical document symbols. * The client supports hierarchical document symbols.
*/ */
@ -6362,7 +6364,7 @@ export interface DocumentSymbolClientCapabilities {
*/ */
tagSupport?: { tagSupport?: {
valueSet: (SymbolTag)[] valueSet: (SymbolTag)[]
}; };
/** /**
* The client supports an additional label presented in the UI when * The client supports an additional label presented in the UI when
* registering a document symbol provider. * registering a document symbol provider.
@ -6390,8 +6392,8 @@ export interface CodeActionClientCapabilities {
codeActionLiteralSupport?: { codeActionLiteralSupport?: {
codeActionKind: { codeActionKind: {
valueSet: (CodeActionKind)[] valueSet: (CodeActionKind)[]
} }
}; };
/** /**
* Whether code action supports the `isPreferred` property. * Whether code action supports the `isPreferred` property.
* *
@ -6420,7 +6422,7 @@ export interface CodeActionClientCapabilities {
*/ */
resolveSupport?: { resolveSupport?: {
properties: (string)[] properties: (string)[]
}; };
/** /**
* Whether the client honors the change annotations in * Whether the client honors the change annotations in
* text edits and resource operations returned via the * text edits and resource operations returned via the
@ -6565,7 +6567,7 @@ export interface FoldingRangeClientCapabilities {
*/ */
foldingRangeKind?: { foldingRangeKind?: {
valueSet?: (FoldingRangeKind)[] valueSet?: (FoldingRangeKind)[]
}; };
/** /**
* Specific options for the folding range. * Specific options for the folding range.
* *
@ -6573,7 +6575,7 @@ export interface FoldingRangeClientCapabilities {
*/ */
foldingRange?: { foldingRange?: {
collapsedText?: boolean collapsedText?: boolean
}; };
} }
export interface SelectionRangeClientCapabilities { export interface SelectionRangeClientCapabilities {
@ -6601,7 +6603,7 @@ export interface PublishDiagnosticsClientCapabilities {
*/ */
tagSupport?: { tagSupport?: {
valueSet: (DiagnosticTag)[] valueSet: (DiagnosticTag)[]
}; };
/** /**
* Whether the client interprets the version property of the * Whether the client interprets the version property of the
* `textDocument/publishDiagnostics` notification's parameter. * `textDocument/publishDiagnostics` notification's parameter.
@ -6660,11 +6662,11 @@ export interface SemanticTokensClientCapabilities {
requests: { requests: {
range?: boolean | { range?: boolean | {
}; };
full?: boolean | { full?: boolean | {
delta?: boolean delta?: boolean
} }
}; };
/** /**
* The token types that the client supports. * The token types that the client supports.
*/ */
@ -6777,7 +6779,7 @@ export interface InlayHintClientCapabilities {
*/ */
resolveSupport?: { resolveSupport?: {
properties: (string)[] properties: (string)[]
}; };
} }
/** /**
@ -6839,7 +6841,7 @@ export interface ShowMessageRequestClientCapabilities {
*/ */
messageActionItem?: { messageActionItem?: {
additionalPropertiesSupport?: boolean additionalPropertiesSupport?: boolean
}; };
} }
/** /**
@ -6898,7 +6900,7 @@ export interface MarkdownClientCapabilities {
* Represents a capability with its associated method and registration options type * Represents a capability with its associated method and registration options type
*/ */
export class Capability<T> { export class Capability<T> {
constructor(public readonly method: string) { } constructor(public readonly method: string) {}
} }
/** /**
@ -6966,85 +6968,85 @@ export const api = contract({
* document position. The request's parameter is of type {@link TextDocumentPositionParams} * document position. The request's parameter is of type {@link TextDocumentPositionParams}
* the response is of type {@link Definition} or a Thenable that resolves to such. * the response is of type {@link Definition} or a Thenable that resolves to such.
*/ */
textDocumentImplementation: unverifiedRequest<ImplementationParams, Definition | (DefinitionLink)[] | null>({ method: "textDocument/implementation" }), textDocumentImplementation: unverifiedRequest<ImplementationParams, Definition | (DefinitionLink)[] | null>({ method: "textDocument/implementation" }).optional(),
/** /**
* A request to resolve the type definition locations of a symbol at a given text * A request to resolve the type definition locations of a symbol at a given text
* document position. The request's parameter is of type {@link TextDocumentPositionParams} * document position. The request's parameter is of type {@link TextDocumentPositionParams}
* the response is of type {@link Definition} or a Thenable that resolves to such. * the response is of type {@link Definition} or a Thenable that resolves to such.
*/ */
textDocumentTypeDefinition: unverifiedRequest<TypeDefinitionParams, Definition | (DefinitionLink)[] | null>({ method: "textDocument/typeDefinition" }), textDocumentTypeDefinition: unverifiedRequest<TypeDefinitionParams, Definition | (DefinitionLink)[] | null>({ method: "textDocument/typeDefinition" }).optional(),
/** /**
* A request to list all color symbols found in a given text document. The request's * A request to list all color symbols found in a given text document. The request's
* parameter is of type {@link DocumentColorParams} the * parameter is of type {@link DocumentColorParams} the
* response is of type {@link ColorInformation ColorInformation[]} or a Thenable * response is of type {@link ColorInformation ColorInformation[]} or a Thenable
* that resolves to such. * that resolves to such.
*/ */
textDocumentDocumentColor: unverifiedRequest<DocumentColorParams, (ColorInformation)[]>({ method: "textDocument/documentColor" }), textDocumentDocumentColor: unverifiedRequest<DocumentColorParams, (ColorInformation)[]>({ method: "textDocument/documentColor" }).optional(),
/** /**
* A request to list all presentation for a color. The request's * A request to list all presentation for a color. The request's
* parameter is of type {@link ColorPresentationParams} the * parameter is of type {@link ColorPresentationParams} the
* response is of type {@link ColorInformation ColorInformation[]} or a Thenable * response is of type {@link ColorInformation ColorInformation[]} or a Thenable
* that resolves to such. * that resolves to such.
*/ */
textDocumentColorPresentation: unverifiedRequest<ColorPresentationParams, (ColorPresentation)[]>({ method: "textDocument/colorPresentation" }), textDocumentColorPresentation: unverifiedRequest<ColorPresentationParams, (ColorPresentation)[]>({ method: "textDocument/colorPresentation" }).optional(),
/** /**
* A request to provide folding ranges in a document. The request's * A request to provide folding ranges in a document. The request's
* parameter is of type {@link FoldingRangeParams}, the * parameter is of type {@link FoldingRangeParams}, the
* response is of type {@link FoldingRangeList} or a Thenable * response is of type {@link FoldingRangeList} or a Thenable
* that resolves to such. * that resolves to such.
*/ */
textDocumentFoldingRange: unverifiedRequest<FoldingRangeParams, (FoldingRange)[] | null>({ method: "textDocument/foldingRange" }), textDocumentFoldingRange: unverifiedRequest<FoldingRangeParams, (FoldingRange)[] | null>({ method: "textDocument/foldingRange" }).optional(),
/** /**
* A request to resolve the type definition locations of a symbol at a given text * A request to resolve the type definition locations of a symbol at a given text
* document position. The request's parameter is of type {@link TextDocumentPositionParams} * document position. The request's parameter is of type {@link TextDocumentPositionParams}
* the response is of type {@link Declaration} or a typed array of {@link DeclarationLink} * the response is of type {@link Declaration} or a typed array of {@link DeclarationLink}
* or a Thenable that resolves to such. * or a Thenable that resolves to such.
*/ */
textDocumentDeclaration: unverifiedRequest<DeclarationParams, Declaration | (DeclarationLink)[] | null>({ method: "textDocument/declaration" }), textDocumentDeclaration: unverifiedRequest<DeclarationParams, Declaration | (DeclarationLink)[] | null>({ method: "textDocument/declaration" }).optional(),
/** /**
* A request to provide selection ranges in a document. The request's * A request to provide selection ranges in a document. The request's
* parameter is of type {@link SelectionRangeParams}, the * parameter is of type {@link SelectionRangeParams}, the
* response is of type {@link SelectionRange SelectionRange[]} or a Thenable * response is of type {@link SelectionRange SelectionRange[]} or a Thenable
* that resolves to such. * that resolves to such.
*/ */
textDocumentSelectionRange: unverifiedRequest<SelectionRangeParams, (SelectionRange)[] | null>({ method: "textDocument/selectionRange" }), textDocumentSelectionRange: unverifiedRequest<SelectionRangeParams, (SelectionRange)[] | null>({ method: "textDocument/selectionRange" }).optional(),
/** /**
* A request to result a `CallHierarchyItem` in a document at a given position. * A request to result a `CallHierarchyItem` in a document at a given position.
* Can be used as an input to an incoming or outgoing call hierarchy. * Can be used as an input to an incoming or outgoing call hierarchy.
* *
* @since 3.16.0 * @since 3.16.0
*/ */
textDocumentPrepareCallHierarchy: unverifiedRequest<CallHierarchyPrepareParams, (CallHierarchyItem)[] | null>({ method: "textDocument/prepareCallHierarchy" }), textDocumentPrepareCallHierarchy: unverifiedRequest<CallHierarchyPrepareParams, (CallHierarchyItem)[] | null>({ method: "textDocument/prepareCallHierarchy" }).optional(),
/** /**
* A request to resolve the incoming calls for a given `CallHierarchyItem`. * A request to resolve the incoming calls for a given `CallHierarchyItem`.
* *
* @since 3.16.0 * @since 3.16.0
*/ */
callHierarchyIncomingCalls: unverifiedRequest<CallHierarchyIncomingCallsParams, (CallHierarchyIncomingCall)[] | null>({ method: "callHierarchy/incomingCalls" }), callHierarchyIncomingCalls: unverifiedRequest<CallHierarchyIncomingCallsParams, (CallHierarchyIncomingCall)[] | null>({ method: "callHierarchy/incomingCalls" }).optional(),
/** /**
* A request to resolve the outgoing calls for a given `CallHierarchyItem`. * A request to resolve the outgoing calls for a given `CallHierarchyItem`.
* *
* @since 3.16.0 * @since 3.16.0
*/ */
callHierarchyOutgoingCalls: unverifiedRequest<CallHierarchyOutgoingCallsParams, (CallHierarchyOutgoingCall)[] | null>({ method: "callHierarchy/outgoingCalls" }), callHierarchyOutgoingCalls: unverifiedRequest<CallHierarchyOutgoingCallsParams, (CallHierarchyOutgoingCall)[] | null>({ method: "callHierarchy/outgoingCalls" }).optional(),
/** /**
* @since 3.16.0 * @since 3.16.0
*/ */
textDocumentSemanticTokensFull: unverifiedRequest<SemanticTokensParams, SemanticTokens | null>({ method: "textDocument/semanticTokens/full" }), textDocumentSemanticTokensFull: unverifiedRequest<SemanticTokensParams, SemanticTokens | null>({ method: "textDocument/semanticTokens/full" }).optional(),
/** /**
* @since 3.16.0 * @since 3.16.0
*/ */
textDocumentSemanticTokensFullDelta: unverifiedRequest<SemanticTokensDeltaParams, SemanticTokens | SemanticTokensDelta | null>({ method: "textDocument/semanticTokens/full/delta" }), textDocumentSemanticTokensFullDelta: unverifiedRequest<SemanticTokensDeltaParams, SemanticTokens | SemanticTokensDelta | null>({ method: "textDocument/semanticTokens/full/delta" }).optional(),
/** /**
* @since 3.16.0 * @since 3.16.0
*/ */
textDocumentSemanticTokensRange: unverifiedRequest<SemanticTokensRangeParams, SemanticTokens | null>({ method: "textDocument/semanticTokens/range" }), textDocumentSemanticTokensRange: unverifiedRequest<SemanticTokensRangeParams, SemanticTokens | null>({ method: "textDocument/semanticTokens/range" }).optional(),
/** /**
* A request to provide ranges that can be edited together. * A request to provide ranges that can be edited together.
* *
* @since 3.16.0 * @since 3.16.0
*/ */
textDocumentLinkedEditingRange: unverifiedRequest<LinkedEditingRangeParams, LinkedEditingRanges | null>({ method: "textDocument/linkedEditingRange" }), textDocumentLinkedEditingRange: unverifiedRequest<LinkedEditingRangeParams, LinkedEditingRanges | null>({ method: "textDocument/linkedEditingRange" }).optional(),
/** /**
* The will create files request is sent from the client to the server before files are actually * The will create files request is sent from the client to the server before files are actually
* created as long as the creation is triggered from within the client. * created as long as the creation is triggered from within the client.
@ -7055,46 +7057,46 @@ export const api = contract({
* *
* @since 3.16.0 * @since 3.16.0
*/ */
workspaceWillCreateFiles: unverifiedRequest<CreateFilesParams, WorkspaceEdit | null>({ method: "workspace/willCreateFiles" }), workspaceWillCreateFiles: unverifiedRequest<CreateFilesParams, WorkspaceEdit | null>({ method: "workspace/willCreateFiles" }).optional(),
/** /**
* The will rename files request is sent from the client to the server before files are actually * The will rename files request is sent from the client to the server before files are actually
* renamed as long as the rename is triggered from within the client. * renamed as long as the rename is triggered from within the client.
* *
* @since 3.16.0 * @since 3.16.0
*/ */
workspaceWillRenameFiles: unverifiedRequest<RenameFilesParams, WorkspaceEdit | null>({ method: "workspace/willRenameFiles" }), workspaceWillRenameFiles: unverifiedRequest<RenameFilesParams, WorkspaceEdit | null>({ method: "workspace/willRenameFiles" }).optional(),
/** /**
* The did delete files notification is sent from the client to the server when * The did delete files notification is sent from the client to the server when
* files were deleted from within the client. * files were deleted from within the client.
* *
* @since 3.16.0 * @since 3.16.0
*/ */
workspaceWillDeleteFiles: unverifiedRequest<DeleteFilesParams, WorkspaceEdit | null>({ method: "workspace/willDeleteFiles" }), workspaceWillDeleteFiles: unverifiedRequest<DeleteFilesParams, WorkspaceEdit | null>({ method: "workspace/willDeleteFiles" }).optional(),
/** /**
* A request to get the moniker of a symbol at a given text document position. * A request to get the moniker of a symbol at a given text document position.
* The request parameter is of type {@link TextDocumentPositionParams}. * The request parameter is of type {@link TextDocumentPositionParams}.
* The response is of type {@link Moniker Moniker[]} or `null`. * The response is of type {@link Moniker Moniker[]} or `null`.
*/ */
textDocumentMoniker: unverifiedRequest<MonikerParams, (Moniker)[] | null>({ method: "textDocument/moniker" }), textDocumentMoniker: unverifiedRequest<MonikerParams, (Moniker)[] | null>({ method: "textDocument/moniker" }).optional(),
/** /**
* A request to result a `TypeHierarchyItem` in a document at a given position. * A request to result a `TypeHierarchyItem` in a document at a given position.
* Can be used as an input to a subtypes or supertypes type hierarchy. * Can be used as an input to a subtypes or supertypes type hierarchy.
* *
* @since 3.17.0 * @since 3.17.0
*/ */
textDocumentPrepareTypeHierarchy: unverifiedRequest<TypeHierarchyPrepareParams, (TypeHierarchyItem)[] | null>({ method: "textDocument/prepareTypeHierarchy" }), textDocumentPrepareTypeHierarchy: unverifiedRequest<TypeHierarchyPrepareParams, (TypeHierarchyItem)[] | null>({ method: "textDocument/prepareTypeHierarchy" }).optional(),
/** /**
* A request to resolve the supertypes for a given `TypeHierarchyItem`. * A request to resolve the supertypes for a given `TypeHierarchyItem`.
* *
* @since 3.17.0 * @since 3.17.0
*/ */
typeHierarchySupertypes: unverifiedRequest<TypeHierarchySupertypesParams, (TypeHierarchyItem)[] | null>({ method: "typeHierarchy/supertypes" }), typeHierarchySupertypes: unverifiedRequest<TypeHierarchySupertypesParams, (TypeHierarchyItem)[] | null>({ method: "typeHierarchy/supertypes" }).optional(),
/** /**
* A request to resolve the subtypes for a given `TypeHierarchyItem`. * A request to resolve the subtypes for a given `TypeHierarchyItem`.
* *
* @since 3.17.0 * @since 3.17.0
*/ */
typeHierarchySubtypes: unverifiedRequest<TypeHierarchySubtypesParams, (TypeHierarchyItem)[] | null>({ method: "typeHierarchy/subtypes" }), typeHierarchySubtypes: unverifiedRequest<TypeHierarchySubtypesParams, (TypeHierarchyItem)[] | null>({ method: "typeHierarchy/subtypes" }).optional(),
/** /**
* A request to provide inline values in a document. The request's parameter is of * A request to provide inline values in a document. The request's parameter is of
* type {@link InlineValueParams}, the response is of type * type {@link InlineValueParams}, the response is of type
@ -7102,7 +7104,7 @@ export const api = contract({
* *
* @since 3.17.0 * @since 3.17.0
*/ */
textDocumentInlineValue: unverifiedRequest<InlineValueParams, (InlineValue)[] | null>({ method: "textDocument/inlineValue" }), textDocumentInlineValue: unverifiedRequest<InlineValueParams, (InlineValue)[] | null>({ method: "textDocument/inlineValue" }).optional(),
/** /**
* A request to provide inlay hints in a document. The request's parameter is of * A request to provide inlay hints in a document. The request's parameter is of
* type {@link InlayHintsParams}, the response is of type * type {@link InlayHintsParams}, the response is of type
@ -7110,7 +7112,7 @@ export const api = contract({
* *
* @since 3.17.0 * @since 3.17.0
*/ */
textDocumentInlayHint: unverifiedRequest<InlayHintParams, (InlayHint)[] | null>({ method: "textDocument/inlayHint" }), textDocumentInlayHint: unverifiedRequest<InlayHintParams, (InlayHint)[] | null>({ method: "textDocument/inlayHint" }).optional(),
/** /**
* A request to resolve additional properties for an inlay hint. * A request to resolve additional properties for an inlay hint.
* The request's parameter is of type {@link InlayHint}, the response is * The request's parameter is of type {@link InlayHint}, the response is
@ -7118,19 +7120,19 @@ export const api = contract({
* *
* @since 3.17.0 * @since 3.17.0
*/ */
inlayHintResolve: unverifiedRequest<InlayHint, InlayHint>({ method: "inlayHint/resolve" }), inlayHintResolve: unverifiedRequest<InlayHint, InlayHint>({ method: "inlayHint/resolve" }).optional(),
/** /**
* The document diagnostic request definition. * The document diagnostic request definition.
* *
* @since 3.17.0 * @since 3.17.0
*/ */
textDocumentDiagnostic: unverifiedRequest<DocumentDiagnosticParams, DocumentDiagnosticReport>({ method: "textDocument/diagnostic" }), textDocumentDiagnostic: unverifiedRequest<DocumentDiagnosticParams, DocumentDiagnosticReport>({ method: "textDocument/diagnostic" }).optional(),
/** /**
* The workspace diagnostic request definition. * The workspace diagnostic request definition.
* *
* @since 3.17.0 * @since 3.17.0
*/ */
workspaceDiagnostic: unverifiedRequest<WorkspaceDiagnosticParams, WorkspaceDiagnosticReport>({ method: "workspace/diagnostic" }), workspaceDiagnostic: unverifiedRequest<WorkspaceDiagnosticParams, WorkspaceDiagnosticReport>({ method: "workspace/diagnostic" }).optional(),
/** /**
* A request to provide inline completions in a document. The request's parameter is of * A request to provide inline completions in a document. The request's parameter is of
* type {@link InlineCompletionParams}, the response is of type * type {@link InlineCompletionParams}, the response is of type
@ -7139,7 +7141,7 @@ export const api = contract({
* @since 3.18.0 * @since 3.18.0
* @proposed * @proposed
*/ */
textDocumentInlineCompletion: unverifiedRequest<InlineCompletionParams, InlineCompletionList | (InlineCompletionItem)[] | null>({ method: "textDocument/inlineCompletion" }), textDocumentInlineCompletion: unverifiedRequest<InlineCompletionParams, InlineCompletionList | (InlineCompletionItem)[] | null>({ method: "textDocument/inlineCompletion" }).optional(),
/** /**
* The initialize request is sent from the client to the server. * The initialize request is sent from the client to the server.
* It is sent once as the request after starting up the server. * It is sent once as the request after starting up the server.
@ -7147,14 +7149,14 @@ export const api = contract({
* the response if of type {@link InitializeResult} of a Thenable that * the response if of type {@link InitializeResult} of a Thenable that
* resolves to such. * resolves to such.
*/ */
initialize: unverifiedRequest<InitializeParams, InitializeResult>({ method: "initialize" }), initialize: unverifiedRequest<InitializeParams, InitializeResult>({ method: "initialize" }).optional(),
/** /**
* A shutdown request is sent from the client to the server. * A shutdown request is sent from the client to the server.
* It is sent once when the client decides to shutdown the * It is sent once when the client decides to shutdown the
* server. The only notification that is sent after a shutdown request * server. The only notification that is sent after a shutdown request
* is the exit event. * is the exit event.
*/ */
shutdown: unverifiedRequest<void, null>({ method: "shutdown" }), shutdown: unverifiedRequest<void, null>({ method: "shutdown" }).optional(),
/** /**
* A document will save request is sent from the client to the server before * A document will save request is sent from the client to the server before
* the document is actually saved. The request can return an array of TextEdits * the document is actually saved. The request can return an array of TextEdits
@ -7163,7 +7165,7 @@ export const api = contract({
* server constantly fails on this request. This is done to keep the save fast and * server constantly fails on this request. This is done to keep the save fast and
* reliable. * reliable.
*/ */
textDocumentWillSaveWaitUntil: unverifiedRequest<WillSaveTextDocumentParams, (TextEdit)[] | null>({ method: "textDocument/willSaveWaitUntil" }), textDocumentWillSaveWaitUntil: unverifiedRequest<WillSaveTextDocumentParams, (TextEdit)[] | null>({ method: "textDocument/willSaveWaitUntil" }).optional(),
/** /**
* Request to request completion at a given text document position. The request's * Request to request completion at a given text document position. The request's
* parameter is of type {@link TextDocumentPosition} the response * parameter is of type {@link TextDocumentPosition} the response
@ -7175,58 +7177,58 @@ export const api = contract({
* request. However, properties that are needed for the initial sorting and filtering, like `sortText`, * request. However, properties that are needed for the initial sorting and filtering, like `sortText`,
* `filterText`, `insertText`, and `textEdit`, must not be changed during resolve. * `filterText`, `insertText`, and `textEdit`, must not be changed during resolve.
*/ */
textDocumentCompletion: unverifiedRequest<CompletionParams, (CompletionItem)[] | CompletionList | null>({ method: "textDocument/completion" }), textDocumentCompletion: unverifiedRequest<CompletionParams, (CompletionItem)[] | CompletionList | null>({ method: "textDocument/completion" }).optional(),
/** /**
* Request to resolve additional information for a given completion item.The request's * Request to resolve additional information for a given completion item.The request's
* parameter is of type {@link CompletionItem} the response * parameter is of type {@link CompletionItem} the response
* is of type {@link CompletionItem} or a Thenable that resolves to such. * is of type {@link CompletionItem} or a Thenable that resolves to such.
*/ */
completionItemResolve: unverifiedRequest<CompletionItem, CompletionItem>({ method: "completionItem/resolve" }), completionItemResolve: unverifiedRequest<CompletionItem, CompletionItem>({ method: "completionItem/resolve" }).optional(),
/** /**
* Request to request hover information at a given text document position. The request's * Request to request hover information at a given text document position. The request's
* parameter is of type {@link TextDocumentPosition} the response is of * parameter is of type {@link TextDocumentPosition} the response is of
* type {@link Hover} or a Thenable that resolves to such. * type {@link Hover} or a Thenable that resolves to such.
*/ */
textDocumentHover: unverifiedRequest<HoverParams, Hover | null>({ method: "textDocument/hover" }), textDocumentHover: unverifiedRequest<HoverParams, Hover | null>({ method: "textDocument/hover" }).optional(),
textDocumentSignatureHelp: unverifiedRequest<SignatureHelpParams, SignatureHelp | null>({ method: "textDocument/signatureHelp" }), textDocumentSignatureHelp: unverifiedRequest<SignatureHelpParams, SignatureHelp | null>({ method: "textDocument/signatureHelp" }).optional(),
/** /**
* A request to resolve the definition location of a symbol at a given text * A request to resolve the definition location of a symbol at a given text
* document position. The request's parameter is of type {@link TextDocumentPosition} * document position. The request's parameter is of type {@link TextDocumentPosition}
* the response is of either type {@link Definition} or a typed array of * the response is of either type {@link Definition} or a typed array of
* {@link DefinitionLink} or a Thenable that resolves to such. * {@link DefinitionLink} or a Thenable that resolves to such.
*/ */
textDocumentDefinition: unverifiedRequest<DefinitionParams, Definition | (DefinitionLink)[] | null>({ method: "textDocument/definition" }), textDocumentDefinition: unverifiedRequest<DefinitionParams, Definition | (DefinitionLink)[] | null>({ method: "textDocument/definition" }).optional(),
/** /**
* A request to resolve project-wide references for the symbol denoted * A request to resolve project-wide references for the symbol denoted
* by the given text document position. The request's parameter is of * by the given text document position. The request's parameter is of
* type {@link ReferenceParams} the response is of type * type {@link ReferenceParams} the response is of type
* {@link Location Location[]} or a Thenable that resolves to such. * {@link Location Location[]} or a Thenable that resolves to such.
*/ */
textDocumentReferences: unverifiedRequest<ReferenceParams, (Location)[] | null>({ method: "textDocument/references" }), textDocumentReferences: unverifiedRequest<ReferenceParams, (Location)[] | null>({ method: "textDocument/references" }).optional(),
/** /**
* Request to resolve a {@link DocumentHighlight} for a given * Request to resolve a {@link DocumentHighlight} for a given
* text document position. The request's parameter is of type {@link TextDocumentPosition} * text document position. The request's parameter is of type {@link TextDocumentPosition}
* the request response is an array of type {@link DocumentHighlight} * the request response is an array of type {@link DocumentHighlight}
* or a Thenable that resolves to such. * or a Thenable that resolves to such.
*/ */
textDocumentDocumentHighlight: unverifiedRequest<DocumentHighlightParams, (DocumentHighlight)[] | null>({ method: "textDocument/documentHighlight" }), textDocumentDocumentHighlight: unverifiedRequest<DocumentHighlightParams, (DocumentHighlight)[] | null>({ method: "textDocument/documentHighlight" }).optional(),
/** /**
* A request to list all symbols found in a given text document. The request's * A request to list all symbols found in a given text document. The request's
* parameter is of type {@link TextDocumentIdentifier} the * parameter is of type {@link TextDocumentIdentifier} the
* response is of type {@link SymbolInformation SymbolInformation[]} or a Thenable * response is of type {@link SymbolInformation SymbolInformation[]} or a Thenable
* that resolves to such. * that resolves to such.
*/ */
textDocumentDocumentSymbol: unverifiedRequest<DocumentSymbolParams, (SymbolInformation)[] | (DocumentSymbol)[] | null>({ method: "textDocument/documentSymbol" }), textDocumentDocumentSymbol: unverifiedRequest<DocumentSymbolParams, (SymbolInformation)[] | (DocumentSymbol)[] | null>({ method: "textDocument/documentSymbol" }).optional(),
/** /**
* A request to provide commands for the given text document and range. * A request to provide commands for the given text document and range.
*/ */
textDocumentCodeAction: unverifiedRequest<CodeActionParams, (Command | CodeAction)[] | null>({ method: "textDocument/codeAction" }), textDocumentCodeAction: unverifiedRequest<CodeActionParams, (Command | CodeAction)[] | null>({ method: "textDocument/codeAction" }).optional(),
/** /**
* Request to resolve additional information for a given code action.The request's * Request to resolve additional information for a given code action.The request's
* parameter is of type {@link CodeAction} the response * parameter is of type {@link CodeAction} the response
* is of type {@link CodeAction} or a Thenable that resolves to such. * is of type {@link CodeAction} or a Thenable that resolves to such.
*/ */
codeActionResolve: unverifiedRequest<CodeAction, CodeAction>({ method: "codeAction/resolve" }), codeActionResolve: unverifiedRequest<CodeAction, CodeAction>({ method: "codeAction/resolve" }).optional(),
/** /**
* A request to list project-wide symbols matching the query string given * A request to list project-wide symbols matching the query string given
* by the {@link WorkspaceSymbolParams}. The response is * by the {@link WorkspaceSymbolParams}. The response is
@ -7238,66 +7240,66 @@ export const api = contract({
* `workspace.symbol.resolveSupport`. * `workspace.symbol.resolveSupport`.
* *
*/ */
workspaceSymbol: unverifiedRequest<WorkspaceSymbolParams, (SymbolInformation)[] | (WorkspaceSymbol)[] | null>({ method: "workspace/symbol" }), workspaceSymbol: unverifiedRequest<WorkspaceSymbolParams, (SymbolInformation)[] | (WorkspaceSymbol)[] | null>({ method: "workspace/symbol" }).optional(),
/** /**
* A request to resolve the range inside the workspace * A request to resolve the range inside the workspace
* symbol's location. * symbol's location.
* *
* @since 3.17.0 * @since 3.17.0
*/ */
workspaceSymbolResolve: unverifiedRequest<WorkspaceSymbol, WorkspaceSymbol>({ method: "workspaceSymbol/resolve" }), workspaceSymbolResolve: unverifiedRequest<WorkspaceSymbol, WorkspaceSymbol>({ method: "workspaceSymbol/resolve" }).optional(),
/** /**
* A request to provide code lens for the given text document. * A request to provide code lens for the given text document.
*/ */
textDocumentCodeLens: unverifiedRequest<CodeLensParams, (CodeLens)[] | null>({ method: "textDocument/codeLens" }), textDocumentCodeLens: unverifiedRequest<CodeLensParams, (CodeLens)[] | null>({ method: "textDocument/codeLens" }).optional(),
/** /**
* A request to resolve a command for a given code lens. * A request to resolve a command for a given code lens.
*/ */
codeLensResolve: unverifiedRequest<CodeLens, CodeLens>({ method: "codeLens/resolve" }), codeLensResolve: unverifiedRequest<CodeLens, CodeLens>({ method: "codeLens/resolve" }).optional(),
/** /**
* A request to provide document links * A request to provide document links
*/ */
textDocumentDocumentLink: unverifiedRequest<DocumentLinkParams, (DocumentLink)[] | null>({ method: "textDocument/documentLink" }), textDocumentDocumentLink: unverifiedRequest<DocumentLinkParams, (DocumentLink)[] | null>({ method: "textDocument/documentLink" }).optional(),
/** /**
* Request to resolve additional information for a given document link. The request's * Request to resolve additional information for a given document link. The request's
* parameter is of type {@link DocumentLink} the response * parameter is of type {@link DocumentLink} the response
* is of type {@link DocumentLink} or a Thenable that resolves to such. * is of type {@link DocumentLink} or a Thenable that resolves to such.
*/ */
documentLinkResolve: unverifiedRequest<DocumentLink, DocumentLink>({ method: "documentLink/resolve" }), documentLinkResolve: unverifiedRequest<DocumentLink, DocumentLink>({ method: "documentLink/resolve" }).optional(),
/** /**
* A request to format a whole document. * A request to format a whole document.
*/ */
textDocumentFormatting: unverifiedRequest<DocumentFormattingParams, (TextEdit)[] | null>({ method: "textDocument/formatting" }), textDocumentFormatting: unverifiedRequest<DocumentFormattingParams, (TextEdit)[] | null>({ method: "textDocument/formatting" }).optional(),
/** /**
* A request to format a range in a document. * A request to format a range in a document.
*/ */
textDocumentRangeFormatting: unverifiedRequest<DocumentRangeFormattingParams, (TextEdit)[] | null>({ method: "textDocument/rangeFormatting" }), textDocumentRangeFormatting: unverifiedRequest<DocumentRangeFormattingParams, (TextEdit)[] | null>({ method: "textDocument/rangeFormatting" }).optional(),
/** /**
* A request to format ranges in a document. * A request to format ranges in a document.
* *
* @since 3.18.0 * @since 3.18.0
* @proposed * @proposed
*/ */
textDocumentRangesFormatting: unverifiedRequest<DocumentRangesFormattingParams, (TextEdit)[] | null>({ method: "textDocument/rangesFormatting" }), textDocumentRangesFormatting: unverifiedRequest<DocumentRangesFormattingParams, (TextEdit)[] | null>({ method: "textDocument/rangesFormatting" }).optional(),
/** /**
* A request to format a document on type. * A request to format a document on type.
*/ */
textDocumentOnTypeFormatting: unverifiedRequest<DocumentOnTypeFormattingParams, (TextEdit)[] | null>({ method: "textDocument/onTypeFormatting" }), textDocumentOnTypeFormatting: unverifiedRequest<DocumentOnTypeFormattingParams, (TextEdit)[] | null>({ method: "textDocument/onTypeFormatting" }).optional(),
/** /**
* A request to rename a symbol. * A request to rename a symbol.
*/ */
textDocumentRename: unverifiedRequest<RenameParams, WorkspaceEdit | null>({ method: "textDocument/rename" }), textDocumentRename: unverifiedRequest<RenameParams, WorkspaceEdit | null>({ method: "textDocument/rename" }).optional(),
/** /**
* A request to test and perform the setup necessary for a rename. * A request to test and perform the setup necessary for a rename.
* *
* @since 3.16 - support for default behavior * @since 3.16 - support for default behavior
*/ */
textDocumentPrepareRename: unverifiedRequest<PrepareRenameParams, PrepareRenameResult | null>({ method: "textDocument/prepareRename" }), textDocumentPrepareRename: unverifiedRequest<PrepareRenameParams, PrepareRenameResult | null>({ method: "textDocument/prepareRename" }).optional(),
/** /**
* A request send from the client to the server to execute a command. The request might return * A request send from the client to the server to execute a command. The request might return
* a workspace edit which the client will apply to the workspace. * a workspace edit which the client will apply to the workspace.
*/ */
workspaceExecuteCommand: unverifiedRequest<ExecuteCommandParams, LSPAny | null>({ method: "workspace/executeCommand" }), workspaceExecuteCommand: unverifiedRequest<ExecuteCommandParams, LSPAny | null>({ method: "workspace/executeCommand" }).optional(),
/** /**
* The `workspace/didChangeWorkspaceFolders` notification is sent from the client to the server when the workspace * The `workspace/didChangeWorkspaceFolders` notification is sent from the client to the server when the workspace
* folder configuration changes. * folder configuration changes.

View file

@ -1,5 +1,6 @@
import './style.css'; import './style.css';
import * as monaco from '../../src/editor/editor.main'; import * as monaco from '../../src/editor/editor.main';
import type { WorkerImpl } from './worker';
monaco.languages.register({ id: 'typescript' }); monaco.languages.register({ id: 'typescript' });
@ -11,3 +12,33 @@ const editor = monaco.editor.create(document.getElementById('root')!, {
language: 'typescript', language: 'typescript',
theme: 'vs-dark', theme: 'vs-dark',
}); });
export class ClientImpl extends Disposable {
private readonly _workerImpl: WorkerImpl;
constructor() {
super();
const w = new Worker(new URL('./worker.ts', import.meta.url), { type: 'module' });
const t = monaco.lsp.createTransportToWorker(w);
const client = this._register(new monaco.lsp.MonacoLspClient(t));
this._workerImpl = getRemoteObject<WorkerImpl>(client.channel);
this._register(registerLocalObject(client.channel, this));
this._workerImpl.$setTextToWarnFor('warn', 'This is a warning from the LSP server!');
// this should now see all text documents
this._workerImpl.$getDiagnosticsCount().then(count => {
console.log(`Diagnostics count: ${count}`);
});
}
$callback(): void {
console.log('Callback from server received!');
}
}

View file

@ -0,0 +1,117 @@
import * as m from '@vscode/monaco-lsp-client/src/types';
import { createTransportFromWorkerToParent } from '@hediet/json-rpc-browser';
import { TypedChannel, IMessageTransport } from '@hediet/json-rpc';
import type { ClientImpl } from './main';
class LspConnection {
constructor(
public readonly server: typeof client,
public readonly channel: TypedChannel,
) { }
}
class TextDocuments {
constructor(connection: LspConnection) {
const { client } = m.api.registerServer(connection.channel, {
textDocumentDidOpen: async (arg, info) => {
arg.textDocument.text;
},
textDocumentDidClose: async (arg, info) => {
arg.textDocument.uri;
},
textDocumentDidChange: async (arg, info) => {
arg.contentChanges;
arg.textDocument.uri;
},
});
}
getTextModel(uri: string): TextModel | null {
return null;
}
getTextModelOrThrow(uri: string | m.TextDocumentIdentifier): TextModel {
return null;
}
}
class TextModel {
getValue(): string {
}
}
class LspServer {
public static create(transport: IMessageTransport): LspServer { }
public readonly textDocuments: TextDocuments;
public readonly server: typeof m.api.TClientInterface;
public readonly channel: TypedChannel;
constructor(
channel: TypedChannel,
) {
}
public startListen(): void { }
}
const channel = TypedChannel.fromTransport(transport);
const { client } = m.api.registerServer(channel, {
initialize: async (arg, info) => {
return {
capabilities: {
textDocumentSync: m.TextDocumentSyncKind.Full,
diagnosticProvider: {
interFileDependencies: false,
workspaceDiagnostics: false,
},
}
};
},
});
export class WorkerImpl extends Disposable {
private readonly _clientImpl: ClientImpl;
private readonly _server: LspServer;
constructor() {
super();
this._server = LspServer.create(createTransportFromWorkerToParent());
this._clientImpl = getRemoteObject<ClientImpl>(server.channel);
this._register(registerLocalObject(server.channel, this));
this._clientImpl.$callback();
m.api.registerServer(this._server.channel, {
textDocumentDiagnostic: async (arg) => {
const doc = this._server.textDocuments.getTextModelOrThrow(arg.textDocument);
return {
items: [],
kind: "full",
};
},
});
}
$setTextToWarnFor(text: string, message: string): void {
this._server.server.workspaceDiagnosticRefresh();
}
$getDiagnosticsCount(): Promise<number> {
return 0;
}
}