mirror of
https://github.com/microsoft/vscode.git
synced 2025-12-26 13:19:42 +00:00
* chore: update electron@29.1.0
* chore: update typings to 20.x
* chore: bump electron@29.1.5
* ci: fix crash in compiling extensions-ci
* chore: disable .d.ts check for build/
$ ../node_modules/.bin/tsc -p tsconfig.build.json
node_modules/@types/chokidar/index.d.ts:21:14 - error TS2420: Class 'import("/Users/demohan/github/vscode/build/node_modules/@types/chokidar/index").FSWatcher' incorrectly implements interface 'import("fs").FSWatcher'.
Type 'FSWatcher' is missing the following properties from type 'FSWatcher': ref, unref
21 export class FSWatcher extends EventEmitter implements fs.FSWatcher {
~~~~~~~~~
node_modules/chokidar/types/index.d.ts:8:14 - error TS2420: Class 'import("/Users/demohan/github/vscode/build/node_modules/chokidar/types/index").FSWatcher' incorrectly implements interface 'import("fs").FSWatcher'.
Type 'FSWatcher' is missing the following properties from type 'FSWatcher': ref, unref
8 export class FSWatcher extends EventEmitter implements fs.FSWatcher {
~~~~~~~~~
Found 2 errors in 2 files.
Errors Files
1 node_modules/@types/chokidar/index.d.ts:21
1 node_modules/chokidar/types/index.d.ts:8
Refs a0f9e09f64
* chore: update core types
* temp: fix layer validation
* chore: update nodejs checksums
* ci: use latest v20 LTS for missing node-gyp
Refs eacec5f490
* ci: define LIBCPP_HARDENING_MODE
* ci: fix crash in vscode-web-min-ci
* chore: update rpm deps-list
* chore: bump tree-sitter-typescript@0.20.5
* chore: bump electron@29.3.0
* chore: bump electron@29.3.1
* chore: update rpm deps-list for x86_64
* ci: disable io_uring UV backend on linux
* ci: disable io_uring backend for oss as well
* chore: update typings to 20.x
* ci: add TODO for io_uring workaround
* chore: bump distro
* chore: update preinstall node version checks
* chore: update @types/gulp
Refs https://github.com/microsoft/vscode/issues/212442
* ci: disable io_uring in more test suites
83 lines
2.6 KiB
TypeScript
83 lines
2.6 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import { TextDocument } from 'vscode-html-languageservice';
|
|
|
|
export interface LanguageModelCache<T> {
|
|
get(document: TextDocument): T;
|
|
onDocumentRemoved(document: TextDocument): void;
|
|
dispose(): void;
|
|
}
|
|
|
|
export function getLanguageModelCache<T>(maxEntries: number, cleanupIntervalTimeInSec: number, parse: (document: TextDocument) => T): LanguageModelCache<T> {
|
|
let languageModels: { [uri: string]: { version: number; languageId: string; cTime: number; languageModel: T } } = {};
|
|
let nModels = 0;
|
|
|
|
let cleanupInterval: NodeJS.Timeout | undefined = undefined;
|
|
if (cleanupIntervalTimeInSec > 0) {
|
|
cleanupInterval = setInterval(() => {
|
|
const cutoffTime = Date.now() - cleanupIntervalTimeInSec * 1000;
|
|
const uris = Object.keys(languageModels);
|
|
for (const uri of uris) {
|
|
const languageModelInfo = languageModels[uri];
|
|
if (languageModelInfo.cTime < cutoffTime) {
|
|
delete languageModels[uri];
|
|
nModels--;
|
|
}
|
|
}
|
|
}, cleanupIntervalTimeInSec * 1000);
|
|
}
|
|
|
|
return {
|
|
get(document: TextDocument): T {
|
|
const version = document.version;
|
|
const languageId = document.languageId;
|
|
const languageModelInfo = languageModels[document.uri];
|
|
if (languageModelInfo && languageModelInfo.version === version && languageModelInfo.languageId === languageId) {
|
|
languageModelInfo.cTime = Date.now();
|
|
return languageModelInfo.languageModel;
|
|
}
|
|
const languageModel = parse(document);
|
|
languageModels[document.uri] = { languageModel, version, languageId, cTime: Date.now() };
|
|
if (!languageModelInfo) {
|
|
nModels++;
|
|
}
|
|
|
|
if (nModels === maxEntries) {
|
|
let oldestTime = Number.MAX_VALUE;
|
|
let oldestUri = null;
|
|
for (const uri in languageModels) {
|
|
const languageModelInfo = languageModels[uri];
|
|
if (languageModelInfo.cTime < oldestTime) {
|
|
oldestUri = uri;
|
|
oldestTime = languageModelInfo.cTime;
|
|
}
|
|
}
|
|
if (oldestUri) {
|
|
delete languageModels[oldestUri];
|
|
nModels--;
|
|
}
|
|
}
|
|
return languageModel;
|
|
|
|
},
|
|
onDocumentRemoved(document: TextDocument) {
|
|
const uri = document.uri;
|
|
if (languageModels[uri]) {
|
|
delete languageModels[uri];
|
|
nModels--;
|
|
}
|
|
},
|
|
dispose() {
|
|
if (typeof cleanupInterval !== 'undefined') {
|
|
clearInterval(cleanupInterval);
|
|
cleanupInterval = undefined;
|
|
languageModels = {};
|
|
nModels = 0;
|
|
}
|
|
}
|
|
};
|
|
}
|