internal: Improve completion tests by checking that the offset is included in the source_range of items

This commit is contained in:
Lukas Wirth 2022-05-06 13:11:50 +02:00
parent 57a9915c1f
commit 582f99d293
2 changed files with 12 additions and 2 deletions

View file

@ -26,7 +26,7 @@ pub struct CompletionItem {
/// It should be used primarily for UI, but we also use this to convert
/// generic TextEdit into LSP's completion edit (see conv.rs).
///
/// `source_range` must contain the completion offset. `insert_text` should
/// `source_range` must contain the completion offset. `text_edit` should
/// start with what `source_range` points to, or VSCode will filter out the
/// completion silently.
source_range: TextRange,

View file

@ -214,7 +214,17 @@ pub(crate) fn check_pattern_is_applicable(code: &str, check: impl FnOnce(SyntaxE
pub(crate) fn get_all_items(config: CompletionConfig, code: &str) -> Vec<CompletionItem> {
let (db, position) = position(code);
crate::completions(&db, &config, position).map_or_else(Vec::default, Into::into)
let res = crate::completions(&db, &config, position).map_or_else(Vec::default, Into::into);
// validate
res.iter().for_each(|it| {
let sr = it.source_range();
assert!(
sr.contains_inclusive(position.offset),
"source range {sr:?} does not contain the offset {:?} of the completion request: {it:?}",
position.offset
);
});
res
}
#[test]