1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-23 07:44:48 -05:00

refactor(lsp): memoize script versions per tsc request (#10601)

This commit is contained in:
Kitson Kelly 2021-05-18 08:51:35 +10:00 committed by Bert Belder
parent 7ad4a366cb
commit ef6d69c314
No known key found for this signature in database
GPG key ID: 7A77887B2E2ED461

View file

@ -72,6 +72,9 @@ delete Object.prototype.__proto__;
/** @type {Map<string, ts.SourceFile>} */
const sourceFileCache = new Map();
/** @type {Map<string, string>} */
const scriptVersionCache = new Map();
/** @param {ts.DiagnosticRelatedInformation} diagnostic */
function fromRelatedInformation({
start,
@ -368,7 +371,15 @@ delete Object.prototype.__proto__;
if (sourceFile) {
return sourceFile.version ?? "1";
}
return core.opSync("op_script_version", { specifier });
// tsc neurotically requests the script version multiple times even though
// it can't possibly have changed, so we will memoize it on a per request
// basis.
if (scriptVersionCache.has(specifier)) {
return scriptVersionCache.get(specifier);
}
const scriptVersion = core.opSync("op_script_version", { specifier });
scriptVersionCache.set(specifier, scriptVersion);
return scriptVersion;
},
getScriptSnapshot(specifier) {
debug(`host.getScriptSnapshot("${specifier}")`);
@ -386,8 +397,7 @@ delete Object.prototype.__proto__;
},
};
}
/** @type {string | undefined} */
const version = core.opSync("op_script_version", { specifier });
const version = host.getScriptVersion(specifier);
if (version != null) {
return new ScriptSnapshot(specifier, version);
}
@ -526,6 +536,8 @@ delete Object.prototype.__proto__;
*/
function serverRequest({ id, ...request }) {
debug(`serverRequest()`, { id, ...request });
// evict all memoized source file versions
scriptVersionCache.clear();
switch (request.method) {
case "configure": {
const { options, errors } = ts