1
0
forked from aniani/vim

updated for version 7.3.609

Problem:    File names in :checkpath! output are garbled.
Solution:   Check for \zs in the pattern. (Lech Lorens)
This commit is contained in:
Bram Moolenaar
2012-07-25 13:46:30 +02:00
parent 6763c140d6
commit 058bdcfd5d
4 changed files with 148 additions and 7 deletions

View File

@@ -4740,17 +4740,33 @@ find_pattern_in_path(ptr, dir, len, whole, skip_comments,
* Isolate the file name.
* Include the surrounding "" or <> if present.
*/
for (p = incl_regmatch.endp[0]; !vim_isfilec(*p); p++)
if (inc_opt != NULL
&& strstr((char *)inc_opt, "\\zs") != NULL)
{
/* pattern contains \zs, use the match */
p = incl_regmatch.startp[0];
i = (int)(incl_regmatch.endp[0]
- incl_regmatch.startp[0]);
}
else
{
/* find the file name after the end of the match */
for (p = incl_regmatch.endp[0];
*p && !vim_isfilec(*p); p++)
;
for (i = 0; vim_isfilec(p[i]); i++)
;
}
if (i == 0)
{
/* Nothing found, use the rest of the line. */
p = incl_regmatch.endp[0];
i = (int)STRLEN(p);
}
else
/* Avoid checking before the start of the line, can
* happen if \zs appears in the regexp. */
else if (p > line)
{
if (p[-1] == '"' || p[-1] == '<')
{

View File

@@ -1,4 +1,6 @@
Tests for "gf" on ${VAR}
Tests for:
- "gf" on ${VAR},
- ":checkpath!" with various 'include' settings.
STARTTEST
:so small.vim
@@ -20,8 +22,99 @@ STARTTEST
:endif
gf
:w! test.out
:qa!
:brewind
ENDTEST
${CDIR}/test17a.in
$TDIR/test17a.in
STARTTEST
:" check for 'include' without \zs or \ze
:lang C
:!rm -f ./Xbase.a
:!rm -rf ./Xdir1
:!mkdir -p Xdir1/dir2
:e Xdir1/dir2/foo.a
i#include "bar.a"
:w
:e Xdir1/dir2/bar.a
i#include "baz.a"
:w
:e Xdir1/dir2/baz.a
i#include "foo.a"
:w
:e Xbase.a
:set path=Xdir1/dir2
i#include <foo.a>
:w
:redir! >>test.out
:checkpath!
:redir END
:brewind
ENDTEST
STARTTEST
:" check for 'include' with \zs and \ze
:!rm -f ./Xbase.b
:!rm -rf ./Xdir1
:!mkdir -p Xdir1/dir2
:let &include='^\s*%inc\s*/\zs[^/]\+\ze'
:function! DotsToSlashes()
: return substitute(v:fname, '\.', '/', 'g') . '.b'
:endfunction
:let &includeexpr='DotsToSlashes()'
:e Xdir1/dir2/foo.b
i%inc /bar/
:w
:e Xdir1/dir2/bar.b
i%inc /baz/
:w
:e Xdir1/dir2/baz.b
i%inc /foo/
:w
:e Xbase.b
:set path=Xdir1/dir2
i%inc /foo/
:w
:redir! >>test.out
:checkpath!
:redir END
:brewind
ENDTEST
STARTTEST
:" check for 'include' with \zs and no \ze
:!rm -f ./Xbase.c
:!rm -rf ./Xdir1
:!mkdir -p Xdir1/dir2
:let &include='^\s*%inc\s*\%([[:upper:]][^[:space:]]*\s\+\)\?\zs\S\+\ze'
:function! StripNewlineChar()
: if v:fname =~ '\n$'
: return v:fname[:-2]
: endif
: return v:fname
:endfunction
:let &includeexpr='StripNewlineChar()'
:e Xdir1/dir2/foo.c
i%inc bar.c
:w
:e Xdir1/dir2/bar.c
i%inc baz.c
:w
:e Xdir1/dir2/baz.c
i%inc foo.c
:w
:e Xdir1/dir2/FALSE.c
i%inc foo.c
:w
:e Xbase.c
:set path=Xdir1/dir2
i%inc FALSE.c foo.c
:w
:redir! >>test.out
:checkpath!
:redir END
:brewind
:q
ENDTEST

View File

@@ -1,3 +1,33 @@
This file is just to test "gf" in test 17.
The contents is not important.
Just testing!
--- Included files in path ---
Xdir1/dir2/foo.a
Xdir1/dir2/foo.a -->
Xdir1/dir2/bar.a
Xdir1/dir2/bar.a -->
Xdir1/dir2/baz.a
Xdir1/dir2/baz.a -->
"foo.a" (Already listed)
--- Included files in path ---
Xdir1/dir2/foo.b
Xdir1/dir2/foo.b -->
Xdir1/dir2/bar.b
Xdir1/dir2/bar.b -->
Xdir1/dir2/baz.b
Xdir1/dir2/baz.b -->
foo (Already listed)
--- Included files in path ---
Xdir1/dir2/foo.c
Xdir1/dir2/foo.c -->
Xdir1/dir2/bar.c
Xdir1/dir2/bar.c -->
Xdir1/dir2/baz.c
Xdir1/dir2/baz.c -->
foo.c^@ (Already listed)

View File

@@ -714,6 +714,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
609,
/**/
608,
/**/