Skip to content

Commit a1e1960

Browse files
committed
Move desugar_await to clippy_utils
1 parent c2922d1 commit a1e1960

File tree

2 files changed

+20
-24
lines changed

2 files changed

+20
-24
lines changed

clippy_lints/src/redundant_async_block.rs

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
1-
use std::ops::ControlFlow;
2-
31
use clippy_utils::diagnostics::span_lint_and_sugg;
4-
use clippy_utils::peel_blocks;
52
use clippy_utils::source::{snippet, walk_span_to_context};
63
use clippy_utils::ty::implements_trait;
7-
use clippy_utils::visitors::for_each_expr_without_closures;
4+
use clippy_utils::{desugar_await, peel_blocks};
85
use rustc_errors::Applicability;
9-
use rustc_hir::{
10-
Closure, ClosureKind, CoroutineDesugaring, CoroutineKind, CoroutineSource, Expr, ExprKind, MatchSource,
11-
};
6+
use rustc_hir::{Closure, ClosureKind, CoroutineDesugaring, CoroutineKind, CoroutineSource, Expr, ExprKind};
127
use rustc_lint::{LateContext, LateLintPass};
138
use rustc_middle::ty::UpvarCapture;
149
use rustc_session::declare_lint_pass;
@@ -99,20 +94,3 @@ fn desugar_async_block<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) -> Op
9994
None
10095
}
10196
}
102-
103-
/// If `expr` is a desugared `.await`, return the original expression if it does not come from a
104-
/// macro expansion.
105-
fn desugar_await<'tcx>(expr: &'tcx Expr<'_>) -> Option<&'tcx Expr<'tcx>> {
106-
if let ExprKind::Match(match_value, _, MatchSource::AwaitDesugar) = expr.kind
107-
&& let ExprKind::Call(_, [into_future_arg]) = match_value.kind
108-
&& let ctxt = expr.span.ctxt()
109-
&& for_each_expr_without_closures(into_future_arg, |e| {
110-
walk_span_to_context(e.span, ctxt).map_or(ControlFlow::Break(()), |_| ControlFlow::Continue(()))
111-
})
112-
.is_none()
113-
{
114-
Some(into_future_arg)
115-
} else {
116-
None
117-
}
118-
}

clippy_utils/src/lib.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ use rustc_span::hygiene::{ExpnKind, MacroKind};
126126
use rustc_span::source_map::SourceMap;
127127
use rustc_span::symbol::{Ident, Symbol, kw};
128128
use rustc_span::{InnerSpan, Span, sym};
129+
use source::walk_span_to_context;
129130
use visitors::{Visitable, for_each_unconsumed_temporary};
130131

131132
use crate::consts::{ConstEvalCtxt, Constant, mir_to_const};
@@ -3718,3 +3719,20 @@ pub fn peel_hir_ty_options<'tcx>(cx: &LateContext<'tcx>, mut hir_ty: &'tcx hir::
37183719
}
37193720
hir_ty
37203721
}
3722+
3723+
/// If `expr` is a desugared `.await`, return the original expression if it does not come from a
3724+
/// macro expansion.
3725+
pub fn desugar_await<'tcx>(expr: &'tcx Expr<'_>) -> Option<&'tcx Expr<'tcx>> {
3726+
if let ExprKind::Match(match_value, _, MatchSource::AwaitDesugar) = expr.kind
3727+
&& let ExprKind::Call(_, [into_future_arg]) = match_value.kind
3728+
&& let ctxt = expr.span.ctxt()
3729+
&& for_each_expr_without_closures(into_future_arg, |e| {
3730+
walk_span_to_context(e.span, ctxt).map_or(ControlFlow::Break(()), |_| ControlFlow::Continue(()))
3731+
})
3732+
.is_none()
3733+
{
3734+
Some(into_future_arg)
3735+
} else {
3736+
None
3737+
}
3738+
}

0 commit comments

Comments
 (0)