]> granicus.if.org Git - vim/commitdiff
patch 9.0.0737: Lisp word only recognized when a space follows v9.0.0737
authorBram Moolenaar <Bram@vim.org>
Thu, 13 Oct 2022 11:30:08 +0000 (12:30 +0100)
committerBram Moolenaar <Bram@vim.org>
Thu, 13 Oct 2022 11:30:08 +0000 (12:30 +0100)
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.

src/indent.c
src/testdir/Make_all.mak
src/testdir/test_alot.vim
src/testdir/test_cpoptions.vim
src/testdir/test_lispindent.vim [new file with mode: 0644]
src/testdir/test_lispwords.vim [deleted file]
src/version.c

index 79162bf78e902e3d8df230319d1176d0d32b39c4..c6e3aaf33d437af0bf4de85ecbced496f1364732 100644 (file)
@@ -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;
index 7aff1e8a44d2b44f8f8559b15b2b2f7a9e51f5b4..743da38e5e72c8d0b96ca5a7242d952714703049 100644 (file)
@@ -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 \
index 46af3449b955d8cd0275064af7cede1cf008ff71..b7b7eadb31a7b3569b49373f113b59a3529bfe6d 100644 (file)
@@ -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
index 979c00b0d6215bbd646fb668b579d8269c2e10b1..a5822aa3bc4f2c9e000db17ad358fc1069db7a0e 100644 (file)
@@ -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 (file)
index 0000000..8f2d332
--- /dev/null
@@ -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 (file)
index 4144fb0..0000000
+++ /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
index e77fe6dc45c44aa034bc47b38910096d41c472ef..9a485a09839932c7d61233d1c17142c5942b7523 100644 (file)
@@ -699,6 +699,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    737,
 /**/
     736,
 /**/