Bad characters highlighted. TODO: Error reporting
This commit is contained in:
@@ -8,6 +8,7 @@ import com.intellij.openapi.editor.HighlighterColors;
|
|||||||
import com.intellij.openapi.editor.SyntaxHighlighterColors;
|
import com.intellij.openapi.editor.SyntaxHighlighterColors;
|
||||||
import com.intellij.openapi.editor.colors.TextAttributesKey;
|
import com.intellij.openapi.editor.colors.TextAttributesKey;
|
||||||
import com.intellij.openapi.fileTypes.SyntaxHighlighterBase;
|
import com.intellij.openapi.fileTypes.SyntaxHighlighterBase;
|
||||||
|
import com.intellij.psi.TokenType;
|
||||||
import com.intellij.psi.tree.IElementType;
|
import com.intellij.psi.tree.IElementType;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lexer.JetLexer;
|
import org.jetbrains.jet.lexer.JetLexer;
|
||||||
@@ -20,7 +21,7 @@ public class JetHighlighter extends SyntaxHighlighterBase {
|
|||||||
private static final Map<IElementType, TextAttributesKey> keys1;
|
private static final Map<IElementType, TextAttributesKey> keys1;
|
||||||
private static final Map<IElementType, TextAttributesKey> keys2;
|
private static final Map<IElementType, TextAttributesKey> keys2;
|
||||||
|
|
||||||
static final TextAttributesKey JET_KEYWORD = TextAttributesKey.createTextAttributesKey(
|
private static final TextAttributesKey JET_KEYWORD = TextAttributesKey.createTextAttributesKey(
|
||||||
"JET.KEYWORD",
|
"JET.KEYWORD",
|
||||||
SyntaxHighlighterColors.KEYWORD.getDefaultAttributes()
|
SyntaxHighlighterColors.KEYWORD.getDefaultAttributes()
|
||||||
);
|
);
|
||||||
@@ -30,31 +31,26 @@ public class JetHighlighter extends SyntaxHighlighterBase {
|
|||||||
SyntaxHighlighterColors.KEYWORD.getDefaultAttributes()
|
SyntaxHighlighterColors.KEYWORD.getDefaultAttributes()
|
||||||
);
|
);
|
||||||
|
|
||||||
static final TextAttributesKey JET_NUMBER = TextAttributesKey.createTextAttributesKey(
|
private static final TextAttributesKey JET_NUMBER = TextAttributesKey.createTextAttributesKey(
|
||||||
"JET.NUMBER",
|
"JET.NUMBER",
|
||||||
SyntaxHighlighterColors.NUMBER.getDefaultAttributes()
|
SyntaxHighlighterColors.NUMBER.getDefaultAttributes()
|
||||||
);
|
);
|
||||||
|
|
||||||
static final TextAttributesKey JET_STRING = TextAttributesKey.createTextAttributesKey(
|
private static final TextAttributesKey JET_STRING = TextAttributesKey.createTextAttributesKey(
|
||||||
"JET.STRING",
|
"JET.STRING",
|
||||||
SyntaxHighlighterColors.STRING.getDefaultAttributes()
|
SyntaxHighlighterColors.STRING.getDefaultAttributes()
|
||||||
);
|
);
|
||||||
|
|
||||||
static final TextAttributesKey JET_COMMENT = TextAttributesKey.createTextAttributesKey(
|
private static final TextAttributesKey JET_COMMENT = TextAttributesKey.createTextAttributesKey(
|
||||||
"JET.COMMENT",
|
"JET.COMMENT",
|
||||||
SyntaxHighlighterColors.LINE_COMMENT.getDefaultAttributes()
|
SyntaxHighlighterColors.LINE_COMMENT.getDefaultAttributes()
|
||||||
);
|
);
|
||||||
|
|
||||||
static final TextAttributesKey JET_BAD_CHARACTER = TextAttributesKey.createTextAttributesKey(
|
private static final TextAttributesKey JET_BAD_CHARACTER = TextAttributesKey.createTextAttributesKey(
|
||||||
"JET.BADCHARACTER",
|
"JET.BADCHARACTER",
|
||||||
HighlighterColors.BAD_CHARACTER.getDefaultAttributes()
|
HighlighterColors.BAD_CHARACTER.getDefaultAttributes()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public Lexer getHighlightingLexer() {
|
public Lexer getHighlightingLexer() {
|
||||||
return new JetLexer();
|
return new JetLexer();
|
||||||
@@ -83,5 +79,7 @@ public class JetHighlighter extends SyntaxHighlighterBase {
|
|||||||
keys1.put(JetTokens.EOL_COMMENT, JET_COMMENT);
|
keys1.put(JetTokens.EOL_COMMENT, JET_COMMENT);
|
||||||
keys1.put(JetTokens.BLOCK_COMMENT, JET_COMMENT);
|
keys1.put(JetTokens.BLOCK_COMMENT, JET_COMMENT);
|
||||||
keys1.put(JetTokens.DOC_COMMENT, JET_COMMENT);
|
keys1.put(JetTokens.DOC_COMMENT, JET_COMMENT);
|
||||||
|
|
||||||
|
keys1.put(TokenType.BAD_CHARACTER, JET_BAD_CHARACTER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,12 @@ import com.intellij.psi.tree.IElementType;
|
|||||||
import com.intellij.psi.tree.TokenSet;
|
import com.intellij.psi.tree.TokenSet;
|
||||||
import org.jetbrains.jet.lexer.JetKeywordToken;
|
import org.jetbrains.jet.lexer.JetKeywordToken;
|
||||||
import org.jetbrains.jet.lexer.JetToken;
|
import org.jetbrains.jet.lexer.JetToken;
|
||||||
|
import org.jetbrains.jet.lexer.JetTokens;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import static org.jetbrains.jet.lexer.JetTokens.*;
|
import static org.jetbrains.jet.lexer.JetTokens.*;
|
||||||
|
|
||||||
@@ -13,6 +19,15 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
|
|||||||
* @author abreslav
|
* @author abreslav
|
||||||
*/
|
*/
|
||||||
/*package*/ abstract class AbstractJetParsing {
|
/*package*/ abstract class AbstractJetParsing {
|
||||||
|
private static final Set<String> SOFT_KEYWORD_TEXTS = new HashSet<String>();
|
||||||
|
static {
|
||||||
|
for (IElementType type : JetTokens.SOFT_KEYWORDS.getTypes()) {
|
||||||
|
JetKeywordToken keywordToken = (JetKeywordToken) type;
|
||||||
|
assert keywordToken.isSoft();
|
||||||
|
SOFT_KEYWORD_TEXTS.add(keywordToken.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected final SemanticWhitespaceAwarePsiBuilder myBuilder;
|
protected final SemanticWhitespaceAwarePsiBuilder myBuilder;
|
||||||
|
|
||||||
public AbstractJetParsing(SemanticWhitespaceAwarePsiBuilder builder) {
|
public AbstractJetParsing(SemanticWhitespaceAwarePsiBuilder builder) {
|
||||||
@@ -77,14 +92,12 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void advance() {
|
protected void advance() {
|
||||||
|
// TODO: how to report errors on bad characters? (Other than highlighting)
|
||||||
myBuilder.advanceLexer();
|
myBuilder.advanceLexer();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected IElementType tt() {
|
protected IElementType tt() {
|
||||||
IElementType tokenType = myBuilder.getTokenType();
|
return myBuilder.getTokenType();
|
||||||
// TODO: review
|
|
||||||
if (tokenType == TokenType.BAD_CHARACTER) errorAndAdvance("Bad character");
|
|
||||||
return tokenType;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean at(final IElementType expectation) {
|
protected boolean at(final IElementType expectation) {
|
||||||
@@ -124,7 +137,7 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
|
|||||||
if (token == SEMICOLON) return true;
|
if (token == SEMICOLON) return true;
|
||||||
if (myBuilder.eolInLastWhitespace()) return true;
|
if (myBuilder.eolInLastWhitespace()) return true;
|
||||||
}
|
}
|
||||||
if (token == IDENTIFIER) {
|
if (token == IDENTIFIER && SOFT_KEYWORD_TEXTS.contains(myBuilder.getTokenText())) {
|
||||||
// TODO : this loop seems to be a bad solution
|
// TODO : this loop seems to be a bad solution
|
||||||
for (IElementType type : set.getTypes()) {
|
for (IElementType type : set.getTypes()) {
|
||||||
if (type instanceof JetKeywordToken) {
|
if (type instanceof JetKeywordToken) {
|
||||||
|
|||||||
Reference in New Issue
Block a user