diff options
Diffstat (limited to 'crates/ide_completion/src/completions.rs')
-rw-r--r-- | crates/ide_completion/src/completions.rs | 51 |
1 files changed, 25 insertions, 26 deletions
diff --git a/crates/ide_completion/src/completions.rs b/crates/ide_completion/src/completions.rs index 7a4d71e91..fbd499900 100644 --- a/crates/ide_completion/src/completions.rs +++ b/crates/ide_completion/src/completions.rs | |||
@@ -56,10 +56,16 @@ impl Builder { | |||
56 | } | 56 | } |
57 | 57 | ||
58 | impl Completions { | 58 | impl Completions { |
59 | pub(crate) fn add(&mut self, item: CompletionItem) { | 59 | fn add(&mut self, item: CompletionItem) { |
60 | self.buf.push(item) | 60 | self.buf.push(item) |
61 | } | 61 | } |
62 | 62 | ||
63 | fn add_opt(&mut self, item: Option<CompletionItem>) { | ||
64 | if let Some(item) = item { | ||
65 | self.buf.push(item) | ||
66 | } | ||
67 | } | ||
68 | |||
63 | pub(crate) fn add_all<I>(&mut self, items: I) | 69 | pub(crate) fn add_all<I>(&mut self, items: I) |
64 | where | 70 | where |
65 | I: IntoIterator, | 71 | I: IntoIterator, |
@@ -103,9 +109,10 @@ impl Completions { | |||
103 | local_name: hir::Name, | 109 | local_name: hir::Name, |
104 | resolution: &hir::ScopeDef, | 110 | resolution: &hir::ScopeDef, |
105 | ) { | 111 | ) { |
106 | if let Some(item) = render_resolution(RenderContext::new(ctx), local_name, resolution) { | 112 | if ctx.expects_type() && resolution.is_value_def() { |
107 | self.add(item); | 113 | return; |
108 | } | 114 | } |
115 | self.add_opt(render_resolution(RenderContext::new(ctx), local_name, resolution)); | ||
109 | } | 116 | } |
110 | 117 | ||
111 | pub(crate) fn add_macro( | 118 | pub(crate) fn add_macro( |
@@ -118,9 +125,7 @@ impl Completions { | |||
118 | Some(it) => it, | 125 | Some(it) => it, |
119 | None => return, | 126 | None => return, |
120 | }; | 127 | }; |
121 | if let Some(item) = render_macro(RenderContext::new(ctx), None, name, macro_) { | 128 | self.add_opt(render_macro(RenderContext::new(ctx), None, name, macro_)); |
122 | self.add(item); | ||
123 | } | ||
124 | } | 129 | } |
125 | 130 | ||
126 | pub(crate) fn add_function( | 131 | pub(crate) fn add_function( |
@@ -129,9 +134,10 @@ impl Completions { | |||
129 | func: hir::Function, | 134 | func: hir::Function, |
130 | local_name: Option<hir::Name>, | 135 | local_name: Option<hir::Name>, |
131 | ) { | 136 | ) { |
132 | if let Some(item) = render_fn(RenderContext::new(ctx), None, local_name, func) { | 137 | if ctx.expects_type() { |
133 | self.add(item) | 138 | return; |
134 | } | 139 | } |
140 | self.add_opt(render_fn(RenderContext::new(ctx), None, local_name, func)); | ||
135 | } | 141 | } |
136 | 142 | ||
137 | pub(crate) fn add_method( | 143 | pub(crate) fn add_method( |
@@ -141,10 +147,7 @@ impl Completions { | |||
141 | receiver: Option<hir::Name>, | 147 | receiver: Option<hir::Name>, |
142 | local_name: Option<hir::Name>, | 148 | local_name: Option<hir::Name>, |
143 | ) { | 149 | ) { |
144 | if let Some(item) = render_method(RenderContext::new(ctx), None, receiver, local_name, func) | 150 | self.add_opt(render_method(RenderContext::new(ctx), None, receiver, local_name, func)); |
145 | { | ||
146 | self.add(item) | ||
147 | } | ||
148 | } | 151 | } |
149 | 152 | ||
150 | pub(crate) fn add_variant_pat( | 153 | pub(crate) fn add_variant_pat( |
@@ -153,9 +156,7 @@ impl Completions { | |||
153 | variant: hir::Variant, | 156 | variant: hir::Variant, |
154 | local_name: Option<hir::Name>, | 157 | local_name: Option<hir::Name>, |
155 | ) { | 158 | ) { |
156 | if let Some(item) = render_variant_pat(RenderContext::new(ctx), variant, local_name, None) { | 159 | self.add_opt(render_variant_pat(RenderContext::new(ctx), variant, local_name, None)); |
157 | self.add(item); | ||
158 | } | ||
159 | } | 160 | } |
160 | 161 | ||
161 | pub(crate) fn add_qualified_variant_pat( | 162 | pub(crate) fn add_qualified_variant_pat( |
@@ -164,9 +165,7 @@ impl Completions { | |||
164 | variant: hir::Variant, | 165 | variant: hir::Variant, |
165 | path: hir::ModPath, | 166 | path: hir::ModPath, |
166 | ) { | 167 | ) { |
167 | if let Some(item) = render_variant_pat(RenderContext::new(ctx), variant, None, Some(path)) { | 168 | self.add_opt(render_variant_pat(RenderContext::new(ctx), variant, None, Some(path))); |
168 | self.add(item); | ||
169 | } | ||
170 | } | 169 | } |
171 | 170 | ||
172 | pub(crate) fn add_struct_pat( | 171 | pub(crate) fn add_struct_pat( |
@@ -175,21 +174,18 @@ impl Completions { | |||
175 | strukt: hir::Struct, | 174 | strukt: hir::Struct, |
176 | local_name: Option<hir::Name>, | 175 | local_name: Option<hir::Name>, |
177 | ) { | 176 | ) { |
178 | if let Some(item) = render_struct_pat(RenderContext::new(ctx), strukt, local_name) { | 177 | self.add_opt(render_struct_pat(RenderContext::new(ctx), strukt, local_name)); |
179 | self.add(item); | ||
180 | } | ||
181 | } | 178 | } |
182 | 179 | ||
183 | pub(crate) fn add_const(&mut self, ctx: &CompletionContext, constant: hir::Const) { | 180 | pub(crate) fn add_const(&mut self, ctx: &CompletionContext, constant: hir::Const) { |
184 | if let Some(item) = render_const(RenderContext::new(ctx), constant) { | 181 | if ctx.expects_type() { |
185 | self.add(item); | 182 | return; |
186 | } | 183 | } |
184 | self.add_opt(render_const(RenderContext::new(ctx), constant)); | ||
187 | } | 185 | } |
188 | 186 | ||
189 | pub(crate) fn add_type_alias(&mut self, ctx: &CompletionContext, type_alias: hir::TypeAlias) { | 187 | pub(crate) fn add_type_alias(&mut self, ctx: &CompletionContext, type_alias: hir::TypeAlias) { |
190 | if let Some(item) = render_type_alias(RenderContext::new(ctx), type_alias) { | 188 | self.add_opt(render_type_alias(RenderContext::new(ctx), type_alias)); |
191 | self.add(item) | ||
192 | } | ||
193 | } | 189 | } |
194 | 190 | ||
195 | pub(crate) fn add_qualified_enum_variant( | 191 | pub(crate) fn add_qualified_enum_variant( |
@@ -208,6 +204,9 @@ impl Completions { | |||
208 | variant: hir::Variant, | 204 | variant: hir::Variant, |
209 | local_name: Option<hir::Name>, | 205 | local_name: Option<hir::Name>, |
210 | ) { | 206 | ) { |
207 | if ctx.expects_type() { | ||
208 | return; | ||
209 | } | ||
211 | let item = render_variant(RenderContext::new(ctx), None, local_name, variant, None); | 210 | let item = render_variant(RenderContext::new(ctx), None, local_name, variant, None); |
212 | self.add(item); | 211 | self.add(item); |
213 | } | 212 | } |