Skip to content

Commit d45012c

Browse files
nicdardosaimola
andauthored
Add JS-specific diagnostic message for resolve() in Promise where type argument can't be inferred (microsoft#48533)
* change error message on Promise * fix(46570): Unhelpful Promise type argument hint in JS file * refactor: Reword void Promise message for JSDoc type hint to provide better feedback Co-authored-by: Osa <[email protected]>
1 parent 2a78b22 commit d45012c

7 files changed

+18
-7
lines changed

Diff for: src/compiler/checker.ts

+9-3
Original file line numberDiff line numberDiff line change
@@ -30413,9 +30413,15 @@ namespace ts {
3041330413
const parameterRange = hasRestParameter ? min
3041430414
: min < max ? min + "-" + max
3041530415
: min;
30416-
const error = hasRestParameter ? Diagnostics.Expected_at_least_0_arguments_but_got_1
30417-
: parameterRange === 1 && args.length === 0 && isPromiseResolveArityError(node) ? Diagnostics.Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise
30418-
: Diagnostics.Expected_0_arguments_but_got_1;
30416+
const isVoidPromiseError = !hasRestParameter && parameterRange === 1 && args.length === 0 && isPromiseResolveArityError(node);
30417+
if (isVoidPromiseError && isInJSFile(node)) {
30418+
return getDiagnosticForCallNode(node, Diagnostics.Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_without_arguments);
30419+
}
30420+
const error = hasRestParameter
30421+
? Diagnostics.Expected_at_least_0_arguments_but_got_1
30422+
: isVoidPromiseError
30423+
? Diagnostics.Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise
30424+
: Diagnostics.Expected_0_arguments_but_got_1;
3041930425
if (min < args.length && args.length < max) {
3042030426
// between min and max, but with no matching overload
3042130427
return getDiagnosticForCallNode(node, Diagnostics.No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments, args.length, maxBelow, minAbove);

Diff for: src/compiler/diagnosticMessages.json

+4
Original file line numberDiff line numberDiff line change
@@ -3369,6 +3369,10 @@
33693369
"category": "Error",
33703370
"code": 2809
33713371
},
3372+
"Expected 1 argument, but got 0. 'new Promise()' needs a JSDoc hint to produce a 'resolve' that can be called without arguments.": {
3373+
"category": "Error",
3374+
"code": 2810
3375+
},
33723376
"Initializer for property '{0}'": {
33733377
"category": "Error",
33743378
"code": 2811

Diff for: src/services/codefixes/fixAddVoidToPromise.ts

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ namespace ts.codefix {
33
const fixName = "addVoidToPromise";
44
const fixId = "addVoidToPromise";
55
const errorCodes = [
6+
Diagnostics.Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_without_arguments.code,
67
Diagnostics.Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise.code
78
];
89
registerCodeFix({

Diff for: tests/cases/fourslash/codeFixAddVoidToPromiseJS.1.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
////const p1 = new Promise(resolve => resolve());
1010

1111
verify.codeFix({
12-
errorCode: 2794,
12+
errorCode: 2810,
1313
description: "Add 'void' to Promise resolved without a value",
1414
index: 2,
1515
newFileContent: `const p1 = /** @type {Promise<void>} */(new Promise(resolve => resolve()));`

Diff for: tests/cases/fourslash/codeFixAddVoidToPromiseJS.2.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
////const p2 = /** @type {Promise<number>} */(new Promise(resolve => resolve()));
1010

1111
verify.codeFix({
12-
errorCode: 2794,
12+
errorCode: 2810,
1313
description: "Add 'void' to Promise resolved without a value",
1414
index: 2,
1515
newFileContent: `const p2 = /** @type {Promise<number | void>} */(new Promise(resolve => resolve()));`

Diff for: tests/cases/fourslash/codeFixAddVoidToPromiseJS.3.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
////const p3 = /** @type {Promise<number | string>} */(new Promise(resolve => resolve()));
1010

1111
verify.codeFix({
12-
errorCode: 2794,
12+
errorCode: 2810,
1313
description: "Add 'void' to Promise resolved without a value",
1414
index: 2,
1515
newFileContent: `const p3 = /** @type {Promise<number | string | void>} */(new Promise(resolve => resolve()));`

Diff for: tests/cases/fourslash/codeFixAddVoidToPromiseJS.4.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
////const p4 = /** @type {Promise<{ x: number } & { y: string }>} */(new Promise(resolve => resolve()));
1010

1111
verify.codeFix({
12-
errorCode: 2794,
12+
errorCode: 2810,
1313
description: "Add 'void' to Promise resolved without a value",
1414
index: 2,
1515
newFileContent: `const p4 = /** @type {Promise<({ x: number } & { y: string }) | void>} */(new Promise(resolve => resolve()));`

0 commit comments

Comments
 (0)