mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 9.0.0737: Lisp word only recognized when a space follows
Problem: Lisp word only recognized when a space follows. Solution: Also match a word at the end of a line. Rename the test. Use a compiled function to avoid backslashes.
This commit is contained in:
@@ -1952,7 +1952,7 @@ lisp_match(char_u *p)
|
|||||||
{
|
{
|
||||||
(void)copy_option_part(&word, buf, LSIZE, ",");
|
(void)copy_option_part(&word, buf, LSIZE, ",");
|
||||||
len = (int)STRLEN(buf);
|
len = (int)STRLEN(buf);
|
||||||
if (STRNCMP(buf, p, len) == 0 && p[len] == ' ')
|
if (STRNCMP(buf, p, len) == 0 && IS_WHITE_OR_NUL(p[len]))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@@ -182,7 +182,7 @@ NEW_TESTS = \
|
|||||||
test_largefile \
|
test_largefile \
|
||||||
test_let \
|
test_let \
|
||||||
test_lineending \
|
test_lineending \
|
||||||
test_lispwords \
|
test_lispindent \
|
||||||
test_listchars \
|
test_listchars \
|
||||||
test_listdict \
|
test_listdict \
|
||||||
test_listener \
|
test_listener \
|
||||||
@@ -427,6 +427,7 @@ NEW_TESTS_RES = \
|
|||||||
test_langmap.res \
|
test_langmap.res \
|
||||||
test_let.res \
|
test_let.res \
|
||||||
test_lineending.res \
|
test_lineending.res \
|
||||||
|
test_lispindent.res \
|
||||||
test_listchars.res \
|
test_listchars.res \
|
||||||
test_listdict.res \
|
test_listdict.res \
|
||||||
test_listener.res \
|
test_listener.res \
|
||||||
|
@@ -16,7 +16,6 @@ source test_fnamemodify.vim
|
|||||||
source test_ga.vim
|
source test_ga.vim
|
||||||
source test_glob2regpat.vim
|
source test_glob2regpat.vim
|
||||||
source test_global.vim
|
source test_global.vim
|
||||||
source test_lispwords.vim
|
|
||||||
source test_move.vim
|
source test_move.vim
|
||||||
source test_put.vim
|
source test_put.vim
|
||||||
source test_reltime.vim
|
source test_reltime.vim
|
||||||
|
@@ -422,7 +422,7 @@ func Test_cpo_O()
|
|||||||
let &cpo = save_cpo
|
let &cpo = save_cpo
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
" Test for the 'p' flag in 'cpo' is in the test_lispwords.vim file.
|
" Test for the 'p' flag in 'cpo' is in the test_lispindent.vim file.
|
||||||
|
|
||||||
" Test for the 'P' flag in 'cpo' (appending to a file sets the current file
|
" Test for the 'P' flag in 'cpo' (appending to a file sets the current file
|
||||||
" name)
|
" name)
|
||||||
|
103
src/testdir/test_lispindent.vim
Normal file
103
src/testdir/test_lispindent.vim
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
" Tests for 'lispwords' settings being global-local.
|
||||||
|
" And other lisp indent stuff.
|
||||||
|
|
||||||
|
set nocompatible viminfo+=nviminfo
|
||||||
|
|
||||||
|
func Test_global_local_lispwords()
|
||||||
|
setglobal lispwords=foo,bar,baz
|
||||||
|
setlocal lispwords-=foo | setlocal lispwords+=quux
|
||||||
|
call assert_equal('foo,bar,baz', &g:lispwords)
|
||||||
|
call assert_equal('bar,baz,quux', &l:lispwords)
|
||||||
|
call assert_equal('bar,baz,quux', &lispwords)
|
||||||
|
|
||||||
|
setlocal lispwords<
|
||||||
|
call assert_equal('foo,bar,baz', &g:lispwords)
|
||||||
|
call assert_equal('foo,bar,baz', &l:lispwords)
|
||||||
|
call assert_equal('foo,bar,baz', &lispwords)
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
def Test_lisp_indent()
|
||||||
|
enew!
|
||||||
|
|
||||||
|
append(0, [
|
||||||
|
'(defun html-file (base)',
|
||||||
|
'(format nil "~(~A~).html" base))',
|
||||||
|
'',
|
||||||
|
'(defmacro page (name title &rest body)',
|
||||||
|
'(let ((ti (gensym)))',
|
||||||
|
'`(with-open-file (*standard-output*',
|
||||||
|
'(html-file ,name)',
|
||||||
|
':direction :output',
|
||||||
|
':if-exists :supersede)',
|
||||||
|
'(let ((,ti ,title))',
|
||||||
|
'(as title ,ti)',
|
||||||
|
'(with center ',
|
||||||
|
'(as h2 (string-upcase ,ti)))',
|
||||||
|
'(brs 3)',
|
||||||
|
',@body))))',
|
||||||
|
'',
|
||||||
|
';;; Utilities for generating links',
|
||||||
|
'',
|
||||||
|
'(defmacro with-link (dest &rest body)',
|
||||||
|
'`(progn',
|
||||||
|
'(format t "<a href=\"~A\">" (html-file ,dest))',
|
||||||
|
',@body',
|
||||||
|
'(princ "</a>")))'
|
||||||
|
])
|
||||||
|
assert_equal(7, lispindent(2))
|
||||||
|
assert_equal(5, 6->lispindent())
|
||||||
|
assert_fails('lispindent(-1)', 'E966: Invalid line number: -1')
|
||||||
|
|
||||||
|
set lisp
|
||||||
|
set lispwords&
|
||||||
|
var save_copt = &cpoptions
|
||||||
|
set cpoptions+=p
|
||||||
|
normal 1G=G
|
||||||
|
|
||||||
|
assert_equal([
|
||||||
|
'(defun html-file (base)',
|
||||||
|
' (format nil "~(~A~).html" base))',
|
||||||
|
'',
|
||||||
|
'(defmacro page (name title &rest body)',
|
||||||
|
' (let ((ti (gensym)))',
|
||||||
|
' `(with-open-file (*standard-output*',
|
||||||
|
' (html-file ,name)',
|
||||||
|
' :direction :output',
|
||||||
|
' :if-exists :supersede)',
|
||||||
|
' (let ((,ti ,title))',
|
||||||
|
' (as title ,ti)',
|
||||||
|
' (with center ',
|
||||||
|
' (as h2 (string-upcase ,ti)))',
|
||||||
|
' (brs 3)',
|
||||||
|
' ,@body))))',
|
||||||
|
'',
|
||||||
|
';;; Utilities for generating links',
|
||||||
|
'',
|
||||||
|
'(defmacro with-link (dest &rest body)',
|
||||||
|
' `(progn',
|
||||||
|
' (format t "<a href=\"~A\">" (html-file ,dest))',
|
||||||
|
' ,@body',
|
||||||
|
' (princ "</a>")))',
|
||||||
|
''
|
||||||
|
], getline(1, "$"))
|
||||||
|
|
||||||
|
enew!
|
||||||
|
&cpoptions = save_copt
|
||||||
|
set nolisp
|
||||||
|
enddef
|
||||||
|
|
||||||
|
func Test_lispindent_negative()
|
||||||
|
" in legacy script there is no error
|
||||||
|
call assert_equal(-1, lispindent(-1))
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_lisp_indent_works()
|
||||||
|
" This was reading beyond the end of the line
|
||||||
|
new
|
||||||
|
exe "norm a\tü(\<CR>="
|
||||||
|
set lisp
|
||||||
|
norm ==
|
||||||
|
bwipe!
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" vim: shiftwidth=2 sts=2 expandtab
|
@@ -1,98 +0,0 @@
|
|||||||
" Tests for 'lispwords' settings being global-local.
|
|
||||||
" And other lisp indent stuff.
|
|
||||||
|
|
||||||
set nocompatible viminfo+=nviminfo
|
|
||||||
|
|
||||||
func Test_global_local_lispwords()
|
|
||||||
setglobal lispwords=foo,bar,baz
|
|
||||||
setlocal lispwords-=foo | setlocal lispwords+=quux
|
|
||||||
call assert_equal('foo,bar,baz', &g:lispwords)
|
|
||||||
call assert_equal('bar,baz,quux', &l:lispwords)
|
|
||||||
call assert_equal('bar,baz,quux', &lispwords)
|
|
||||||
|
|
||||||
setlocal lispwords<
|
|
||||||
call assert_equal('foo,bar,baz', &g:lispwords)
|
|
||||||
call assert_equal('foo,bar,baz', &l:lispwords)
|
|
||||||
call assert_equal('foo,bar,baz', &lispwords)
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
func Test_lisp_indent()
|
|
||||||
enew!
|
|
||||||
|
|
||||||
call append(0, [
|
|
||||||
\ '(defun html-file (base)',
|
|
||||||
\ '(format nil "~(~A~).html" base))',
|
|
||||||
\ '',
|
|
||||||
\ '(defmacro page (name title &rest body)',
|
|
||||||
\ '(let ((ti (gensym)))',
|
|
||||||
\ '`(with-open-file (*standard-output*',
|
|
||||||
\ '(html-file ,name)',
|
|
||||||
\ ':direction :output',
|
|
||||||
\ ':if-exists :supersede)',
|
|
||||||
\ '(let ((,ti ,title))',
|
|
||||||
\ '(as title ,ti)',
|
|
||||||
\ '(with center ',
|
|
||||||
\ '(as h2 (string-upcase ,ti)))',
|
|
||||||
\ '(brs 3)',
|
|
||||||
\ ',@body))))',
|
|
||||||
\ '',
|
|
||||||
\ ';;; Utilities for generating links',
|
|
||||||
\ '',
|
|
||||||
\ '(defmacro with-link (dest &rest body)',
|
|
||||||
\ '`(progn',
|
|
||||||
\ '(format t "<a href=\"~A\">" (html-file ,dest))',
|
|
||||||
\ ',@body',
|
|
||||||
\ '(princ "</a>")))'
|
|
||||||
\ ])
|
|
||||||
call assert_equal(7, lispindent(2))
|
|
||||||
call assert_equal(5, 6->lispindent())
|
|
||||||
call assert_equal(-1, lispindent(-1))
|
|
||||||
|
|
||||||
set lisp
|
|
||||||
set lispwords&
|
|
||||||
let save_copt = &cpoptions
|
|
||||||
set cpoptions+=p
|
|
||||||
normal 1G=G
|
|
||||||
|
|
||||||
call assert_equal([
|
|
||||||
\ '(defun html-file (base)',
|
|
||||||
\ ' (format nil "~(~A~).html" base))',
|
|
||||||
\ '',
|
|
||||||
\ '(defmacro page (name title &rest body)',
|
|
||||||
\ ' (let ((ti (gensym)))',
|
|
||||||
\ ' `(with-open-file (*standard-output*',
|
|
||||||
\ ' (html-file ,name)',
|
|
||||||
\ ' :direction :output',
|
|
||||||
\ ' :if-exists :supersede)',
|
|
||||||
\ ' (let ((,ti ,title))',
|
|
||||||
\ ' (as title ,ti)',
|
|
||||||
\ ' (with center ',
|
|
||||||
\ ' (as h2 (string-upcase ,ti)))',
|
|
||||||
\ ' (brs 3)',
|
|
||||||
\ ' ,@body))))',
|
|
||||||
\ '',
|
|
||||||
\ ';;; Utilities for generating links',
|
|
||||||
\ '',
|
|
||||||
\ '(defmacro with-link (dest &rest body)',
|
|
||||||
\ ' `(progn',
|
|
||||||
\ ' (format t "<a href=\"~A\">" (html-file ,dest))',
|
|
||||||
\ ' ,@body',
|
|
||||||
\ ' (princ "</a>")))',
|
|
||||||
\ ''
|
|
||||||
\ ], getline(1, "$"))
|
|
||||||
|
|
||||||
enew!
|
|
||||||
let &cpoptions=save_copt
|
|
||||||
set nolisp
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
func Test_lisp_indent_works()
|
|
||||||
" This was reading beyond the end of the line
|
|
||||||
new
|
|
||||||
exe "norm a\tü(\<CR>="
|
|
||||||
set lisp
|
|
||||||
norm ==
|
|
||||||
bwipe!
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
|
@@ -699,6 +699,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
737,
|
||||||
/**/
|
/**/
|
||||||
736,
|
736,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user