tip for define macro name after macro_rules!

This commit is contained in:
bohan 2023-11-26 22:05:13 +08:00
parent dd6126ef56
commit 0f14e8ea74
5 changed files with 37 additions and 4 deletions

View file

@ -181,6 +181,8 @@ resolve_method_not_member_of_trait =
method `{$method}` is not a member of trait `{$trait_}`
.label = not a member of trait `{$trait_}`
resolve_missing_macro_rules_name = maybe you have forgotten to define a name for this `macro_rules!`
resolve_module_only =
visibility must resolve to a module

View file

@ -27,10 +27,8 @@
use rustc_span::{BytePos, Span, SyntaxContext};
use thin_vec::{thin_vec, ThinVec};
use crate::errors::{
AddedMacroUse, ChangeImportBinding, ChangeImportBindingSuggestion, ConsiderAddingADerive,
ExplicitUnsafeTraits,
};
use crate::errors::{AddedMacroUse, ChangeImportBinding, ChangeImportBindingSuggestion};
use crate::errors::{ConsiderAddingADerive, ExplicitUnsafeTraits, MaybeMissingMacroRulesName};
use crate::imports::{Import, ImportKind};
use crate::late::{PatternSource, Rib};
use crate::path_names_to_string;
@ -1421,14 +1419,21 @@ pub(crate) fn unresolved_macro_suggestions(
"",
);
if macro_kind == MacroKind::Bang && ident.name == sym::macro_rules {
err.subdiagnostic(MaybeMissingMacroRulesName { span: ident.span });
return;
}
if macro_kind == MacroKind::Derive && (ident.name == sym::Send || ident.name == sym::Sync) {
err.subdiagnostic(ExplicitUnsafeTraits { span: ident.span, ident });
return;
}
if self.macro_names.contains(&ident.normalize_to_macros_2_0()) {
err.subdiagnostic(AddedMacroUse);
return;
}
if ident.name == kw::Default
&& let ModuleKind::Def(DefKind::Enum, def_id, _) = parent_scope.module.kind
{

View file

@ -665,6 +665,13 @@ pub(crate) struct ExplicitUnsafeTraits {
pub(crate) ident: Ident,
}
#[derive(Subdiagnostic)]
#[note(resolve_missing_macro_rules_name)]
pub(crate) struct MaybeMissingMacroRulesName {
#[primary_span]
pub(crate) span: Span,
}
#[derive(Subdiagnostic)]
#[help(resolve_added_macro_use)]
pub(crate) struct AddedMacroUse;

View file

@ -0,0 +1,5 @@
macro_rules! {}
//~^ ERROR cannot find macro `macro_rules` in this scope
//~| NOTE maybe you have forgotten to define a name for this `macro_rules!`
fn main() {}

View file

@ -0,0 +1,14 @@
error: cannot find macro `macro_rules` in this scope
--> $DIR/issue-118295.rs:1:1
|
LL | macro_rules! {}
| ^^^^^^^^^^^
|
note: maybe you have forgotten to define a name for this `macro_rules!`
--> $DIR/issue-118295.rs:1:1
|
LL | macro_rules! {}
| ^^^^^^^^^^^
error: aborting due to 1 previous error