From 05c861fad2bbecb242cf875d7b1141d66c617a7b Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Thu, 5 Jun 2025 14:15:00 -0700 Subject: [PATCH 01/21] Add copilot-setup-steps --- .github/workflows/copilot-setup-steps.yml | 26 +++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .github/workflows/copilot-setup-steps.yml diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml new file mode 100644 index 0000000000..f0f769d4f1 --- /dev/null +++ b/.github/workflows/copilot-setup-steps.yml @@ -0,0 +1,26 @@ +name: 'Copilot Setup Steps' + +on: workflow_dispatch + +jobs: + # The job MUST be called `copilot-setup-steps` or it will not be picked up by Copilot. + copilot-setup-steps: + runs-on: ubuntu-latest + + # Set the permissions to the lowest permissions possible needed for your steps. + # Copilot will be given its own token for its operations. + permissions: + # If you want to clone the repository as part of your setup steps, for example to install dependencies, you'll need the `contents: read` permission. If you don't clone the repository in your setup steps, Copilot will do this for you automatically after the steps complete. + contents: read + + # You can define any steps you want, and they will run before the agent starts. + # If you do not check out your code, Copilot will do this for you. + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + - uses: dtolnay/rust-toolchain@fcf085fcb4b4b8f63f96906cd713eb52181b5ea4 # stable + - uses: ./.github/actions/setup-go + with: + cache-name: copilot-setup-steps + - run: npm ci + - run: npx hereby build From 885beee9c7b0e49b01198590b238dcb6dbf7dd0b Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Thu, 5 Jun 2025 14:51:06 -0700 Subject: [PATCH 02/21] Clone submodule --- .github/workflows/copilot-setup-steps.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index f0f769d4f1..485244d239 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -17,6 +17,8 @@ jobs: # If you do not check out your code, Copilot will do this for you. steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: true - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 - uses: dtolnay/rust-toolchain@fcf085fcb4b4b8f63f96906cd713eb52181b5ea4 # stable - uses: ./.github/actions/setup-go From 85627c807aabbbe52002fe3be6d57d04a67cf760 Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Thu, 5 Jun 2025 15:00:12 -0700 Subject: [PATCH 03/21] Fetch submodule history --- .github/workflows/copilot-setup-steps.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index 485244d239..5a2c33f718 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -19,6 +19,8 @@ jobs: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: submodules: true + - run: git fetch # default fetch depth for submodules is 2 + working-directory: _submodules/TypeScript - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 - uses: dtolnay/rust-toolchain@fcf085fcb4b4b8f63f96906cd713eb52181b5ea4 # stable - uses: ./.github/actions/setup-go From 8888e79ac0fcff1d4e6e5d93ab413de4d895b155 Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Thu, 5 Jun 2025 15:13:13 -0700 Subject: [PATCH 04/21] Fix unshallowing? --- .github/workflows/copilot-setup-steps.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index 5a2c33f718..f3e0405000 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -19,8 +19,10 @@ jobs: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: submodules: true - - run: git fetch # default fetch depth for submodules is 2 - working-directory: _submodules/TypeScript + - run: | + cd _submodules/TypeScript + git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" + git fetch --unshallow - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 - uses: dtolnay/rust-toolchain@fcf085fcb4b4b8f63f96906cd713eb52181b5ea4 # stable - uses: ./.github/actions/setup-go From 6f23361b17521c87f37dbe634b00dbbdc5fe3a66 Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Thu, 5 Jun 2025 15:23:30 -0700 Subject: [PATCH 05/21] Fetch only back as far as the PR could be --- .github/workflows/copilot-setup-steps.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index f3e0405000..c1ecb609f2 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -22,7 +22,7 @@ jobs: - run: | cd _submodules/TypeScript git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" - git fetch --unshallow + git fetch --depth 170 # git rev-list --count 0693cc7...746c232 - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 - uses: dtolnay/rust-toolchain@fcf085fcb4b4b8f63f96906cd713eb52181b5ea4 # stable - uses: ./.github/actions/setup-go From 20e97c3df15ec731ec355ac8010455fa84f597aa Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Thu, 5 Jun 2025 16:20:25 -0700 Subject: [PATCH 06/21] Try to shallow fetch better --- .github/workflows/copilot-setup-steps.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index c1ecb609f2..892cacccf2 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -22,7 +22,7 @@ jobs: - run: | cd _submodules/TypeScript git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" - git fetch --depth 170 # git rev-list --count 0693cc7...746c232 + git fetch --depth 170 HEAD # git rev-list --count 0693cc7...746c232 - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 - uses: dtolnay/rust-toolchain@fcf085fcb4b4b8f63f96906cd713eb52181b5ea4 # stable - uses: ./.github/actions/setup-go From a897d9752588f116f93f90b61df3aa7ec061cc10 Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Thu, 5 Jun 2025 16:31:17 -0700 Subject: [PATCH 07/21] Fix git fetch syntax --- .github/workflows/copilot-setup-steps.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index 892cacccf2..994a2ed20f 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -22,7 +22,7 @@ jobs: - run: | cd _submodules/TypeScript git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" - git fetch --depth 170 HEAD # git rev-list --count 0693cc7...746c232 + git fetch origin --depth 170 HEAD # git rev-list --count 0693cc7...746c232 - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 - uses: dtolnay/rust-toolchain@fcf085fcb4b4b8f63f96906cd713eb52181b5ea4 # stable - uses: ./.github/actions/setup-go From dcf4c574bd7249618608ed22a925f3bd9cb5c6a4 Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Thu, 5 Jun 2025 17:01:44 -0700 Subject: [PATCH 08/21] Try one more fetch thing --- .github/workflows/copilot-setup-steps.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index 994a2ed20f..9db251a984 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -22,7 +22,8 @@ jobs: - run: | cd _submodules/TypeScript git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" - git fetch origin --depth 170 HEAD # git rev-list --count 0693cc7...746c232 + git fetch origin 0693cc7 + git fetch origin --shallow-exclude=0693cc7 746c232 - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 - uses: dtolnay/rust-toolchain@fcf085fcb4b4b8f63f96906cd713eb52181b5ea4 # stable - uses: ./.github/actions/setup-go From 0747ab648c25991fb716cd42ee2e84ce0809f953 Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Thu, 5 Jun 2025 17:06:33 -0700 Subject: [PATCH 09/21] Give up --- .github/workflows/copilot-setup-steps.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index 9db251a984..10c63fc184 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -22,8 +22,7 @@ jobs: - run: | cd _submodules/TypeScript git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" - git fetch origin 0693cc7 - git fetch origin --shallow-exclude=0693cc7 746c232 + git fetch origin --unshallow - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 - uses: dtolnay/rust-toolchain@fcf085fcb4b4b8f63f96906cd713eb52181b5ea4 # stable - uses: ./.github/actions/setup-go From 05e5518a6ee09f3839e7aff38e02a7f8df56e65d Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Fri, 6 Jun 2025 08:35:24 -0700 Subject: [PATCH 10/21] Add Playwright MCP server --- .github/workflows/copilot-setup-steps.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index 10c63fc184..d31fb6f46f 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -22,11 +22,12 @@ jobs: - run: | cd _submodules/TypeScript git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" - git fetch origin --unshallow + git fetch --unshallow - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 - uses: dtolnay/rust-toolchain@fcf085fcb4b4b8f63f96906cd713eb52181b5ea4 # stable - uses: ./.github/actions/setup-go with: cache-name: copilot-setup-steps + - run: npm install -g @playwright/mcp@0.0.28 - run: npm ci - run: npx hereby build From 887a2b495a7ec8466eeb756aaa3326acc3ed6ee7 Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Fri, 6 Jun 2025 08:50:57 -0700 Subject: [PATCH 11/21] Remove submodule unshallowing --- .github/workflows/copilot-setup-steps.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index d31fb6f46f..f67a01892e 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -19,10 +19,6 @@ jobs: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: submodules: true - - run: | - cd _submodules/TypeScript - git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" - git fetch --unshallow - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 - uses: dtolnay/rust-toolchain@fcf085fcb4b4b8f63f96906cd713eb52181b5ea4 # stable - uses: ./.github/actions/setup-go From a31c03a6da537a624af83e555675a152cefbdf1f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Jun 2025 15:59:39 +0000 Subject: [PATCH 12/21] Initial plan for issue From 4478f9e4837517627636c115f11fe649df0402d1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Jun 2025 16:11:38 +0000 Subject: [PATCH 13/21] Implement iterator parameter validation Co-authored-by: andrewbranch <3277153+andrewbranch@users.noreply.github.com> --- internal/checker/checker.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/internal/checker/checker.go b/internal/checker/checker.go index cdbff642a0..75cd631798 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -6065,10 +6065,18 @@ func (c *Checker) getIterationTypesOfIterableSlow(t *Type, r *IterationTypesReso if IsTypeAny(methodType) { return IterationTypes{c.anyType, c.anyType, c.anyType} } - if signatures := c.getSignaturesOfType(methodType, SignatureKindCall); len(signatures) != 0 { - iteratorType := c.getIntersectionType(core.Map(signatures, c.getReturnTypeOfSignature)) - return c.getIterationTypesOfIteratorWorker(iteratorType, r, errorNode, diagnosticOutput) + allSignatures := c.getSignaturesOfType(methodType, SignatureKindCall) + validSignatures := core.Filter(allSignatures, func(sig *Signature) bool { + return c.getMinArgumentCount(sig) == 0 + }) + if len(validSignatures) == 0 { + if errorNode != nil && len(allSignatures) > 0 { + c.checkTypeAssignableToEx(t, r.getGlobalIterableType(), errorNode, nil /*headMessage*/, diagnosticOutput) + } + return IterationTypes{} } + iteratorType := c.getIntersectionType(core.Map(validSignatures, c.getReturnTypeOfSignature)) + return c.getIterationTypesOfIteratorWorker(iteratorType, r, errorNode, diagnosticOutput) } return IterationTypes{} } From 92e6ee3a2f9b72f0f8749386523387fe5e49cb2c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Jun 2025 16:18:41 +0000 Subject: [PATCH 14/21] Accept baseline with partial iterator parameter validation Co-authored-by: andrewbranch <3277153+andrewbranch@users.noreply.github.com> --- .../asyncIteratorExtraParameters.errors.txt | 32 ++++++++++++ ...yncIteratorExtraParameters.errors.txt.diff | 36 ------------- .../iteratorExtraParameters.errors.txt | 36 +++++++++++++ .../iteratorExtraParameters.errors.txt.diff | 50 ++++++------------- 4 files changed, 84 insertions(+), 70 deletions(-) create mode 100644 testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt delete mode 100644 testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt.diff create mode 100644 testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt diff --git a/testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt b/testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt new file mode 100644 index 0000000000..9a2965d54a --- /dev/null +++ b/testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt @@ -0,0 +1,32 @@ +asyncIteratorExtraParameters.ts(11,27): error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. +asyncIteratorExtraParameters.ts(13,12): error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. + + +==== asyncIteratorExtraParameters.ts (2 errors) ==== + // https://github.com/microsoft/TypeScript/issues/57130 + const iter = { + async *[Symbol.asyncIterator](_: number) { + yield 0; + } + }; + + declare function g(...args: any): any; + + async function* f() { + for await (const _ of iter); + ~~~~ +!!! error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. +!!! related TS2322 asyncIteratorExtraParameters.ts:11:27: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. + Types of property '[Symbol.asyncIterator]' are incompatible. + Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. + Target signature provides too few arguments. Expected 1 or more, but got 0. + + yield* iter; + ~~~~ +!!! error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. +!!! related TS2322 asyncIteratorExtraParameters.ts:13:12: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. + Types of property '[Symbol.asyncIterator]' are incompatible. + Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. + Target signature provides too few arguments. Expected 1 or more, but got 0. + } + \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt.diff deleted file mode 100644 index 1ab0c61dd2..0000000000 --- a/testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt.diff +++ /dev/null @@ -1,36 +0,0 @@ ---- old.asyncIteratorExtraParameters.errors.txt -+++ new.asyncIteratorExtraParameters.errors.txt -@@= skipped -0, +0 lines =@@ --asyncIteratorExtraParameters.ts(11,27): error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. --asyncIteratorExtraParameters.ts(13,12): error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. -- -- --==== asyncIteratorExtraParameters.ts (2 errors) ==== -- // https://github.com/microsoft/TypeScript/issues/57130 -- const iter = { -- async *[Symbol.asyncIterator](_: number) { -- yield 0; -- } -- }; -- -- declare function g(...args: any): any; -- -- async function* f() { -- for await (const _ of iter); -- ~~~~ --!!! error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. --!!! related TS2322 asyncIteratorExtraParameters.ts:11:27: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. -- Types of property '[Symbol.asyncIterator]' are incompatible. -- Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. -- Target signature provides too few arguments. Expected 1 or more, but got 0. -- -- yield* iter; -- ~~~~ --!!! error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. --!!! related TS2322 asyncIteratorExtraParameters.ts:13:12: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. -- Types of property '[Symbol.asyncIterator]' are incompatible. -- Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. -- Target signature provides too few arguments. Expected 1 or more, but got 0. -- } -- -+ \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt b/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt new file mode 100644 index 0000000000..887c04fe2e --- /dev/null +++ b/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt @@ -0,0 +1,36 @@ +iteratorExtraParameters.ts(11,21): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. +iteratorExtraParameters.ts(13,12): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. + + +==== iteratorExtraParameters.ts (2 errors) ==== + // https://github.com/microsoft/TypeScript/issues/57130 + const iter = { + *[Symbol.iterator](_: number) { + yield 0; + } + }; + + declare function g(...args: any): any; + + function* f() { + for (const _ of iter); + ~~~~ +!!! error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. +!!! related TS2322 iteratorExtraParameters.ts:11:21: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. + Types of property '[Symbol.iterator]' are incompatible. + Type '(_: number) => Generator' is not assignable to type '() => Iterator'. + Target signature provides too few arguments. Expected 1 or more, but got 0. + + yield* iter; + ~~~~ +!!! error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. +!!! related TS2322 iteratorExtraParameters.ts:13:12: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. + Types of property '[Symbol.iterator]' are incompatible. + Type '(_: number) => Generator' is not assignable to type '() => Iterator'. + Target signature provides too few arguments. Expected 1 or more, but got 0. + + [...iter] + + g(...iter); + } + \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt.diff index 82c537fc2e..d12da0a85b 100644 --- a/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt.diff +++ b/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt.diff @@ -1,54 +1,36 @@ --- old.iteratorExtraParameters.errors.txt +++ new.iteratorExtraParameters.errors.txt @@= skipped -0, +0 lines =@@ --iteratorExtraParameters.ts(11,21): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. --iteratorExtraParameters.ts(13,12): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. + iteratorExtraParameters.ts(11,21): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. + iteratorExtraParameters.ts(13,12): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. -iteratorExtraParameters.ts(15,9): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. -iteratorExtraParameters.ts(17,10): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. - - -==== iteratorExtraParameters.ts (4 errors) ==== -- // https://github.com/microsoft/TypeScript/issues/57130 -- const iter = { -- *[Symbol.iterator](_: number) { -- yield 0; -- } -- }; -- -- declare function g(...args: any): any; -- -- function* f() { -- for (const _ of iter); -- ~~~~ --!!! error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. --!!! related TS2322 iteratorExtraParameters.ts:11:21: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. -- Types of property '[Symbol.iterator]' are incompatible. -- Type '(_: number) => Generator' is not assignable to type '() => Iterator'. -- Target signature provides too few arguments. Expected 1 or more, but got 0. -- -- yield* iter; -- ~~~~ --!!! error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. --!!! related TS2322 iteratorExtraParameters.ts:13:12: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. -- Types of property '[Symbol.iterator]' are incompatible. -- Type '(_: number) => Generator' is not assignable to type '() => Iterator'. -- Target signature provides too few arguments. Expected 1 or more, but got 0. -- -- [...iter] ++ ++ ++==== iteratorExtraParameters.ts (2 errors) ==== + // https://github.com/microsoft/TypeScript/issues/57130 + const iter = { + *[Symbol.iterator](_: number) { +@@= skipped -31, +29 lines =@@ + Target signature provides too few arguments. Expected 1 or more, but got 0. + + [...iter] - ~~~~ -!!! error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. -!!! related TS2322 iteratorExtraParameters.ts:15:9: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. - Types of property '[Symbol.iterator]' are incompatible. - Type '(_: number) => Generator' is not assignable to type '() => Iterator'. - Target signature provides too few arguments. Expected 1 or more, but got 0. -- -- g(...iter); + + g(...iter); - ~~~~ -!!! error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. -!!! related TS2322 iteratorExtraParameters.ts:17:10: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. - Types of property '[Symbol.iterator]' are incompatible. - Type '(_: number) => Generator' is not assignable to type '() => Iterator'. - Target signature provides too few arguments. Expected 1 or more, but got 0. -- } -- -+ \ No newline at end of file + } + \ No newline at end of file From e7cfbbf1161668beabb4aa321b7f47f5521757a9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Jun 2025 16:30:44 +0000 Subject: [PATCH 15/21] Add detailed parameter mismatch errors for iterator methods Co-authored-by: andrewbranch <3277153+andrewbranch@users.noreply.github.com> --- internal/checker/checker.go | 2 +- .../asyncIteratorExtraParameters.errors.txt | 32 ------------ ...yncIteratorExtraParameters.errors.txt.diff | 49 +++++++++++++++++++ .../iteratorExtraParameters.errors.txt | 36 -------------- .../iteratorExtraParameters.errors.txt.diff | 49 ++++++++++++++----- 5 files changed, 88 insertions(+), 80 deletions(-) delete mode 100644 testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt create mode 100644 testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt.diff delete mode 100644 testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt diff --git a/internal/checker/checker.go b/internal/checker/checker.go index 75cd631798..05c8446db6 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -6071,7 +6071,7 @@ func (c *Checker) getIterationTypesOfIterableSlow(t *Type, r *IterationTypesReso }) if len(validSignatures) == 0 { if errorNode != nil && len(allSignatures) > 0 { - c.checkTypeAssignableToEx(t, r.getGlobalIterableType(), errorNode, nil /*headMessage*/, diagnosticOutput) + c.checkTypeAssignableTo(t, r.getGlobalIterableType(), errorNode, nil /*headMessage*/) } return IterationTypes{} } diff --git a/testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt b/testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt deleted file mode 100644 index 9a2965d54a..0000000000 --- a/testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt +++ /dev/null @@ -1,32 +0,0 @@ -asyncIteratorExtraParameters.ts(11,27): error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. -asyncIteratorExtraParameters.ts(13,12): error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. - - -==== asyncIteratorExtraParameters.ts (2 errors) ==== - // https://github.com/microsoft/TypeScript/issues/57130 - const iter = { - async *[Symbol.asyncIterator](_: number) { - yield 0; - } - }; - - declare function g(...args: any): any; - - async function* f() { - for await (const _ of iter); - ~~~~ -!!! error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. -!!! related TS2322 asyncIteratorExtraParameters.ts:11:27: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. - Types of property '[Symbol.asyncIterator]' are incompatible. - Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. - Target signature provides too few arguments. Expected 1 or more, but got 0. - - yield* iter; - ~~~~ -!!! error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. -!!! related TS2322 asyncIteratorExtraParameters.ts:13:12: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. - Types of property '[Symbol.asyncIterator]' are incompatible. - Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. - Target signature provides too few arguments. Expected 1 or more, but got 0. - } - \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt.diff new file mode 100644 index 0000000000..40a7953b78 --- /dev/null +++ b/testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt.diff @@ -0,0 +1,49 @@ +--- old.asyncIteratorExtraParameters.errors.txt ++++ new.asyncIteratorExtraParameters.errors.txt +@@= skipped -0, +0 lines =@@ ++asyncIteratorExtraParameters.ts(11,27): error TS2322: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. ++ Types of property '[Symbol.asyncIterator]' are incompatible. ++ Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. ++ Target signature provides too few arguments. Expected 1 or more, but got 0. + asyncIteratorExtraParameters.ts(11,27): error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. ++asyncIteratorExtraParameters.ts(13,12): error TS2322: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. ++ Types of property '[Symbol.asyncIterator]' are incompatible. ++ Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. ++ Target signature provides too few arguments. Expected 1 or more, but got 0. + asyncIteratorExtraParameters.ts(13,12): error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. + + +-==== asyncIteratorExtraParameters.ts (2 errors) ==== ++==== asyncIteratorExtraParameters.ts (4 errors) ==== + // https://github.com/microsoft/TypeScript/issues/57130 + const iter = { + async *[Symbol.asyncIterator](_: number) { +@@= skipped -14, +22 lines =@@ + async function* f() { + for await (const _ of iter); + ~~~~ ++!!! error TS2322: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. ++!!! error TS2322: Types of property '[Symbol.asyncIterator]' are incompatible. ++!!! error TS2322: Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. ++!!! error TS2322: Target signature provides too few arguments. Expected 1 or more, but got 0. ++ ~~~~ + !!! error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. +-!!! related TS2322 asyncIteratorExtraParameters.ts:11:27: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. +- Types of property '[Symbol.asyncIterator]' are incompatible. +- Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. +- Target signature provides too few arguments. Expected 1 or more, but got 0. + + yield* iter; + ~~~~ ++!!! error TS2322: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. ++!!! error TS2322: Types of property '[Symbol.asyncIterator]' are incompatible. ++!!! error TS2322: Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. ++!!! error TS2322: Target signature provides too few arguments. Expected 1 or more, but got 0. ++ ~~~~ + !!! error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. +-!!! related TS2322 asyncIteratorExtraParameters.ts:13:12: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. +- Types of property '[Symbol.asyncIterator]' are incompatible. +- Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. +- Target signature provides too few arguments. Expected 1 or more, but got 0. + } + \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt b/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt deleted file mode 100644 index 887c04fe2e..0000000000 --- a/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt +++ /dev/null @@ -1,36 +0,0 @@ -iteratorExtraParameters.ts(11,21): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. -iteratorExtraParameters.ts(13,12): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. - - -==== iteratorExtraParameters.ts (2 errors) ==== - // https://github.com/microsoft/TypeScript/issues/57130 - const iter = { - *[Symbol.iterator](_: number) { - yield 0; - } - }; - - declare function g(...args: any): any; - - function* f() { - for (const _ of iter); - ~~~~ -!!! error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. -!!! related TS2322 iteratorExtraParameters.ts:11:21: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. - Types of property '[Symbol.iterator]' are incompatible. - Type '(_: number) => Generator' is not assignable to type '() => Iterator'. - Target signature provides too few arguments. Expected 1 or more, but got 0. - - yield* iter; - ~~~~ -!!! error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. -!!! related TS2322 iteratorExtraParameters.ts:13:12: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. - Types of property '[Symbol.iterator]' are incompatible. - Type '(_: number) => Generator' is not assignable to type '() => Iterator'. - Target signature provides too few arguments. Expected 1 or more, but got 0. - - [...iter] - - g(...iter); - } - \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt.diff index d12da0a85b..69b8041716 100644 --- a/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt.diff +++ b/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt.diff @@ -1,21 +1,48 @@ --- old.iteratorExtraParameters.errors.txt +++ new.iteratorExtraParameters.errors.txt @@= skipped -0, +0 lines =@@ ++iteratorExtraParameters.ts(11,21): error TS2322: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. ++ Types of property '[Symbol.iterator]' are incompatible. ++ Type '(_: number) => Generator' is not assignable to type '() => Iterator'. ++ Target signature provides too few arguments. Expected 1 or more, but got 0. iteratorExtraParameters.ts(11,21): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. ++iteratorExtraParameters.ts(13,12): error TS2322: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. ++ Types of property '[Symbol.iterator]' are incompatible. ++ Type '(_: number) => Generator' is not assignable to type '() => Iterator'. ++ Target signature provides too few arguments. Expected 1 or more, but got 0. iteratorExtraParameters.ts(13,12): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. -iteratorExtraParameters.ts(15,9): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. -iteratorExtraParameters.ts(17,10): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. -- -- --==== iteratorExtraParameters.ts (4 errors) ==== -+ -+ -+==== iteratorExtraParameters.ts (2 errors) ==== - // https://github.com/microsoft/TypeScript/issues/57130 - const iter = { - *[Symbol.iterator](_: number) { -@@= skipped -31, +29 lines =@@ - Target signature provides too few arguments. Expected 1 or more, but got 0. + + + ==== iteratorExtraParameters.ts (4 errors) ==== +@@= skipped -16, +22 lines =@@ + function* f() { + for (const _ of iter); + ~~~~ ++!!! error TS2322: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. ++!!! error TS2322: Types of property '[Symbol.iterator]' are incompatible. ++!!! error TS2322: Type '(_: number) => Generator' is not assignable to type '() => Iterator'. ++!!! error TS2322: Target signature provides too few arguments. Expected 1 or more, but got 0. ++ ~~~~ + !!! error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. +-!!! related TS2322 iteratorExtraParameters.ts:11:21: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. +- Types of property '[Symbol.iterator]' are incompatible. +- Type '(_: number) => Generator' is not assignable to type '() => Iterator'. +- Target signature provides too few arguments. Expected 1 or more, but got 0. + + yield* iter; + ~~~~ ++!!! error TS2322: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. ++!!! error TS2322: Types of property '[Symbol.iterator]' are incompatible. ++!!! error TS2322: Type '(_: number) => Generator' is not assignable to type '() => Iterator'. ++!!! error TS2322: Target signature provides too few arguments. Expected 1 or more, but got 0. ++ ~~~~ + !!! error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. +-!!! related TS2322 iteratorExtraParameters.ts:13:12: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. +- Types of property '[Symbol.iterator]' are incompatible. +- Type '(_: number) => Generator' is not assignable to type '() => Iterator'. +- Target signature provides too few arguments. Expected 1 or more, but got 0. [...iter] - ~~~~ From cbc586019b5a61a590d4d246e09feab912cf9831 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Jun 2025 16:33:08 +0000 Subject: [PATCH 16/21] Update final baselines for iterator parameter validation --- .../asyncIteratorExtraParameters.errors.txt | 42 +++++++++++++++++ .../iteratorExtraParameters.errors.txt | 46 +++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt create mode 100644 testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt diff --git a/testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt b/testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt new file mode 100644 index 0000000000..6b75ddfe3e --- /dev/null +++ b/testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt @@ -0,0 +1,42 @@ +asyncIteratorExtraParameters.ts(11,27): error TS2322: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. + Types of property '[Symbol.asyncIterator]' are incompatible. + Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. + Target signature provides too few arguments. Expected 1 or more, but got 0. +asyncIteratorExtraParameters.ts(11,27): error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. +asyncIteratorExtraParameters.ts(13,12): error TS2322: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. + Types of property '[Symbol.asyncIterator]' are incompatible. + Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. + Target signature provides too few arguments. Expected 1 or more, but got 0. +asyncIteratorExtraParameters.ts(13,12): error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. + + +==== asyncIteratorExtraParameters.ts (4 errors) ==== + // https://github.com/microsoft/TypeScript/issues/57130 + const iter = { + async *[Symbol.asyncIterator](_: number) { + yield 0; + } + }; + + declare function g(...args: any): any; + + async function* f() { + for await (const _ of iter); + ~~~~ +!!! error TS2322: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. +!!! error TS2322: Types of property '[Symbol.asyncIterator]' are incompatible. +!!! error TS2322: Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. +!!! error TS2322: Target signature provides too few arguments. Expected 1 or more, but got 0. + ~~~~ +!!! error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. + + yield* iter; + ~~~~ +!!! error TS2322: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. +!!! error TS2322: Types of property '[Symbol.asyncIterator]' are incompatible. +!!! error TS2322: Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. +!!! error TS2322: Target signature provides too few arguments. Expected 1 or more, but got 0. + ~~~~ +!!! error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. + } + \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt b/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt new file mode 100644 index 0000000000..3d92765251 --- /dev/null +++ b/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt @@ -0,0 +1,46 @@ +iteratorExtraParameters.ts(11,21): error TS2322: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. + Types of property '[Symbol.iterator]' are incompatible. + Type '(_: number) => Generator' is not assignable to type '() => Iterator'. + Target signature provides too few arguments. Expected 1 or more, but got 0. +iteratorExtraParameters.ts(11,21): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. +iteratorExtraParameters.ts(13,12): error TS2322: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. + Types of property '[Symbol.iterator]' are incompatible. + Type '(_: number) => Generator' is not assignable to type '() => Iterator'. + Target signature provides too few arguments. Expected 1 or more, but got 0. +iteratorExtraParameters.ts(13,12): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. + + +==== iteratorExtraParameters.ts (4 errors) ==== + // https://github.com/microsoft/TypeScript/issues/57130 + const iter = { + *[Symbol.iterator](_: number) { + yield 0; + } + }; + + declare function g(...args: any): any; + + function* f() { + for (const _ of iter); + ~~~~ +!!! error TS2322: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. +!!! error TS2322: Types of property '[Symbol.iterator]' are incompatible. +!!! error TS2322: Type '(_: number) => Generator' is not assignable to type '() => Iterator'. +!!! error TS2322: Target signature provides too few arguments. Expected 1 or more, but got 0. + ~~~~ +!!! error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. + + yield* iter; + ~~~~ +!!! error TS2322: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. +!!! error TS2322: Types of property '[Symbol.iterator]' are incompatible. +!!! error TS2322: Type '(_: number) => Generator' is not assignable to type '() => Iterator'. +!!! error TS2322: Target signature provides too few arguments. Expected 1 or more, but got 0. + ~~~~ +!!! error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. + + [...iter] + + g(...iter); + } + \ No newline at end of file From 079190c3340161ed882f9a95857d3acbfc6d8e7a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Jun 2025 16:58:45 +0000 Subject: [PATCH 17/21] Fix error chaining for iterator parameter validation Co-authored-by: andrewbranch <3277153+andrewbranch@users.noreply.github.com> --- internal/checker/checker.go | 2 +- .../asyncIteratorExtraParameters.errors.txt | 28 ++++------- ...yncIteratorExtraParameters.errors.txt.diff | 49 ------------------- .../iteratorExtraParameters.errors.txt | 28 ++++------- .../iteratorExtraParameters.errors.txt.diff | 49 +++++-------------- 5 files changed, 30 insertions(+), 126 deletions(-) delete mode 100644 testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt.diff diff --git a/internal/checker/checker.go b/internal/checker/checker.go index 05c8446db6..75cd631798 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -6071,7 +6071,7 @@ func (c *Checker) getIterationTypesOfIterableSlow(t *Type, r *IterationTypesReso }) if len(validSignatures) == 0 { if errorNode != nil && len(allSignatures) > 0 { - c.checkTypeAssignableTo(t, r.getGlobalIterableType(), errorNode, nil /*headMessage*/) + c.checkTypeAssignableToEx(t, r.getGlobalIterableType(), errorNode, nil /*headMessage*/, diagnosticOutput) } return IterationTypes{} } diff --git a/testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt b/testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt index 6b75ddfe3e..9a2965d54a 100644 --- a/testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt +++ b/testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt @@ -1,16 +1,8 @@ -asyncIteratorExtraParameters.ts(11,27): error TS2322: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. - Types of property '[Symbol.asyncIterator]' are incompatible. - Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. - Target signature provides too few arguments. Expected 1 or more, but got 0. asyncIteratorExtraParameters.ts(11,27): error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. -asyncIteratorExtraParameters.ts(13,12): error TS2322: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. - Types of property '[Symbol.asyncIterator]' are incompatible. - Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. - Target signature provides too few arguments. Expected 1 or more, but got 0. asyncIteratorExtraParameters.ts(13,12): error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. -==== asyncIteratorExtraParameters.ts (4 errors) ==== +==== asyncIteratorExtraParameters.ts (2 errors) ==== // https://github.com/microsoft/TypeScript/issues/57130 const iter = { async *[Symbol.asyncIterator](_: number) { @@ -23,20 +15,18 @@ asyncIteratorExtraParameters.ts(13,12): error TS2504: Type '{ [Symbol.asyncItera async function* f() { for await (const _ of iter); ~~~~ -!!! error TS2322: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. -!!! error TS2322: Types of property '[Symbol.asyncIterator]' are incompatible. -!!! error TS2322: Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. -!!! error TS2322: Target signature provides too few arguments. Expected 1 or more, but got 0. - ~~~~ !!! error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. +!!! related TS2322 asyncIteratorExtraParameters.ts:11:27: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. + Types of property '[Symbol.asyncIterator]' are incompatible. + Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. + Target signature provides too few arguments. Expected 1 or more, but got 0. yield* iter; ~~~~ -!!! error TS2322: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. -!!! error TS2322: Types of property '[Symbol.asyncIterator]' are incompatible. -!!! error TS2322: Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. -!!! error TS2322: Target signature provides too few arguments. Expected 1 or more, but got 0. - ~~~~ !!! error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. +!!! related TS2322 asyncIteratorExtraParameters.ts:13:12: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. + Types of property '[Symbol.asyncIterator]' are incompatible. + Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. + Target signature provides too few arguments. Expected 1 or more, but got 0. } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt.diff deleted file mode 100644 index 40a7953b78..0000000000 --- a/testdata/baselines/reference/submodule/compiler/asyncIteratorExtraParameters.errors.txt.diff +++ /dev/null @@ -1,49 +0,0 @@ ---- old.asyncIteratorExtraParameters.errors.txt -+++ new.asyncIteratorExtraParameters.errors.txt -@@= skipped -0, +0 lines =@@ -+asyncIteratorExtraParameters.ts(11,27): error TS2322: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. -+ Types of property '[Symbol.asyncIterator]' are incompatible. -+ Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. -+ Target signature provides too few arguments. Expected 1 or more, but got 0. - asyncIteratorExtraParameters.ts(11,27): error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. -+asyncIteratorExtraParameters.ts(13,12): error TS2322: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. -+ Types of property '[Symbol.asyncIterator]' are incompatible. -+ Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. -+ Target signature provides too few arguments. Expected 1 or more, but got 0. - asyncIteratorExtraParameters.ts(13,12): error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. - - --==== asyncIteratorExtraParameters.ts (2 errors) ==== -+==== asyncIteratorExtraParameters.ts (4 errors) ==== - // https://github.com/microsoft/TypeScript/issues/57130 - const iter = { - async *[Symbol.asyncIterator](_: number) { -@@= skipped -14, +22 lines =@@ - async function* f() { - for await (const _ of iter); - ~~~~ -+!!! error TS2322: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. -+!!! error TS2322: Types of property '[Symbol.asyncIterator]' are incompatible. -+!!! error TS2322: Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. -+!!! error TS2322: Target signature provides too few arguments. Expected 1 or more, but got 0. -+ ~~~~ - !!! error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. --!!! related TS2322 asyncIteratorExtraParameters.ts:11:27: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. -- Types of property '[Symbol.asyncIterator]' are incompatible. -- Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. -- Target signature provides too few arguments. Expected 1 or more, but got 0. - - yield* iter; - ~~~~ -+!!! error TS2322: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. -+!!! error TS2322: Types of property '[Symbol.asyncIterator]' are incompatible. -+!!! error TS2322: Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. -+!!! error TS2322: Target signature provides too few arguments. Expected 1 or more, but got 0. -+ ~~~~ - !!! error TS2504: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. --!!! related TS2322 asyncIteratorExtraParameters.ts:13:12: Type '{ [Symbol.asyncIterator](_: number): AsyncGenerator; }' is not assignable to type 'AsyncIterable'. -- Types of property '[Symbol.asyncIterator]' are incompatible. -- Type '(_: number) => AsyncGenerator' is not assignable to type '() => AsyncIterator'. -- Target signature provides too few arguments. Expected 1 or more, but got 0. - } - \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt b/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt index 3d92765251..887c04fe2e 100644 --- a/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt +++ b/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt @@ -1,16 +1,8 @@ -iteratorExtraParameters.ts(11,21): error TS2322: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. - Types of property '[Symbol.iterator]' are incompatible. - Type '(_: number) => Generator' is not assignable to type '() => Iterator'. - Target signature provides too few arguments. Expected 1 or more, but got 0. iteratorExtraParameters.ts(11,21): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. -iteratorExtraParameters.ts(13,12): error TS2322: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. - Types of property '[Symbol.iterator]' are incompatible. - Type '(_: number) => Generator' is not assignable to type '() => Iterator'. - Target signature provides too few arguments. Expected 1 or more, but got 0. iteratorExtraParameters.ts(13,12): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. -==== iteratorExtraParameters.ts (4 errors) ==== +==== iteratorExtraParameters.ts (2 errors) ==== // https://github.com/microsoft/TypeScript/issues/57130 const iter = { *[Symbol.iterator](_: number) { @@ -23,21 +15,19 @@ iteratorExtraParameters.ts(13,12): error TS2488: Type '{ [Symbol.iterator](_: nu function* f() { for (const _ of iter); ~~~~ -!!! error TS2322: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. -!!! error TS2322: Types of property '[Symbol.iterator]' are incompatible. -!!! error TS2322: Type '(_: number) => Generator' is not assignable to type '() => Iterator'. -!!! error TS2322: Target signature provides too few arguments. Expected 1 or more, but got 0. - ~~~~ !!! error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. +!!! related TS2322 iteratorExtraParameters.ts:11:21: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. + Types of property '[Symbol.iterator]' are incompatible. + Type '(_: number) => Generator' is not assignable to type '() => Iterator'. + Target signature provides too few arguments. Expected 1 or more, but got 0. yield* iter; ~~~~ -!!! error TS2322: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. -!!! error TS2322: Types of property '[Symbol.iterator]' are incompatible. -!!! error TS2322: Type '(_: number) => Generator' is not assignable to type '() => Iterator'. -!!! error TS2322: Target signature provides too few arguments. Expected 1 or more, but got 0. - ~~~~ !!! error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. +!!! related TS2322 iteratorExtraParameters.ts:13:12: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. + Types of property '[Symbol.iterator]' are incompatible. + Type '(_: number) => Generator' is not assignable to type '() => Iterator'. + Target signature provides too few arguments. Expected 1 or more, but got 0. [...iter] diff --git a/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt.diff index 69b8041716..d12da0a85b 100644 --- a/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt.diff +++ b/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt.diff @@ -1,48 +1,21 @@ --- old.iteratorExtraParameters.errors.txt +++ new.iteratorExtraParameters.errors.txt @@= skipped -0, +0 lines =@@ -+iteratorExtraParameters.ts(11,21): error TS2322: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. -+ Types of property '[Symbol.iterator]' are incompatible. -+ Type '(_: number) => Generator' is not assignable to type '() => Iterator'. -+ Target signature provides too few arguments. Expected 1 or more, but got 0. iteratorExtraParameters.ts(11,21): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. -+iteratorExtraParameters.ts(13,12): error TS2322: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. -+ Types of property '[Symbol.iterator]' are incompatible. -+ Type '(_: number) => Generator' is not assignable to type '() => Iterator'. -+ Target signature provides too few arguments. Expected 1 or more, but got 0. iteratorExtraParameters.ts(13,12): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. -iteratorExtraParameters.ts(15,9): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. -iteratorExtraParameters.ts(17,10): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. - - - ==== iteratorExtraParameters.ts (4 errors) ==== -@@= skipped -16, +22 lines =@@ - function* f() { - for (const _ of iter); - ~~~~ -+!!! error TS2322: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. -+!!! error TS2322: Types of property '[Symbol.iterator]' are incompatible. -+!!! error TS2322: Type '(_: number) => Generator' is not assignable to type '() => Iterator'. -+!!! error TS2322: Target signature provides too few arguments. Expected 1 or more, but got 0. -+ ~~~~ - !!! error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. --!!! related TS2322 iteratorExtraParameters.ts:11:21: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. -- Types of property '[Symbol.iterator]' are incompatible. -- Type '(_: number) => Generator' is not assignable to type '() => Iterator'. -- Target signature provides too few arguments. Expected 1 or more, but got 0. - - yield* iter; - ~~~~ -+!!! error TS2322: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. -+!!! error TS2322: Types of property '[Symbol.iterator]' are incompatible. -+!!! error TS2322: Type '(_: number) => Generator' is not assignable to type '() => Iterator'. -+!!! error TS2322: Target signature provides too few arguments. Expected 1 or more, but got 0. -+ ~~~~ - !!! error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. --!!! related TS2322 iteratorExtraParameters.ts:13:12: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. -- Types of property '[Symbol.iterator]' are incompatible. -- Type '(_: number) => Generator' is not assignable to type '() => Iterator'. -- Target signature provides too few arguments. Expected 1 or more, but got 0. +- +- +-==== iteratorExtraParameters.ts (4 errors) ==== ++ ++ ++==== iteratorExtraParameters.ts (2 errors) ==== + // https://github.com/microsoft/TypeScript/issues/57130 + const iter = { + *[Symbol.iterator](_: number) { +@@= skipped -31, +29 lines =@@ + Target signature provides too few arguments. Expected 1 or more, but got 0. [...iter] - ~~~~ From 4b9be9f246372fbd8694aa387ca119bb977ee9a3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Jun 2025 18:15:18 +0000 Subject: [PATCH 18/21] Investigate iterator parameter validation caching issue Co-authored-by: andrewbranch <3277153+andrewbranch@users.noreply.github.com> --- internal/checker/checker.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/internal/checker/checker.go b/internal/checker/checker.go index 75cd631798..92f71f5ed1 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -5748,7 +5748,9 @@ func (c *Checker) getIteratedTypeOrElementType(use IterationUse, inputType *Type // downlevelIteration is requested. if uplevelIteration || downlevelIteration || allowAsyncIterables { // We only report errors for an invalid iterable type in ES2015 or higher. + fmt.Printf("DEBUG: getIteratedTypeOrElementType calling getIterationTypesOfIterable for use=%d\n", use) iterationTypes := c.getIterationTypesOfIterable(inputType, use, core.IfElse(uplevelIteration, errorNode, nil)) + fmt.Printf("DEBUG: getIterationTypesOfIterable returned yieldType=%v\n", iterationTypes.yieldType != nil) if checkAssignability { if iterationTypes.nextType != nil { var diagnostic *diagnostics.Message @@ -5769,6 +5771,7 @@ func (c *Checker) getIteratedTypeOrElementType(use IterationUse, inputType *Type } if iterationTypes.yieldType != nil || uplevelIteration { if iterationTypes.yieldType == nil { + fmt.Printf("DEBUG: iterationTypes.yieldType is nil, returning nil\n") return nil } if possibleOutOfBounds { @@ -5900,10 +5903,13 @@ func (c *Checker) getIterationTypesOfIterable(t *Type, use IterationUse, errorNo if IsTypeAny(t) { return IterationTypes{c.anyType, c.anyType, c.anyType} } + fmt.Printf("DEBUG: getIterationTypesOfIterable called with use=%d, errorNode=%v\n", use, errorNode != nil) key := IterationTypesKey{typeId: t.id, use: use&IterationUseCacheFlags | core.IfElse(errorNode != nil, IterationUseReportError, 0)} if cached, ok := c.iterationTypesCache[key]; ok { + fmt.Printf("DEBUG: getIterationTypesOfIterable cache hit\n") return cached } + fmt.Printf("DEBUG: getIterationTypesOfIterable cache miss\n") result := c.getIterationTypesOfIterableWorker(t, use, errorNode) c.iterationTypesCache[key] = result return result From a6356cfa8530195f7d38ea7405f98ecd7c97e539 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Jun 2025 18:31:36 +0000 Subject: [PATCH 19/21] Fix iterator parameter validation caching issue for spread syntax Co-authored-by: andrewbranch <3277153+andrewbranch@users.noreply.github.com> --- internal/checker/checker.go | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/internal/checker/checker.go b/internal/checker/checker.go index 92f71f5ed1..f63eb803d9 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -481,7 +481,7 @@ const ( IterationUseAsyncYieldStar = IterationUseAllowsSyncIterablesFlag | IterationUseAllowsAsyncIterablesFlag | IterationUseYieldStarFlag IterationUseGeneratorReturnType = IterationUseAllowsSyncIterablesFlag IterationUseAsyncGeneratorReturnType = IterationUseAllowsAsyncIterablesFlag - IterationUseCacheFlags = IterationUseAllowsSyncIterablesFlag | IterationUseAllowsAsyncIterablesFlag | IterationUseForOfFlag | IterationUseReportError + IterationUseCacheFlags = IterationUseAllowsSyncIterablesFlag | IterationUseAllowsAsyncIterablesFlag | IterationUseForOfFlag | IterationUseYieldStarFlag | IterationUseSpreadFlag | IterationUseDestructuringFlag | IterationUseReportError ) type IterationTypes struct { @@ -5748,9 +5748,7 @@ func (c *Checker) getIteratedTypeOrElementType(use IterationUse, inputType *Type // downlevelIteration is requested. if uplevelIteration || downlevelIteration || allowAsyncIterables { // We only report errors for an invalid iterable type in ES2015 or higher. - fmt.Printf("DEBUG: getIteratedTypeOrElementType calling getIterationTypesOfIterable for use=%d\n", use) iterationTypes := c.getIterationTypesOfIterable(inputType, use, core.IfElse(uplevelIteration, errorNode, nil)) - fmt.Printf("DEBUG: getIterationTypesOfIterable returned yieldType=%v\n", iterationTypes.yieldType != nil) if checkAssignability { if iterationTypes.nextType != nil { var diagnostic *diagnostics.Message @@ -5771,7 +5769,6 @@ func (c *Checker) getIteratedTypeOrElementType(use IterationUse, inputType *Type } if iterationTypes.yieldType != nil || uplevelIteration { if iterationTypes.yieldType == nil { - fmt.Printf("DEBUG: iterationTypes.yieldType is nil, returning nil\n") return nil } if possibleOutOfBounds { @@ -5903,13 +5900,10 @@ func (c *Checker) getIterationTypesOfIterable(t *Type, use IterationUse, errorNo if IsTypeAny(t) { return IterationTypes{c.anyType, c.anyType, c.anyType} } - fmt.Printf("DEBUG: getIterationTypesOfIterable called with use=%d, errorNode=%v\n", use, errorNode != nil) key := IterationTypesKey{typeId: t.id, use: use&IterationUseCacheFlags | core.IfElse(errorNode != nil, IterationUseReportError, 0)} if cached, ok := c.iterationTypesCache[key]; ok { - fmt.Printf("DEBUG: getIterationTypesOfIterable cache hit\n") return cached } - fmt.Printf("DEBUG: getIterationTypesOfIterable cache miss\n") result := c.getIterationTypesOfIterableWorker(t, use, errorNode) c.iterationTypesCache[key] = result return result From 7273d6dd06958b403a1cbac8b350a57287738580 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Jun 2025 20:44:11 +0000 Subject: [PATCH 20/21] Update test baselines after improving iterator parameter validation Co-authored-by: andrewbranch <3277153+andrewbranch@users.noreply.github.com> --- .../compiler/iteratorExtraParameters.errors.txt | 9 ++++++++- .../iteratorExtraParameters.errors.txt.diff | 14 +++----------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt b/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt index 887c04fe2e..b972d79d55 100644 --- a/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt +++ b/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt @@ -1,8 +1,9 @@ iteratorExtraParameters.ts(11,21): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. iteratorExtraParameters.ts(13,12): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. +iteratorExtraParameters.ts(15,9): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. -==== iteratorExtraParameters.ts (2 errors) ==== +==== iteratorExtraParameters.ts (3 errors) ==== // https://github.com/microsoft/TypeScript/issues/57130 const iter = { *[Symbol.iterator](_: number) { @@ -30,6 +31,12 @@ iteratorExtraParameters.ts(13,12): error TS2488: Type '{ [Symbol.iterator](_: nu Target signature provides too few arguments. Expected 1 or more, but got 0. [...iter] + ~~~~ +!!! error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. +!!! related TS2322 iteratorExtraParameters.ts:15:9: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. + Types of property '[Symbol.iterator]' are incompatible. + Type '(_: number) => Generator' is not assignable to type '() => Iterator'. + Target signature provides too few arguments. Expected 1 or more, but got 0. g(...iter); } diff --git a/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt.diff index d12da0a85b..5334b4d9b9 100644 --- a/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt.diff +++ b/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt.diff @@ -3,28 +3,20 @@ @@= skipped -0, +0 lines =@@ iteratorExtraParameters.ts(11,21): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. iteratorExtraParameters.ts(13,12): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. --iteratorExtraParameters.ts(15,9): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. + iteratorExtraParameters.ts(15,9): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. -iteratorExtraParameters.ts(17,10): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. - - -==== iteratorExtraParameters.ts (4 errors) ==== + + -+==== iteratorExtraParameters.ts (2 errors) ==== ++==== iteratorExtraParameters.ts (3 errors) ==== // https://github.com/microsoft/TypeScript/issues/57130 const iter = { *[Symbol.iterator](_: number) { -@@= skipped -31, +29 lines =@@ +@@= skipped -39, +38 lines =@@ Target signature provides too few arguments. Expected 1 or more, but got 0. - [...iter] -- ~~~~ --!!! error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. --!!! related TS2322 iteratorExtraParameters.ts:15:9: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. -- Types of property '[Symbol.iterator]' are incompatible. -- Type '(_: number) => Generator' is not assignable to type '() => Iterator'. -- Target signature provides too few arguments. Expected 1 or more, but got 0. - g(...iter); - ~~~~ -!!! error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. From 8e97b45bc8ed09219fb95a4aaf58b92d7d374143 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Jun 2025 21:52:24 +0000 Subject: [PATCH 21/21] Fix missing error for function call spread in iterator parameter validation Co-authored-by: andrewbranch <3277153+andrewbranch@users.noreply.github.com> --- internal/checker/checker.go | 5 +++- .../iteratorExtraParameters.errors.txt | 9 +++++- .../iteratorExtraParameters.errors.txt.diff | 28 ------------------- .../omittedExpressionForOfLoop.errors.txt | 5 +++- ...omittedExpressionForOfLoop.errors.txt.diff | 23 --------------- .../submodule/conformance/for-of16.errors.txt | 8 ++++-- .../conformance/for-of16.errors.txt.diff | 21 -------------- .../types.forAwait.es2018.2.errors.txt | 6 +++- .../types.forAwait.es2018.2.errors.txt.diff | 26 ----------------- 9 files changed, 27 insertions(+), 104 deletions(-) delete mode 100644 testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt.diff delete mode 100644 testdata/baselines/reference/submodule/compiler/omittedExpressionForOfLoop.errors.txt.diff delete mode 100644 testdata/baselines/reference/submodule/conformance/for-of16.errors.txt.diff delete mode 100644 testdata/baselines/reference/submodule/conformance/types.forAwait.es2018.2.errors.txt.diff diff --git a/internal/checker/checker.go b/internal/checker/checker.go index f63eb803d9..2b2a4b4d09 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -5905,7 +5905,10 @@ func (c *Checker) getIterationTypesOfIterable(t *Type, use IterationUse, errorNo return cached } result := c.getIterationTypesOfIterableWorker(t, use, errorNode) - c.iterationTypesCache[key] = result + // Don't cache empty results when error reporting is requested, to ensure errors are reported for each call site + if result.hasTypes() || errorNode == nil { + c.iterationTypesCache[key] = result + } return result } diff --git a/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt b/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt index b972d79d55..fec3eb9882 100644 --- a/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt +++ b/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt @@ -1,9 +1,10 @@ iteratorExtraParameters.ts(11,21): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. iteratorExtraParameters.ts(13,12): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. iteratorExtraParameters.ts(15,9): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. +iteratorExtraParameters.ts(17,10): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. -==== iteratorExtraParameters.ts (3 errors) ==== +==== iteratorExtraParameters.ts (4 errors) ==== // https://github.com/microsoft/TypeScript/issues/57130 const iter = { *[Symbol.iterator](_: number) { @@ -39,5 +40,11 @@ iteratorExtraParameters.ts(15,9): error TS2488: Type '{ [Symbol.iterator](_: num Target signature provides too few arguments. Expected 1 or more, but got 0. g(...iter); + ~~~~ +!!! error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. +!!! related TS2322 iteratorExtraParameters.ts:17:10: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. + Types of property '[Symbol.iterator]' are incompatible. + Type '(_: number) => Generator' is not assignable to type '() => Iterator'. + Target signature provides too few arguments. Expected 1 or more, but got 0. } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt.diff deleted file mode 100644 index 5334b4d9b9..0000000000 --- a/testdata/baselines/reference/submodule/compiler/iteratorExtraParameters.errors.txt.diff +++ /dev/null @@ -1,28 +0,0 @@ ---- old.iteratorExtraParameters.errors.txt -+++ new.iteratorExtraParameters.errors.txt -@@= skipped -0, +0 lines =@@ - iteratorExtraParameters.ts(11,21): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. - iteratorExtraParameters.ts(13,12): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. - iteratorExtraParameters.ts(15,9): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. --iteratorExtraParameters.ts(17,10): error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. -- -- --==== iteratorExtraParameters.ts (4 errors) ==== -+ -+ -+==== iteratorExtraParameters.ts (3 errors) ==== - // https://github.com/microsoft/TypeScript/issues/57130 - const iter = { - *[Symbol.iterator](_: number) { -@@= skipped -39, +38 lines =@@ - Target signature provides too few arguments. Expected 1 or more, but got 0. - - g(...iter); -- ~~~~ --!!! error TS2488: Type '{ [Symbol.iterator](_: number): Generator; }' must have a '[Symbol.iterator]()' method that returns an iterator. --!!! related TS2322 iteratorExtraParameters.ts:17:10: Type '{ [Symbol.iterator](_: number): Generator; }' is not assignable to type 'Iterable'. -- Types of property '[Symbol.iterator]' are incompatible. -- Type '(_: number) => Generator' is not assignable to type '() => Iterator'. -- Target signature provides too few arguments. Expected 1 or more, but got 0. - } - \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/omittedExpressionForOfLoop.errors.txt b/testdata/baselines/reference/submodule/compiler/omittedExpressionForOfLoop.errors.txt index 1bab467dde..257dcb21ae 100644 --- a/testdata/baselines/reference/submodule/compiler/omittedExpressionForOfLoop.errors.txt +++ b/testdata/baselines/reference/submodule/compiler/omittedExpressionForOfLoop.errors.txt @@ -1,9 +1,10 @@ omittedExpressionForOfLoop.ts(1,19): error TS2304: Cannot find name 'doesNotExist'. omittedExpressionForOfLoop.ts(4,19): error TS18050: The value 'undefined' cannot be used here. omittedExpressionForOfLoop.ts(7,12): error TS2488: Type 'never' must have a '[Symbol.iterator]()' method that returns an iterator. +omittedExpressionForOfLoop.ts(10,12): error TS2488: Type 'never' must have a '[Symbol.iterator]()' method that returns an iterator. -==== omittedExpressionForOfLoop.ts (3 errors) ==== +==== omittedExpressionForOfLoop.ts (4 errors) ==== for (const [,] of doesNotExist) { ~~~~~~~~~~~~ !!! error TS2304: Cannot find name 'doesNotExist'. @@ -20,4 +21,6 @@ omittedExpressionForOfLoop.ts(7,12): error TS2488: Type 'never' must have a '[Sy } for (const [] of []) { + ~~ +!!! error TS2488: Type 'never' must have a '[Symbol.iterator]()' method that returns an iterator. } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/omittedExpressionForOfLoop.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/omittedExpressionForOfLoop.errors.txt.diff deleted file mode 100644 index e2e84af17f..0000000000 --- a/testdata/baselines/reference/submodule/compiler/omittedExpressionForOfLoop.errors.txt.diff +++ /dev/null @@ -1,23 +0,0 @@ ---- old.omittedExpressionForOfLoop.errors.txt -+++ new.omittedExpressionForOfLoop.errors.txt -@@= skipped -0, +0 lines =@@ - omittedExpressionForOfLoop.ts(1,19): error TS2304: Cannot find name 'doesNotExist'. - omittedExpressionForOfLoop.ts(4,19): error TS18050: The value 'undefined' cannot be used here. - omittedExpressionForOfLoop.ts(7,12): error TS2488: Type 'never' must have a '[Symbol.iterator]()' method that returns an iterator. --omittedExpressionForOfLoop.ts(10,12): error TS2488: Type 'never' must have a '[Symbol.iterator]()' method that returns an iterator. -- -- --==== omittedExpressionForOfLoop.ts (4 errors) ==== -+ -+ -+==== omittedExpressionForOfLoop.ts (3 errors) ==== - for (const [,] of doesNotExist) { - ~~~~~~~~~~~~ - !!! error TS2304: Cannot find name 'doesNotExist'. -@@= skipped -20, +19 lines =@@ - } - - for (const [] of []) { -- ~~ --!!! error TS2488: Type 'never' must have a '[Symbol.iterator]()' method that returns an iterator. - } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/for-of16.errors.txt b/testdata/baselines/reference/submodule/conformance/for-of16.errors.txt index 2e7a31eef3..0af867a2c6 100644 --- a/testdata/baselines/reference/submodule/conformance/for-of16.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/for-of16.errors.txt @@ -1,7 +1,8 @@ for-of16.ts(8,11): error TS2488: Type 'MyStringIterator' must have a '[Symbol.iterator]()' method that returns an iterator. +for-of16.ts(10,11): error TS2488: Type 'MyStringIterator' must have a '[Symbol.iterator]()' method that returns an iterator. -==== for-of16.ts (1 errors) ==== +==== for-of16.ts (2 errors) ==== class MyStringIterator { [Symbol.iterator]() { return this; @@ -14,4 +15,7 @@ for-of16.ts(8,11): error TS2488: Type 'MyStringIterator' must have a '[Symbol.it !!! error TS2488: Type 'MyStringIterator' must have a '[Symbol.iterator]()' method that returns an iterator. !!! related TS2489 for-of16.ts:8:11: An iterator must have a 'next()' method. - for (v of new MyStringIterator) { } // Should still fail (related errors should still be shown even though type is cached). \ No newline at end of file + for (v of new MyStringIterator) { } // Should still fail (related errors should still be shown even though type is cached). + ~~~~~~~~~~~~~~~~~~~~ +!!! error TS2488: Type 'MyStringIterator' must have a '[Symbol.iterator]()' method that returns an iterator. +!!! related TS2489 for-of16.ts:10:11: An iterator must have a 'next()' method. \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/for-of16.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/for-of16.errors.txt.diff deleted file mode 100644 index 0e4bfaa922..0000000000 --- a/testdata/baselines/reference/submodule/conformance/for-of16.errors.txt.diff +++ /dev/null @@ -1,21 +0,0 @@ ---- old.for-of16.errors.txt -+++ new.for-of16.errors.txt -@@= skipped -0, +0 lines =@@ - for-of16.ts(8,11): error TS2488: Type 'MyStringIterator' must have a '[Symbol.iterator]()' method that returns an iterator. --for-of16.ts(10,11): error TS2488: Type 'MyStringIterator' must have a '[Symbol.iterator]()' method that returns an iterator. -- -- --==== for-of16.ts (2 errors) ==== -+ -+ -+==== for-of16.ts (1 errors) ==== - class MyStringIterator { - [Symbol.iterator]() { - return this; -@@= skipped -15, +14 lines =@@ - !!! related TS2489 for-of16.ts:8:11: An iterator must have a 'next()' method. - - for (v of new MyStringIterator) { } // Should still fail (related errors should still be shown even though type is cached). -- ~~~~~~~~~~~~~~~~~~~~ --!!! error TS2488: Type 'MyStringIterator' must have a '[Symbol.iterator]()' method that returns an iterator. --!!! related TS2489 for-of16.ts:10:11: An iterator must have a 'next()' method. \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/types.forAwait.es2018.2.errors.txt b/testdata/baselines/reference/submodule/conformance/types.forAwait.es2018.2.errors.txt index df9005679a..b0635928d4 100644 --- a/testdata/baselines/reference/submodule/conformance/types.forAwait.es2018.2.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/types.forAwait.es2018.2.errors.txt @@ -3,9 +3,10 @@ types.forAwait.es2018.2.ts(8,21): error TS2504: Type '{}' must have a '[Symbol.a types.forAwait.es2018.2.ts(10,16): error TS2322: Type 'number' is not assignable to type 'string'. types.forAwait.es2018.2.ts(12,16): error TS2322: Type 'number' is not assignable to type 'string'. types.forAwait.es2018.2.ts(14,21): error TS2488: Type 'AsyncIterable' must have a '[Symbol.iterator]()' method that returns an iterator. +types.forAwait.es2018.2.ts(16,15): error TS2488: Type 'AsyncIterable' must have a '[Symbol.iterator]()' method that returns an iterator. -==== types.forAwait.es2018.2.ts (5 errors) ==== +==== types.forAwait.es2018.2.ts (6 errors) ==== declare const asyncIterable: AsyncIterable; declare const iterable: Iterable; async function f() { @@ -33,6 +34,9 @@ types.forAwait.es2018.2.ts(14,21): error TS2488: Type 'AsyncIterable' mu !!! related TS2773 types.forAwait.es2018.2.ts:14:21: Did you forget to use 'await'? } for (y of asyncIterable) { + ~~~~~~~~~~~~~ +!!! error TS2488: Type 'AsyncIterable' must have a '[Symbol.iterator]()' method that returns an iterator. +!!! related TS2773 types.forAwait.es2018.2.ts:16:15: Did you forget to use 'await'? } } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/types.forAwait.es2018.2.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/types.forAwait.es2018.2.errors.txt.diff deleted file mode 100644 index 19233fc836..0000000000 --- a/testdata/baselines/reference/submodule/conformance/types.forAwait.es2018.2.errors.txt.diff +++ /dev/null @@ -1,26 +0,0 @@ ---- old.types.forAwait.es2018.2.errors.txt -+++ new.types.forAwait.es2018.2.errors.txt -@@= skipped -2, +2 lines =@@ - types.forAwait.es2018.2.ts(10,16): error TS2322: Type 'number' is not assignable to type 'string'. - types.forAwait.es2018.2.ts(12,16): error TS2322: Type 'number' is not assignable to type 'string'. - types.forAwait.es2018.2.ts(14,21): error TS2488: Type 'AsyncIterable' must have a '[Symbol.iterator]()' method that returns an iterator. --types.forAwait.es2018.2.ts(16,15): error TS2488: Type 'AsyncIterable' must have a '[Symbol.iterator]()' method that returns an iterator. -- -- --==== types.forAwait.es2018.2.ts (6 errors) ==== -+ -+ -+==== types.forAwait.es2018.2.ts (5 errors) ==== - declare const asyncIterable: AsyncIterable; - declare const iterable: Iterable; - async function f() { -@@= skipped -31, +30 lines =@@ - !!! related TS2773 types.forAwait.es2018.2.ts:14:21: Did you forget to use 'await'? - } - for (y of asyncIterable) { -- ~~~~~~~~~~~~~ --!!! error TS2488: Type 'AsyncIterable' must have a '[Symbol.iterator]()' method that returns an iterator. --!!! related TS2773 types.forAwait.es2018.2.ts:16:15: Did you forget to use 'await'? - } - } - \ No newline at end of file