2019-01-30 14:02:27 -06:00
|
|
|
use ra_syntax::SmolStr;
|
|
|
|
|
2019-01-31 02:09:19 -06:00
|
|
|
#[derive(Debug)]
|
2019-01-30 14:25:02 -06:00
|
|
|
pub(crate) enum TokenTree {
|
2019-01-30 14:02:27 -06:00
|
|
|
Leaf(Leaf),
|
|
|
|
Subtree(Subtree),
|
|
|
|
}
|
2019-01-30 14:58:52 -06:00
|
|
|
impl_froms!(TokenTree: Leaf, Subtree);
|
2019-01-30 14:02:27 -06:00
|
|
|
|
2019-01-31 02:09:19 -06:00
|
|
|
#[derive(Debug)]
|
2019-01-30 14:25:02 -06:00
|
|
|
pub(crate) enum Leaf {
|
2019-01-30 14:02:27 -06:00
|
|
|
Literal(Literal),
|
|
|
|
Punct(Punct),
|
|
|
|
Ident(Ident),
|
|
|
|
}
|
2019-01-30 14:58:52 -06:00
|
|
|
impl_froms!(Leaf: Literal, Punct, Ident);
|
2019-01-30 14:02:27 -06:00
|
|
|
|
2019-01-31 02:09:19 -06:00
|
|
|
#[derive(Debug)]
|
2019-01-30 14:25:02 -06:00
|
|
|
pub(crate) struct Subtree {
|
2019-01-30 14:58:52 -06:00
|
|
|
pub(crate) delimiter: Delimiter,
|
|
|
|
pub(crate) token_trees: Vec<TokenTree>,
|
2019-01-30 14:02:27 -06:00
|
|
|
}
|
|
|
|
|
2019-01-31 04:32:40 -06:00
|
|
|
#[derive(Clone, Copy, Debug)]
|
2019-01-30 14:25:02 -06:00
|
|
|
pub(crate) enum Delimiter {
|
2019-01-30 14:02:27 -06:00
|
|
|
Parenthesis,
|
|
|
|
Brace,
|
|
|
|
Bracket,
|
|
|
|
None,
|
|
|
|
}
|
|
|
|
|
2019-01-31 02:09:19 -06:00
|
|
|
#[derive(Debug)]
|
2019-01-30 14:25:02 -06:00
|
|
|
pub(crate) struct Literal {
|
2019-01-30 14:58:52 -06:00
|
|
|
pub(crate) text: SmolStr,
|
2019-01-30 14:02:27 -06:00
|
|
|
}
|
|
|
|
|
2019-01-31 02:09:19 -06:00
|
|
|
#[derive(Debug)]
|
2019-01-30 14:25:02 -06:00
|
|
|
pub(crate) struct Punct {
|
2019-01-30 14:58:52 -06:00
|
|
|
pub(crate) char: char,
|
2019-01-30 14:02:27 -06:00
|
|
|
}
|
|
|
|
|
2019-01-31 02:09:19 -06:00
|
|
|
#[derive(Debug)]
|
2019-01-30 14:25:02 -06:00
|
|
|
pub(crate) struct Ident {
|
2019-01-30 14:58:52 -06:00
|
|
|
pub(crate) text: SmolStr,
|
2019-01-30 14:02:27 -06:00
|
|
|
}
|