Fix diff base text not being syntax-highlighted (#46001)

Regressed in #44838

- Wait to emit `LanguageChanged` from `BufferDiff` until the base text
has finished (re)parsing
- Set the language registry on the base text buffer before setting the
language, to ensure that language inclusions are correctly parsed

Release Notes:

- N/A (nightly only)
This commit is contained in:
Cole Miller authored and GitHub committed 2026-01-03 23:38:10 +00:00
1 parent 278e66d6a9
commit 228449f10e
1 file changed
+22 -7
+22 -7
View File
@@ -1293,13 +1293,28 @@ impl BufferDiff {
language_registry: Option<Arc<LanguageRegistry>>,
cx: &mut Context<Self>,
) {
self.inner.base_text.update(cx, |base_text, cx| {
base_text.set_language(language, cx);
if let Some(language_registry) = language_registry {
base_text.set_language_registry(language_registry);
}
});
cx.emit(BufferDiffEvent::LanguageChanged);
let base_text = self.inner.base_text.downgrade();
cx.spawn(async move |this, cx| {
let fut = base_text
.update(cx, |base_text, cx| {
if let Some(language_registry) = language_registry {
base_text.set_language_registry(language_registry);
}
base_text.set_language(language, cx);
base_text.parsing_idle()
})
.ok()?;
fut.await;
this.update(cx, |_, cx| {
cx.emit(BufferDiffEvent::LanguageChanged);
})
.ok()?;
Some(())
})
.detach();
}
pub fn set_snapshot(