Ensure injection layer is recomputed when language changes
Co-Authored-By: Max Brunsfeld <max@zed.dev>
This commit is contained in:
parent
79cf6fb8b6
commit
8dabdd1baa
1 changed files with 18 additions and 12 deletions
|
@ -5,7 +5,7 @@ use parking_lot::Mutex;
|
||||||
use std::{
|
use std::{
|
||||||
borrow::Cow,
|
borrow::Cow,
|
||||||
cell::RefCell,
|
cell::RefCell,
|
||||||
cmp::{Ordering, Reverse},
|
cmp::{self, Ordering, Reverse},
|
||||||
collections::BinaryHeap,
|
collections::BinaryHeap,
|
||||||
ops::{Deref, DerefMut, Range},
|
ops::{Deref, DerefMut, Range},
|
||||||
sync::Arc,
|
sync::Arc,
|
||||||
|
@ -1004,15 +1004,21 @@ fn get_injections(
|
||||||
prev_match = Some((mat.pattern_index, content_range.clone()));
|
prev_match = Some((mat.pattern_index, content_range.clone()));
|
||||||
|
|
||||||
let combined = config.patterns[mat.pattern_index].combined;
|
let combined = config.patterns[mat.pattern_index].combined;
|
||||||
let language_name = config.patterns[mat.pattern_index]
|
|
||||||
.language
|
let mut language_name = None;
|
||||||
.as_ref()
|
let mut step_range = content_range.clone();
|
||||||
.map(|s| Cow::Borrowed(s.as_ref()))
|
if let Some(name) = config.patterns[mat.pattern_index].language.as_ref() {
|
||||||
.or_else(|| {
|
language_name = Some(Cow::Borrowed(name.as_ref()))
|
||||||
let ix = config.language_capture_ix?;
|
} else if let Some(language_node) = config
|
||||||
let node = mat.nodes_for_capture_index(ix).next()?;
|
.language_capture_ix
|
||||||
Some(Cow::Owned(text.text_for_range(node.byte_range()).collect()))
|
.and_then(|ix| mat.nodes_for_capture_index(ix).next())
|
||||||
});
|
{
|
||||||
|
step_range.start = cmp::min(content_range.start, language_node.start_byte());
|
||||||
|
step_range.end = cmp::max(content_range.end, language_node.end_byte());
|
||||||
|
language_name = Some(Cow::Owned(
|
||||||
|
text.text_for_range(language_node.byte_range()).collect(),
|
||||||
|
))
|
||||||
|
};
|
||||||
|
|
||||||
if let Some(language_name) = language_name {
|
if let Some(language_name) = language_name {
|
||||||
let language = language_registry
|
let language = language_registry
|
||||||
|
@ -1020,8 +1026,8 @@ fn get_injections(
|
||||||
.or_else(|| language_registry.language_for_extension(&language_name));
|
.or_else(|| language_registry.language_for_extension(&language_name));
|
||||||
if let Some(language) = language {
|
if let Some(language) = language {
|
||||||
result = true;
|
result = true;
|
||||||
let range = text.anchor_before(content_range.start)
|
let range =
|
||||||
..text.anchor_after(content_range.end);
|
text.anchor_before(step_range.start)..text.anchor_after(step_range.end);
|
||||||
if combined {
|
if combined {
|
||||||
combined_injection_ranges
|
combined_injection_ranges
|
||||||
.get_mut(&language.clone())
|
.get_mut(&language.clone())
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue