diff options
Diffstat (limited to 'crates/ra_assists/src')
-rw-r--r-- | crates/ra_assists/src/ast_transform.rs | 15 |
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 | 176 | fn 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) | ||