Add use token
This commit is contained in:
parent
adfd3aa5d4
commit
1e7636903e
@ -17,6 +17,7 @@ pub enum Token<'src> {
|
|||||||
Identifier(&'src str),
|
Identifier(&'src str),
|
||||||
Symbol(Symbol),
|
Symbol(Symbol),
|
||||||
Keyword(Keyword),
|
Keyword(Keyword),
|
||||||
|
Use(&'src str),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'src> Display for Token<'src> {
|
impl<'src> Display for Token<'src> {
|
||||||
@ -30,6 +31,7 @@ impl<'src> Display for Token<'src> {
|
|||||||
Token::Identifier(string) => write!(f, "{string}"),
|
Token::Identifier(string) => write!(f, "{string}"),
|
||||||
Token::Symbol(control) => write!(f, "{control}"),
|
Token::Symbol(control) => write!(f, "{control}"),
|
||||||
Token::Keyword(keyword) => write!(f, "{keyword}"),
|
Token::Keyword(keyword) => write!(f, "{keyword}"),
|
||||||
|
Token::Use(path) => write!(f, "use {path}"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -316,6 +318,13 @@ pub fn lexer<'src>() -> impl Parser<
|
|||||||
|
|
||||||
let identifier = text::ident().map(|text: &str| Token::Identifier(text));
|
let identifier = text::ident().map(|text: &str| Token::Identifier(text));
|
||||||
|
|
||||||
|
let r#use = just("use ").ignore_then(
|
||||||
|
none_of('\n')
|
||||||
|
.repeated()
|
||||||
|
.to_slice()
|
||||||
|
.map(|text: &str| Token::Use(text)),
|
||||||
|
);
|
||||||
|
|
||||||
choice((
|
choice((
|
||||||
line_comment,
|
line_comment,
|
||||||
multi_line_comment,
|
multi_line_comment,
|
||||||
@ -325,6 +334,7 @@ pub fn lexer<'src>() -> impl Parser<
|
|||||||
string,
|
string,
|
||||||
keyword,
|
keyword,
|
||||||
symbol,
|
symbol,
|
||||||
|
r#use,
|
||||||
identifier,
|
identifier,
|
||||||
))
|
))
|
||||||
.map_with(|token: Token, state| (token, state.span()))
|
.map_with(|token: Token, state| (token, state.span()))
|
||||||
@ -337,6 +347,19 @@ pub fn lexer<'src>() -> impl Parser<
|
|||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn r#use() {
|
||||||
|
assert_eq!(
|
||||||
|
lex("use std/io.ds").unwrap(),
|
||||||
|
vec![(Token::Use("std/io.ds"), (0..13).into())]
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
lex("use https://example.com/std.ds").unwrap(),
|
||||||
|
vec![(Token::Use("https://example.com/std.ds"), (0..30).into())]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn line_comment() {
|
fn line_comment() {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
Loading…
Reference in New Issue
Block a user