rsjsonnet_lang/parser/
error.rs1use std::collections::BTreeSet;
2
3use crate::span::SpanId;
4use crate::token::{STokenKind, TokenKind};
5
6#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
7pub enum ExpectedToken {
8 EndOfFile,
9 Simple(STokenKind),
10 Ident,
11 Number,
12 String,
13 TextBlock,
14 Expr,
15 BinaryOp,
16}
17
18#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
19pub enum ActualToken {
20 EndOfFile,
21 Simple(STokenKind),
22 OtherOp(String),
23 Ident(String),
24 Number,
25 String,
26 TextBlock,
27}
28
29impl ActualToken {
30 pub(super) fn from_token_kind(kind: &TokenKind<'_, '_>) -> Self {
31 match *kind {
32 TokenKind::EndOfFile => Self::EndOfFile,
33 TokenKind::Whitespace => unreachable!(),
34 TokenKind::Comment => unreachable!(),
35 TokenKind::Simple(kind) => Self::Simple(kind),
36 TokenKind::OtherOp(op) => Self::OtherOp(op.into()),
37 TokenKind::Ident(ident) => Self::Ident(ident.value().into()),
38 TokenKind::Number(_) => Self::Number,
39 TokenKind::String(_) => Self::String,
40 TokenKind::TextBlock(_) => Self::TextBlock,
41 }
42 }
43}
44
45#[derive(Clone, Debug, PartialEq, Eq)]
46pub enum ParseError {
47 Expected {
48 span: SpanId,
49 expected: BTreeSet<ExpectedToken>,
50 instead: ActualToken,
51 },
52}