]> git.lizzy.rs Git - rust.git/commitdiff
use builder interface for completion item
authorAleksey Kladov <aleksey.kladov@gmail.com>
Fri, 21 Dec 2018 11:38:41 +0000 (14:38 +0300)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Fri, 21 Dec 2018 11:38:41 +0000 (14:38 +0300)
Cargo.lock
crates/ra_analysis/src/completion.rs
crates/ra_analysis/src/completion/completion_item.rs
crates/ra_analysis/src/completion/reference_completion.rs

index 5e5db84c33f445ead3dce6f637f9a0456aa6987b..bf2297e696ccd8097b3e27164460d5c5668df48f 100644 (file)
@@ -734,7 +734,7 @@ dependencies = [
  "serde 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_derive 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)",
- "smol_str 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smol_str 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "test_utils 0.1.0",
  "text_unit 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -959,7 +959,7 @@ version = "0.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "smol_str 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smol_str 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "text_unit 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -1092,7 +1092,7 @@ dependencies = [
 
 [[package]]
 name = "smol_str"
-version = "0.1.7"
+version = "0.1.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "serde 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1565,7 +1565,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 "checksum sha-1 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "51b9d1f3b5de8a167ab06834a7c883bd197f2191e1dda1a22d9ccfeedbf9aded"
 "checksum slug 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b3bc762e6a4b6c6fcaade73e77f9ebc6991b676f88bb2358bddb56560f073373"
 "checksum smallvec 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "b73ea3738b47563803ef814925e69be00799a8c07420be8b996f8e98fb2336db"
-"checksum smol_str 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f3ed6f19b800d76574926e458d5f8e2dbea86c2b58c08d33a982448f09ac8d0c"
+"checksum smol_str 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "486a74e9b9fc53373808f7a17e10fc728adcb1fbe272292271d8bea61175e181"
 "checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8"
 "checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550"
 "checksum superslice 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b50b13d42370e0f5fc62eafdd5c2d20065eaf5458dab215ff3e20e63eea96b30"
index 6d84558d1a761a1c083448e82eab242677ff05c5..fd7b78c2a7d6dbcdd101d1cb4939e2b34430e73b 100644 (file)
@@ -428,7 +428,7 @@ mod tests {
                 <|>
             }
             ",
-            r##"[CompletionItem { label: "Test function", lookup: Some("tfn"), snippet: Some("#[test]\nfn ${1:feature}() {\n$0\n}") },
+            r##"[CompletionItem { label: "Test function", lookup: Some("tfn"), snippet: Some("#[test]\nfn ${1:feature}() {\n    $0\n}") },
                  CompletionItem { label: "pub(crate)", lookup: None, snippet: Some("pub(crate) $0") }]"##,
         );
     }
index 309b0108d2063ee93e125362cd0ea7966e64910f..7edb864363bcb42e8f516e7077234c5f561710e1 100644 (file)
@@ -19,6 +19,7 @@ pub(crate) fn new(label: impl Into<String>) -> Builder {
     }
 }
 
+#[must_use]
 pub(crate) struct Builder {
     label: String,
     lookup: Option<String>,
@@ -41,4 +42,8 @@ pub fn lookup_by(mut self, lookup: impl Into<String>) -> Builder {
         self.lookup = Some(lookup.into());
         self
     }
+    pub fn snippet(mut self, snippet: impl Into<String>) -> Builder {
+        self.snippet = Some(snippet.into());
+        self
+    }
 }
index 457ca13ccd6c4882ba6998c8eb7b327bd367a35e..23052295c1c66a876fec61734fbb36ed26effc60 100644 (file)
@@ -125,23 +125,13 @@ fn classify_name_ref(name_ref: ast::NameRef) -> Option<NameRefKind> {
 
 fn complete_fn(name_ref: ast::NameRef, scopes: &FnScopes, acc: &mut Vec<CompletionItem>) {
     let mut shadowed = FxHashSet::default();
-    acc.extend(
-        scopes
-            .scope_chain(name_ref.syntax())
-            .flat_map(|scope| scopes.entries(scope).iter())
-            .filter(|entry| shadowed.insert(entry.name()))
-            .map(|entry| CompletionItem {
-                label: entry.name().to_string(),
-                lookup: None,
-                snippet: None,
-            }),
-    );
+    scopes
+        .scope_chain(name_ref.syntax())
+        .flat_map(|scope| scopes.entries(scope).iter())
+        .filter(|entry| shadowed.insert(entry.name()))
+        .for_each(|entry| CompletionItem::new(entry.name().to_string()).add_to(acc));
     if scopes.self_param.is_some() {
-        acc.push(CompletionItem {
-            label: "self".to_string(),
-            lookup: None,
-            snippet: None,
-        })
+        CompletionItem::new("self").add_to(acc);
     }
 }
 
@@ -164,32 +154,26 @@ fn complete_path(
         _ => return Ok(()),
     };
     let module_scope = target_module.scope(db)?;
-    let completions = module_scope.entries().map(|(name, _res)| CompletionItem {
-        label: name.to_string(),
-        lookup: None,
-        snippet: None,
-    });
-    acc.extend(completions);
+    module_scope
+        .entries()
+        .for_each(|(name, _res)| CompletionItem::new(name.to_string()).add_to(acc));
     Ok(())
 }
 
 fn complete_mod_item_snippets(acc: &mut Vec<CompletionItem>) {
-    acc.push(CompletionItem {
-        label: "Test function".to_string(),
-        lookup: Some("tfn".to_string()),
-        snippet: Some(
-            "#[test]\n\
-             fn ${1:feature}() {\n\
-             $0\n\
-             }"
-            .to_string(),
-        ),
-    });
-    acc.push(CompletionItem {
-        label: "pub(crate)".to_string(),
-        lookup: None,
-        snippet: Some("pub(crate) $0".to_string()),
-    })
+    CompletionItem::new("Test function")
+        .lookup_by("tfn")
+        .snippet(
+            "\
+#[test]
+fn ${1:feature}() {
+    $0
+}",
+        )
+        .add_to(acc);
+    CompletionItem::new("pub(crate)")
+        .snippet("pub(crate) $0")
+        .add_to(acc);
 }
 
 fn complete_expr_keywords(
@@ -270,23 +254,15 @@ fn complete_return(fn_def: ast::FnDef, name_ref: ast::NameRef) -> Option<Complet
     Some(keyword("return", snip))
 }
 
-fn keyword(kw: &str, snip: &str) -> CompletionItem {
-    CompletionItem {
-        label: kw.to_string(),
-        lookup: None,
-        snippet: Some(snip.to_string()),
-    }
+fn keyword(kw: &str, snippet: &str) -> CompletionItem {
+    CompletionItem::new(kw).snippet(snippet).build()
 }
 
 fn complete_expr_snippets(acc: &mut Vec<CompletionItem>) {
-    acc.push(CompletionItem {
-        label: "pd".to_string(),
-        lookup: None,
-        snippet: Some("eprintln!(\"$0 = {:?}\", $0);".to_string()),
-    });
-    acc.push(CompletionItem {
-        label: "ppd".to_string(),
-        lookup: None,
-        snippet: Some("eprintln!(\"$0 = {:#?}\", $0);".to_string()),
-    });
+    CompletionItem::new("pd")
+        .snippet("eprintln!(\"$0 = {:?}\", $0);")
+        .add_to(acc);
+    CompletionItem::new("ppd")
+        .snippet("eprintln!(\"$0 = {:#?}\", $0);")
+        .add_to(acc);
 }