use crate::SyntaxKind;
pub fn is_ident_start_byte(b: u8) -> bool {
b.is_ascii_alphabetic() || b == b'_'
}
pub fn is_ident_continue_byte(b: u8) -> bool {
b.is_ascii_alphanumeric() || b == b'_'
}
pub fn scan_ident(bytes: &[u8], mut pos: usize) -> usize {
while pos < bytes.len() && is_ident_continue_byte(bytes[pos]) {
pos += 1;
}
pos
}
pub fn classify_keyword(text: &str) -> SyntaxKind {
use SyntaxKind::{
IDENT, KW_AS, KW_CONST, KW_DONE, KW_ELSE, KW_END, KW_EXTERN, KW_FALSE, KW_FLAGS, KW_FLOW,
KW_FN, KW_IF, KW_IMPORT, KW_MATCH, KW_MODULE, KW_REF, KW_RETURN, KW_STRUCT, KW_TRUE,
KW_USE, KW_VAR,
};
match text {
"flow" => KW_FLOW,
"fn" => KW_FN,
"var" => KW_VAR,
"const" => KW_CONST,
"flags" => KW_FLAGS,
"struct" => KW_STRUCT,
"extern" => KW_EXTERN,
"import" => KW_IMPORT,
"use" => KW_USE,
"module" => KW_MODULE,
"return" => KW_RETURN,
"ref" => KW_REF,
"if" => KW_IF,
"match" => KW_MATCH,
"else" => KW_ELSE,
"as" => KW_AS,
"true" => KW_TRUE,
"false" => KW_FALSE,
"END" => KW_END,
"DONE" => KW_DONE,
_ => IDENT,
}
}