summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShane Harper <shane@shaneharper.net>2023-06-07 19:09:57 +0100
committerBram Moolenaar <Bram@vim.org>2023-06-07 19:09:57 +0100
commit5bf042810b19a627eda2f170624a0cfd7b4f6ed6 (patch)
tree96c07672ce59f762ba9270e8b3b3ffbd41b0675f
parentcdb7b4c50826df254d2e5ba8abd211e49b7a9784 (diff)
patch 9.0.1616: quickfix text field is truncatedv9.0.1616
Problem: Quickfix text field is truncated. Solution: Fix output of text field after pattern field in quickfix buffer. (Shane Harper, closes #12498)
-rw-r--r--src/quickfix.c23
-rw-r--r--src/testdir/test_quickfix.vim13
-rw-r--r--src/version.c2
3 files changed, 23 insertions, 15 deletions
diff --git a/src/quickfix.c b/src/quickfix.c
index 553ad45788..4501d11f15 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -3340,6 +3340,7 @@ qf_jump_print_msg(
// Add the message, skipping leading whitespace and newlines.
ga_concat(gap, IObuff);
qf_fmt_text(gap, skipwhite(qf_ptr->qf_text));
+ ga_append(gap, NUL);
// Output the message. Overwrite to avoid scrolling when the 'O'
// flag is present in 'shortmess'; But when not jumping, print the
@@ -3660,9 +3661,7 @@ qf_list_entry(qfline_T *qfp, int qf_idx, int cursel)
if (qfp->qf_lnum != 0)
msg_puts_attr(":", qfSepAttr);
gap = qfga_get();
- if (qfp->qf_lnum == 0)
- ga_append(gap, NUL);
- else
+ if (qfp->qf_lnum != 0)
qf_range_text(gap, qfp);
ga_concat(gap, qf_types(qfp->qf_type, qfp->qf_nr));
ga_append(gap, NUL);
@@ -3672,6 +3671,7 @@ qf_list_entry(qfline_T *qfp, int qf_idx, int cursel)
{
gap = qfga_get();
qf_fmt_text(gap, qfp->qf_pattern);
+ ga_append(gap, NUL);
msg_puts((char *)gap->ga_data);
msg_puts_attr(":", qfSepAttr);
}
@@ -3682,7 +3682,8 @@ qf_list_entry(qfline_T *qfp, int qf_idx, int cursel)
// with ^^^^.
gap = qfga_get();
qf_fmt_text(gap, (fname != NULL || qfp->qf_lnum != 0)
- ? skipwhite(qfp->qf_text) : qfp->qf_text);
+ ? skipwhite(qfp->qf_text) : qfp->qf_text);
+ ga_append(gap, NUL);
msg_prt_line((char_u *)gap->ga_data, FALSE);
out_flush(); // show one line at a time
}
@@ -3774,7 +3775,6 @@ qf_list(exarg_T *eap)
qf_fmt_text(garray_T *gap, char_u *text)
{
char_u *p = text;
-
while (*p != NUL)
{
if (*p == '\n')
@@ -3787,8 +3787,6 @@ qf_fmt_text(garray_T *gap, char_u *text)
else
ga_append(gap, *p++);
}
-
- ga_append(gap, NUL);
}
/*
@@ -3807,8 +3805,8 @@ qf_range_text(garray_T *gap, qfline_T *qfp)
if (qfp->qf_end_lnum > 0 && qfp->qf_lnum != qfp->qf_end_lnum)
{
- vim_snprintf((char *)buf + len, bufsize - len,
- "-%ld", qfp->qf_end_lnum);
+ vim_snprintf((char *)buf + len, bufsize - len, "-%ld",
+ qfp->qf_end_lnum);
len += (int)STRLEN(buf + len);
}
if (qfp->qf_col > 0)
@@ -3817,12 +3815,11 @@ qf_range_text(garray_T *gap, qfline_T *qfp)
len += (int)STRLEN(buf + len);
if (qfp->qf_end_col > 0 && qfp->qf_col != qfp->qf_end_col)
{
- vim_snprintf((char *)buf + len, bufsize - len,
- "-%d", qfp->qf_end_col);
+ vim_snprintf((char *)buf + len, bufsize - len, "-%d",
+ qfp->qf_end_col);
len += (int)STRLEN(buf + len);
}
}
- buf[len] = NUL;
ga_concat_len(gap, buf, len);
}
@@ -4659,7 +4656,6 @@ qf_buf_add_line(
if (qftf_str != NULL && *qftf_str != NUL)
{
ga_concat(gap, qftf_str);
- ga_append(gap, NUL);
}
else
{
@@ -4706,6 +4702,7 @@ qf_buf_add_line(
: qfp->qf_text);
}
+ ga_append(gap, NUL);
if (ml_append_buf(buf, lnum, gap->ga_data, gap->ga_len, FALSE) == FAIL)
return FAIL;
diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim
index 7e4a048258..b7d290275b 100644
--- a/src/testdir/test_quickfix.vim
+++ b/src/testdir/test_quickfix.vim
@@ -167,13 +167,15 @@ func XlistTests(cchar)
\ {'lnum':20,'col':10,'type':'e','text':'Error','nr':22},
\ {'lnum':30,'col':15,'type':'i','text':'Info','nr':33},
\ {'lnum':40,'col':20,'type':'x', 'text':'Other','nr':44},
- \ {'lnum':50,'col':25,'type':"\<C-A>",'text':'one','nr':55}])
+ \ {'lnum':50,'col':25,'type':"\<C-A>",'text':'one','nr':55},
+ \ {'lnum':0,'type':'e','text':'Check type field is output even when lnum==0. ("error" was not output by v9.0.0736.)','nr':66}])
let l = split(execute('Xlist', ""), "\n")
call assert_equal([' 1:10 col 5 warning 11: Warning',
\ ' 2:20 col 10 error 22: Error',
\ ' 3:30 col 15 info 33: Info',
\ ' 4:40 col 20 x 44: Other',
- \ ' 5:50 col 25 55: one'], l)
+ \ ' 5:50 col 25 55: one',
+ \ ' 6 error 66: Check type field is output even when lnum==0. ("error" was not output by v9.0.0736.)'], l)
" Test for module names, one needs to explicitly set `'valid':v:true` so
call g:Xsetlist([
@@ -6428,4 +6430,11 @@ func Test_setqflist_stopinsert()
bwipe!
endfunc
+func Test_quickfix_buffer_contents()
+ call setqflist([{'filename':'filename', 'pattern':'pattern', 'text':'text'}])
+ copen
+ call assert_equal(['filename|pattern| text'], getline(1, '$')) " The assert failed with Vim v9.0.0736; '| text' did not appear after the pattern.
+ call setqflist([], 'f')
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 4e94e4bc65..e6858c2a2b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1616,
+/**/
1615,
/**/
1614,