Skip to content

Commit 4017b39

Browse files
committed
Lines longer than option "width" are now warped. References #247.
1 parent 6e2b326 commit 4017b39

File tree

2 files changed

+58
-9
lines changed

2 files changed

+58
-9
lines changed

R/rules-line-break.R

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,3 +125,33 @@ remove_line_break_in_empty_fun_call <- function(pd) {
125125
}
126126
pd
127127
}
128+
129+
mk_add_line_break_at_pos_id <- function(ids) {
130+
ids <- ids
131+
132+
function(pd_flat){
133+
min_child_ids <- sapply(seq_len(nrow(pd_flat)), function(i){
134+
row <- pd_flat[i,]
135+
m <- row$pos_id
136+
while(!row$terminal){
137+
row <- row$child[[1]][1,]
138+
m <- min(m, row$pos_id)
139+
}
140+
m
141+
})
142+
143+
max_child_ids <- sapply(seq_len(nrow(pd_flat)), function(i){
144+
row <- pd_flat[i,]
145+
m <- row$pos_id
146+
while(!row$terminal){
147+
row <- row$child[[1]][nrow(row$child[[1]]),]
148+
m <- max(m, row$pos_id)
149+
}
150+
m
151+
})
152+
153+
nls <- apply(cbind(min_child_ids, max_child_ids), 1 , function(x) sum(ids >= x[1] & ids <= x[2]))
154+
pd_flat$lag_newlines <- pd_flat$lag_newlines + nls
155+
pd_flat
156+
}
157+
}

R/transform-files.R

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -103,15 +103,34 @@ parse_transform_serialize <- function(text, transformers) {
103103
)
104104
return("")
105105
}
106-
transformed_pd <- apply_transformers(pd_nested, transformers)
107-
flattened_pd <- post_visit(transformed_pd, list(extract_terminals)) %>%
108-
enrich_terminals(transformers$use_raw_indention) %>%
109-
apply_ref_indention() %>%
110-
set_regex_indention(
111-
pattern = transformers$reindention$regex_pattern,
112-
target_indention = transformers$reindention$indention,
113-
comments_only = transformers$reindention$comments_only
114-
)
106+
107+
width <- getOption("width")
108+
109+
newline_ids <- integer(0)
110+
tf <- transformers
111+
repeat{
112+
add_line_break_at_pos_id <- mk_add_line_break_at_pos_id(newline_ids)
113+
tf$line_break <- c(lst(add_line_break_at_pos_id),transformers$line_break)
114+
transformed_pd <- apply_transformers(pd_nested, tf)
115+
116+
flattened_pd <- post_visit(transformed_pd, list(extract_terminals)) %>%
117+
enrich_terminals(transformers$use_raw_indention) %>%
118+
apply_ref_indention() %>%
119+
set_regex_indention(
120+
pattern = transformers$reindention$regex_pattern,
121+
target_indention = transformers$reindention$indention,
122+
comments_only = transformers$reindention$comments_only
123+
)
124+
125+
overflowed <- flattened_pd$pos_id[flattened_pd$col2>width]
126+
127+
if(length(overflowed)){
128+
newline_ids <- unique(c(newline_ids, min(overflowed)))
129+
}else{
130+
break
131+
}
132+
}
133+
115134
serialized_transformed_text <-
116135
serialize_parse_data_flattened(flattened_pd, start_line = start_line)
117136

0 commit comments

Comments
 (0)