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

perf(lsp): fix redundant serialization of sources (#21435)

This commit is contained in:
Nayeem Rahman 2023-12-02 23:28:46 +00:00 committed by GitHub
parent f29075ae4c
commit 0f990d9d92
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -555,9 +555,13 @@ delete Object.prototype.__proto__;
}
/** @type {{ data: string; scriptKind: ts.ScriptKind; version: string; }} */
const { data, scriptKind, version } = ops.op_load(
const fileInfo = ops.op_load(
{ specifier },
);
if (!fileInfo) {
return undefined;
}
const { data, scriptKind, version } = fileInfo;
assert(
data != null,
`"data" is unexpectedly null for "${specifier}".`,
@ -713,10 +717,6 @@ delete Object.prototype.__proto__;
if (logDebug) {
debug(`host.getScriptVersion("${specifier}")`);
}
const sourceFile = sourceFileCache.get(specifier);
if (sourceFile) {
return sourceFile.version ?? "1";
}
// tsc 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)) {
@ -730,30 +730,26 @@ delete Object.prototype.__proto__;
if (logDebug) {
debug(`host.getScriptSnapshot("${specifier}")`);
}
const sourceFile = sourceFileCache.get(specifier);
if (sourceFile) {
return {
getText(start, end) {
return sourceFile.text.substring(start, end);
},
getLength() {
return sourceFile.text.length;
},
getChangeRange() {
return undefined;
},
};
let sourceFile = sourceFileCache.get(specifier);
if (
!specifier.startsWith(ASSETS_URL_PREFIX) &&
sourceFile?.version != this.getScriptVersion(specifier)
) {
sourceFileCache.delete(specifier);
sourceFile = undefined;
}
const fileInfo = ops.op_load(
{ specifier },
if (!sourceFile) {
sourceFile = this.getSourceFile(
specifier,
specifier.endsWith(".json")
? ts.ScriptTarget.JSON
: ts.ScriptTarget.ESNext,
);
if (fileInfo) {
scriptVersionCache.set(specifier, fileInfo.version);
return ts.ScriptSnapshot.fromString(fileInfo.data);
} else {
return undefined;
}
if (sourceFile) {
return ts.ScriptSnapshot.fromString(sourceFile.text);
}
return undefined;
},
};