diff options
| author | Laurenz <laurmaedje@gmail.com> | 2023-04-13 14:23:46 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2023-04-13 14:23:46 +0200 |
| commit | 89cf4054d61d296245b34a20f9ad0b749c0f83e2 (patch) | |
| tree | 38aaae4cf2a5e4b5f67e59d499f652c2eb3a372a /src/syntax | |
| parent | f2732bb7b205361c5f309488b4e5235b4fc61e7c (diff) | |
Reduce amount of hashing
Diffstat (limited to 'src/syntax')
| -rw-r--r-- | src/syntax/source.rs | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/src/syntax/source.rs b/src/syntax/source.rs index 233fb367..a51da301 100644 --- a/src/syntax/source.rs +++ b/src/syntax/source.rs @@ -110,9 +110,7 @@ impl Source { pub fn edit(&mut self, replace: Range<usize>, with: &str) -> Range<usize> { let start_byte = replace.start; let start_utf16 = self.byte_to_utf16(replace.start).unwrap(); - let mut text = std::mem::take(&mut self.text).into_inner(); - text.replace_range(replace.clone(), with); - self.text = Prehashed::new(text); + self.text.update(|text| text.replace_range(replace.clone(), with)); // Remove invalidated line starts. let line = self.byte_to_line(start_byte).unwrap(); @@ -128,10 +126,8 @@ impl Source { .extend(lines_from(start_byte, start_utf16, &self.text[start_byte..])); // Incrementally reparse the replaced range. - let mut root = std::mem::take(&mut self.root).into_inner(); - let range = reparse(&mut root, &self.text, replace, with.len()); - self.root = Prehashed::new(root); - range + self.root + .update(|root| reparse(root, &self.text, replace, with.len())) } /// Get the length of the file in UTF-8 encoded bytes. |
