oak_json/kind/
mod.rs

1use oak_core::SyntaxKind;
2
3/// 统一JSON 语法种类(包含节点与词法
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, serde::Serialize)]
5pub enum JsonSyntaxKind {
6    // 节点种类
7    Root,
8    Value,
9    Object,
10    Array,
11    String,
12    Number,
13    Boolean,
14    Null,
15    ObjectEntry,
16    ArrayElement,
17    ErrorNode,
18
19    // 词法种类
20    LeftBrace,    // {
21    RightBrace,   // }
22    LeftBracket,  // [
23    RightBracket, // ]
24    Comma,        // ,
25    Colon,        // :
26    StringLiteral,
27    NumberLiteral,
28    BooleanLiteral,
29    NullLiteral,
30    BareKey, // For JSON5
31    Whitespace,
32    Comment,
33    Eof,
34    Error,
35}
36
37impl SyntaxKind for JsonSyntaxKind {
38    fn is_trivia(&self) -> bool {
39        matches!(self, JsonSyntaxKind::Whitespace | JsonSyntaxKind::Comment)
40    }
41
42    fn is_comment(&self) -> bool {
43        matches!(self, JsonSyntaxKind::Comment)
44    }
45
46    fn is_whitespace(&self) -> bool {
47        matches!(self, JsonSyntaxKind::Whitespace)
48    }
49
50    fn is_token_type(&self) -> bool {
51        matches!(
52            self,
53            JsonSyntaxKind::LeftBrace
54                | JsonSyntaxKind::RightBrace
55                | JsonSyntaxKind::LeftBracket
56                | JsonSyntaxKind::RightBracket
57                | JsonSyntaxKind::Comma
58                | JsonSyntaxKind::Colon
59                | JsonSyntaxKind::StringLiteral
60                | JsonSyntaxKind::NumberLiteral
61                | JsonSyntaxKind::BooleanLiteral
62                | JsonSyntaxKind::NullLiteral
63                | JsonSyntaxKind::BareKey
64                | JsonSyntaxKind::Whitespace
65                | JsonSyntaxKind::Comment
66                | JsonSyntaxKind::Eof
67                | JsonSyntaxKind::Error
68        )
69    }
70
71    fn is_element_type(&self) -> bool {
72        matches!(
73            self,
74            JsonSyntaxKind::Root
75                | JsonSyntaxKind::Value
76                | JsonSyntaxKind::Object
77                | JsonSyntaxKind::Array
78                | JsonSyntaxKind::String
79                | JsonSyntaxKind::Number
80                | JsonSyntaxKind::Boolean
81                | JsonSyntaxKind::Null
82                | JsonSyntaxKind::ObjectEntry
83                | JsonSyntaxKind::ArrayElement
84                | JsonSyntaxKind::ErrorNode
85        )
86    }
87}