use ktrs_syntax::SyntaxKind::{self, *};
use crate::token_set::TokenSet;
pub fn is_keyword_token(kind: SyntaxKind) -> bool {
kind.keyword_text().is_some()
}
pub fn is_soft_keyword(kind: SyntaxKind) -> bool {
SOFT_KEYWORDS.contains(kind)
}
pub fn soft_keyword_by_text(text: Option<&str>) -> Option<SyntaxKind> {
text.and_then(SyntaxKind::soft_keyword).filter(|&k| SOFT_KEYWORDS.contains(k))
}
pub const KEYWORDS: TokenSet = TokenSet::create(&[
PACKAGE_KEYWORD, AS_KEYWORD, TYPE_ALIAS_KEYWORD, CLASS_KEYWORD, INTERFACE_KEYWORD,
THIS_KEYWORD, SUPER_KEYWORD, VAL_KEYWORD, VAR_KEYWORD, FUN_KEYWORD, FOR_KEYWORD,
NULL_KEYWORD,
TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD,
IN_KEYWORD, THROW_KEYWORD, RETURN_KEYWORD, BREAK_KEYWORD, CONTINUE_KEYWORD, OBJECT_KEYWORD, IF_KEYWORD,
ELSE_KEYWORD, WHILE_KEYWORD, DO_KEYWORD, TRY_KEYWORD, WHEN_KEYWORD,
NOT_IN, NOT_IS, AS_SAFE,
TYPEOF_KEYWORD,
]);
pub const SOFT_KEYWORDS: TokenSet = TokenSet::create(&[
FILE_KEYWORD, IMPORT_KEYWORD, WHERE_KEYWORD, BY_KEYWORD, GET_KEYWORD,
SET_KEYWORD, ABSTRACT_KEYWORD, ENUM_KEYWORD, CONTRACT_KEYWORD, OPEN_KEYWORD, INNER_KEYWORD,
OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD,
CATCH_KEYWORD, FINALLY_KEYWORD, OUT_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD, REIFIED_KEYWORD,
DYNAMIC_KEYWORD, COMPANION_KEYWORD, CONSTRUCTOR_KEYWORD, INIT_KEYWORD, SEALED_KEYWORD,
FIELD_KEYWORD, PROPERTY_KEYWORD, RECEIVER_KEYWORD, PARAM_KEYWORD, SETPARAM_KEYWORD,
DELEGATE_KEYWORD, ALL_KEYWORD,
LATEINIT_KEYWORD,
DATA_KEYWORD, INLINE_KEYWORD, NOINLINE_KEYWORD, TAILREC_KEYWORD, EXTERNAL_KEYWORD,
ANNOTATION_KEYWORD, CROSSINLINE_KEYWORD, CONST_KEYWORD, OPERATOR_KEYWORD, INFIX_KEYWORD,
SUSPEND_KEYWORD, EXPECT_KEYWORD, ACTUAL_KEYWORD,
VALUE_KEYWORD, CONTEXT_KEYWORD,
]);
pub const MODIFIER_KEYWORDS_ARRAY: &[SyntaxKind] = &[
PUBLIC_KEYWORD, PROTECTED_KEYWORD, PRIVATE_KEYWORD, INTERNAL_KEYWORD,
EXPECT_KEYWORD, ACTUAL_KEYWORD,
FINAL_KEYWORD, OPEN_KEYWORD, ABSTRACT_KEYWORD, SEALED_KEYWORD,
CONST_KEYWORD,
EXTERNAL_KEYWORD,
OVERRIDE_KEYWORD,
LATEINIT_KEYWORD,
TAILREC_KEYWORD,
VARARG_KEYWORD,
SUSPEND_KEYWORD,
INNER_KEYWORD,
ENUM_KEYWORD, ANNOTATION_KEYWORD, FUN_KEYWORD,
COMPANION_KEYWORD,
INLINE_KEYWORD,
VALUE_KEYWORD,
INFIX_KEYWORD,
OPERATOR_KEYWORD,
DATA_KEYWORD,
OUT_KEYWORD, IN_KEYWORD,
REIFIED_KEYWORD,
NOINLINE_KEYWORD,
CROSSINLINE_KEYWORD,
];
pub const MODIFIER_KEYWORDS: TokenSet = TokenSet::create(MODIFIER_KEYWORDS_ARRAY);
pub const TYPE_MODIFIER_KEYWORDS: TokenSet = TokenSet::create(&[SUSPEND_KEYWORD]);
pub const TYPE_ARGUMENT_MODIFIER_KEYWORDS: TokenSet = TokenSet::create(&[IN_KEYWORD, OUT_KEYWORD]);
pub const RESERVED_VALUE_PARAMETER_MODIFIER_KEYWORDS: TokenSet = TokenSet::create(&[OUT_KEYWORD, VARARG_KEYWORD]);
pub const VISIBILITY_MODIFIERS: TokenSet =
TokenSet::create(&[PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD]);
pub const MODALITY_MODIFIERS: TokenSet = TokenSet::create(&[ABSTRACT_KEYWORD, FINAL_KEYWORD, SEALED_KEYWORD, OPEN_KEYWORD]);
pub const WHITESPACES: TokenSet = TokenSet::create(&[WHITE_SPACE]);
pub const COMMENTS: TokenSet = TokenSet::create(&[EOL_COMMENT, BLOCK_COMMENT, DOC_COMMENT, SHEBANG_COMMENT]);
pub const WHITE_SPACE_OR_COMMENT_BIT_SET: TokenSet = TokenSet::or_set(&[COMMENTS, WHITESPACES]);
pub const STRINGS: TokenSet = TokenSet::create(&[CHARACTER_LITERAL, REGULAR_STRING_PART]);
pub const OPERATIONS: TokenSet = TokenSet::create(&[
AS_KEYWORD, AS_SAFE, IS_KEYWORD, IN_KEYWORD, DOT, PLUSPLUS, MINUSMINUS, EXCLEXCL, MUL, PLUS,
MINUS, EXCL, DIV, PERC, LT, GT, LTEQ, GTEQ, EQEQEQ, EXCLEQEQEQ, EQEQ, EXCLEQ, ANDAND, OROR,
SAFE_ACCESS, ELVIS,
RANGE, RANGE_UNTIL, EQ, MULTEQ, DIVEQ, PERCEQ, PLUSEQ, MINUSEQ,
NOT_IN, NOT_IS,
IDENTIFIER,
]);
pub const AUGMENTED_ASSIGNMENTS: TokenSet = TokenSet::create(&[PLUSEQ, MINUSEQ, MULTEQ, PERCEQ, DIVEQ]);
pub const ALL_ASSIGNMENTS: TokenSet = TokenSet::create(&[EQ, PLUSEQ, MINUSEQ, MULTEQ, PERCEQ, DIVEQ]);
pub const INCREMENT_AND_DECREMENT: TokenSet = TokenSet::create(&[PLUSPLUS, MINUSMINUS]);
pub const QUALIFIED_ACCESS: TokenSet = TokenSet::create(&[DOT_QUALIFIED_EXPRESSION, SAFE_ACCESS_EXPRESSION]);
pub const VAL_VAR: TokenSet = TokenSet::create(&[VAL_KEYWORD, VAR_KEYWORD]);