Skip to content

Commit 6c58cd8

Browse files
Merge pull request #755 from Microsoft/misidentifiedIdentifier
Fix issue where comments are incorrectly identified as identifiers
2 parents 9723667 + 4ed6a80 commit 6c58cd8

File tree

3 files changed

+27
-9
lines changed

3 files changed

+27
-9
lines changed

src/compiler/parser.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,10 @@ module ts {
648648
return SyntaxKind.FirstKeyword <= token && token <= SyntaxKind.LastKeyword;
649649
}
650650

651+
export function isTrivia(token: SyntaxKind) {
652+
return SyntaxKind.FirstTriviaToken <= token && token <= SyntaxKind.LastTriviaToken;
653+
}
654+
651655
export function isModifier(token: SyntaxKind): boolean {
652656
switch (token) {
653657
case SyntaxKind.PublicKeyword:

src/services/services.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4538,17 +4538,16 @@ module ts {
45384538
do {
45394539
token = scanner.scan();
45404540

4541-
if ((token === SyntaxKind.SlashToken || token === SyntaxKind.SlashEqualsToken) && !noRegexTable[lastNonTriviaToken]) {
4542-
if (scanner.reScanSlashToken() === SyntaxKind.RegularExpressionLiteral) {
4543-
token = SyntaxKind.RegularExpressionLiteral;
4541+
if (!isTrivia(token)) {
4542+
if ((token === SyntaxKind.SlashToken || token === SyntaxKind.SlashEqualsToken) && !noRegexTable[lastNonTriviaToken]) {
4543+
if (scanner.reScanSlashToken() === SyntaxKind.RegularExpressionLiteral) {
4544+
token = SyntaxKind.RegularExpressionLiteral;
4545+
}
4546+
}
4547+
else if (lastNonTriviaToken === SyntaxKind.DotToken && isKeyword(token)) {
4548+
token = SyntaxKind.Identifier;
45444549
}
4545-
}
4546-
else if (lastNonTriviaToken === SyntaxKind.DotToken) {
4547-
token = SyntaxKind.Identifier;
4548-
}
45494550

4550-
// Only recall the token if it was *not* trivia.
4551-
if (!(SyntaxKind.FirstTriviaToken <= token && token <= SyntaxKind.LastTriviaToken)) {
45524551
lastNonTriviaToken = token;
45534552
}
45544553

tests/cases/unittests/services/colorization.ts

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

192+
it("correctly classifies a string literal after a dot", function () {
193+
test("a.\"var\"",
194+
ts.EndOfLineState.Start,
195+
stringLiteral("\"var\""));
196+
});
197+
198+
it("correctly classifies a keyword after a dot separated by comment trivia", function () {
199+
test("a./*hello world*/ var",
200+
ts.EndOfLineState.Start,
201+
identifier("a"),
202+
punctuation("."),
203+
comment("/*hello world*/"),
204+
identifier("var"));
205+
});
206+
192207
it("classifies a property access with whitespace around the dot", function () {
193208
test(" x .\tfoo ()",
194209
ts.EndOfLineState.Start,

0 commit comments

Comments
 (0)