-use crate::utils;
+use clippy_utils::diagnostics::span_lint_and_then;
+use clippy_utils::return_ty;
use rustc_hir::intravisit::FnKind;
use rustc_hir::{Body, FnDecl, HirId};
use rustc_infer::infer::TyCtxtInferExt;
use rustc_lint::{LateContext, LateLintPass};
use rustc_middle::ty::subst::Subst;
-use rustc_middle::ty::{Opaque, PredicateAtom::Trait};
+use rustc_middle::ty::{Opaque, PredicateKind::Trait};
use rustc_session::{declare_lint_pass, declare_tool_lint};
use rustc_span::{sym, Span};
use rustc_trait_selection::traits::error_reporting::suggestions::InferCtxtExt;
_: Span,
hir_id: HirId,
) {
- if let FnKind::Closure(_) = kind {
+ if let FnKind::Closure = kind {
return;
}
- let ret_ty = utils::return_ty(cx, hir_id);
+ let ret_ty = return_ty(cx, hir_id);
if let Opaque(id, subst) = *ret_ty.kind() {
let preds = cx.tcx.explicit_item_bounds(id);
let mut is_future = false;
fulfillment_cx.select_all_or_error(&infcx)
});
if let Err(send_errors) = send_result {
- utils::span_lint_and_then(
+ span_lint_and_then(
cx,
FUTURE_NOT_SEND,
span,
|db| {
cx.tcx.infer_ctxt().enter(|infcx| {
for FulfillmentError { obligation, .. } in send_errors {
- infcx.maybe_note_obligation_cause_for_async_await(
- db,
- &obligation,
- );
- if let Trait(trait_pred, _) =
- obligation.predicate.skip_binders()
- {
+ infcx.maybe_note_obligation_cause_for_async_await(db, &obligation);
+ if let Trait(trait_pred, _) = obligation.predicate.kind().skip_binder() {
db.note(&format!(
"`{}` doesn't implement `{}`",
trait_pred.self_ty(),