Skip to content

Commit 103fe5f

Browse files
committed
Merge branch 'master' into referencesPrototypeSourceFile
Uptodate to 3.6.0-dev.20190711
2 parents b631850 + 8eb3822 commit 103fe5f

File tree

533 files changed

+15419
-4719
lines changed

Some content is hidden

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

533 files changed

+15419
-4719
lines changed

Gulpfile.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,8 @@ task("runtests").flags = {
415415
" --no-lint": "Disables lint",
416416
" --timeout=<ms>": "Overrides the default test timeout.",
417417
" --built": "Compile using the built version of the compiler.",
418+
" --shards": "Total number of shards running tests (default: 1)",
419+
" --shardId": "1-based ID of this shard (default: 1)",
418420
}
419421

420422
const runTestsParallel = () => runConsoleTests("built/local/run.js", "min", /*runInParallel*/ true, /*watchMode*/ false);
@@ -430,6 +432,8 @@ task("runtests-parallel").flags = {
430432
" --timeout=<ms>": "Overrides the default test timeout.",
431433
" --built": "Compile using the built version of the compiler.",
432434
" --skipPercent=<number>": "Skip expensive tests with <percent> chance to miss an edit. Default 5%.",
435+
" --shards": "Total number of shards running tests (default: 1)",
436+
" --shardId": "1-based ID of this shard (default: 1)",
433437
};
434438

435439
task("diff", () => exec(getDiffTool(), [refBaseline, localBaseline], { ignoreExitCode: true }));

