editor: Fix panic when editor::SelectLargerSyntaxNode overflows excerpt in multi buffer (#25585)

Closes #25513

This PR handles case when `editor::SelectLargerSyntaxNode` expands
across excerpt boundaries and eventually crashes in multi buffer.

Release Notes:

- Fixed panic caused when `editor::SelectLargerSyntaxNode` is called
repetedly in multi buffer.

Co-authored-by: Ben Kunkle <ben.kunkle@gmail.com>
This commit is contained in:
smit 2025-02-26 01:05:00 +05:30 committed by GitHub
parent 014d9dfce1
commit 0559e1f348
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 35 additions and 10 deletions

View file

@ -132,7 +132,7 @@ pub use multi_buffer::{
};
use multi_buffer::{
ExcerptInfo, ExpandExcerptDirection, MultiBufferDiffHunk, MultiBufferPoint, MultiBufferRow,
ToOffsetUtf16,
MultiOrSingleBufferOffsetRange, ToOffsetUtf16,
};
use project::{
lsp_store::{CompletionDocumentation, FormatTrigger, LspFormatTarget, OpenLspBufferHandle},
@ -10738,7 +10738,10 @@ impl Editor {
while let Some((node, containing_range)) = buffer.syntax_ancestor(new_range.clone())
{
new_node = Some(node);
new_range = containing_range;
new_range = match containing_range {
MultiOrSingleBufferOffsetRange::Single(_) => break,
MultiOrSingleBufferOffsetRange::Multi(range) => range,
};
if !display_map.intersects_fold(new_range.start)
&& !display_map.intersects_fold(new_range.end)
{