Auto merge of #18370 - duncpro:goto-def-ranges, r=Veykril

feat: resolve range patterns to their structs

Closes #18367
This commit is contained in:
bors 2024-10-22 12:24:25 +00:00
commit d509449d7e
4 changed files with 124 additions and 8 deletions

View file

@ -98,6 +98,7 @@ pub(crate) fn goto_definition(
return Some(vec![x]);
}
}
Some(
IdentClass::classify_node(sema, &parent)?
.definitions()
@ -460,7 +461,87 @@ mod tests {
}
#[test]
fn goto_def_range() {
fn goto_def_pat_range_to_inclusive() {
check_name(
"RangeToInclusive",
r#"
//- minicore: range
fn f(ch: char) -> bool {
match ch {
..$0='z' => true,
_ => false
}
}
"#,
);
}
#[test]
fn goto_def_pat_range_to() {
check_name(
"RangeTo",
r#"
//- minicore: range
fn f(ch: char) -> bool {
match ch {
.$0.'z' => true,
_ => false
}
}
"#,
);
}
#[test]
fn goto_def_pat_range() {
check_name(
"Range",
r#"
//- minicore: range
fn f(ch: char) -> bool {
match ch {
'a'.$0.'z' => true,
_ => false
}
}
"#,
);
}
#[test]
fn goto_def_pat_range_inclusive() {
check_name(
"RangeInclusive",
r#"
//- minicore: range
fn f(ch: char) -> bool {
match ch {
'a'..$0='z' => true,
_ => false
}
}
"#,
);
}
#[test]
fn goto_def_pat_range_from() {
check_name(
"RangeFrom",
r#"
//- minicore: range
fn f(ch: char) -> bool {
match ch {
'a'..$0 => true,
_ => false
}
}
"#,
);
}
#[test]
fn goto_def_expr_range() {
check_name(
"Range",
r#"
@ -471,7 +552,7 @@ let x = 0.$0.1;
}
#[test]
fn goto_def_range_from() {
fn goto_def_expr_range_from() {
check_name(
"RangeFrom",
r#"
@ -484,7 +565,7 @@ fn f(arr: &[i32]) -> &[i32] {
}
#[test]
fn goto_def_range_inclusive() {
fn goto_def_expr_range_inclusive() {
check_name(
"RangeInclusive",
r#"
@ -495,7 +576,7 @@ let x = 0.$0.=1;
}
#[test]
fn goto_def_range_full() {
fn goto_def_expr_range_full() {
check_name(
"RangeFull",
r#"
@ -508,7 +589,7 @@ fn f(arr: &[i32]) -> &[i32] {
}
#[test]
fn goto_def_range_to() {
fn goto_def_expr_range_to() {
check_name(
"RangeTo",
r#"
@ -521,7 +602,7 @@ fn f(arr: &[i32]) -> &[i32] {
}
#[test]
fn goto_def_range_to_inclusive() {
fn goto_def_expr_range_to_inclusive() {
check_name(
"RangeToInclusive",
r#"