Skip to content

Commit ca78653

Browse files
sinkuutopecongiro
authored andcommitted
Use Cell instead of RefCell (#3798)
1 parent 789a097 commit ca78653

File tree

5 files changed

+22
-27
lines changed

5 files changed

+22
-27
lines changed

src/chains.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -647,7 +647,7 @@ impl<'a> ChainFormatterShared<'a> {
647647
Cow::from("")
648648
} else {
649649
// Use new lines.
650-
if *context.force_one_line_chain.borrow() {
650+
if context.force_one_line_chain.get() {
651651
return None;
652652
}
653653
child_shape.to_string_with_newline(context.config)

src/macros.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,7 @@ pub(crate) fn rewrite_macro_def(
528528
Some(v) => Some(v),
529529
// if the rewrite returned None because a macro could not be rewritten, then return the
530530
// original body
531-
None if *context.macro_rewrite_failure.borrow() => {
531+
None if context.macro_rewrite_failure.get() => {
532532
Some(context.snippet(branch.body).trim().to_string())
533533
}
534534
None => None,

src/overflow.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ impl<'a> Context<'a> {
465465
// Replace the last item with its first line to see if it fits with
466466
// first arguments.
467467
let placeholder = if overflow_last {
468-
let old_value = *self.context.force_one_line_chain.borrow();
468+
let old_value = self.context.force_one_line_chain.get();
469469
match self.last_item() {
470470
Some(OverflowableItem::Expr(expr))
471471
if !combine_arg_with_callee && is_method_call(expr) =>

src/rewrite.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// A generic trait to abstract the rewriting of an element (of the AST).
22

3-
use std::cell::RefCell;
3+
use std::cell::{Cell, RefCell};
44
use std::rc::Rc;
55

66
use syntax::parse::ParseSess;
@@ -29,25 +29,25 @@ pub(crate) struct RewriteContext<'a> {
2929
pub(crate) parse_session: &'a ParseSess,
3030
pub(crate) source_map: &'a SourceMap,
3131
pub(crate) config: &'a Config,
32-
pub(crate) inside_macro: Rc<RefCell<bool>>,
32+
pub(crate) inside_macro: Rc<Cell<bool>>,
3333
// Force block indent style even if we are using visual indent style.
34-
pub(crate) use_block: RefCell<bool>,
34+
pub(crate) use_block: Cell<bool>,
3535
// When `is_if_else_block` is true, unindent the comment on top
3636
// of the `else` or `else if`.
37-
pub(crate) is_if_else_block: RefCell<bool>,
37+
pub(crate) is_if_else_block: Cell<bool>,
3838
// When rewriting chain, veto going multi line except the last element
39-
pub(crate) force_one_line_chain: RefCell<bool>,
39+
pub(crate) force_one_line_chain: Cell<bool>,
4040
pub(crate) snippet_provider: &'a SnippetProvider<'a>,
4141
// Used for `format_snippet`
42-
pub(crate) macro_rewrite_failure: RefCell<bool>,
42+
pub(crate) macro_rewrite_failure: Cell<bool>,
4343
pub(crate) report: FormatReport,
4444
pub(crate) skip_context: SkipContext,
4545
pub(crate) skipped_range: Rc<RefCell<Vec<(usize, usize)>>>,
4646
}
4747

4848
pub(crate) struct InsideMacroGuard {
4949
is_nested_macro_context: bool,
50-
inside_macro_ref: Rc<RefCell<bool>>,
50+
inside_macro_ref: Rc<Cell<bool>>,
5151
}
5252

5353
impl InsideMacroGuard {
@@ -69,15 +69,15 @@ impl<'a> RewriteContext<'a> {
6969

7070
/// Returns `true` if we should use block indent style for rewriting function call.
7171
pub(crate) fn use_block_indent(&self) -> bool {
72-
self.config.indent_style() == IndentStyle::Block || *self.use_block.borrow()
72+
self.config.indent_style() == IndentStyle::Block || self.use_block.get()
7373
}
7474

7575
pub(crate) fn budget(&self, used_width: usize) -> usize {
7676
self.config.max_width().saturating_sub(used_width)
7777
}
7878

7979
pub(crate) fn inside_macro(&self) -> bool {
80-
*self.inside_macro.borrow()
80+
self.inside_macro.get()
8181
}
8282

8383
pub(crate) fn enter_macro(&self) -> InsideMacroGuard {
@@ -93,6 +93,6 @@ impl<'a> RewriteContext<'a> {
9393
}
9494

9595
pub(crate) fn is_if_else_block(&self) -> bool {
96-
*self.is_if_else_block.borrow()
96+
self.is_if_else_block.get()
9797
}
9898
}

src/visitor.rs

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::cell::RefCell;
1+
use std::cell::{Cell, RefCell};
22
use std::rc::Rc;
33

44
use syntax::parse::ParseSess;
@@ -862,15 +862,10 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
862862
where
863863
F: Fn(&RewriteContext<'_>) -> Option<String>,
864864
{
865-
// FIXME borrow checker fighting - can be simplified a lot with NLL.
866-
let (result, mrf) = {
867-
let context = self.get_context();
868-
let result = f(&context);
869-
let mrf = &context.macro_rewrite_failure.borrow();
870-
(result, *std::ops::Deref::deref(mrf))
871-
};
865+
let context = self.get_context();
866+
let result = f(&context);
872867

873-
self.macro_rewrite_failure |= mrf;
868+
self.macro_rewrite_failure |= context.macro_rewrite_failure.get();
874869
result
875870
}
876871

@@ -879,12 +874,12 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
879874
parse_session: self.parse_session,
880875
source_map: self.source_map,
881876
config: self.config,
882-
inside_macro: Rc::new(RefCell::new(false)),
883-
use_block: RefCell::new(false),
884-
is_if_else_block: RefCell::new(false),
885-
force_one_line_chain: RefCell::new(false),
877+
inside_macro: Rc::new(Cell::new(false)),
878+
use_block: Cell::new(false),
879+
is_if_else_block: Cell::new(false),
880+
force_one_line_chain: Cell::new(false),
886881
snippet_provider: self.snippet_provider,
887-
macro_rewrite_failure: RefCell::new(false),
882+
macro_rewrite_failure: Cell::new(false),
888883
report: self.report.clone(),
889884
skip_context: self.skip_context.clone(),
890885
skipped_range: self.skipped_range.clone(),

0 commit comments

Comments
 (0)