Merge pull request #32847 from microsoft/jsEditPerf

Check cancellation token in function/arrow/class expresisons, Cleanup after open file only if new file is opened in the request
This commit is contained in:
Sheetal Nandi
2019-08-13 12:51:46 -07:00
committed by GitHub
2 changed files with 23 additions and 9 deletions

View File

@@ -25271,7 +25271,18 @@ namespace ts {
}
function checkExpressionWorker(node: Expression | QualifiedName, checkMode: CheckMode | undefined, forceTuple?: boolean): Type {
switch (node.kind) {
const kind = node.kind;
if (cancellationToken) {
// Only bother checking on a few construct kinds. We don't want to be excessively
// hitting the cancellation token on every node we check.
switch (kind) {
case SyntaxKind.ClassExpression:
case SyntaxKind.FunctionExpression:
case SyntaxKind.ArrowFunction:
cancellationToken.throwIfCancellationRequested();
}
}
switch (kind) {
case SyntaxKind.Identifier:
return checkIdentifier(<Identifier>node);
case SyntaxKind.ThisKeyword:

View File

@@ -2705,8 +2705,6 @@ namespace ts.server {
// It was then postponed to cleanup these script infos so that they can be reused if
// the file from that old project is reopened because of opening file from here.
this.removeOrphanScriptInfos();
this.printProjects();
}
openClientFileWithNormalizedPath(fileName: NormalizedPath, fileContent?: string, scriptKind?: ScriptKind, hasMixedContent?: boolean, projectRootPath?: NormalizedPath): OpenConfiguredProjectResult {
@@ -2714,6 +2712,7 @@ namespace ts.server {
const { defaultConfigProject, ...result } = this.assignProjectToOpenedScriptInfo(info);
this.cleanupAfterOpeningFile(defaultConfigProject);
this.telemetryOnOpenFile(info);
this.printProjects();
return result;
}
@@ -2914,12 +2913,16 @@ namespace ts.server {
this.assignOrphanScriptInfosToInferredProject();
}
// Cleanup projects
this.cleanupAfterOpeningFile(defaultConfigProjects);
// Telemetry
forEach(openScriptInfos, info => this.telemetryOnOpenFile(info));
this.printProjects();
if (openScriptInfos) {
// Cleanup projects
this.cleanupAfterOpeningFile(defaultConfigProjects);
// Telemetry
openScriptInfos.forEach(info => this.telemetryOnOpenFile(info));
this.printProjects();
}
else if (length(closedFiles)) {
this.printProjects();
}
}
/* @internal */