2
2
3
3
local util = require (' tests.util' )
4
4
5
- --- @param row integer
6
- --- @param level ? integer
7
- --- @return render.md.MarkInfo
8
- local function indent (row , level )
9
- --- @type render.md.MarkInfo
10
- return {
11
- row = { row },
12
- col = { 0 },
13
- virt_text = { { string.rep (' ' , level or 1 ), ' Normal' } },
14
- virt_text_pos = ' inline' ,
15
- priority = 0 ,
16
- }
17
- end
18
-
19
5
--- @param row integer
20
6
--- @param level integer
21
7
--- @param position ' above' | ' below'
@@ -45,28 +31,68 @@ local function border(row, level, position)
45
31
}
46
32
end
47
33
34
+ --- @param lengths integer[]
35
+ --- @return render.md.Line
36
+ local function indent_line (lengths )
37
+ local result = {}
38
+ for _ , length in ipairs (lengths ) do
39
+ if length == 1 then
40
+ table.insert (result , { ' ▎' , util .hl (' Indent' ) })
41
+ else
42
+ table.insert (result , { string.rep (' ' , length ), ' Normal' })
43
+ end
44
+ end
45
+ return result
46
+ end
47
+
48
+ --- @param row integer
49
+ --- @param lengths integer[]
50
+ --- @return render.md.MarkInfo
51
+ local function indent (row , lengths )
52
+ --- @type render.md.MarkInfo
53
+ return {
54
+ row = { row },
55
+ col = { 0 },
56
+ virt_text = indent_line (lengths ),
57
+ virt_text_pos = ' inline' ,
58
+ priority = 0 ,
59
+ }
60
+ end
61
+
62
+ --- @param mark render.md.MarkInfo
63
+ --- @param lengths integer[]
64
+ --- @return render.md.MarkInfo
65
+ local function indent_mark (mark , lengths )
66
+ local line = indent_line (lengths )
67
+ vim .list_extend (line , mark .virt_lines [1 ])
68
+ mark .virt_lines = { line }
69
+ return mark
70
+ end
71
+
48
72
describe (' indent.md' , function ()
49
- it (' custom ' , function ()
73
+ it (' with heading border ' , function ()
50
74
util .setup (' tests/data/indent.md' , {
51
75
heading = { border = true },
52
76
indent = { enabled = true },
53
77
})
54
78
55
79
local expected , row = {}, util .row ()
56
80
81
+ local l2 , l3 = { 2 }, { 4 }
82
+
57
83
vim .list_extend (expected , {
58
84
border (row :get (), 2 , ' above' ),
59
- indent (row :get ()),
85
+ indent (row :get (), l2 ),
60
86
util .heading (row :get (), 2 ),
61
- indent (row :increment ()),
87
+ indent (row :increment (), l2 ),
62
88
})
63
89
vim .list_extend (expected , {
64
- util .table_border (row :increment (), true , { 5 , 5 }, 2 ),
65
- indent (row :get ()),
90
+ indent_mark ( util .table_border (row :increment (), true , { 5 , 5 }), l2 ),
91
+ indent (row :get (), l2 ),
66
92
util .table_pipe (row :get (), 0 , true ),
67
93
util .table_pipe (row :get (), 6 , true ),
68
94
util .table_pipe (row :get (), 12 , true ),
69
- indent (row :increment ()),
95
+ indent (row :increment (), l2 ),
70
96
util .table_delimiter (row :get (), { 5 , 5 }),
71
97
})
72
98
@@ -77,14 +103,16 @@ describe('indent.md', function()
77
103
})
78
104
79
105
vim .list_extend (expected , {
80
- indent (row :increment (2 ), 2 ),
106
+ indent (row :increment (2 ), l3 ),
81
107
border (row :get (), 3 , ' above' ),
82
- indent (row :increment (), 2 ),
108
+ indent (row :increment (), l3 ),
83
109
util .heading (row :get (), 3 ),
84
- indent (row :increment (), 2 ),
110
+ indent (row :increment (), l3 ),
85
111
border (row :get (), 3 , ' below' ),
86
112
})
87
- table.insert (expected , indent (row :increment (), 2 ))
113
+ vim .list_extend (expected , {
114
+ indent (row :increment (), l3 ),
115
+ })
88
116
89
117
util .assert_view (expected , {
90
118
' 1 Heading 2' ,
@@ -102,4 +130,69 @@ describe('indent.md', function()
102
130
' 12 Bar' ,
103
131
})
104
132
end )
133
+
134
+ it (' with per_level, skip_level & icon' , function ()
135
+ util .setup (' tests/data/indent.md' , {
136
+ indent = { enabled = true , per_level = 4 , skip_level = 0 , icon = ' ▎' },
137
+ })
138
+
139
+ local expected , row = {}, util .row ()
140
+
141
+ local l1 , l2 = { 1 , 3 }, { 1 , 3 , 1 , 3 }
142
+
143
+ vim .list_extend (expected , {
144
+ indent (row :get (), l2 ),
145
+ util .heading (row :get (), 2 ),
146
+ indent (row :increment (), l2 ),
147
+ })
148
+ vim .list_extend (expected , {
149
+ indent_mark (util .table_border (row :increment (), true , { 5 , 5 }), l2 ),
150
+ indent (row :get (), l2 ),
151
+ util .table_pipe (row :get (), 0 , true ),
152
+ util .table_pipe (row :get (), 6 , true ),
153
+ util .table_pipe (row :get (), 12 , true ),
154
+ indent (row :increment (), l2 ),
155
+ util .table_delimiter (row :get (), { 5 , 5 }),
156
+ })
157
+
158
+ vim .list_extend (expected , {
159
+ indent (row :increment (), l1 ),
160
+ indent (row :increment (), l1 ),
161
+ util .heading (row :get (), 1 ),
162
+ indent (row :increment (), l1 ),
163
+ })
164
+ vim .list_extend (expected , {
165
+ indent (row :increment (), l1 ),
166
+ })
167
+
168
+ vim .list_extend (expected , {
169
+ indent (row :increment (), l1 ),
170
+ indent (row :get (), l2 ),
171
+ indent (row :increment (), l1 ),
172
+ indent (row :get (), l2 ),
173
+ util .heading (row :get (), 3 ),
174
+ indent (row :increment (), l1 ),
175
+ indent (row :get (), l2 ),
176
+ })
177
+ vim .list_extend (expected , {
178
+ indent (row :increment (), l1 ),
179
+ indent (row :get (), l2 ),
180
+ })
181
+
182
+ util .assert_view (expected , {
183
+ ' 1 ▎ ▎ Heading 2' ,
184
+ ' 2 ▎ ▎' ,
185
+ ' ▎ ▎ ┌─────┬─────┐' ,
186
+ ' 3 ▎ ▎ │ Foo │ Bar │' ,
187
+ ' 4 ▎ ▎ ├─────┼─────┤' ,
188
+ ' 5 ▎' ,
189
+ ' 6 ▎ Heading 1' ,
190
+ ' 7 ▎' ,
191
+ ' 8 ▎ Foo' ,
192
+ ' 9 ▎ ▎ ▎' ,
193
+ ' 10 ▎ ▎ ▎ Heading 3' ,
194
+ ' 11 ▎ ▎ ▎' ,
195
+ ' 12 ▎ ▎ ▎ Bar' ,
196
+ })
197
+ end )
105
198
end )
0 commit comments