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}