Skip to content

Commit 9d45dd3

Browse files
filipesilvaalexeagle
authored andcommitted
Do TseTse checks with typechecker later
The typechecker is known to be slow to create due to microsoft/TypeScript#27997 By moving the non-typechecker checks earlier in the process, I was able to observe significant savings in the `perfTrace.wrap` total times: - `CheckReturnValueRule`: 1,036ms, down from 2,102ms - `MustUsePromisesRule`: 119ms, down from 1,174ms Closes bazel-contrib#359 PiperOrigin-RevId: 225844645
1 parent f7b3b1a commit 9d45dd3

File tree

2 files changed

+13
-9
lines changed

2 files changed

+13
-9
lines changed

packages/concatjs/third_party/google3/rules_typescript/internal/tsetse/rules/check_return_value_rule.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,12 @@ export class Rule extends AbstractRule {
5555
}
5656

5757
function checkCallExpression(checker: Checker, node: ts.CallExpression) {
58+
// Short-circuit before using the typechecker if possible, as its expensive.
59+
// Workaround for https://github.com/Microsoft/TypeScript/issues/27997
60+
if (tsutils.isExpressionValueUsed(node)) {
61+
return;
62+
}
63+
5864
// Check if this CallExpression is one of the well-known functions and returns
5965
// a non-void value that is unused.
6066
const signature = checker.typeChecker.getResolvedSignature(node);
@@ -70,9 +76,6 @@ function checkCallExpression(checker: Checker, node: ts.CallExpression) {
7076
!hasCheckReturnValueJsDoc(node, checker.typeChecker)) {
7177
return;
7278
}
73-
if (tsutils.isExpressionValueUsed(node)) {
74-
return;
75-
}
7679

7780
checker.addFailureAtNode(node, FAILURE_STRING);
7881
}

packages/concatjs/third_party/google3/rules_typescript/internal/tsetse/rules/must_use_promises_rule.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ export class Rule extends AbstractRule {
2424
}
2525

2626
function checkCallExpression(checker: Checker, node: ts.CallExpression) {
27+
// Short-circuit before using the typechecker if possible, as its expensive.
28+
// Workaround for https://github.com/Microsoft/TypeScript/issues/27997
29+
if (tsutils.isExpressionValueUsed(node) || !inAsyncFunction(node)) {
30+
return;
31+
}
32+
2733
const signature = checker.typeChecker.getResolvedSignature(node);
2834
if (signature === undefined) {
2935
return;
@@ -34,12 +40,7 @@ function checkCallExpression(checker: Checker, node: ts.CallExpression) {
3440
return;
3541
}
3642

37-
if (tsutils.isExpressionValueUsed(node)) {
38-
return;
39-
}
40-
41-
if (inAsyncFunction(node) &&
42-
tsutils.isThenableType(checker.typeChecker, node)) {
43+
if (tsutils.isThenableType(checker.typeChecker, node)) {
4344
checker.addFailureAtNode(node, FAILURE_STRING);
4445
}
4546
}

0 commit comments

Comments
 (0)