Skip to content

Commit a3b59f8

Browse files
Fix issue where trivia is incorrectly identified as an identifier following a dot.
Fixes #753
1 parent 3e08af4 commit a3b59f8

File tree

2 files changed

+21
-9
lines changed

2 files changed

+21
-9
lines changed

src/services/services.ts

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4550,17 +4550,16 @@ module ts {
45504550
do {
45514551
token = scanner.scan();
45524552

4553-
if ((token === SyntaxKind.SlashToken || token === SyntaxKind.SlashEqualsToken) && !noRegexTable[lastNonTriviaToken]) {
4554-
if (scanner.reScanSlashToken() === SyntaxKind.RegularExpressionLiteral) {
4555-
token = SyntaxKind.RegularExpressionLiteral;
4553+
if (!isTrivia(token)) {
4554+
if ((token === SyntaxKind.SlashToken || token === SyntaxKind.SlashEqualsToken) && !noRegexTable[lastNonTriviaToken]) {
4555+
if (scanner.reScanSlashToken() === SyntaxKind.RegularExpressionLiteral) {
4556+
token = SyntaxKind.RegularExpressionLiteral;
4557+
}
4558+
}
4559+
else if (lastNonTriviaToken === SyntaxKind.DotToken) {
4560+
token = SyntaxKind.Identifier;
45564561
}
4557-
}
4558-
else if (lastNonTriviaToken === SyntaxKind.DotToken) {
4559-
token = SyntaxKind.Identifier;
4560-
}
45614562

4562-
// Only recall the token if it was *not* trivia.
4563-
if (!(SyntaxKind.FirstTriviaToken <= token && token <= SyntaxKind.LastTriviaToken)) {
45644563
lastNonTriviaToken = token;
45654564
}
45664565

@@ -4612,6 +4611,10 @@ module ts {
46124611
result.entries.push({ length: length, classification: classification });
46134612
}
46144613
}
4614+
4615+
function isTrivia(token: SyntaxKind) {
4616+
return SyntaxKind.FirstTriviaToken <= token && token <= SyntaxKind.LastTriviaToken;
4617+
}
46154618
}
46164619

46174620
function isBinaryExpressionOperatorToken(token: SyntaxKind): boolean {

tests/cases/unittests/services/colorization.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,15 @@ describe('Colorization', function () {
189189
identifier("var"));
190190
});
191191

192+
it("correctly classifies a keyword after a dot separated by comment trivia", function () {
193+
test("a./*hello world*/ var",
194+
ts.EndOfLineState.Start,
195+
identifier("a"),
196+
punctuation("."),
197+
comment("/*hello world*/"),
198+
identifier("var"));
199+
});
200+
192201
it("classifies a property access with whitespace around the dot", function () {
193202
test(" x .\tfoo ()",
194203
ts.EndOfLineState.Start,

0 commit comments

Comments
 (0)