From 9324d0730d3293ec5938b80cf93db836070da7bc Mon Sep 17 00:00:00 2001 From: Denis Bezrukov <6227442+denbezrukov@users.noreply.github.com> Date: Tue, 19 Sep 2023 22:42:09 +0300 Subject: [PATCH 1/2] refactor(formatter): Use OnceCell in Memoized --- crates/biome_formatter/src/format_extensions.rs | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/crates/biome_formatter/src/format_extensions.rs b/crates/biome_formatter/src/format_extensions.rs index 21c99c29c50b..dbcfaade30eb 100644 --- a/crates/biome_formatter/src/format_extensions.rs +++ b/crates/biome_formatter/src/format_extensions.rs @@ -1,5 +1,5 @@ use crate::prelude::*; -use std::cell::RefCell; +use std::cell::OnceCell; use std::marker::PhantomData; use std::ops::Deref; @@ -70,7 +70,7 @@ impl MemoizeFormat for T where T: Format {} #[derive(Debug)] pub struct Memoized { inner: F, - memory: RefCell>>>, + memory: OnceCell>>, options: PhantomData, } @@ -81,7 +81,7 @@ where fn new(inner: F) -> Self { Self { inner, - memory: RefCell::new(None), + memory: OnceCell::new(), options: PhantomData, } } @@ -143,10 +143,7 @@ where /// /// ``` pub fn inspect(&mut self, f: &mut Formatter) -> FormatResult<&[FormatElement]> { - let result = self - .memory - .get_mut() - .get_or_insert_with(|| f.intern(&self.inner)); + let result = self.memory.get_or_init(|| f.intern(&self.inner)); match result.as_ref() { Ok(Some(FormatElement::Interned(interned))) => Ok(interned.deref()), @@ -162,8 +159,7 @@ where F: Format, { fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { - let mut memory = self.memory.borrow_mut(); - let result = memory.get_or_insert_with(|| f.intern(&self.inner)); + let result = self.memory.get_or_init(|| f.intern(&self.inner)); match result { Ok(Some(elements)) => { From 2bfca2b202075f7c6f63eb0f4fc59627416089ac Mon Sep 17 00:00:00 2001 From: Denis Bezrukov <6227442+denbezrukov@users.noreply.github.com> Date: Tue, 19 Sep 2023 22:45:25 +0300 Subject: [PATCH 2/2] refactor(formatter): Use OnceCell in Memoized --- CHANGELOG.md | 4 ++++ website/src/content/docs/internals/changelog.mdx | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index aef18e0306f7..c59971b14b3b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,10 @@ Read our [guidelines for writing a good changelog entry](https://github.com/biom ### Configuration ### Editors ### Formatter + +#### Enhancements +- Use `OnceCell` for the Memoized memory because that's what the `RefCell