package com.haskforce; import com.haskforce.psi.HaskellTypes; import com.intellij.lang.Language; import com.intellij.psi.tree.IElementType; import com.intellij.util.containers.HashSet; import java.util.Arrays; import java.util.Set; import static com.haskforce.psi.HaskellTypes.*; /** * Top level entry for IntelliJ. Also serves as a placeholder for various * language related things, for example various token categories. */ public class HaskellLanguage extends Language { public static final HaskellLanguage INSTANCE = new HaskellLanguage(); private HaskellLanguage() { super("Haskell"); } @Override public boolean isCaseSensitive() { return true; } /** * Tokens of bracket symbols. */ public static final HashSet<IElementType> BRACKET_TOKENS = new HashSet<>( Arrays.asList(LBRACKET, RBRACKET, LTHOPEN, RTHCLOSE, QQOPEN)); /** * Parens tokens */ public static final Set<IElementType> PARENS_TOKENS = new HashSet<>( Arrays.asList(LPAREN, RPAREN, PARENSPLICE) ); /** * Brace tokens */ public static final Set<IElementType> BRACE_TOKENS = new HashSet<>( Arrays.asList(LBRACE, RBRACE) ); /** * Tokens of reserved IDs. */ public static final HashSet<IElementType> RESERVED_IDS_TOKENS = new HashSet<IElementType>( Arrays.asList(AS, CASE, CLASSTOKEN, DATA, DEFAULT , DERIVING, DO, ELSE, FORALLTOKEN, FOREIGN, HIDING, IF, IMPORT, IN, INFIX , INFIXL, INFIXR, HaskellTypes.INSTANCE, LET, MDOTOK, MODULETOKEN , NEWTYPE, OF, QUALIFIED, RECTOK, THEN, TYPE, WHERE)); /** * Strings of reserved ops. */ public static final HashSet<String> RESERVEDOPS = new HashSet<String>( Arrays.asList("..", ":", "::", "=", "\\", "|", "<-", "->", "@", "~", "=>")); public static final HashSet<IElementType> RESERVED_OPS_TOKENS = new HashSet<IElementType>( Arrays.asList(DOUBLEPERIOD, COLON, DOUBLECOLON, EQUALS, BACKSLASH, PIPE, LEFTARROW, RIGHTARROW , AMPERSAT, TILDE, DOUBLEARROW)); }