aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide/src
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide/src')
-rw-r--r--crates/ra_ide/src/completion/complete_dot.rs231
-rw-r--r--crates/ra_ide/src/completion/presentation.rs231
2 files changed, 231 insertions, 231 deletions
diff --git a/crates/ra_ide/src/completion/complete_dot.rs b/crates/ra_ide/src/completion/complete_dot.rs
index 44288f92e..b93153b48 100644
--- a/crates/ra_ide/src/completion/complete_dot.rs
+++ b/crates/ra_ide/src/completion/complete_dot.rs
@@ -106,237 +106,6 @@ mod tests {
106 } 106 }
107 107
108 #[test] 108 #[test]
109 fn test_struct_field_completion_in_func_call() {
110 assert_debug_snapshot!(
111 do_ref_completion(
112 r"
113 struct A { another_field: i64, the_field: u32, my_string: String }
114 fn test(my_param: u32) -> u32 { my_param }
115 fn foo(a: A) {
116 test(a.<|>)
117 }
118 ",
119 ),
120 @r###"
121 [
122 CompletionItem {
123 label: "another_field",
124 source_range: [201; 201),
125 delete: [201; 201),
126 insert: "another_field",
127 kind: Field,
128 detail: "i64",
129 },
130 CompletionItem {
131 label: "my_string",
132 source_range: [201; 201),
133 delete: [201; 201),
134 insert: "my_string",
135 kind: Field,
136 detail: "{unknown}",
137 },
138 CompletionItem {
139 label: "the_field",
140 source_range: [201; 201),
141 delete: [201; 201),
142 insert: "the_field",
143 kind: Field,
144 detail: "u32",
145 score: TypeMatch,
146 },
147 ]
148 "###
149 );
150 }
151
152 #[test]
153 fn test_struct_field_completion_in_func_call_with_type_and_name() {
154 assert_debug_snapshot!(
155 do_ref_completion(
156 r"
157 struct A { another_field: i64, another_good_type: u32, the_field: u32 }
158 fn test(the_field: u32) -> u32 { the_field }
159 fn foo(a: A) {
160 test(a.<|>)
161 }
162 ",
163 ),
164 @r###"
165 [
166 CompletionItem {
167 label: "another_field",
168 source_range: [208; 208),
169 delete: [208; 208),
170 insert: "another_field",
171 kind: Field,
172 detail: "i64",
173 },
174 CompletionItem {
175 label: "another_good_type",
176 source_range: [208; 208),
177 delete: [208; 208),
178 insert: "another_good_type",
179 kind: Field,
180 detail: "u32",
181 score: TypeMatch,
182 },
183 CompletionItem {
184 label: "the_field",
185 source_range: [208; 208),
186 delete: [208; 208),
187 insert: "the_field",
188 kind: Field,
189 detail: "u32",
190 score: TypeAndNameMatch,
191 },
192 ]
193 "###
194 );
195 }
196
197 #[test]
198 fn test_struct_field_completion_in_record_lit() {
199 assert_debug_snapshot!(
200 do_ref_completion(
201 r"
202 struct A { another_field: i64, another_good_type: u32, the_field: u32 }
203 struct B { my_string: String, my_vec: Vec<u32>, the_field: u32 }
204 fn foo(a: A) {
205 let b = B {
206 the_field: a.<|>
207 };
208 }
209 ",
210 ),
211 @r###"
212 [
213 CompletionItem {
214 label: "another_field",
215 source_range: [270; 270),
216 delete: [270; 270),
217 insert: "another_field",
218 kind: Field,
219 detail: "i64",
220 },
221 CompletionItem {
222 label: "another_good_type",
223 source_range: [270; 270),
224 delete: [270; 270),
225 insert: "another_good_type",
226 kind: Field,
227 detail: "u32",
228 score: TypeMatch,
229 },
230 CompletionItem {
231 label: "the_field",
232 source_range: [270; 270),
233 delete: [270; 270),
234 insert: "the_field",
235 kind: Field,
236 detail: "u32",
237 score: TypeAndNameMatch,
238 },
239 ]
240 "###
241 );
242 }
243
244 #[test]
245 fn test_struct_field_completion_in_record_lit_and_fn_call() {
246 assert_debug_snapshot!(
247 do_ref_completion(
248 r"
249 struct A { another_field: i64, another_good_type: u32, the_field: u32 }
250 struct B { my_string: String, my_vec: Vec<u32>, the_field: u32 }
251 fn test(the_field: i64) -> i64 { the_field }
252 fn foo(a: A) {
253 let b = B {
254 the_field: test(a.<|>)
255 };
256 }
257 ",
258 ),
259 @r###"
260 [
261 CompletionItem {
262 label: "another_field",
263 source_range: [336; 336),
264 delete: [336; 336),
265 insert: "another_field",
266 kind: Field,
267 detail: "i64",
268 score: TypeMatch,
269 },
270 CompletionItem {
271 label: "another_good_type",
272 source_range: [336; 336),
273 delete: [336; 336),
274 insert: "another_good_type",
275 kind: Field,
276 detail: "u32",
277 },
278 CompletionItem {
279 label: "the_field",
280 source_range: [336; 336),
281 delete: [336; 336),
282 insert: "the_field",
283 kind: Field,
284 detail: "u32",
285 },
286 ]
287 "###
288 );
289 }
290
291 #[test]
292 fn test_struct_field_completion_in_fn_call_and_record_lit() {
293 assert_debug_snapshot!(
294 do_ref_completion(
295 r"
296 struct A { another_field: i64, another_good_type: u32, the_field: u32 }
297 struct B { my_string: String, my_vec: Vec<u32>, the_field: u32 }
298 fn test(the_field: i64) -> i64 { the_field }
299 fn foo(a: A) {
300 test(B {
301 the_field: a.<|>
302 });
303 }
304 ",
305 ),
306 @r###"
307 [
308 CompletionItem {
309 label: "another_field",
310 source_range: [328; 328),
311 delete: [328; 328),
312 insert: "another_field",
313 kind: Field,
314 detail: "i64",
315 },
316 CompletionItem {
317 label: "another_good_type",
318 source_range: [328; 328),
319 delete: [328; 328),
320 insert: "another_good_type",
321 kind: Field,
322 detail: "u32",
323 score: TypeMatch,
324 },
325 CompletionItem {
326 label: "the_field",
327 source_range: [328; 328),
328 delete: [328; 328),
329 insert: "the_field",
330 kind: Field,
331 detail: "u32",
332 score: TypeAndNameMatch,
333 },
334 ]
335 "###
336 );
337 }
338
339 #[test]
340 fn test_struct_field_completion_self() { 109 fn test_struct_field_completion_self() {
341 assert_debug_snapshot!( 110 assert_debug_snapshot!(
342 do_ref_completion( 111 do_ref_completion(
diff --git a/crates/ra_ide/src/completion/presentation.rs b/crates/ra_ide/src/completion/presentation.rs
index ab43d2a0a..ae15f91de 100644
--- a/crates/ra_ide/src/completion/presentation.rs
+++ b/crates/ra_ide/src/completion/presentation.rs
@@ -1070,4 +1070,235 @@ mod tests {
1070 "### 1070 "###
1071 ); 1071 );
1072 } 1072 }
1073
1074 #[test]
1075 fn test_struct_field_completion_in_func_call() {
1076 assert_debug_snapshot!(
1077 do_reference_completion(
1078 r"
1079 struct A { another_field: i64, the_field: u32, my_string: String }
1080 fn test(my_param: u32) -> u32 { my_param }
1081 fn foo(a: A) {
1082 test(a.<|>)
1083 }
1084 ",
1085 ),
1086 @r###"
1087 [
1088 CompletionItem {
1089 label: "another_field",
1090 source_range: [201; 201),
1091 delete: [201; 201),
1092 insert: "another_field",
1093 kind: Field,
1094 detail: "i64",
1095 },
1096 CompletionItem {
1097 label: "my_string",
1098 source_range: [201; 201),
1099 delete: [201; 201),
1100 insert: "my_string",
1101 kind: Field,
1102 detail: "{unknown}",
1103 },
1104 CompletionItem {
1105 label: "the_field",
1106 source_range: [201; 201),
1107 delete: [201; 201),
1108 insert: "the_field",
1109 kind: Field,
1110 detail: "u32",
1111 score: TypeMatch,
1112 },
1113 ]
1114 "###
1115 );
1116 }
1117
1118 #[test]
1119 fn test_struct_field_completion_in_func_call_with_type_and_name() {
1120 assert_debug_snapshot!(
1121 do_reference_completion(
1122 r"
1123 struct A { another_field: i64, another_good_type: u32, the_field: u32 }
1124 fn test(the_field: u32) -> u32 { the_field }
1125 fn foo(a: A) {
1126 test(a.<|>)
1127 }
1128 ",
1129 ),
1130 @r###"
1131 [
1132 CompletionItem {
1133 label: "another_field",
1134 source_range: [208; 208),
1135 delete: [208; 208),
1136 insert: "another_field",
1137 kind: Field,
1138 detail: "i64",
1139 },
1140 CompletionItem {
1141 label: "another_good_type",
1142 source_range: [208; 208),
1143 delete: [208; 208),
1144 insert: "another_good_type",
1145 kind: Field,
1146 detail: "u32",
1147 score: TypeMatch,
1148 },
1149 CompletionItem {
1150 label: "the_field",
1151 source_range: [208; 208),
1152 delete: [208; 208),
1153 insert: "the_field",
1154 kind: Field,
1155 detail: "u32",
1156 score: TypeAndNameMatch,
1157 },
1158 ]
1159 "###
1160 );
1161 }
1162
1163 #[test]
1164 fn test_struct_field_completion_in_record_lit() {
1165 assert_debug_snapshot!(
1166 do_reference_completion(
1167 r"
1168 struct A { another_field: i64, another_good_type: u32, the_field: u32 }
1169 struct B { my_string: String, my_vec: Vec<u32>, the_field: u32 }
1170 fn foo(a: A) {
1171 let b = B {
1172 the_field: a.<|>
1173 };
1174 }
1175 ",
1176 ),
1177 @r###"
1178 [
1179 CompletionItem {
1180 label: "another_field",
1181 source_range: [270; 270),
1182 delete: [270; 270),
1183 insert: "another_field",
1184 kind: Field,
1185 detail: "i64",
1186 },
1187 CompletionItem {
1188 label: "another_good_type",
1189 source_range: [270; 270),
1190 delete: [270; 270),
1191 insert: "another_good_type",
1192 kind: Field,
1193 detail: "u32",
1194 score: TypeMatch,
1195 },
1196 CompletionItem {
1197 label: "the_field",
1198 source_range: [270; 270),
1199 delete: [270; 270),
1200 insert: "the_field",
1201 kind: Field,
1202 detail: "u32",
1203 score: TypeAndNameMatch,
1204 },
1205 ]
1206 "###
1207 );
1208 }
1209
1210 #[test]
1211 fn test_struct_field_completion_in_record_lit_and_fn_call() {
1212 assert_debug_snapshot!(
1213 do_reference_completion(
1214 r"
1215 struct A { another_field: i64, another_good_type: u32, the_field: u32 }
1216 struct B { my_string: String, my_vec: Vec<u32>, the_field: u32 }
1217 fn test(the_field: i64) -> i64 { the_field }
1218 fn foo(a: A) {
1219 let b = B {
1220 the_field: test(a.<|>)
1221 };
1222 }
1223 ",
1224 ),
1225 @r###"
1226 [
1227 CompletionItem {
1228 label: "another_field",
1229 source_range: [336; 336),
1230 delete: [336; 336),
1231 insert: "another_field",
1232 kind: Field,
1233 detail: "i64",
1234 score: TypeMatch,
1235 },
1236 CompletionItem {
1237 label: "another_good_type",
1238 source_range: [336; 336),
1239 delete: [336; 336),
1240 insert: "another_good_type",
1241 kind: Field,
1242 detail: "u32",
1243 },
1244 CompletionItem {
1245 label: "the_field",
1246 source_range: [336; 336),
1247 delete: [336; 336),
1248 insert: "the_field",
1249 kind: Field,
1250 detail: "u32",
1251 },
1252 ]
1253 "###
1254 );
1255 }
1256
1257 #[test]
1258 fn test_struct_field_completion_in_fn_call_and_record_lit() {
1259 assert_debug_snapshot!(
1260 do_reference_completion(
1261 r"
1262 struct A { another_field: i64, another_good_type: u32, the_field: u32 }
1263 struct B { my_string: String, my_vec: Vec<u32>, the_field: u32 }
1264 fn test(the_field: i64) -> i64 { the_field }
1265 fn foo(a: A) {
1266 test(B {
1267 the_field: a.<|>
1268 });
1269 }
1270 ",
1271 ),
1272 @r###"
1273 [
1274 CompletionItem {
1275 label: "another_field",
1276 source_range: [328; 328),
1277 delete: [328; 328),
1278 insert: "another_field",
1279 kind: Field,
1280 detail: "i64",
1281 },
1282 CompletionItem {
1283 label: "another_good_type",
1284 source_range: [328; 328),
1285 delete: [328; 328),
1286 insert: "another_good_type",
1287 kind: Field,
1288 detail: "u32",
1289 score: TypeMatch,
1290 },
1291 CompletionItem {
1292 label: "the_field",
1293 source_range: [328; 328),
1294 delete: [328; 328),
1295 insert: "the_field",
1296 kind: Field,
1297 detail: "u32",
1298 score: TypeAndNameMatch,
1299 },
1300 ]
1301 "###
1302 );
1303 }
1073} 1304}