mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-12 20:01:02 -05:00
Fix issue where trivia is incorrectly identified as an identifier following a dot.
Fixes #753
This commit is contained in:
@@ -4550,17 +4550,16 @@ module ts {
|
||||
do {
|
||||
token = scanner.scan();
|
||||
|
||||
if ((token === SyntaxKind.SlashToken || token === SyntaxKind.SlashEqualsToken) && !noRegexTable[lastNonTriviaToken]) {
|
||||
if (scanner.reScanSlashToken() === SyntaxKind.RegularExpressionLiteral) {
|
||||
token = SyntaxKind.RegularExpressionLiteral;
|
||||
if (!isTrivia(token)) {
|
||||
if ((token === SyntaxKind.SlashToken || token === SyntaxKind.SlashEqualsToken) && !noRegexTable[lastNonTriviaToken]) {
|
||||
if (scanner.reScanSlashToken() === SyntaxKind.RegularExpressionLiteral) {
|
||||
token = SyntaxKind.RegularExpressionLiteral;
|
||||
}
|
||||
}
|
||||
else if (lastNonTriviaToken === SyntaxKind.DotToken) {
|
||||
token = SyntaxKind.Identifier;
|
||||
}
|
||||
}
|
||||
else if (lastNonTriviaToken === SyntaxKind.DotToken) {
|
||||
token = SyntaxKind.Identifier;
|
||||
}
|
||||
|
||||
// Only recall the token if it was *not* trivia.
|
||||
if (!(SyntaxKind.FirstTriviaToken <= token && token <= SyntaxKind.LastTriviaToken)) {
|
||||
lastNonTriviaToken = token;
|
||||
}
|
||||
|
||||
@@ -4612,6 +4611,10 @@ module ts {
|
||||
result.entries.push({ length: length, classification: classification });
|
||||
}
|
||||
}
|
||||
|
||||
function isTrivia(token: SyntaxKind) {
|
||||
return SyntaxKind.FirstTriviaToken <= token && token <= SyntaxKind.LastTriviaToken;
|
||||
}
|
||||
}
|
||||
|
||||
function isBinaryExpressionOperatorToken(token: SyntaxKind): boolean {
|
||||
|
||||
@@ -189,6 +189,15 @@ describe('Colorization', function () {
|
||||
identifier("var"));
|
||||
});
|
||||
|
||||
it("correctly classifies a keyword after a dot separated by comment trivia", function () {
|
||||
test("a./*hello world*/ var",
|
||||
ts.EndOfLineState.Start,
|
||||
identifier("a"),
|
||||
punctuation("."),
|
||||
comment("/*hello world*/"),
|
||||
identifier("var"));
|
||||
});
|
||||
|
||||
it("classifies a property access with whitespace around the dot", function () {
|
||||
test(" x .\tfoo ()",
|
||||
ts.EndOfLineState.Start,
|
||||
|
||||
Reference in New Issue
Block a user