mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
patch 9.0.2064: cannot use buffer-number for errorformat
Problem: cannot use buffer-number for errorformat Solution: add support for parsing a buffer number using '%b' in 'errorformat' closes: #13419 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
This commit is contained in:
committed by
Christian Brabandt
parent
5985879e3c
commit
b731800522
@@ -120,7 +120,7 @@ struct qf_info_S
|
||||
static qf_info_T ql_info; // global quickfix list
|
||||
static int_u last_qf_id = 0; // Last used quickfix list id
|
||||
|
||||
#define FMT_PATTERNS 13 // maximum number of % recognized
|
||||
#define FMT_PATTERNS 14 // maximum number of % recognized
|
||||
|
||||
/*
|
||||
* Structure used to hold the info of one part of 'errorformat'
|
||||
@@ -275,20 +275,21 @@ static struct fmtpattern
|
||||
} fmt_pat[FMT_PATTERNS] =
|
||||
{
|
||||
{'f', ".\\+"}, // only used when at end
|
||||
{'n', "\\d\\+"}, // 1
|
||||
{'l', "\\d\\+"}, // 2
|
||||
{'e', "\\d\\+"}, // 3
|
||||
{'c', "\\d\\+"}, // 4
|
||||
{'k', "\\d\\+"}, // 5
|
||||
{'t', "."}, // 6
|
||||
#define FMT_PATTERN_M 7
|
||||
{'m', ".\\+"}, // 7
|
||||
#define FMT_PATTERN_R 8
|
||||
{'r', ".*"}, // 8
|
||||
{'p', "[- .]*"}, // 9
|
||||
{'v', "\\d\\+"}, // 10
|
||||
{'s', ".\\+"}, // 11
|
||||
{'o', ".\\+"} // 12
|
||||
{'b', "\\d\\+"}, // 1
|
||||
{'n', "\\d\\+"}, // 2
|
||||
{'l', "\\d\\+"}, // 3
|
||||
{'e', "\\d\\+"}, // 4
|
||||
{'c', "\\d\\+"}, // 5
|
||||
{'k', "\\d\\+"}, // 6
|
||||
{'t', "."}, // 7
|
||||
#define FMT_PATTERN_M 8
|
||||
{'m', ".\\+"}, // 8
|
||||
#define FMT_PATTERN_R 9
|
||||
{'r', ".*"}, // 9
|
||||
{'p', "[- .]*"}, // 10
|
||||
{'v', "\\d\\+"}, // 11
|
||||
{'s', ".\\+"}, // 12
|
||||
{'o', ".\\+"} // 13
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -942,6 +943,7 @@ qf_get_nextline(qfstate_T *state)
|
||||
|
||||
typedef struct {
|
||||
char_u *namebuf;
|
||||
int bnr;
|
||||
char_u *module;
|
||||
char_u *errmsg;
|
||||
int errmsglen;
|
||||
@@ -984,6 +986,22 @@ qf_parse_fmt_f(regmatch_T *rmp, int midx, qffields_T *fields, int prefix)
|
||||
return QF_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* Parse the match for error number ('%n') pattern in regmatch.
|
||||
* Return the matched value in "fields->enr".
|
||||
*/
|
||||
static int
|
||||
qf_parse_fmt_b(regmatch_T *rmp, int midx, qffields_T *fields)
|
||||
{
|
||||
if (rmp->startp[midx] == NULL)
|
||||
return QF_FAIL;
|
||||
int bnr = (int)atol((char *)rmp->startp[midx]);
|
||||
if (buflist_findnr(bnr) == NULL)
|
||||
return QF_FAIL;
|
||||
fields->bnr = bnr;
|
||||
return QF_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* Parse the match for error number ('%n') pattern in regmatch.
|
||||
* Return the matched value in "fields->enr".
|
||||
@@ -1213,6 +1231,7 @@ qf_parse_fmt_o(regmatch_T *rmp, int midx, qffields_T *fields)
|
||||
static int (*qf_parse_fmt[FMT_PATTERNS])(regmatch_T *, int, qffields_T *) =
|
||||
{
|
||||
NULL, // %f
|
||||
qf_parse_fmt_b,
|
||||
qf_parse_fmt_n,
|
||||
qf_parse_fmt_l,
|
||||
qf_parse_fmt_e,
|
||||
@@ -1309,6 +1328,7 @@ qf_parse_get_fields(
|
||||
return QF_FAIL;
|
||||
|
||||
fields->namebuf[0] = NUL;
|
||||
fields->bnr = 0;
|
||||
fields->module[0] = NUL;
|
||||
fields->pattern[0] = NUL;
|
||||
if (!qf_multiscan)
|
||||
@@ -1713,7 +1733,7 @@ qf_init_process_nextline(
|
||||
: ((qfl->qf_currfile != NULL && fields->valid)
|
||||
? qfl->qf_currfile : (char_u *)NULL),
|
||||
fields->module,
|
||||
0,
|
||||
fields->bnr,
|
||||
fields->errmsg,
|
||||
fields->lnum,
|
||||
fields->end_lnum,
|
||||
|
Reference in New Issue
Block a user