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
}

0 commit comments

Comments
 (0)