001 /*
002 * Copyright 2010-2013 JetBrains s.r.o.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017 package org.jetbrains.jet.lexer;
018
019 import com.intellij.psi.TokenType;
020 import com.intellij.psi.tree.IElementType;
021 import com.intellij.psi.tree.TokenSet;
022 import org.jetbrains.jet.kdoc.lexer.KDocTokens;
023
024 public interface JetTokens {
025 JetToken EOF = new JetToken("EOF");
026
027 JetToken BLOCK_COMMENT = new JetToken("BLOCK_COMMENT");
028 JetToken EOL_COMMENT = new JetToken("EOL_COMMENT");
029 JetToken SHEBANG_COMMENT = new JetToken("SHEBANG_COMMENT");
030
031 //JetToken DOC_COMMENT = new JetToken("DOC_COMMENT");
032 IElementType DOC_COMMENT = KDocTokens.KDOC;
033
034 IElementType WHITE_SPACE = TokenType.WHITE_SPACE;
035
036 JetToken INTEGER_LITERAL = new JetToken("INTEGER_LITERAL");
037 JetToken FLOAT_LITERAL = new JetToken("FLOAT_CONSTANT");
038 JetToken CHARACTER_LITERAL = new JetToken("CHARACTER_LITERAL");
039
040 JetToken CLOSING_QUOTE = new JetToken("CLOSING_QUOTE");
041 JetToken OPEN_QUOTE = new JetToken("OPEN_QUOTE");
042 JetToken REGULAR_STRING_PART = new JetToken("REGULAR_STRING_PART");
043 JetToken ESCAPE_SEQUENCE = new JetToken("ESCAPE_SEQUENCE");
044 JetToken SHORT_TEMPLATE_ENTRY_START = new JetToken("SHORT_TEMPLATE_ENTRY_START");
045 JetToken LONG_TEMPLATE_ENTRY_START = new JetToken("LONG_TEMPLATE_ENTRY_START");
046 JetToken LONG_TEMPLATE_ENTRY_END = new JetToken("LONG_TEMPLATE_ENTRY_END");
047 JetToken DANGLING_NEWLINE = new JetToken("DANGLING_NEWLINE");
048
049 JetKeywordToken PACKAGE_KEYWORD = JetKeywordToken.keyword("package");
050 JetKeywordToken AS_KEYWORD = JetKeywordToken.keyword("as");
051 JetKeywordToken TYPE_KEYWORD = JetKeywordToken.keyword("type");
052 JetKeywordToken CLASS_KEYWORD = JetKeywordToken.keyword("class");
053 JetKeywordToken THIS_KEYWORD = JetKeywordToken.keyword("this");
054 JetKeywordToken SUPER_KEYWORD = JetKeywordToken.keyword("super");
055 JetKeywordToken VAL_KEYWORD = JetKeywordToken.keyword("val");
056 JetKeywordToken VAR_KEYWORD = JetKeywordToken.keyword("var");
057 JetKeywordToken FUN_KEYWORD = JetKeywordToken.keyword("fun");
058 JetKeywordToken FOR_KEYWORD = JetKeywordToken.keyword("for");
059 JetKeywordToken NULL_KEYWORD = JetKeywordToken.keyword("null");
060 JetKeywordToken TRUE_KEYWORD = JetKeywordToken.keyword("true");
061 JetKeywordToken FALSE_KEYWORD = JetKeywordToken.keyword("false");
062 JetKeywordToken IS_KEYWORD = JetKeywordToken.keyword("is");
063 JetKeywordToken IN_KEYWORD = JetKeywordToken.keyword("in");
064 JetKeywordToken THROW_KEYWORD = JetKeywordToken.keyword("throw");
065 JetKeywordToken RETURN_KEYWORD = JetKeywordToken.keyword("return");
066 JetKeywordToken BREAK_KEYWORD = JetKeywordToken.keyword("break");
067 JetKeywordToken CONTINUE_KEYWORD = JetKeywordToken.keyword("continue");
068 JetKeywordToken OBJECT_KEYWORD = JetKeywordToken.keyword("object");
069 JetKeywordToken IF_KEYWORD = JetKeywordToken.keyword("if");
070 JetKeywordToken TRY_KEYWORD = JetKeywordToken.keyword("try");
071 JetKeywordToken ELSE_KEYWORD = JetKeywordToken.keyword("else");
072 JetKeywordToken WHILE_KEYWORD = JetKeywordToken.keyword("while");
073 JetKeywordToken DO_KEYWORD = JetKeywordToken.keyword("do");
074 JetKeywordToken WHEN_KEYWORD = JetKeywordToken.keyword("when");
075 JetKeywordToken TRAIT_KEYWORD = JetKeywordToken.keyword("trait");
076 // TODO: Discuss "This" keyword
077 JetKeywordToken CAPITALIZED_THIS_KEYWORD = JetKeywordToken.keyword("This");
078
079
080 JetToken AS_SAFE = JetKeywordToken.keyword("AS_SAFE");//new JetToken("as?");
081
082 JetToken IDENTIFIER = new JetToken("IDENTIFIER");
083 JetToken LABEL_IDENTIFIER = new JetToken("LABEL_IDENTIFIER");
084
085 JetToken FIELD_IDENTIFIER = new JetToken("FIELD_IDENTIFIER");
086 JetToken LBRACKET = new JetToken("LBRACKET");
087 JetToken RBRACKET = new JetToken("RBRACKET");
088 JetToken LBRACE = new JetToken("LBRACE");
089 JetToken RBRACE = new JetToken("RBRACE");
090 JetToken LPAR = new JetToken("LPAR");
091 JetToken RPAR = new JetToken("RPAR");
092 JetToken DOT = new JetToken("DOT");
093 JetToken PLUSPLUS = new JetToken("PLUSPLUS");
094 JetToken MINUSMINUS = new JetToken("MINUSMINUS");
095 JetToken MUL = new JetToken("MUL");
096 JetToken PLUS = new JetToken("PLUS");
097 JetToken MINUS = new JetToken("MINUS");
098 JetToken EXCL = new JetToken("EXCL");
099 JetToken DIV = new JetToken("DIV");
100 JetToken PERC = new JetToken("PERC");
101 JetToken LT = new JetToken("LT");
102 JetToken GT = new JetToken("GT");
103 JetToken LTEQ = new JetToken("LTEQ");
104 JetToken GTEQ = new JetToken("GTEQ");
105 JetToken EQEQEQ = new JetToken("EQEQEQ");
106 JetToken ARROW = new JetToken("ARROW");
107 JetToken DOUBLE_ARROW = new JetToken("DOUBLE_ARROW");
108 JetToken EXCLEQEQEQ = new JetToken("EXCLEQEQEQ");
109 JetToken EQEQ = new JetToken("EQEQ");
110 JetToken EXCLEQ = new JetToken("EXCLEQ");
111 JetToken EXCLEXCL = new JetToken("EXCLEXCL");
112 JetToken ANDAND = new JetToken("ANDAND");
113 JetToken OROR = new JetToken("OROR");
114 JetToken SAFE_ACCESS = new JetToken("SAFE_ACCESS");
115 JetToken ELVIS = new JetToken("ELVIS");
116 // JetToken MAP = new JetToken("MAP");
117 // JetToken FILTER = new JetToken("FILTER");
118 JetToken QUEST = new JetToken("QUEST");
119 JetToken COLONCOLON = new JetToken("COLONCOLON");
120 JetToken COLON = new JetToken("COLON");
121 JetToken SEMICOLON = new JetToken("SEMICOLON");
122 JetToken RANGE = new JetToken("RANGE");
123 JetToken EQ = new JetToken("EQ");
124 JetToken MULTEQ = new JetToken("MULTEQ");
125 JetToken DIVEQ = new JetToken("DIVEQ");
126 JetToken PERCEQ = new JetToken("PERCEQ");
127 JetToken PLUSEQ = new JetToken("PLUSEQ");
128 JetToken MINUSEQ = new JetToken("MINUSEQ");
129 JetToken NOT_IN = JetKeywordToken.keyword("NOT_IN");
130 JetToken NOT_IS = JetKeywordToken.keyword("NOT_IS");
131 JetToken HASH = new JetToken("HASH");
132 JetToken AT = new JetToken("AT");
133 JetToken ATAT = new JetToken("ATAT");
134
135 JetToken IDE_TEMPLATE_START = new JetToken("IDE_TEMPLATE_START");
136 JetToken IDE_TEMPLATE_END = new JetToken("IDE_TEMPLATE_END");
137
138 TokenSet LABELS = TokenSet.create(AT, ATAT, LABEL_IDENTIFIER);
139
140 JetToken COMMA = new JetToken("COMMA");
141
142 JetToken EOL_OR_SEMICOLON = new JetToken("EOL_OR_SEMICOLON");
143 JetKeywordToken IMPORT_KEYWORD = JetKeywordToken.softKeyword("import");
144 JetKeywordToken WHERE_KEYWORD = JetKeywordToken.softKeyword("where");
145 JetKeywordToken BY_KEYWORD = JetKeywordToken.softKeyword("by");
146 JetKeywordToken GET_KEYWORD = JetKeywordToken.softKeyword("get");
147 JetKeywordToken SET_KEYWORD = JetKeywordToken.softKeyword("set");
148 JetKeywordToken ABSTRACT_KEYWORD = JetKeywordToken.softKeyword("abstract");
149 JetKeywordToken ENUM_KEYWORD = JetKeywordToken.softKeyword("enum");
150 JetKeywordToken OPEN_KEYWORD = JetKeywordToken.softKeyword("open");
151 JetKeywordToken INNER_KEYWORD = JetKeywordToken.softKeyword("inner");
152 JetKeywordToken ANNOTATION_KEYWORD = JetKeywordToken.softKeyword("annotation");
153 JetKeywordToken OVERRIDE_KEYWORD = JetKeywordToken.softKeyword("override");
154 JetKeywordToken PRIVATE_KEYWORD = JetKeywordToken.softKeyword("private");
155 JetKeywordToken PUBLIC_KEYWORD = JetKeywordToken.softKeyword("public");
156 JetKeywordToken INTERNAL_KEYWORD = JetKeywordToken.softKeyword("internal");
157 JetKeywordToken PROTECTED_KEYWORD = JetKeywordToken.softKeyword("protected");
158 JetKeywordToken CATCH_KEYWORD = JetKeywordToken.softKeyword("catch");
159 JetKeywordToken OUT_KEYWORD = JetKeywordToken.softKeyword("out");
160 JetKeywordToken VARARG_KEYWORD = JetKeywordToken.softKeyword("vararg");
161 JetKeywordToken INLINE_KEYWORD = JetKeywordToken.softKeyword("inline");
162 JetKeywordToken REIFIED_KEYWORD = JetKeywordToken.softKeyword("reified");
163
164 JetKeywordToken FINALLY_KEYWORD = JetKeywordToken.softKeyword("finally");
165 JetKeywordToken FINAL_KEYWORD = JetKeywordToken.softKeyword("final");
166
167 TokenSet KEYWORDS = TokenSet.create(PACKAGE_KEYWORD, AS_KEYWORD, TYPE_KEYWORD, CLASS_KEYWORD, TRAIT_KEYWORD,
168 THIS_KEYWORD, SUPER_KEYWORD, VAL_KEYWORD, VAR_KEYWORD, FUN_KEYWORD, FOR_KEYWORD,
169 NULL_KEYWORD,
170 TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD,
171 IN_KEYWORD, THROW_KEYWORD, RETURN_KEYWORD, BREAK_KEYWORD, CONTINUE_KEYWORD, OBJECT_KEYWORD, IF_KEYWORD,
172 ELSE_KEYWORD, WHILE_KEYWORD, DO_KEYWORD, TRY_KEYWORD, WHEN_KEYWORD,
173 NOT_IN, NOT_IS, CAPITALIZED_THIS_KEYWORD, AS_SAFE
174 );
175
176 TokenSet SOFT_KEYWORDS = TokenSet.create(IMPORT_KEYWORD, WHERE_KEYWORD, BY_KEYWORD, GET_KEYWORD,
177 SET_KEYWORD, ABSTRACT_KEYWORD, ENUM_KEYWORD, OPEN_KEYWORD, INNER_KEYWORD, ANNOTATION_KEYWORD,
178 OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD,
179 CATCH_KEYWORD, FINALLY_KEYWORD, OUT_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD, INLINE_KEYWORD, REIFIED_KEYWORD
180 );
181
182 TokenSet MODIFIER_KEYWORDS = TokenSet.create(ABSTRACT_KEYWORD, ENUM_KEYWORD,
183 OPEN_KEYWORD, INNER_KEYWORD, ANNOTATION_KEYWORD, OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD,
184 PROTECTED_KEYWORD, OUT_KEYWORD, IN_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD, INLINE_KEYWORD, REIFIED_KEYWORD
185 );
186 TokenSet WHITESPACES = TokenSet.create(TokenType.WHITE_SPACE);
187
188 /**
189 * Don't add KDocTokens to COMMENTS TokenSet, because it is used in JetParserDefinition.getCommentTokens(),
190 * and therefor all COMMENTS tokens will be ignored by PsiBuilder.
191 *
192 * @see org.jetbrains.jet.lang.psi.JetPsiUtil.isInComment()
193 */
194 TokenSet COMMENTS = TokenSet.create(EOL_COMMENT, BLOCK_COMMENT, DOC_COMMENT, SHEBANG_COMMENT);
195 TokenSet WHITE_SPACE_OR_COMMENT_BIT_SET = TokenSet.orSet(COMMENTS, TokenSet.create(WHITE_SPACE));
196
197 TokenSet STRINGS = TokenSet.create(CHARACTER_LITERAL, REGULAR_STRING_PART);
198 TokenSet OPERATIONS = TokenSet.create(AS_KEYWORD, AS_SAFE, IS_KEYWORD, IN_KEYWORD, DOT, PLUSPLUS, MINUSMINUS, EXCLEXCL, MUL, PLUS,
199 MINUS, EXCL, DIV, PERC, LT, GT, LTEQ, GTEQ, EQEQEQ, EXCLEQEQEQ, EQEQ, EXCLEQ, ANDAND, OROR,
200 SAFE_ACCESS, ELVIS,
201 // MAP, FILTER,
202 COLON,
203 RANGE, EQ, MULTEQ, DIVEQ, PERCEQ, PLUSEQ, MINUSEQ,
204 NOT_IN, NOT_IS,
205 IDENTIFIER, LABEL_IDENTIFIER, ATAT, AT);
206
207 TokenSet AUGMENTED_ASSIGNMENTS = TokenSet.create(PLUSEQ, MINUSEQ, MULTEQ, PERCEQ, DIVEQ);
208 TokenSet ALL_ASSIGNMENTS = TokenSet.create(EQ, PLUSEQ, MINUSEQ, MULTEQ, PERCEQ, DIVEQ);
209 }