mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-20 09:35:38 -05:00
* Fix initial build breaks from 1.67 merge (#2514) * Update yarn lock files * Update build scripts * Fix tsconfig * Build breaks * WIP * Update yarn lock files * Misc breaks * Updates to package.json * Breaks * Update yarn * Fix breaks * Breaks * Build breaks * Breaks * Breaks * Breaks * Breaks * Breaks * Missing file * Breaks * Breaks * Breaks * Breaks * Breaks * Fix several runtime breaks (#2515) * Missing files * Runtime breaks * Fix proxy ordering issue * Remove commented code * Fix breaks with opening query editor * Fix post merge break * Updates related to setup build and other breaks (#2516) * Fix bundle build issues * Update distro * Fix distro merge and update build JS files * Disable pipeline steps * Remove stats call * Update license name * Make new RPM dependencies a warning * Fix extension manager version checks * Update JS file * Fix a few runtime breaks * Fixes * Fix runtime issues * Fix build breaks * Update notebook tests (part 1) * Fix broken tests * Linting errors * Fix hygiene * Disable lint rules * Bump distro * Turn off smoke tests * Disable integration tests * Remove failing "activate" test * Remove failed test assertion * Disable other broken test * Disable query history tests * Disable extension unit tests * Disable failing tasks
83 lines
2.6 KiB
TypeScript
83 lines
2.6 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import { TextDocument } from 'vscode-languageserver';
|
|
|
|
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.Timer | undefined = undefined;
|
|
if (cleanupIntervalTimeInSec > 0) {
|
|
cleanupInterval = setInterval(() => {
|
|
let cutoffTime = Date.now() - cleanupIntervalTimeInSec * 1000;
|
|
let uris = Object.keys(languageModels);
|
|
for (let uri of uris) {
|
|
let languageModelInfo = languageModels[uri];
|
|
if (languageModelInfo.cTime < cutoffTime) {
|
|
delete languageModels[uri];
|
|
nModels--;
|
|
}
|
|
}
|
|
}, cleanupIntervalTimeInSec * 1000);
|
|
}
|
|
|
|
return {
|
|
get(document: TextDocument): T {
|
|
let version = document.version;
|
|
let languageId = document.languageId;
|
|
let languageModelInfo = languageModels[document.uri];
|
|
if (languageModelInfo && languageModelInfo.version === version && languageModelInfo.languageId === languageId) {
|
|
languageModelInfo.cTime = Date.now();
|
|
return languageModelInfo.languageModel;
|
|
}
|
|
let 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 (let uri in languageModels) {
|
|
let languageModelInfo = languageModels[uri];
|
|
if (languageModelInfo.cTime < oldestTime) {
|
|
oldestUri = uri;
|
|
oldestTime = languageModelInfo.cTime;
|
|
}
|
|
}
|
|
if (oldestUri) {
|
|
delete languageModels[oldestUri];
|
|
nModels--;
|
|
}
|
|
}
|
|
return languageModel;
|
|
|
|
},
|
|
onDocumentRemoved(document: TextDocument) {
|
|
let uri = document.uri;
|
|
if (languageModels[uri]) {
|
|
delete languageModels[uri];
|
|
nModels--;
|
|
}
|
|
},
|
|
dispose() {
|
|
if (typeof cleanupInterval !== 'undefined') {
|
|
clearInterval(cleanupInterval);
|
|
cleanupInterval = undefined;
|
|
languageModels = {};
|
|
nModels = 0;
|
|
}
|
|
}
|
|
};
|
|
}
|