fix(29648): Error message related to JSDoc for non-JSDoc syntax error (#50793)

* fix(29648): improve diagnostics of non-JSDoc syntax errors

* fix lint errors

* update tests

* change diagnostic type suggestion. fix QF for jsdoc nullable type

* move error handling from the parser to the checker

* change diagnostic message. remove speculative parsing

* update baseline
This commit is contained in:
Oleksandr T
2022-12-29 16:50:57 -08:00
committed by GitHub
parent ba393b6b9f
commit 44152bc22e
30 changed files with 667 additions and 76 deletions
@@ -0,0 +1,24 @@
// @strict: true
function f1(a: string): a is string! {
return true;
}
function f2(a: string): a is !string {
return true;
}
function f3(a: string!) {}
function f4(a: number!) {}
function f5(a: !string) {}
function f6(a: !number) {}
function f7(): string! {}
function f8(): !string {}
const a = 1 as any!;
const b: number! = 1;
const c = 1 as !any;
const d: !number = 1;
@@ -0,0 +1,26 @@
// @strict: true
function f1(a: string): a is ?string {
return true;
}
function f2(a: string?) {}
function f3(a: number?) {}
function f4(a: ?string) {}
function f5(a: ?number) {}
function f6(a: string): ?string {
return true;
}
const a = 1 as any?;
const b: number? = 1;
const c = 1 as ?any;
const d: ?number = 1;
let e: unknown?;
let f: never?;
let g: void?;
let h: undefined?;
@@ -4,8 +4,8 @@
//// }
verify.codeFix({
description: "Change 'number?' to 'number | null'",
errorCode: 8020,
description: "Change 'number?' to 'number | undefined'",
errorCode: 17019,
index: 0,
newRangeContent: "number | null",
newRangeContent: "number | undefined",
});
@@ -4,8 +4,8 @@
//// }
verify.codeFix({
description: "Change 'string?' to 'string | null | undefined'",
errorCode: 8020,
description: "Change 'string?' to 'string | undefined'",
errorCode: 17019,
index: 1,
newRangeContent: "string | null | undefined",
newRangeContent: "string | undefined",
});
@@ -3,8 +3,8 @@
//// var x = 12 as [|number?|];
verify.codeFix({
description: "Change 'number?' to 'number | null'",
errorCode: 8020,
description: "Change 'number?' to 'number | undefined'",
errorCode: 17019,
index: 0,
newRangeContent: "number | null",
newRangeContent: "number | undefined",
});
@@ -2,8 +2,16 @@
//// var f = <[|function(number?): number|]>(x => x);
verify.codeFix({
description: "Change 'function(number?): number' to '(arg0: number) => number'",
description: "Change 'number?' to 'number'",
errorCode: 17019,
index: 0,
newRangeContent: "function(number): number",
applyChanges: true
});
verify.codeFix({
description: "Change 'function(number): number' to '(arg0: number) => number'",
errorCode: 8020,
index: 0,
newRangeContent: "(arg0: number | null) => number",
newRangeContent: "(arg0: number) => number",
});
@@ -0,0 +1,11 @@
// @strict: true
/// <reference path='fourslash.ts' />
//// function f(x: [|never?|]) {
//// }
verify.codeFix({
description: "Change 'never?' to 'never'",
errorCode: 17019,
index: 0,
newRangeContent: "never",
});
@@ -0,0 +1,11 @@
// @strict: true
/// <reference path='fourslash.ts' />
//// function f(x: [|void?|]) {
//// }
verify.codeFix({
description: "Change 'void?' to 'void'",
errorCode: 17019,
index: 0,
newRangeContent: "void",
});
@@ -3,8 +3,8 @@
//// var x: [|?number|] = 12;
verify.codeFix({
description: "Change '?number' to 'number | null'",
errorCode: 8020,
description: "Change '?number' to 'number | null | undefined'",
errorCode: 17020,
index: 0,
newRangeContent: "number | null",
newRangeContent: "number | null | undefined",
});
@@ -3,7 +3,7 @@
//// var x: [|number?|] = 12;
verify.codeFix({
description: "Change 'number?' to 'number | null | undefined'",
description: "Change 'number?' to 'number | undefined'",
index: 1,
newRangeContent: "number | null | undefined",
newRangeContent: "number | undefined",
});
@@ -6,5 +6,5 @@
verify.codeFixAll({
fixId: "fixJSDocTypes_plain",
fixAllDescription: "Change all jsdoc-style types to TypeScript",
newFileContent: "function f(a: number | null, b: string) {}",
newFileContent: "function f(a: number | null | undefined, b: string) {}",
})