Skip to content

Commit bd29fa3

Browse files
authored
Merge pull request #360 from Schottkyc137/more-records-completions
Fix: complete nested records
2 parents 812eccb + 9d3b4bd commit bd29fa3

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

vhdl_lang/src/completion/selected.rs

+41
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)