changeset 30805:4edfa418f8ba v9.0.0737

patch 9.0.0737: Lisp word only recognized when a space follows Commit: https://github.com/vim/vim/commit/d26c5805bcbd630dab0478c2d22503a6e32a83c1 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Oct 13 12:30:08 2022 +0100 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.
author Bram Moolenaar <Bram@vim.org>
date Thu, 13 Oct 2022 13:45:06 +0200
parents 4dca94c98241
children 669a30fb92d7
files src/indent.c src/testdir/Make_all.mak src/testdir/test_alot.vim src/testdir/test_cpoptions.vim src/testdir/test_lispindent.vim src/testdir/test_lispwords.vim src/version.c
diffstat 7 files changed, 109 insertions(+), 102 deletions(-) [+]
line wrap: on
line diff
--- 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;
--- 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 \
--- 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
--- 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)
new file mode 100644
--- /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
deleted file mode 100644
--- 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
--- 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,