openpql_pql_parser/ast/
ident.rs

1use super::{Loc, str};
2
3#[derive(Clone, PartialEq, Eq, derive_more::From, derive_more::Debug)]
4#[debug("{}", self.inner)]
5pub struct Ident<'i> {
6    pub inner: &'i str,
7    pub loc: (Loc, Loc),
8}
9
10#[cfg(test)]
11mod tests {
12    use super::*;
13    use crate::*;
14
15    fn assert_ident(src: &str, expected: &str) {
16        let loc_start = 0;
17        let loc_end = src.len();
18
19        assert_eq!(
20            parse_ident(src),
21            Ok((expected, (loc_start, loc_end)).into())
22        );
23    }
24
25    #[test]
26    fn test_ident() {
27        assert_ident("_", "_");
28
29        for c in "0123456789".chars() {
30            let input = format!("_{c}");
31            assert_ident(&input, &input);
32        }
33
34        let mut c = 'a';
35
36        while c <= 'z' {
37            let lowercase = format!("{c}");
38            assert_ident(&lowercase, &lowercase);
39
40            let uppercase = format!("{}", c.to_uppercase());
41            assert_ident(&uppercase, &uppercase);
42
43            c = (c as u8 + 1) as char;
44        }
45
46        assert_ident("__abc123", "__abc123");
47    }
48
49    #[test]
50    fn test_dbg() {
51        assert_eq!(
52            format!("{:?}", Ident::from(("content", (0, 1)))),
53            "content"
54        );
55    }
56}