scripts/build/options.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const os = require("os");
55
/** @type {CommandLineOptions} */
66
module.exports = minimist(process.argv.slice(2), {
77
boolean: ["debug", "dirty", "inspect", "light", "colors", "lint", "lkg", "soft", "fix", "failed", "keepFailed", "force", "built"],
8-
string: ["browser", "tests", "host", "reporter", "stackTraceLimit", "timeout"],
8+
string: ["browser", "tests", "host", "reporter", "stackTraceLimit", "timeout", "shards", "shardId"],
99
alias: {
1010
"b": "browser",
1111
"d": "debug", "debug-brk": "debug",

scripts/build/tests.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ async function runConsoleTests(runJs, defaultReporter, runInParallel, watchMode,
3636
const testConfigFile = "test.config";
3737
const failed = cmdLineOptions.failed;
3838
const keepFailed = cmdLineOptions.keepFailed;
39+
const shards = +cmdLineOptions.shards || undefined;
40+
const shardId = +cmdLineOptions.shardId || undefined;
3941
if (!cmdLineOptions.dirty) {
4042
await cleanTestDirs();
4143
cancelToken.throwIfCancellationRequested();
@@ -63,8 +65,8 @@ async function runConsoleTests(runJs, defaultReporter, runInParallel, watchMode,
6365
testTimeout = 400000;
6466
}
6567

66-
if (tests || runners || light || testTimeout || taskConfigsFolder || keepFailed || skipPercent !== undefined) {
67-
writeTestConfigFile(tests, runners, light, skipPercent, taskConfigsFolder, workerCount, stackTraceLimit, testTimeout, keepFailed);
68+
if (tests || runners || light || testTimeout || taskConfigsFolder || keepFailed || skipPercent !== undefined || shards || shardId) {
69+
writeTestConfigFile(tests, runners, light, skipPercent, taskConfigsFolder, workerCount, stackTraceLimit, testTimeout, keepFailed, shards, shardId);
6870
}
6971

7072
const colors = cmdLineOptions.colors;
@@ -165,8 +167,10 @@ exports.cleanTestDirs = cleanTestDirs;
165167
* @param {string} [stackTraceLimit]
166168
* @param {string | number} [timeout]
167169
* @param {boolean} [keepFailed]
170+
* @param {number | undefined} [shards]
171+
* @param {number | undefined} [shardId]
168172
*/
169-
function writeTestConfigFile(tests, runners, light, skipPercent, taskConfigsFolder, workerCount, stackTraceLimit, timeout, keepFailed) {
173+
function writeTestConfigFile(tests, runners, light, skipPercent, taskConfigsFolder, workerCount, stackTraceLimit, timeout, keepFailed, shards, shardId) {
170174
const testConfigContents = JSON.stringify({
171175
test: tests ? [tests] : undefined,
172176
runners: runners ? runners.split(",") : undefined,
@@ -177,7 +181,9 @@ function writeTestConfigFile(tests, runners, light, skipPercent, taskConfigsFold
177181
taskConfigsFolder,
178182
noColor: !cmdLineOptions.colors,
179183
timeout,
180-
keepFailed
184+
keepFailed,
185+
shards,
186+
shardId
181187
});
182188
log.info("Running tests with config: " + testConfigContents);
183189
fs.writeFileSync("test.config", testConfigContents);

src/compiler/builderState.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -427,8 +427,8 @@ namespace ts.BuilderState {
427427
const references = state.referencedMap.get(path);
428428
if (references) {
429429
const iterator = references.keys();
430-
for (let { value, done } = iterator.next(); !done; { value, done } = iterator.next()) {
431-
queue.push(value as Path);
430+
for (let iterResult = iterator.next(); !iterResult.done; iterResult = iterator.next()) {
431+
queue.push(iterResult.value as Path);
432432
}
433433
}
434434
}

src/compiler/checker.ts

Lines changed: 1317 additions & 527 deletions
Large diffs are not rendered by default.

src/compiler/commandLineParser.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ namespace ts {
4040
["es2017.string", "lib.es2017.string.d.ts"],
4141
["es2017.intl", "lib.es2017.intl.d.ts"],
4242
["es2017.typedarrays", "lib.es2017.typedarrays.d.ts"],
43+
["es2018.asyncgenerator", "lib.es2018.asyncgenerator.d.ts"],
4344
["es2018.asynciterable", "lib.es2018.asynciterable.d.ts"],
4445
["es2018.intl", "lib.es2018.intl.d.ts"],
4546
["es2018.promise", "lib.es2018.promise.d.ts"],
@@ -1905,7 +1906,9 @@ namespace ts {
19051906
case "object":
19061907
return {};
19071908
default:
1908-
return option.type.keys().next().value;
1909+
const iterResult = option.type.keys().next();
1910+
if (!iterResult.done) return iterResult.value;
1911+
return Debug.fail("Expected 'option.type' to have entries.");
19091912
}
19101913
}
19111914

src/compiler/core.ts

Lines changed: 24 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ namespace ts {
2424
" __sortedArrayBrand": any;
2525
}
2626

27-
2827
/** ES6 Map interface, only read methods included. */
2928
export interface ReadonlyMap<T> {
3029
get(key: string): T | undefined;
@@ -45,7 +44,7 @@ namespace ts {
4544

4645
/** ES6 Iterator type. */
4746
export interface Iterator<T> {
48-
next(): { value: T, done: false } | { value: never, done: true };
47+
next(): { value: T, done?: false } | { value: never, done: true };
4948
}
5049

5150
/** Array that is only intended to be pushed to, never read. */
@@ -297,12 +296,13 @@ namespace ts {
297296
forEach(action: (value: T, key: string) => void): void {
298297
const iterator = this.entries();
299298
while (true) {
300-
const { value: entry, done } = iterator.next();
301-
if (done) {
299+
const iterResult = iterator.next();
300+
if (iterResult.done) {
302301
break;
303302
}
304303

305-
action(entry[1], entry[0]);
304+
const [key, value] = iterResult.value;
305+
action(value, key);
306306
}
307307
}
308308
};
@@ -346,11 +346,11 @@ namespace ts {
346346

347347
export function firstDefinedIterator<T, U>(iter: Iterator<T>, callback: (element: T) => U | undefined): U | undefined {
348348
while (true) {
349-
const { value, done } = iter.next();
350-
if (done) {
349+
const iterResult = iter.next();
350+
if (iterResult.done) {
351351
return undefined;
352352
}
353-
const result = callback(value);
353+
const result = callback(iterResult.value);
354354
if (result !== undefined) {
355355
return result;
356356
}
@@ -375,7 +375,7 @@ namespace ts {
375375
return { value: undefined as never, done: true };
376376
}
377377
i++;
378-
return { value: [arrayA[i - 1], arrayB[i - 1]], done: false };
378+
return { value: [arrayA[i - 1], arrayB[i - 1]] as [T, U], done: false };
379379
}
380380
};
381381
}
@@ -567,7 +567,7 @@ namespace ts {
567567
return {
568568
next() {
569569
const iterRes = iter.next();
570-
return iterRes.done ? iterRes : { value: mapFn(iterRes.value), done: false };
570+
return iterRes.done ? iterRes as { done: true, value: never } : { value: mapFn(iterRes.value), done: false };
571571
}
572572
};
573573
}
@@ -600,24 +600,18 @@ namespace ts {
600600
*
601601
* @param array The array to flatten.
602602
*/
603-
export function flatten<T>(array: ReadonlyArray<T | ReadonlyArray<T> | undefined>): T[];
604-
export function flatten<T>(array: ReadonlyArray<T | ReadonlyArray<T> | undefined> | undefined): T[] | undefined;
605-
export function flatten<T>(array: ReadonlyArray<T | ReadonlyArray<T> | undefined> | undefined): T[] | undefined {
606-
let result: T[] | undefined;
607-
if (array) {
608-
result = [];
609-
for (const v of array) {
610-
if (v) {
611-
if (isArray(v)) {
612-
addRange(result, v);
613-
}
614-
else {
615-
result.push(v);
616-
}
603+
export function flatten<T>(array: T[][] | ReadonlyArray<T | ReadonlyArray<T> | undefined>): T[] {
604+
const result = [];
605+
for (const v of array) {
606+
if (v) {
607+
if (isArray(v)) {
608+
addRange(result, v);
609+
}
610+
else {
611+
result.push(v);
617612
}
618613
}
619614
}
620-
621615
return result;
622616
}
623617

@@ -678,7 +672,7 @@ namespace ts {
678672
}
679673
const iterRes = iter.next();
680674
if (iterRes.done) {
681-
return iterRes;
675+
return iterRes as { done: true, value: never };
682676
}
683677
currentIter = getIterator(iterRes.value);
684678
}
@@ -753,7 +747,7 @@ namespace ts {
753747
while (true) {
754748
const res = iter.next();
755749
if (res.done) {
756-
return res;
750+
return res as { done: true, value: never };
757751
}
758752
const value = mapFn(res.value);
759753
if (value !== undefined) {
@@ -1078,6 +1072,7 @@ namespace ts {
10781072
* @param value The value to append to the array. If `value` is `undefined`, nothing is
10791073
* appended.
10801074
*/
1075+
export function append<TArray extends any[] | undefined, TValue extends NonNullable<TArray>[number] | undefined>(to: TArray, value: TValue): [undefined, undefined] extends [TArray, TValue] ? TArray : NonNullable<TArray>[number][];
10811076
export function append<T>(to: T[], value: T | undefined): T[];
10821077
export function append<T>(to: T[] | undefined, value: T): T[];
10831078
export function append<T>(to: T[] | undefined, value: T | undefined): T[] | undefined;
@@ -1402,8 +1397,8 @@ namespace ts {
14021397
export function arrayFrom<T>(iterator: Iterator<T> | IterableIterator<T>): T[];
14031398
export function arrayFrom<T, U>(iterator: Iterator<T> | IterableIterator<T>, map?: (t: T) => U): (T | U)[] {
14041399
const result: (T | U)[] = [];
1405-
for (let { value, done } = iterator.next(); !done; { value, done } = iterator.next()) {
1406-
result.push(map ? map(value) : value);
1400+
for (let iterResult = iterator.next(); !iterResult.done; iterResult = iterator.next()) {
1401+
result.push(map ? map(iterResult.value) : iterResult.value);
14071402
}
14081403
return result;
14091404
}

src/compiler/diagnosticMessages.json

Lines changed: 60 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1764,7 +1764,7 @@
17641764
"category": "Error",
17651765
"code": 2489
17661766
},
1767-
"The type returned by the 'next()' method of an iterator must have a 'value' property.": {
1767+
"The type returned by the '{0}()' method of an iterator must have a 'value' property.": {
17681768
"category": "Error",
17691769
"code": 2490
17701770
},
@@ -1992,7 +1992,7 @@
19921992
"category": "Error",
19931993
"code": 2546
19941994
},
1995-
"The type returned by the 'next()' method of an async iterator must be a promise for a type with a 'value' property.": {
1995+
"The type returned by the '{0}()' method of an async iterator must be a promise for a type with a 'value' property.": {
19961996
"category": "Error",
19971997
"code": 2547
19981998
},
@@ -2653,6 +2653,50 @@
26532653
"category": "Error",
26542654
"code": 2762
26552655
},
2656+
"Cannot iterate value because the 'next' method of its iterator expects type '{1}', but for-of will always send '{0}'.": {
2657+
"category": "Error",
2658+
"code": 2763
2659+
},
2660+
"Cannot iterate value because the 'next' method of its iterator expects type '{1}', but array spread will always send '{0}'.": {
2661+
"category": "Error",
2662+
"code": 2764
2663+
},
2664+
"Cannot iterate value because the 'next' method of its iterator expects type '{1}', but array destructuring will always send '{0}'.": {
2665+
"category": "Error",
2666+
"code": 2765
2667+
},
2668+
"Cannot delegate iteration to value because the 'next' method of its iterator expects type '{1}', but the containing generator will always send '{0}'.": {
2669+
"category": "Error",
2670+
"code": 2766
2671+
},
2672+
"The '{0}' property of an iterator must be a method.": {
2673+
"category": "Error",
2674+
"code": 2767
2675+
},
2676+
"The '{0}' property of an async iterator must be a method.": {
2677+
"category": "Error",
2678+
"code": 2768
2679+
},
2680+
"No overload matches this call.": {
2681+
"category": "Error",
2682+
"code": 2769
2683+
},
2684+
"The last overload gave the following error.": {
2685+
"category": "Error",
2686+
"code": 2770
2687+
},
2688+
"The last overload is declared here.": {
2689+
"category": "Error",
2690+
"code": 2771
2691+
},
2692+
"Overload {0} of {1}, '{2}', gave the following error.": {
2693+
"category": "Error",
2694+
"code": 2772
2695+
},
2696+
"Did you forget to use 'await'?": {
2697+
"category": "Error",
2698+
"code": 2773
2699+
},
26562700

26572701
"Import declaration '{0}' is using private name '{1}'.": {
26582702
"category": "Error",
@@ -4218,7 +4262,7 @@
42184262
"category": "Error",
42194263
"code": 7024
42204264
},
4221-
"Generator implicitly has type '{0}' because it does not yield any values. Consider supplying a return type.": {
4265+
"Generator implicitly has yield type '{0}' because it does not yield any values. Consider supplying a return type annotation.": {
42224266
"category": "Error",
42234267
"code": 7025
42244268
},
@@ -4340,6 +4384,11 @@
43404384
"category": "Error",
43414385
"code": 7054
43424386
},
4387+
"'{0}', which lacks return-type annotation, implicitly has an '{1}' yield type.": {
4388+
"category": "Error",
4389+
"code": 7055
4390+
},
4391+
43434392
"You cannot rename this element.": {
43444393
"category": "Error",
43454394
"code": 8000
@@ -5034,6 +5083,14 @@
50345083
"category": "Message",
50355084
"code": 95080
50365085
},
5086+
"Add 'const' to unresolved variable": {
5087+
"category": "Message",
5088+
"code": 95081
5089+
},
5090+
"Add 'const' to all unresolved variables": {
5091+
"category": "Message",
5092+
"code": 95082
5093+
},
50375094
"No value exists in scope for the shorthand property '{0}'. Either declare one or provide an initializer.": {
50385095
"category": "Error",
50395096
"code": 18004

0 commit comments

Comments
 (0)