oak_jasm/kind/
mod.rs

1use crate::syntax::JasmSyntaxKind;
2use core::range::Range;
3use serde::{Deserialize, Serialize};
4
5#[derive(Clone, Debug, Serialize, Deserialize)]
6pub struct JasmToken {
7    pub kind: JasmSyntaxKind,
8    #[serde(with = "oak_core::serde_range")]
9    pub span: Range<usize>,
10    pub text: String,
11}
12
13impl JasmToken {
14    pub fn new(kind: JasmSyntaxKind, span: Range<usize>, text: String) -> Self {
15        Self { kind, span, text }
16    }
17
18    pub fn len(&self) -> usize {
19        self.text.len()
20    }
21    pub fn is_empty(&self) -> bool {
22        self.text.is_empty()
23    }
24
25    pub fn is_identifier(&self) -> bool {
26        matches!(self.kind, JasmSyntaxKind::IdentifierToken)
27    }
28    pub fn is_keyword(&self) -> bool {
29        matches!(
30            self.kind,
31            JasmSyntaxKind::ClassKw
32                | JasmSyntaxKind::VersionKw
33                | JasmSyntaxKind::MethodKw
34                | JasmSyntaxKind::FieldKw
35                | JasmSyntaxKind::StringKw
36                | JasmSyntaxKind::SourceFileKw
37                | JasmSyntaxKind::StackKw
38                | JasmSyntaxKind::LocalsKw
39                | JasmSyntaxKind::EndKw
40                | JasmSyntaxKind::CompiledKw
41                | JasmSyntaxKind::FromKw
42                | JasmSyntaxKind::InnerClassKw
43                | JasmSyntaxKind::NestMembersKw
44                | JasmSyntaxKind::BootstrapMethodKw
45        )
46    }
47}