Skip to content

Commit a23bbe6

Browse files
author
Andy
authored
Use substring instead of substr (microsoft#20578)
* Use substring instead of substr * Remove unused scanning of SyntaxKind.DotDotDotToken in jsdoc * Remove other unnecessary jsdoc syntax kinds * Move all pos++ together
1 parent 464df8f commit a23bbe6

5 files changed

Lines changed: 44 additions & 51 deletions

File tree

src/compiler/parser.ts

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6276,17 +6276,17 @@ namespace ts {
62766276
indent += text.length;
62776277
}
62786278

6279-
nextJSDocToken();
6280-
while (token() === SyntaxKind.WhitespaceTrivia) {
6281-
nextJSDocToken();
6279+
let t = nextJSDocToken();
6280+
while (t === SyntaxKind.WhitespaceTrivia) {
6281+
t = nextJSDocToken();
62826282
}
6283-
if (token() === SyntaxKind.NewLineTrivia) {
6283+
if (t === SyntaxKind.NewLineTrivia) {
62846284
state = JSDocState.BeginningOfLine;
62856285
indent = 0;
6286-
nextJSDocToken();
6286+
t = nextJSDocToken();
62876287
}
6288-
while (token() !== SyntaxKind.EndOfFileToken) {
6289-
switch (token()) {
6288+
loop: while (true) {
6289+
switch (t) {
62906290
case SyntaxKind.AtToken:
62916291
if (state === JSDocState.BeginningOfLine || state === JSDocState.SawAsterisk) {
62926292
removeTrailingNewlines(comments);
@@ -6340,18 +6340,19 @@ namespace ts {
63406340
indent += whitespace.length;
63416341
break;
63426342
case SyntaxKind.EndOfFileToken:
6343-
break;
6343+
break loop;
63446344
default:
63456345
// anything other than whitespace or asterisk at the beginning of the line starts the comment text
63466346
state = JSDocState.SavingComments;
63476347
pushComment(scanner.getTokenText());
63486348
break;
63496349
}
63506350
if (advanceToken) {
6351-
nextJSDocToken();
6351+
t = nextJSDocToken();
63526352
}
63536353
else {
63546354
advanceToken = true;
6355+
t = currentToken as JsDocSyntaxKind;
63556356
}
63566357
}
63576358
removeLeadingNewlines(comments);
@@ -6462,8 +6463,9 @@ namespace ts {
64626463
comments.push(text);
64636464
indent += text.length;
64646465
}
6465-
while (token() !== SyntaxKind.AtToken && token() !== SyntaxKind.EndOfFileToken) {
6466-
switch (token()) {
6466+
let tok = token() as JsDocSyntaxKind;
6467+
loop: while (true) {
6468+
switch (tok) {
64676469
case SyntaxKind.NewLineTrivia:
64686470
if (state >= JSDocState.SawAsterisk) {
64696471
state = JSDocState.BeginningOfLine;
@@ -6472,8 +6474,9 @@ namespace ts {
64726474
indent = 0;
64736475
break;
64746476
case SyntaxKind.AtToken:
6477+
case SyntaxKind.EndOfFileToken:
64756478
// Done
6476-
break;
6479+
break loop;
64776480
case SyntaxKind.WhitespaceTrivia:
64786481
if (state === JSDocState.SavingComments) {
64796482
pushComment(scanner.getTokenText());
@@ -6501,11 +6504,7 @@ namespace ts {
65016504
pushComment(scanner.getTokenText());
65026505
break;
65036506
}
6504-
if (token() === SyntaxKind.AtToken) {
6505-
// Done
6506-
break;
6507-
}
6508-
nextJSDocToken();
6507+
tok = nextJSDocToken();
65096508
}
65106509

65116510
removeLeadingNewlines(comments);
@@ -6783,8 +6782,7 @@ namespace ts {
67836782
let canParseTag = true;
67846783
let seenAsterisk = false;
67856784
while (true) {
6786-
nextJSDocToken();
6787-
switch (token()) {
6785+
switch (nextJSDocToken()) {
67886786
case SyntaxKind.AtToken:
67896787
if (canParseTag) {
67906788
const child = tryParseChildTag(target);
@@ -6880,7 +6878,7 @@ namespace ts {
68806878
return result;
68816879
}
68826880

6883-
function nextJSDocToken(): SyntaxKind {
6881+
function nextJSDocToken(): JsDocSyntaxKind {
68846882
return currentToken = scanner.scanJSDocToken();
68856883
}
68866884

src/compiler/scanner.ts

Lines changed: 5 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ namespace ts {
3535
scanJsxAttributeValue(): SyntaxKind;
3636
reScanJsxToken(): SyntaxKind;
3737
scanJsxToken(): SyntaxKind;
38-
scanJSDocToken(): SyntaxKind;
38+
scanJSDocToken(): JsDocSyntaxKind;
3939
scan(): SyntaxKind;
4040
getText(): string;
4141
// Sets the text for the scanner to scan. An optional subrange starting point and length
@@ -1905,7 +1905,7 @@ namespace ts {
19051905
break;
19061906
}
19071907
}
1908-
tokenValue += text.substr(firstCharPosition, pos - firstCharPosition);
1908+
tokenValue += text.substring(firstCharPosition, pos);
19091909
}
19101910
return token;
19111911
}
@@ -1924,7 +1924,7 @@ namespace ts {
19241924
}
19251925
}
19261926

1927-
function scanJSDocToken(): SyntaxKind {
1927+
function scanJSDocToken(): JsDocSyntaxKind {
19281928
if (pos >= end) {
19291929
return token = SyntaxKind.EndOfFileToken;
19301930
}
@@ -1933,6 +1933,7 @@ namespace ts {
19331933
tokenPos = pos;
19341934

19351935
const ch = text.charCodeAt(pos);
1936+
pos++;
19361937
switch (ch) {
19371938
case CharacterCodes.tab:
19381939
case CharacterCodes.verticalTab:
@@ -1943,64 +1944,39 @@ namespace ts {
19431944
}
19441945
return token = SyntaxKind.WhitespaceTrivia;
19451946
case CharacterCodes.at:
1946-
pos++;
19471947
return token = SyntaxKind.AtToken;
19481948
case CharacterCodes.lineFeed:
19491949
case CharacterCodes.carriageReturn:
1950-
pos++;
19511950
return token = SyntaxKind.NewLineTrivia;
19521951
case CharacterCodes.asterisk:
1953-
pos++;
19541952
return token = SyntaxKind.AsteriskToken;
19551953
case CharacterCodes.openBrace:
1956-
pos++;
19571954
return token = SyntaxKind.OpenBraceToken;
19581955
case CharacterCodes.closeBrace:
1959-
pos++;
19601956
return token = SyntaxKind.CloseBraceToken;
19611957
case CharacterCodes.openBracket:
1962-
pos++;
19631958
return token = SyntaxKind.OpenBracketToken;
19641959
case CharacterCodes.closeBracket:
1965-
pos++;
19661960
return token = SyntaxKind.CloseBracketToken;
19671961
case CharacterCodes.lessThan:
1968-
pos++;
19691962
return token = SyntaxKind.LessThanToken;
1970-
case CharacterCodes.greaterThan:
1971-
pos++;
1972-
return token = SyntaxKind.GreaterThanToken;
19731963
case CharacterCodes.equals:
1974-
pos++;
19751964
return token = SyntaxKind.EqualsToken;
19761965
case CharacterCodes.comma:
1977-
pos++;
19781966
return token = SyntaxKind.CommaToken;
19791967
case CharacterCodes.dot:
1980-
pos++;
1981-
if (text.substr(tokenPos, pos + 2) === "...") {
1982-
pos += 2;
1983-
return token = SyntaxKind.DotDotDotToken;
1984-
}
19851968
return token = SyntaxKind.DotToken;
1986-
case CharacterCodes.exclamation:
1987-
pos++;
1988-
return token = SyntaxKind.ExclamationToken;
1989-
case CharacterCodes.question:
1990-
pos++;
1991-
return token = SyntaxKind.QuestionToken;
19921969
}
19931970

19941971
if (isIdentifierStart(ch, ScriptTarget.Latest)) {
1995-
pos++;
19961972
while (isIdentifierPart(text.charCodeAt(pos), ScriptTarget.Latest) && pos < end) {
19971973
pos++;
19981974
}
19991975
tokenValue = text.substring(tokenPos, pos);
20001976
return token = SyntaxKind.Identifier;
20011977
}
20021978
else {
2003-
return pos += 1, token = SyntaxKind.Unknown;
1979+
return token = SyntaxKind.Unknown;
20041980
}
20051981
}
20061982

src/compiler/types.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,23 @@ namespace ts {
5858
end: number;
5959
}
6060

61+
export type JsDocSyntaxKind =
62+
| SyntaxKind.EndOfFileToken
63+
| SyntaxKind.WhitespaceTrivia
64+
| SyntaxKind.AtToken
65+
| SyntaxKind.NewLineTrivia
66+
| SyntaxKind.AsteriskToken
67+
| SyntaxKind.OpenBraceToken
68+
| SyntaxKind.CloseBraceToken
69+
| SyntaxKind.LessThanToken
70+
| SyntaxKind.OpenBracketToken
71+
| SyntaxKind.CloseBracketToken
72+
| SyntaxKind.EqualsToken
73+
| SyntaxKind.CommaToken
74+
| SyntaxKind.DotToken
75+
| SyntaxKind.Identifier
76+
| SyntaxKind.Unknown;
77+
6178
// token > SyntaxKind.Identifer => token is a keyword
6279
// Also, If you add a new SyntaxKind be sure to keep the `Markers` section at the bottom in sync
6380
export const enum SyntaxKind {

tests/baselines/reference/api/tsserverlibrary.d.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ declare namespace ts {
5959
pos: number;
6060
end: number;
6161
}
62+
type JsDocSyntaxKind = SyntaxKind.EndOfFileToken | SyntaxKind.WhitespaceTrivia | SyntaxKind.AtToken | SyntaxKind.NewLineTrivia | SyntaxKind.AsteriskToken | SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.LessThanToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.EqualsToken | SyntaxKind.CommaToken | SyntaxKind.DotToken | SyntaxKind.Identifier | SyntaxKind.Unknown;
6263
enum SyntaxKind {
6364
Unknown = 0,
6465
EndOfFileToken = 1,
@@ -3127,7 +3128,7 @@ declare namespace ts {
31273128
scanJsxAttributeValue(): SyntaxKind;
31283129
reScanJsxToken(): SyntaxKind;
31293130
scanJsxToken(): SyntaxKind;
3130-
scanJSDocToken(): SyntaxKind;
3131+
scanJSDocToken(): JsDocSyntaxKind;
31313132
scan(): SyntaxKind;
31323133
getText(): string;
31333134
setText(text: string, start?: number, length?: number): void;

tests/baselines/reference/api/typescript.d.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ declare namespace ts {
5959
pos: number;
6060
end: number;
6161
}
62+
type JsDocSyntaxKind = SyntaxKind.EndOfFileToken | SyntaxKind.WhitespaceTrivia | SyntaxKind.AtToken | SyntaxKind.NewLineTrivia | SyntaxKind.AsteriskToken | SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.LessThanToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.EqualsToken | SyntaxKind.CommaToken | SyntaxKind.DotToken | SyntaxKind.Identifier | SyntaxKind.Unknown;
6263
enum SyntaxKind {
6364
Unknown = 0,
6465
EndOfFileToken = 1,
@@ -2788,7 +2789,7 @@ declare namespace ts {
27882789
scanJsxAttributeValue(): SyntaxKind;
27892790
reScanJsxToken(): SyntaxKind;
27902791
scanJsxToken(): SyntaxKind;
2791-
scanJSDocToken(): SyntaxKind;
2792+
scanJSDocToken(): JsDocSyntaxKind;
27922793
scan(): SyntaxKind;
27932794
getText(): string;
27942795
setText(text: string, start?: number, length?: number): void;

0 commit comments

Comments
 (0)