surrealdb_core/syn/lexer/compound/
ident.rs1use crate::syn::{
2 error::{bail, SyntaxError},
3 lexer::{unicode::is_identifier_continue, Lexer},
4 token::{Token, TokenKind},
5};
6use std::mem;
7
8pub fn flexible_ident(lexer: &mut Lexer, start: Token) -> Result<String, SyntaxError> {
9 match start.kind {
10 TokenKind::Digits => {
11 let mut res = lexer.span_str(start.span).to_owned();
12 while let Some(x) = lexer.reader.peek() {
13 if is_identifier_continue(x) {
14 lexer.reader.next();
15 res.push(x as char);
16 } else {
17 break;
18 }
19 }
20 Ok(res)
21 }
22 TokenKind::Identifier => Ok(mem::take(&mut lexer.string).unwrap()),
23 x => bail!("Unexpected token {x}, expected flexible identifier", @start.span),
24 }
25}