diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 6b900302c96df..27a6d13642c67 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -6877,7 +6877,8 @@ namespace Parser { if ( token() === SyntaxKind.VarKeyword || token() === SyntaxKind.LetKeyword || token() === SyntaxKind.ConstKeyword || token() === SyntaxKind.UsingKeyword && lookAhead(nextTokenIsBindingIdentifierOrStartOfDestructuringOnSameLineDisallowOf) || - token() === SyntaxKind.AwaitKeyword && lookAhead(nextTokenIsUsingKeywordThenBindingIdentifierOrStartOfObjectDestructuringOnSameLineDisallowOf) + // this one is meant to allow of + token() === SyntaxKind.AwaitKeyword && lookAhead(nextTokenIsUsingKeywordThenBindingIdentifierOrStartOfObjectDestructuringOnSameLine) ) { initializer = parseVariableDeclarationList(/*inForStatementInitializer*/ true); } @@ -7293,10 +7294,6 @@ namespace Parser { return lookAhead(nextTokenIsBindingIdentifierOrStartOfDestructuringOnSameLine); } - function nextTokenIsUsingKeywordThenBindingIdentifierOrStartOfObjectDestructuringOnSameLineDisallowOf() { - return nextTokenIsUsingKeywordThenBindingIdentifierOrStartOfObjectDestructuringOnSameLine(/*disallowOf*/ true); - } - function nextTokenIsUsingKeywordThenBindingIdentifierOrStartOfObjectDestructuringOnSameLine(disallowOf?: boolean) { if (nextToken() === SyntaxKind.UsingKeyword) { return nextTokenIsBindingIdentifierOrStartOfDestructuringOnSameLine(disallowOf); diff --git a/tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf.2.errors.txt b/tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf.2.errors.txt new file mode 100644 index 0000000000000..1b61fcea5df34 --- /dev/null +++ b/tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf.2.errors.txt @@ -0,0 +1,15 @@ +awaitUsingDeclarationsInForAwaitOf.2.ts(4,7): error TS1431: 'for await' loops are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module. +awaitUsingDeclarationsInForAwaitOf.2.ts(4,32): error TS2448: Block-scoped variable 'of' used before its declaration. + + +==== awaitUsingDeclarationsInForAwaitOf.2.ts (2 errors) ==== + // https://github.com/microsoft/TypeScript/issues/55555 + + { + for await (await using of of of) {}; + ~~~~~ +!!! error TS1431: 'for await' loops are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module. + ~~ +!!! error TS2448: Block-scoped variable 'of' used before its declaration. +!!! related TS2728 awaitUsingDeclarationsInForAwaitOf.2.ts:4:26: 'of' is declared here. + } \ No newline at end of file diff --git a/tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf.2.js b/tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf.2.js new file mode 100644 index 0000000000000..4d58642579491 --- /dev/null +++ b/tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf.2.js @@ -0,0 +1,15 @@ +//// [tests/cases/conformance/statements/VariableStatements/usingDeclarations/awaitUsingDeclarationsInForAwaitOf.2.ts] //// + +//// [awaitUsingDeclarationsInForAwaitOf.2.ts] +// https://github.com/microsoft/TypeScript/issues/55555 + +{ + for await (await using of of of) {}; +} + +//// [awaitUsingDeclarationsInForAwaitOf.2.js] +// https://github.com/microsoft/TypeScript/issues/55555 +{ + for await (await using of of of) { } + ; +} diff --git a/tests/baselines/reference/awaitUsingDeclarationsInForOf.2.errors.txt b/tests/baselines/reference/awaitUsingDeclarationsInForOf.2.errors.txt deleted file mode 100644 index 2fd47176982f0..0000000000000 --- a/tests/baselines/reference/awaitUsingDeclarationsInForOf.2.errors.txt +++ /dev/null @@ -1,20 +0,0 @@ -awaitUsingDeclarationsInForOf.2.ts(2,10): error TS2487: The left-hand side of a 'for...of' statement must be a variable or a property access. -awaitUsingDeclarationsInForOf.2.ts(2,16): error TS2304: Cannot find name 'using'. -awaitUsingDeclarationsInForOf.2.ts(2,25): error TS2304: Cannot find name 'of'. -awaitUsingDeclarationsInForOf.2.ts(2,29): error TS1011: An element access expression should take an argument. - - -==== awaitUsingDeclarationsInForOf.2.ts (4 errors) ==== - async function main() { - for (await using of of []) { - ~~~~~~~~~~~ -!!! error TS2487: The left-hand side of a 'for...of' statement must be a variable or a property access. - ~~~~~ -!!! error TS2304: Cannot find name 'using'. - ~~ -!!! error TS2304: Cannot find name 'of'. - -!!! error TS1011: An element access expression should take an argument. - } - } - \ No newline at end of file diff --git a/tests/baselines/reference/awaitUsingDeclarationsInForOf.2.js b/tests/baselines/reference/awaitUsingDeclarationsInForOf.2.js index 19d7b7d575da2..be904e59dc1f7 100644 --- a/tests/baselines/reference/awaitUsingDeclarationsInForOf.2.js +++ b/tests/baselines/reference/awaitUsingDeclarationsInForOf.2.js @@ -9,6 +9,6 @@ async function main() { //// [awaitUsingDeclarationsInForOf.2.js] async function main() { - for (await using of of[]) { + for (await using of of []) { } } diff --git a/tests/baselines/reference/awaitUsingDeclarationsInForOf.4.errors.txt b/tests/baselines/reference/awaitUsingDeclarationsInForOf.4.errors.txt new file mode 100644 index 0000000000000..5c7894d2b5153 --- /dev/null +++ b/tests/baselines/reference/awaitUsingDeclarationsInForOf.4.errors.txt @@ -0,0 +1,16 @@ +awaitUsingDeclarationsInForOf.4.ts(4,8): error TS2853: 'await using' statements are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module. +awaitUsingDeclarationsInForOf.4.ts(4,26): error TS2448: Block-scoped variable 'of' used before its declaration. + + +==== awaitUsingDeclarationsInForOf.4.ts (2 errors) ==== + // https://github.com/microsoft/TypeScript/issues/55555 + + { + for (await using of of of) {}; + ~~~~~ +!!! error TS2853: 'await using' statements are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module. + ~~ +!!! error TS2448: Block-scoped variable 'of' used before its declaration. +!!! related TS2728 awaitUsingDeclarationsInForOf.4.ts:4:20: 'of' is declared here. + } + \ No newline at end of file diff --git a/tests/baselines/reference/awaitUsingDeclarationsInForOf.4.js b/tests/baselines/reference/awaitUsingDeclarationsInForOf.4.js new file mode 100644 index 0000000000000..5541669060c52 --- /dev/null +++ b/tests/baselines/reference/awaitUsingDeclarationsInForOf.4.js @@ -0,0 +1,16 @@ +//// [tests/cases/conformance/statements/VariableStatements/usingDeclarations/awaitUsingDeclarationsInForOf.4.ts] //// + +//// [awaitUsingDeclarationsInForOf.4.ts] +// https://github.com/microsoft/TypeScript/issues/55555 + +{ + for (await using of of of) {}; +} + + +//// [awaitUsingDeclarationsInForOf.4.js] +// https://github.com/microsoft/TypeScript/issues/55555 +{ + for (await using of of of) { } + ; +} diff --git a/tests/cases/conformance/statements/VariableStatements/usingDeclarations/awaitUsingDeclarationsInForAwaitOf.2.ts b/tests/cases/conformance/statements/VariableStatements/usingDeclarations/awaitUsingDeclarationsInForAwaitOf.2.ts new file mode 100644 index 0000000000000..1430e1a5cade0 --- /dev/null +++ b/tests/cases/conformance/statements/VariableStatements/usingDeclarations/awaitUsingDeclarationsInForAwaitOf.2.ts @@ -0,0 +1,10 @@ +// @target: esnext +// @module: esnext +// @lib: esnext +// @noTypesAndSymbols: true + +// https://github.com/microsoft/TypeScript/issues/55555 + +{ + for await (await using of of of) {}; +} \ No newline at end of file diff --git a/tests/cases/conformance/statements/VariableStatements/usingDeclarations/awaitUsingDeclarationsInForOf.4.ts b/tests/cases/conformance/statements/VariableStatements/usingDeclarations/awaitUsingDeclarationsInForOf.4.ts new file mode 100644 index 0000000000000..6edaa895a3bc7 --- /dev/null +++ b/tests/cases/conformance/statements/VariableStatements/usingDeclarations/awaitUsingDeclarationsInForOf.4.ts @@ -0,0 +1,10 @@ +// @target: esnext +// @module: esnext +// @lib: esnext +// @noTypesAndSymbols: true + +// https://github.com/microsoft/TypeScript/issues/55555 + +{ + for (await using of of of) {}; +}