mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-28 11:20:54 +00:00
fix: Fix closure return inlayhints using macro ranges
This commit is contained in:
parent
37acea8052
commit
c760360abf
@ -35,8 +35,9 @@ pub(super) fn hints(
|
|||||||
|
|
||||||
let param_list = closure.param_list()?;
|
let param_list = closure.param_list()?;
|
||||||
|
|
||||||
let closure = sema.descend_node_into_attributes(closure).pop()?;
|
let resolve_parent = Some(closure.syntax().text_range());
|
||||||
let ty = sema.type_of_expr(&ast::Expr::ClosureExpr(closure.clone()))?.adjusted();
|
let descended_closure = sema.descend_node_into_attributes(closure.clone()).pop()?;
|
||||||
|
let ty = sema.type_of_expr(&ast::Expr::ClosureExpr(descended_closure.clone()))?.adjusted();
|
||||||
let callable = ty.as_callable(sema.db)?;
|
let callable = ty.as_callable(sema.db)?;
|
||||||
let ty = callable.return_type();
|
let ty = callable.return_type();
|
||||||
if arrow.is_none() && ty.is_unit() {
|
if arrow.is_none() && ty.is_unit() {
|
||||||
@ -52,7 +53,7 @@ pub(super) fn hints(
|
|||||||
ty_to_text_edit(
|
ty_to_text_edit(
|
||||||
sema,
|
sema,
|
||||||
config,
|
config,
|
||||||
closure.syntax(),
|
descended_closure.syntax(),
|
||||||
&ty,
|
&ty,
|
||||||
arrow
|
arrow
|
||||||
.as_ref()
|
.as_ref()
|
||||||
@ -70,7 +71,7 @@ pub(super) fn hints(
|
|||||||
let mut builder = TextEdit::builder();
|
let mut builder = TextEdit::builder();
|
||||||
let insert_pos = param_list.syntax().text_range().end();
|
let insert_pos = param_list.syntax().text_range().end();
|
||||||
|
|
||||||
let rendered = match sema.scope(closure.syntax()).and_then(|scope| {
|
let rendered = match sema.scope(descended_closure.syntax()).and_then(|scope| {
|
||||||
ty.display_source_code(scope.db, scope.module().into(), false).ok()
|
ty.display_source_code(scope.db, scope.module().into(), false).ok()
|
||||||
}) {
|
}) {
|
||||||
Some(rendered) => rendered,
|
Some(rendered) => rendered,
|
||||||
@ -95,7 +96,7 @@ pub(super) fn hints(
|
|||||||
position: InlayHintPosition::After,
|
position: InlayHintPosition::After,
|
||||||
pad_left: false,
|
pad_left: false,
|
||||||
pad_right: false,
|
pad_right: false,
|
||||||
resolve_parent: Some(closure.syntax().text_range()),
|
resolve_parent,
|
||||||
});
|
});
|
||||||
Some(())
|
Some(())
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user