Fix issue where trivia is incorrectly identified as an identifier following a dot.

Fixes #753
This commit is contained in:
Daniel Rosenwasser
2014-09-25 22:28:02 -07:00
parent 3e08af41fe
commit a3b59f88c1
2 changed files with 21 additions and 9 deletions

View File

@@ -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 {

View File

@@ -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,