From d7dabe8005283033654e56d4e3038a2363317661 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Wed, 3 May 2023 11:07:57 -0700 Subject: [PATCH 1/4] Replace errorType return with Debug fail in checkExpressionWorker --- src/compiler/checker.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 7bf8689f1d455..ba454d7d3d61e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -37955,8 +37955,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { return checkJsxAttributes(node as JsxAttributes, checkMode); case SyntaxKind.JsxOpeningElement: Debug.fail("Shouldn't ever directly check a JsxOpeningElement"); + default: + return Debug.failBadSyntaxKind(node, "Unhandled expression node kind in checkExpressionWorker"); } - return errorType; } // DECLARATION AND STATEMENT TYPE CHECKING From d36de3584be1fcd541d46f46b2fdc2a054e979c0 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Wed, 3 May 2023 12:13:35 -0700 Subject: [PATCH 2/4] Add `ImportKeyword` to checkExpressionWorker even though its not flagged as an expression by isExpressionNode --- src/compiler/checker.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index ba454d7d3d61e..4777e944766d0 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -37954,7 +37954,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { case SyntaxKind.JsxAttributes: return checkJsxAttributes(node as JsxAttributes, checkMode); case SyntaxKind.JsxOpeningElement: - Debug.fail("Shouldn't ever directly check a JsxOpeningElement"); + return Debug.fail("Shouldn't ever directly check a JsxOpeningElement"); + case SyntaxKind.ImportKeyword: + return anyType; // LHS of ImportCall default: return Debug.failBadSyntaxKind(node, "Unhandled expression node kind in checkExpressionWorker"); } From fc0ae9535bf3f9d240dac7af427045b80e778414 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Wed, 3 May 2023 12:40:27 -0700 Subject: [PATCH 3/4] Add a couple more non-explicit entries to checkExpressionWorker --- src/compiler/checker.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 4777e944766d0..d817ac5fd6646 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -37957,6 +37957,10 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { return Debug.fail("Shouldn't ever directly check a JsxOpeningElement"); case SyntaxKind.ImportKeyword: return anyType; // LHS of ImportCall + case SyntaxKind.JsxNamespacedName: + return errorType; // FIXME: Remove when JsxNamespacedName is no longer used as an expression + case SyntaxKind.MissingDeclaration: + return errorType; // invalid decorated expression default: return Debug.failBadSyntaxKind(node, "Unhandled expression node kind in checkExpressionWorker"); } From 7dfe497bd5c0ddb8e6bc0a74b66da27511267875 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Wed, 3 May 2023 12:49:13 -0700 Subject: [PATCH 4/4] Make invalid syntax uses of ImportKeyword expressions the errorType --- src/compiler/checker.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index d817ac5fd6646..29734a3a902dc 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -546,6 +546,7 @@ import { isImportDeclaration, isImportEqualsDeclaration, isImportKeyword, + isImportMeta, isImportOrExportSpecifier, isImportSpecifier, isImportTypeNode, @@ -37956,7 +37957,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { case SyntaxKind.JsxOpeningElement: return Debug.fail("Shouldn't ever directly check a JsxOpeningElement"); case SyntaxKind.ImportKeyword: - return anyType; // LHS of ImportCall + return isImportCall(node.parent) || isImportMeta(node.parent) ? anyType : errorType; // LHS of ImportCall or ImportMeta or invalid expression TODO: Should this have a better type? case SyntaxKind.JsxNamespacedName: return errorType; // FIXME: Remove when JsxNamespacedName is no longer used as an expression case SyntaxKind.MissingDeclaration: