Skip to content

Commit 292cfc8

Browse files
Use the 'skipTrivia' scanner flag for lexical classification.
1 parent b2372c9 commit 292cfc8

File tree

2 files changed

+16
-26
lines changed

2 files changed

+16
-26
lines changed

src/compiler/types.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,9 @@ module ts {
228228
FirstPunctuation = OpenBraceToken,
229229
LastPunctuation = CaretEqualsToken,
230230
FirstToken = EndOfFileToken,
231-
LastToken = StringKeyword
231+
LastToken = StringKeyword,
232+
FirstTriviaToken = SingleLineCommentTrivia,
233+
LastTriviaToken = WhitespaceTrivia
232234
}
233235

234236
export enum NodeFlags {

src/services/services.ts

Lines changed: 13 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4076,7 +4076,7 @@ module ts {
40764076
function getClassificationsForLine(text: string, lexState: EndOfLineState): ClassificationResult {
40774077
var offset = 0;
40784078
var lastTokenOrCommentEnd = 0;
4079-
var lastToken = SyntaxKind.Unknown;
4079+
var lastNonTriviaToken = SyntaxKind.Unknown;
40804080
var inUnterminatedMultiLineComment = false;
40814081

40824082
// If we're in a string literal, then prepend: "\
@@ -4104,22 +4104,25 @@ module ts {
41044104
entries: []
41054105
};
41064106

4107-
scanner = createScanner(ScriptTarget.ES5, /*skipTrivia*/ true, text, onError, processComment);
4107+
scanner = createScanner(ScriptTarget.ES5, /*skipTrivia*/ false, text, onError, /*onComment*/ undefined);
41084108

41094109
var token = SyntaxKind.Unknown;
41104110
do {
41114111
token = scanner.scan();
41124112

4113-
if ((token === SyntaxKind.SlashToken || token === SyntaxKind.SlashEqualsToken) && !noRegexTable[lastToken]) {
4113+
if ((token === SyntaxKind.SlashToken || token === SyntaxKind.SlashEqualsToken) && !noRegexTable[lastNonTriviaToken]) {
41144114
if (scanner.reScanSlashToken() === SyntaxKind.RegularExpressionLiteral) {
41154115
token = SyntaxKind.RegularExpressionLiteral;
41164116
}
41174117
}
4118-
else if (lastToken === SyntaxKind.DotToken) {
4118+
else if (lastNonTriviaToken === SyntaxKind.DotToken) {
41194119
token = SyntaxKind.Identifier;
41204120
}
41214121

4122-
lastToken = token;
4122+
// Only recall the token if it was *not* trivia.
4123+
if (!(SyntaxKind.FirstTriviaToken <= token && token <= SyntaxKind.LastTriviaToken)) {
4124+
lastNonTriviaToken = token;
4125+
}
41234126

41244127
processToken();
41254128
}
@@ -4132,21 +4135,10 @@ module ts {
41324135
inUnterminatedMultiLineComment = message.key === Diagnostics.Asterisk_Slash_expected.key;
41334136
}
41344137

4135-
function processComment(start: number, end: number) {
4136-
// add Leading white spaces
4137-
addLeadingWhiteSpace(start, end);
4138-
4139-
// add the comment
4140-
addResult(end - start, TokenClass.Comment);
4141-
}
4142-
41434138
function processToken(): void {
41444139
var start = scanner.getTokenPos();
41454140
var end = scanner.getTextPos();
41464141

4147-
// add Leading white spaces
4148-
addLeadingWhiteSpace(start, end);
4149-
41504142
// add the token
41514143
addResult(end - start, classFromKind(token));
41524144

@@ -4167,15 +4159,6 @@ module ts {
41674159
}
41684160
}
41694161

4170-
function addLeadingWhiteSpace(start: number, end: number): void {
4171-
if (start > lastTokenOrCommentEnd) {
4172-
addResult(start - lastTokenOrCommentEnd, TokenClass.Whitespace);
4173-
}
4174-
4175-
// Remember the end of the last token
4176-
lastTokenOrCommentEnd = end;
4177-
}
4178-
41794162
function addResult(length: number, classification: TokenClass): void {
41804163
if (length > 0) {
41814164
// If this is the first classification we're adding to the list, then remove any
@@ -4268,6 +4251,11 @@ module ts {
42684251
return TokenClass.StringLiteral;
42694252
case SyntaxKind.RegularExpressionLiteral:
42704253
return TokenClass.RegExpLiteral;
4254+
case SyntaxKind.MultiLineCommentTrivia:
4255+
case SyntaxKind.SingleLineCommentTrivia:
4256+
return TokenClass.Comment;
4257+
case SyntaxKind.WhitespaceTrivia:
4258+
return TokenClass.Whitespace;
42714259
case SyntaxKind.Identifier:
42724260
default:
42734261
return TokenClass.Identifier;

0 commit comments

Comments
 (0)