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    // Operators
26    Lt,    // <
27    Gt,    // >
28    Minus, // -
29    LtGt,  // <>
30    Colon, // :
31    Dot,   // .
32
33    // Delimiters
34    LBrace,   // {
35    RBrace,   // }
36    LBracket, // [
37    RBracket, // ]
38    LParen,   // (
39    RParen,   // )
40    Comma,    // ,
41
42    // Literals and Identifiers
43    Identifier(String),
44    StringLiteral(String),
45    NumericLiteral(String),
46    BoolLiteral(bool),
47
48    // Special
49    #[allow(dead_code)]
50    Eof,
51}
52
53impl Token {
54    #[allow(dead_code)]
55    pub fn is_keyword(&self) -> bool {
56        matches!(
57            self,
58            Token::Table
59                | Token::Ref
60                | Token::Enum
61                | Token::Project
62                | Token::Note
63                | Token::Indexes
64                | Token::As
65                | Token::Pk
66                | Token::NotNull
67                | Token::Null
68                | Token::Unique
69                | Token::Increment
70                | Token::Default
71        )
72    }
73}
74
75#[derive(Debug, Clone)]
76#[allow(dead_code)]
77pub struct SpannedToken {
78    pub token: Token,
79    pub span: Span,
80}