diff --git a/src/error.rs b/src/error.rs index 7eebd243c4..b3a9e334ec 100644 --- a/src/error.rs +++ b/src/error.rs @@ -278,8 +278,19 @@ impl ErrorMessage { None => (Span::call_site(), Span::call_site()), }; - // compile_error!($message) + // std::compile_error!($message) TokenStream::from_iter(vec![ + TokenTree::Ident(Ident::new("std", start)), + TokenTree::Punct({ + let mut punct = Punct::new(':', Spacing::Joint); + punct.set_span(start); + punct + }), + TokenTree::Punct({ + let mut punct = Punct::new(':', Spacing::Alone); + punct.set_span(start); + punct + }), TokenTree::Ident(Ident::new("compile_error", start)), TokenTree::Punct({ let mut punct = Punct::new('!', Spacing::Alone); diff --git a/tests/test_compile_error.rs b/tests/test_compile_error.rs new file mode 100644 index 0000000000..0b89f1adff --- /dev/null +++ b/tests/test_compile_error.rs @@ -0,0 +1,18 @@ +use quote::quote; +use syn::Item; + +#[test] +fn parse_crate_root_custom_inner_attribute() { + let tokens = quote! { + #![feature(custom_inner_attributes)] + #[prelude_import] + use std::prelude::rust_2021::*; + #[macro_use] + extern crate std; + }; + let error = syn::parse2::(tokens).unwrap_err(); + assert_eq!( + error.to_compile_error().to_string(), + r#"std :: compile_error ! { "expected square brackets" }"# + ); +}