diff options
Diffstat (limited to 'crates/ide_db')
-rw-r--r-- | crates/ide_db/Cargo.toml | 2 | ||||
-rw-r--r-- | crates/ide_db/src/defs.rs | 18 | ||||
-rw-r--r-- | crates/ide_db/src/imports_locator.rs | 23 | ||||
-rw-r--r-- | crates/ide_db/src/source_change.rs | 2 |
4 files changed, 29 insertions, 16 deletions
diff --git a/crates/ide_db/Cargo.toml b/crates/ide_db/Cargo.toml index 0ad6e1000..ebe53c8ee 100644 --- a/crates/ide_db/Cargo.toml +++ b/crates/ide_db/Cargo.toml | |||
@@ -19,7 +19,7 @@ fst = { version = "0.4", default-features = false } | |||
19 | rustc-hash = "1.1.0" | 19 | rustc-hash = "1.1.0" |
20 | once_cell = "1.3.1" | 20 | once_cell = "1.3.1" |
21 | either = "1.6.1" | 21 | either = "1.6.1" |
22 | itertools = "0.9.0" | 22 | itertools = "0.10.0" |
23 | 23 | ||
24 | stdx = { path = "../stdx", version = "0.0.0" } | 24 | stdx = { path = "../stdx", version = "0.0.0" } |
25 | syntax = { path = "../syntax", version = "0.0.0" } | 25 | syntax = { path = "../syntax", version = "0.0.0" } |
diff --git a/crates/ide_db/src/defs.rs b/crates/ide_db/src/defs.rs index 9d7dce1d4..d33a6cb86 100644 --- a/crates/ide_db/src/defs.rs +++ b/crates/ide_db/src/defs.rs | |||
@@ -6,8 +6,8 @@ | |||
6 | // FIXME: this badly needs rename/rewrite (matklad, 2020-02-06). | 6 | // FIXME: this badly needs rename/rewrite (matklad, 2020-02-06). |
7 | 7 | ||
8 | use hir::{ | 8 | use hir::{ |
9 | db::HirDatabase, Crate, Field, HasVisibility, Impl, LifetimeParam, Local, MacroDef, Module, | 9 | db::HirDatabase, Crate, Field, HasVisibility, Impl, Label, LifetimeParam, Local, MacroDef, |
10 | ModuleDef, Name, PathResolution, Semantics, TypeParam, Visibility, | 10 | Module, ModuleDef, Name, PathResolution, Semantics, TypeParam, Visibility, |
11 | }; | 11 | }; |
12 | use syntax::{ | 12 | use syntax::{ |
13 | ast::{self, AstNode}, | 13 | ast::{self, AstNode}, |
@@ -26,7 +26,7 @@ pub enum Definition { | |||
26 | Local(Local), | 26 | Local(Local), |
27 | TypeParam(TypeParam), | 27 | TypeParam(TypeParam), |
28 | LifetimeParam(LifetimeParam), | 28 | LifetimeParam(LifetimeParam), |
29 | // FIXME: Label | 29 | Label(Label), |
30 | } | 30 | } |
31 | 31 | ||
32 | impl Definition { | 32 | impl Definition { |
@@ -39,6 +39,7 @@ impl Definition { | |||
39 | Definition::Local(it) => Some(it.module(db)), | 39 | Definition::Local(it) => Some(it.module(db)), |
40 | Definition::TypeParam(it) => Some(it.module(db)), | 40 | Definition::TypeParam(it) => Some(it.module(db)), |
41 | Definition::LifetimeParam(it) => Some(it.module(db)), | 41 | Definition::LifetimeParam(it) => Some(it.module(db)), |
42 | Definition::Label(it) => Some(it.module(db)), | ||
42 | } | 43 | } |
43 | } | 44 | } |
44 | 45 | ||
@@ -51,6 +52,7 @@ impl Definition { | |||
51 | Definition::Local(_) => None, | 52 | Definition::Local(_) => None, |
52 | Definition::TypeParam(_) => None, | 53 | Definition::TypeParam(_) => None, |
53 | Definition::LifetimeParam(_) => None, | 54 | Definition::LifetimeParam(_) => None, |
55 | Definition::Label(_) => None, | ||
54 | } | 56 | } |
55 | } | 57 | } |
56 | 58 | ||
@@ -77,6 +79,7 @@ impl Definition { | |||
77 | Definition::Local(it) => it.name(db)?, | 79 | Definition::Local(it) => it.name(db)?, |
78 | Definition::TypeParam(it) => it.name(db), | 80 | Definition::TypeParam(it) => it.name(db), |
79 | Definition::LifetimeParam(it) => it.name(db), | 81 | Definition::LifetimeParam(it) => it.name(db), |
82 | Definition::Label(it) => it.name(db), | ||
80 | }; | 83 | }; |
81 | Some(name) | 84 | Some(name) |
82 | } | 85 | } |
@@ -248,7 +251,10 @@ impl NameClass { | |||
248 | let def = sema.to_def(&it)?; | 251 | let def = sema.to_def(&it)?; |
249 | Some(NameClass::Definition(Definition::LifetimeParam(def))) | 252 | Some(NameClass::Definition(Definition::LifetimeParam(def))) |
250 | }, | 253 | }, |
251 | ast::Label(_it) => None, | 254 | ast::Label(it) => { |
255 | let def = sema.to_def(&it)?; | ||
256 | Some(NameClass::Definition(Definition::Label(def))) | ||
257 | }, | ||
252 | _ => None, | 258 | _ => None, |
253 | } | 259 | } |
254 | } | 260 | } |
@@ -370,6 +376,9 @@ impl NameRefClass { | |||
370 | let _p = profile::span("classify_lifetime_ref").detail(|| lifetime.to_string()); | 376 | let _p = profile::span("classify_lifetime_ref").detail(|| lifetime.to_string()); |
371 | let parent = lifetime.syntax().parent()?; | 377 | let parent = lifetime.syntax().parent()?; |
372 | match parent.kind() { | 378 | match parent.kind() { |
379 | SyntaxKind::BREAK_EXPR | SyntaxKind::CONTINUE_EXPR => { | ||
380 | sema.resolve_label(lifetime).map(Definition::Label).map(NameRefClass::Definition) | ||
381 | } | ||
373 | SyntaxKind::LIFETIME_ARG | 382 | SyntaxKind::LIFETIME_ARG |
374 | | SyntaxKind::SELF_PARAM | 383 | | SyntaxKind::SELF_PARAM |
375 | | SyntaxKind::TYPE_BOUND | 384 | | SyntaxKind::TYPE_BOUND |
@@ -387,7 +396,6 @@ impl NameRefClass { | |||
387 | .map(Definition::LifetimeParam) | 396 | .map(Definition::LifetimeParam) |
388 | .map(NameRefClass::Definition) | 397 | .map(NameRefClass::Definition) |
389 | } | 398 | } |
390 | SyntaxKind::BREAK_EXPR | SyntaxKind::CONTINUE_EXPR => None, | ||
391 | _ => None, | 399 | _ => None, |
392 | } | 400 | } |
393 | } | 401 | } |
diff --git a/crates/ide_db/src/imports_locator.rs b/crates/ide_db/src/imports_locator.rs index b2980a5d6..0f4c2ca47 100644 --- a/crates/ide_db/src/imports_locator.rs +++ b/crates/ide_db/src/imports_locator.rs | |||
@@ -15,19 +15,23 @@ use rustc_hash::FxHashSet; | |||
15 | pub fn find_exact_imports<'a>( | 15 | pub fn find_exact_imports<'a>( |
16 | sema: &Semantics<'a, RootDatabase>, | 16 | sema: &Semantics<'a, RootDatabase>, |
17 | krate: Crate, | 17 | krate: Crate, |
18 | name_to_import: &str, | 18 | name_to_import: String, |
19 | ) -> impl Iterator<Item = Either<ModuleDef, MacroDef>> { | 19 | ) -> impl Iterator<Item = Either<ModuleDef, MacroDef>> { |
20 | let _p = profile::span("find_exact_imports"); | 20 | let _p = profile::span("find_exact_imports"); |
21 | find_imports( | 21 | find_imports( |
22 | sema, | 22 | sema, |
23 | krate, | 23 | krate, |
24 | { | 24 | { |
25 | let mut local_query = symbol_index::Query::new(name_to_import.to_string()); | 25 | let mut local_query = symbol_index::Query::new(name_to_import.clone()); |
26 | local_query.exact(); | 26 | local_query.exact(); |
27 | local_query.limit(40); | 27 | local_query.limit(40); |
28 | local_query | 28 | local_query |
29 | }, | 29 | }, |
30 | import_map::Query::new(name_to_import).anchor_end().case_sensitive().limit(40), | 30 | import_map::Query::new(name_to_import) |
31 | .limit(40) | ||
32 | .name_only() | ||
33 | .search_mode(import_map::SearchMode::Equals) | ||
34 | .case_sensitive(), | ||
31 | ) | 35 | ) |
32 | } | 36 | } |
33 | 37 | ||
@@ -35,17 +39,18 @@ pub fn find_similar_imports<'a>( | |||
35 | sema: &Semantics<'a, RootDatabase>, | 39 | sema: &Semantics<'a, RootDatabase>, |
36 | krate: Crate, | 40 | krate: Crate, |
37 | limit: Option<usize>, | 41 | limit: Option<usize>, |
38 | name_to_import: &str, | 42 | fuzzy_search_string: String, |
39 | ignore_modules: bool, | 43 | name_only: bool, |
40 | ) -> impl Iterator<Item = Either<ModuleDef, MacroDef>> { | 44 | ) -> impl Iterator<Item = Either<ModuleDef, MacroDef>> { |
41 | let _p = profile::span("find_similar_imports"); | 45 | let _p = profile::span("find_similar_imports"); |
42 | 46 | ||
43 | let mut external_query = import_map::Query::new(name_to_import); | 47 | let mut external_query = import_map::Query::new(fuzzy_search_string.clone()) |
44 | if ignore_modules { | 48 | .search_mode(import_map::SearchMode::Fuzzy); |
45 | external_query = external_query.exclude_import_kind(import_map::ImportKind::Module); | 49 | if name_only { |
50 | external_query = external_query.name_only(); | ||
46 | } | 51 | } |
47 | 52 | ||
48 | let mut local_query = symbol_index::Query::new(name_to_import.to_string()); | 53 | let mut local_query = symbol_index::Query::new(fuzzy_search_string); |
49 | 54 | ||
50 | if let Some(limit) = limit { | 55 | if let Some(limit) = limit { |
51 | local_query.limit(limit); | 56 | local_query.limit(limit); |
diff --git a/crates/ide_db/src/source_change.rs b/crates/ide_db/src/source_change.rs index e87d98dad..10c0abdac 100644 --- a/crates/ide_db/src/source_change.rs +++ b/crates/ide_db/src/source_change.rs | |||
@@ -44,7 +44,7 @@ impl From<Vec<SourceFileEdit>> for SourceChange { | |||
44 | 44 | ||
45 | #[derive(Debug, Clone)] | 45 | #[derive(Debug, Clone)] |
46 | pub enum FileSystemEdit { | 46 | pub enum FileSystemEdit { |
47 | CreateFile { dst: AnchoredPathBuf }, | 47 | CreateFile { dst: AnchoredPathBuf, initial_contents: String }, |
48 | MoveFile { src: FileId, dst: AnchoredPathBuf }, | 48 | MoveFile { src: FileId, dst: AnchoredPathBuf }, |
49 | } | 49 | } |
50 | 50 | ||