in source/Highlights.cpp [535:578]
LocalPositionSet Highlights::filter_overlapping_highlights(
const LocalPositionSet& local_positions) {
mt_assert(local_positions.is_value());
std::unordered_map<int, std::vector<const Position*>> grouped_by_line;
for (const auto* local_position : local_positions.elements()) {
auto line = local_position->line();
auto& same_line_positions = grouped_by_line[line];
if (same_line_positions.empty()) {
same_line_positions.push_back(local_position);
continue;
}
// No need to replace any existing highlights if the current one is empty
if (local_position->end() <= 0) {
continue;
}
auto current_start = local_position->start();
auto current_end = local_position->end();
std::vector<const Position*> new_positions;
bool seen_shorter_overlapping_with_current = false;
for (const auto* position : same_line_positions) {
if (position->end() <= 0) {
continue;
}
if (!position->overlaps(*local_position)) {
new_positions.push_back(position);
} else if (
current_end - current_start > position->end() - position->start()) {
new_positions.push_back(position);
seen_shorter_overlapping_with_current = true;
}
}
if (!seen_shorter_overlapping_with_current) {
new_positions.push_back(local_position);
}
same_line_positions = std::move(new_positions);
}
auto new_local_positions = LocalPositionSet();
for (const auto& [_, positions] : grouped_by_line) {
for (const auto* position : positions) {
new_local_positions.add(position);
}
}
return new_local_positions;
}