Auto merge of #13784 - Veykril:bm-hints, r=Veykril

Deduplicate inserted parentheses in binding mode hints
This commit is contained in:
bors 2022-12-16 20:51:20 +00:00
commit 19c2ede549

View File

@ -850,7 +850,18 @@ fn binding_mode_hints(
return None; return None;
} }
let range = pat.syntax().text_range(); let outer_paren_pat = pat
.syntax()
.ancestors()
.skip(1)
.map_while(ast::Pat::cast)
.map_while(|pat| match pat {
ast::Pat::ParenPat(pat) => Some(pat),
_ => None,
})
.last();
let range =
outer_paren_pat.as_ref().map_or_else(|| pat.syntax(), |it| it.syntax()).text_range();
sema.pattern_adjustments(&pat).iter().for_each(|ty| { sema.pattern_adjustments(&pat).iter().for_each(|ty| {
let reference = ty.is_reference(); let reference = ty.is_reference();
let mut_reference = ty.is_mutable_reference(); let mut_reference = ty.is_mutable_reference();
@ -875,13 +886,13 @@ fn binding_mode_hints(
hir::BindingMode::Ref(Mutability::Shared) => "ref", hir::BindingMode::Ref(Mutability::Shared) => "ref",
}; };
acc.push(InlayHint { acc.push(InlayHint {
range, range: pat.syntax().text_range(),
kind: InlayKind::BindingModeHint, kind: InlayKind::BindingModeHint,
label: bm.to_string().into(), label: bm.to_string().into(),
tooltip: Some(InlayTooltip::String("Inferred binding mode".into())), tooltip: Some(InlayTooltip::String("Inferred binding mode".into())),
}); });
} }
ast::Pat::OrPat(pat) => { ast::Pat::OrPat(pat) if outer_paren_pat.is_none() => {
acc.push(InlayHint { acc.push(InlayHint {
range: pat.syntax().text_range(), range: pat.syntax().text_range(),
kind: InlayKind::OpeningParenthesis, kind: InlayKind::OpeningParenthesis,
@ -2973,11 +2984,9 @@ fn __(
//^^^^^^^^^^^( //^^^^^^^^^^^(
//^^^^^^^^^^^) //^^^^^^^^^^^)
((x,) | (x,)) => (), ((x,) | (x,)) => (),
//^^^^^^^^^^^& //^^^^^^^^^^^^^&
//^ ref //^ ref
//^ ref //^ ref
//^^^^^^^^^^^(
//^^^^^^^^^^^)
} }
match &mut (0,) { match &mut (0,) {
(x,) => () (x,) => ()