lsp: Skip computation of edits_since_save
when there are no disk based diagnostics (#23269)
Thought of this improvement while @ConradIrwin and I were looking into whether this code is misbehaving. It seems not to be. Release Notes: - N/A
This commit is contained in:
parent
9a7b73b161
commit
10f358633b
1 changed files with 13 additions and 9 deletions
|
@ -1826,8 +1826,6 @@ impl LocalLspStore {
|
||||||
.then_with(|| a.message.cmp(&b.message))
|
.then_with(|| a.message.cmp(&b.message))
|
||||||
}
|
}
|
||||||
|
|
||||||
let snapshot = self.buffer_snapshot_for_lsp_version(buffer, server_id, version, cx)?;
|
|
||||||
|
|
||||||
diagnostics.sort_unstable_by(|a, b| {
|
diagnostics.sort_unstable_by(|a, b| {
|
||||||
Ordering::Equal
|
Ordering::Equal
|
||||||
.then_with(|| a.range.start.cmp(&b.range.start))
|
.then_with(|| a.range.start.cmp(&b.range.start))
|
||||||
|
@ -1835,12 +1833,18 @@ impl LocalLspStore {
|
||||||
.then_with(|| compare_diagnostics(&a.diagnostic, &b.diagnostic))
|
.then_with(|| compare_diagnostics(&a.diagnostic, &b.diagnostic))
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let snapshot = self.buffer_snapshot_for_lsp_version(buffer, server_id, version, cx)?;
|
||||||
|
|
||||||
|
let edits_since_save = std::cell::LazyCell::new(|| {
|
||||||
|
let saved_version = buffer.read(cx).saved_version();
|
||||||
|
Patch::new(
|
||||||
|
snapshot
|
||||||
|
.edits_since::<Unclipped<PointUtf16>>(saved_version)
|
||||||
|
.collect(),
|
||||||
|
)
|
||||||
|
});
|
||||||
|
|
||||||
let mut sanitized_diagnostics = Vec::new();
|
let mut sanitized_diagnostics = Vec::new();
|
||||||
let edits_since_save = Patch::new(
|
|
||||||
snapshot
|
|
||||||
.edits_since::<Unclipped<PointUtf16>>(buffer.read(cx).saved_version())
|
|
||||||
.collect(),
|
|
||||||
);
|
|
||||||
for entry in diagnostics {
|
for entry in diagnostics {
|
||||||
let start;
|
let start;
|
||||||
let end;
|
let end;
|
||||||
|
@ -1848,8 +1852,8 @@ impl LocalLspStore {
|
||||||
// Some diagnostics are based on files on disk instead of buffers'
|
// Some diagnostics are based on files on disk instead of buffers'
|
||||||
// current contents. Adjust these diagnostics' ranges to reflect
|
// current contents. Adjust these diagnostics' ranges to reflect
|
||||||
// any unsaved edits.
|
// any unsaved edits.
|
||||||
start = edits_since_save.old_to_new(entry.range.start);
|
start = (*edits_since_save).old_to_new(entry.range.start);
|
||||||
end = edits_since_save.old_to_new(entry.range.end);
|
end = (*edits_since_save).old_to_new(entry.range.end);
|
||||||
} else {
|
} else {
|
||||||
start = entry.range.start;
|
start = entry.range.start;
|
||||||
end = entry.range.end;
|
end = entry.range.end;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue