From 27c53487937ffbd7a67aad4511a5d72f637b9ebb Mon Sep 17 00:00:00 2001 From: Lzu Tao Date: Thu, 11 Jul 2019 21:45:34 +0700 Subject: [PATCH] Rustup `macro expansion and resolution` --- clippy_lints/src/misc.rs | 14 +++++++++----- clippy_lints/src/returns.rs | 2 +- clippy_lints/src/types.rs | 4 ++-- clippy_lints/src/utils/mod.rs | 8 ++++---- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/clippy_lints/src/misc.rs b/clippy_lints/src/misc.rs index d77f71c2ab23..acca50e3df88 100644 --- a/clippy_lints/src/misc.rs +++ b/clippy_lints/src/misc.rs @@ -7,7 +7,7 @@ use rustc::ty; use rustc::{declare_lint_pass, declare_tool_lint}; use rustc_errors::Applicability; use syntax::ast::LitKind; -use syntax::source_map::{ExpnFormat, Span}; +use syntax::source_map::{ExpnKind, Span}; use crate::consts::{constant, Constant}; use crate::utils::sugg::Sugg; @@ -596,10 +596,14 @@ fn is_used(cx: &LateContext<'_, '_>, expr: &Expr) -> bool { /// Tests whether an expression is in a macro expansion (e.g., something /// generated by `#[derive(...)]` or the like). fn in_attributes_expansion(expr: &Expr) -> bool { - expr.span - .ctxt() - .outer_expn_info() - .map_or(false, |info| matches!(info.format, ExpnFormat::MacroAttribute(_))) + use syntax::ext::hygiene::MacroKind; + expr.span.ctxt().outer_expn_info().map_or(false, |info| { + if let ExpnKind::Macro(MacroKind::Attr, _) = info.kind { + true + } else { + false + } + }) } /// Tests whether `res` is a variable defined outside a macro. diff --git a/clippy_lints/src/returns.rs b/clippy_lints/src/returns.rs index f08945b53d51..0f2084e819e3 100644 --- a/clippy_lints/src/returns.rs +++ b/clippy_lints/src/returns.rs @@ -317,7 +317,7 @@ fn attr_is_cfg(attr: &ast::Attribute) -> bool { // get the def site fn get_def(span: Span) -> Option { - span.ctxt().outer_expn_info().and_then(|info| info.def_site) + span.ctxt().outer_expn_info().and_then(|info| Some(info.def_site)) } // is this expr a `()` unit? diff --git a/clippy_lints/src/types.rs b/clippy_lints/src/types.rs index dd578176f237..4f35337292e3 100644 --- a/clippy_lints/src/types.rs +++ b/clippy_lints/src/types.rs @@ -621,9 +621,9 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for UnitArg { } fn is_questionmark_desugar_marked_call(expr: &Expr) -> bool { - use syntax_pos::hygiene::CompilerDesugaringKind; + use syntax_pos::hygiene::DesugaringKind; if let ExprKind::Call(ref callee, _) = expr.node { - callee.span.is_compiler_desugaring(CompilerDesugaringKind::QuestionMark) + callee.span.is_desugaring(DesugaringKind::QuestionMark) } else { false } diff --git a/clippy_lints/src/utils/mod.rs b/clippy_lints/src/utils/mod.rs index 53665506c391..9e45c453ae9f 100644 --- a/clippy_lints/src/utils/mod.rs +++ b/clippy_lints/src/utils/mod.rs @@ -43,7 +43,7 @@ use rustc_errors::Applicability; use smallvec::SmallVec; use syntax::ast::{self, LitKind}; use syntax::attr; -use syntax::ext::hygiene::ExpnFormat; +use syntax::ext::hygiene::ExpnKind; use syntax::source_map::{Span, DUMMY_SP}; use syntax::symbol::{kw, Symbol}; @@ -100,7 +100,7 @@ pub fn in_macro_or_desugar(span: Span) -> bool { /// Returns `true` if this `expn_info` was expanded by any macro. pub fn in_macro(span: Span) -> bool { if let Some(info) = span.ctxt().outer_expn_info() { - if let ExpnFormat::CompilerDesugaring(..) = info.format { + if let ExpnKind::Desugaring(..) = info.kind { false } else { true @@ -686,7 +686,7 @@ pub fn is_adjusted(cx: &LateContext<'_, '_>, e: &Expr) -> bool { /// See also `is_direct_expn_of`. pub fn is_expn_of(mut span: Span, name: &str) -> Option { loop { - let span_name_span = span.ctxt().outer_expn_info().map(|ei| (ei.format.name(), ei.call_site)); + let span_name_span = span.ctxt().outer_expn_info().map(|ei| (ei.kind.descr(), ei.call_site)); match span_name_span { Some((mac_name, new_span)) if mac_name.as_str() == name => return Some(new_span), @@ -706,7 +706,7 @@ pub fn is_expn_of(mut span: Span, name: &str) -> Option { /// `bar!` by /// `is_direct_expn_of`. pub fn is_direct_expn_of(span: Span, name: &str) -> Option { - let span_name_span = span.ctxt().outer_expn_info().map(|ei| (ei.format.name(), ei.call_site)); + let span_name_span = span.ctxt().outer_expn_info().map(|ei| (ei.kind.descr(), ei.call_site)); match span_name_span { Some((mac_name, new_span)) if mac_name.as_str() == name => Some(new_span),