Skip to content

Commit f54bf28

Browse files
Port PR#60234: Use signature.parameters directly in nodebuilder
Co-authored-by: RyanCavanaugh <[email protected]>
1 parent 3ec52e3 commit f54bf28

File tree

111 files changed

+2630
-596
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

111 files changed

+2630
-596
lines changed

internal/checker/nodebuilderimpl.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1693,8 +1693,7 @@ type SignatureToSignatureDeclarationOptions struct {
16931693
func (b *nodeBuilderImpl) signatureToSignatureDeclarationHelper(signature *Signature, kind ast.Kind, options *SignatureToSignatureDeclarationOptions) *ast.Node {
16941694
var typeParameters []*ast.Node
16951695

1696-
expandedParams := b.ch.getExpandedParameters(signature, true /*skipUnionExpanding*/)[0]
1697-
cleanup := b.enterNewScope(signature.declaration, expandedParams, signature.typeParameters, signature.parameters, signature.mapper)
1696+
cleanup := b.enterNewScope(signature.declaration, signature.parameters, signature.typeParameters, signature.parameters, signature.mapper)
16981697
b.ctx.approximateLength += 3
16991698
// Usually a signature contributes a few more characters than this, but 3 is the minimum
17001699

@@ -1710,10 +1709,7 @@ func (b *nodeBuilderImpl) signatureToSignatureDeclarationHelper(signature *Signa
17101709

17111710
restoreFlags := b.saveRestoreFlags()
17121711
b.ctx.flags &^= nodebuilder.FlagsSuppressAnyReturnType
1713-
// If the expanded parameter list had a variadic in a non-trailing position, don't expand it
1714-
parameters := core.Map(core.IfElse(core.Some(expandedParams, func(p *ast.Symbol) bool {
1715-
return p != expandedParams[len(expandedParams)-1] && p.CheckFlags&ast.CheckFlagsRestParameter != 0
1716-
}), signature.parameters, expandedParams), func(parameter *ast.Symbol) *ast.Node {
1712+
parameters := core.Map(signature.parameters, func(parameter *ast.Symbol) *ast.Node {
17171713
return b.symbolToParameterDeclaration(parameter, kind == ast.KindConstructor)
17181714
})
17191715
var thisParameter *ast.Node

testdata/baselines/reference/submodule/compiler/argumentsSpreadRestIterables(target=es5).types

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ declare const itNum: Iterable<number>
2424

2525
;(function(a, ...rest) {})('', true, ...itNum)
2626
>(function(a, ...rest) {})('', true, ...itNum) : void
27-
>(function(a, ...rest) {}) : (a: string, rest_0: boolean, ...rest: Iterable<number>[]) => void
28-
>function(a, ...rest) {} : (a: string, rest_0: boolean, ...rest: Iterable<number>[]) => void
27+
>(function(a, ...rest) {}) : (a: string, ...rest: [boolean, ...Iterable<number>[]]) => void
28+
>function(a, ...rest) {} : (a: string, ...rest: [boolean, ...Iterable<number>[]]) => void
2929
>a : string
3030
>rest : [boolean, ...Iterable<number>[]]
3131
>'' : ""
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
--- old.argumentsSpreadRestIterables(target=es5).types
2+
+++ new.argumentsSpreadRestIterables(target=es5).types
3+
@@= skipped -23, +23 lines =@@
4+
5+
;(function(a, ...rest) {})('', true, ...itNum)
6+
>(function(a, ...rest) {})('', true, ...itNum) : void
7+
->(function(a, ...rest) {}) : (a: string, rest_0: boolean, ...rest: Iterable<number>[]) => void
8+
->function(a, ...rest) {} : (a: string, rest_0: boolean, ...rest: Iterable<number>[]) => void
9+
+>(function(a, ...rest) {}) : (a: string, ...rest: [boolean, ...Iterable<number>[]]) => void
10+
+>function(a, ...rest) {} : (a: string, ...rest: [boolean, ...Iterable<number>[]]) => void
11+
>a : string
12+
>rest : [boolean, ...Iterable<number>[]]
13+
>'' : ""

testdata/baselines/reference/submodule/compiler/argumentsSpreadRestIterables(target=esnext).types

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ declare const itNum: Iterable<number>
2424

2525
;(function(a, ...rest) {})('', true, ...itNum)
2626
>(function(a, ...rest) {})('', true, ...itNum) : void
27-
>(function(a, ...rest) {}) : (a: string, rest_0: boolean, ...rest: number[]) => void
28-
>function(a, ...rest) {} : (a: string, rest_0: boolean, ...rest: number[]) => void
27+
>(function(a, ...rest) {}) : (a: string, ...rest: [boolean, ...number[]]) => void
28+
>function(a, ...rest) {} : (a: string, ...rest: [boolean, ...number[]]) => void
2929
>a : string
3030
>rest : [boolean, ...number[]]
3131
>'' : ""
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
--- old.argumentsSpreadRestIterables(target=esnext).types
2+
+++ new.argumentsSpreadRestIterables(target=esnext).types
3+
@@= skipped -23, +23 lines =@@
4+
5+
;(function(a, ...rest) {})('', true, ...itNum)
6+
>(function(a, ...rest) {})('', true, ...itNum) : void
7+
->(function(a, ...rest) {}) : (a: string, rest_0: boolean, ...rest: number[]) => void
8+
->function(a, ...rest) {} : (a: string, rest_0: boolean, ...rest: number[]) => void
9+
+>(function(a, ...rest) {}) : (a: string, ...rest: [boolean, ...number[]]) => void
10+
+>function(a, ...rest) {} : (a: string, ...rest: [boolean, ...number[]]) => void
11+
>a : string
12+
>rest : [boolean, ...number[]]
13+
>'' : ""

testdata/baselines/reference/submodule/compiler/bindingPatternCannotBeOnlyInferenceSource.types

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -76,19 +76,19 @@ declare function useReduxDispatch1<T extends IDestructuring<TFuncs1>>(destructur
7676
>destructuring : Destructuring<{ funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }, T>
7777

7878
const {} = useReduxDispatch1(
79-
>useReduxDispatch1( (d, f) => ({ funcA: (...p) => d(f.funcA(...p)), // p should be inferrable funcB: (...p) => d(f.funcB(...p)), funcC: (...p) => d(f.funcC(...p)), })) : { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
79+
>useReduxDispatch1( (d, f) => ({ funcA: (...p) => d(f.funcA(...p)), // p should be inferrable funcB: (...p) => d(f.funcB(...p)), funcC: (...p) => d(f.funcC(...p)), })) : { funcA: (...p: [a: boolean]) => void; funcB: (...p: [b: string, bb: string]) => void; funcC: (...p: [c: number, cc: number, ccc: boolean]) => void; }
8080
>useReduxDispatch1 : <T extends IDestructuring<{ funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }>>(destructuring: Destructuring<{ funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }, T>) => T
8181

8282
(d, f) => ({
83-
>(d, f) => ({ funcA: (...p) => d(f.funcA(...p)), // p should be inferrable funcB: (...p) => d(f.funcB(...p)), funcC: (...p) => d(f.funcC(...p)), }) : (d: Dispatch<any>, f: { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }) => { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
83+
>(d, f) => ({ funcA: (...p) => d(f.funcA(...p)), // p should be inferrable funcB: (...p) => d(f.funcB(...p)), funcC: (...p) => d(f.funcC(...p)), }) : (d: Dispatch<any>, f: { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }) => { funcA: (...p: [a: boolean]) => void; funcB: (...p: [b: string, bb: string]) => void; funcC: (...p: [c: number, cc: number, ccc: boolean]) => void; }
8484
>d : Dispatch<any>
8585
>f : { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
86-
>({ funcA: (...p) => d(f.funcA(...p)), // p should be inferrable funcB: (...p) => d(f.funcB(...p)), funcC: (...p) => d(f.funcC(...p)), }) : { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
87-
>{ funcA: (...p) => d(f.funcA(...p)), // p should be inferrable funcB: (...p) => d(f.funcB(...p)), funcC: (...p) => d(f.funcC(...p)), } : { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
86+
>({ funcA: (...p) => d(f.funcA(...p)), // p should be inferrable funcB: (...p) => d(f.funcB(...p)), funcC: (...p) => d(f.funcC(...p)), }) : { funcA: (...p: [a: boolean]) => void; funcB: (...p: [b: string, bb: string]) => void; funcC: (...p: [c: number, cc: number, ccc: boolean]) => void; }
87+
>{ funcA: (...p) => d(f.funcA(...p)), // p should be inferrable funcB: (...p) => d(f.funcB(...p)), funcC: (...p) => d(f.funcC(...p)), } : { funcA: (...p: [a: boolean]) => void; funcB: (...p: [b: string, bb: string]) => void; funcC: (...p: [c: number, cc: number, ccc: boolean]) => void; }
8888

8989
funcA: (...p) => d(f.funcA(...p)), // p should be inferrable
90-
>funcA : (a: boolean) => void
91-
>(...p) => d(f.funcA(...p)) : (a: boolean) => void
90+
>funcA : (...p: [a: boolean]) => void
91+
>(...p) => d(f.funcA(...p)) : (...p: [a: boolean]) => void
9292
>p : [a: boolean]
9393
>d(f.funcA(...p)) : void
9494
>d : Dispatch<any>
@@ -100,8 +100,8 @@ const {} = useReduxDispatch1(
100100
>p : [a: boolean]
101101

102102
funcB: (...p) => d(f.funcB(...p)),
103-
>funcB : (b: string, bb: string) => void
104-
>(...p) => d(f.funcB(...p)) : (b: string, bb: string) => void
103+
>funcB : (...p: [b: string, bb: string]) => void
104+
>(...p) => d(f.funcB(...p)) : (...p: [b: string, bb: string]) => void
105105
>p : [b: string, bb: string]
106106
>d(f.funcB(...p)) : void
107107
>d : Dispatch<any>
@@ -113,8 +113,8 @@ const {} = useReduxDispatch1(
113113
>p : [b: string, bb: string]
114114

115115
funcC: (...p) => d(f.funcC(...p)),
116-
>funcC : (c: number, cc: number, ccc: boolean) => void
117-
>(...p) => d(f.funcC(...p)) : (c: number, cc: number, ccc: boolean) => void
116+
>funcC : (...p: [c: number, cc: number, ccc: boolean]) => void
117+
>(...p) => d(f.funcC(...p)) : (...p: [c: number, cc: number, ccc: boolean]) => void
118118
>p : [c: number, cc: number, ccc: boolean]
119119
>d(f.funcC(...p)) : void
120120
>d : Dispatch<any>

testdata/baselines/reference/submodule/compiler/bindingPatternCannotBeOnlyInferenceSource.types.diff

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,48 @@
99
>destructuring : Destructuring<{ funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }, T>
1010

1111
const {} = useReduxDispatch1(
12-
>useReduxDispatch1( (d, f) => ({ funcA: (...p) => d(f.funcA(...p)), // p should be inferrable funcB: (...p) => d(f.funcB(...p)), funcC: (...p) => d(f.funcC(...p)), })) : { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
12+
->useReduxDispatch1( (d, f) => ({ funcA: (...p) => d(f.funcA(...p)), // p should be inferrable funcB: (...p) => d(f.funcB(...p)), funcC: (...p) => d(f.funcC(...p)), })) : { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
1313
->useReduxDispatch1 : <T extends IDestructuring<TFuncs1>>(destructuring: Destructuring<TFuncs1, T>) => T
14+
+>useReduxDispatch1( (d, f) => ({ funcA: (...p) => d(f.funcA(...p)), // p should be inferrable funcB: (...p) => d(f.funcB(...p)), funcC: (...p) => d(f.funcC(...p)), })) : { funcA: (...p: [a: boolean]) => void; funcB: (...p: [b: string, bb: string]) => void; funcC: (...p: [c: number, cc: number, ccc: boolean]) => void; }
1415
+>useReduxDispatch1 : <T extends IDestructuring<{ funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }>>(destructuring: Destructuring<{ funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }, T>) => T
1516

1617
(d, f) => ({
17-
>(d, f) => ({ funcA: (...p) => d(f.funcA(...p)), // p should be inferrable funcB: (...p) => d(f.funcB(...p)), funcC: (...p) => d(f.funcC(...p)), }) : (d: Dispatch<any>, f: { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }) => { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
18+
->(d, f) => ({ funcA: (...p) => d(f.funcA(...p)), // p should be inferrable funcB: (...p) => d(f.funcB(...p)), funcC: (...p) => d(f.funcC(...p)), }) : (d: Dispatch<any>, f: { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }) => { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
19+
+>(d, f) => ({ funcA: (...p) => d(f.funcA(...p)), // p should be inferrable funcB: (...p) => d(f.funcB(...p)), funcC: (...p) => d(f.funcC(...p)), }) : (d: Dispatch<any>, f: { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }) => { funcA: (...p: [a: boolean]) => void; funcB: (...p: [b: string, bb: string]) => void; funcC: (...p: [c: number, cc: number, ccc: boolean]) => void; }
20+
>d : Dispatch<any>
21+
>f : { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
22+
->({ funcA: (...p) => d(f.funcA(...p)), // p should be inferrable funcB: (...p) => d(f.funcB(...p)), funcC: (...p) => d(f.funcC(...p)), }) : { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
23+
->{ funcA: (...p) => d(f.funcA(...p)), // p should be inferrable funcB: (...p) => d(f.funcB(...p)), funcC: (...p) => d(f.funcC(...p)), } : { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
24+
+>({ funcA: (...p) => d(f.funcA(...p)), // p should be inferrable funcB: (...p) => d(f.funcB(...p)), funcC: (...p) => d(f.funcC(...p)), }) : { funcA: (...p: [a: boolean]) => void; funcB: (...p: [b: string, bb: string]) => void; funcC: (...p: [c: number, cc: number, ccc: boolean]) => void; }
25+
+>{ funcA: (...p) => d(f.funcA(...p)), // p should be inferrable funcB: (...p) => d(f.funcB(...p)), funcC: (...p) => d(f.funcC(...p)), } : { funcA: (...p: [a: boolean]) => void; funcB: (...p: [b: string, bb: string]) => void; funcC: (...p: [c: number, cc: number, ccc: boolean]) => void; }
26+
27+
funcA: (...p) => d(f.funcA(...p)), // p should be inferrable
28+
->funcA : (a: boolean) => void
29+
->(...p) => d(f.funcA(...p)) : (a: boolean) => void
30+
+>funcA : (...p: [a: boolean]) => void
31+
+>(...p) => d(f.funcA(...p)) : (...p: [a: boolean]) => void
32+
>p : [a: boolean]
33+
>d(f.funcA(...p)) : void
34+
>d : Dispatch<any>
35+
@@= skipped -28, +28 lines =@@
36+
>p : [a: boolean]
37+
38+
funcB: (...p) => d(f.funcB(...p)),
39+
->funcB : (b: string, bb: string) => void
40+
->(...p) => d(f.funcB(...p)) : (b: string, bb: string) => void
41+
+>funcB : (...p: [b: string, bb: string]) => void
42+
+>(...p) => d(f.funcB(...p)) : (...p: [b: string, bb: string]) => void
43+
>p : [b: string, bb: string]
44+
>d(f.funcB(...p)) : void
45+
>d : Dispatch<any>
46+
@@= skipped -13, +13 lines =@@
47+
>p : [b: string, bb: string]
48+
49+
funcC: (...p) => d(f.funcC(...p)),
50+
->funcC : (c: number, cc: number, ccc: boolean) => void
51+
->(...p) => d(f.funcC(...p)) : (c: number, cc: number, ccc: boolean) => void
52+
+>funcC : (...p: [c: number, cc: number, ccc: boolean]) => void
53+
+>(...p) => d(f.funcC(...p)) : (...p: [c: number, cc: number, ccc: boolean]) => void
54+
>p : [c: number, cc: number, ccc: boolean]
55+
>d(f.funcC(...p)) : void
56+
>d : Dispatch<any>

testdata/baselines/reference/submodule/compiler/contextuallyTypedParametersWithInitializers1.types

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ const f7: () => any = (x?) => 0; // Implicit any error
155155

156156
const f8: () => any = (...x) => 0; // []
157157
>f8 : () => any
158-
>(...x) => 0 : () => number
158+
>(...x) => 0 : (...x: []) => number
159159
>x : []
160160
>0 : 0
161161

@@ -240,9 +240,9 @@ g6((x?) => 0); // Implicit any error
240240
>0 : 0
241241

242242
g6((...x) => 0); // []
243-
>g6((...x) => 0) : () => number
243+
>g6((...x) => 0) : (...x: []) => number
244244
>g6 : <T extends () => any>(x: T) => T
245-
>(...x) => 0 : () => number
245+
>(...x) => 0 : (...x: []) => number
246246
>x : []
247247
>0 : 0
248248

testdata/baselines/reference/submodule/compiler/contextuallyTypedParametersWithInitializers1.types.diff

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,24 @@
4040
+>id5 : <T extends (x?: number | undefined) => any>(input: T) => T
4141
>function (foo = 42) { return foo } : (foo?: number | undefined) => number
4242
>foo : number | undefined
43-
>42 : 42
43+
>42 : 42
44+
@@= skipped -57, +57 lines =@@
45+
46+
const f8: () => any = (...x) => 0; // []
47+
>f8 : () => any
48+
->(...x) => 0 : () => number
49+
+>(...x) => 0 : (...x: []) => number
50+
>x : []
51+
>0 : 0
52+
53+
@@= skipped -85, +85 lines =@@
54+
>0 : 0
55+
56+
g6((...x) => 0); // []
57+
->g6((...x) => 0) : () => number
58+
+>g6((...x) => 0) : (...x: []) => number
59+
>g6 : <T extends () => any>(x: T) => T
60+
->(...x) => 0 : () => number
61+
+>(...x) => 0 : (...x: []) => number
62+
>x : []
63+
>0 : 0

testdata/baselines/reference/submodule/compiler/correlatedUnions.types

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -491,7 +491,7 @@ function ff1() {
491491
>Keys : keyof { sum: [a: number, b: number]; concat: [a: string, b: string, c: string]; }
492492

493493
const funs: { [P in Keys]: (...args: ArgMap[P]) => void } = {
494-
>funs : { concat: (a: string, b: string, c: string) => void; sum: (a: number, b: number) => void; }
494+
>funs : { concat: (...args: [a: string, b: string, c: string]) => void; sum: (...args: [a: number, b: number]) => void; }
495495
>args : { sum: [a: number, b: number]; concat: [a: string, b: string, c: string]; }[P]
496496
>{ sum: (a, b) => a + b, concat: (a, b, c) => a + b + c } : { sum: (a: number, b: number) => number; concat: (a: string, b: string, c: string) => string; }
497497

@@ -522,14 +522,14 @@ function ff1() {
522522
>args : { sum: [a: number, b: number]; concat: [a: string, b: string, c: string]; }[K]
523523

524524
const fn = funs[funKey];
525-
>fn : { concat: (a: string, b: string, c: string) => void; sum: (a: number, b: number) => void; }[K]
526-
>funs[funKey] : { concat: (a: string, b: string, c: string) => void; sum: (a: number, b: number) => void; }[K]
527-
>funs : { concat: (a: string, b: string, c: string) => void; sum: (a: number, b: number) => void; }
525+
>fn : { concat: (...args: [a: string, b: string, c: string]) => void; sum: (...args: [a: number, b: number]) => void; }[K]
526+
>funs[funKey] : { concat: (...args: [a: string, b: string, c: string]) => void; sum: (...args: [a: number, b: number]) => void; }[K]
527+
>funs : { concat: (...args: [a: string, b: string, c: string]) => void; sum: (...args: [a: number, b: number]) => void; }
528528
>funKey : K
529529

530530
fn(...args);
531531
>fn(...args) : void
532-
>fn : { concat: (a: string, b: string, c: string) => void; sum: (a: number, b: number) => void; }[K]
532+
>fn : { concat: (...args: [a: string, b: string, c: string]) => void; sum: (...args: [a: number, b: number]) => void; }[K]
533533
>...args : string | number
534534
>args : { sum: [a: number, b: number]; concat: [a: string, b: string, c: string]; }[K]
535535
}

0 commit comments

Comments
 (0)