aboutsummaryrefslogtreecommitdiff
path: root/crates/completion/src/lib.rs
diff options
context:
space:
mode:
authorKirill Bulatov <[email protected]>2020-12-04 14:03:22 +0000
committerKirill Bulatov <[email protected]>2020-12-07 21:41:08 +0000
commitdeda74edd89affb3f77d274776d2a672bc11db90 (patch)
treee9c7dac6df4fd06012ca6b6e628223e925998f1e /crates/completion/src/lib.rs
parent93bc009a5968c964693299263689b50b2efe9abc (diff)
Use stateless completion resolve
Diffstat (limited to 'crates/completion/src/lib.rs')
-rw-r--r--crates/completion/src/lib.rs32
1 files changed, 30 insertions, 2 deletions
diff --git a/crates/completion/src/lib.rs b/crates/completion/src/lib.rs
index c57203c80..938c92dbb 100644
--- a/crates/completion/src/lib.rs
+++ b/crates/completion/src/lib.rs
@@ -11,8 +11,11 @@ mod render;
11 11
12mod completions; 12mod completions;
13 13
14use ide_db::base_db::FilePosition; 14use ide_db::{
15use ide_db::RootDatabase; 15 base_db::FilePosition, helpers::insert_use::ImportScope, imports_locator, RootDatabase,
16};
17use syntax::AstNode;
18use text_edit::TextEdit;
16 19
17use crate::{completions::Completions, context::CompletionContext, item::CompletionKind}; 20use crate::{completions::Completions, context::CompletionContext, item::CompletionKind};
18 21
@@ -131,6 +134,31 @@ pub fn completions(
131 Some(acc) 134 Some(acc)
132} 135}
133 136
137/// Resolves additional completion data at the position given.
138pub fn resolve_completion_edits(
139 db: &RootDatabase,
140 config: &CompletionConfig,
141 position: FilePosition,
142 full_import_path: &str,
143 imported_name: &str,
144) -> Option<TextEdit> {
145 let ctx = CompletionContext::new(db, position, config)?;
146 let anchor = ctx.name_ref_syntax.as_ref()?;
147 let import_scope = ImportScope::find_insert_use_container(anchor.syntax(), &ctx.sema)?;
148
149 let current_module = ctx.sema.scope(anchor.syntax()).module()?;
150 let current_crate = current_module.krate();
151
152 let import_path = imports_locator::find_exact_imports(&ctx.sema, current_crate, imported_name)
153 .filter_map(|candidate| {
154 let item: hir::ItemInNs = candidate.either(Into::into, Into::into);
155 current_module.find_use_path(db, item)
156 })
157 .find(|mod_path| mod_path.to_string() == full_import_path)?;
158
159 ImportEdit { import_path, import_scope, merge_behaviour: config.merge }.to_text_edit()
160}
161
134#[cfg(test)] 162#[cfg(test)]
135mod tests { 163mod tests {
136 use crate::config::CompletionConfig; 164 use crate::config::CompletionConfig;