Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/mbe/src/lib.rs')
| -rw-r--r-- | crates/mbe/src/lib.rs | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/crates/mbe/src/lib.rs b/crates/mbe/src/lib.rs index 8470ea0aaf..61e032e0af 100644 --- a/crates/mbe/src/lib.rs +++ b/crates/mbe/src/lib.rs @@ -2,6 +2,9 @@ //! `macro_rules` macros. It uses `TokenTree` (from `tt` package) as the //! interface, although it contains some code to bridge `SyntaxNode`s and //! `TokenTree`s as well! +//! +//! The tes for this functionality live in another crate: +//! `hir_def::macro_expansion_tests::mbe`. mod parser; mod expander; @@ -27,7 +30,7 @@ use crate::{ pub use ::parser::ParserEntryPoint; pub use tt::{Delimiter, DelimiterKind, Punct}; -#[derive(Debug, PartialEq, Eq)] +#[derive(Debug, PartialEq, Eq, Clone)] pub enum ParseError { UnexpectedToken(String), Expected(String), @@ -35,6 +38,17 @@ pub enum ParseError { RepetitionEmptyTokenTree, } +impl fmt::Display for ParseError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + ParseError::UnexpectedToken(it) => f.write_str(it), + ParseError::Expected(it) => f.write_str(it), + ParseError::InvalidRepeat => f.write_str("invalid repeat"), + ParseError::RepetitionEmptyTokenTree => f.write_str("empty token tree in repetition"), + } + } +} + #[derive(Debug, PartialEq, Eq, Clone)] pub enum ExpandError { NoMatchingRule, |