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 017package org.jetbrains.jet.lexer; 018 019import com.intellij.psi.TokenType; 020import com.intellij.psi.tree.IElementType; 021import com.intellij.psi.tree.TokenSet; 022import org.jetbrains.jet.kdoc.lexer.KDocTokens; 023 024public 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}