use crate::analysis::DesignRoot;
use crate::CompletionItem;
use std::iter::once;
pub(crate) fn list_all_libraries(root: &DesignRoot) -> Vec<CompletionItem<'_>> {
root.libraries()
.map(|lib| CompletionItem::Simple(root.get_ent(lib.id())))
.chain(once(CompletionItem::Work))
.collect()
}
#[cfg(test)]
mod tests {
use crate::analysis::tests::{Code, LibraryBuilder};
use crate::syntax::test::assert_eq_unordered;
use crate::{list_completion_options, CompletionItem};
#[test]
pub fn completing_libraries() {
let input = LibraryBuilder::new();
let code = Code::new("library ");
let (root, _) = input.get_analyzed_root();
let cursor = code.end();
let options = list_completion_options(&root, code.source(), cursor);
assert_eq_unordered(
&options,
&[
CompletionItem::Simple(
root.get_ent(root.get_lib(&root.symbol_utf8("std")).unwrap().id()),
),
CompletionItem::Work,
],
)
}
#[test]
pub fn completes_external_library_names() {
let input = LibraryBuilder::new();
let code = Code::new("<< signal @");
let (root, _) = input.get_analyzed_root();
let cursor = code.end();
let options = list_completion_options(&root, code.source(), cursor);
assert_eq_unordered(
&options,
&[
CompletionItem::Simple(
root.get_ent(root.get_lib(&root.symbol_utf8("std")).unwrap().id()),
),
CompletionItem::Work,
],
)
}
}