summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-10-13 12:30:08 +0100
committerBram Moolenaar <Bram@vim.org>2022-10-13 12:30:08 +0100
commitd26c5805bcbd630dab0478c2d22503a6e32a83c1 (patch)
tree3893b73181832ad6c7aab687f1d0d47dacfc7515 /src
parentf8412c9d7cc487dacf47a217ae947da68a525c53 (diff)
downloadvim-git-d26c5805bcbd630dab0478c2d22503a6e32a83c1.tar.gz
patch 9.0.0737: Lisp word only recognized when a space followsv9.0.0737
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.
Diffstat (limited to 'src')
-rw-r--r--src/indent.c2
-rw-r--r--src/testdir/Make_all.mak3
-rw-r--r--src/testdir/test_alot.vim1
-rw-r--r--src/testdir/test_cpoptions.vim2
-rw-r--r--src/testdir/test_lispindent.vim103
-rw-r--r--src/testdir/test_lispwords.vim98
-rw-r--r--src/version.c2
7 files changed, 109 insertions, 102 deletions
diff --git a/src/indent.c b/src/indent.c
index 79162bf78..c6e3aaf33 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -1952,7 +1952,7 @@ lisp_match(char_u *p)
{
(void)copy_option_part(&word, buf, LSIZE, ",");
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 FALSE;
diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak
index 7aff1e8a4..743da38e5 100644
--- a/src/testdir/Make_all.mak
+++ b/src/testdir/Make_all.mak
@@ -182,7 +182,7 @@ NEW_TESTS = \
test_largefile \
test_let \
test_lineending \
- test_lispwords \
+ test_lispindent \
test_listchars \
test_listdict \
test_listener \
@@ -427,6 +427,7 @@ NEW_TESTS_RES = \
test_langmap.res \
test_let.res \
test_lineending.res \
+ test_lispindent.res \
test_listchars.res \
test_listdict.res \
test_listener.res \
diff --git a/src/testdir/test_alot.vim b/src/testdir/test_alot.vim
index 46af3449b..b7b7eadb3 100644
--- a/src/testdir/test_alot.vim
+++ b/src/testdir/test_alot.vim
@@ -16,7 +16,6 @@ source test_fnamemodify.vim
source test_ga.vim
source test_glob2regpat.vim
source test_global.vim
-source test_lispwords.vim
source test_move.vim
source test_put.vim
source test_reltime.vim
diff --git a/src/testdir/test_cpoptions.vim b/src/testdir/test_cpoptions.vim
index 979c00b0d..a5822aa3b 100644
--- a/src/testdir/test_cpoptions.vim
+++ b/src/testdir/test_cpoptions.vim
@@ -422,7 +422,7 @@ func Test_cpo_O()
let &cpo = save_cpo
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
" name)
diff --git a/src/testdir/test_lispindent.vim b/src/testdir/test_lispindent.vim
new file mode 100644
index 000000000..8f2d3324b
--- /dev/null
+++ b/src/testdir/test_lispindent.vim
@@ -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
diff --git a/src/testdir/test_lispwords.vim b/src/testdir/test_lispwords.vim
deleted file mode 100644
index 4144fb052..000000000
--- a/src/testdir/test_lispwords.vim
+++ /dev/null
@@ -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
diff --git a/src/version.c b/src/version.c
index e77fe6dc4..9a485a098 100644
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 737,
+/**/
736,
/**/
735,