mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-30 13:51:31 +00:00
Refine search for const and function assoc items
This commit is contained in:
parent
f32f64bffc
commit
bb4e272d8a
7 changed files with 319 additions and 36 deletions
|
@ -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
|
||||
"#]],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue