use super::*;
impl Lexer {
pub(super) fn try_lex_ts_keyword(&mut self) -> Option<SyntaxKind> {
let remaining = self.remaining();
let keywords = [
("instanceof", SyntaxKind::InstanceofKw),
("implements", SyntaxKind::ImplementsKw),
("undefined", SyntaxKind::UndefinedKw),
("protected", SyntaxKind::ProtectedKw),
("interface", SyntaxKind::InterfaceKw),
("satisfies", SyntaxKind::SatisfiesKw),
("debugger", SyntaxKind::DebuggerKw),
("continue", SyntaxKind::ContinueKw),
("function", SyntaxKind::FunctionKw),
("abstract", SyntaxKind::AbstractKw),
("readonly", SyntaxKind::ReadonlyKw),
("private", SyntaxKind::PrivateKw),
("declare", SyntaxKind::DeclareKw),
("extends", SyntaxKind::ExtendsKw),
("finally", SyntaxKind::FinallyKw),
("default", SyntaxKind::DefaultKw),
("public", SyntaxKind::PublicKw),
("static", SyntaxKind::StaticKw),
("return", SyntaxKind::ReturnKw),
("typeof", SyntaxKind::TypeofKw), ("export", SyntaxKind::ExportKw),
("import", SyntaxKind::ImportKw),
("switch", SyntaxKind::SwitchKw),
("delete", SyntaxKind::DeleteKw),
("keyof", SyntaxKind::KeyofKw),
("infer", SyntaxKind::InferKw),
("const", SyntaxKind::ConstKw),
("async", SyntaxKind::AsyncKw),
("await", SyntaxKind::AwaitKw),
("yield", SyntaxKind::YieldKw),
("throw", SyntaxKind::ThrowKw),
("catch", SyntaxKind::CatchKw),
("class", SyntaxKind::ClassKw),
("while", SyntaxKind::WhileKw),
("break", SyntaxKind::BreakKw),
("super", SyntaxKind::SuperKw),
("false", SyntaxKind::FalseKw),
("enum", SyntaxKind::EnumKw),
("from", SyntaxKind::FromKw),
("type", SyntaxKind::TypeKw),
("this", SyntaxKind::ThisKw),
("null", SyntaxKind::NullKw),
("true", SyntaxKind::TrueKw),
("void", SyntaxKind::VoidKw),
("with", SyntaxKind::WithKw),
("else", SyntaxKind::ElseKw),
("let", SyntaxKind::LetKw),
("var", SyntaxKind::VarKw),
("new", SyntaxKind::NewKw),
("try", SyntaxKind::TryKw),
("for", SyntaxKind::ForKw),
("get", SyntaxKind::GetKw),
("set", SyntaxKind::SetKw),
("as", SyntaxKind::AsKw),
("is", SyntaxKind::IsKw),
("of", SyntaxKind::OfKw),
("if", SyntaxKind::IfKw),
("in", SyntaxKind::InKw),
("do", SyntaxKind::DoKw),
];
for (kw, kind) in keywords {
if remaining.starts_with(kw) {
let next_char = remaining.chars().nth(kw.len());
if next_char
.map(|c| !c.is_alphanumeric() && c != '_')
.unwrap_or(true)
{
self.advance(kw.len());
return Some(kind);
}
}
}
None
}
}