Skip to content

Commit 85b8d27

Browse files
authored
Remove error on invalid jsdoc tokens (microsoft#32769)
* Remove error on invalid jsdoc tokens In JSDoc: 1. In the scanner, don't issue an error, even for invalid identifiers. 2. In the binder, don't issue an error for reserved (but otherwise valid) identifiers. /** * Example of 1: "\" * Example of 2: @Private */ * Update baselines * Add invalid unicode escape test for JSDoc * Add quotes around invalid unicode escape * Add another unicode escape JSDoc test
1 parent b24050a commit 85b8d27

File tree

38 files changed

+77
-5
lines changed

38 files changed

+77
-5
lines changed

src/compiler/binder.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1842,7 +1842,8 @@ namespace ts {
18421842
node.originalKeywordKind! >= SyntaxKind.FirstFutureReservedWord &&
18431843
node.originalKeywordKind! <= SyntaxKind.LastFutureReservedWord &&
18441844
!isIdentifierName(node) &&
1845-
!(node.flags & NodeFlags.Ambient)) {
1845+
!(node.flags & NodeFlags.Ambient) &&
1846+
!(node.flags & NodeFlags.JSDoc)) {
18461847

18471848
// Report error only if there are no parse errors in file
18481849
if (!file.parseDiagnostics.length) {

src/compiler/parser.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6434,7 +6434,7 @@ namespace ts {
64346434
export function parseIsolatedJSDocComment(content: string, start: number | undefined, length: number | undefined): { jsDoc: JSDoc, diagnostics: Diagnostic[] } | undefined {
64356435
initializeState(content, ScriptTarget.Latest, /*_syntaxCursor:*/ undefined, ScriptKind.JS);
64366436
sourceFile = <SourceFile>{ languageVariant: LanguageVariant.Standard, text: content }; // tslint:disable-line no-object-literal-type-assertion
6437-
const jsDoc = parseJSDocCommentWorker(start, length);
6437+
const jsDoc = doInsideOfContext(NodeFlags.JSDoc, () => parseJSDocCommentWorker(start, length));
64386438
const diagnostics = parseDiagnostics;
64396439
clearState();
64406440

@@ -6446,7 +6446,7 @@ namespace ts {
64466446
const saveParseDiagnosticsLength = parseDiagnostics.length;
64476447
const saveParseErrorBeforeNextFinishedNode = parseErrorBeforeNextFinishedNode;
64486448

6449-
const comment = parseJSDocCommentWorker(start, length);
6449+
const comment = doInsideOfContext(NodeFlags.JSDoc, () => parseJSDocCommentWorker(start, length));
64506450
if (comment) {
64516451
comment.parent = parent;
64526452
}
@@ -6477,7 +6477,7 @@ namespace ts {
64776477
CallbackParameter = 1 << 2,
64786478
}
64796479

6480-
export function parseJSDocCommentWorker(start = 0, length: number | undefined): JSDoc | undefined {
6480+
function parseJSDocCommentWorker(start = 0, length: number | undefined): JSDoc | undefined {
64816481
const content = sourceText;
64826482
const end = length === undefined ? content.length : start + length;
64836483
length = end - start;

src/compiler/scanner.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2159,7 +2159,6 @@ namespace ts {
21592159
tokenValue = String.fromCharCode(cookedChar) + scanIdentifierParts();
21602160
return token = getIdentifierToken();
21612161
}
2162-
error(Diagnostics.Invalid_character);
21632162
pos++;
21642163
return token = SyntaxKind.Unknown;
21652164
}

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.@link tags.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 127,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.Nested @param tags.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 66,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.argSynonymForParamTag.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 44,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.argumentSynonymForParamTag.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 49,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.asteriskAfterPreamble.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 23,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"comment": "* @type {number}"

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.authorTag.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 112,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.emptyComment.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 5,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0
78
}

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.leadingAsterisk.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 27,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.less-than and greater-than characters.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 61,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.noLeadingAsterisk.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 27,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.noReturnType.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 20,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.oneParamTag.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 34,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.paramTag1.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 59,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.paramTagBracketedName1.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 61,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.paramTagBracketedName2.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 66,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.paramTagNameThenType1.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 34,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.paramTagNameThenType2.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 46,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.paramWithoutType.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 23,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.returnTag1.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 29,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.returnTag2.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 54,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.returnsTag1.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 30,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.templateTag.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 24,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.templateTag2.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 26,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.templateTag3.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 27,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.templateTag4.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 27,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.templateTag5.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 28,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.templateTag6.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 60,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.threeAsterisks.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 7,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"comment": "*"

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.twoParamTag2.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 60,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.twoParamTagOnSameLine.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 56,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.typeTag.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 27,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.typedefTagWithChildrenTags.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"kind": "JSDocComment",
33
"pos": 0,
44
"end": 102,
5+
"flags": "JSDoc",
56
"modifierFlagsCache": 0,
67
"transformFlags": 0,
78
"tags": {
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
=== tests/cases/conformance/scanner/jsdocInvalidTokens.js ===
2+
/**
3+
*
4+
* unicode-escape = "\u{abcdefghi}" -- should not have error for invalid unicode escape
5+
* unicode-escape2 = "qq\u{abcdefghi}" -- no error here either
6+
* quoted-pair = "\" -- should not have error for invalid quote sequence
7+
* or for the tag below:
8+
* @private
9+
*/
10+
var hi = 1
11+
>hi : Symbol(hi, Decl(jsdocInvalidTokens.js, 8, 3))
12+
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
=== tests/cases/conformance/scanner/jsdocInvalidTokens.js ===
2+
/**
3+
*
4+
* unicode-escape = "\u{abcdefghi}" -- should not have error for invalid unicode escape
5+
* unicode-escape2 = "qq\u{abcdefghi}" -- no error here either
6+
* quoted-pair = "\" -- should not have error for invalid quote sequence
7+
* or for the tag below:
8+
* @private
9+
*/
10+
var hi = 1
11+
>hi : number
12+
>1 : 1
13+
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// @Filename: jsdocInvalidTokens.js
2+
// @strict: true
3+
// @allowJs: true
4+
// @checkJs: true
5+
// @noEmit: true
6+
7+
/**
8+
*
9+
* unicode-escape = "\u{abcdefghi}" -- should not have error for invalid unicode escape
10+
* unicode-escape2 = "qq\u{abcdefghi}" -- no error here either
11+
* quoted-pair = "\" -- should not have error for invalid quote sequence
12+
* or for the tag below:
13+
* @private
14+
*/
15+
var hi = 1

0 commit comments

Comments
 (0)