aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_api/src/completion/presentation.rs
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2019-09-11 15:49:57 +0100
committerGitHub <[email protected]>2019-09-11 15:49:57 +0100
commit6ce6744e18f25ebcde387178125d820686692df5 (patch)
treee1861982356f9905980537f962dff9560423f901 /crates/ra_ide_api/src/completion/presentation.rs
parent7bbb039fbdd124cb6549eb67bbe7316f03ff40e8 (diff)
parent6353b1621f44e1b0db65ebbe414aa7c5f1864b9d (diff)
Merge #1796
1796: Support completion for macros r=matklad a=uHOOCCOOHu This is based on #1795 , and fixes #1727 Also prettify hover text of macros. Some screenshorts below: Completion in item place. <img width="416" alt="Screenshot_20190910_134056" src="https://user-images.githubusercontent.com/14816024/64587159-fa72da00-d3d0-11e9-86bb-c98f169ec08d.png"> After pressing `tab`. <img width="313" alt="Screenshot_20190910_134111" src="https://user-images.githubusercontent.com/14816024/64587160-fa72da00-d3d0-11e9-9464-21e3f6957bd7.png"> Complete macros from `std`. <img width="588" alt="Screenshot_20190910_134147" src="https://user-images.githubusercontent.com/14816024/64587161-fb0b7080-d3d0-11e9-866e-5161f0d1b546.png"> Hover text. <img width="521" alt="Screenshot_20190910_134242" src="https://user-images.githubusercontent.com/14816024/64587162-fb0b7080-d3d0-11e9-8f09-ad17e3f6702a.png"> Co-authored-by: uHOOCCOOHu <[email protected]>
Diffstat (limited to 'crates/ra_ide_api/src/completion/presentation.rs')
-rw-r--r--crates/ra_ide_api/src/completion/presentation.rs24
1 files changed, 23 insertions, 1 deletions
diff --git a/crates/ra_ide_api/src/completion/presentation.rs b/crates/ra_ide_api/src/completion/presentation.rs
index db7e8348e..1b706bb13 100644
--- a/crates/ra_ide_api/src/completion/presentation.rs
+++ b/crates/ra_ide_api/src/completion/presentation.rs
@@ -8,7 +8,7 @@ use crate::completion::{
8 CompletionContext, CompletionItem, CompletionItemKind, CompletionKind, Completions, 8 CompletionContext, CompletionItem, CompletionItemKind, CompletionKind, Completions,
9}; 9};
10 10
11use crate::display::{const_label, function_label, type_label}; 11use crate::display::{const_label, function_label, macro_label, type_label};
12 12
13impl Completions { 13impl Completions {
14 pub(crate) fn add_field( 14 pub(crate) fn add_field(
@@ -43,8 +43,14 @@ impl Completions {
43 ) { 43 ) {
44 use hir::ModuleDef::*; 44 use hir::ModuleDef::*;
45 45
46 if let Some(macro_) = resolution.get_macros() {
47 self.add_macro(ctx, Some(local_name.clone()), macro_);
48 }
49
46 let def = resolution.as_ref().take_types().or_else(|| resolution.as_ref().take_values()); 50 let def = resolution.as_ref().take_types().or_else(|| resolution.as_ref().take_values());
47 let def = match def { 51 let def = match def {
52 // Only insert once if it is just a macro name
53 None if resolution.get_macros().is_some() => return,
48 None => { 54 None => {
49 self.add(CompletionItem::new( 55 self.add(CompletionItem::new(
50 CompletionKind::Reference, 56 CompletionKind::Reference,
@@ -98,6 +104,22 @@ impl Completions {
98 self.add_function_with_name(ctx, None, func) 104 self.add_function_with_name(ctx, None, func)
99 } 105 }
100 106
107 fn add_macro(&mut self, ctx: &CompletionContext, name: Option<String>, macro_: hir::MacroDef) {
108 let ast_node = macro_.source(ctx.db).ast;
109 if let Some(name) = name {
110 let detail = macro_label(&ast_node);
111
112 let builder =
113 CompletionItem::new(CompletionKind::Reference, ctx.source_range(), name.clone())
114 .kind(CompletionItemKind::Macro)
115 .set_documentation(macro_.docs(ctx.db))
116 .detail(detail)
117 .insert_snippet(format!("{}!", name));
118
119 self.add(builder);
120 }
121 }
122
101 fn add_function_with_name( 123 fn add_function_with_name(
102 &mut self, 124 &mut self,
103 ctx: &CompletionContext, 125 ctx: &CompletionContext,