@@ -207,23 +207,49 @@ style_line_break_around_curly <- function(strict, pd) {
207207# ' @keywords internal
208208# ' @seealso style_text_without_curly_curly
209209set_line_break_around_curly_curly <- function (pd ) {
210- if (is_curly_expr(pd )) {
211- # none after {
212- opening_before <- (pd $ token == " '{'" ) &
213- (pd $ token_before == " '{'" | pd $ token_after == " '{'" )
214-
215- # none before }
216- closing_before <- (pd $ token == " '}'" ) &
217- (pd $ token_after == " '}'" | pd $ token_before == " '}'" )
218- if (any(opening_before ) && any(closing_before )) {
219- pos_opening_idx <- lag(opening_before , default = FALSE ) & pd $ token != " COMMENT"
210+ if (! is_curly_expr(pd )) {
211+ return (pd )
212+ }
213+
214+ pd %> %
215+ set_line_break_around_outer_curly_curly() %> %
216+ set_line_break_around_inner_curly_curly()
217+ }
218+
219+ set_line_break_around_outer_curly_curly <- function (pd ) {
220+ # none after {
221+ opening_before <- (pd $ token == " '{'" ) & (pd $ token_after == " '{'" )
222+ # none before }
223+ closing_before <- (pd $ token == " '}'" ) & (pd $ token_before == " '}'" )
224+
225+ if (any(opening_before ) && any(closing_before )) {
226+ pos_opening_idx <- lag(opening_before , default = FALSE ) & pd $ token != " COMMENT"
227+ pd $ lag_newlines [pos_opening_idx ] <- 0L
228+ if (any(pos_opening_idx )) {
229+ # if line is broken with opening `{`, also break it with closing
230+ pd $ lag_newlines [closing_before & pd $ token_before != " COMMENT" ] <- 0L
231+ }
232+ }
233+
234+ pd
235+ }
236+
237+ set_line_break_around_inner_curly_curly <- function (pd ) {
238+ # none before {
239+ opening_before <- (pd $ token == " '{'" ) & (pd $ token_before == " '{'" )
240+ # none after }
241+ closing_before <- (pd $ token == " '}'" ) & (pd $ token_after == " '}'" )
242+
243+ if (any(opening_before ) && any(closing_before )) {
244+ pos_opening_idx <- lag(opening_before , default = FALSE ) & pd $ token != " COMMENT"
245+ can_remove_line_break_closing <- closing_before & pd $ token_before != " COMMENT"
246+ if (any(pos_opening_idx ) && any(can_remove_line_break_closing )) {
220247 pd $ lag_newlines [pos_opening_idx ] <- 0L
221- if (any(pos_opening_idx )) {
222- # if line is broken with opening `{`, also break it with closing
223- pd $ lag_newlines [closing_before & pd $ token_after != " COMMENT" ] <- 0L
224- }
248+ # if line is broken with opening `{`, also break it with closing
249+ pd $ lag_newlines [can_remove_line_break_closing ] <- 0L
225250 }
226251 }
252+
227253 pd
228254}
229255
0 commit comments