dbml_language_server/analysis/
token.rs

1// src/analysis/token.rs
2use std::ops::Range;
3
4pub type Span = Range<usize>;
5
6#[derive(Debug, Clone, PartialEq, Eq, Hash)]
7pub enum Token {
8    // Keywords
9    Table,
10    Ref,
11    Enum,
12    Project,
13    Note,
14    Indexes,
15    As,
16
17    // Column Settings
18    Pk,
19    NotNull,
20    Null,
21    Unique,
22    Increment,
23    Default,
24
25    // Referential Actions
26    Delete,
27    Update,
28    Cascade,
29    Restrict,
30    NoAction,
31    SetNull,
32    SetDefault,
33
34    // Operators
35    Lt,    // <
36    Gt,    // >
37    Minus, // -
38    LtGt,  // <>
39    Colon, // :
40    Dot,   // .
41
42    // Delimiters
43    LBrace,   // {
44    RBrace,   // }
45    LBracket, // [
46    RBracket, // ]
47    LParen,   // (
48    RParen,   // )
49    Comma,    // ,
50
51    // Literals and Identifiers
52    Identifier(String),
53    StringLiteral(String),
54    NumericLiteral(String),
55    BoolLiteral(bool),
56
57    // Special
58    #[allow(dead_code)]
59    Eof,
60}
61
62impl Token {
63    #[allow(dead_code)]
64    pub fn is_keyword(&self) -> bool {
65        matches!(
66            self,
67            Token::Table
68                | Token::Ref
69                | Token::Enum
70                | Token::Project
71                | Token::Note
72                | Token::Indexes
73                | Token::As
74                | Token::Pk
75                | Token::NotNull
76                | Token::Null
77                | Token::Unique
78                | Token::Increment
79                | Token::Default
80                | Token::Delete
81                | Token::Update
82                | Token::Cascade
83                | Token::Restrict
84                | Token::NoAction
85                | Token::SetNull
86                | Token::SetDefault
87        )
88    }
89}
90
91#[derive(Debug, Clone)]
92#[allow(dead_code)]
93pub struct SpannedToken {
94    pub token: Token,
95    pub span: Span,
96}