diff options
author | Nayeem Rahman <nayeemrmn99@gmail.com> | 2023-12-02 23:28:46 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-02 23:28:46 +0000 |
commit | 0f990d9d927a0b25bc0eac32f2e7eee7c0460693 (patch) | |
tree | ac766d0da80a8bb6ca45ab4ffe9e228c790185df /cli/tsc/99_main_compiler.js | |
parent | f29075ae4cf435032e410d582bdfa22b031e802c (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.js | 50 |
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; }, }; |