Skip to content

Commit 839af0f

Browse files
committed
index: finally remove shortcut for entries without dots
since using a label cache in form o a hash map, it is that fast, that the shortcut for labels is not needed anymore as it was never implemented correctly, this should now fix all occurrences when packages could not be displayed in the search results
1 parent 5a299a0 commit 839af0f

File tree

1 file changed

+23
-32
lines changed

1 file changed

+23
-32
lines changed

libixx/src/index.rs

Lines changed: 23 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -195,33 +195,26 @@ impl IndexBuilder {
195195

196196
pub fn push(&mut self, scope_id: u8, name: &str) {
197197
// optimize, if there is no dot in the name, compression does not make sense
198-
let labels = if name.contains('.') {
199-
name
200-
.split('.')
201-
.enumerate()
202-
.map(|(label_idx, segment)| {
203-
let segment = segment.as_bytes();
204-
205-
if let Some((entry_idx, label_idx)) = self.label_cache.get(segment) {
206-
return Label::Reference(Reference {
207-
entry_idx: *entry_idx as u64,
208-
label_idx: *label_idx,
209-
});
210-
}
198+
let labels = name
199+
.split('.')
200+
.enumerate()
201+
.map(|(label_idx, segment)| {
202+
let segment = segment.as_bytes();
203+
204+
if let Some((entry_idx, label_idx)) = self.label_cache.get(segment) {
205+
return Label::Reference(Reference {
206+
entry_idx: *entry_idx as u64,
207+
label_idx: *label_idx,
208+
});
209+
}
211210

212-
self
213-
.label_cache
214-
.insert(segment.to_vec(), (self.index.entries.len(), label_idx as u8));
211+
self
212+
.label_cache
213+
.insert(segment.to_vec(), (self.index.entries.len(), label_idx as u8));
215214

216-
Label::InPlace(segment.to_vec())
217-
})
218-
.collect()
219-
} else {
220-
self
221-
.label_cache
222-
.insert(name.as_bytes().to_vec(), (self.index.entries.len(), 0));
223-
vec![Label::InPlace(name.into())]
224-
};
215+
Label::InPlace(segment.to_vec())
216+
})
217+
.collect();
225218

226219
self.index.entries.push(Entry { scope_id, labels });
227220
}
@@ -498,21 +491,19 @@ mod tests {
498491

499492
assert_eq!(index.entries[0].labels.len(), 2);
500493
match &index.entries[0].labels[0] {
501-
Label::Reference(reference) => {
502-
assert_eq!(reference.entry_idx, 0);
503-
assert_eq!(reference.label_idx, 0);
504-
}
505494
Label::InPlace(label) => assert_eq!(label, b"nixosTests"),
495+
_ => unreachable!("Expected Reference label"),
506496
}
507497
match &index.entries[0].labels[1] {
508498
Label::InPlace(label) => assert_eq!(label, b"pretalx"),
509-
_ => unreachable!("Expected no InPlace label"),
499+
_ => unreachable!("Expected InPlace label"),
510500
}
511501

512502
assert_eq!(index.entries[1].labels.len(), 1);
513503
match &index.entries[1].labels[0] {
514-
Label::InPlace(label) => { // TODO!!! this should be a Reference!
515-
assert_eq!(label, b"pretalx");
504+
Label::Reference(reference) => {
505+
assert_eq!(reference.entry_idx, 0);
506+
assert_eq!(reference.label_idx, 1);
516507
}
517508
_ => unreachable!("Expected no Reference label"),
518509
}

0 commit comments

Comments
 (0)