use errors::{DiagnosticBuilder, DiagnosticId};
use std::{hash, ptr};
use syntax::ast;
-use syntax::source_map::{MultiSpan, ExpnFormat};
+use syntax::source_map::{MultiSpan, ExpnFormat, CompilerDesugaringKind};
use syntax::early_buffered_lints::BufferedEarlyLintId;
use syntax::edition::Edition;
use syntax::symbol::{Symbol, sym};
};
match info.format {
- ExpnFormat::MacroAttribute(..) => return true, // definitely a plugin
- ExpnFormat::CompilerDesugaring(_) => return true, // well, it's "external"
- ExpnFormat::MacroBang(..) => {} // check below
- }
-
- let def_site = match info.def_site {
- Some(span) => span,
- // no span for the def_site means it's an external macro
- None => return true,
- };
+ ExpnFormat::MacroAttribute(..) => true, // definitely a plugin
+ ExpnFormat::CompilerDesugaring(CompilerDesugaringKind::ForLoop) => false,
+ ExpnFormat::CompilerDesugaring(_) => true, // well, it's "external"
+ ExpnFormat::MacroBang(..) => {
+ let def_site = match info.def_site {
+ Some(span) => span,
+ // no span for the def_site means it's an external macro
+ None => return true,
+ };
- match sess.source_map().span_to_snippet(def_site) {
- Ok(code) => !code.starts_with("macro_rules"),
- // no snippet = external macro or compiler-builtin expansion
- Err(_) => true,
+ match sess.source_map().span_to_snippet(def_site) {
+ Ok(code) => !code.starts_with("macro_rules"),
+ // no snippet = external macro or compiler-builtin expansion
+ Err(_) => true,
+ }
+ }
}
}