aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-rw-r--r--crates/ra_hir/src/code_model.rs (renamed from crates/ra_hir/src/code_model_api.rs)361
-rw-r--r--crates/ra_hir/src/code_model_impl.rs4
-rw-r--r--crates/ra_hir/src/code_model_impl/function.rs50
-rw-r--r--crates/ra_hir/src/code_model_impl/konst.rs34
-rw-r--r--crates/ra_hir/src/code_model_impl/krate.rs22
-rw-r--r--crates/ra_hir/src/code_model_impl/module.rs99
-rw-r--r--crates/ra_hir/src/impl_block.rs2
-rw-r--r--crates/ra_hir/src/lib.rs5
-rw-r--r--crates/ra_hir/src/resolve.rs2
-rw-r--r--crates/ra_ide_api/src/completion/complete_dot.rs252
-rw-r--r--crates/ra_ide_api/src/completion/complete_fn_param.rs60
-rw-r--r--crates/ra_ide_api/src/completion/complete_pattern.rs62
-rw-r--r--crates/ra_ide_api/src/completion/complete_struct_literal.rs22
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__bindings_from_for.snap10
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__bindings_from_if_let.snap12
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__bindings_from_let.snap12
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__completes_break_and_continue_in_loops1.snap20
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__completes_break_and_continue_in_loops2.snap16
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__completes_prelude.snap12
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__completes_use_paths_across_crates.snap8
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__deeply_nested_use_tree.snap8
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__dont_add_semi_after_return_if_not_a_statement.snap16
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__dont_render_function_parens_if_already_call.snap10
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__dont_render_function_parens_if_already_call_assoc_fn.snap8
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__dont_render_function_parens_in_use_item.snap8
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__dont_show_both_completions_for_shadowing.snap10
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__enum_variant.snap14
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__enum_variant_with_details.snap18
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__extern_prelude.snap8
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__generic_params.snap10
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__generic_params_in_struct.snap10
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__inserts_parens_for_function_calls1.snap10
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__inserts_parens_for_function_calls2.snap10
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__inserts_parens_for_function_calls3.snap8
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_function1.snap16
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_function2.snap20
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_function3.snap16
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_function4.snap16
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_use_stmt1.snap12
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_use_stmt2.snap10
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_use_stmt3.snap10
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__last_return_in_block_has_semi1.snap16
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__last_return_in_block_has_semi2.snap16
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__mod_with_docs.snap10
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__module_items.snap12
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__module_items_in_nested_modules.snap10
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__nested_use_tree.snap10
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__no_semi_after_break_continue_in_expr.snap20
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__postfix_completion_works_for_trivial_path_expression.snap20
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__return_type.snap10
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__self_in_methods.snap10
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__snippets_in_expressions.snap10
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__snippets_in_items.snap10
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__struct_associated_const.snap10
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__struct_associated_method.snap10
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__struct_associated_type.snap10
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__use_item_starting_with_crate.snap10
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__use_item_starting_with_self.snap8
-rw-r--r--crates/ra_ide_api/src/diagnostics.rs46
-rw-r--r--crates/ra_ide_api/src/display/snapshots/tests__file_structure.snap68
-rw-r--r--crates/ra_ide_api/src/snapshots/tests__highlighting.snap74
-rw-r--r--crates/ra_ide_api/src/snapshots/tests__rename_mod.snap30
-rw-r--r--crates/ra_ide_api/src/snapshots/tests__rename_mod_in_dir.snap30
-rw-r--r--crates/ra_ide_api/src/snapshots/tests__runnables.snap18
-rw-r--r--crates/ra_ide_api/src/snapshots/tests__runnables_module.snap16
-rw-r--r--crates/ra_ide_api/src/snapshots/tests__runnables_multiple_depth_module.snap16
-rw-r--r--crates/ra_ide_api/src/snapshots/tests__runnables_one_depth_layer_module.snap16
-rw-r--r--crates/ra_ide_api/src/syntax_highlighting.rs3
-rw-r--r--crates/ra_parser/src/grammar/items.rs4
-rw-r--r--crates/ra_parser/src/grammar/items/traits.rs4
-rw-r--r--crates/ra_parser/src/grammar/type_params.rs4
-rw-r--r--crates/ra_parser/src/grammar/types.rs4
72 files changed, 895 insertions, 953 deletions
diff --git a/crates/ra_hir/src/code_model_api.rs b/crates/ra_hir/src/code_model.rs
index 970b78412..49030ce67 100644
--- a/crates/ra_hir/src/code_model_api.rs
+++ b/crates/ra_hir/src/code_model.rs
@@ -1,15 +1,15 @@
1use std::sync::Arc; 1use std::sync::Arc;
2 2
3use ra_db::{CrateId, SourceRootId, Edition}; 3use ra_db::{CrateId, SourceRootId, Edition, FileId};
4use ra_syntax::{ast::self, TreeArc}; 4use ra_syntax::{ast::{self, NameOwner, TypeAscriptionOwner}, TreeArc};
5 5
6use crate::{ 6use crate::{
7 Name, Ty, HirFileId, Either, 7 Name, AsName, AstId, Ty, HirFileId, Either,
8 HirDatabase, DefDatabase, 8 HirDatabase, DefDatabase,
9 type_ref::TypeRef, 9 type_ref::TypeRef,
10 nameres::{ModuleScope, Namespace, ImportId, CrateModuleId}, 10 nameres::{ModuleScope, Namespace, ImportId, CrateModuleId},
11 expr::{Body, BodySourceMap, validation::ExprValidator}, 11 expr::{Body, BodySourceMap, validation::ExprValidator},
12 ty::{ TraitRef, InferenceResult}, 12 ty::{TraitRef, InferenceResult},
13 adt::{EnumVariantId, StructFieldId, VariantDef}, 13 adt::{EnumVariantId, StructFieldId, VariantDef},
14 generics::HasGenericParams, 14 generics::HasGenericParams,
15 docs::{Documentation, Docs, docs_from_ast}, 15 docs::{Documentation, Docs, docs_from_ast},
@@ -18,6 +18,7 @@ use crate::{
18 resolve::Resolver, 18 resolve::Resolver,
19 diagnostics::{DiagnosticSink}, 19 diagnostics::{DiagnosticSink},
20 traits::{TraitItem, TraitData}, 20 traits::{TraitItem, TraitData},
21 type_ref::Mutability,
21}; 22};
22 23
23/// hir::Crate describes a single crate. It's the main interface with which 24/// hir::Crate describes a single crate. It's the main interface with which
@@ -35,19 +36,28 @@ pub struct CrateDependency {
35} 36}
36 37
37impl Crate { 38impl Crate {
38 pub fn crate_id(&self) -> CrateId { 39 pub fn crate_id(self) -> CrateId {
39 self.crate_id 40 self.crate_id
40 } 41 }
41 42
42 pub fn dependencies(&self, db: &impl DefDatabase) -> Vec<CrateDependency> { 43 pub fn dependencies(self, db: &impl DefDatabase) -> Vec<CrateDependency> {
43 self.dependencies_impl(db) 44 db.crate_graph()
45 .dependencies(self.crate_id)
46 .map(|dep| {
47 let krate = Crate { crate_id: dep.crate_id() };
48 let name = dep.as_name();
49 CrateDependency { krate, name }
50 })
51 .collect()
44 } 52 }
45 53
46 pub fn root_module(&self, db: &impl DefDatabase) -> Option<Module> { 54 pub fn root_module(self, db: &impl DefDatabase) -> Option<Module> {
47 self.root_module_impl(db) 55 let module_id = db.crate_def_map(self).root();
56 let module = Module { krate: self, module_id };
57 Some(module)
48 } 58 }
49 59
50 pub fn edition(&self, db: &impl DefDatabase) -> Edition { 60 pub fn edition(self, db: &impl DefDatabase) -> Edition {
51 let crate_graph = db.crate_graph(); 61 let crate_graph = db.crate_graph();
52 crate_graph.edition(self.crate_id) 62 crate_graph.edition(self.crate_id)
53 } 63 }
@@ -98,29 +108,66 @@ pub enum ModuleSource {
98 Module(TreeArc<ast::Module>), 108 Module(TreeArc<ast::Module>),
99} 109}
100 110
111impl ModuleSource {
112 pub(crate) fn new(
113 db: &impl DefDatabase,
114 file_id: Option<FileId>,
115 decl_id: Option<AstId<ast::Module>>,
116 ) -> ModuleSource {
117 match (file_id, decl_id) {
118 (Some(file_id), _) => {
119 let source_file = db.parse(file_id);
120 ModuleSource::SourceFile(source_file)
121 }
122 (None, Some(item_id)) => {
123 let module = item_id.to_node(db);
124 assert!(module.item_list().is_some(), "expected inline module");
125 ModuleSource::Module(module.to_owned())
126 }
127 (None, None) => panic!(),
128 }
129 }
130}
131
101impl Module { 132impl Module {
102 /// Name of this module. 133 /// Name of this module.
103 pub fn name(&self, db: &impl HirDatabase) -> Option<Name> { 134 pub fn name(self, db: &impl HirDatabase) -> Option<Name> {
104 self.name_impl(db) 135 let def_map = db.crate_def_map(self.krate);
136 let parent = def_map[self.module_id].parent?;
137 def_map[parent].children.iter().find_map(|(name, module_id)| {
138 if *module_id == self.module_id {
139 Some(name.clone())
140 } else {
141 None
142 }
143 })
105 } 144 }
106 145
107 /// Returns a node which defines this module. That is, a file or a `mod foo {}` with items. 146 /// Returns a node which defines this module. That is, a file or a `mod foo {}` with items.
108 pub fn definition_source(&self, db: &impl DefDatabase) -> (HirFileId, ModuleSource) { 147 pub fn definition_source(self, db: &impl DefDatabase) -> (HirFileId, ModuleSource) {
109 self.definition_source_impl(db) 148 let def_map = db.crate_def_map(self.krate);
149 let decl_id = def_map[self.module_id].declaration;
150 let file_id = def_map[self.module_id].definition;
151 let module_source = ModuleSource::new(db, file_id, decl_id);
152 let file_id = file_id.map(HirFileId::from).unwrap_or_else(|| decl_id.unwrap().file_id());
153 (file_id, module_source)
110 } 154 }
111 155
112 /// Returns a node which declares this module, either a `mod foo;` or a `mod foo {}`. 156 /// Returns a node which declares this module, either a `mod foo;` or a `mod foo {}`.
113 /// `None` for the crate root. 157 /// `None` for the crate root.
114 pub fn declaration_source( 158 pub fn declaration_source(
115 &self, 159 self,
116 db: &impl HirDatabase, 160 db: &impl HirDatabase,
117 ) -> Option<(HirFileId, TreeArc<ast::Module>)> { 161 ) -> Option<(HirFileId, TreeArc<ast::Module>)> {
118 self.declaration_source_impl(db) 162 let def_map = db.crate_def_map(self.krate);
163 let decl = def_map[self.module_id].declaration?;
164 let ast = decl.to_node(db);
165 Some((decl.file_id(), ast))
119 } 166 }
120 167
121 /// Returns the syntax of the last path segment corresponding to this import 168 /// Returns the syntax of the last path segment corresponding to this import
122 pub fn import_source( 169 pub fn import_source(
123 &self, 170 self,
124 db: &impl HirDatabase, 171 db: &impl HirDatabase,
125 import: ImportId, 172 import: ImportId,
126 ) -> Either<TreeArc<ast::UseTree>, TreeArc<ast::ExternCrateItem>> { 173 ) -> Either<TreeArc<ast::UseTree>, TreeArc<ast::ExternCrateItem>> {
@@ -130,33 +177,44 @@ impl Module {
130 } 177 }
131 178
132 /// Returns the crate this module is part of. 179 /// Returns the crate this module is part of.
133 pub fn krate(&self, _db: &impl DefDatabase) -> Option<Crate> { 180 pub fn krate(self, _db: &impl DefDatabase) -> Option<Crate> {
134 Some(self.krate) 181 Some(self.krate)
135 } 182 }
136 183
137 /// Topmost parent of this module. Every module has a `crate_root`, but some 184 /// Topmost parent of this module. Every module has a `crate_root`, but some
138 /// might be missing `krate`. This can happen if a module's file is not included 185 /// might be missing `krate`. This can happen if a module's file is not included
139 /// in the module tree of any target in `Cargo.toml`. 186 /// in the module tree of any target in `Cargo.toml`.
140 pub fn crate_root(&self, db: &impl DefDatabase) -> Module { 187 pub fn crate_root(self, db: &impl DefDatabase) -> Module {
141 self.crate_root_impl(db) 188 let def_map = db.crate_def_map(self.krate);
189 self.with_module_id(def_map.root())
142 } 190 }
143 191
144 /// Finds a child module with the specified name. 192 /// Finds a child module with the specified name.
145 pub fn child(&self, db: &impl HirDatabase, name: &Name) -> Option<Module> { 193 pub fn child(self, db: &impl HirDatabase, name: &Name) -> Option<Module> {
146 self.child_impl(db, name) 194 let def_map = db.crate_def_map(self.krate);
195 let child_id = def_map[self.module_id].children.get(name)?;
196 Some(self.with_module_id(*child_id))
147 } 197 }
148 198
149 /// Iterates over all child modules. 199 /// Iterates over all child modules.
150 pub fn children(&self, db: &impl DefDatabase) -> impl Iterator<Item = Module> { 200 pub fn children(self, db: &impl DefDatabase) -> impl Iterator<Item = Module> {
151 self.children_impl(db) 201 let def_map = db.crate_def_map(self.krate);
202 let children = def_map[self.module_id]
203 .children
204 .iter()
205 .map(|(_, module_id)| self.with_module_id(*module_id))
206 .collect::<Vec<_>>();
207 children.into_iter()
152 } 208 }
153 209
154 /// Finds a parent module. 210 /// Finds a parent module.
155 pub fn parent(&self, db: &impl DefDatabase) -> Option<Module> { 211 pub fn parent(self, db: &impl DefDatabase) -> Option<Module> {
156 self.parent_impl(db) 212 let def_map = db.crate_def_map(self.krate);
213 let parent_id = def_map[self.module_id].parent?;
214 Some(self.with_module_id(parent_id))
157 } 215 }
158 216
159 pub fn path_to_root(&self, db: &impl HirDatabase) -> Vec<Module> { 217 pub fn path_to_root(self, db: &impl HirDatabase) -> Vec<Module> {
160 let mut res = vec![self.clone()]; 218 let mut res = vec![self.clone()];
161 let mut curr = self.clone(); 219 let mut curr = self.clone();
162 while let Some(next) = curr.parent(db) { 220 while let Some(next) = curr.parent(db) {
@@ -167,11 +225,11 @@ impl Module {
167 } 225 }
168 226
169 /// Returns a `ModuleScope`: a set of items, visible in this module. 227 /// Returns a `ModuleScope`: a set of items, visible in this module.
170 pub fn scope(&self, db: &impl HirDatabase) -> ModuleScope { 228 pub fn scope(self, db: &impl HirDatabase) -> ModuleScope {
171 db.crate_def_map(self.krate)[self.module_id].scope.clone() 229 db.crate_def_map(self.krate)[self.module_id].scope.clone()
172 } 230 }
173 231
174 pub fn diagnostics(&self, db: &impl HirDatabase, sink: &mut DiagnosticSink) { 232 pub fn diagnostics(self, db: &impl HirDatabase, sink: &mut DiagnosticSink) {
175 db.crate_def_map(self.krate).add_diagnostics(db, self.module_id, sink); 233 db.crate_def_map(self.krate).add_diagnostics(db, self.module_id, sink);
176 for decl in self.declarations(db) { 234 for decl in self.declarations(db) {
177 match decl { 235 match decl {
@@ -191,7 +249,7 @@ impl Module {
191 } 249 }
192 } 250 }
193 251
194 pub(crate) fn resolver(&self, db: &impl DefDatabase) -> Resolver { 252 pub(crate) fn resolver(self, db: &impl DefDatabase) -> Resolver {
195 let def_map = db.crate_def_map(self.krate); 253 let def_map = db.crate_def_map(self.krate);
196 Resolver::default().push_module_scope(def_map, self.module_id) 254 Resolver::default().push_module_scope(def_map, self.module_id)
197 } 255 }
@@ -216,6 +274,10 @@ impl Module {
216 .map(|(impl_id, _)| ImplBlock::from_id(self, impl_id)) 274 .map(|(impl_id, _)| ImplBlock::from_id(self, impl_id))
217 .collect() 275 .collect()
218 } 276 }
277
278 fn with_module_id(&self, module_id: CrateModuleId) -> Module {
279 Module { module_id, krate: self.krate }
280 }
219} 281}
220 282
221impl Docs for Module { 283impl Docs for Module {
@@ -269,49 +331,49 @@ pub struct Struct {
269} 331}
270 332
271impl Struct { 333impl Struct {
272 pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::StructDef>) { 334 pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::StructDef>) {
273 self.id.source(db) 335 self.id.source(db)
274 } 336 }
275 337
276 pub fn module(&self, db: &impl HirDatabase) -> Module { 338 pub fn module(self, db: &impl HirDatabase) -> Module {
277 self.id.module(db) 339 self.id.module(db)
278 } 340 }
279 341
280 pub fn name(&self, db: &impl HirDatabase) -> Option<Name> { 342 pub fn name(self, db: &impl HirDatabase) -> Option<Name> {
281 db.struct_data(*self).name.clone() 343 db.struct_data(self).name.clone()
282 } 344 }
283 345
284 pub fn fields(&self, db: &impl HirDatabase) -> Vec<StructField> { 346 pub fn fields(self, db: &impl HirDatabase) -> Vec<StructField> {
285 db.struct_data(*self) 347 db.struct_data(self)
286 .variant_data 348 .variant_data
287 .fields() 349 .fields()
288 .into_iter() 350 .into_iter()
289 .flat_map(|it| it.iter()) 351 .flat_map(|it| it.iter())
290 .map(|(id, _)| StructField { parent: (*self).into(), id }) 352 .map(|(id, _)| StructField { parent: self.into(), id })
291 .collect() 353 .collect()
292 } 354 }
293 355
294 pub fn field(&self, db: &impl HirDatabase, name: &Name) -> Option<StructField> { 356 pub fn field(self, db: &impl HirDatabase, name: &Name) -> Option<StructField> {
295 db.struct_data(*self) 357 db.struct_data(self)
296 .variant_data 358 .variant_data
297 .fields() 359 .fields()
298 .into_iter() 360 .into_iter()
299 .flat_map(|it| it.iter()) 361 .flat_map(|it| it.iter())
300 .find(|(_id, data)| data.name == *name) 362 .find(|(_id, data)| data.name == *name)
301 .map(|(id, _)| StructField { parent: (*self).into(), id }) 363 .map(|(id, _)| StructField { parent: self.into(), id })
302 } 364 }
303 365
304 pub fn ty(&self, db: &impl HirDatabase) -> Ty { 366 pub fn ty(self, db: &impl HirDatabase) -> Ty {
305 db.type_for_def((*self).into(), Namespace::Types) 367 db.type_for_def(self.into(), Namespace::Types)
306 } 368 }
307 369
308 pub fn constructor_ty(&self, db: &impl HirDatabase) -> Ty { 370 pub fn constructor_ty(self, db: &impl HirDatabase) -> Ty {
309 db.type_for_def((*self).into(), Namespace::Values) 371 db.type_for_def(self.into(), Namespace::Values)
310 } 372 }
311 373
312 // FIXME move to a more general type 374 // FIXME move to a more general type
313 /// Builds a resolver for type references inside this struct. 375 /// Builds a resolver for type references inside this struct.
314 pub(crate) fn resolver(&self, db: &impl HirDatabase) -> Resolver { 376 pub(crate) fn resolver(self, db: &impl HirDatabase) -> Resolver {
315 // take the outer scope... 377 // take the outer scope...
316 let r = self.module(db).resolver(db); 378 let r = self.module(db).resolver(db);
317 // ...and add generic params, if present 379 // ...and add generic params, if present
@@ -333,21 +395,21 @@ pub struct Union {
333} 395}
334 396
335impl Union { 397impl Union {
336 pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::StructDef>) { 398 pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::StructDef>) {
337 self.id.source(db) 399 self.id.source(db)
338 } 400 }
339 401
340 pub fn name(&self, db: &impl HirDatabase) -> Option<Name> { 402 pub fn name(self, db: &impl HirDatabase) -> Option<Name> {
341 db.struct_data(Struct { id: self.id }).name.clone() 403 db.struct_data(Struct { id: self.id }).name.clone()
342 } 404 }
343 405
344 pub fn module(&self, db: &impl HirDatabase) -> Module { 406 pub fn module(self, db: &impl HirDatabase) -> Module {
345 self.id.module(db) 407 self.id.module(db)
346 } 408 }
347 409
348 // FIXME move to a more general type 410 // FIXME move to a more general type
349 /// Builds a resolver for type references inside this union. 411 /// Builds a resolver for type references inside this union.
350 pub(crate) fn resolver(&self, db: &impl HirDatabase) -> Resolver { 412 pub(crate) fn resolver(self, db: &impl HirDatabase) -> Resolver {
351 // take the outer scope... 413 // take the outer scope...
352 let r = self.module(db).resolver(db); 414 let r = self.module(db).resolver(db);
353 // ...and add generic params, if present 415 // ...and add generic params, if present
@@ -369,41 +431,37 @@ pub struct Enum {
369} 431}
370 432
371impl Enum { 433impl Enum {
372 pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::EnumDef>) { 434 pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::EnumDef>) {
373 self.id.source(db) 435 self.id.source(db)
374 } 436 }
375 437
376 pub fn module(&self, db: &impl HirDatabase) -> Module { 438 pub fn module(self, db: &impl HirDatabase) -> Module {
377 self.id.module(db) 439 self.id.module(db)
378 } 440 }
379 441
380 pub fn name(&self, db: &impl HirDatabase) -> Option<Name> { 442 pub fn name(self, db: &impl HirDatabase) -> Option<Name> {
381 db.enum_data(*self).name.clone() 443 db.enum_data(self).name.clone()
382 } 444 }
383 445
384 pub fn variants(&self, db: &impl DefDatabase) -> Vec<EnumVariant> { 446 pub fn variants(self, db: &impl DefDatabase) -> Vec<EnumVariant> {
385 db.enum_data(*self) 447 db.enum_data(self).variants.iter().map(|(id, _)| EnumVariant { parent: self, id }).collect()
386 .variants
387 .iter()
388 .map(|(id, _)| EnumVariant { parent: *self, id })
389 .collect()
390 } 448 }
391 449
392 pub fn variant(&self, db: &impl DefDatabase, name: &Name) -> Option<EnumVariant> { 450 pub fn variant(self, db: &impl DefDatabase, name: &Name) -> Option<EnumVariant> {
393 db.enum_data(*self) 451 db.enum_data(self)
394 .variants 452 .variants
395 .iter() 453 .iter()
396 .find(|(_id, data)| data.name.as_ref() == Some(name)) 454 .find(|(_id, data)| data.name.as_ref() == Some(name))
397 .map(|(id, _)| EnumVariant { parent: *self, id }) 455 .map(|(id, _)| EnumVariant { parent: self, id })
398 } 456 }
399 457
400 pub fn ty(&self, db: &impl HirDatabase) -> Ty { 458 pub fn ty(self, db: &impl HirDatabase) -> Ty {
401 db.type_for_def((*self).into(), Namespace::Types) 459 db.type_for_def(self.into(), Namespace::Types)
402 } 460 }
403 461
404 // FIXME: move to a more general type 462 // FIXME: move to a more general type
405 /// Builds a resolver for type references inside this struct. 463 /// Builds a resolver for type references inside this struct.
406 pub(crate) fn resolver(&self, db: &impl HirDatabase) -> Resolver { 464 pub(crate) fn resolver(self, db: &impl HirDatabase) -> Resolver {
407 // take the outer scope... 465 // take the outer scope...
408 let r = self.module(db).resolver(db); 466 let r = self.module(db).resolver(db);
409 // ...and add generic params, if present 467 // ...and add generic params, if present
@@ -476,16 +534,16 @@ pub enum DefWithBody {
476impl_froms!(DefWithBody: Function, Const, Static); 534impl_froms!(DefWithBody: Function, Const, Static);
477 535
478impl DefWithBody { 536impl DefWithBody {
479 pub fn infer(&self, db: &impl HirDatabase) -> Arc<InferenceResult> { 537 pub fn infer(self, db: &impl HirDatabase) -> Arc<InferenceResult> {
480 db.infer(*self) 538 db.infer(self)
481 } 539 }
482 540
483 pub fn body(&self, db: &impl HirDatabase) -> Arc<Body> { 541 pub fn body(self, db: &impl HirDatabase) -> Arc<Body> {
484 db.body_hir(*self) 542 db.body_hir(self)
485 } 543 }
486 544
487 pub fn body_source_map(&self, db: &impl HirDatabase) -> Arc<BodySourceMap> { 545 pub fn body_source_map(self, db: &impl HirDatabase) -> Arc<BodySourceMap> {
488 db.body_with_source_map(*self).1 546 db.body_with_source_map(self).1
489 } 547 }
490 548
491 /// Builds a resolver for code inside this item. 549 /// Builds a resolver for code inside this item.
@@ -515,6 +573,44 @@ pub struct FnSignature {
515} 573}
516 574
517impl FnSignature { 575impl FnSignature {
576 pub(crate) fn fn_signature_query(db: &impl DefDatabase, func: Function) -> Arc<FnSignature> {
577 let (_, node) = func.source(db);
578 let name = node.name().map(|n| n.as_name()).unwrap_or_else(Name::missing);
579 let mut params = Vec::new();
580 let mut has_self_param = false;
581 if let Some(param_list) = node.param_list() {
582 if let Some(self_param) = param_list.self_param() {
583 let self_type = if let Some(type_ref) = self_param.ascribed_type() {
584 TypeRef::from_ast(type_ref)
585 } else {
586 let self_type = TypeRef::Path(Name::self_type().into());
587 match self_param.kind() {
588 ast::SelfParamKind::Owned => self_type,
589 ast::SelfParamKind::Ref => {
590 TypeRef::Reference(Box::new(self_type), Mutability::Shared)
591 }
592 ast::SelfParamKind::MutRef => {
593 TypeRef::Reference(Box::new(self_type), Mutability::Mut)
594 }
595 }
596 };
597 params.push(self_type);
598 has_self_param = true;
599 }
600 for param in param_list.params() {
601 let type_ref = TypeRef::from_ast_opt(param.ascribed_type());
602 params.push(type_ref);
603 }
604 }
605 let ret_type = if let Some(type_ref) = node.ret_type().and_then(|rt| rt.type_ref()) {
606 TypeRef::from_ast(type_ref)
607 } else {
608 TypeRef::unit()
609 };
610
611 let sig = FnSignature { name, params, ret_type, has_self_param };
612 Arc::new(sig)
613 }
518 pub fn name(&self) -> &Name { 614 pub fn name(&self) -> &Name {
519 &self.name 615 &self.name
520 } 616 }
@@ -535,50 +631,50 @@ impl FnSignature {
535} 631}
536 632
537impl Function { 633impl Function {
538 pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::FnDef>) { 634 pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::FnDef>) {
539 self.id.source(db) 635 self.id.source(db)
540 } 636 }
541 637
542 pub fn module(&self, db: &impl DefDatabase) -> Module { 638 pub fn module(self, db: &impl DefDatabase) -> Module {
543 self.id.module(db) 639 self.id.module(db)
544 } 640 }
545 641
546 pub fn name(&self, db: &impl HirDatabase) -> Name { 642 pub fn name(self, db: &impl HirDatabase) -> Name {
547 self.signature(db).name.clone() 643 self.signature(db).name.clone()
548 } 644 }
549 645
550 pub(crate) fn body_source_map(&self, db: &impl HirDatabase) -> Arc<BodySourceMap> { 646 pub(crate) fn body_source_map(self, db: &impl HirDatabase) -> Arc<BodySourceMap> {
551 db.body_with_source_map((*self).into()).1 647 db.body_with_source_map(self.into()).1
552 } 648 }
553 649
554 pub fn body(&self, db: &impl HirDatabase) -> Arc<Body> { 650 pub fn body(self, db: &impl HirDatabase) -> Arc<Body> {
555 db.body_hir((*self).into()) 651 db.body_hir(self.into())
556 } 652 }
557 653
558 pub fn ty(&self, db: &impl HirDatabase) -> Ty { 654 pub fn ty(self, db: &impl HirDatabase) -> Ty {
559 db.type_for_def((*self).into(), Namespace::Values) 655 db.type_for_def(self.into(), Namespace::Values)
560 } 656 }
561 657
562 pub fn signature(&self, db: &impl HirDatabase) -> Arc<FnSignature> { 658 pub fn signature(self, db: &impl HirDatabase) -> Arc<FnSignature> {
563 db.fn_signature(*self) 659 db.fn_signature(self)
564 } 660 }
565 661
566 pub fn infer(&self, db: &impl HirDatabase) -> Arc<InferenceResult> { 662 pub fn infer(self, db: &impl HirDatabase) -> Arc<InferenceResult> {
567 db.infer((*self).into()) 663 db.infer(self.into())
568 } 664 }
569 665
570 /// The containing impl block, if this is a method. 666 /// The containing impl block, if this is a method.
571 pub fn impl_block(&self, db: &impl DefDatabase) -> Option<ImplBlock> { 667 pub fn impl_block(self, db: &impl DefDatabase) -> Option<ImplBlock> {
572 let module_impls = db.impls_in_module(self.module(db)); 668 let module_impls = db.impls_in_module(self.module(db));
573 ImplBlock::containing(module_impls, (*self).into()) 669 ImplBlock::containing(module_impls, self.into())
574 } 670 }
575 671
576 /// The containing trait, if this is a trait method definition. 672 /// The containing trait, if this is a trait method definition.
577 pub fn parent_trait(&self, db: &impl DefDatabase) -> Option<Trait> { 673 pub fn parent_trait(self, db: &impl DefDatabase) -> Option<Trait> {
578 db.trait_items_index(self.module(db)).get_parent_trait((*self).into()) 674 db.trait_items_index(self.module(db)).get_parent_trait(self.into())
579 } 675 }
580 676
581 pub fn container(&self, db: &impl DefDatabase) -> Option<Container> { 677 pub fn container(self, db: &impl DefDatabase) -> Option<Container> {
582 if let Some(impl_block) = self.impl_block(db) { 678 if let Some(impl_block) = self.impl_block(db) {
583 Some(impl_block.into()) 679 Some(impl_block.into())
584 } else if let Some(trait_) = self.parent_trait(db) { 680 } else if let Some(trait_) = self.parent_trait(db) {
@@ -590,7 +686,7 @@ impl Function {
590 686
591 // FIXME: move to a more general type for 'body-having' items 687 // FIXME: move to a more general type for 'body-having' items
592 /// Builds a resolver for code inside this item. 688 /// Builds a resolver for code inside this item.
593 pub(crate) fn resolver(&self, db: &impl HirDatabase) -> Resolver { 689 pub(crate) fn resolver(self, db: &impl HirDatabase) -> Resolver {
594 // take the outer scope... 690 // take the outer scope...
595 let r = self.container(db).map_or_else(|| self.module(db).resolver(db), |c| c.resolver(db)); 691 let r = self.container(db).map_or_else(|| self.module(db).resolver(db), |c| c.resolver(db));
596 // ...and add generic params, if present 692 // ...and add generic params, if present
@@ -599,10 +695,10 @@ impl Function {
599 r 695 r
600 } 696 }
601 697
602 pub fn diagnostics(&self, db: &impl HirDatabase, sink: &mut DiagnosticSink) { 698 pub fn diagnostics(self, db: &impl HirDatabase, sink: &mut DiagnosticSink) {
603 let infer = self.infer(db); 699 let infer = self.infer(db);
604 infer.add_diagnostics(db, *self, sink); 700 infer.add_diagnostics(db, self, sink);
605 let mut validator = ExprValidator::new(*self, infer, sink); 701 let mut validator = ExprValidator::new(self, infer, sink);
606 validator.validate_body(db); 702 validator.validate_body(db);
607 } 703 }
608} 704}
@@ -619,31 +715,31 @@ pub struct Const {
619} 715}
620 716
621impl Const { 717impl Const {
622 pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::ConstDef>) { 718 pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::ConstDef>) {
623 self.id.source(db) 719 self.id.source(db)
624 } 720 }
625 721
626 pub fn module(&self, db: &impl DefDatabase) -> Module { 722 pub fn module(self, db: &impl DefDatabase) -> Module {
627 self.id.module(db) 723 self.id.module(db)
628 } 724 }
629 725
630 pub fn signature(&self, db: &impl HirDatabase) -> Arc<ConstSignature> { 726 pub fn signature(self, db: &impl HirDatabase) -> Arc<ConstSignature> {
631 db.const_signature(*self) 727 db.const_signature(self)
632 } 728 }
633 729
634 pub fn infer(&self, db: &impl HirDatabase) -> Arc<InferenceResult> { 730 pub fn infer(self, db: &impl HirDatabase) -> Arc<InferenceResult> {
635 db.infer((*self).into()) 731 db.infer(self.into())
636 } 732 }
637 733
638 /// The containing impl block, if this is a method. 734 /// The containing impl block, if this is a method.
639 pub fn impl_block(&self, db: &impl DefDatabase) -> Option<ImplBlock> { 735 pub fn impl_block(self, db: &impl DefDatabase) -> Option<ImplBlock> {
640 let module_impls = db.impls_in_module(self.module(db)); 736 let module_impls = db.impls_in_module(self.module(db));
641 ImplBlock::containing(module_impls, (*self).into()) 737 ImplBlock::containing(module_impls, self.into())
642 } 738 }
643 739
644 // FIXME: move to a more general type for 'body-having' items 740 // FIXME: move to a more general type for 'body-having' items
645 /// Builds a resolver for code inside this item. 741 /// Builds a resolver for code inside this item.
646 pub(crate) fn resolver(&self, db: &impl HirDatabase) -> Resolver { 742 pub(crate) fn resolver(self, db: &impl HirDatabase) -> Resolver {
647 // take the outer scope... 743 // take the outer scope...
648 let r = self 744 let r = self
649 .impl_block(db) 745 .impl_block(db)
@@ -674,6 +770,29 @@ impl ConstSignature {
674 pub fn type_ref(&self) -> &TypeRef { 770 pub fn type_ref(&self) -> &TypeRef {
675 &self.type_ref 771 &self.type_ref
676 } 772 }
773
774 pub(crate) fn const_signature_query(
775 db: &impl DefDatabase,
776 konst: Const,
777 ) -> Arc<ConstSignature> {
778 let (_, node) = konst.source(db);
779 const_signature_for(&*node)
780 }
781
782 pub(crate) fn static_signature_query(
783 db: &impl DefDatabase,
784 konst: Static,
785 ) -> Arc<ConstSignature> {
786 let (_, node) = konst.source(db);
787 const_signature_for(&*node)
788 }
789}
790
791fn const_signature_for<N: NameOwner + TypeAscriptionOwner>(node: &N) -> Arc<ConstSignature> {
792 let name = node.name().map(|n| n.as_name()).unwrap_or_else(Name::missing);
793 let type_ref = TypeRef::from_ast_opt(node.ascribed_type());
794 let sig = ConstSignature { name, type_ref };
795 Arc::new(sig)
677} 796}
678 797
679#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 798#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
@@ -682,26 +801,26 @@ pub struct Static {
682} 801}
683 802
684impl Static { 803impl Static {
685 pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::StaticDef>) { 804 pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::StaticDef>) {
686 self.id.source(db) 805 self.id.source(db)
687 } 806 }
688 807
689 pub fn module(&self, db: &impl DefDatabase) -> Module { 808 pub fn module(self, db: &impl DefDatabase) -> Module {
690 self.id.module(db) 809 self.id.module(db)
691 } 810 }
692 811
693 pub fn signature(&self, db: &impl HirDatabase) -> Arc<ConstSignature> { 812 pub fn signature(self, db: &impl HirDatabase) -> Arc<ConstSignature> {
694 db.static_signature(*self) 813 db.static_signature(self)
695 } 814 }
696 815
697 /// Builds a resolver for code inside this item. 816 /// Builds a resolver for code inside this item.
698 pub(crate) fn resolver(&self, db: &impl HirDatabase) -> Resolver { 817 pub(crate) fn resolver(self, db: &impl HirDatabase) -> Resolver {
699 // take the outer scope... 818 // take the outer scope...
700 self.module(db).resolver(db) 819 self.module(db).resolver(db)
701 } 820 }
702 821
703 pub fn infer(&self, db: &impl HirDatabase) -> Arc<InferenceResult> { 822 pub fn infer(self, db: &impl HirDatabase) -> Arc<InferenceResult> {
704 db.infer((*self).into()) 823 db.infer(self.into())
705 } 824 }
706} 825}
707 826
@@ -717,11 +836,11 @@ pub struct Trait {
717} 836}
718 837
719impl Trait { 838impl Trait {
720 pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::TraitDef>) { 839 pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::TraitDef>) {
721 self.id.source(db) 840 self.id.source(db)
722 } 841 }
723 842
724 pub fn module(&self, db: &impl DefDatabase) -> Module { 843 pub fn module(self, db: &impl DefDatabase) -> Module {
725 self.id.module(db) 844 self.id.module(db)
726 } 845 }
727 846
@@ -745,7 +864,7 @@ impl Trait {
745 self.trait_data(db).is_auto() 864 self.trait_data(db).is_auto()
746 } 865 }
747 866
748 pub(crate) fn resolver(&self, db: &impl DefDatabase) -> Resolver { 867 pub(crate) fn resolver(self, db: &impl DefDatabase) -> Resolver {
749 let r = self.module(db).resolver(db); 868 let r = self.module(db).resolver(db);
750 // add generic params, if present 869 // add generic params, if present
751 let p = self.generic_params(db); 870 let p = self.generic_params(db);
@@ -766,26 +885,26 @@ pub struct TypeAlias {
766} 885}
767 886
768impl TypeAlias { 887impl TypeAlias {
769 pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::TypeAliasDef>) { 888 pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::TypeAliasDef>) {
770 self.id.source(db) 889 self.id.source(db)
771 } 890 }
772 891
773 pub fn module(&self, db: &impl DefDatabase) -> Module { 892 pub fn module(self, db: &impl DefDatabase) -> Module {
774 self.id.module(db) 893 self.id.module(db)
775 } 894 }
776 895
777 /// The containing impl block, if this is a method. 896 /// The containing impl block, if this is a method.
778 pub fn impl_block(&self, db: &impl DefDatabase) -> Option<ImplBlock> { 897 pub fn impl_block(self, db: &impl DefDatabase) -> Option<ImplBlock> {
779 let module_impls = db.impls_in_module(self.module(db)); 898 let module_impls = db.impls_in_module(self.module(db));
780 ImplBlock::containing(module_impls, (*self).into()) 899 ImplBlock::containing(module_impls, self.into())
781 } 900 }
782 901
783 /// The containing trait, if this is a trait method definition. 902 /// The containing trait, if this is a trait method definition.
784 pub fn parent_trait(&self, db: &impl DefDatabase) -> Option<Trait> { 903 pub fn parent_trait(self, db: &impl DefDatabase) -> Option<Trait> {
785 db.trait_items_index(self.module(db)).get_parent_trait((*self).into()) 904 db.trait_items_index(self.module(db)).get_parent_trait(self.into())
786 } 905 }
787 906
788 pub fn container(&self, db: &impl DefDatabase) -> Option<Container> { 907 pub fn container(self, db: &impl DefDatabase) -> Option<Container> {
789 if let Some(impl_block) = self.impl_block(db) { 908 if let Some(impl_block) = self.impl_block(db) {
790 Some(impl_block.into()) 909 Some(impl_block.into())
791 } else if let Some(trait_) = self.parent_trait(db) { 910 } else if let Some(trait_) = self.parent_trait(db) {
@@ -800,7 +919,7 @@ impl TypeAlias {
800 } 919 }
801 920
802 /// Builds a resolver for the type references in this type alias. 921 /// Builds a resolver for the type references in this type alias.
803 pub(crate) fn resolver(&self, db: &impl HirDatabase) -> Resolver { 922 pub(crate) fn resolver(self, db: &impl HirDatabase) -> Resolver {
804 // take the outer scope... 923 // take the outer scope...
805 let r = self 924 let r = self
806 .impl_block(db) 925 .impl_block(db)
@@ -826,7 +945,7 @@ pub enum Container {
826impl_froms!(Container: Trait, ImplBlock); 945impl_froms!(Container: Trait, ImplBlock);
827 946
828impl Container { 947impl Container {
829 pub(crate) fn resolver(&self, db: &impl DefDatabase) -> Resolver { 948 pub(crate) fn resolver(self, db: &impl DefDatabase) -> Resolver {
830 match self { 949 match self {
831 Container::Trait(trait_) => trait_.resolver(db), 950 Container::Trait(trait_) => trait_.resolver(db),
832 Container::ImplBlock(impl_block) => impl_block.resolver(db), 951 Container::ImplBlock(impl_block) => impl_block.resolver(db),
diff --git a/crates/ra_hir/src/code_model_impl.rs b/crates/ra_hir/src/code_model_impl.rs
deleted file mode 100644
index 24df9a113..000000000
--- a/crates/ra_hir/src/code_model_impl.rs
+++ /dev/null
@@ -1,4 +0,0 @@
1mod krate; // `crate` is invalid ident :(
2mod konst; // `const` is invalid ident :(
3mod module;
4pub(crate) mod function;
diff --git a/crates/ra_hir/src/code_model_impl/function.rs b/crates/ra_hir/src/code_model_impl/function.rs
deleted file mode 100644
index f8bd0f784..000000000
--- a/crates/ra_hir/src/code_model_impl/function.rs
+++ /dev/null
@@ -1,50 +0,0 @@
1use std::sync::Arc;
2
3use ra_syntax::ast::{self, NameOwner, TypeAscriptionOwner};
4
5use crate::{
6 Name, AsName, Function, FnSignature,
7 type_ref::{TypeRef, Mutability},
8 DefDatabase,
9};
10
11impl FnSignature {
12 pub(crate) fn fn_signature_query(db: &impl DefDatabase, func: Function) -> Arc<FnSignature> {
13 let (_, node) = func.source(db);
14 let name = node.name().map(|n| n.as_name()).unwrap_or_else(Name::missing);
15 let mut params = Vec::new();
16 let mut has_self_param = false;
17 if let Some(param_list) = node.param_list() {
18 if let Some(self_param) = param_list.self_param() {
19 let self_type = if let Some(type_ref) = self_param.ascribed_type() {
20 TypeRef::from_ast(type_ref)
21 } else {
22 let self_type = TypeRef::Path(Name::self_type().into());
23 match self_param.kind() {
24 ast::SelfParamKind::Owned => self_type,
25 ast::SelfParamKind::Ref => {
26 TypeRef::Reference(Box::new(self_type), Mutability::Shared)
27 }
28 ast::SelfParamKind::MutRef => {
29 TypeRef::Reference(Box::new(self_type), Mutability::Mut)
30 }
31 }
32 };
33 params.push(self_type);
34 has_self_param = true;
35 }
36 for param in param_list.params() {
37 let type_ref = TypeRef::from_ast_opt(param.ascribed_type());
38 params.push(type_ref);
39 }
40 }
41 let ret_type = if let Some(type_ref) = node.ret_type().and_then(|rt| rt.type_ref()) {
42 TypeRef::from_ast(type_ref)
43 } else {
44 TypeRef::unit()
45 };
46
47 let sig = FnSignature { name, params, ret_type, has_self_param };
48 Arc::new(sig)
49 }
50}
diff --git a/crates/ra_hir/src/code_model_impl/konst.rs b/crates/ra_hir/src/code_model_impl/konst.rs
deleted file mode 100644
index db4e5ce5c..000000000
--- a/crates/ra_hir/src/code_model_impl/konst.rs
+++ /dev/null
@@ -1,34 +0,0 @@
1use std::sync::Arc;
2
3use ra_syntax::ast::{NameOwner, TypeAscriptionOwner};
4
5use crate::{
6 Name, AsName, Const, ConstSignature, Static,
7 type_ref::{TypeRef},
8 DefDatabase,
9};
10
11fn const_signature_for<N: NameOwner + TypeAscriptionOwner>(node: &N) -> Arc<ConstSignature> {
12 let name = node.name().map(|n| n.as_name()).unwrap_or_else(Name::missing);
13 let type_ref = TypeRef::from_ast_opt(node.ascribed_type());
14 let sig = ConstSignature { name, type_ref };
15 Arc::new(sig)
16}
17
18impl ConstSignature {
19 pub(crate) fn const_signature_query(
20 db: &impl DefDatabase,
21 konst: Const,
22 ) -> Arc<ConstSignature> {
23 let (_, node) = konst.source(db);
24 const_signature_for(&*node)
25 }
26
27 pub(crate) fn static_signature_query(
28 db: &impl DefDatabase,
29 konst: Static,
30 ) -> Arc<ConstSignature> {
31 let (_, node) = konst.source(db);
32 const_signature_for(&*node)
33 }
34}
diff --git a/crates/ra_hir/src/code_model_impl/krate.rs b/crates/ra_hir/src/code_model_impl/krate.rs
deleted file mode 100644
index 914414fc3..000000000
--- a/crates/ra_hir/src/code_model_impl/krate.rs
+++ /dev/null
@@ -1,22 +0,0 @@
1use crate::{
2 Crate, CrateDependency, AsName, Module, DefDatabase,
3};
4
5impl Crate {
6 pub(crate) fn dependencies_impl(&self, db: &impl DefDatabase) -> Vec<CrateDependency> {
7 let crate_graph = db.crate_graph();
8 crate_graph
9 .dependencies(self.crate_id)
10 .map(|dep| {
11 let krate = Crate { crate_id: dep.crate_id() };
12 let name = dep.as_name();
13 CrateDependency { krate, name }
14 })
15 .collect()
16 }
17 pub(crate) fn root_module_impl(&self, db: &impl DefDatabase) -> Option<Module> {
18 let module_id = db.crate_def_map(*self).root();
19 let module = Module { krate: *self, module_id };
20 Some(module)
21 }
22}
diff --git a/crates/ra_hir/src/code_model_impl/module.rs b/crates/ra_hir/src/code_model_impl/module.rs
deleted file mode 100644
index 5c2ea73ce..000000000
--- a/crates/ra_hir/src/code_model_impl/module.rs
+++ /dev/null
@@ -1,99 +0,0 @@
1use ra_db::FileId;
2use ra_syntax::{ast, TreeArc};
3
4use crate::{
5 Module, ModuleSource, Name, AstId,
6 nameres::CrateModuleId,
7 HirDatabase, DefDatabase,
8 HirFileId,
9};
10
11impl ModuleSource {
12 pub(crate) fn new(
13 db: &impl DefDatabase,
14 file_id: Option<FileId>,
15 decl_id: Option<AstId<ast::Module>>,
16 ) -> ModuleSource {
17 match (file_id, decl_id) {
18 (Some(file_id), _) => {
19 let source_file = db.parse(file_id);
20 ModuleSource::SourceFile(source_file)
21 }
22 (None, Some(item_id)) => {
23 let module = item_id.to_node(db);
24 assert!(module.item_list().is_some(), "expected inline module");
25 ModuleSource::Module(module.to_owned())
26 }
27 (None, None) => panic!(),
28 }
29 }
30}
31
32impl Module {
33 fn with_module_id(&self, module_id: CrateModuleId) -> Module {
34 Module { module_id, krate: self.krate }
35 }
36
37 pub(crate) fn name_impl(&self, db: &impl HirDatabase) -> Option<Name> {
38 let def_map = db.crate_def_map(self.krate);
39 let parent = def_map[self.module_id].parent?;
40 def_map[parent].children.iter().find_map(|(name, module_id)| {
41 if *module_id == self.module_id {
42 Some(name.clone())
43 } else {
44 None
45 }
46 })
47 }
48
49 pub(crate) fn definition_source_impl(
50 &self,
51 db: &impl DefDatabase,
52 ) -> (HirFileId, ModuleSource) {
53 let def_map = db.crate_def_map(self.krate);
54 let decl_id = def_map[self.module_id].declaration;
55 let file_id = def_map[self.module_id].definition;
56 let module_source = ModuleSource::new(db, file_id, decl_id);
57 let file_id = file_id.map(HirFileId::from).unwrap_or_else(|| decl_id.unwrap().file_id());
58 (file_id, module_source)
59 }
60
61 pub(crate) fn declaration_source_impl(
62 &self,
63 db: &impl HirDatabase,
64 ) -> Option<(HirFileId, TreeArc<ast::Module>)> {
65 let def_map = db.crate_def_map(self.krate);
66 let decl = def_map[self.module_id].declaration?;
67 let ast = decl.to_node(db);
68 Some((decl.file_id(), ast))
69 }
70
71 pub(crate) fn crate_root_impl(&self, db: &impl DefDatabase) -> Module {
72 let def_map = db.crate_def_map(self.krate);
73 self.with_module_id(def_map.root())
74 }
75
76 /// Finds a child module with the specified name.
77 pub(crate) fn child_impl(&self, db: &impl HirDatabase, name: &Name) -> Option<Module> {
78 let def_map = db.crate_def_map(self.krate);
79 let child_id = def_map[self.module_id].children.get(name)?;
80 Some(self.with_module_id(*child_id))
81 }
82
83 /// Iterates over all child modules.
84 pub(crate) fn children_impl(&self, db: &impl DefDatabase) -> impl Iterator<Item = Module> {
85 let def_map = db.crate_def_map(self.krate);
86 let children = def_map[self.module_id]
87 .children
88 .iter()
89 .map(|(_, module_id)| self.with_module_id(*module_id))
90 .collect::<Vec<_>>();
91 children.into_iter()
92 }
93
94 pub(crate) fn parent_impl(&self, db: &impl DefDatabase) -> Option<Module> {
95 let def_map = db.crate_def_map(self.krate);
96 let parent_id = def_map[self.module_id].parent?;
97 Some(self.with_module_id(parent_id))
98 }
99}
diff --git a/crates/ra_hir/src/impl_block.rs b/crates/ra_hir/src/impl_block.rs
index 51fa491c3..637f6ab83 100644
--- a/crates/ra_hir/src/impl_block.rs
+++ b/crates/ra_hir/src/impl_block.rs
@@ -15,7 +15,7 @@ use crate::{
15 resolve::Resolver, 15 resolve::Resolver,
16 ty::Ty, 16 ty::Ty,
17 generics::HasGenericParams, 17 generics::HasGenericParams,
18 code_model_api::{Module, ModuleSource} 18 code_model::{Module, ModuleSource}
19}; 19};
20 20
21#[derive(Debug, Default, PartialEq, Eq)] 21#[derive(Debug, Default, PartialEq, Eq)]
diff --git a/crates/ra_hir/src/lib.rs b/crates/ra_hir/src/lib.rs
index 0135644db..fe2d4adee 100644
--- a/crates/ra_hir/src/lib.rs
+++ b/crates/ra_hir/src/lib.rs
@@ -42,8 +42,7 @@ mod docs;
42mod resolve; 42mod resolve;
43pub mod diagnostics; 43pub mod diagnostics;
44 44
45mod code_model_api; 45mod code_model;
46mod code_model_impl;
47 46
48#[cfg(test)] 47#[cfg(test)]
49mod marks; 48mod marks;
@@ -73,7 +72,7 @@ pub use self::{
73 source_binder::{SourceAnalyzer, PathResolution, ScopeEntryWithSyntax,MacroByExampleDef}, 72 source_binder::{SourceAnalyzer, PathResolution, ScopeEntryWithSyntax,MacroByExampleDef},
74}; 73};
75 74
76pub use self::code_model_api::{ 75pub use self::code_model::{
77 Crate, CrateDependency, 76 Crate, CrateDependency,
78 DefWithBody, 77 DefWithBody,
79 Module, ModuleDef, ModuleSource, 78 Module, ModuleDef, ModuleSource,
diff --git a/crates/ra_hir/src/resolve.rs b/crates/ra_hir/src/resolve.rs
index 3874e28bf..fedfe2fee 100644
--- a/crates/ra_hir/src/resolve.rs
+++ b/crates/ra_hir/src/resolve.rs
@@ -5,7 +5,7 @@ use rustc_hash::{FxHashMap, FxHashSet};
5 5
6use crate::{ 6use crate::{
7 ModuleDef, Trait, 7 ModuleDef, Trait,
8 code_model_api::Crate, 8 code_model::Crate,
9 MacroDefId, 9 MacroDefId,
10 db::HirDatabase, 10 db::HirDatabase,
11 name::{Name, KnownName}, 11 name::{Name, KnownName},
diff --git a/crates/ra_ide_api/src/completion/complete_dot.rs b/crates/ra_ide_api/src/completion/complete_dot.rs
index 2e8084699..5bf289c63 100644
--- a/crates/ra_ide_api/src/completion/complete_dot.rs
+++ b/crates/ra_ide_api/src/completion/complete_dot.rs
@@ -66,16 +66,18 @@ mod tests {
66 } 66 }
67 ", 67 ",
68 ), 68 ),
69 @r###"[ 69 @r###"
70 CompletionItem { 70 â‹®[
71 label: "the_field", 71 â‹® CompletionItem {
72 source_range: [94; 94), 72 â‹® label: "the_field",
73 delete: [94; 94), 73 â‹® source_range: [94; 94),
74 insert: "the_field", 74 â‹® delete: [94; 94),
75 kind: Field, 75 â‹® insert: "the_field",
76 detail: "u32" 76 â‹® kind: Field,
77 } 77 â‹® detail: "u32",
78]"### 78 â‹® },
79 â‹®]
80 "###
79 ); 81 );
80 } 82 }
81 83
@@ -95,27 +97,29 @@ mod tests {
95 } 97 }
96 ", 98 ",
97 ), 99 ),
98 @r###"[ 100 @r###"
99 CompletionItem { 101 â‹®[
100 label: "foo", 102 â‹® CompletionItem {
101 source_range: [187; 187), 103 â‹® label: "foo",
102 delete: [187; 187), 104 â‹® source_range: [187; 187),
103 insert: "foo()$0", 105 â‹® delete: [187; 187),
104 kind: Method, 106 â‹® insert: "foo()$0",
105 detail: "fn foo(self)" 107 â‹® kind: Method,
106 }, 108 â‹® detail: "fn foo(self)",
107 CompletionItem { 109 â‹® },
108 label: "the_field", 110 â‹® CompletionItem {
109 source_range: [187; 187), 111 â‹® label: "the_field",
110 delete: [187; 187), 112 â‹® source_range: [187; 187),
111 insert: "the_field", 113 â‹® delete: [187; 187),
112 kind: Field, 114 â‹® insert: "the_field",
113 detail: "(u32,)", 115 â‹® kind: Field,
114 documentation: Documentation( 116 â‹® detail: "(u32,)",
115 "This is the_field" 117 â‹® documentation: Documentation(
116 ) 118 â‹® "This is the_field",
117 } 119 â‹® ),
118]"### 120 â‹® },
121 â‹®]
122 "###
119 ); 123 );
120 } 124 }
121 125
@@ -132,24 +136,26 @@ mod tests {
132 } 136 }
133 ", 137 ",
134 ), 138 ),
135 @r###"[ 139 @r###"
136 CompletionItem { 140 â‹®[
137 label: "foo", 141 â‹® CompletionItem {
138 source_range: [126; 126), 142 â‹® label: "foo",
139 delete: [126; 126), 143 â‹® source_range: [126; 126),
140 insert: "foo()$0", 144 â‹® delete: [126; 126),
141 kind: Method, 145 â‹® insert: "foo()$0",
142 detail: "fn foo(&self)" 146 â‹® kind: Method,
143 }, 147 â‹® detail: "fn foo(&self)",
144 CompletionItem { 148 â‹® },
145 label: "the_field", 149 â‹® CompletionItem {
146 source_range: [126; 126), 150 â‹® label: "the_field",
147 delete: [126; 126), 151 â‹® source_range: [126; 126),
148 insert: "the_field", 152 â‹® delete: [126; 126),
149 kind: Field, 153 â‹® insert: "the_field",
150 detail: "(u32, i32)" 154 â‹® kind: Field,
151 } 155 â‹® detail: "(u32, i32)",
152]"### 156 â‹® },
157 â‹®]
158 "###
153 ); 159 );
154 } 160 }
155 161
@@ -182,16 +188,18 @@ mod tests {
182 } 188 }
183 ", 189 ",
184 ), 190 ),
185 @r###"[ 191 @r###"
186 CompletionItem { 192 â‹®[
187 label: "the_method", 193 â‹® CompletionItem {
188 source_range: [144; 144), 194 â‹® label: "the_method",
189 delete: [144; 144), 195 â‹® source_range: [144; 144),
190 insert: "the_method()$0", 196 â‹® delete: [144; 144),
191 kind: Method, 197 â‹® insert: "the_method()$0",
192 detail: "fn the_method(&self)" 198 â‹® kind: Method,
193 } 199 â‹® detail: "fn the_method(&self)",
194]"### 200 â‹® },
201 â‹®]
202 "###
195 ); 203 );
196 } 204 }
197 205
@@ -208,16 +216,18 @@ mod tests {
208 } 216 }
209 ", 217 ",
210 ), 218 ),
211 @r###"[ 219 @r###"
212 CompletionItem { 220 â‹®[
213 label: "the_method", 221 â‹® CompletionItem {
214 source_range: [151; 151), 222 â‹® label: "the_method",
215 delete: [151; 151), 223 â‹® source_range: [151; 151),
216 insert: "the_method()$0", 224 â‹® delete: [151; 151),
217 kind: Method, 225 â‹® insert: "the_method()$0",
218 detail: "fn the_method(&self)" 226 â‹® kind: Method,
219 } 227 â‹® detail: "fn the_method(&self)",
220]"### 228 â‹® },
229 â‹®]
230 "###
221 ); 231 );
222 } 232 }
223 233
@@ -257,16 +267,18 @@ mod tests {
257 } 267 }
258 ", 268 ",
259 ), 269 ),
260 @r###"[ 270 @r###"
261 CompletionItem { 271 â‹®[
262 label: "the_method", 272 â‹® CompletionItem {
263 source_range: [249; 249), 273 â‹® label: "the_method",
264 delete: [249; 249), 274 â‹® source_range: [249; 249),
265 insert: "the_method()$0", 275 â‹® delete: [249; 249),
266 kind: Method, 276 â‹® insert: "the_method()$0",
267 detail: "fn the_method(&self)" 277 â‹® kind: Method,
268 } 278 â‹® detail: "fn the_method(&self)",
269]"### 279 â‹® },
280 â‹®]
281 "###
270 ); 282 );
271 } 283 }
272 284
@@ -281,24 +293,26 @@ mod tests {
281 } 293 }
282 ", 294 ",
283 ), 295 ),
284 @r###"[ 296 @r###"
285 CompletionItem { 297 â‹®[
286 label: "0", 298 â‹® CompletionItem {
287 source_range: [75; 75), 299 â‹® label: "0",
288 delete: [75; 75), 300 â‹® source_range: [75; 75),
289 insert: "0", 301 â‹® delete: [75; 75),
290 kind: Field, 302 â‹® insert: "0",
291 detail: "i32" 303 â‹® kind: Field,
292 }, 304 â‹® detail: "i32",
293 CompletionItem { 305 â‹® },
294 label: "1", 306 â‹® CompletionItem {
295 source_range: [75; 75), 307 â‹® label: "1",
296 delete: [75; 75), 308 â‹® source_range: [75; 75),
297 insert: "1", 309 â‹® delete: [75; 75),
298 kind: Field, 310 â‹® insert: "1",
299 detail: "f64" 311 â‹® kind: Field,
300 } 312 â‹® detail: "f64",
301]"### 313 â‹® },
314 â‹®]
315 "###
302 ); 316 );
303 } 317 }
304 318
@@ -322,16 +336,18 @@ mod tests {
322 } 336 }
323 ", 337 ",
324 ), 338 ),
325 @r###"[ 339 @r###"
326 CompletionItem { 340 â‹®[
327 label: "blah", 341 â‹® CompletionItem {
328 source_range: [299; 300), 342 â‹® label: "blah",
329 delete: [299; 300), 343 â‹® source_range: [299; 300),
330 insert: "blah()$0", 344 â‹® delete: [299; 300),
331 kind: Method, 345 â‹® insert: "blah()$0",
332 detail: "pub fn blah(&self)" 346 â‹® kind: Method,
333 } 347 â‹® detail: "pub fn blah(&self)",
334]"### 348 â‹® },
349 â‹®]
350 "###
335 ); 351 );
336 } 352 }
337 353
@@ -346,16 +362,18 @@ mod tests {
346 }; 362 };
347 ", 363 ",
348 ), 364 ),
349 @r###"[ 365 @r###"
350 CompletionItem { 366 â‹®[
351 label: "the_field", 367 â‹® CompletionItem {
352 source_range: [106; 106), 368 â‹® label: "the_field",
353 delete: [106; 106), 369 â‹® source_range: [106; 106),
354 insert: "the_field", 370 â‹® delete: [106; 106),
355 kind: Field, 371 â‹® insert: "the_field",
356 detail: "u32" 372 â‹® kind: Field,
357 } 373 â‹® detail: "u32",
358]"### 374 â‹® },
375 â‹®]
376 "###
359 ); 377 );
360 } 378 }
361} 379}
diff --git a/crates/ra_ide_api/src/completion/complete_fn_param.rs b/crates/ra_ide_api/src/completion/complete_fn_param.rs
index 85ef62f52..d738ffc13 100644
--- a/crates/ra_ide_api/src/completion/complete_fn_param.rs
+++ b/crates/ra_ide_api/src/completion/complete_fn_param.rs
@@ -71,15 +71,17 @@ mod tests {
71 fn baz(file<|>) {} 71 fn baz(file<|>) {}
72 ", 72 ",
73 ), 73 ),
74 @r###"[ 74 @r###"
75 CompletionItem { 75 â‹®[
76 label: "file_id: FileId", 76 â‹® CompletionItem {
77 source_range: [110; 114), 77 â‹® label: "file_id: FileId",
78 delete: [110; 114), 78 â‹® source_range: [110; 114),
79 insert: "file_id: FileId", 79 â‹® delete: [110; 114),
80 lookup: "file_id" 80 â‹® insert: "file_id: FileId",
81 } 81 â‹® lookup: "file_id",
82]"### 82 â‹® },
83 â‹®]
84 "###
83 ); 85 );
84 } 86 }
85 87
@@ -93,15 +95,17 @@ mod tests {
93 fn baz(file<|>, x: i32) {} 95 fn baz(file<|>, x: i32) {}
94 ", 96 ",
95 ), 97 ),
96 @r###"[ 98 @r###"
97 CompletionItem { 99 â‹®[
98 label: "file_id: FileId", 100 â‹® CompletionItem {
99 source_range: [110; 114), 101 â‹® label: "file_id: FileId",
100 delete: [110; 114), 102 â‹® source_range: [110; 114),
101 insert: "file_id: FileId", 103 â‹® delete: [110; 114),
102 lookup: "file_id" 104 â‹® insert: "file_id: FileId",
103 } 105 â‹® lookup: "file_id",
104]"### 106 â‹® },
107 â‹®]
108 "###
105 ); 109 );
106 } 110 }
107 111
@@ -118,15 +122,17 @@ mod tests {
118 } 122 }
119 ", 123 ",
120 ), 124 ),
121 @r###"[ 125 @r###"
122 CompletionItem { 126 â‹®[
123 label: "file_id: FileId", 127 â‹® CompletionItem {
124 source_range: [289; 293), 128 â‹® label: "file_id: FileId",
125 delete: [289; 293), 129 â‹® source_range: [289; 293),
126 insert: "file_id: FileId", 130 â‹® delete: [289; 293),
127 lookup: "file_id" 131 â‹® insert: "file_id: FileId",
128 } 132 â‹® lookup: "file_id",
129]"### 133 â‹® },
134 â‹®]
135 "###
130 ); 136 );
131 } 137 }
132} 138}
diff --git a/crates/ra_ide_api/src/completion/complete_pattern.rs b/crates/ra_ide_api/src/completion/complete_pattern.rs
index 0ef248687..74833a756 100644
--- a/crates/ra_ide_api/src/completion/complete_pattern.rs
+++ b/crates/ra_ide_api/src/completion/complete_pattern.rs
@@ -53,35 +53,37 @@ mod tests {
53 } 53 }
54 ", 54 ",
55 ); 55 );
56 assert_debug_snapshot_matches!(completions, @r###"[ 56 assert_debug_snapshot_matches!(completions, @r###"
57 CompletionItem { 57 â‹®[
58 label: "E", 58 â‹® CompletionItem {
59 source_range: [246; 246), 59 â‹® label: "E",
60 delete: [246; 246), 60 â‹® source_range: [246; 246),
61 insert: "E", 61 â‹® delete: [246; 246),
62 kind: Enum 62 â‹® insert: "E",
63 }, 63 â‹® kind: Enum,
64 CompletionItem { 64 â‹® },
65 label: "X", 65 â‹® CompletionItem {
66 source_range: [246; 246), 66 â‹® label: "X",
67 delete: [246; 246), 67 â‹® source_range: [246; 246),
68 insert: "X", 68 â‹® delete: [246; 246),
69 kind: EnumVariant 69 â‹® insert: "X",
70 }, 70 â‹® kind: EnumVariant,
71 CompletionItem { 71 â‹® },
72 label: "Z", 72 â‹® CompletionItem {
73 source_range: [246; 246), 73 â‹® label: "Z",
74 delete: [246; 246), 74 â‹® source_range: [246; 246),
75 insert: "Z", 75 â‹® delete: [246; 246),
76 kind: Const 76 â‹® insert: "Z",
77 }, 77 â‹® kind: Const,
78 CompletionItem { 78 â‹® },
79 label: "m", 79 â‹® CompletionItem {
80 source_range: [246; 246), 80 â‹® label: "m",
81 delete: [246; 246), 81 â‹® source_range: [246; 246),
82 insert: "m", 82 â‹® delete: [246; 246),
83 kind: Module 83 â‹® insert: "m",
84 } 84 â‹® kind: Module,
85]"###); 85 â‹® },
86 â‹®]
87 "###);
86 } 88 }
87} 89}
diff --git a/crates/ra_ide_api/src/completion/complete_struct_literal.rs b/crates/ra_ide_api/src/completion/complete_struct_literal.rs
index a00c1b60b..1eeea58f6 100644
--- a/crates/ra_ide_api/src/completion/complete_struct_literal.rs
+++ b/crates/ra_ide_api/src/completion/complete_struct_literal.rs
@@ -44,15 +44,17 @@ mod tests {
44 } 44 }
45 ", 45 ",
46 ); 46 );
47 assert_debug_snapshot_matches!(completions, @r###"[ 47 assert_debug_snapshot_matches!(completions, @r###"
48 CompletionItem { 48 â‹®[
49 label: "the_field", 49 â‹® CompletionItem {
50 source_range: [83; 86), 50 â‹® label: "the_field",
51 delete: [83; 86), 51 â‹® source_range: [83; 86),
52 insert: "the_field", 52 â‹® delete: [83; 86),
53 kind: Field, 53 â‹® insert: "the_field",
54 detail: "u32" 54 â‹® kind: Field,
55 } 55 â‹® detail: "u32",
56]"###); 56 â‹® },
57 â‹®]
58 "###);
57 } 59 }
58} 60}
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__bindings_from_for.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__bindings_from_for.snap
index bd7f99f71..e9b717a45 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__bindings_from_for.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__bindings_from_for.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.132341107Z" 2created: "2019-05-23T22:23:35.119822026Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -11,13 +11,13 @@ expression: kind_completions
11 delete: [83; 83), 11 delete: [83; 83),
12 insert: "quux()$0", 12 insert: "quux()$0",
13 kind: Function, 13 kind: Function,
14 detail: "fn quux()" 14 detail: "fn quux()",
15 }, 15 },
16 CompletionItem { 16 CompletionItem {
17 label: "x", 17 label: "x",
18 source_range: [83; 83), 18 source_range: [83; 83),
19 delete: [83; 83), 19 delete: [83; 83),
20 insert: "x", 20 insert: "x",
21 kind: Binding 21 kind: Binding,
22 } 22 },
23] 23]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__bindings_from_if_let.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__bindings_from_if_let.snap
index 3b374c4de..2a22201ad 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__bindings_from_if_let.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__bindings_from_if_let.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.126809445Z" 2created: "2019-05-23T22:23:35.122168608Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,14 +10,14 @@ expression: kind_completions
10 source_range: [214; 214), 10 source_range: [214; 214),
11 delete: [214; 214), 11 delete: [214; 214),
12 insert: "a", 12 insert: "a",
13 kind: Binding 13 kind: Binding,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "b", 16 label: "b",
17 source_range: [214; 214), 17 source_range: [214; 214),
18 delete: [214; 214), 18 delete: [214; 214),
19 insert: "b", 19 insert: "b",
20 kind: Binding 20 kind: Binding,
21 }, 21 },
22 CompletionItem { 22 CompletionItem {
23 label: "quux", 23 label: "quux",
@@ -25,6 +25,6 @@ expression: kind_completions
25 delete: [214; 214), 25 delete: [214; 214),
26 insert: "quux()$0", 26 insert: "quux()$0",
27 kind: Function, 27 kind: Function,
28 detail: "fn quux()" 28 detail: "fn quux()",
29 } 29 },
30] 30]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__bindings_from_let.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__bindings_from_let.snap
index 173f5319a..b9a5dc9c8 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__bindings_from_let.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__bindings_from_let.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.126696322Z" 2created: "2019-05-23T22:23:35.122797188Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -11,20 +11,20 @@ expression: kind_completions
11 delete: [79; 79), 11 delete: [79; 79),
12 insert: "quux($0)", 12 insert: "quux($0)",
13 kind: Function, 13 kind: Function,
14 detail: "fn quux(x: i32)" 14 detail: "fn quux(x: i32)",
15 }, 15 },
16 CompletionItem { 16 CompletionItem {
17 label: "x", 17 label: "x",
18 source_range: [79; 79), 18 source_range: [79; 79),
19 delete: [79; 79), 19 delete: [79; 79),
20 insert: "x", 20 insert: "x",
21 kind: Binding 21 kind: Binding,
22 }, 22 },
23 CompletionItem { 23 CompletionItem {
24 label: "y", 24 label: "y",
25 source_range: [79; 79), 25 source_range: [79; 79),
26 delete: [79; 79), 26 delete: [79; 79),
27 insert: "y", 27 insert: "y",
28 kind: Binding 28 kind: Binding,
29 } 29 },
30] 30]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__completes_break_and_continue_in_loops1.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__completes_break_and_continue_in_loops1.snap
index 42ff02469..b6f95c1ff 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__completes_break_and_continue_in_loops1.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__completes_break_and_continue_in_loops1.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:23.976673150Z" 2created: "2019-05-23T22:23:35.067956470Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,48 +10,48 @@ expression: kind_completions
10 source_range: [55; 55), 10 source_range: [55; 55),
11 delete: [55; 55), 11 delete: [55; 55),
12 insert: "break;", 12 insert: "break;",
13 kind: Keyword 13 kind: Keyword,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "continue", 16 label: "continue",
17 source_range: [55; 55), 17 source_range: [55; 55),
18 delete: [55; 55), 18 delete: [55; 55),
19 insert: "continue;", 19 insert: "continue;",
20 kind: Keyword 20 kind: Keyword,
21 }, 21 },
22 CompletionItem { 22 CompletionItem {
23 label: "if", 23 label: "if",
24 source_range: [55; 55), 24 source_range: [55; 55),
25 delete: [55; 55), 25 delete: [55; 55),
26 insert: "if $0 {}", 26 insert: "if $0 {}",
27 kind: Keyword 27 kind: Keyword,
28 }, 28 },
29 CompletionItem { 29 CompletionItem {
30 label: "loop", 30 label: "loop",
31 source_range: [55; 55), 31 source_range: [55; 55),
32 delete: [55; 55), 32 delete: [55; 55),
33 insert: "loop {$0}", 33 insert: "loop {$0}",
34 kind: Keyword 34 kind: Keyword,
35 }, 35 },
36 CompletionItem { 36 CompletionItem {
37 label: "match", 37 label: "match",
38 source_range: [55; 55), 38 source_range: [55; 55),
39 delete: [55; 55), 39 delete: [55; 55),
40 insert: "match $0 {}", 40 insert: "match $0 {}",
41 kind: Keyword 41 kind: Keyword,
42 }, 42 },
43 CompletionItem { 43 CompletionItem {
44 label: "return", 44 label: "return",
45 source_range: [55; 55), 45 source_range: [55; 55),
46 delete: [55; 55), 46 delete: [55; 55),
47 insert: "return $0;", 47 insert: "return $0;",
48 kind: Keyword 48 kind: Keyword,
49 }, 49 },
50 CompletionItem { 50 CompletionItem {
51 label: "while", 51 label: "while",
52 source_range: [55; 55), 52 source_range: [55; 55),
53 delete: [55; 55), 53 delete: [55; 55),
54 insert: "while $0 {}", 54 insert: "while $0 {}",
55 kind: Keyword 55 kind: Keyword,
56 } 56 },
57] 57]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__completes_break_and_continue_in_loops2.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__completes_break_and_continue_in_loops2.snap
index 057ff8a7a..9b37478ef 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__completes_break_and_continue_in_loops2.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__completes_break_and_continue_in_loops2.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.068967569Z" 2created: "2019-05-23T22:44:10.859967190Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,34 +10,34 @@ expression: kind_completions
10 source_range: [60; 60), 10 source_range: [60; 60),
11 delete: [60; 60), 11 delete: [60; 60),
12 insert: "if $0 {}", 12 insert: "if $0 {}",
13 kind: Keyword 13 kind: Keyword,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "loop", 16 label: "loop",
17 source_range: [60; 60), 17 source_range: [60; 60),
18 delete: [60; 60), 18 delete: [60; 60),
19 insert: "loop {$0}", 19 insert: "loop {$0}",
20 kind: Keyword 20 kind: Keyword,
21 }, 21 },
22 CompletionItem { 22 CompletionItem {
23 label: "match", 23 label: "match",
24 source_range: [60; 60), 24 source_range: [60; 60),
25 delete: [60; 60), 25 delete: [60; 60),
26 insert: "match $0 {}", 26 insert: "match $0 {}",
27 kind: Keyword 27 kind: Keyword,
28 }, 28 },
29 CompletionItem { 29 CompletionItem {
30 label: "return", 30 label: "return",
31 source_range: [60; 60), 31 source_range: [60; 60),
32 delete: [60; 60), 32 delete: [60; 60),
33 insert: "return $0;", 33 insert: "return $0;",
34 kind: Keyword 34 kind: Keyword,
35 }, 35 },
36 CompletionItem { 36 CompletionItem {
37 label: "while", 37 label: "while",
38 source_range: [60; 60), 38 source_range: [60; 60),
39 delete: [60; 60), 39 delete: [60; 60),
40 insert: "while $0 {}", 40 insert: "while $0 {}",
41 kind: Keyword 41 kind: Keyword,
42 } 42 },
43] 43]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__completes_prelude.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__completes_prelude.snap
index 16126ee77..b339c6c5f 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__completes_prelude.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__completes_prelude.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.180517434Z" 2created: "2019-05-23T22:23:35.139262926Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,7 +10,7 @@ expression: kind_completions
10 source_range: [18; 18), 10 source_range: [18; 18),
11 delete: [18; 18), 11 delete: [18; 18),
12 insert: "Option", 12 insert: "Option",
13 kind: Struct 13 kind: Struct,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "foo", 16 label: "foo",
@@ -18,13 +18,13 @@ expression: kind_completions
18 delete: [18; 18), 18 delete: [18; 18),
19 insert: "foo()$0", 19 insert: "foo()$0",
20 kind: Function, 20 kind: Function,
21 detail: "fn foo()" 21 detail: "fn foo()",
22 }, 22 },
23 CompletionItem { 23 CompletionItem {
24 label: "std", 24 label: "std",
25 source_range: [18; 18), 25 source_range: [18; 18),
26 delete: [18; 18), 26 delete: [18; 18),
27 insert: "std", 27 insert: "std",
28 kind: Module 28 kind: Module,
29 } 29 },
30] 30]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__completes_use_paths_across_crates.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__completes_use_paths_across_crates.snap
index 2420e7744..113deafb1 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__completes_use_paths_across_crates.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__completes_use_paths_across_crates.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.118807216Z" 2created: "2019-05-23T22:23:35.108690807Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,6 +10,6 @@ expression: kind_completions
10 source_range: [9; 9), 10 source_range: [9; 9),
11 delete: [9; 9), 11 delete: [9; 9),
12 insert: "bar", 12 insert: "bar",
13 kind: Module 13 kind: Module,
14 } 14 },
15] 15]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__deeply_nested_use_tree.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__deeply_nested_use_tree.snap
index c472f7965..aacdeb763 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__deeply_nested_use_tree.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__deeply_nested_use_tree.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.044567777Z" 2created: "2019-05-23T22:23:35.085633034Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,6 +10,6 @@ expression: kind_completions
10 source_range: [23; 25), 10 source_range: [23; 25),
11 delete: [23; 25), 11 delete: [23; 25),
12 insert: "Spam", 12 insert: "Spam",
13 kind: Struct 13 kind: Struct,
14 } 14 },
15] 15]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__dont_add_semi_after_return_if_not_a_statement.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__dont_add_semi_after_return_if_not_a_statement.snap
index 97bd76c49..9d320c715 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__dont_add_semi_after_return_if_not_a_statement.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__dont_add_semi_after_return_if_not_a_statement.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:23.987788705Z" 2created: "2019-05-23T22:23:35.081993214Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,34 +10,34 @@ expression: kind_completions
10 source_range: [85; 85), 10 source_range: [85; 85),
11 delete: [85; 85), 11 delete: [85; 85),
12 insert: "if $0 {}", 12 insert: "if $0 {}",
13 kind: Keyword 13 kind: Keyword,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "loop", 16 label: "loop",
17 source_range: [85; 85), 17 source_range: [85; 85),
18 delete: [85; 85), 18 delete: [85; 85),
19 insert: "loop {$0}", 19 insert: "loop {$0}",
20 kind: Keyword 20 kind: Keyword,
21 }, 21 },
22 CompletionItem { 22 CompletionItem {
23 label: "match", 23 label: "match",
24 source_range: [85; 85), 24 source_range: [85; 85),
25 delete: [85; 85), 25 delete: [85; 85),
26 insert: "match $0 {}", 26 insert: "match $0 {}",
27 kind: Keyword 27 kind: Keyword,
28 }, 28 },
29 CompletionItem { 29 CompletionItem {
30 label: "return", 30 label: "return",
31 source_range: [85; 85), 31 source_range: [85; 85),
32 delete: [85; 85), 32 delete: [85; 85),
33 insert: "return $0", 33 insert: "return $0",
34 kind: Keyword 34 kind: Keyword,
35 }, 35 },
36 CompletionItem { 36 CompletionItem {
37 label: "while", 37 label: "while",
38 source_range: [85; 85), 38 source_range: [85; 85),
39 delete: [85; 85), 39 delete: [85; 85),
40 insert: "while $0 {}", 40 insert: "while $0 {}",
41 kind: Keyword 41 kind: Keyword,
42 } 42 },
43] 43]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__dont_render_function_parens_if_already_call.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__dont_render_function_parens_if_already_call.snap
index 1de0efb5b..46bea2ccd 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__dont_render_function_parens_if_already_call.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__dont_render_function_parens_if_already_call.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.211680376Z" 2created: "2019-05-23T22:23:35.158296242Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -11,7 +11,7 @@ expression: kind_completions
11 delete: [35; 39), 11 delete: [35; 39),
12 insert: "frobnicate", 12 insert: "frobnicate",
13 kind: Function, 13 kind: Function,
14 detail: "fn frobnicate()" 14 detail: "fn frobnicate()",
15 }, 15 },
16 CompletionItem { 16 CompletionItem {
17 label: "main", 17 label: "main",
@@ -19,6 +19,6 @@ expression: kind_completions
19 delete: [35; 39), 19 delete: [35; 39),
20 insert: "main", 20 insert: "main",
21 kind: Function, 21 kind: Function,
22 detail: "fn main()" 22 detail: "fn main()",
23 } 23 },
24] 24]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__dont_render_function_parens_if_already_call_assoc_fn.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__dont_render_function_parens_if_already_call_assoc_fn.snap
index 19375ea95..b09a6745e 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__dont_render_function_parens_if_already_call_assoc_fn.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__dont_render_function_parens_if_already_call_assoc_fn.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-24T16:33:48.008220694Z" 2created: "2019-05-23T22:44:10.920136527Z"
3creator: insta@0.6.3 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -11,6 +11,6 @@ expression: kind_completions
11 delete: [67; 69), 11 delete: [67; 69),
12 insert: "new", 12 insert: "new",
13 kind: Function, 13 kind: Function,
14 detail: "fn new() -> Foo" 14 detail: "fn new() -> Foo",
15 } 15 },
16] 16]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__dont_render_function_parens_in_use_item.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__dont_render_function_parens_in_use_item.snap
index ef77816ec..84ccc8160 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__dont_render_function_parens_in_use_item.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__dont_render_function_parens_in_use_item.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.213677341Z" 2created: "2019-05-23T22:23:35.154795561Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -11,6 +11,6 @@ expression: kind_completions
11 delete: [40; 41), 11 delete: [40; 41),
12 insert: "foo", 12 insert: "foo",
13 kind: Function, 13 kind: Function,
14 detail: "pub fn foo()" 14 detail: "pub fn foo()",
15 } 15 },
16] 16]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__dont_show_both_completions_for_shadowing.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__dont_show_both_completions_for_shadowing.snap
index 34adcda6c..57434210d 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__dont_show_both_completions_for_shadowing.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__dont_show_both_completions_for_shadowing.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-04-04T14:52:24.531844100Z" 2created: "2019-05-23T22:23:35.142044205Z"
3creator: insta@0.7.4 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,7 +10,7 @@ expression: kind_completions
10 source_range: [126; 126), 10 source_range: [126; 126),
11 delete: [126; 126), 11 delete: [126; 126),
12 insert: "bar", 12 insert: "bar",
13 kind: Binding 13 kind: Binding,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "foo", 16 label: "foo",
@@ -18,6 +18,6 @@ expression: kind_completions
18 delete: [126; 126), 18 delete: [126; 126),
19 insert: "foo()$0", 19 insert: "foo()$0",
20 kind: Function, 20 kind: Function,
21 detail: "fn foo()" 21 detail: "fn foo()",
22 } 22 },
23] 23]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__enum_variant.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__enum_variant.snap
index 1df121523..e40217ca8 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__enum_variant.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__enum_variant.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.045355450Z" 2created: "2019-05-23T22:23:35.090178265Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -13,8 +13,8 @@ expression: kind_completions
13 kind: EnumVariant, 13 kind: EnumVariant,
14 detail: "(i32)", 14 detail: "(i32)",
15 documentation: Documentation( 15 documentation: Documentation(
16 "Bar Variant with i32" 16 "Bar Variant with i32",
17 ) 17 ),
18 }, 18 },
19 CompletionItem { 19 CompletionItem {
20 label: "Foo", 20 label: "Foo",
@@ -24,7 +24,7 @@ expression: kind_completions
24 kind: EnumVariant, 24 kind: EnumVariant,
25 detail: "()", 25 detail: "()",
26 documentation: Documentation( 26 documentation: Documentation(
27 "Foo Variant" 27 "Foo Variant",
28 ) 28 ),
29 } 29 },
30] 30]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__enum_variant_with_details.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__enum_variant_with_details.snap
index daccd9fba..e09d7988a 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__enum_variant_with_details.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__enum_variant_with_details.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-04-02T07:43:12.954637543Z" 2created: "2019-05-23T22:23:35.091325331Z"
3creator: insta@0.7.4 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -13,8 +13,8 @@ expression: kind_completions
13 kind: EnumVariant, 13 kind: EnumVariant,
14 detail: "(i32, u32)", 14 detail: "(i32, u32)",
15 documentation: Documentation( 15 documentation: Documentation(
16 "Bar Variant with i32 and u32" 16 "Bar Variant with i32 and u32",
17 ) 17 ),
18 }, 18 },
19 CompletionItem { 19 CompletionItem {
20 label: "Foo", 20 label: "Foo",
@@ -24,8 +24,8 @@ expression: kind_completions
24 kind: EnumVariant, 24 kind: EnumVariant,
25 detail: "()", 25 detail: "()",
26 documentation: Documentation( 26 documentation: Documentation(
27 "Foo Variant (empty)" 27 "Foo Variant (empty)",
28 ) 28 ),
29 }, 29 },
30 CompletionItem { 30 CompletionItem {
31 label: "S", 31 label: "S",
@@ -35,7 +35,7 @@ expression: kind_completions
35 kind: EnumVariant, 35 kind: EnumVariant,
36 detail: "(S)", 36 detail: "(S)",
37 documentation: Documentation( 37 documentation: Documentation(
38 "" 38 "",
39 ) 39 ),
40 } 40 },
41] 41]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__extern_prelude.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__extern_prelude.snap
index 0d36fd603..b9449a76c 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__extern_prelude.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__extern_prelude.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.137183638Z" 2created: "2019-05-23T22:23:35.123197049Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,6 +10,6 @@ expression: kind_completions
10 source_range: [4; 4), 10 source_range: [4; 4),
11 delete: [4; 4), 11 delete: [4; 4),
12 insert: "other_crate", 12 insert: "other_crate",
13 kind: Module 13 kind: Module,
14 } 14 },
15] 15]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__generic_params.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__generic_params.snap
index 210e5a02d..eb1a4151a 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__generic_params.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__generic_params.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.143253235Z" 2created: "2019-05-23T22:23:35.123825399Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,7 +10,7 @@ expression: kind_completions
10 source_range: [44; 44), 10 source_range: [44; 44),
11 delete: [44; 44), 11 delete: [44; 44),
12 insert: "T", 12 insert: "T",
13 kind: TypeParam 13 kind: TypeParam,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "quux", 16 label: "quux",
@@ -18,6 +18,6 @@ expression: kind_completions
18 delete: [44; 44), 18 delete: [44; 44),
19 insert: "quux()$0", 19 insert: "quux()$0",
20 kind: Function, 20 kind: Function,
21 detail: "fn quux<T>()" 21 detail: "fn quux<T>()",
22 } 22 },
23] 23]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__generic_params_in_struct.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__generic_params_in_struct.snap
index ab8c30446..52f08267f 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__generic_params_in_struct.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__generic_params_in_struct.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.149424158Z" 2created: "2019-05-23T22:23:35.130778739Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,13 +10,13 @@ expression: kind_completions
10 source_range: [46; 46), 10 source_range: [46; 46),
11 delete: [46; 46), 11 delete: [46; 46),
12 insert: "T", 12 insert: "T",
13 kind: TypeParam 13 kind: TypeParam,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "X", 16 label: "X",
17 source_range: [46; 46), 17 source_range: [46; 46),
18 delete: [46; 46), 18 delete: [46; 46),
19 insert: "X", 19 insert: "X",
20 kind: Struct 20 kind: Struct,
21 } 21 },
22] 22]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__inserts_parens_for_function_calls1.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__inserts_parens_for_function_calls1.snap
index a4fc447b2..c795b9aae 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__inserts_parens_for_function_calls1.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__inserts_parens_for_function_calls1.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.224510370Z" 2created: "2019-05-23T22:23:35.156115632Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -11,7 +11,7 @@ expression: kind_completions
11 delete: [53; 56), 11 delete: [53; 56),
12 insert: "main()$0", 12 insert: "main()$0",
13 kind: Function, 13 kind: Function,
14 detail: "fn main()" 14 detail: "fn main()",
15 }, 15 },
16 CompletionItem { 16 CompletionItem {
17 label: "no_args", 17 label: "no_args",
@@ -19,6 +19,6 @@ expression: kind_completions
19 delete: [53; 56), 19 delete: [53; 56),
20 insert: "no_args()$0", 20 insert: "no_args()$0",
21 kind: Function, 21 kind: Function,
22 detail: "fn no_args()" 22 detail: "fn no_args()",
23 } 23 },
24] 24]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__inserts_parens_for_function_calls2.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__inserts_parens_for_function_calls2.snap
index b124355d5..b49a838e0 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__inserts_parens_for_function_calls2.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__inserts_parens_for_function_calls2.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.267013140Z" 2created: "2019-05-23T22:44:10.916806744Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -11,7 +11,7 @@ expression: kind_completions
11 delete: [72; 77), 11 delete: [72; 77),
12 insert: "main()$0", 12 insert: "main()$0",
13 kind: Function, 13 kind: Function,
14 detail: "fn main()" 14 detail: "fn main()",
15 }, 15 },
16 CompletionItem { 16 CompletionItem {
17 label: "with_args", 17 label: "with_args",
@@ -19,6 +19,6 @@ expression: kind_completions
19 delete: [72; 77), 19 delete: [72; 77),
20 insert: "with_args($0)", 20 insert: "with_args($0)",
21 kind: Function, 21 kind: Function,
22 detail: "fn with_args(x: i32, y: String)" 22 detail: "fn with_args(x: i32, y: String)",
23 } 23 },
24] 24]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__inserts_parens_for_function_calls3.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__inserts_parens_for_function_calls3.snap
index fec729d48..b62cb7aa1 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__inserts_parens_for_function_calls3.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__inserts_parens_for_function_calls3.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.303360770Z" 2created: "2019-05-23T22:44:40.543731193Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -11,6 +11,6 @@ expression: kind_completions
11 delete: [139; 140), 11 delete: [139; 140),
12 insert: "foo()$0", 12 insert: "foo()$0",
13 kind: Method, 13 kind: Method,
14 detail: "fn foo(&self)" 14 detail: "fn foo(&self)",
15 } 15 },
16] 16]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_function1.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_function1.snap
index 045e2a4e6..34a44bb70 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_function1.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_function1.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:23.987788720Z" 2created: "2019-05-23T22:23:35.075690846Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,34 +10,34 @@ expression: kind_completions
10 source_range: [41; 41), 10 source_range: [41; 41),
11 delete: [41; 41), 11 delete: [41; 41),
12 insert: "if $0 {}", 12 insert: "if $0 {}",
13 kind: Keyword 13 kind: Keyword,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "loop", 16 label: "loop",
17 source_range: [41; 41), 17 source_range: [41; 41),
18 delete: [41; 41), 18 delete: [41; 41),
19 insert: "loop {$0}", 19 insert: "loop {$0}",
20 kind: Keyword 20 kind: Keyword,
21 }, 21 },
22 CompletionItem { 22 CompletionItem {
23 label: "match", 23 label: "match",
24 source_range: [41; 41), 24 source_range: [41; 41),
25 delete: [41; 41), 25 delete: [41; 41),
26 insert: "match $0 {}", 26 insert: "match $0 {}",
27 kind: Keyword 27 kind: Keyword,
28 }, 28 },
29 CompletionItem { 29 CompletionItem {
30 label: "return", 30 label: "return",
31 source_range: [41; 41), 31 source_range: [41; 41),
32 delete: [41; 41), 32 delete: [41; 41),
33 insert: "return;", 33 insert: "return;",
34 kind: Keyword 34 kind: Keyword,
35 }, 35 },
36 CompletionItem { 36 CompletionItem {
37 label: "while", 37 label: "while",
38 source_range: [41; 41), 38 source_range: [41; 41),
39 delete: [41; 41), 39 delete: [41; 41),
40 insert: "while $0 {}", 40 insert: "while $0 {}",
41 kind: Keyword 41 kind: Keyword,
42 } 42 },
43] 43]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_function2.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_function2.snap
index b08efa522..ac744f362 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_function2.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_function2.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:23.984740354Z" 2created: "2019-05-23T22:23:35.068799431Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,48 +10,48 @@ expression: kind_completions
10 source_range: [92; 92), 10 source_range: [92; 92),
11 delete: [92; 92), 11 delete: [92; 92),
12 insert: "else {$0}", 12 insert: "else {$0}",
13 kind: Keyword 13 kind: Keyword,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "else if", 16 label: "else if",
17 source_range: [92; 92), 17 source_range: [92; 92),
18 delete: [92; 92), 18 delete: [92; 92),
19 insert: "else if $0 {}", 19 insert: "else if $0 {}",
20 kind: Keyword 20 kind: Keyword,
21 }, 21 },
22 CompletionItem { 22 CompletionItem {
23 label: "if", 23 label: "if",
24 source_range: [92; 92), 24 source_range: [92; 92),
25 delete: [92; 92), 25 delete: [92; 92),
26 insert: "if $0 {}", 26 insert: "if $0 {}",
27 kind: Keyword 27 kind: Keyword,
28 }, 28 },
29 CompletionItem { 29 CompletionItem {
30 label: "loop", 30 label: "loop",
31 source_range: [92; 92), 31 source_range: [92; 92),
32 delete: [92; 92), 32 delete: [92; 92),
33 insert: "loop {$0}", 33 insert: "loop {$0}",
34 kind: Keyword 34 kind: Keyword,
35 }, 35 },
36 CompletionItem { 36 CompletionItem {
37 label: "match", 37 label: "match",
38 source_range: [92; 92), 38 source_range: [92; 92),
39 delete: [92; 92), 39 delete: [92; 92),
40 insert: "match $0 {}", 40 insert: "match $0 {}",
41 kind: Keyword 41 kind: Keyword,
42 }, 42 },
43 CompletionItem { 43 CompletionItem {
44 label: "return", 44 label: "return",
45 source_range: [92; 92), 45 source_range: [92; 92),
46 delete: [92; 92), 46 delete: [92; 92),
47 insert: "return;", 47 insert: "return;",
48 kind: Keyword 48 kind: Keyword,
49 }, 49 },
50 CompletionItem { 50 CompletionItem {
51 label: "while", 51 label: "while",
52 source_range: [92; 92), 52 source_range: [92; 92),
53 delete: [92; 92), 53 delete: [92; 92),
54 insert: "while $0 {}", 54 insert: "while $0 {}",
55 kind: Keyword 55 kind: Keyword,
56 } 56 },
57] 57]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_function3.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_function3.snap
index e2b9214fb..1098ecf54 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_function3.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_function3.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.049699338Z" 2created: "2019-05-23T22:23:35.085655258Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,34 +10,34 @@ expression: kind_completions
10 source_range: [48; 48), 10 source_range: [48; 48),
11 delete: [48; 48), 11 delete: [48; 48),
12 insert: "if $0 {}", 12 insert: "if $0 {}",
13 kind: Keyword 13 kind: Keyword,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "loop", 16 label: "loop",
17 source_range: [48; 48), 17 source_range: [48; 48),
18 delete: [48; 48), 18 delete: [48; 48),
19 insert: "loop {$0}", 19 insert: "loop {$0}",
20 kind: Keyword 20 kind: Keyword,
21 }, 21 },
22 CompletionItem { 22 CompletionItem {
23 label: "match", 23 label: "match",
24 source_range: [48; 48), 24 source_range: [48; 48),
25 delete: [48; 48), 25 delete: [48; 48),
26 insert: "match $0 {}", 26 insert: "match $0 {}",
27 kind: Keyword 27 kind: Keyword,
28 }, 28 },
29 CompletionItem { 29 CompletionItem {
30 label: "return", 30 label: "return",
31 source_range: [48; 48), 31 source_range: [48; 48),
32 delete: [48; 48), 32 delete: [48; 48),
33 insert: "return $0;", 33 insert: "return $0;",
34 kind: Keyword 34 kind: Keyword,
35 }, 35 },
36 CompletionItem { 36 CompletionItem {
37 label: "while", 37 label: "while",
38 source_range: [48; 48), 38 source_range: [48; 48),
39 delete: [48; 48), 39 delete: [48; 48),
40 insert: "while $0 {}", 40 insert: "while $0 {}",
41 kind: Keyword 41 kind: Keyword,
42 } 42 },
43] 43]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_function4.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_function4.snap
index 1ea7eb5ce..3c5eca1ba 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_function4.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_function4.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.090949782Z" 2created: "2019-05-23T22:44:10.869539856Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,34 +10,34 @@ expression: kind_completions
10 source_range: [41; 41), 10 source_range: [41; 41),
11 delete: [41; 41), 11 delete: [41; 41),
12 insert: "if $0 {}", 12 insert: "if $0 {}",
13 kind: Keyword 13 kind: Keyword,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "loop", 16 label: "loop",
17 source_range: [41; 41), 17 source_range: [41; 41),
18 delete: [41; 41), 18 delete: [41; 41),
19 insert: "loop {$0}", 19 insert: "loop {$0}",
20 kind: Keyword 20 kind: Keyword,
21 }, 21 },
22 CompletionItem { 22 CompletionItem {
23 label: "match", 23 label: "match",
24 source_range: [41; 41), 24 source_range: [41; 41),
25 delete: [41; 41), 25 delete: [41; 41),
26 insert: "match $0 {}", 26 insert: "match $0 {}",
27 kind: Keyword 27 kind: Keyword,
28 }, 28 },
29 CompletionItem { 29 CompletionItem {
30 label: "return", 30 label: "return",
31 source_range: [41; 41), 31 source_range: [41; 41),
32 delete: [41; 41), 32 delete: [41; 41),
33 insert: "return;", 33 insert: "return;",
34 kind: Keyword 34 kind: Keyword,
35 }, 35 },
36 CompletionItem { 36 CompletionItem {
37 label: "while", 37 label: "while",
38 source_range: [41; 41), 38 source_range: [41; 41),
39 delete: [41; 41), 39 delete: [41; 41),
40 insert: "while $0 {}", 40 insert: "while $0 {}",
41 kind: Keyword 41 kind: Keyword,
42 } 42 },
43] 43]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_use_stmt1.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_use_stmt1.snap
index 76d5daf55..71d7e9de8 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_use_stmt1.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_use_stmt1.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:23.988755424Z" 2created: "2019-05-23T22:23:35.066687241Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,20 +10,20 @@ expression: kind_completions
10 source_range: [17; 17), 10 source_range: [17; 17),
11 delete: [17; 17), 11 delete: [17; 17),
12 insert: "crate::", 12 insert: "crate::",
13 kind: Keyword 13 kind: Keyword,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "self", 16 label: "self",
17 source_range: [17; 17), 17 source_range: [17; 17),
18 delete: [17; 17), 18 delete: [17; 17),
19 insert: "self", 19 insert: "self",
20 kind: Keyword 20 kind: Keyword,
21 }, 21 },
22 CompletionItem { 22 CompletionItem {
23 label: "super", 23 label: "super",
24 source_range: [17; 17), 24 source_range: [17; 17),
25 delete: [17; 17), 25 delete: [17; 17),
26 insert: "super::", 26 insert: "super::",
27 kind: Keyword 27 kind: Keyword,
28 } 28 },
29] 29]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_use_stmt2.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_use_stmt2.snap
index ee8bf4ca1..ad156fb44 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_use_stmt2.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_use_stmt2.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.030382527Z" 2created: "2019-05-23T22:44:10.859494330Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,13 +10,13 @@ expression: kind_completions
10 source_range: [20; 20), 10 source_range: [20; 20),
11 delete: [20; 20), 11 delete: [20; 20),
12 insert: "self", 12 insert: "self",
13 kind: Keyword 13 kind: Keyword,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "super", 16 label: "super",
17 source_range: [20; 20), 17 source_range: [20; 20),
18 delete: [20; 20), 18 delete: [20; 20),
19 insert: "super::", 19 insert: "super::",
20 kind: Keyword 20 kind: Keyword,
21 } 21 },
22] 22]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_use_stmt3.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_use_stmt3.snap
index b44db276e..e7b11d532 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_use_stmt3.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__keywords_in_use_stmt3.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.073607133Z" 2created: "2019-05-23T22:44:40.506690279Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,13 +10,13 @@ expression: kind_completions
10 source_range: [24; 24), 10 source_range: [24; 24),
11 delete: [24; 24), 11 delete: [24; 24),
12 insert: "self", 12 insert: "self",
13 kind: Keyword 13 kind: Keyword,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "super", 16 label: "super",
17 source_range: [24; 24), 17 source_range: [24; 24),
18 delete: [24; 24), 18 delete: [24; 24),
19 insert: "super::", 19 insert: "super::",
20 kind: Keyword 20 kind: Keyword,
21 } 21 },
22] 22]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__last_return_in_block_has_semi1.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__last_return_in_block_has_semi1.snap
index f220d35c2..e7069dc0c 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__last_return_in_block_has_semi1.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__last_return_in_block_has_semi1.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:23.989188654Z" 2created: "2019-05-23T22:23:35.082403612Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,34 +10,34 @@ expression: kind_completions
10 source_range: [83; 83), 10 source_range: [83; 83),
11 delete: [83; 83), 11 delete: [83; 83),
12 insert: "if $0 {}", 12 insert: "if $0 {}",
13 kind: Keyword 13 kind: Keyword,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "loop", 16 label: "loop",
17 source_range: [83; 83), 17 source_range: [83; 83),
18 delete: [83; 83), 18 delete: [83; 83),
19 insert: "loop {$0}", 19 insert: "loop {$0}",
20 kind: Keyword 20 kind: Keyword,
21 }, 21 },
22 CompletionItem { 22 CompletionItem {
23 label: "match", 23 label: "match",
24 source_range: [83; 83), 24 source_range: [83; 83),
25 delete: [83; 83), 25 delete: [83; 83),
26 insert: "match $0 {}", 26 insert: "match $0 {}",
27 kind: Keyword 27 kind: Keyword,
28 }, 28 },
29 CompletionItem { 29 CompletionItem {
30 label: "return", 30 label: "return",
31 source_range: [83; 83), 31 source_range: [83; 83),
32 delete: [83; 83), 32 delete: [83; 83),
33 insert: "return $0;", 33 insert: "return $0;",
34 kind: Keyword 34 kind: Keyword,
35 }, 35 },
36 CompletionItem { 36 CompletionItem {
37 label: "while", 37 label: "while",
38 source_range: [83; 83), 38 source_range: [83; 83),
39 delete: [83; 83), 39 delete: [83; 83),
40 insert: "while $0 {}", 40 insert: "while $0 {}",
41 kind: Keyword 41 kind: Keyword,
42 } 42 },
43] 43]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__last_return_in_block_has_semi2.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__last_return_in_block_has_semi2.snap
index d2093acdf..47beb904b 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__last_return_in_block_has_semi2.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__last_return_in_block_has_semi2.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.036383875Z" 2created: "2019-05-23T22:44:10.871868390Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,34 +10,34 @@ expression: kind_completions
10 source_range: [83; 83), 10 source_range: [83; 83),
11 delete: [83; 83), 11 delete: [83; 83),
12 insert: "if $0 {}", 12 insert: "if $0 {}",
13 kind: Keyword 13 kind: Keyword,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "loop", 16 label: "loop",
17 source_range: [83; 83), 17 source_range: [83; 83),
18 delete: [83; 83), 18 delete: [83; 83),
19 insert: "loop {$0}", 19 insert: "loop {$0}",
20 kind: Keyword 20 kind: Keyword,
21 }, 21 },
22 CompletionItem { 22 CompletionItem {
23 label: "match", 23 label: "match",
24 source_range: [83; 83), 24 source_range: [83; 83),
25 delete: [83; 83), 25 delete: [83; 83),
26 insert: "match $0 {}", 26 insert: "match $0 {}",
27 kind: Keyword 27 kind: Keyword,
28 }, 28 },
29 CompletionItem { 29 CompletionItem {
30 label: "return", 30 label: "return",
31 source_range: [83; 83), 31 source_range: [83; 83),
32 delete: [83; 83), 32 delete: [83; 83),
33 insert: "return $0;", 33 insert: "return $0;",
34 kind: Keyword 34 kind: Keyword,
35 }, 35 },
36 CompletionItem { 36 CompletionItem {
37 label: "while", 37 label: "while",
38 source_range: [83; 83), 38 source_range: [83; 83),
39 delete: [83; 83), 39 delete: [83; 83),
40 insert: "while $0 {}", 40 insert: "while $0 {}",
41 kind: Keyword 41 kind: Keyword,
42 } 42 },
43] 43]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__mod_with_docs.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__mod_with_docs.snap
index 1da3c3ba2..f2b26e393 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__mod_with_docs.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__mod_with_docs.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.066918191Z" 2created: "2019-05-23T22:23:35.093689514Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -12,7 +12,7 @@ expression: kind_completions
12 insert: "my", 12 insert: "my",
13 kind: Module, 13 kind: Module,
14 documentation: Documentation( 14 documentation: Documentation(
15 "Some simple\ndocs describing `mod my`." 15 "Some simple\ndocs describing `mod my`.",
16 ) 16 ),
17 } 17 },
18] 18]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__module_items.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__module_items.snap
index 86bc8679d..cee4898c3 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__module_items.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__module_items.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.161888678Z" 2created: "2019-05-23T22:23:35.133106898Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,14 +10,14 @@ expression: kind_completions
10 source_range: [89; 89), 10 source_range: [89; 89),
11 delete: [89; 89), 11 delete: [89; 89),
12 insert: "Baz", 12 insert: "Baz",
13 kind: Enum 13 kind: Enum,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "Foo", 16 label: "Foo",
17 source_range: [89; 89), 17 source_range: [89; 89),
18 delete: [89; 89), 18 delete: [89; 89),
19 insert: "Foo", 19 insert: "Foo",
20 kind: Struct 20 kind: Struct,
21 }, 21 },
22 CompletionItem { 22 CompletionItem {
23 label: "quux", 23 label: "quux",
@@ -25,6 +25,6 @@ expression: kind_completions
25 delete: [89; 89), 25 delete: [89; 89),
26 insert: "quux()$0", 26 insert: "quux()$0",
27 kind: Function, 27 kind: Function,
28 detail: "fn quux()" 28 detail: "fn quux()",
29 } 29 },
30] 30]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__module_items_in_nested_modules.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__module_items_in_nested_modules.snap
index 9f796b7ca..ce18e5bb7 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__module_items_in_nested_modules.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__module_items_in_nested_modules.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.180517419Z" 2created: "2019-05-23T22:23:35.134417551Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,7 +10,7 @@ expression: kind_completions
10 source_range: [101; 101), 10 source_range: [101; 101),
11 delete: [101; 101), 11 delete: [101; 101),
12 insert: "Bar", 12 insert: "Bar",
13 kind: Struct 13 kind: Struct,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "quux", 16 label: "quux",
@@ -18,6 +18,6 @@ expression: kind_completions
18 delete: [101; 101), 18 delete: [101; 101),
19 insert: "quux()$0", 19 insert: "quux()$0",
20 kind: Function, 20 kind: Function,
21 detail: "fn quux()" 21 detail: "fn quux()",
22 } 22 },
23] 23]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__nested_use_tree.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__nested_use_tree.snap
index 4920e500e..4c143d28e 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__nested_use_tree.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__nested_use_tree.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.085605313Z" 2created: "2019-05-23T22:23:35.099358768Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,13 +10,13 @@ expression: kind_completions
10 source_range: [12; 14), 10 source_range: [12; 14),
11 delete: [12; 14), 11 delete: [12; 14),
12 insert: "Spam", 12 insert: "Spam",
13 kind: Struct 13 kind: Struct,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "foo", 16 label: "foo",
17 source_range: [12; 14), 17 source_range: [12; 14),
18 delete: [12; 14), 18 delete: [12; 14),
19 insert: "foo", 19 insert: "foo",
20 kind: Module 20 kind: Module,
21 } 21 },
22] 22]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__no_semi_after_break_continue_in_expr.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__no_semi_after_break_continue_in_expr.snap
index 038e7f402..22e25fe3d 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__no_semi_after_break_continue_in_expr.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__no_semi_after_break_continue_in_expr.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:23.999953358Z" 2created: "2019-05-23T22:23:35.085365816Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,48 +10,48 @@ expression: kind_completions
10 source_range: [106; 108), 10 source_range: [106; 108),
11 delete: [106; 108), 11 delete: [106; 108),
12 insert: "break", 12 insert: "break",
13 kind: Keyword 13 kind: Keyword,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "continue", 16 label: "continue",
17 source_range: [106; 108), 17 source_range: [106; 108),
18 delete: [106; 108), 18 delete: [106; 108),
19 insert: "continue", 19 insert: "continue",
20 kind: Keyword 20 kind: Keyword,
21 }, 21 },
22 CompletionItem { 22 CompletionItem {
23 label: "if", 23 label: "if",
24 source_range: [106; 108), 24 source_range: [106; 108),
25 delete: [106; 108), 25 delete: [106; 108),
26 insert: "if $0 {}", 26 insert: "if $0 {}",
27 kind: Keyword 27 kind: Keyword,
28 }, 28 },
29 CompletionItem { 29 CompletionItem {
30 label: "loop", 30 label: "loop",
31 source_range: [106; 108), 31 source_range: [106; 108),
32 delete: [106; 108), 32 delete: [106; 108),
33 insert: "loop {$0}", 33 insert: "loop {$0}",
34 kind: Keyword 34 kind: Keyword,
35 }, 35 },
36 CompletionItem { 36 CompletionItem {
37 label: "match", 37 label: "match",
38 source_range: [106; 108), 38 source_range: [106; 108),
39 delete: [106; 108), 39 delete: [106; 108),
40 insert: "match $0 {}", 40 insert: "match $0 {}",
41 kind: Keyword 41 kind: Keyword,
42 }, 42 },
43 CompletionItem { 43 CompletionItem {
44 label: "return", 44 label: "return",
45 source_range: [106; 108), 45 source_range: [106; 108),
46 delete: [106; 108), 46 delete: [106; 108),
47 insert: "return", 47 insert: "return",
48 kind: Keyword 48 kind: Keyword,
49 }, 49 },
50 CompletionItem { 50 CompletionItem {
51 label: "while", 51 label: "while",
52 source_range: [106; 108), 52 source_range: [106; 108),
53 delete: [106; 108), 53 delete: [106; 108),
54 insert: "while $0 {}", 54 insert: "while $0 {}",
55 kind: Keyword 55 kind: Keyword,
56 } 56 },
57] 57]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__postfix_completion_works_for_trivial_path_expression.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__postfix_completion_works_for_trivial_path_expression.snap
index 3bbc9e3c4..fcb292596 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__postfix_completion_works_for_trivial_path_expression.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__postfix_completion_works_for_trivial_path_expression.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-04-22T07:37:13.981826301Z" 2created: "2019-05-23T22:23:35.118738523Z"
3creator: insta@0.7.4 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,48 +10,48 @@ expression: kind_completions
10 source_range: [76; 76), 10 source_range: [76; 76),
11 delete: [72; 76), 11 delete: [72; 76),
12 insert: "dbg!(bar)", 12 insert: "dbg!(bar)",
13 detail: "dbg!(expr)" 13 detail: "dbg!(expr)",
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "if", 16 label: "if",
17 source_range: [76; 76), 17 source_range: [76; 76),
18 delete: [72; 76), 18 delete: [72; 76),
19 insert: "if bar {$0}", 19 insert: "if bar {$0}",
20 detail: "if expr {}" 20 detail: "if expr {}",
21 }, 21 },
22 CompletionItem { 22 CompletionItem {
23 label: "match", 23 label: "match",
24 source_range: [76; 76), 24 source_range: [76; 76),
25 delete: [72; 76), 25 delete: [72; 76),
26 insert: "match bar {\n ${1:_} => {$0\\},\n}", 26 insert: "match bar {\n ${1:_} => {$0\\},\n}",
27 detail: "match expr {}" 27 detail: "match expr {}",
28 }, 28 },
29 CompletionItem { 29 CompletionItem {
30 label: "not", 30 label: "not",
31 source_range: [76; 76), 31 source_range: [76; 76),
32 delete: [72; 76), 32 delete: [72; 76),
33 insert: "!bar", 33 insert: "!bar",
34 detail: "!expr" 34 detail: "!expr",
35 }, 35 },
36 CompletionItem { 36 CompletionItem {
37 label: "ref", 37 label: "ref",
38 source_range: [76; 76), 38 source_range: [76; 76),
39 delete: [72; 76), 39 delete: [72; 76),
40 insert: "&bar", 40 insert: "&bar",
41 detail: "&expr" 41 detail: "&expr",
42 }, 42 },
43 CompletionItem { 43 CompletionItem {
44 label: "refm", 44 label: "refm",
45 source_range: [76; 76), 45 source_range: [76; 76),
46 delete: [72; 76), 46 delete: [72; 76),
47 insert: "&mut bar", 47 insert: "&mut bar",
48 detail: "&mut expr" 48 detail: "&mut expr",
49 }, 49 },
50 CompletionItem { 50 CompletionItem {
51 label: "while", 51 label: "while",
52 source_range: [76; 76), 52 source_range: [76; 76),
53 delete: [72; 76), 53 delete: [72; 76),
54 insert: "while bar {\n$0\n}", 54 insert: "while bar {\n$0\n}",
55 detail: "while expr {}" 55 detail: "while expr {}",
56 } 56 },
57] 57]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__return_type.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__return_type.snap
index ff36df707..16dd18431 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__return_type.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__return_type.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-04-04T14:52:24.525395600Z" 2created: "2019-05-23T22:23:35.140648630Z"
3creator: insta@0.7.4 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,7 +10,7 @@ expression: kind_completions
10 source_range: [47; 47), 10 source_range: [47; 47),
11 delete: [47; 47), 11 delete: [47; 47),
12 insert: "Foo", 12 insert: "Foo",
13 kind: Struct 13 kind: Struct,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "x", 16 label: "x",
@@ -18,6 +18,6 @@ expression: kind_completions
18 delete: [47; 47), 18 delete: [47; 47),
19 insert: "x()$0", 19 insert: "x()$0",
20 kind: Function, 20 kind: Function,
21 detail: "fn x()" 21 detail: "fn x()",
22 } 22 },
23] 23]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__self_in_methods.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__self_in_methods.snap
index baf12cae1..e1af94870 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__self_in_methods.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__self_in_methods.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.174038680Z" 2created: "2019-05-23T22:23:35.141900902Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,13 +10,13 @@ expression: kind_completions
10 source_range: [25; 25), 10 source_range: [25; 25),
11 delete: [25; 25), 11 delete: [25; 25),
12 insert: "Self", 12 insert: "Self",
13 kind: TypeParam 13 kind: TypeParam,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "self", 16 label: "self",
17 source_range: [25; 25), 17 source_range: [25; 25),
18 delete: [25; 25), 18 delete: [25; 25),
19 insert: "self", 19 insert: "self",
20 kind: Binding 20 kind: Binding,
21 } 21 },
22] 22]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__snippets_in_expressions.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__snippets_in_expressions.snap
index fce2d6479..6f41bf76f 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__snippets_in_expressions.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__snippets_in_expressions.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.191576723Z" 2created: "2019-05-23T22:23:35.141901047Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,13 +10,13 @@ expression: kind_completions
10 source_range: [17; 17), 10 source_range: [17; 17),
11 delete: [17; 17), 11 delete: [17; 17),
12 insert: "eprintln!(\"$0 = {:?}\", $0);", 12 insert: "eprintln!(\"$0 = {:?}\", $0);",
13 kind: Snippet 13 kind: Snippet,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "ppd", 16 label: "ppd",
17 source_range: [17; 17), 17 source_range: [17; 17),
18 delete: [17; 17), 18 delete: [17; 17),
19 insert: "eprintln!(\"$0 = {:#?}\", $0);", 19 insert: "eprintln!(\"$0 = {:#?}\", $0);",
20 kind: Snippet 20 kind: Snippet,
21 } 21 },
22] 22]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__snippets_in_items.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__snippets_in_items.snap
index d2b1a5f0e..1eb0adebe 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__snippets_in_items.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__snippets_in_items.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.187670733Z" 2created: "2019-05-23T22:23:35.149234118Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -11,13 +11,13 @@ expression: kind_completions
11 delete: [66; 66), 11 delete: [66; 66),
12 insert: "#[test]\nfn ${1:feature}() {\n $0\n}", 12 insert: "#[test]\nfn ${1:feature}() {\n $0\n}",
13 kind: Snippet, 13 kind: Snippet,
14 lookup: "tfn" 14 lookup: "tfn",
15 }, 15 },
16 CompletionItem { 16 CompletionItem {
17 label: "pub(crate)", 17 label: "pub(crate)",
18 source_range: [66; 66), 18 source_range: [66; 66),
19 delete: [66; 66), 19 delete: [66; 66),
20 insert: "pub(crate) $0", 20 insert: "pub(crate) $0",
21 kind: Snippet 21 kind: Snippet,
22 } 22 },
23] 23]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_associated_const.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_associated_const.snap
index 6ad4c5acc..f7bc6177c 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_associated_const.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_associated_const.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.093406123Z" 2created: "2019-05-23T22:23:35.101474826Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -13,7 +13,7 @@ expression: kind_completions
13 kind: Const, 13 kind: Const,
14 detail: "const C: i32 = 42;", 14 detail: "const C: i32 = 42;",
15 documentation: Documentation( 15 documentation: Documentation(
16 "An associated const" 16 "An associated const",
17 ) 17 ),
18 } 18 },
19] 19]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_associated_method.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_associated_method.snap
index 7c69eebeb..45080a802 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_associated_method.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_associated_method.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-24T16:33:47.990111169Z" 2created: "2019-05-23T22:23:35.102351365Z"
3creator: insta@0.6.3 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -13,7 +13,7 @@ expression: kind_completions
13 kind: Function, 13 kind: Function,
14 detail: "fn m()", 14 detail: "fn m()",
15 documentation: Documentation( 15 documentation: Documentation(
16 "An associated method" 16 "An associated method",
17 ) 17 ),
18 } 18 },
19] 19]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_associated_type.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_associated_type.snap
index 583bda225..f40065286 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_associated_type.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_associated_type.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.090876030Z" 2created: "2019-05-23T22:23:35.105188762Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -13,7 +13,7 @@ expression: kind_completions
13 kind: TypeAlias, 13 kind: TypeAlias,
14 detail: "type T = i32;", 14 detail: "type T = i32;",
15 documentation: Documentation( 15 documentation: Documentation(
16 "An associated type" 16 "An associated type",
17 ) 17 ),
18 } 18 },
19] 19]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__use_item_starting_with_crate.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__use_item_starting_with_crate.snap
index 34e70c35d..17e831c84 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__use_item_starting_with_crate.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__use_item_starting_with_crate.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.098574884Z" 2created: "2019-05-23T22:23:35.105336210Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,13 +10,13 @@ expression: kind_completions
10 source_range: [11; 13), 10 source_range: [11; 13),
11 delete: [11; 13), 11 delete: [11; 13),
12 insert: "Spam", 12 insert: "Spam",
13 kind: Struct 13 kind: Struct,
14 }, 14 },
15 CompletionItem { 15 CompletionItem {
16 label: "foo", 16 label: "foo",
17 source_range: [11; 13), 17 source_range: [11; 13),
18 delete: [11; 13), 18 delete: [11; 13),
19 insert: "foo", 19 insert: "foo",
20 kind: Module 20 kind: Module,
21 } 21 },
22] 22]
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__use_item_starting_with_self.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__use_item_starting_with_self.snap
index d15f1905b..d1abc6b5b 100644
--- a/crates/ra_ide_api/src/completion/snapshots/completion_item__use_item_starting_with_self.snap
+++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__use_item_starting_with_self.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-02-18T09:22:24.102063333Z" 2created: "2019-05-23T22:23:35.106923266Z"
3creator: insta@0.6.2 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/completion/completion_item.rs 4source: crates/ra_ide_api/src/completion/completion_item.rs
5expression: kind_completions 5expression: kind_completions
6--- 6---
@@ -10,6 +10,6 @@ expression: kind_completions
10 source_range: [26; 26), 10 source_range: [26; 26),
11 delete: [26; 26), 11 delete: [26; 26),
12 insert: "Bar", 12 insert: "Bar",
13 kind: Struct 13 kind: Struct,
14 } 14 },
15] 15]
diff --git a/crates/ra_ide_api/src/diagnostics.rs b/crates/ra_ide_api/src/diagnostics.rs
index 9a0eb2c14..923008708 100644
--- a/crates/ra_ide_api/src/diagnostics.rs
+++ b/crates/ra_ide_api/src/diagnostics.rs
@@ -310,28 +310,30 @@ mod tests {
310 fn test_unresolved_module_diagnostic() { 310 fn test_unresolved_module_diagnostic() {
311 let (analysis, file_id) = single_file("mod foo;"); 311 let (analysis, file_id) = single_file("mod foo;");
312 let diagnostics = analysis.diagnostics(file_id).unwrap(); 312 let diagnostics = analysis.diagnostics(file_id).unwrap();
313 assert_debug_snapshot_matches!(diagnostics, @r####"[ 313 assert_debug_snapshot_matches!(diagnostics, @r###"
314 Diagnostic { 314 â‹®[
315 message: "unresolved module", 315 â‹® Diagnostic {
316 range: [0; 8), 316 â‹® message: "unresolved module",
317 fix: Some( 317 â‹® range: [0; 8),
318 SourceChange { 318 â‹® fix: Some(
319 label: "create module", 319 â‹® SourceChange {
320 source_file_edits: [], 320 â‹® label: "create module",
321 file_system_edits: [ 321 â‹® source_file_edits: [],
322 CreateFile { 322 â‹® file_system_edits: [
323 source_root: SourceRootId( 323 â‹® CreateFile {
324 0 324 â‹® source_root: SourceRootId(
325 ), 325 â‹® 0,
326 path: "foo.rs" 326 â‹® ),
327 } 327 â‹® path: "foo.rs",
328 ], 328 â‹® },
329 cursor_position: None 329 â‹® ],
330 } 330 â‹® cursor_position: None,
331 ), 331 â‹® },
332 severity: Error 332 â‹® ),
333 } 333 â‹® severity: Error,
334]"####); 334 â‹® },
335 â‹®]
336 "###);
335 } 337 }
336 338
337 #[test] 339 #[test]
diff --git a/crates/ra_ide_api/src/display/snapshots/tests__file_structure.snap b/crates/ra_ide_api/src/display/snapshots/tests__file_structure.snap
index 32dd99484..3097977de 100644
--- a/crates/ra_ide_api/src/display/snapshots/tests__file_structure.snap
+++ b/crates/ra_ide_api/src/display/snapshots/tests__file_structure.snap
@@ -1,6 +1,6 @@
1--- 1---
2created: "2019-04-08T09:44:50.196004400Z" 2created: "2019-05-23T22:23:35.168422050Z"
3creator: insta@0.7.4 3creator: insta@0.8.1
4source: crates/ra_ide_api/src/display/structure.rs 4source: crates/ra_ide_api/src/display/structure.rs
5expression: structure 5expression: structure
6--- 6---
@@ -12,20 +12,20 @@ expression: structure
12 node_range: [1; 26), 12 node_range: [1; 26),
13 kind: STRUCT_DEF, 13 kind: STRUCT_DEF,
14 detail: None, 14 detail: None,
15 deprecated: false 15 deprecated: false,
16 }, 16 },
17 StructureNode { 17 StructureNode {
18 parent: Some( 18 parent: Some(
19 0 19 0,
20 ), 20 ),
21 label: "x", 21 label: "x",
22 navigation_range: [18; 19), 22 navigation_range: [18; 19),
23 node_range: [18; 24), 23 node_range: [18; 24),
24 kind: NAMED_FIELD_DEF, 24 kind: NAMED_FIELD_DEF,
25 detail: Some( 25 detail: Some(
26 "i32" 26 "i32",
27 ), 27 ),
28 deprecated: false 28 deprecated: false,
29 }, 29 },
30 StructureNode { 30 StructureNode {
31 parent: None, 31 parent: None,
@@ -34,46 +34,46 @@ expression: structure
34 node_range: [28; 158), 34 node_range: [28; 158),
35 kind: MODULE, 35 kind: MODULE,
36 detail: None, 36 detail: None,
37 deprecated: false 37 deprecated: false,
38 }, 38 },
39 StructureNode { 39 StructureNode {
40 parent: Some( 40 parent: Some(
41 2 41 2,
42 ), 42 ),
43 label: "bar1", 43 label: "bar1",
44 navigation_range: [43; 47), 44 navigation_range: [43; 47),
45 node_range: [40; 52), 45 node_range: [40; 52),
46 kind: FN_DEF, 46 kind: FN_DEF,
47 detail: Some( 47 detail: Some(
48 "fn()" 48 "fn()",
49 ), 49 ),
50 deprecated: false 50 deprecated: false,
51 }, 51 },
52 StructureNode { 52 StructureNode {
53 parent: Some( 53 parent: Some(
54 2 54 2,
55 ), 55 ),
56 label: "bar2", 56 label: "bar2",
57 navigation_range: [60; 64), 57 navigation_range: [60; 64),
58 node_range: [57; 81), 58 node_range: [57; 81),
59 kind: FN_DEF, 59 kind: FN_DEF,
60 detail: Some( 60 detail: Some(
61 "fn<T>(t: T) -> T" 61 "fn<T>(t: T) -> T",
62 ), 62 ),
63 deprecated: false 63 deprecated: false,
64 }, 64 },
65 StructureNode { 65 StructureNode {
66 parent: Some( 66 parent: Some(
67 2 67 2,
68 ), 68 ),
69 label: "bar3", 69 label: "bar3",
70 navigation_range: [89; 93), 70 navigation_range: [89; 93),
71 node_range: [86; 156), 71 node_range: [86; 156),
72 kind: FN_DEF, 72 kind: FN_DEF,
73 detail: Some( 73 detail: Some(
74 "fn<A, B>(a: A, b: B) -> Vec< u32 >" 74 "fn<A, B>(a: A, b: B) -> Vec< u32 >",
75 ), 75 ),
76 deprecated: false 76 deprecated: false,
77 }, 77 },
78 StructureNode { 78 StructureNode {
79 parent: None, 79 parent: None,
@@ -82,29 +82,29 @@ expression: structure
82 node_range: [160; 180), 82 node_range: [160; 180),
83 kind: ENUM_DEF, 83 kind: ENUM_DEF,
84 detail: None, 84 detail: None,
85 deprecated: false 85 deprecated: false,
86 }, 86 },
87 StructureNode { 87 StructureNode {
88 parent: Some( 88 parent: Some(
89 6 89 6,
90 ), 90 ),
91 label: "X", 91 label: "X",
92 navigation_range: [169; 170), 92 navigation_range: [169; 170),
93 node_range: [169; 170), 93 node_range: [169; 170),
94 kind: ENUM_VARIANT, 94 kind: ENUM_VARIANT,
95 detail: None, 95 detail: None,
96 deprecated: false 96 deprecated: false,
97 }, 97 },
98 StructureNode { 98 StructureNode {
99 parent: Some( 99 parent: Some(
100 6 100 6,
101 ), 101 ),
102 label: "Y", 102 label: "Y",
103 navigation_range: [172; 173), 103 navigation_range: [172; 173),
104 node_range: [172; 178), 104 node_range: [172; 178),
105 kind: ENUM_VARIANT, 105 kind: ENUM_VARIANT,
106 detail: None, 106 detail: None,
107 deprecated: false 107 deprecated: false,
108 }, 108 },
109 StructureNode { 109 StructureNode {
110 parent: None, 110 parent: None,
@@ -113,9 +113,9 @@ expression: structure
113 node_range: [181; 193), 113 node_range: [181; 193),
114 kind: TYPE_ALIAS_DEF, 114 kind: TYPE_ALIAS_DEF,
115 detail: Some( 115 detail: Some(
116 "()" 116 "()",
117 ), 117 ),
118 deprecated: false 118 deprecated: false,
119 }, 119 },
120 StructureNode { 120 StructureNode {
121 parent: None, 121 parent: None,
@@ -124,9 +124,9 @@ expression: structure
124 node_range: [194; 213), 124 node_range: [194; 213),
125 kind: STATIC_DEF, 125 kind: STATIC_DEF,
126 detail: Some( 126 detail: Some(
127 "i32" 127 "i32",
128 ), 128 ),
129 deprecated: false 129 deprecated: false,
130 }, 130 },
131 StructureNode { 131 StructureNode {
132 parent: None, 132 parent: None,
@@ -135,9 +135,9 @@ expression: structure
135 node_range: [214; 232), 135 node_range: [214; 232),
136 kind: CONST_DEF, 136 kind: CONST_DEF,
137 detail: Some( 137 detail: Some(
138 "i32" 138 "i32",
139 ), 139 ),
140 deprecated: false 140 deprecated: false,
141 }, 141 },
142 StructureNode { 142 StructureNode {
143 parent: None, 143 parent: None,
@@ -146,7 +146,7 @@ expression: structure
146 node_range: [234; 243), 146 node_range: [234; 243),
147 kind: IMPL_BLOCK, 147 kind: IMPL_BLOCK,
148 detail: None, 148 detail: None,
149 deprecated: false 149 deprecated: false,
150 }, 150 },
151 StructureNode { 151 StructureNode {
152 parent: None, 152 parent: None,
@@ -155,7 +155,7 @@ expression: structure
155 node_range: [245; 269), 155 node_range: [245; 269),
156 kind: IMPL_BLOCK, 156 kind: IMPL_BLOCK,
157 detail: None, 157 detail: None,
158 deprecated: false 158 deprecated: false,
159 }, 159 },
160 StructureNode { 160 StructureNode {
161 parent: None, 161 parent: None,
@@ -164,9 +164,9 @@ expression: structure
164 node_range: [271; 301), 164 node_range: [271; 301),
165 kind: FN_DEF, 165 kind: FN_DEF,
166 detail: Some( 166 detail: Some(
167 "fn()" 167 "fn()",
168 ), 168 ),
169 deprecated: true 169 deprecated: true,
170 }, 170 },
171 StructureNode { 171 StructureNode {
172 parent: None, 172 parent: None,
@@ -175,8 +175,8 @@ expression: structure
175 node_range: [303; 359), 175 node_range: [303; 359),
176 kind: FN_DEF, 176 kind: FN_DEF,
177 detail: Some( 177 detail: Some(
178 "fn()" 178 "fn()",
179 ), 179 ),
180 deprecated: true 180 deprecated: true,
181 } 181 },
182] 182]
diff --git a/crates/ra_ide_api/src/snapshots/tests__highlighting.snap b/crates/ra_ide_api/src/snapshots/tests__highlighting.snap
index 9d4c04db3..9c60aed2a 100644
--- a/crates/ra_ide_api/src/snapshots/tests__highlighting.snap
+++ b/crates/ra_ide_api/src/snapshots/tests__highlighting.snap
@@ -1,5 +1,5 @@
1--- 1---
2created: "2019-05-23T12:10:32.628883358Z" 2created: "2019-05-23T22:23:35.242742395Z"
3creator: [email protected] 3creator: [email protected]
4source: crates/ra_ide_api/src/syntax_highlighting.rs 4source: crates/ra_ide_api/src/syntax_highlighting.rs
5expression: result 5expression: result
@@ -8,139 +8,139 @@ Ok(
8 [ 8 [
9 HighlightedRange { 9 HighlightedRange {
10 range: [1; 24), 10 range: [1; 24),
11 tag: "attribute" 11 tag: "attribute",
12 }, 12 },
13 HighlightedRange { 13 HighlightedRange {
14 range: [25; 31), 14 range: [25; 31),
15 tag: "keyword" 15 tag: "keyword",
16 }, 16 },
17 HighlightedRange { 17 HighlightedRange {
18 range: [32; 35), 18 range: [32; 35),
19 tag: "function" 19 tag: "function",
20 }, 20 },
21 HighlightedRange { 21 HighlightedRange {
22 range: [42; 45), 22 range: [42; 45),
23 tag: "keyword" 23 tag: "keyword",
24 }, 24 },
25 HighlightedRange { 25 HighlightedRange {
26 range: [46; 47), 26 range: [46; 47),
27 tag: "function" 27 tag: "function",
28 }, 28 },
29 HighlightedRange { 29 HighlightedRange {
30 range: [49; 52), 30 range: [49; 52),
31 tag: "text" 31 tag: "text",
32 }, 32 },
33 HighlightedRange { 33 HighlightedRange {
34 range: [58; 61), 34 range: [58; 61),
35 tag: "keyword" 35 tag: "keyword",
36 }, 36 },
37 HighlightedRange { 37 HighlightedRange {
38 range: [62; 63), 38 range: [62; 63),
39 tag: "function" 39 tag: "function",
40 }, 40 },
41 HighlightedRange { 41 HighlightedRange {
42 range: [65; 68), 42 range: [65; 68),
43 tag: "text" 43 tag: "text",
44 }, 44 },
45 HighlightedRange { 45 HighlightedRange {
46 range: [73; 75), 46 range: [73; 75),
47 tag: "keyword" 47 tag: "keyword",
48 }, 48 },
49 HighlightedRange { 49 HighlightedRange {
50 range: [76; 79), 50 range: [76; 79),
51 tag: "function" 51 tag: "function",
52 }, 52 },
53 HighlightedRange { 53 HighlightedRange {
54 range: [80; 81), 54 range: [80; 81),
55 tag: "type" 55 tag: "type",
56 }, 56 },
57 HighlightedRange { 57 HighlightedRange {
58 range: [80; 81), 58 range: [80; 81),
59 tag: "function" 59 tag: "function",
60 }, 60 },
61 HighlightedRange { 61 HighlightedRange {
62 range: [88; 89), 62 range: [88; 89),
63 tag: "type" 63 tag: "type",
64 }, 64 },
65 HighlightedRange { 65 HighlightedRange {
66 range: [96; 110), 66 range: [96; 110),
67 tag: "macro" 67 tag: "macro",
68 }, 68 },
69 HighlightedRange { 69 HighlightedRange {
70 range: [117; 127), 70 range: [117; 127),
71 tag: "comment" 71 tag: "comment",
72 }, 72 },
73 HighlightedRange { 73 HighlightedRange {
74 range: [128; 130), 74 range: [128; 130),
75 tag: "keyword" 75 tag: "keyword",
76 }, 76 },
77 HighlightedRange { 77 HighlightedRange {
78 range: [131; 135), 78 range: [131; 135),
79 tag: "function" 79 tag: "function",
80 }, 80 },
81 HighlightedRange { 81 HighlightedRange {
82 range: [145; 153), 82 range: [145; 153),
83 tag: "macro" 83 tag: "macro",
84 }, 84 },
85 HighlightedRange { 85 HighlightedRange {
86 range: [154; 166), 86 range: [154; 166),
87 tag: "string" 87 tag: "string",
88 }, 88 },
89 HighlightedRange { 89 HighlightedRange {
90 range: [168; 170), 90 range: [168; 170),
91 tag: "literal" 91 tag: "literal",
92 }, 92 },
93 HighlightedRange { 93 HighlightedRange {
94 range: [178; 181), 94 range: [178; 181),
95 tag: "keyword" 95 tag: "keyword",
96 }, 96 },
97 HighlightedRange { 97 HighlightedRange {
98 range: [182; 185), 98 range: [182; 185),
99 tag: "keyword" 99 tag: "keyword",
100 }, 100 },
101 HighlightedRange { 101 HighlightedRange {
102 range: [186; 189), 102 range: [186; 189),
103 tag: "macro" 103 tag: "macro",
104 }, 104 },
105 HighlightedRange { 105 HighlightedRange {
106 range: [197; 200), 106 range: [197; 200),
107 tag: "macro" 107 tag: "macro",
108 }, 108 },
109 HighlightedRange { 109 HighlightedRange {
110 range: [192; 195), 110 range: [192; 195),
111 tag: "text" 111 tag: "text",
112 }, 112 },
113 HighlightedRange { 113 HighlightedRange {
114 range: [208; 211), 114 range: [208; 211),
115 tag: "macro" 115 tag: "macro",
116 }, 116 },
117 HighlightedRange { 117 HighlightedRange {
118 range: [212; 216), 118 range: [212; 216),
119 tag: "macro" 119 tag: "macro",
120 }, 120 },
121 HighlightedRange { 121 HighlightedRange {
122 range: [226; 227), 122 range: [226; 227),
123 tag: "literal" 123 tag: "literal",
124 }, 124 },
125 HighlightedRange { 125 HighlightedRange {
126 range: [232; 233), 126 range: [232; 233),
127 tag: "literal" 127 tag: "literal",
128 }, 128 },
129 HighlightedRange { 129 HighlightedRange {
130 range: [242; 248), 130 range: [242; 248),
131 tag: "keyword.unsafe" 131 tag: "keyword.unsafe",
132 }, 132 },
133 HighlightedRange { 133 HighlightedRange {
134 range: [251; 254), 134 range: [251; 254),
135 tag: "text" 135 tag: "text",
136 }, 136 },
137 HighlightedRange { 137 HighlightedRange {
138 range: [255; 262), 138 range: [255; 262),
139 tag: "text" 139 tag: "text",
140 }, 140 },
141 HighlightedRange { 141 HighlightedRange {
142 range: [263; 264), 142 range: [263; 264),
143 tag: "literal" 143 tag: "literal",
144 } 144 },
145 ] 145 ],
146) 146)
diff --git a/crates/ra_ide_api/src/snapshots/tests__rename_mod.snap b/crates/ra_ide_api/src/snapshots/tests__rename_mod.snap
index 890426db7..431de5c55 100644
--- a/crates/ra_ide_api/src/snapshots/tests__rename_mod.snap
+++ b/crates/ra_ide_api/src/snapshots/tests__rename_mod.snap
@@ -1,8 +1,8 @@
1--- 1---
2created: "2019-01-24T08:39:53.759318522+00:00" 2created: "2019-05-23T22:23:35.215905447Z"
3creator: [email protected] 3creator: [email protected]
4source: crates/ra_ide_api/src/references.rs
4expression: "&source_change" 5expression: "&source_change"
5source: crates/ra_ide_api/src/rename.rs
6--- 6---
7Some( 7Some(
8 SourceChange { 8 SourceChange {
@@ -10,29 +10,29 @@ Some(
10 source_file_edits: [ 10 source_file_edits: [
11 SourceFileEdit { 11 SourceFileEdit {
12 file_id: FileId( 12 file_id: FileId(
13 2 13 2,
14 ), 14 ),
15 edit: TextEdit { 15 edit: TextEdit {
16 atoms: [ 16 atoms: [
17 AtomTextEdit { 17 AtomTextEdit {
18 delete: [4; 7), 18 delete: [4; 7),
19 insert: "foo2" 19 insert: "foo2",
20 } 20 },
21 ] 21 ],
22 } 22 },
23 } 23 },
24 ], 24 ],
25 file_system_edits: [ 25 file_system_edits: [
26 MoveFile { 26 MoveFile {
27 src: FileId( 27 src: FileId(
28 3 28 3,
29 ), 29 ),
30 dst_source_root: SourceRootId( 30 dst_source_root: SourceRootId(
31 0 31 0,
32 ), 32 ),
33 dst_path: "bar/foo2.rs" 33 dst_path: "bar/foo2.rs",
34 } 34 },
35 ], 35 ],
36 cursor_position: None 36 cursor_position: None,
37 } 37 },
38) 38)
diff --git a/crates/ra_ide_api/src/snapshots/tests__rename_mod_in_dir.snap b/crates/ra_ide_api/src/snapshots/tests__rename_mod_in_dir.snap
index e96bf5c02..aaff9b4b5 100644
--- a/crates/ra_ide_api/src/snapshots/tests__rename_mod_in_dir.snap
+++ b/crates/ra_ide_api/src/snapshots/tests__rename_mod_in_dir.snap
@@ -1,8 +1,8 @@
1--- 1---
2created: "2019-01-22T14:45:00.975229300+00:00" 2created: "2019-05-23T22:23:35.213830371Z"
3creator: [email protected] 3creator: [email protected]
4source: crates/ra_ide_api/src/references.rs
4expression: "&source_change" 5expression: "&source_change"
5source: "crates\\ra_ide_api\\src\\rename.rs"
6--- 6---
7Some( 7Some(
8 SourceChange { 8 SourceChange {
@@ -10,29 +10,29 @@ Some(
10 source_file_edits: [ 10 source_file_edits: [
11 SourceFileEdit { 11 SourceFileEdit {
12 file_id: FileId( 12 file_id: FileId(
13 1 13 1,
14 ), 14 ),
15 edit: TextEdit { 15 edit: TextEdit {
16 atoms: [ 16 atoms: [
17 AtomTextEdit { 17 AtomTextEdit {
18 delete: [4; 7), 18 delete: [4; 7),
19 insert: "foo2" 19 insert: "foo2",
20 } 20 },
21 ] 21 ],
22 } 22 },
23 } 23 },
24 ], 24 ],
25 file_system_edits: [ 25 file_system_edits: [
26 MoveFile { 26 MoveFile {
27 src: FileId( 27 src: FileId(
28 2 28 2,
29 ), 29 ),
30 dst_source_root: SourceRootId( 30 dst_source_root: SourceRootId(
31 0 31 0,
32 ), 32 ),
33 dst_path: "foo2/mod.rs" 33 dst_path: "foo2/mod.rs",
34 } 34 },
35 ], 35 ],
36 cursor_position: None 36 cursor_position: None,
37 } 37 },
38) 38)
diff --git a/crates/ra_ide_api/src/snapshots/tests__runnables.snap b/crates/ra_ide_api/src/snapshots/tests__runnables.snap
index 71bd7a4bd..de2fadd7f 100644
--- a/crates/ra_ide_api/src/snapshots/tests__runnables.snap
+++ b/crates/ra_ide_api/src/snapshots/tests__runnables.snap
@@ -1,24 +1,24 @@
1--- 1---
2created: "2019-01-22T14:45:00.975229300+00:00" 2created: "2019-05-23T22:23:35.217100106Z"
3creator: [email protected] 3creator: [email protected]
4source: crates/ra_ide_api/src/runnables.rs
4expression: "&runnables" 5expression: "&runnables"
5source: "crates\\ra_ide_api\\src\\runnables.rs"
6--- 6---
7[ 7[
8 Runnable { 8 Runnable {
9 range: [1; 21), 9 range: [1; 21),
10 kind: Bin 10 kind: Bin,
11 }, 11 },
12 Runnable { 12 Runnable {
13 range: [22; 46), 13 range: [22; 46),
14 kind: Test { 14 kind: Test {
15 name: "test_foo" 15 name: "test_foo",
16 } 16 },
17 }, 17 },
18 Runnable { 18 Runnable {
19 range: [47; 81), 19 range: [47; 81),
20 kind: Test { 20 kind: Test {
21 name: "test_foo" 21 name: "test_foo",
22 } 22 },
23 } 23 },
24] 24]
diff --git a/crates/ra_ide_api/src/snapshots/tests__runnables_module.snap b/crates/ra_ide_api/src/snapshots/tests__runnables_module.snap
index a28dd8952..23993a97f 100644
--- a/crates/ra_ide_api/src/snapshots/tests__runnables_module.snap
+++ b/crates/ra_ide_api/src/snapshots/tests__runnables_module.snap
@@ -1,20 +1,20 @@
1--- 1---
2created: "2019-01-22T14:45:00.976230700+00:00" 2created: "2019-05-23T22:23:35.219258850Z"
3creator: [email protected] 3creator: [email protected]
4source: crates/ra_ide_api/src/runnables.rs
4expression: "&runnables" 5expression: "&runnables"
5source: "crates\\ra_ide_api\\src\\runnables.rs"
6--- 6---
7[ 7[
8 Runnable { 8 Runnable {
9 range: [1; 59), 9 range: [1; 59),
10 kind: TestMod { 10 kind: TestMod {
11 path: "test_mod" 11 path: "test_mod",
12 } 12 },
13 }, 13 },
14 Runnable { 14 Runnable {
15 range: [28; 57), 15 range: [28; 57),
16 kind: Test { 16 kind: Test {
17 name: "test_foo1" 17 name: "test_foo1",
18 } 18 },
19 } 19 },
20] 20]
diff --git a/crates/ra_ide_api/src/snapshots/tests__runnables_multiple_depth_module.snap b/crates/ra_ide_api/src/snapshots/tests__runnables_multiple_depth_module.snap
index 79f07bef9..c516a61df 100644
--- a/crates/ra_ide_api/src/snapshots/tests__runnables_multiple_depth_module.snap
+++ b/crates/ra_ide_api/src/snapshots/tests__runnables_multiple_depth_module.snap
@@ -1,20 +1,20 @@
1--- 1---
2created: "2019-01-22T14:45:00.979218100+00:00" 2created: "2019-05-23T22:23:35.219671663Z"
3creator: [email protected] 3creator: [email protected]
4source: crates/ra_ide_api/src/runnables.rs
4expression: "&runnables" 5expression: "&runnables"
5source: "crates\\ra_ide_api\\src\\runnables.rs"
6--- 6---
7[ 7[
8 Runnable { 8 Runnable {
9 range: [41; 115), 9 range: [41; 115),
10 kind: TestMod { 10 kind: TestMod {
11 path: "foo::bar::test_mod" 11 path: "foo::bar::test_mod",
12 } 12 },
13 }, 13 },
14 Runnable { 14 Runnable {
15 range: [68; 105), 15 range: [68; 105),
16 kind: Test { 16 kind: Test {
17 name: "test_foo1" 17 name: "test_foo1",
18 } 18 },
19 } 19 },
20] 20]
diff --git a/crates/ra_ide_api/src/snapshots/tests__runnables_one_depth_layer_module.snap b/crates/ra_ide_api/src/snapshots/tests__runnables_one_depth_layer_module.snap
index d199e9073..b02e6707e 100644
--- a/crates/ra_ide_api/src/snapshots/tests__runnables_one_depth_layer_module.snap
+++ b/crates/ra_ide_api/src/snapshots/tests__runnables_one_depth_layer_module.snap
@@ -1,20 +1,20 @@
1--- 1---
2created: "2019-01-22T14:45:01.016119500+00:00" 2created: "2019-05-23T22:23:35.224315047Z"
3creator: [email protected] 3creator: [email protected]
4source: crates/ra_ide_api/src/runnables.rs
4expression: "&runnables" 5expression: "&runnables"
5source: "crates\\ra_ide_api\\src\\runnables.rs"
6--- 6---
7[ 7[
8 Runnable { 8 Runnable {
9 range: [23; 85), 9 range: [23; 85),
10 kind: TestMod { 10 kind: TestMod {
11 path: "foo::test_mod" 11 path: "foo::test_mod",
12 } 12 },
13 }, 13 },
14 Runnable { 14 Runnable {
15 range: [46; 79), 15 range: [46; 79),
16 kind: Test { 16 kind: Test {
17 name: "test_foo1" 17 name: "test_foo1",
18 } 18 },
19 } 19 },
20] 20]
diff --git a/crates/ra_ide_api/src/syntax_highlighting.rs b/crates/ra_ide_api/src/syntax_highlighting.rs
index 77c9ae3b1..7bba7a550 100644
--- a/crates/ra_ide_api/src/syntax_highlighting.rs
+++ b/crates/ra_ide_api/src/syntax_highlighting.rs
@@ -2,6 +2,7 @@ use rustc_hash::FxHashSet;
2 2
3use ra_syntax::{ast, AstNode, TextRange, Direction, SyntaxKind, SyntaxKind::*, SyntaxElement, T}; 3use ra_syntax::{ast, AstNode, TextRange, Direction, SyntaxKind, SyntaxKind::*, SyntaxElement, T};
4use ra_db::SourceDatabase; 4use ra_db::SourceDatabase;
5use ra_prof::profile;
5 6
6use crate::{FileId, db::RootDatabase}; 7use crate::{FileId, db::RootDatabase};
7 8
@@ -27,6 +28,8 @@ fn is_control_keyword(kind: SyntaxKind) -> bool {
27} 28}
28 29
29pub(crate) fn highlight(db: &RootDatabase, file_id: FileId) -> Vec<HighlightedRange> { 30pub(crate) fn highlight(db: &RootDatabase, file_id: FileId) -> Vec<HighlightedRange> {
31 let _p = profile("highlight");
32
30 let source_file = db.parse(file_id); 33 let source_file = db.parse(file_id);
31 34
32 // Visited nodes to handle highlighting priorities 35 // Visited nodes to handle highlighting priorities
diff --git a/crates/ra_parser/src/grammar/items.rs b/crates/ra_parser/src/grammar/items.rs
index 6728e395f..7718fbe6a 100644
--- a/crates/ra_parser/src/grammar/items.rs
+++ b/crates/ra_parser/src/grammar/items.rs
@@ -103,7 +103,7 @@ pub(super) fn maybe_item(p: &mut Parser, m: Marker, flavor: ItemFlavor) -> Resul
103 p.bump_remap(T![auto]); 103 p.bump_remap(T![auto]);
104 has_mods = true; 104 has_mods = true;
105 } 105 }
106 if p.at(IDENT) && p.at_contextual_kw("default") && p.nth(1) == T![impl ] { 106 if p.at(IDENT) && p.at_contextual_kw("default") && p.nth(1) == T![impl] {
107 p.bump_remap(T![default]); 107 p.bump_remap(T![default]);
108 has_mods = true; 108 has_mods = true;
109 } 109 }
@@ -161,7 +161,7 @@ pub(super) fn maybe_item(p: &mut Parser, m: Marker, flavor: ItemFlavor) -> Resul
161 161
162 // test unsafe_default_impl 162 // test unsafe_default_impl
163 // unsafe default impl Foo {} 163 // unsafe default impl Foo {}
164 T![impl ] => { 164 T![impl] => {
165 traits::impl_block(p); 165 traits::impl_block(p);
166 m.complete(p, IMPL_BLOCK); 166 m.complete(p, IMPL_BLOCK);
167 } 167 }
diff --git a/crates/ra_parser/src/grammar/items/traits.rs b/crates/ra_parser/src/grammar/items/traits.rs
index 09ab3bfd4..5fcacfbff 100644
--- a/crates/ra_parser/src/grammar/items/traits.rs
+++ b/crates/ra_parser/src/grammar/items/traits.rs
@@ -44,7 +44,7 @@ pub(crate) fn trait_item_list(p: &mut Parser) {
44// test impl_block 44// test impl_block
45// impl Foo {} 45// impl Foo {}
46pub(super) fn impl_block(p: &mut Parser) { 46pub(super) fn impl_block(p: &mut Parser) {
47 assert!(p.at(T![impl ])); 47 assert!(p.at(T![impl]));
48 p.bump(); 48 p.bump();
49 if choose_type_params_over_qpath(p) { 49 if choose_type_params_over_qpath(p) {
50 type_params::opt_type_param_list(p); 50 type_params::opt_type_param_list(p);
@@ -130,7 +130,7 @@ fn choose_type_params_over_qpath(p: &Parser) -> bool {
130// impl impl NotType {} 130// impl impl NotType {}
131// impl Trait2 for impl NotType {} 131// impl Trait2 for impl NotType {}
132pub(crate) fn impl_type(p: &mut Parser) { 132pub(crate) fn impl_type(p: &mut Parser) {
133 if p.at(T![impl ]) { 133 if p.at(T![impl]) {
134 p.error("expected trait or type"); 134 p.error("expected trait or type");
135 return; 135 return;
136 } 136 }
diff --git a/crates/ra_parser/src/grammar/type_params.rs b/crates/ra_parser/src/grammar/type_params.rs
index 4bbfed780..ef59b59d3 100644
--- a/crates/ra_parser/src/grammar/type_params.rs
+++ b/crates/ra_parser/src/grammar/type_params.rs
@@ -150,7 +150,7 @@ pub(super) fn opt_where_clause(p: &mut Parser) {
150fn is_where_predicate(p: &mut Parser) -> bool { 150fn is_where_predicate(p: &mut Parser) -> bool {
151 match p.current() { 151 match p.current() {
152 LIFETIME => true, 152 LIFETIME => true,
153 T![impl ] => false, 153 T![impl] => false,
154 token => types::TYPE_FIRST.contains(token), 154 token => types::TYPE_FIRST.contains(token),
155 } 155 }
156} 156}
@@ -170,7 +170,7 @@ fn where_predicate(p: &mut Parser) {
170 p.error("expected colon"); 170 p.error("expected colon");
171 } 171 }
172 } 172 }
173 T![impl ] => { 173 T![impl] => {
174 p.error("expected lifetime or type"); 174 p.error("expected lifetime or type");
175 } 175 }
176 _ => { 176 _ => {
diff --git a/crates/ra_parser/src/grammar/types.rs b/crates/ra_parser/src/grammar/types.rs
index 438e3ab0e..c0b722569 100644
--- a/crates/ra_parser/src/grammar/types.rs
+++ b/crates/ra_parser/src/grammar/types.rs
@@ -25,7 +25,7 @@ fn type_with_bounds_cond(p: &mut Parser, allow_bounds: bool) {
25 T![_] => placeholder_type(p), 25 T![_] => placeholder_type(p),
26 T![fn] | T![unsafe] | T![extern] => fn_pointer_type(p), 26 T![fn] | T![unsafe] | T![extern] => fn_pointer_type(p),
27 T![for] => for_type(p), 27 T![for] => for_type(p),
28 T![impl ] => impl_trait_type(p), 28 T![impl] => impl_trait_type(p),
29 T![dyn ] => dyn_trait_type(p), 29 T![dyn ] => dyn_trait_type(p),
30 // Some path types are not allowed to have bounds (no plus) 30 // Some path types are not allowed to have bounds (no plus)
31 T![<] => path_type_(p, allow_bounds), 31 T![<] => path_type_(p, allow_bounds),
@@ -221,7 +221,7 @@ pub(super) fn for_type(p: &mut Parser) {
221// test impl_trait_type 221// test impl_trait_type
222// type A = impl Iterator<Item=Foo<'a>> + 'a; 222// type A = impl Iterator<Item=Foo<'a>> + 'a;
223fn impl_trait_type(p: &mut Parser) { 223fn impl_trait_type(p: &mut Parser) {
224 assert!(p.at(T![impl ])); 224 assert!(p.at(T![impl]));
225 let m = p.start(); 225 let m = p.start();
226 p.bump(); 226 p.bump();
227 type_params::bounds_without_colon(p); 227 type_params::bounds_without_colon(p);