Skip to content

Commit aea8630

Browse files
committed
Merge branch 'master' into watchImprovements
2 parents fdb104b + 2fbc225 commit aea8630

24 files changed

+40671
-80
lines changed

src/compiler/checker.ts

Lines changed: 104 additions & 57 deletions
Large diffs are not rendered by default.

src/compiler/diagnosticMessages.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1920,6 +1920,10 @@
19201920
"category": "Error",
19211921
"code": 2562
19221922
},
1923+
"The containing function or module body is too large for control flow analysis.": {
1924+
"category": "Error",
1925+
"code": 2563
1926+
},
19231927
"JSX element attributes type '{0}' may not be a union type.": {
19241928
"category": "Error",
19251929
"code": 2600

src/compiler/utilities.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5021,6 +5021,11 @@ namespace ts {
50215021
}
50225022
}
50235023

5024+
/* @internal */
5025+
export function isFunctionOrModuleBlock(node: Node): boolean {
5026+
return isSourceFile(node) || isModuleBlock(node) || isBlock(node) && isFunctionLike(node.parent);
5027+
}
5028+
50245029
// Classes
50255030
export function isClassElement(node: Node): node is ClassElement {
50265031
const kind = node.kind;

src/lib/es5.d.ts

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1744,8 +1744,8 @@ interface Int8Array {
17441744
interface Int8ArrayConstructor {
17451745
readonly prototype: Int8Array;
17461746
new(length: number): Int8Array;
1747-
new(array: ArrayLike<number>): Int8Array;
1748-
new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): Int8Array;
1747+
new(arrayOrArrayBuffer: ArrayLike<number> | ArrayBufferLike): Int8Array;
1748+
new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Int8Array;
17491749

17501750
/**
17511751
* The size in bytes of each element in the array.
@@ -2012,8 +2012,8 @@ interface Uint8Array {
20122012
interface Uint8ArrayConstructor {
20132013
readonly prototype: Uint8Array;
20142014
new(length: number): Uint8Array;
2015-
new(array: ArrayLike<number>): Uint8Array;
2016-
new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): Uint8Array;
2015+
new(arrayOrArrayBuffer: ArrayLike<number> | ArrayBufferLike): Uint8Array;
2016+
new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Uint8Array;
20172017

20182018
/**
20192019
* The size in bytes of each element in the array.
@@ -2279,8 +2279,8 @@ interface Uint8ClampedArray {
22792279
interface Uint8ClampedArrayConstructor {
22802280
readonly prototype: Uint8ClampedArray;
22812281
new(length: number): Uint8ClampedArray;
2282-
new(array: ArrayLike<number>): Uint8ClampedArray;
2283-
new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): Uint8ClampedArray;
2282+
new(arrayOrArrayBuffer: ArrayLike<number> | ArrayBufferLike): Uint8ClampedArray;
2283+
new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Uint8ClampedArray;
22842284

22852285
/**
22862286
* The size in bytes of each element in the array.
@@ -2544,8 +2544,8 @@ interface Int16Array {
25442544
interface Int16ArrayConstructor {
25452545
readonly prototype: Int16Array;
25462546
new(length: number): Int16Array;
2547-
new(array: ArrayLike<number>): Int16Array;
2548-
new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): Int16Array;
2547+
new(arrayOrArrayBuffer: ArrayLike<number> | ArrayBufferLike): Int16Array;
2548+
new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Int16Array;
25492549

25502550
/**
25512551
* The size in bytes of each element in the array.
@@ -2812,8 +2812,8 @@ interface Uint16Array {
28122812
interface Uint16ArrayConstructor {
28132813
readonly prototype: Uint16Array;
28142814
new(length: number): Uint16Array;
2815-
new(array: ArrayLike<number>): Uint16Array;
2816-
new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): Uint16Array;
2815+
new(arrayOrArrayBuffer: ArrayLike<number> | ArrayBufferLike): Uint16Array;
2816+
new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Uint16Array;
28172817

28182818
/**
28192819
* The size in bytes of each element in the array.
@@ -3079,8 +3079,8 @@ interface Int32Array {
30793079
interface Int32ArrayConstructor {
30803080
readonly prototype: Int32Array;
30813081
new(length: number): Int32Array;
3082-
new(array: ArrayLike<number>): Int32Array;
3083-
new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): Int32Array;
3082+
new(arrayOrArrayBuffer: ArrayLike<number> | ArrayBufferLike): Int32Array;
3083+
new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Int32Array;
30843084

30853085
/**
30863086
* The size in bytes of each element in the array.
@@ -3345,8 +3345,8 @@ interface Uint32Array {
33453345
interface Uint32ArrayConstructor {
33463346
readonly prototype: Uint32Array;
33473347
new(length: number): Uint32Array;
3348-
new(array: ArrayLike<number>): Uint32Array;
3349-
new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): Uint32Array;
3348+
new(arrayOrArrayBuffer: ArrayLike<number> | ArrayBufferLike): Uint32Array;
3349+
new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Uint32Array;
33503350

33513351
/**
33523352
* The size in bytes of each element in the array.
@@ -3612,8 +3612,8 @@ interface Float32Array {
36123612
interface Float32ArrayConstructor {
36133613
readonly prototype: Float32Array;
36143614
new(length: number): Float32Array;
3615-
new(array: ArrayLike<number>): Float32Array;
3616-
new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): Float32Array;
3615+
new(arrayOrArrayBuffer: ArrayLike<number> | ArrayBufferLike): Float32Array;
3616+
new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Float32Array;
36173617

36183618
/**
36193619
* The size in bytes of each element in the array.
@@ -3880,8 +3880,8 @@ interface Float64Array {
38803880
interface Float64ArrayConstructor {
38813881
readonly prototype: Float64Array;
38823882
new(length: number): Float64Array;
3883-
new(array: ArrayLike<number>): Float64Array;
3884-
new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): Float64Array;
3883+
new(arrayOrArrayBuffer: ArrayLike<number> | ArrayBufferLike): Float64Array;
3884+
new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Float64Array;
38853885

38863886
/**
38873887
* The size in bytes of each element in the array.

src/server/project.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1196,16 +1196,22 @@ namespace ts.server {
11961196
if (this.projectService.globalPlugins) {
11971197
// Enable global plugins with synthetic configuration entries
11981198
for (const globalPluginName of this.projectService.globalPlugins) {
1199+
// Skip empty names from odd commandline parses
1200+
if (!globalPluginName) continue;
1201+
11991202
// Skip already-locally-loaded plugins
12001203
if (options.plugins && options.plugins.some(p => p.name === globalPluginName)) continue;
12011204

12021205
// Provide global: true so plugins can detect why they can't find their config
1206+
this.projectService.logger.info(`Loading global plugin ${globalPluginName}`);
12031207
this.enablePlugin({ name: globalPluginName, global: true } as PluginImport, searchPaths);
12041208
}
12051209
}
12061210
}
12071211

12081212
private enablePlugin(pluginConfigEntry: PluginImport, searchPaths: string[]) {
1213+
this.projectService.logger.info(`Enabling plugin ${pluginConfigEntry.name} from candidate paths: ${searchPaths.join(",")}`);
1214+
12091215
const log = (message: string) => {
12101216
this.projectService.logger.info(message);
12111217
};
@@ -1217,7 +1223,7 @@ namespace ts.server {
12171223
return;
12181224
}
12191225
}
1220-
this.projectService.logger.info(`Couldn't find ${pluginConfigEntry.name} anywhere in paths: ${searchPaths.join(",")}`);
1226+
this.projectService.logger.info(`Couldn't find ${pluginConfigEntry.name}`);
12211227
}
12221228

12231229
private enableProxy(pluginModuleFactory: PluginModuleFactory, configEntry: PluginImport) {
@@ -1236,7 +1242,15 @@ namespace ts.server {
12361242
};
12371243

12381244
const pluginModule = pluginModuleFactory({ typescript: ts });
1239-
this.languageService = pluginModule.create(info);
1245+
const newLS = pluginModule.create(info);
1246+
for (const k of Object.keys(this.languageService)) {
1247+
if (!(k in newLS)) {
1248+
this.projectService.logger.info(`Plugin activation warning: Missing proxied method ${k} in created LS. Patching.`);
1249+
(newLS as any)[k] = (this.languageService as any)[k];
1250+
}
1251+
}
1252+
this.projectService.logger.info(`Plugin validation succeded`);
1253+
this.languageService = newLS;
12401254
this.plugins.push(pluginModule);
12411255
}
12421256
catch (e) {
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
=== tests/cases/compiler/foo.js ===
2+
// Repro for #16585
3+
const x = {
4+
>x : Symbol(x, Decl(foo.js, 1, 5))
5+
6+
bar() {
7+
>bar : Symbol(bar, Decl(foo.js, 1, 11))
8+
9+
setTimeout(function() { arguments }, 0);
10+
>setTimeout : Symbol(setTimeout, Decl(lib.dom.d.ts, --, --), Decl(lib.dom.d.ts, --, --))
11+
>arguments : Symbol(arguments)
12+
}
13+
}
14+
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
=== tests/cases/compiler/foo.js ===
2+
// Repro for #16585
3+
const x = {
4+
>x : { [x: string]: any; bar(): void; }
5+
>{ bar() { setTimeout(function() { arguments }, 0); }} : { [x: string]: any; bar(): void; }
6+
7+
bar() {
8+
>bar : () => void
9+
10+
setTimeout(function() { arguments }, 0);
11+
>setTimeout(function() { arguments }, 0) : number
12+
>setTimeout : { (handler: (...args: any[]) => void, timeout: number): number; (handler: any, timeout?: any, ...args: any[]): number; }
13+
>function() { arguments } : (...args: any[]) => void
14+
>arguments : IArguments
15+
>0 : 0
16+
}
17+
}
18+
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
//// [higherOrderMappedIndexLookupInference.ts]
2+
// @strict
3+
4+
function f1(a: <T>() => keyof T, b: <U>() => keyof U) {
5+
a = b;
6+
b = a;
7+
}
8+
9+
function f2(a: <T, K extends keyof T>() => T[K], b: <U, L extends keyof U>() => U[L]) {
10+
a = b;
11+
b = a;
12+
}
13+
14+
function f3(a: <T>() => { [K in keyof T]: T[K] }, b: <U>() => { [K in keyof U]: U[K] }) {
15+
a = b;
16+
b = a;
17+
}
18+
19+
// Repro from #18338
20+
21+
type IdMapped<T> = { [K in keyof T]: T[K] }
22+
23+
declare const f: <T>() => IdMapped<T>;
24+
declare const g: <U>() => { [K in keyof U]: U[K] };
25+
26+
const h: typeof g = f;
27+
28+
29+
//// [higherOrderMappedIndexLookupInference.js]
30+
// @strict
31+
function f1(a, b) {
32+
a = b;
33+
b = a;
34+
}
35+
function f2(a, b) {
36+
a = b;
37+
b = a;
38+
}
39+
function f3(a, b) {
40+
a = b;
41+
b = a;
42+
}
43+
var h = f;
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
=== tests/cases/compiler/higherOrderMappedIndexLookupInference.ts ===
2+
// @strict
3+
4+
function f1(a: <T>() => keyof T, b: <U>() => keyof U) {
5+
>f1 : Symbol(f1, Decl(higherOrderMappedIndexLookupInference.ts, 0, 0))
6+
>a : Symbol(a, Decl(higherOrderMappedIndexLookupInference.ts, 2, 12))
7+
>T : Symbol(T, Decl(higherOrderMappedIndexLookupInference.ts, 2, 16))
8+
>T : Symbol(T, Decl(higherOrderMappedIndexLookupInference.ts, 2, 16))
9+
>b : Symbol(b, Decl(higherOrderMappedIndexLookupInference.ts, 2, 32))
10+
>U : Symbol(U, Decl(higherOrderMappedIndexLookupInference.ts, 2, 37))
11+
>U : Symbol(U, Decl(higherOrderMappedIndexLookupInference.ts, 2, 37))
12+
13+
a = b;
14+
>a : Symbol(a, Decl(higherOrderMappedIndexLookupInference.ts, 2, 12))
15+
>b : Symbol(b, Decl(higherOrderMappedIndexLookupInference.ts, 2, 32))
16+
17+
b = a;
18+
>b : Symbol(b, Decl(higherOrderMappedIndexLookupInference.ts, 2, 32))
19+
>a : Symbol(a, Decl(higherOrderMappedIndexLookupInference.ts, 2, 12))
20+
}
21+
22+
function f2(a: <T, K extends keyof T>() => T[K], b: <U, L extends keyof U>() => U[L]) {
23+
>f2 : Symbol(f2, Decl(higherOrderMappedIndexLookupInference.ts, 5, 1))
24+
>a : Symbol(a, Decl(higherOrderMappedIndexLookupInference.ts, 7, 12))
25+
>T : Symbol(T, Decl(higherOrderMappedIndexLookupInference.ts, 7, 16))
26+
>K : Symbol(K, Decl(higherOrderMappedIndexLookupInference.ts, 7, 18))
27+
>T : Symbol(T, Decl(higherOrderMappedIndexLookupInference.ts, 7, 16))
28+
>T : Symbol(T, Decl(higherOrderMappedIndexLookupInference.ts, 7, 16))
29+
>K : Symbol(K, Decl(higherOrderMappedIndexLookupInference.ts, 7, 18))
30+
>b : Symbol(b, Decl(higherOrderMappedIndexLookupInference.ts, 7, 48))
31+
>U : Symbol(U, Decl(higherOrderMappedIndexLookupInference.ts, 7, 53))
32+
>L : Symbol(L, Decl(higherOrderMappedIndexLookupInference.ts, 7, 55))
33+
>U : Symbol(U, Decl(higherOrderMappedIndexLookupInference.ts, 7, 53))
34+
>U : Symbol(U, Decl(higherOrderMappedIndexLookupInference.ts, 7, 53))
35+
>L : Symbol(L, Decl(higherOrderMappedIndexLookupInference.ts, 7, 55))
36+
37+
a = b;
38+
>a : Symbol(a, Decl(higherOrderMappedIndexLookupInference.ts, 7, 12))
39+
>b : Symbol(b, Decl(higherOrderMappedIndexLookupInference.ts, 7, 48))
40+
41+
b = a;
42+
>b : Symbol(b, Decl(higherOrderMappedIndexLookupInference.ts, 7, 48))
43+
>a : Symbol(a, Decl(higherOrderMappedIndexLookupInference.ts, 7, 12))
44+
}
45+
46+
function f3(a: <T>() => { [K in keyof T]: T[K] }, b: <U>() => { [K in keyof U]: U[K] }) {
47+
>f3 : Symbol(f3, Decl(higherOrderMappedIndexLookupInference.ts, 10, 1))
48+
>a : Symbol(a, Decl(higherOrderMappedIndexLookupInference.ts, 12, 12))
49+
>T : Symbol(T, Decl(higherOrderMappedIndexLookupInference.ts, 12, 16))
50+
>K : Symbol(K, Decl(higherOrderMappedIndexLookupInference.ts, 12, 27))
51+
>T : Symbol(T, Decl(higherOrderMappedIndexLookupInference.ts, 12, 16))
52+
>T : Symbol(T, Decl(higherOrderMappedIndexLookupInference.ts, 12, 16))
53+
>K : Symbol(K, Decl(higherOrderMappedIndexLookupInference.ts, 12, 27))
54+
>b : Symbol(b, Decl(higherOrderMappedIndexLookupInference.ts, 12, 49))
55+
>U : Symbol(U, Decl(higherOrderMappedIndexLookupInference.ts, 12, 54))
56+
>K : Symbol(K, Decl(higherOrderMappedIndexLookupInference.ts, 12, 65))
57+
>U : Symbol(U, Decl(higherOrderMappedIndexLookupInference.ts, 12, 54))
58+
>U : Symbol(U, Decl(higherOrderMappedIndexLookupInference.ts, 12, 54))
59+
>K : Symbol(K, Decl(higherOrderMappedIndexLookupInference.ts, 12, 65))
60+
61+
a = b;
62+
>a : Symbol(a, Decl(higherOrderMappedIndexLookupInference.ts, 12, 12))
63+
>b : Symbol(b, Decl(higherOrderMappedIndexLookupInference.ts, 12, 49))
64+
65+
b = a;
66+
>b : Symbol(b, Decl(higherOrderMappedIndexLookupInference.ts, 12, 49))
67+
>a : Symbol(a, Decl(higherOrderMappedIndexLookupInference.ts, 12, 12))
68+
}
69+
70+
// Repro from #18338
71+
72+
type IdMapped<T> = { [K in keyof T]: T[K] }
73+
>IdMapped : Symbol(IdMapped, Decl(higherOrderMappedIndexLookupInference.ts, 15, 1))
74+
>T : Symbol(T, Decl(higherOrderMappedIndexLookupInference.ts, 19, 14))
75+
>K : Symbol(K, Decl(higherOrderMappedIndexLookupInference.ts, 19, 22))
76+
>T : Symbol(T, Decl(higherOrderMappedIndexLookupInference.ts, 19, 14))
77+
>T : Symbol(T, Decl(higherOrderMappedIndexLookupInference.ts, 19, 14))
78+
>K : Symbol(K, Decl(higherOrderMappedIndexLookupInference.ts, 19, 22))
79+
80+
declare const f: <T>() => IdMapped<T>;
81+
>f : Symbol(f, Decl(higherOrderMappedIndexLookupInference.ts, 21, 13))
82+
>T : Symbol(T, Decl(higherOrderMappedIndexLookupInference.ts, 21, 18))
83+
>IdMapped : Symbol(IdMapped, Decl(higherOrderMappedIndexLookupInference.ts, 15, 1))
84+
>T : Symbol(T, Decl(higherOrderMappedIndexLookupInference.ts, 21, 18))
85+
86+
declare const g: <U>() => { [K in keyof U]: U[K] };
87+
>g : Symbol(g, Decl(higherOrderMappedIndexLookupInference.ts, 22, 13))
88+
>U : Symbol(U, Decl(higherOrderMappedIndexLookupInference.ts, 22, 18))
89+
>K : Symbol(K, Decl(higherOrderMappedIndexLookupInference.ts, 22, 29))
90+
>U : Symbol(U, Decl(higherOrderMappedIndexLookupInference.ts, 22, 18))
91+
>U : Symbol(U, Decl(higherOrderMappedIndexLookupInference.ts, 22, 18))
92+
>K : Symbol(K, Decl(higherOrderMappedIndexLookupInference.ts, 22, 29))
93+
94+
const h: typeof g = f;
95+
>h : Symbol(h, Decl(higherOrderMappedIndexLookupInference.ts, 24, 5))
96+
>g : Symbol(g, Decl(higherOrderMappedIndexLookupInference.ts, 22, 13))
97+
>f : Symbol(f, Decl(higherOrderMappedIndexLookupInference.ts, 21, 13))
98+

0 commit comments

Comments
 (0)