Only Highlight Exit Points on async Token

This ensures that when being on an `await` token, it still only
highlights the yield points and not the exit points.
This commit is contained in:
Christopher Serr 2024-10-08 23:30:05 +02:00
parent e1961b1078
commit 68c263bdf6

View file

@ -513,16 +513,23 @@ pub(crate) fn highlight_yield_points(
match anc { match anc {
ast::Fn(fn_) => hl(sema, fn_.async_token(), fn_.body().map(ast::Expr::BlockExpr)), ast::Fn(fn_) => hl(sema, fn_.async_token(), fn_.body().map(ast::Expr::BlockExpr)),
ast::BlockExpr(block_expr) => { ast::BlockExpr(block_expr) => {
if block_expr.async_token().is_none() { let Some(async_token) = block_expr.async_token() else {
continue; continue;
} };
// Async blocks act similar to closures. So we want to // Async blocks act similar to closures. So we want to
// highlight their exit points too. // highlight their exit points too, but only if we are on
let exit_points = hl_exit_points(sema, block_expr.async_token(), block_expr.clone().into()); // the async token.
merge_map(&mut res, exit_points); if async_token == token {
let exit_points = hl_exit_points(
sema,
Some(async_token.clone()),
block_expr.clone().into(),
);
merge_map(&mut res, exit_points);
}
hl(sema, block_expr.async_token(), Some(block_expr.into())) hl(sema, Some(async_token), Some(block_expr.into()))
}, },
ast::ClosureExpr(closure) => hl(sema, closure.async_token(), closure.body()), ast::ClosureExpr(closure) => hl(sema, closure.async_token(), closure.body()),
_ => continue, _ => continue,
@ -949,7 +956,6 @@ async fn foo() {
(async { (async {
// ^^^^^ // ^^^^^
(async { 0.await }).await$0 (async { 0.await }).await$0
// ^^^^^^^^^^^^^^^^^^^^^^^^^
// ^^^^^ // ^^^^^
}).await; }).await;
} }