aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_assists/src
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_assists/src')
-rw-r--r--crates/ra_assists/src/ast_transform.rs15
1 files changed, 8 insertions, 7 deletions
diff --git a/crates/ra_assists/src/ast_transform.rs b/crates/ra_assists/src/ast_transform.rs
index 846661587..ace59f290 100644
--- a/crates/ra_assists/src/ast_transform.rs
+++ b/crates/ra_assists/src/ast_transform.rs
@@ -60,6 +60,8 @@ impl<'a, DB: HirDatabase> SubstituteTypeParams<'a, DB> {
60 previous: Box::new(NullTransformer), 60 previous: Box::new(NullTransformer),
61 }; 61 };
62 62
63 // FIXME: It would probably be nicer if we could get this via HIR (i.e. get the
64 // trait ref, and then go from the types in the substs back to the syntax)
63 fn get_syntactic_substs(impl_block: ast::ImplBlock) -> Option<Vec<ast::TypeRef>> { 65 fn get_syntactic_substs(impl_block: ast::ImplBlock) -> Option<Vec<ast::TypeRef>> {
64 let target_trait = impl_block.target_trait()?; 66 let target_trait = impl_block.target_trait()?;
65 let path_type = match target_trait { 67 let path_type = match target_trait {
@@ -131,12 +133,12 @@ impl<'a, DB: HirDatabase> QualifyPaths<'a, DB> {
131 let resolution = analyzer.resolve_path(self.db, &p)?; 133 let resolution = analyzer.resolve_path(self.db, &p)?;
132 match resolution { 134 match resolution {
133 PathResolution::Def(def) => { 135 PathResolution::Def(def) => {
134 let found_path = from.find_path(self.db, def)?; 136 let found_path = from.find_use_path(self.db, def)?;
135 let args = p 137 let args = p
136 .segment() 138 .segment()
137 .and_then(|s| s.type_arg_list()) 139 .and_then(|s| s.type_arg_list())
138 .map(|arg_list| apply(self, node.with_value(arg_list))); 140 .map(|arg_list| apply(self, node.with_value(arg_list)));
139 Some(make::path_with_type_arg_list(found_path.to_ast(), args).syntax().clone()) 141 Some(make::path_with_type_arg_list(path_to_ast(found_path), args).syntax().clone())
140 } 142 }
141 PathResolution::Local(_) 143 PathResolution::Local(_)
142 | PathResolution::TypeParam(_) 144 | PathResolution::TypeParam(_)
@@ -171,8 +173,7 @@ impl<'a, DB: HirDatabase> AstTransform<'a> for QualifyPaths<'a, DB> {
171 } 173 }
172} 174}
173 175
174// FIXME: It would probably be nicer if we could get this via HIR (i.e. get the 176fn path_to_ast(path: hir::ModPath) -> ast::Path {
175// trait ref, and then go from the types in the substs back to the syntax) 177 let parse = ast::SourceFile::parse(&path.to_string());
176// FIXME: This should be a general utility (not even just for assists) 178 parse.tree().syntax().descendants().find_map(ast::Path::cast).unwrap()
177 179}
178// FIXME: This should be a general utility (not even just for assists)