summaryrefslogtreecommitdiff
path: root/cli/tsc/99_main_compiler.js
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2023-12-02 23:28:46 +0000
committerGitHub <noreply@github.com>2023-12-02 23:28:46 +0000
commit0f990d9d927a0b25bc0eac32f2e7eee7c0460693 (patch)
treeac766d0da80a8bb6ca45ab4ffe9e228c790185df /cli/tsc/99_main_compiler.js
parentf29075ae4cf435032e410d582bdfa22b031e802c (diff)
perf(lsp): fix redundant serialization of sources (#21435)
Diffstat (limited to 'cli/tsc/99_main_compiler.js')
-rw-r--r--cli/tsc/99_main_compiler.js50
1 files changed, 23 insertions, 27 deletions
diff --git a/cli/tsc/99_main_compiler.js b/cli/tsc/99_main_compiler.js
index 6861e1744..b72a3b0ef 100644
--- a/cli/tsc/99_main_compiler.js
+++ b/cli/tsc/99_main_compiler.js
@@ -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 (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;
},
};