@@ -22,6 +22,7 @@ pub(crate) fn completions_for_selected_name<'b>(
22
22
match ent. kind ( ) {
23
23
Object ( object) => completions_for_type ( root, object. subtype . type_mark ( ) . kind ( ) ) ,
24
24
Design ( design) => completions_for_design ( root, design) ,
25
+ ElementDeclaration ( subtyp) => completions_for_type ( root, subtyp. type_mark . kind ( ) ) ,
25
26
Library => ent
26
27
. library_name ( )
27
28
. map ( |sym| list_primaries_for_lib ( root, sym) )
@@ -201,4 +202,44 @@ end package x;
201
202
] ,
202
203
) ;
203
204
}
205
+
206
+ #[ test]
207
+ pub fn completing_nested_records ( ) {
208
+ let mut builder = LibraryBuilder :: new ( ) ;
209
+ let code = builder. code (
210
+ "libA" ,
211
+ "\
212
+ package foo is
213
+ type t_subrec is record
214
+ elem_a: bit;
215
+ elem_b: bit;
216
+ end record;
217
+
218
+ type my_record is record
219
+ abc: t_subrec;
220
+ end record;
221
+
222
+ signal y: my_record;
223
+ signal z: bit := y.abc.
224
+ end foo;
225
+ " ,
226
+ ) ;
227
+
228
+ let ( root, _) = builder. get_analyzed_root ( ) ;
229
+ let cursor = code. s1 ( "abc." ) . end ( ) ;
230
+ let options = list_completion_options ( & root, code. source ( ) , cursor) ;
231
+
232
+ let ent1 = root
233
+ . search_reference ( code. source ( ) , code. s1 ( "elem_a" ) . start ( ) )
234
+ . unwrap ( ) ;
235
+
236
+ let ent2 = root
237
+ . search_reference ( code. source ( ) , code. s1 ( "elem_b" ) . start ( ) )
238
+ . unwrap ( ) ;
239
+
240
+ assert_eq_unordered (
241
+ & options,
242
+ & [ CompletionItem :: Simple ( ent1) , CompletionItem :: Simple ( ent2) ] ,
243
+ )
244
+ }
204
245
}
0 commit comments