Skip to content

Commit 1ab282c

Browse files
authored
fix(ellmer_prompt): Truncate lines and items individually (#770)
* fix(ellmer_prompt): Truncate lines and items individually * chore: apply testthat upstream fixes instead
1 parent 21b4a4d commit 1ab282c

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

R/interpolate.R

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ print.ellmer_prompt <- function(
106106
max_items = 20,
107107
max_lines = max_items * 10
108108
) {
109+
check_number_whole(max_items, min = 1)
110+
check_number_whole(max_lines, min = 1)
111+
109112
n <- length(x)
110113
n_extra <- length(x) - max_items
111114
if (n_extra > 0) {
@@ -128,13 +131,18 @@ print.ellmer_prompt <- function(
128131
x <- gsub("\n", paste0("\n", exdent), x)
129132

130133
lines <- strsplit(x, "\n")
131-
ids <- rep(seq_along(x), length(lines))
134+
ids <- rep(seq_along(x), lengths(lines))
135+
first <- c(TRUE, ids[-length(ids)] != ids[-1])
132136
lines <- unlist(lines)
133137

134138
if (length(lines) > max_lines) {
139+
if (first[max_lines + 1]) {
140+
max_lines <- if (ids[max_lines] > 1) max_lines - 1 else max(max_lines, 1)
141+
}
142+
135143
lines <- lines[seq_len(max_lines)]
136144
lines <- c(lines, paste0(exdent, "..."))
137-
n_extra <- n - ids[max_lines - 1]
145+
n_extra <- n - ids[max_lines]
138146
}
139147

140148
cat(lines, sep = "\n")

tests/testthat/_snaps/interpolate.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,13 @@
4040
| y
4141
[2] | a
4242
| ...
43+
Code
44+
print(ellmer_prompt("a\nb\nc\nd\ne"), max_lines = 3)
45+
Output
46+
[1] | a
47+
| b
48+
| c
49+
| ...
4350

4451
# errors if the path does not exist
4552

tests/testthat/test-interpolate.R

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ test_that("print method truncates many elements", {
2222
print(prompt, max_items = 1)
2323
print(prompt, max_lines = 2)
2424
print(prompt, max_lines = 3)
25+
print(ellmer_prompt("a\nb\nc\nd\ne"), max_lines = 3)
2526
})
2627
})
2728

0 commit comments

Comments
 (0)