IDEA-159360 Custom file type: inconsistent highlighting of symbols added as keywords

This commit is contained in:
peter
2016-08-03 17:39:27 +02:00
parent 34dcd47c91
commit 97d8c2937e
3 changed files with 69 additions and 10 deletions
@@ -42,7 +42,9 @@ public class IdentifierParser extends TokenParser {
}
private boolean isIdentifierPart(int position) {
if (myBuffer.charAt(position) == '-') return !myKeywordParser.hasToken(position, myBuffer, null);
return KeywordParser.isWordPart(position, myBuffer);
if (myBuffer.charAt(position) == '-') {
return !myKeywordParser.hasToken(position, myBuffer, null);
}
return Character.isJavaIdentifierPart(myBuffer.charAt(position));
}
}
@@ -96,12 +96,7 @@ public class KeywordParser {
return true;
}
return !isWordPart(offset - 1, sequence) || !isWordPart(offset, sequence);
}
static boolean isWordPart(int offset, CharSequence sequence) {
char ch = sequence.charAt(offset);
return ch == '-' || Character.isJavaIdentifierPart(ch);
return !Character.isJavaIdentifierPart(sequence.charAt(offset - 1)) || !Character.isJavaIdentifierPart(sequence.charAt(offset));
}
private static IElementType getToken(int keywordSetIndex) {
@@ -33,7 +33,7 @@ import org.jetbrains.annotations.Nullable
*/
class CustomFileTypeLexerTest extends TestCase {
private void doTest(SyntaxTable table, @NonNls String text, @Nullable String expected) {
private static void doTest(SyntaxTable table, @NonNls String text, @Nullable String expected) {
def lexer = new CustomFileTypeLexer(table)
doTest(lexer, text, expected);
}
@@ -97,6 +97,67 @@ WHITESPACE ('\\n')
'''
}
public void "test punctuation keywords"() {
def table = createGenericTable()
table.addKeyword4("+")
table.addKeyword4("-")
table.addKeyword4("=")
doTest table, 'i++; i--; i-100; i -100; i- 100; a=-1; a= -1; a+=1; a= +1;', '''\
IDENTIFIER ('i')
KEYWORD_4 ('+')
KEYWORD_4 ('+')
PUNCTUATION (';')
WHITESPACE (' ')
IDENTIFIER ('i')
KEYWORD_4 ('-')
KEYWORD_4 ('-')
PUNCTUATION (';')
WHITESPACE (' ')
IDENTIFIER ('i')
KEYWORD_4 ('-')
NUMBER ('100')
PUNCTUATION (';')
WHITESPACE (' ')
IDENTIFIER ('i')
WHITESPACE (' ')
KEYWORD_4 ('-')
NUMBER ('100')
PUNCTUATION (';')
WHITESPACE (' ')
IDENTIFIER ('i')
KEYWORD_4 ('-')
WHITESPACE (' ')
NUMBER ('100')
PUNCTUATION (';')
WHITESPACE (' ')
IDENTIFIER ('a')
KEYWORD_4 ('=')
KEYWORD_4 ('-')
NUMBER ('1')
PUNCTUATION (';')
WHITESPACE (' ')
IDENTIFIER ('a')
KEYWORD_4 ('=')
WHITESPACE (' ')
KEYWORD_4 ('-')
NUMBER ('1')
PUNCTUATION (';')
WHITESPACE (' ')
IDENTIFIER ('a')
KEYWORD_4 ('+')
KEYWORD_4 ('=')
NUMBER ('1')
PUNCTUATION (';')
WHITESPACE (' ')
IDENTIFIER ('a')
KEYWORD_4 ('=')
WHITESPACE (' ')
KEYWORD_4 ('+')
NUMBER ('1')
PUNCTUATION (';')
'''
}
private static SyntaxTable createJavaSyntaxTable() {
SyntaxTable table = new SyntaxTable();
@@ -341,7 +402,8 @@ KEYWORD_1 ('b-c')
WHITESPACE (' ')
KEYWORD_2 ('d#')
WHITESPACE (' ')
IDENTIFIER ('e-')
KEYWORD_2 ('e')
CHARACTER ('-')
WHITESPACE (' ')
KEYWORD_2 ('e')
WHITESPACE (' ')