Auto merge of #97903 - est31:unused_macro_rules_compile_error, r=petrochenkov
Never regard macro rules with compile_error! invocations as unused The very point of compile_error! is to never be reached, and one of the use cases of the macro, currently also listed as examples in the documentation of compile_error, is to create nicer errors for wrong macro invocations. Thus, we should never warn about unused macro arms that contain invocations of compile_error. See also https://github.com/rust-lang/rust/pull/96150#issuecomment-1126599107 and the discussion after that. Furthermore, the PR also contains two commits to silence `unused_macro_rules` when a macro has an invalid rule, and to add a test that `unused_macros` does not behave badly in the same situation. r? `@petrochenkov` as I've talked to them about this
This commit is contained in:
commit
fa68e73e99
10 changed files with 158 additions and 10 deletions
|
@ -1220,12 +1220,12 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
|
|||
ident: Ident,
|
||||
def_id: LocalDefId,
|
||||
node_id: NodeId,
|
||||
rule_spans: &[Span],
|
||||
rule_spans: &[(usize, Span)],
|
||||
) {
|
||||
if !ident.as_str().starts_with('_') {
|
||||
self.r.unused_macros.insert(def_id, (node_id, ident));
|
||||
for (rule_i, rule_span) in rule_spans.iter().enumerate() {
|
||||
self.r.unused_macro_rules.insert((def_id, rule_i), (ident, *rule_span));
|
||||
for (rule_i, rule_span) in rule_spans.iter() {
|
||||
self.r.unused_macro_rules.insert((def_id, *rule_i), (ident, *rule_span));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -870,7 +870,7 @@ impl<'a> Resolver<'a> {
|
|||
&mut self,
|
||||
item: &ast::Item,
|
||||
edition: Edition,
|
||||
) -> (SyntaxExtension, Vec<Span>) {
|
||||
) -> (SyntaxExtension, Vec<(usize, Span)>) {
|
||||
let (mut result, mut rule_spans) = compile_declarative_macro(
|
||||
&self.session,
|
||||
self.session.features_untracked(),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue