Skip to content

Commit

Permalink
perf(lsp): fix redundant serialization of sources (denoland#21435)
Browse files Browse the repository at this point in the history
  • Loading branch information
nayeemrmn committed Dec 2, 2023
1 parent f29075a commit 0f990d9
Showing 1 changed file with 23 additions and 27 deletions.
50 changes: 23 additions & 27 deletions cli/tsc/99_main_compiler.js
Original file line number Diff line number Diff line change
Expand Up @@ -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}".`,
Expand Down Expand Up @@ -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)) {
Expand All @@ -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 (fileInfo) {
scriptVersionCache.set(specifier, fileInfo.version);
return ts.ScriptSnapshot.fromString(fileInfo.data);
} else {
return undefined;
if (!sourceFile) {
sourceFile = this.getSourceFile(
specifier,
specifier.endsWith(".json")
? ts.ScriptTarget.JSON
: ts.ScriptTarget.ESNext,
);
}
if (sourceFile) {
return ts.ScriptSnapshot.fromString(sourceFile.text);
}
return undefined;
},
};

Expand Down

0 comments on commit 0f990d9

Please sign in to comment.