Turn alloc's force_expr macro into a regular macro_rules!{}.

Otherwise rust-analyzer doesn't understand vec![].
This commit is contained in:
Mara Bos 2021-01-21 17:12:14 +01:00
parent 339e19697a
commit 8f28a3269e
2 changed files with 13 additions and 10 deletions

View file

@ -189,11 +189,4 @@ pub mod vec;
#[unstable(feature = "liballoc_internals", issue = "none", reason = "implementation detail")] #[unstable(feature = "liballoc_internals", issue = "none", reason = "implementation detail")]
pub mod __export { pub mod __export {
pub use core::format_args; pub use core::format_args;
/// Force AST node to an expression to improve diagnostics in pattern position.
#[rustc_macro_transparency = "semitransparent"]
#[unstable(feature = "liballoc_internals", issue = "none", reason = "implementation detail")]
pub macro force_expr($e:expr) {
$e
}
} }

View file

@ -40,13 +40,13 @@
#[allow_internal_unstable(box_syntax, liballoc_internals)] #[allow_internal_unstable(box_syntax, liballoc_internals)]
macro_rules! vec { macro_rules! vec {
() => ( () => (
$crate::__export::force_expr!($crate::vec::Vec::new()) $crate::force_expr!($crate::vec::Vec::new())
); );
($elem:expr; $n:expr) => ( ($elem:expr; $n:expr) => (
$crate::__export::force_expr!($crate::vec::from_elem($elem, $n)) $crate::force_expr!($crate::vec::from_elem($elem, $n))
); );
($($x:expr),+ $(,)?) => ( ($($x:expr),+ $(,)?) => (
$crate::__export::force_expr!(<[_]>::into_vec(box [$($x),+])) $crate::force_expr!(<[_]>::into_vec(box [$($x),+]))
); );
} }
@ -111,3 +111,13 @@ macro_rules! format {
res res
}} }}
} }
/// Force AST node to an expression to improve diagnostics in pattern position.
#[doc(hidden)]
#[macro_export]
#[unstable(feature = "liballoc_internals", issue = "none", reason = "implementation detail")]
macro_rules! force_expr {
($e:expr) => {
$e
};
}