1 use crate::{Diagnostic, DiagnosticsContext};
3 // Diagnostic: macro-error
5 // This diagnostic is shown for macro expansion errors.
6 pub(crate) fn macro_error(ctx: &DiagnosticsContext<'_>, d: &hir::MacroError) -> Diagnostic {
10 ctx.sema.diagnostics_display_range(d.node.clone()).range,
18 tests::{check_diagnostics, check_diagnostics_with_config},
23 fn builtin_macro_fails_expansion() {
26 #[rustc_builtin_macro]
27 macro_rules! include { () => {} }
29 #[rustc_builtin_macro]
30 macro_rules! compile_error { () => {} }
32 include!("doesntexist");
33 //^^^^^^^^^^^^^^^^^^^^^^^^ error: failed to load file `doesntexist`
35 compile_error!("compile_error macro works");
36 //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: compile_error macro works
42 fn include_macro_should_allow_empty_content() {
43 let mut config = DiagnosticsConfig::default();
45 // FIXME: This is a false-positive, the file is actually linked in via
47 config.disabled.insert("unlinked-file".to_string());
49 check_diagnostics_with_config(
53 #[rustc_builtin_macro]
54 macro_rules! include { () => {} }
56 include!("foo/bar.rs");
64 fn good_out_dir_diagnostic() {
67 #[rustc_builtin_macro]
68 macro_rules! include { () => {} }
69 #[rustc_builtin_macro]
70 macro_rules! env { () => {} }
71 #[rustc_builtin_macro]
72 macro_rules! concat { () => {} }
74 include!(concat!(env!("OUT_DIR"), "/out.rs"));
75 //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: `OUT_DIR` not set, enable "run build scripts" to fix
81 fn register_attr_and_tool() {
82 cov_mark::check!(register_attr);
83 cov_mark::check!(register_tool);
86 #![register_tool(tool)]
87 #![register_attr(attr)]
94 // NB: we don't currently emit diagnostics here
98 fn macro_diag_builtin() {
101 #[rustc_builtin_macro]
104 #[rustc_builtin_macro]
105 macro_rules! include {}
107 #[rustc_builtin_macro]
108 macro_rules! compile_error {}
110 #[rustc_builtin_macro]
111 macro_rules! format_args { () => {} }
114 // Test a handful of built-in (eager) macros:
117 //^^^^^^^^^^^^^^^^^ error: could not convert tokens
118 include!("does not exist");
119 //^^^^^^^^^^^^^^^^^^^^^^^^^^ error: failed to load file `does not exist`
122 //^^^^^^^^^^^^^ error: could not convert tokens
125 //^^^^^^^^^^^^^^^ error: `OUT_DIR` not set, enable "run build scripts" to fix
127 compile_error!("compile_error works");
128 //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: compile_error works
133 //^^^^^^^^^^^^^^ error: no rule matches input tokens
140 fn macro_rules_diag() {
150 //^^^^^^ error: leftover tokens
156 fn dollar_crate_in_builtin_macro() {
160 #[rustc_builtin_macro]
161 macro_rules! format_args {}
164 macro_rules! arg { () => {} }
169 $crate::format_args!( "", $crate::arg!(1) )
175 } //^^^^^^^^ error: leftover tokens