Skip to content

Commit 174879a

Browse files
committed
Skip whitespace or asterisk in JSDoc param type and name
1 parent 4d84bde commit 174879a

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

src/compiler/parser.ts

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6507,14 +6507,33 @@ namespace ts {
65076507
}
65086508
}
65096509

6510+
function skipWhitespaceOrAsterisk(): void {
6511+
if (token() === SyntaxKind.WhitespaceTrivia || token() === SyntaxKind.NewLineTrivia) {
6512+
if (lookAhead(isNextNonwhitespaceTokenEndOfFile)) {
6513+
return; // Don't skip whitespace prior to EoF (or end of comment) - that shouldn't be included in any node's range
6514+
}
6515+
}
6516+
6517+
let precedingLineBreak = scanner.hasPrecedingLineBreak();
6518+
while ((precedingLineBreak && token() === SyntaxKind.AsteriskToken) || token() === SyntaxKind.WhitespaceTrivia || token() === SyntaxKind.NewLineTrivia) {
6519+
if (token() === SyntaxKind.NewLineTrivia) {
6520+
precedingLineBreak = true;
6521+
}
6522+
else if (token() === SyntaxKind.AsteriskToken) {
6523+
precedingLineBreak = false;
6524+
}
6525+
nextJSDocToken();
6526+
}
6527+
}
6528+
65106529
function parseTag(indent: number) {
65116530
Debug.assert(token() === SyntaxKind.AtToken);
65126531
const atToken = <AtToken>createNode(SyntaxKind.AtToken, scanner.getTokenPos());
65136532
atToken.end = scanner.getTextPos();
65146533
nextJSDocToken();
65156534

65166535
const tagName = parseJSDocIdentifierName();
6517-
skipWhitespace();
6536+
skipWhitespaceOrAsterisk();
65186537

65196538
let tag: JSDocTag | undefined;
65206539
switch (tagName.escapedText) {
@@ -6658,7 +6677,7 @@ namespace ts {
66586677
}
66596678

66606679
function tryParseTypeExpression(): JSDocTypeExpression | undefined {
6661-
skipWhitespace();
6680+
skipWhitespaceOrAsterisk();
66626681
return token() === SyntaxKind.OpenBraceToken ? parseJSDocTypeExpression() : undefined;
66636682
}
66646683

@@ -6698,7 +6717,7 @@ namespace ts {
66986717
function parseParameterOrPropertyTag(atToken: AtToken, tagName: Identifier, target: PropertyLikeParse, indent: number | undefined): JSDocParameterTag | JSDocPropertyTag {
66996718
let typeExpression = tryParseTypeExpression();
67006719
let isNameFirst = !typeExpression;
6701-
skipWhitespace();
6720+
skipWhitespaceOrAsterisk();
67026721

67036722
const { name, isBracketed } = parseBracketNameInPropertyAndParamTag();
67046723
skipWhitespace();

src/compiler/scanner.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1933,6 +1933,7 @@ namespace ts {
19331933

19341934
function scanJSDocToken(): JsDocSyntaxKind {
19351935
startPos = tokenPos = pos;
1936+
tokenFlags = 0;
19361937
if (pos >= end) {
19371938
return token = SyntaxKind.EndOfFileToken;
19381939
}
@@ -1952,6 +1953,7 @@ namespace ts {
19521953
return token = SyntaxKind.AtToken;
19531954
case CharacterCodes.lineFeed:
19541955
case CharacterCodes.carriageReturn:
1956+
tokenFlags |= TokenFlags.PrecedingLineBreak;
19551957
return token = SyntaxKind.NewLineTrivia;
19561958
case CharacterCodes.asterisk:
19571959
return token = SyntaxKind.AsteriskToken;

0 commit comments

Comments
 (0)