1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
" 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_lispindent_with_indentexpr()
enew
setl ai lisp nocin indentexpr=11
exe "normal a(x\<CR>1\<CR>2)\<Esc>"
let expected = ['(x', ' 1', ' 2)']
call assert_equal(expected, getline(1, 3))
" with Lisp indenting the first line is not indented
normal 1G=G
call assert_equal(expected, getline(1, 3))
%del
setl lispoptions=expr:1 indentexpr=5
exe "normal a(x\<CR>1\<CR>2)\<Esc>"
let expected_expr = ['(x', ' 1', ' 2)']
call assert_equal(expected_expr, getline(1, 3))
normal 2G2<<=G
call assert_equal(expected_expr, getline(1, 3))
setl lispoptions=expr:0
" with Lisp indenting the first line is not indented
normal 1G3<<=G
call assert_equal(expected, getline(1, 3))
bwipe!
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
|