Refine search for const and function assoc items

This commit is contained in:
Lukas Wirth 2023-01-11 17:10:04 +01:00
parent f32f64bffc
commit bb4e272d8a
7 changed files with 319 additions and 36 deletions

View file

@ -1636,4 +1636,265 @@ pub fn deri$0ve(_stream: TokenStream) -> TokenStream {}
"#]],
);
}
#[test]
fn assoc_items_trait_def() {
check(
r#"
trait Trait {
const CONST$0: usize;
}
impl Trait for () {
const CONST: usize = 0;
}
impl Trait for ((),) {
const CONST: usize = 0;
}
fn f<T: Trait>() {
let _ = <()>::CONST;
let _ = T::CONST;
}
"#,
expect![[r#"
CONST Const FileId(0) 18..37 24..29
FileId(0) 71..76
FileId(0) 125..130
FileId(0) 183..188
FileId(0) 206..211
"#]],
);
check(
r#"
trait Trait {
type TypeAlias$0;
}
impl Trait for () {
type TypeAlias = ();
}
impl Trait for ((),) {
type TypeAlias = ();
}
fn f<T: Trait>() {
let _: <() as Trait>::TypeAlias;
let _: T::TypeAlias;
}
"#,
expect![[r#"
TypeAlias TypeAlias FileId(0) 18..33 23..32
FileId(0) 66..75
FileId(0) 117..126
FileId(0) 181..190
FileId(0) 207..216
"#]],
);
check(
r#"
trait Trait {
fn function$0() {}
}
impl Trait for () {
fn function() {}
}
impl Trait for ((),) {
fn function() {}
}
fn f<T: Trait>() {
let _ = <()>::function;
let _ = T::function;
}
"#,
expect![[r#"
function Function FileId(0) 18..34 21..29
FileId(0) 65..73
FileId(0) 112..120
FileId(0) 166..174
FileId(0) 192..200
"#]],
);
}
#[test]
fn assoc_items_trait_impl_def() {
check(
r#"
trait Trait {
const CONST: usize;
}
impl Trait for () {
const CONST$0: usize = 0;
}
impl Trait for ((),) {
const CONST: usize = 0;
}
fn f<T: Trait>() {
let _ = <()>::CONST;
let _ = T::CONST;
}
"#,
expect![[r#"
CONST Const FileId(0) 65..88 71..76
FileId(0) 183..188
"#]],
);
check(
r#"
trait Trait {
type TypeAlias;
}
impl Trait for () {
type TypeAlias$0 = ();
}
impl Trait for ((),) {
type TypeAlias = ();
}
fn f<T: Trait>() {
let _: <() as Trait>::TypeAlias;
let _: T::TypeAlias;
}
"#,
expect![[r#"
TypeAlias TypeAlias FileId(0) 61..81 66..75
FileId(0) 23..32
FileId(0) 117..126
FileId(0) 181..190
FileId(0) 207..216
"#]],
);
check(
r#"
trait Trait {
fn function() {}
}
impl Trait for () {
fn function$0() {}
}
impl Trait for ((),) {
fn function() {}
}
fn f<T: Trait>() {
let _ = <()>::function;
let _ = T::function;
}
"#,
expect![[r#"
function Function FileId(0) 62..78 65..73
FileId(0) 166..174
"#]],
);
}
#[test]
fn assoc_items_ref() {
check(
r#"
trait Trait {
const CONST: usize;
}
impl Trait for () {
const CONST: usize = 0;
}
impl Trait for ((),) {
const CONST: usize = 0;
}
fn f<T: Trait>() {
let _ = <()>::CONST$0;
let _ = T::CONST;
}
"#,
expect![[r#"
CONST Const FileId(0) 65..88 71..76
FileId(0) 183..188
"#]],
);
check(
r#"
trait Trait {
type TypeAlias;
}
impl Trait for () {
type TypeAlias = ();
}
impl Trait for ((),) {
type TypeAlias = ();
}
fn f<T: Trait>() {
let _: <() as Trait>::TypeAlias$0;
let _: T::TypeAlias;
}
"#,
expect![[r#"
TypeAlias TypeAlias FileId(0) 18..33 23..32
FileId(0) 66..75
FileId(0) 117..126
FileId(0) 181..190
FileId(0) 207..216
"#]],
);
check(
r#"
trait Trait {
fn function() {}
}
impl Trait for () {
fn function() {}
}
impl Trait for ((),) {
fn function() {}
}
fn f<T: Trait>() {
let _ = <()>::function$0;
let _ = T::function;
}
"#,
expect![[r#"
function Function FileId(0) 62..78 65..73
FileId(0) 166..174
"#]],
);
}
}