package com.haskforce.cabal.lang.psi; import com.intellij.psi.TokenType; import com.intellij.psi.tree.IElementType; /** * Contains all IElementType values returned from Cabal lexers and used by parsers. * * Note that we have a logical distinction between different kinds of element types - * * CabalTokenType - A token returned from the lexer. Note that we have specific * subtypes of CabalTokenType to identify, to the parser, the kind of token * we are dealing with when we need to handle them in a general case, * e.g. parse any CabalIdentTokenType. * * CabalElementType - An element constructed using the parser, usually consisting of * one or more tokens. */ public interface CabalTypes { IElementType WHITE_SPACE = TokenType.WHITE_SPACE; // Tokens specific to the highlighter. CabalTokenType VALUE_CHAR = new CabalTokenType("VALUE_CHAR"); CabalTokenType CONFIG = new CabalTokenType("CONFIG"); CabalTokenType KEY = new CabalTokenType("KEY"); CabalTokenType CONDITIONAL = new CabalTokenType("CONDITIONAL"); // Tokens specific to the parser. CabalElementType IF_EXPR = new CabalElementType("IF_EXPR"); CabalElementType IF_COND = new CabalElementType("IF_COND"); CabalElementType THEN_BODY = new CabalElementType("THEN_BODY"); CabalElementType ELSE_BODY = new CabalElementType("ELSE_BODY"); CabalElementType LOGICAL_NEG = new CabalElementType("LOGICAL_NEG"); CabalElementType FREEFORM = new CabalElementType("FREEFORM"); CabalElementType FREEFORM_LINE = new CabalElementType("FREEFORM_LINE"); CabalElementType IDENT_LIST = new CabalElementType("IDENT_LIST"); CabalElementType IDENT = new CabalElementType("IDENT"); CabalElementType MODULE_LIST = new CabalElementType("MODULE_LIST"); CabalElementType MODULE = new CabalElementType("MODULE"); CabalElementType MODULE_PART = new CabalElementType("MODULE_PART"); CabalElementType SOURCE_DIR = new CabalElementType("SOURCE_DIR"); CabalElementType BOOL_VALUE = new CabalElementType("BOOL_VALUE"); CabalElementType BOOL_LIT = new CabalElementType("BOOL_LIT"); CabalElementType FUNC_CALL = new CabalElementType("FUNC_CALL"); CabalElementType FUNC_NAME = new CabalElementType("FUNC_NAME"); CabalElementType FUNC_ARG = new CabalElementType("FUNC_ARG"); CabalTokenType COMMENT = new CabalTokenType("COMMENT"); CabalLayoutTokenType EOL = new CabalLayoutTokenType("EOL"); CabalLayoutTokenType INDENT = new CabalLayoutTokenType("INDENT"); CabalLayoutTokenType DEDENT = new CabalLayoutTokenType("DEDENT"); CabalNumericTokenType NUMBERS = new CabalNumericTokenType("NUMBERS"); CabalComparatorTokenType EQ = new CabalComparatorTokenType("=="); CabalComparatorTokenType GT = new CabalComparatorTokenType(">"); CabalComparatorTokenType GTE = new CabalComparatorTokenType(">="); CabalComparatorTokenType LT = new CabalComparatorTokenType("<"); CabalComparatorTokenType LTE = new CabalComparatorTokenType("<="); CabalLogicalTokenType AND = new CabalLogicalTokenType("&&"); CabalLogicalTokenType OR = new CabalLogicalTokenType("||"); CabalSymbolTokenType LPAREN = new CabalSymbolTokenType("("); CabalSymbolTokenType RPAREN = new CabalSymbolTokenType(")"); CabalSymbolTokenType COLON = new CabalSymbolTokenType("COLON"); CabalSymbolTokenType LBRACKET = new CabalSymbolTokenType("["); CabalSymbolTokenType RBRACKET = new CabalSymbolTokenType("]"); CabalSymbolTokenType LBRACE = new CabalSymbolTokenType("{"); CabalSymbolTokenType RBRACE = new CabalSymbolTokenType("}"); CabalSymbolTokenType DASH = new CabalSymbolTokenType("-"); CabalSymbolTokenType DOT = new CabalSymbolTokenType("."); CabalSymbolTokenType COMMA = new CabalSymbolTokenType(","); CabalSymbolTokenType BANG = new CabalSymbolTokenType("!"); // Tabs don't affect the layout but also aren't words, so make them symbols. CabalSymbolTokenType TAB = new CabalSymbolTokenType("TAB"); // Some other character we didn't account for, let's assume it's a symbol; // although, it might not be. CabalSymbolTokenType OTHER_CHAR = new CabalSymbolTokenType("OTHER_CHAR"); // Keywords CabalIdentTokenType AS = new CabalIdentTokenType("AS"); CabalIdentTokenType WITH = new CabalIdentTokenType("WITH"); CabalIdentTokenType TRUE = new CabalIdentTokenType("TRUE"); CabalIdentTokenType FALSE = new CabalIdentTokenType("FALSE"); CabalIdentTokenType IF = new CabalIdentTokenType("IF"); CabalIdentTokenType ELSE = new CabalIdentTokenType("ELSE"); CabalFlagKeywordTokenType FLAG = new CabalFlagKeywordTokenType("FLAG"); CabalFuncNameTokenType OS = new CabalFuncNameTokenType("OS"); CabalFuncNameTokenType ARCH = new CabalFuncNameTokenType("ARCH"); CabalFuncNameTokenType IMPL = new CabalFuncNameTokenType("IMPL"); // Top-level fields CabalElementType INVALID_FIELD = new CabalElementType("INVALID_FIELD"); CabalElementType UNKNOWN_FIELD = new CabalElementType("UNKNOWN_FIELD"); CabalFieldKeyTokenType UNKNOWN_KEY = new CabalFieldKeyTokenType("UNKNOWN_KEY"); CabalElementType CUSTOM_FIELD = new CabalElementType("CUSTOM_FIELD"); CabalFieldKeyTokenType CUSTOM_KEY = new CabalFieldKeyTokenType("CUSTOM_KEY"); CabalElementType PKG_NAME = new CabalElementType("PKG_NAME"); CabalFieldKeyTokenType NAME_KEY = new CabalFieldKeyTokenType("NAME_KEY"); CabalElementType PKG_VERSION = new CabalElementType("PKG_VERSION"); CabalFieldKeyTokenType VERSION_KEY = new CabalFieldKeyTokenType("VERSION_KEY"); CabalElementType CABAL_VERSION = new CabalElementType("CABAL_VERSION"); CabalFieldKeyTokenType CABAL_VERSION_KEY = new CabalFieldKeyTokenType("CABAL_VERSION_KEY"); CabalElementType BUILD_TYPE = new CabalElementType("BUILD_TYPE"); CabalFieldKeyTokenType BUILD_TYPE_KEY = new CabalFieldKeyTokenType("BUILD_TYPE_KEY"); CabalElementType LICENSE = new CabalElementType("LICENSE"); CabalFieldKeyTokenType LICENSE_KEY = new CabalFieldKeyTokenType("LICENSE_KEY"); CabalElementType LICENSE_FILE = new CabalElementType("LICENSE_FILE"); CabalFieldKeyTokenType LICENSE_FILE_KEY = new CabalFieldKeyTokenType("LICENSE_FILE_KEY"); CabalElementType LICENSE_FILES = new CabalElementType("LICENSE_FILES"); CabalFieldKeyTokenType LICENSE_FILES_KEY = new CabalFieldKeyTokenType("LICENSE_FILES_KEY"); CabalElementType COPYRIGHT = new CabalElementType("COPYRIGHT"); CabalFieldKeyTokenType COPYRIGHT_KEY = new CabalFieldKeyTokenType("COPYRIGHT_KEY"); CabalElementType AUTHOR = new CabalElementType("AUTHOR"); CabalFieldKeyTokenType AUTHOR_KEY = new CabalFieldKeyTokenType("AUTHOR_KEY"); CabalElementType MAINTAINER = new CabalElementType("MAINTAINER"); CabalFieldKeyTokenType MAINTAINER_KEY = new CabalFieldKeyTokenType("MAINTAINER_KEY"); CabalElementType STABILITY = new CabalElementType("STABILITY"); CabalFieldKeyTokenType STABILITY_KEY = new CabalFieldKeyTokenType("STABILITY_KEY"); CabalElementType HOMEPAGE = new CabalElementType("HOMEPAGE"); CabalFieldKeyTokenType HOMEPAGE_KEY = new CabalFieldKeyTokenType("HOMEPAGE_KEY"); CabalElementType BUG_REPORTS = new CabalElementType("BUG_REPORTS"); CabalFieldKeyTokenType BUG_REPORTS_KEY = new CabalFieldKeyTokenType("BUG_REPORTS_KEY"); CabalElementType PACKAGE_URL = new CabalElementType("PACKAGE_URL"); CabalFieldKeyTokenType PACKAGE_URL_KEY = new CabalFieldKeyTokenType("PACKAGE_URL_KEY"); CabalElementType SYNOPSIS = new CabalElementType("SYNOPSIS"); CabalFieldKeyTokenType SYNOPSIS_KEY = new CabalFieldKeyTokenType("SYNOPSIS_KEY"); CabalElementType DESCRIPTION = new CabalElementType("DESCRIPTION"); CabalFieldKeyTokenType DESCRIPTION_KEY = new CabalFieldKeyTokenType("DESCRIPTION_KEY"); CabalElementType CATEGORY = new CabalElementType("CATEGORY"); CabalFieldKeyTokenType CATEGORY_KEY = new CabalFieldKeyTokenType("CATEGORY_KEY"); CabalElementType TESTED_WITH = new CabalElementType("TESTED_WITH"); CabalFieldKeyTokenType TESTED_WITH_KEY = new CabalFieldKeyTokenType("TESTED_WITH_KEY"); CabalElementType DATA_FILES = new CabalElementType("DATA_FILES"); CabalFieldKeyTokenType DATA_FILES_KEY = new CabalFieldKeyTokenType("DATA_FILES_KEY"); CabalElementType DATA_DIR = new CabalElementType("DATA_DIR"); CabalFieldKeyTokenType DATA_DIR_KEY = new CabalFieldKeyTokenType("DATA_DIR_KEY"); CabalElementType EXTRA_SOURCE_FILES = new CabalElementType("EXTRA_SOURCE_FILES"); CabalFieldKeyTokenType EXTRA_SOURCE_FILES_KEY = new CabalFieldKeyTokenType("EXTRA_SOURCE_FILES_KEY"); CabalElementType EXTRA_DOC_FILES = new CabalElementType("EXTRA_DOC_FILES"); CabalFieldKeyTokenType EXTRA_DOC_FILES_KEY = new CabalFieldKeyTokenType("EXTRA_DOC_FILES_KEY"); CabalElementType EXTRA_TMP_FILES = new CabalElementType("EXTRA_TMP_FILES"); CabalFieldKeyTokenType EXTRA_TMP_FILES_KEY = new CabalFieldKeyTokenType("EXTRA_TMP_FILES_KEY"); // Flag stanza fields CabalElementType FLAG_DECL = new CabalElementType("FLAG_DECL"); CabalStanzaArgTokenType FLAG_NAME = new CabalStanzaArgTokenType("FLAG_NAME"); CabalElementType FLAG_DESCR = new CabalElementType("FLAG_DESCR"); CabalElementType FLAG_DEFAULT = new CabalElementType("FLAG_DEFAULT"); CabalFieldKeyTokenType DEFAULT_KEY = new CabalFieldKeyTokenType("DEFAULT_KEY"); CabalElementType FLAG_MANUAL = new CabalElementType("FLAG_MANUAL"); CabalFieldKeyTokenType MANUAL_KEY = new CabalFieldKeyTokenType("MANUAL_KEY"); // Shared keys // Used by Source-repository, Test-suite, Benchmark CabalFieldKeyTokenType TYPE_KEY = new CabalFieldKeyTokenType("TYPE_KEY"); // Used for Executable, Test-suite, and Benchmark CabalElementType MAIN_IS = new CabalElementType("MAIN_IS"); CabalFieldKeyTokenType MAIN_IS_KEY = new CabalFieldKeyTokenType("MAIN_IS_KEY"); // Source-repository stanza fields CabalElementType SOURCE_REPO = new CabalElementType("SOURCE_REPO"); CabalStanzaKeyTokenType SOURCE_REPO_KEY = new CabalStanzaKeyTokenType("SOURCE_REPO_KEY"); CabalStanzaArgTokenType SOURCE_REPO_NAME = new CabalStanzaArgTokenType("SOURCE_REPO_NAME"); CabalElementType SOURCE_REPO_TYPE = new CabalElementType("SOURCE_REPO_TYPE"); CabalElementType SOURCE_REPO_LOCATION = new CabalElementType("SOURCE_REPO_LOCATION"); CabalFieldKeyTokenType LOCATION_KEY = new CabalFieldKeyTokenType("LOCATION_KEY"); CabalElementType SOURCE_REPO_MODULE = new CabalElementType("SOURCE_REPO_MODULE"); CabalFieldKeyTokenType MODULE_KEY = new CabalFieldKeyTokenType("MODULE_KEY"); CabalElementType SOURCE_REPO_BRANCH = new CabalElementType("SOURCE_REPO_BRANCH"); CabalFieldKeyTokenType BRANCH_KEY = new CabalFieldKeyTokenType("BRANCH_KEY"); CabalElementType SOURCE_REPO_TAG = new CabalElementType("SOURCE_REPO_TAG"); CabalFieldKeyTokenType TAG_KEY = new CabalFieldKeyTokenType("TAG_KEY"); CabalElementType SOURCE_REPO_SUBDIR = new CabalElementType("SOURCE_REPO_SUBDIR"); CabalFieldKeyTokenType SUBDIR_KEY = new CabalFieldKeyTokenType("SUBDIR_KEY"); // Build information stanza fields CabalElementType BUILD_DEPENDS = new CabalElementType("BUILD_DEPENDS_KEY"); CabalFieldKeyTokenType BUILD_DEPENDS_KEY = new CabalFieldKeyTokenType("BUILD_DEPENDS_KEY"); CabalElementType DEPENDENCIES = new CabalElementType("DEPENDENCIES"); CabalElementType DEPENDENCY = new CabalElementType("DEPENDENCY"); CabalElementType DEPENDENCY_NAME = new CabalElementType("DEPENDENCY_NAME"); CabalElementType DEPENDENCY_VERSION = new CabalElementType("DEPENDENCY_VERSION"); CabalElementType THIN_RENAME_MODULES = new CabalElementType("THIN_RENAME_MODULES"); CabalElementType WITH_RENAME_MODULES = new CabalElementType("WITH_RENAME_MODULES"); CabalElementType RENAME_MODULE = new CabalElementType("RENAME_MODULE"); CabalElementType OTHER_MODULES = new CabalElementType("OTHER_MODULES"); CabalFieldKeyTokenType OTHER_MODULES_KEY = new CabalFieldKeyTokenType("OTHER_MODULES_KEY"); CabalElementType DEFAULT_LANGUAGE = new CabalElementType("DEFAULT_LANGUAGE"); CabalFieldKeyTokenType DEFAULT_LANGUAGE_KEY = new CabalFieldKeyTokenType("DEFAULT_LANGUAGE_KEY"); CabalElementType OTHER_LANGUAGES = new CabalElementType("OTHER_LANGUAGES"); CabalFieldKeyTokenType OTHER_LANGUAGES_KEY = new CabalFieldKeyTokenType("OTHER_LANGUAGES_KEY"); CabalElementType DEFAULT_EXTENSIONS = new CabalElementType("DEFAULT_EXTENSIONS"); CabalFieldKeyTokenType DEFAULT_EXTENSIONS_KEY = new CabalFieldKeyTokenType("DEFAULT_EXTENSIONS_KEY"); CabalElementType OTHER_EXTENSIONS = new CabalElementType("OTHER_EXTENSIONS"); CabalFieldKeyTokenType OTHER_EXTENSIONS_KEY = new CabalFieldKeyTokenType("OTHER_EXTENSIONS_KEY"); CabalElementType HS_SOURCE_DIR = new CabalElementType("HS_SOURCE_DIR"); CabalFieldKeyTokenType HS_SOURCE_DIR_KEY = new CabalFieldKeyTokenType("HS_SOURCE_DIR_KEY"); CabalElementType HS_SOURCE_DIRS = new CabalElementType("HS_SOURCE_DIRS"); CabalFieldKeyTokenType HS_SOURCE_DIRS_KEY = new CabalFieldKeyTokenType("HS_SOURCE_DIRS_KEY"); CabalElementType EXTENSIONS = new CabalElementType("EXTENSIONS"); CabalFieldKeyTokenType EXTENSIONS_KEY = new CabalFieldKeyTokenType("EXTENSIONS_KEY"); CabalElementType BUILD_TOOLS = new CabalElementType("BUILD_TOOLS"); CabalFieldKeyTokenType BUILD_TOOLS_KEY = new CabalFieldKeyTokenType("BUILD_TOOLS_KEY"); CabalElementType BUILDABLE = new CabalElementType("BUILDABLE"); CabalFieldKeyTokenType BUILDABLE_KEY = new CabalFieldKeyTokenType("BUILDABLE_KEY"); CabalElementType GHC_OPTIONS = new CabalElementType("GHC_OPTIONS"); CabalFieldKeyTokenType GHC_OPTIONS_KEY = new CabalFieldKeyTokenType("GHC_OPTIONS_KEY"); CabalElementType GHC_PROF_OPTIONS = new CabalElementType("GHC_PROF_OPTIONS"); CabalFieldKeyTokenType GHC_PROF_OPTIONS_KEY = new CabalFieldKeyTokenType("GHC_PROF_OPTIONS_KEY"); CabalElementType GHC_SHARED_OPTIONS = new CabalElementType("GHC_SHARED_OPTIONS"); CabalFieldKeyTokenType GHC_SHARED_OPTIONS_KEY = new CabalFieldKeyTokenType("GHC_SHARED_OPTIONS_KEY"); CabalElementType INCLUDES = new CabalElementType("INCLUDES"); CabalFieldKeyTokenType INCLUDES_KEY = new CabalFieldKeyTokenType("INCLUDES_KEY"); CabalElementType INSTALL_INCLUDES = new CabalElementType("INSTALL_INCLUDES"); CabalFieldKeyTokenType INSTALL_INCLUDES_KEY = new CabalFieldKeyTokenType("INSTALL_INCLUDES_KEY"); CabalElementType INCLUDE_DIRS = new CabalElementType("INCLUDE_DIRS"); CabalFieldKeyTokenType INCLUDE_DIRS_KEY = new CabalFieldKeyTokenType("INCLUDE_DIRS_KEY"); CabalElementType C_SOURCES = new CabalElementType("C_SOURCES"); CabalFieldKeyTokenType C_SOURCES_KEY = new CabalFieldKeyTokenType("C_SOURCES_KEY"); CabalElementType JS_SOURCES = new CabalElementType("JS_SOURCES"); CabalFieldKeyTokenType JS_SOURCES_KEY = new CabalFieldKeyTokenType("JS_SOURCES_KEY"); CabalElementType EXTRA_LIBRARIES = new CabalElementType("EXTRA_LIBRARIES"); CabalFieldKeyTokenType EXTRA_LIBRARIES_KEY = new CabalFieldKeyTokenType("EXTRA_LIBRARIES_KEY"); CabalElementType EXTRA_GHCI_LIBRARIES = new CabalElementType("EXTRA_GHCI_LIBRARIES"); CabalFieldKeyTokenType EXTRA_GHCI_LIBRARIES_KEY = new CabalFieldKeyTokenType("EXTRA_GHCI_LIBRARIES_KEY"); CabalElementType EXTRA_LIB_DIRS = new CabalElementType("EXTRA_LIB_DIRS"); CabalFieldKeyTokenType EXTRA_LIB_DIRS_KEY = new CabalFieldKeyTokenType("EXTRA_LIB_DIRS_KEY"); CabalElementType CC_OPTIONS = new CabalElementType("CC_OPTIONS"); CabalFieldKeyTokenType CC_OPTIONS_KEY = new CabalFieldKeyTokenType("CC_OPTIONS_KEY"); CabalElementType CPP_OPTIONS = new CabalElementType("CPP_OPTIONS"); CabalFieldKeyTokenType CPP_OPTIONS_KEY = new CabalFieldKeyTokenType("CPP_OPTIONS_KEY"); CabalElementType LD_OPTIONS = new CabalElementType("LD_OPTIONS"); CabalFieldKeyTokenType LD_OPTIONS_KEY = new CabalFieldKeyTokenType("LD_OPTIONS_KEY"); CabalElementType PKGCONFIG_DEPENDS = new CabalElementType("PKGCONFIG_DEPENDS"); CabalFieldKeyTokenType PKGCONFIG_DEPENDS_KEY = new CabalFieldKeyTokenType("PKGCONFIG_DEPENDS_KEY"); CabalElementType FRAMEWORKS = new CabalElementType("FRAMEWORKS"); CabalFieldKeyTokenType FRAMEWORKS_KEY = new CabalFieldKeyTokenType("FRAMEWORKS_KEY"); CabalElementType REQUIRED_SIGNATURES = new CabalElementType("REQUIRED_SIGNATURES"); CabalFieldKeyTokenType REQUIRED_SIGNATURES_KEY = new CabalFieldKeyTokenType("REQUIRED_SIGNATURES_KEY"); // Library stanza CabalElementType LIBRARY = new CabalElementType("LIBRARY"); CabalStanzaKeyTokenType LIBRARY_KEY = new CabalStanzaKeyTokenType("LIBRARY_KEY"); CabalElementType EXPOSED_MODULES = new CabalElementType("EXPOSED_MODULES"); CabalFieldKeyTokenType EXPOSED_MODULES_KEY = new CabalFieldKeyTokenType("EXPOSED_MODULES_KEY"); CabalElementType EXPOSED = new CabalElementType("EXPOSED"); CabalFieldKeyTokenType EXPOSED_KEY = new CabalFieldKeyTokenType("EXPOSED_KEY"); CabalElementType REEXPORTED_MODULES = new CabalElementType("REEXPOSED_MODULES"); CabalFieldKeyTokenType REEXPORTED_MODULES_KEY = new CabalFieldKeyTokenType("REEXPOSED_MODULES_KEY"); CabalElementType MODULE_REEXPORT = new CabalElementType("MODULE_REEXPORT"); CabalElementType ORIGINAL_PACKAGE = new CabalElementType("ORIGINAL_PACKAGE"); // Executable stanza CabalElementType EXECUTABLE = new CabalElementType("EXECUTABLE"); CabalStanzaKeyTokenType EXECUTABLE_KEY = new CabalStanzaKeyTokenType("EXECUTABLE_KEY"); CabalStanzaArgTokenType EXECUTABLE_NAME = new CabalStanzaArgTokenType("EXECUTABLE_NAME"); // Test-suite stanza CabalElementType TEST_SUITE = new CabalElementType("TEST_SUITE"); CabalStanzaKeyTokenType TEST_SUITE_KEY = new CabalStanzaKeyTokenType("TEST_SUITE_KEY"); CabalStanzaArgTokenType TEST_SUITE_NAME = new CabalStanzaArgTokenType("TEST_SUITE_NAME"); CabalElementType TEST_SUITE_TYPE = new CabalElementType("TEST_SUITE_TYPE"); // Benchmark stanza CabalElementType BENCHMARK = new CabalElementType("BENCHMARK"); CabalStanzaKeyTokenType BENCHMARK_KEY = new CabalStanzaKeyTokenType("BENCHMARK_KEY"); CabalStanzaArgTokenType BENCHMARK_NAME = new CabalStanzaArgTokenType("BENCHMARK_NAME"); CabalElementType BENCHMARK_TYPE = new CabalElementType("BENCHMARK_TYPE"); // Invalid stanza CabalElementType INVALID_STANZA = new CabalElementType("INVALID_STANZA"); }