surrealdb_core/syn/lexer/compound/
ident.rs

1use 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}