@@ -22,6 +22,7 @@ pub(crate) fn completions_for_selected_name<'b>(
2222 match ent. kind ( ) {
2323 Object ( object) => completions_for_type ( root, object. subtype . type_mark ( ) . kind ( ) ) ,
2424 Design ( design) => completions_for_design ( root, design) ,
25+ ElementDeclaration ( subtyp) => completions_for_type ( root, subtyp. type_mark . kind ( ) ) ,
2526 Library => ent
2627 . library_name ( )
2728 . map ( |sym| list_primaries_for_lib ( root, sym) )
@@ -201,4 +202,44 @@ end package x;
201202 ] ,
202203 ) ;
203204 }
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+ }
204245}
0 commit comments