Skip to content

Commit 95dbeb2

Browse files
committed
Merge branch 'main' into scan-bigger/fewer-jsdoc-tokens
2 parents 8ddbf23 + a34d5ae commit 95dbeb2

17 files changed

+906
-1268
lines changed

package-lock.json

+6-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/compiler/performanceCore.ts

+2-32
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import {
22
isNodeLikeSystem,
3-
Version,
4-
VersionRange,
53
} from "./_namespaces/ts";
64

75
// The following definitions provide the minimum compatible support for the Web Performance User Timings API
@@ -52,7 +50,6 @@ export type PerformanceObserverConstructor = new (callback: (list: PerformanceOb
5250
export type PerformanceEntryList = PerformanceEntry[];
5351

5452
// Browser globals for the Web Performance User Timings API
55-
declare const process: any;
5653
declare const performance: Performance | undefined;
5754
declare const PerformanceObserver: PerformanceObserverConstructor | undefined;
5855

@@ -86,35 +83,8 @@ function tryGetWebPerformanceHooks(): PerformanceHooks | undefined {
8683
function tryGetNodePerformanceHooks(): PerformanceHooks | undefined {
8784
if (isNodeLikeSystem()) {
8885
try {
89-
let performance: Performance;
90-
const { performance: nodePerformance, PerformanceObserver } = require("perf_hooks") as typeof import("perf_hooks");
91-
if (hasRequiredAPI(nodePerformance as unknown as Performance, PerformanceObserver)) {
92-
performance = nodePerformance as unknown as Performance;
93-
// There is a bug in Node's performance.measure prior to 12.16.3/13.13.0 that does not
94-
// match the Web Performance API specification. Node's implementation did not allow
95-
// optional `start` and `end` arguments for `performance.measure`.
96-
// See https://github.com./nodejs/node/pull/32651 for more information.
97-
const version = new Version(process.versions.node);
98-
const range = new VersionRange("<12.16.3 || 13 <13.13");
99-
if (range.test(version)) {
100-
performance = {
101-
get timeOrigin() { return nodePerformance.timeOrigin; },
102-
now() { return nodePerformance.now(); },
103-
mark(name) { return nodePerformance.mark(name); },
104-
measure(name, start = "nodeStart", end?) {
105-
if (end === undefined) {
106-
end = "__performance.measure-fix__";
107-
nodePerformance.mark(end);
108-
}
109-
nodePerformance.measure(name, start, end);
110-
if (end === "__performance.measure-fix__") {
111-
nodePerformance.clearMarks("__performance.measure-fix__");
112-
}
113-
},
114-
clearMarks(name) { return nodePerformance.clearMarks(name); },
115-
clearMeasures(name) { return (nodePerformance as unknown as Performance).clearMeasures(name); },
116-
};
117-
}
86+
const { performance, PerformanceObserver } = require("perf_hooks") as typeof import("perf_hooks");
87+
if (hasRequiredAPI(performance, PerformanceObserver)) {
11888
return {
11989
// By default, only write native events when generating a cpu profile or using the v8 profiler.
12090
shouldWriteNativeEvents: false,

src/services/codeFixProvider.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ function createCodeFixActionWorker(fixName: string, description: string, changes
4949
/** @internal */
5050
export function registerCodeFix(reg: CodeFixRegistration) {
5151
for (const error of reg.errorCodes) {
52+
errorCodeToFixesArray = undefined;
5253
errorCodeToFixes.add(String(error), reg);
5354
}
5455
if (reg.fixIds) {
@@ -59,9 +60,10 @@ export function registerCodeFix(reg: CodeFixRegistration) {
5960
}
6061
}
6162

63+
let errorCodeToFixesArray: readonly string[] | undefined;
6264
/** @internal */
6365
export function getSupportedErrorCodes(): readonly string[] {
64-
return arrayFrom(errorCodeToFixes.keys());
66+
return errorCodeToFixesArray ??= arrayFrom(errorCodeToFixes.keys());
6567
}
6668

6769
function removeFixIdIfFixAllUnavailable(registration: CodeFixRegistration, diagnostics: Diagnostic[]) {

src/testRunner/unittests/tsserver/helpers.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,7 @@ export class TestSession extends ts.server.Session {
560560
}
561561
const response = super.executeCommand(request);
562562
if (this.logger.hasLevel(ts.server.LogLevel.verbose)) {
563-
this.logger.info(`response:${ts.server.indent(JSON.stringify(response, undefined, 2))}`);
563+
this.logger.info(`response:${ts.server.indent(JSON.stringify(response.response === ts.getSupportedCodeFixes() ? { ...response, response: "ts.getSupportedCodeFixes()" } : response, undefined, 2))}`);
564564
this.testhost.baselineHost("After request");
565565
}
566566
return response;

src/testRunner/unittests/tsserver/plugins.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ describe("unittests:: tsserver:: plugins overriding getSupportedCodeFixes", () =
195195
return ["b"];
196196
default:
197197
// Make this stable list of single item so we dont have to update the baseline for every additional error
198-
return [info.languageService.getSupportedCodeFixes(fileName)[0]];
198+
return info.languageService.getSupportedCodeFixes(fileName);
199199
}
200200
};
201201
return proxy;

tests/baselines/reference/awaitedType.errors.txt

+44-1
Original file line numberDiff line numberDiff line change
@@ -191,4 +191,47 @@ tests/cases/compiler/awaitedType.ts(26,12): error TS2589: Type instantiation is
191191
async function brokenExample<AcceptableKeyType extends string = string>(structurePromise: Promise<GenericStructure<AcceptableKeyType>>, key: AcceptableKeyType): Promise<void> {
192192
const structure = await structurePromise;
193193
structure[key] = 1;
194-
}
194+
}
195+
196+
// repro from #46543
197+
198+
type SelectAndInclude = {
199+
select: any;
200+
include: any;
201+
};
202+
type HasSelect = {
203+
select: any;
204+
};
205+
type HasInclude = {
206+
include: any;
207+
};
208+
209+
type CheckSelect<T, S, U> = T extends SelectAndInclude
210+
? "Please either choose `select` or `include`"
211+
: T extends HasSelect
212+
? U
213+
: T extends HasInclude
214+
? U
215+
: S;
216+
217+
declare function findMany<T extends { select?: string; include?: string }>(
218+
args: T
219+
): CheckSelect<T, Promise<1>, Promise<2>>;
220+
221+
async function findManyWrapper<
222+
T extends { select?: string; include?: string }
223+
>(args: T) {
224+
const result = await findMany(args);
225+
return result;
226+
}
227+
228+
async function mainFindMany() {
229+
const shouldBeErrorText = await findManyWrapper({
230+
select: "foo",
231+
include: "bar",
232+
});
233+
const itsOne = await findManyWrapper({});
234+
const itsTwo1 = await findManyWrapper({ select: "foo" });
235+
const itsTwo2 = await findManyWrapper({ include: "bar" });
236+
}
237+

tests/baselines/reference/awaitedType.js

+57-1
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,50 @@ type GenericStructure<
183183
async function brokenExample<AcceptableKeyType extends string = string>(structurePromise: Promise<GenericStructure<AcceptableKeyType>>, key: AcceptableKeyType): Promise<void> {
184184
const structure = await structurePromise;
185185
structure[key] = 1;
186-
}
186+
}
187+
188+
// repro from #46543
189+
190+
type SelectAndInclude = {
191+
select: any;
192+
include: any;
193+
};
194+
type HasSelect = {
195+
select: any;
196+
};
197+
type HasInclude = {
198+
include: any;
199+
};
200+
201+
type CheckSelect<T, S, U> = T extends SelectAndInclude
202+
? "Please either choose `select` or `include`"
203+
: T extends HasSelect
204+
? U
205+
: T extends HasInclude
206+
? U
207+
: S;
208+
209+
declare function findMany<T extends { select?: string; include?: string }>(
210+
args: T
211+
): CheckSelect<T, Promise<1>, Promise<2>>;
212+
213+
async function findManyWrapper<
214+
T extends { select?: string; include?: string }
215+
>(args: T) {
216+
const result = await findMany(args);
217+
return result;
218+
}
219+
220+
async function mainFindMany() {
221+
const shouldBeErrorText = await findManyWrapper({
222+
select: "foo",
223+
include: "bar",
224+
});
225+
const itsOne = await findManyWrapper({});
226+
const itsTwo1 = await findManyWrapper({ select: "foo" });
227+
const itsTwo2 = await findManyWrapper({ include: "bar" });
228+
}
229+
187230

188231
//// [awaitedType.js]
189232
async function main() {
@@ -299,3 +342,16 @@ async function brokenExample(structurePromise, key) {
299342
const structure = await structurePromise;
300343
structure[key] = 1;
301344
}
345+
async function findManyWrapper(args) {
346+
const result = await findMany(args);
347+
return result;
348+
}
349+
async function mainFindMany() {
350+
const shouldBeErrorText = await findManyWrapper({
351+
select: "foo",
352+
include: "bar",
353+
});
354+
const itsOne = await findManyWrapper({});
355+
const itsTwo1 = await findManyWrapper({ select: "foo" });
356+
const itsTwo2 = await findManyWrapper({ include: "bar" });
357+
}

tests/baselines/reference/awaitedType.symbols

+120
Original file line numberDiff line numberDiff line change
@@ -476,3 +476,123 @@ async function brokenExample<AcceptableKeyType extends string = string>(structur
476476
>structure : Symbol(structure, Decl(awaitedType.ts, 182, 7))
477477
>key : Symbol(key, Decl(awaitedType.ts, 181, 135))
478478
}
479+
480+
// repro from #46543
481+
482+
type SelectAndInclude = {
483+
>SelectAndInclude : Symbol(SelectAndInclude, Decl(awaitedType.ts, 184, 1))
484+
485+
select: any;
486+
>select : Symbol(select, Decl(awaitedType.ts, 188, 25))
487+
488+
include: any;
489+
>include : Symbol(include, Decl(awaitedType.ts, 189, 14))
490+
491+
};
492+
type HasSelect = {
493+
>HasSelect : Symbol(HasSelect, Decl(awaitedType.ts, 191, 2))
494+
495+
select: any;
496+
>select : Symbol(select, Decl(awaitedType.ts, 192, 18))
497+
498+
};
499+
type HasInclude = {
500+
>HasInclude : Symbol(HasInclude, Decl(awaitedType.ts, 194, 2))
501+
502+
include: any;
503+
>include : Symbol(include, Decl(awaitedType.ts, 195, 19))
504+
505+
};
506+
507+
type CheckSelect<T, S, U> = T extends SelectAndInclude
508+
>CheckSelect : Symbol(CheckSelect, Decl(awaitedType.ts, 197, 2))
509+
>T : Symbol(T, Decl(awaitedType.ts, 199, 17))
510+
>S : Symbol(S, Decl(awaitedType.ts, 199, 19))
511+
>U : Symbol(U, Decl(awaitedType.ts, 199, 22))
512+
>T : Symbol(T, Decl(awaitedType.ts, 199, 17))
513+
>SelectAndInclude : Symbol(SelectAndInclude, Decl(awaitedType.ts, 184, 1))
514+
515+
? "Please either choose `select` or `include`"
516+
: T extends HasSelect
517+
>T : Symbol(T, Decl(awaitedType.ts, 199, 17))
518+
>HasSelect : Symbol(HasSelect, Decl(awaitedType.ts, 191, 2))
519+
520+
? U
521+
>U : Symbol(U, Decl(awaitedType.ts, 199, 22))
522+
523+
: T extends HasInclude
524+
>T : Symbol(T, Decl(awaitedType.ts, 199, 17))
525+
>HasInclude : Symbol(HasInclude, Decl(awaitedType.ts, 194, 2))
526+
527+
? U
528+
>U : Symbol(U, Decl(awaitedType.ts, 199, 22))
529+
530+
: S;
531+
>S : Symbol(S, Decl(awaitedType.ts, 199, 19))
532+
533+
declare function findMany<T extends { select?: string; include?: string }>(
534+
>findMany : Symbol(findMany, Decl(awaitedType.ts, 205, 6))
535+
>T : Symbol(T, Decl(awaitedType.ts, 207, 26))
536+
>select : Symbol(select, Decl(awaitedType.ts, 207, 37))
537+
>include : Symbol(include, Decl(awaitedType.ts, 207, 54))
538+
539+
args: T
540+
>args : Symbol(args, Decl(awaitedType.ts, 207, 75))
541+
>T : Symbol(T, Decl(awaitedType.ts, 207, 26))
542+
543+
): CheckSelect<T, Promise<1>, Promise<2>>;
544+
>CheckSelect : Symbol(CheckSelect, Decl(awaitedType.ts, 197, 2))
545+
>T : Symbol(T, Decl(awaitedType.ts, 207, 26))
546+
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))
547+
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))
548+
549+
async function findManyWrapper<
550+
>findManyWrapper : Symbol(findManyWrapper, Decl(awaitedType.ts, 209, 42))
551+
552+
T extends { select?: string; include?: string }
553+
>T : Symbol(T, Decl(awaitedType.ts, 211, 31))
554+
>select : Symbol(select, Decl(awaitedType.ts, 212, 13))
555+
>include : Symbol(include, Decl(awaitedType.ts, 212, 30))
556+
557+
>(args: T) {
558+
>args : Symbol(args, Decl(awaitedType.ts, 213, 2))
559+
>T : Symbol(T, Decl(awaitedType.ts, 211, 31))
560+
561+
const result = await findMany(args);
562+
>result : Symbol(result, Decl(awaitedType.ts, 214, 7))
563+
>findMany : Symbol(findMany, Decl(awaitedType.ts, 205, 6))
564+
>args : Symbol(args, Decl(awaitedType.ts, 213, 2))
565+
566+
return result;
567+
>result : Symbol(result, Decl(awaitedType.ts, 214, 7))
568+
}
569+
570+
async function mainFindMany() {
571+
>mainFindMany : Symbol(mainFindMany, Decl(awaitedType.ts, 216, 1))
572+
573+
const shouldBeErrorText = await findManyWrapper({
574+
>shouldBeErrorText : Symbol(shouldBeErrorText, Decl(awaitedType.ts, 219, 7))
575+
>findManyWrapper : Symbol(findManyWrapper, Decl(awaitedType.ts, 209, 42))
576+
577+
select: "foo",
578+
>select : Symbol(select, Decl(awaitedType.ts, 219, 51))
579+
580+
include: "bar",
581+
>include : Symbol(include, Decl(awaitedType.ts, 220, 18))
582+
583+
});
584+
const itsOne = await findManyWrapper({});
585+
>itsOne : Symbol(itsOne, Decl(awaitedType.ts, 223, 7))
586+
>findManyWrapper : Symbol(findManyWrapper, Decl(awaitedType.ts, 209, 42))
587+
588+
const itsTwo1 = await findManyWrapper({ select: "foo" });
589+
>itsTwo1 : Symbol(itsTwo1, Decl(awaitedType.ts, 224, 7))
590+
>findManyWrapper : Symbol(findManyWrapper, Decl(awaitedType.ts, 209, 42))
591+
>select : Symbol(select, Decl(awaitedType.ts, 224, 41))
592+
593+
const itsTwo2 = await findManyWrapper({ include: "bar" });
594+
>itsTwo2 : Symbol(itsTwo2, Decl(awaitedType.ts, 225, 7))
595+
>findManyWrapper : Symbol(findManyWrapper, Decl(awaitedType.ts, 209, 42))
596+
>include : Symbol(include, Decl(awaitedType.ts, 225, 41))
597+
}
598+

0 commit comments

Comments
 (0)