mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-28 14:03:35 +00:00
Support goto definition for ADT-SelfParams
This commit is contained in:
parent
c66d477f5a
commit
b006856381
1 changed files with 36 additions and 6 deletions
|
@ -3,12 +3,7 @@ use ide_db::{
|
||||||
defs::{NameClass, NameRefClass},
|
defs::{NameClass, NameRefClass},
|
||||||
symbol_index, RootDatabase,
|
symbol_index, RootDatabase,
|
||||||
};
|
};
|
||||||
use syntax::{
|
use syntax::{ast, match_ast, AstNode, SyntaxKind::*, SyntaxToken, TokenAtOffset, T};
|
||||||
ast::{self},
|
|
||||||
match_ast, AstNode,
|
|
||||||
SyntaxKind::*,
|
|
||||||
SyntaxToken, TokenAtOffset, T,
|
|
||||||
};
|
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
display::{ToNav, TryToNav},
|
display::{ToNav, TryToNav},
|
||||||
|
@ -44,6 +39,12 @@ pub(crate) fn goto_definition(
|
||||||
let nav = def.try_to_nav(sema.db)?;
|
let nav = def.try_to_nav(sema.db)?;
|
||||||
vec![nav]
|
vec![nav]
|
||||||
},
|
},
|
||||||
|
ast::SelfParam(self_param) => {
|
||||||
|
let ty = sema.type_of_self(&self_param)?;
|
||||||
|
let adt_def = ty.autoderef(db).filter_map(|ty| ty.as_adt()).last()?;
|
||||||
|
let nav = adt_def.to_nav(db);
|
||||||
|
vec![nav]
|
||||||
|
},
|
||||||
_ => return None,
|
_ => return None,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -981,6 +982,35 @@ trait Iterator {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn g() -> <() as Iterator<A = (), B<|> = u8>>::A {}
|
fn g() -> <() as Iterator<A = (), B<|> = u8>>::A {}
|
||||||
|
"#,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn todo_def_type_for_self() {
|
||||||
|
check(
|
||||||
|
r#"
|
||||||
|
struct Foo {}
|
||||||
|
//^^^
|
||||||
|
|
||||||
|
impl Foo {
|
||||||
|
fn bar(&self<|>) {}
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn todo_def_type_for_arbitrary_self() {
|
||||||
|
check(
|
||||||
|
r#"
|
||||||
|
struct Arc<T>(T);
|
||||||
|
//^^^
|
||||||
|
struct Foo {}
|
||||||
|
|
||||||
|
impl Foo {
|
||||||
|
fn bar(self<|>: Arc<Self>) {}
|
||||||
|
}
|
||||||
"#,
|
"#,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue