Fix using wrong length for max_len arg

This commit is contained in:
Lukas Wirth 2024-07-21 11:16:23 +02:00
parent 2564b69e1d
commit 9fd6d26e97

View file

@ -381,7 +381,7 @@ fn calculate_best_path(
visited_modules, visited_modules,
info.container, info.container,
true, true,
best_choice.as_ref().map_or(max_len, |it| it.path_len) - 1, best_choice.as_ref().map_or(max_len, |it| it.path.len()) - 1,
); );
let Some(mut choice) = choice else { let Some(mut choice) = choice else {
continue; continue;
@ -450,6 +450,11 @@ fn calculate_best_path_local(
item: ItemInNs, item: ItemInNs,
max_len: usize, max_len: usize,
) -> Option<Choice> { ) -> Option<Choice> {
if max_len <= 1 {
// recursive base case, we can't find a path prefix of length 0, one segment is occupied by
// the item's name itself.
return None;
}
let mut best_choice = None::<Choice>; let mut best_choice = None::<Choice>;
// FIXME: cache the `find_local_import_locations` output? // FIXME: cache the `find_local_import_locations` output?
find_local_import_locations(ctx.db, item, ctx.from, ctx.from_def_map, |name, module_id| { find_local_import_locations(ctx.db, item, ctx.from, ctx.from_def_map, |name, module_id| {
@ -463,7 +468,7 @@ fn calculate_best_path_local(
visited_modules, visited_modules,
module_id, module_id,
false, false,
best_choice.as_ref().map_or(max_len, |it| it.path_len) - 1, best_choice.as_ref().map_or(max_len, |it| it.path.len()) - 1,
) { ) {
best_choice = Some(match best_choice.take() { best_choice = Some(match best_choice.take() {
Some(best_choice) => best_choice.select(path, name.clone()), Some(best_choice) => best_choice.select(path, name.clone()),