Skip to content

Commit 3caec2c

Browse files
Cherry pick PR 57887 into release-5.4 (#57898)
Co-authored-by: Wesley Wigham <[email protected]>
1 parent 896947e commit 3caec2c

File tree

160 files changed

+494
-384
lines changed

Some content is hidden

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

160 files changed

+494
-384
lines changed

src/compiler/checker.ts

+13-5
Original file line numberDiff line numberDiff line change
@@ -6306,7 +6306,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
63066306
}
63076307
}
63086308

6309-
function isEntityNameVisible(entityName: EntityNameOrEntityNameExpression, enclosingDeclaration: Node): SymbolVisibilityResult {
6309+
function getMeaningOfEntityNameReference(entityName: EntityNameOrEntityNameExpression): SymbolFlags {
63106310
// get symbol of the first identifier of the entityName
63116311
let meaning: SymbolFlags;
63126312
if (
@@ -6319,7 +6319,10 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
63196319
}
63206320
else if (
63216321
entityName.kind === SyntaxKind.QualifiedName || entityName.kind === SyntaxKind.PropertyAccessExpression ||
6322-
entityName.parent.kind === SyntaxKind.ImportEqualsDeclaration
6322+
entityName.parent.kind === SyntaxKind.ImportEqualsDeclaration ||
6323+
(entityName.parent.kind === SyntaxKind.QualifiedName && (entityName.parent as QualifiedName).left === entityName) ||
6324+
(entityName.parent.kind === SyntaxKind.PropertyAccessExpression && (entityName.parent as PropertyAccessExpression).expression === entityName) ||
6325+
(entityName.parent.kind === SyntaxKind.ElementAccessExpression && (entityName.parent as ElementAccessExpression).expression === entityName)
63236326
) {
63246327
// Left identifier from type reference or TypeAlias
63256328
// Entity name of the import declaration
@@ -6329,7 +6332,11 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
63296332
// Type Reference or TypeAlias entity = Identifier
63306333
meaning = SymbolFlags.Type;
63316334
}
6335+
return meaning;
6336+
}
63326337

6338+
function isEntityNameVisible(entityName: EntityNameOrEntityNameExpression, enclosingDeclaration: Node): SymbolVisibilityResult {
6339+
const meaning = getMeaningOfEntityNameReference(entityName);
63336340
const firstIdentifier = getFirstIdentifier(entityName);
63346341
const symbol = resolveName(enclosingDeclaration, firstIdentifier.escapedText, meaning, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ false);
63356342
if (symbol && symbol.flags & SymbolFlags.TypeParameter && meaning & SymbolFlags.Type) {
@@ -8512,13 +8519,14 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
85128519
introducesError = true;
85138520
return { introducesError, node };
85148521
}
8515-
const sym = resolveEntityName(leftmost, SymbolFlags.All, /*ignoreErrors*/ true, /*dontResolveAlias*/ true);
8522+
const meaning = getMeaningOfEntityNameReference(node);
8523+
const sym = resolveEntityName(leftmost, meaning, /*ignoreErrors*/ true, /*dontResolveAlias*/ true);
85168524
if (sym) {
8517-
if (isSymbolAccessible(sym, context.enclosingDeclaration, SymbolFlags.All, /*shouldComputeAliasesToMakeVisible*/ false).accessibility !== SymbolAccessibility.Accessible) {
8525+
if (isSymbolAccessible(sym, context.enclosingDeclaration, meaning, /*shouldComputeAliasesToMakeVisible*/ false).accessibility !== SymbolAccessibility.Accessible) {
85188526
introducesError = true;
85198527
}
85208528
else {
8521-
context.tracker.trackSymbol(sym, context.enclosingDeclaration, SymbolFlags.All);
8529+
context.tracker.trackSymbol(sym, context.enclosingDeclaration, meaning);
85228530
includePrivateSymbol?.(sym);
85238531
}
85248532
if (isIdentifier(node)) {

tests/baselines/reference/ParameterList5.types

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22

33
=== ParameterList5.ts ===
44
function A(): (public B) => C {
5-
>A : () => (B: any) => C
5+
>A : () => (public B) => C
66
>B : any
77
}

tests/baselines/reference/annotatedThisPropertyInitializerDoesntNarrow.types

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
// from webpack/lib/Compilation.js and filed at #26427
55
/** @param {{ [s: string]: number }} map */
66
function mappy(map) {}
7-
>mappy : (map: { [s: string]: number; }) => void
7+
>mappy : (map: { [s: string]: number;}) => void
88
>map : { [s: string]: number; }
99

1010
export class C {

tests/baselines/reference/anonterface.types

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ module M {
88
>C : C
99

1010
m(fn:{ (n:number):string; },n2:number):string {
11-
>m : (fn: (n: number) => string, n2: number) => string
11+
>m : (fn: { (n: number): string;}, n2: number) => string
1212
>fn : (n: number) => string
1313
>n : number
1414
>n2 : number

tests/baselines/reference/anyAssignabilityInInheritance.types

+1-1
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ var r3 = foo3(a); // any
168168
>a : any
169169

170170
declare function foo12(x: (x) => number): (x) => number;
171-
>foo12 : { (x: (x: any) => number): (x: any) => number; (x: any): any; }
171+
>foo12 : { (x: (x) => number): (x) => number; (x: any): any; }
172172
>x : (x: any) => number
173173
>x : any
174174
>x : any

tests/baselines/reference/arrayLiteralContextualType.types

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ function foo(animals: IAnimal[]) { }
3535
>animals : IAnimal[]
3636

3737
function bar(animals: { [n: number]: IAnimal }) { }
38-
>bar : (animals: { [n: number]: IAnimal; }) => void
38+
>bar : (animals: { [n: number]: IAnimal;}) => void
3939
>animals : { [n: number]: IAnimal; }
4040
>n : number
4141

tests/baselines/reference/assignmentCompatWithCallSignatures3.types

+1-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ var a17: {
130130

131131
};
132132
var a18: {
133-
>a18 : { (x: { (a: number): number; (a: string): string; }): any[]; (x: { (a: boolean): boolean; (a: Date): Date; }): any[]; }
133+
>a18 : { (x: { (a: number): number; (a: string): string;}): any[]; (x: { (a: boolean): boolean; (a: Date): Date;}): any[]; }
134134

135135
(x: {
136136
>x : { (a: number): number; (a: string): string; }

tests/baselines/reference/assignmentCompatWithCallSignatures4.types

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ module Errors {
8181
>b : number
8282

8383
var a16: {
84-
>a16 : { (x: { (a: number): number; (a?: number): number; }): number[]; (x: { (a: boolean): boolean; (a?: boolean): boolean; }): boolean[]; }
84+
>a16 : { (x: { (a: number): number; (a?: number): number;}): number[]; (x: { (a: boolean): boolean; (a?: boolean): boolean;}): boolean[]; }
8585

8686
(x: {
8787
>x : { (a: number): number; (a?: number): number; }

tests/baselines/reference/assignmentCompatWithConstructSignatures3.types

+1-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ var a17: {
130130

131131
};
132132
var a18: {
133-
>a18 : { new (x: { new (a: number): number; new (a: string): string; }): any[]; new (x: { new (a: boolean): boolean; new (a: Date): Date; }): any[]; }
133+
>a18 : { new (x: { new (a: number): number; new (a: string): string;}): any[]; new (x: { new (a: boolean): boolean; new (a: Date): Date;}): any[]; }
134134

135135
new (x: {
136136
>x : { new (a: number): number; new (a: string): string; }

tests/baselines/reference/assignmentCompatWithConstructSignatures4.types

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ module Errors {
8181
>b : number
8282

8383
var a16: {
84-
>a16 : { new (x: { new (a: number): number; new (a?: number): number; }): number[]; new (x: { new (a: boolean): boolean; new (a?: boolean): boolean; }): boolean[]; }
84+
>a16 : { new (x: { new (a: number): number; new (a?: number): number;}): number[]; new (x: { new (a: boolean): boolean; new (a?: boolean): boolean;}): boolean[]; }
8585

8686
new (x: {
8787
>x : { new (a: number): number; new (a?: number): number; }

tests/baselines/reference/asyncFunctionContextuallyTypedReturns.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ h(async v => v ? (def) => { } : Promise.reject());
104104

105105
// repro from #29196
106106
const increment: (
107-
>increment : (num: number, str: string) => string | Promise<string | ((s: string) => any)>
107+
>increment : (num: number, str: string) => Promise<((s: string) => any) | string> | string
108108

109109
num: number,
110110
>num : number
@@ -130,7 +130,7 @@ const increment: (
130130
}
131131

132132
const increment2: (
133-
>increment2 : (num: number, str: string) => Promise<string | ((s: string) => any)>
133+
>increment2 : (num: number, str: string) => Promise<((s: string) => any) | string>
134134

135135
num: number,
136136
>num : number

tests/baselines/reference/asyncFunctionsAndStrictNullChecks.types

+5-5
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
declare namespace Windows.Foundation {
55
interface IPromise<TResult> {
66
then<U>(success?: (value: TResult) => IPromise<U>, error?: (error: any) => IPromise<U>, progress?: (progress: any) => void): IPromise<U>;
7-
>then : { <U>(success?: ((value: TResult) => IPromise<U>) | undefined, error?: ((error: any) => IPromise<U>) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U>; <U_1>(success?: ((value: TResult) => IPromise<U_1>) | undefined, error?: ((error: any) => U_1) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_1>; <U_2>(success?: ((value: TResult) => U_2) | undefined, error?: ((error: any) => IPromise<U_2>) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_2>; <U_3>(success?: ((value: TResult) => U_3) | undefined, error?: ((error: any) => U_3) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_3>; }
7+
>then : { <U>(success?: (value: TResult) => IPromise<U>, error?: (error: any) => IPromise<U>, progress?: (progress: any) => void): IPromise<U>; <U_1>(success?: ((value: TResult) => IPromise<U_1>) | undefined, error?: ((error: any) => U_1) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_1>; <U_2>(success?: ((value: TResult) => U_2) | undefined, error?: ((error: any) => IPromise<U_2>) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_2>; <U_3>(success?: ((value: TResult) => U_3) | undefined, error?: ((error: any) => U_3) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_3>; }
88
>success : ((value: TResult) => IPromise<U>) | undefined
99
>value : TResult
1010
>error : ((error: any) => IPromise<U>) | undefined
@@ -13,7 +13,7 @@ declare namespace Windows.Foundation {
1313
>progress : any
1414

1515
then<U>(success?: (value: TResult) => IPromise<U>, error?: (error: any) => U, progress?: (progress: any) => void): IPromise<U>;
16-
>then : { <U_1>(success?: ((value: TResult) => IPromise<U_1>) | undefined, error?: ((error: any) => IPromise<U_1>) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_1>; <U>(success?: ((value: TResult) => IPromise<U>) | undefined, error?: ((error: any) => U) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U>; <U_2>(success?: ((value: TResult) => U_2) | undefined, error?: ((error: any) => IPromise<U_2>) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_2>; <U_3>(success?: ((value: TResult) => U_3) | undefined, error?: ((error: any) => U_3) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_3>; }
16+
>then : { <U_1>(success?: ((value: TResult) => IPromise<U_1>) | undefined, error?: ((error: any) => IPromise<U_1>) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_1>; <U>(success?: (value: TResult) => IPromise<U>, error?: (error: any) => U, progress?: (progress: any) => void): IPromise<U>; <U_2>(success?: ((value: TResult) => U_2) | undefined, error?: ((error: any) => IPromise<U_2>) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_2>; <U_3>(success?: ((value: TResult) => U_3) | undefined, error?: ((error: any) => U_3) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_3>; }
1717
>success : ((value: TResult) => IPromise<U>) | undefined
1818
>value : TResult
1919
>error : ((error: any) => U) | undefined
@@ -22,7 +22,7 @@ declare namespace Windows.Foundation {
2222
>progress : any
2323

2424
then<U>(success?: (value: TResult) => U, error?: (error: any) => IPromise<U>, progress?: (progress: any) => void): IPromise<U>;
25-
>then : { <U_1>(success?: ((value: TResult) => IPromise<U_1>) | undefined, error?: ((error: any) => IPromise<U_1>) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_1>; <U_2>(success?: ((value: TResult) => IPromise<U_2>) | undefined, error?: ((error: any) => U_2) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_2>; <U>(success?: ((value: TResult) => U) | undefined, error?: ((error: any) => IPromise<U>) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U>; <U_3>(success?: ((value: TResult) => U_3) | undefined, error?: ((error: any) => U_3) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_3>; }
25+
>then : { <U_1>(success?: ((value: TResult) => IPromise<U_1>) | undefined, error?: ((error: any) => IPromise<U_1>) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_1>; <U_2>(success?: ((value: TResult) => IPromise<U_2>) | undefined, error?: ((error: any) => U_2) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_2>; <U>(success?: (value: TResult) => U, error?: (error: any) => IPromise<U>, progress?: (progress: any) => void): IPromise<U>; <U_3>(success?: ((value: TResult) => U_3) | undefined, error?: ((error: any) => U_3) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_3>; }
2626
>success : ((value: TResult) => U) | undefined
2727
>value : TResult
2828
>error : ((error: any) => IPromise<U>) | undefined
@@ -31,7 +31,7 @@ declare namespace Windows.Foundation {
3131
>progress : any
3232

3333
then<U>(success?: (value: TResult) => U, error?: (error: any) => U, progress?: (progress: any) => void): IPromise<U>;
34-
>then : { <U_1>(success?: ((value: TResult) => IPromise<U_1>) | undefined, error?: ((error: any) => IPromise<U_1>) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_1>; <U_2>(success?: ((value: TResult) => IPromise<U_2>) | undefined, error?: ((error: any) => U_2) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_2>; <U_3>(success?: ((value: TResult) => U_3) | undefined, error?: ((error: any) => IPromise<U_3>) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_3>; <U>(success?: ((value: TResult) => U) | undefined, error?: ((error: any) => U) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U>; }
34+
>then : { <U_1>(success?: ((value: TResult) => IPromise<U_1>) | undefined, error?: ((error: any) => IPromise<U_1>) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_1>; <U_2>(success?: ((value: TResult) => IPromise<U_2>) | undefined, error?: ((error: any) => U_2) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_2>; <U_3>(success?: ((value: TResult) => U_3) | undefined, error?: ((error: any) => IPromise<U_3>) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U_3>; <U>(success?: (value: TResult) => U, error?: (error: any) => U, progress?: (progress: any) => void): IPromise<U>; }
3535
>success : ((value: TResult) => U) | undefined
3636
>value : TResult
3737
>error : ((error: any) => U) | undefined
@@ -40,7 +40,7 @@ declare namespace Windows.Foundation {
4040
>progress : any
4141

4242
done<U>(success?: (value: TResult) => any, error?: (error: any) => any, progress?: (progress: any) => void): void;
43-
>done : <U>(success?: ((value: TResult) => any) | undefined, error?: ((error: any) => any) | undefined, progress?: ((progress: any) => void) | undefined) => void
43+
>done : <U>(success?: (value: TResult) => any, error?: (error: any) => any, progress?: (progress: any) => void) => void
4444
>success : ((value: TResult) => any) | undefined
4545
>value : TResult
4646
>error : ((error: any) => any) | undefined

tests/baselines/reference/avoidNarrowingUsingConstVariableFromBindingElementWithLiteralInitializer.types

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ declare const foo: ["a", string, number] | ["b", string, boolean];
55
>foo : ["a", string, number] | ["b", string, boolean]
66

77
export function test(arg: { index?: number }) {
8-
>test : (arg: { index?: number | undefined; }) => void
8+
>test : (arg: { index?: number;}) => void
99
>arg : { index?: number | undefined; }
1010
>index : number | undefined
1111

tests/baselines/reference/callSignatureAssignabilityInInheritance2.types

+1-1
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ interface A { // T
134134

135135
};
136136
a18: {
137-
>a18 : { (x: { (a: number): number; (a: string): string; }): any[]; (x: { (a: boolean): boolean; (a: Date): Date; }): any[]; }
137+
>a18 : { (x: { (a: number): number; (a: string): string;}): any[]; (x: { (a: boolean): boolean; (a: Date): Date;}): any[]; }
138138

139139
(x: {
140140
>x : { (a: number): number; (a: string): string; }

tests/baselines/reference/callSignatureAssignabilityInInheritance3.types

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ module Errors {
8181
>b : number
8282

8383
a16: {
84-
>a16 : { (x: { (a: number): number; (a?: number): number; }): number[]; (x: { (a: boolean): boolean; (a?: boolean): boolean; }): boolean[]; }
84+
>a16 : { (x: { (a: number): number; (a?: number): number;}): number[]; (x: { (a: boolean): boolean; (a?: boolean): boolean;}): boolean[]; }
8585

8686
// type of parameter is overload set which means we can't do inference based on this type
8787
(x: {

tests/baselines/reference/callsOnComplexSignatures.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,13 @@ function test2() {
4646

4747
interface Messages {
4848
readonly foo: (options: { [key: string]: any, b: number }) => string;
49-
>foo : (options: { [key: string]: any; b: number; }) => string
49+
>foo : (options: { [key: string]: any; b: number;}) => string
5050
>options : { [key: string]: any; b: number; }
5151
>key : string
5252
>b : number
5353

5454
readonly bar: (options: { [key: string]: any, a: string }) => string;
55-
>bar : (options: { [key: string]: any; a: string; }) => string
55+
>bar : (options: { [key: string]: any; a: string;}) => string
5656
>options : { [key: string]: any; a: string; }
5757
>key : string
5858
>a : string

tests/baselines/reference/collisionArgumentsInType.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ var v12: (arguments: number, ...restParameters) => void; // no error - no code g
1212
>restParameters : any[]
1313

1414
var v2: {
15-
>v2 : { (arguments: number, ...restParameters: any[]): any; new (arguments: number, ...restParameters: any[]): any; foo(arguments: number, ...restParameters: any[]): any; prop: (arguments: number, ...restParameters: any[]) => void; }
15+
>v2 : { (arguments: number, ...restParameters: any[]): any; new (arguments: number, ...restParameters: any[]): any; foo(arguments: number, ...restParameters: any[]): any; prop: (arguments: number, ...restParameters) => void; }
1616

1717
(arguments: number, ...restParameters); // no error - no code gen
1818
>arguments : number
@@ -33,7 +33,7 @@ var v2: {
3333
>restParameters : any[]
3434
}
3535
var v21: {
36-
>v21 : { (i: number, ...arguments: any[]): any; new (i: number, ...arguments: any[]): any; foo(i: number, ...arguments: any[]): any; prop: (i: number, ...arguments: any[]) => void; }
36+
>v21 : { (i: number, ...arguments: any[]): any; new (i: number, ...arguments: any[]): any; foo(i: number, ...arguments: any[]): any; prop: (i: number, ...arguments) => void; }
3737

3838
(i: number, ...arguments); // no error - no code gen
3939
>i : number

tests/baselines/reference/collisionRestParameterInType.types

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ var v1: (_i: number, ...restParameters) => void; // no error - no code gen
77
>restParameters : any[]
88

99
var v2: {
10-
>v2 : { (_i: number, ...restParameters: any[]): any; new (_i: number, ...restParameters: any[]): any; foo(_i: number, ...restParameters: any[]): any; prop: (_i: number, ...restParameters: any[]) => void; }
10+
>v2 : { (_i: number, ...restParameters: any[]): any; new (_i: number, ...restParameters: any[]): any; foo(_i: number, ...restParameters: any[]): any; prop: (_i: number, ...restParameters) => void; }
1111

1212
(_i: number, ...restParameters); // no error - no code gen
1313
>_i : number

0 commit comments

Comments
 (0)