Field references ($fieldName) and quoted literal (anyWord)
This commit is contained in:
@@ -110,6 +110,7 @@ public interface JetNodeTypes {
|
||||
JetNodeType TUPLE_PATTERN = new JetNodeType("TUPLE_PATTERN");
|
||||
JetNodeType OBJECT_LITERAL = new JetNodeType("OBJECT_LITERAL");
|
||||
JetNodeType ROOT_NAMESPACE = new JetNodeType("ROOT_NAMESPACE");
|
||||
JetNodeType FIELD_REFERENCE = new JetNodeType("FIELD_REFERENCE");
|
||||
|
||||
IElementType NAMESPACE_NAME = new JetNodeType("NAMESPACE_NAME");
|
||||
}
|
||||
|
||||
@@ -31,6 +31,12 @@ public class JetHighlighter extends SyntaxHighlighterBase {
|
||||
SyntaxHighlighterColors.KEYWORD.getDefaultAttributes()
|
||||
);
|
||||
|
||||
public static final TextAttributesKey JET_FIELD_IDENTIFIER = TextAttributesKey.createTextAttributesKey(
|
||||
"JET.FIELD.IDENTIFIER",
|
||||
// TODO: proper attributes
|
||||
SyntaxHighlighterColors.KEYWORD.getDefaultAttributes()
|
||||
);
|
||||
|
||||
private static final TextAttributesKey JET_NUMBER = TextAttributesKey.createTextAttributesKey(
|
||||
"JET.NUMBER",
|
||||
SyntaxHighlighterColors.NUMBER.getDefaultAttributes()
|
||||
@@ -68,6 +74,7 @@ public class JetHighlighter extends SyntaxHighlighterBase {
|
||||
|
||||
fillMap(keys1, JetTokens.KEYWORDS, JET_KEYWORD);
|
||||
|
||||
keys1.put(JetTokens.FIELD_IDENTIFIER, JET_FIELD_IDENTIFIER);
|
||||
keys1.put(JetTokens.INTEGER_LITERAL, JET_NUMBER);
|
||||
keys1.put(JetTokens.LONG_LITERAL, JET_NUMBER);
|
||||
keys1.put(JetTokens.FLOAT_LITERAL, JET_NUMBER);
|
||||
|
||||
@@ -324,6 +324,9 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
||||
VAR_KEYWORD, TYPE_KEYWORD, DECOMPOSER_KEYWORD)) {
|
||||
parseLocalDeclaration();
|
||||
}
|
||||
else if (at(FIELD_IDENTIFIER)) {
|
||||
parseOneTokenExpression(FIELD_REFERENCE);
|
||||
}
|
||||
else if (at(IDENTIFIER)) {
|
||||
if (JetParsing.MODIFIER_KEYWORD_MAP.containsKey(myBuilder.getTokenText())) {
|
||||
if (!parseLocalDeclaration()) {
|
||||
@@ -337,7 +340,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
||||
parseFunctionLiteral();
|
||||
}
|
||||
else if (!parseLiteralConstant()) {
|
||||
// TODO: betters recovery if FIRST(expression) did not match
|
||||
// TODO: better recovery if FIRST(expression) did not match
|
||||
errorAndAdvance("Expecting an expression");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,12 @@ DIGIT=[0-9]
|
||||
HEX_DIGIT=[0-9A-Fa-f]
|
||||
WHITE_SPACE_CHAR=[\ \n\t\f]
|
||||
|
||||
IDENTIFIER=[:jletter:] [:jletterdigit:]*
|
||||
// TODO: prohibit '$' in identifiers?
|
||||
PLAIN_IDENTIFIER=[:jletter:] [:jletterdigit:]*
|
||||
// TODO: this one MUST allow everything accepted by the runtime
|
||||
ESCAPED_IDENTIFIER = `{PLAIN_IDENTIFIER}`
|
||||
IDENTIFIER = {PLAIN_IDENTIFIER}|{ESCAPED_IDENTIFIER}
|
||||
FIELD_IDENTIFIER = \${IDENTIFIER}
|
||||
|
||||
BLOCK_COMMENT=("/*"[^"*"]{COMMENT_TAIL})|"/*"
|
||||
DOC_COMMENT="/*""*"+("/"|([^"/""*"]{COMMENT_TAIL}))?
|
||||
@@ -111,6 +116,7 @@ RAW_STRING_LITERAL = {THREE_QUO} {QUO_STRING_CHAR}* {THREE_QUO}?
|
||||
<YYINITIAL> "do" { return JetTokens.DO_KEYWORD ;}
|
||||
<YYINITIAL> "as" { return JetTokens.AS_KEYWORD ;}
|
||||
|
||||
<YYINITIAL> {FIELD_IDENTIFIER} { return JetTokens.FIELD_IDENTIFIER; }
|
||||
<YYINITIAL> {IDENTIFIER} { return JetTokens.IDENTIFIER; }
|
||||
|
||||
<YYINITIAL> "===" { return JetTokens.EQEQEQ ; }
|
||||
|
||||
@@ -58,6 +58,7 @@ public interface JetTokens {
|
||||
|
||||
|
||||
JetToken IDENTIFIER = new JetToken("IDENTIFIER");
|
||||
JetToken FIELD_IDENTIFIER = new JetToken("FIELD_IDENTIFIER");
|
||||
|
||||
JetToken LBRACKET = new JetToken("LBRACKET");
|
||||
JetToken RBRACKET = new JetToken("RBRACKET");
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,3 @@
|
||||
[`return`] fun `namespace`() {
|
||||
`class`()
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
JetFile: QuotedIdentifiers.jet
|
||||
NAMESPACE
|
||||
FUN
|
||||
MODIFIER_LIST
|
||||
ATTRIBUTE_ANNOTATION
|
||||
PsiElement(LBRACKET)('[')
|
||||
ATTRIBUTE
|
||||
USER_TYPE
|
||||
PsiElement(IDENTIFIER)('`return`')
|
||||
PsiElement(RBRACKET)(']')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(fun)('fun')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(IDENTIFIER)('`namespace`')
|
||||
TYPE_PARAMETER_LIST
|
||||
<empty list>
|
||||
VALUE_PARAMETER_LIST
|
||||
PsiElement(LPAR)('(')
|
||||
PsiElement(RPAR)(')')
|
||||
PsiWhiteSpace(' ')
|
||||
BLOCK
|
||||
PsiElement(LBRACE)('{')
|
||||
PsiWhiteSpace('\n ')
|
||||
CALL_EXPRESSION
|
||||
PsiElement(IDENTIFIER)('`class`')
|
||||
VALUE_ARGUMENT_LIST
|
||||
PsiElement(LPAR)('(')
|
||||
PsiElement(RPAR)(')')
|
||||
PsiWhiteSpace('\n')
|
||||
PsiElement(RBRACE)('}')
|
||||
@@ -927,7 +927,8 @@ JetFile: BinaryHeap.jet
|
||||
PsiElement(LBRACE)('{')
|
||||
PsiWhiteSpace('\n ')
|
||||
BINARY_EXPRESSION
|
||||
PsiElement(IDENTIFIER)('$value')
|
||||
FIELD_REFERENCE
|
||||
PsiElement(FIELD_IDENTIFIER)('$value')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(EQ)('=')
|
||||
PsiWhiteSpace(' ')
|
||||
|
||||
Reference in New Issue
Block a user