Auto merge of #147045 - notriddle:search-index-entrydata-path, r=GuillaumeGomez
rustdoc-search: use the same ID for entry and path to same item This decreases the size of the compiler-doc from 57MiB to 56MiB. r? `@GuillaumeGomez`
This commit is contained in:
commit
4ffeda10e1
1 changed files with 32 additions and 8 deletions
|
|
@ -241,6 +241,34 @@ impl SerializedSearchIndex {
|
|||
self.alias_pointers.push(alias_pointer);
|
||||
index
|
||||
}
|
||||
/// Add potential search result to the database and return the row ID.
|
||||
///
|
||||
/// The returned ID can be used to attach more data to the search result.
|
||||
fn add_entry(&mut self, name: Symbol, entry_data: EntryData, desc: String) -> usize {
|
||||
let fqp = if let Some(module_path_index) = entry_data.module_path {
|
||||
let mut fqp = self.path_data[module_path_index].as_ref().unwrap().module_path.clone();
|
||||
fqp.push(Symbol::intern(&self.names[module_path_index]));
|
||||
fqp.push(name);
|
||||
fqp
|
||||
} else {
|
||||
vec![name]
|
||||
};
|
||||
// If a path with the same name already exists, but no entry does,
|
||||
// we can fill in the entry without having to allocate a new row ID.
|
||||
//
|
||||
// Because paths and entries both share the same index, using the same
|
||||
// ID saves space by making the tree smaller.
|
||||
if let Some(&other_path) = self.crate_paths_index.get(&(entry_data.ty, fqp))
|
||||
&& self.entry_data[other_path].is_none()
|
||||
&& self.descs[other_path].is_empty()
|
||||
{
|
||||
self.entry_data[other_path] = Some(entry_data);
|
||||
self.descs[other_path] = desc;
|
||||
other_path
|
||||
} else {
|
||||
self.push(name.as_str().to_string(), None, Some(entry_data), desc, None, None, None)
|
||||
}
|
||||
}
|
||||
fn push_path(&mut self, name: String, path_data: PathData) -> usize {
|
||||
self.push(name, Some(path_data), None, String::new(), None, None, None)
|
||||
}
|
||||
|
|
@ -1516,10 +1544,9 @@ pub(crate) fn build_index(
|
|||
.as_ref()
|
||||
.map(|path| serialized_index.get_id_by_module_path(path));
|
||||
|
||||
let new_entry_id = serialized_index.push(
|
||||
item.name.as_str().to_string(),
|
||||
None,
|
||||
Some(EntryData {
|
||||
let new_entry_id = serialized_index.add_entry(
|
||||
item.name,
|
||||
EntryData {
|
||||
ty: item.ty,
|
||||
parent: item.parent_idx,
|
||||
module_path,
|
||||
|
|
@ -1538,11 +1565,8 @@ pub(crate) fn build_index(
|
|||
None
|
||||
},
|
||||
krate: crate_idx,
|
||||
}),
|
||||
},
|
||||
item.desc.to_string(),
|
||||
None, // filled in after all the types have been indexed
|
||||
None,
|
||||
None,
|
||||
);
|
||||
|
||||
// Aliases
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue