Skip to content

Commit 4d754be

Browse files
chore: add more indent mode unit tests
1 parent 21623a9 commit 4d754be

File tree

4 files changed

+138
-38
lines changed

4 files changed

+138
-38
lines changed

Diff for: CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
[6d446de](https://github.com/MeanderingProgrammer/render-markdown.nvim/commit/6d446de33937633bc2104f45c943f4fae632b822)
1111
- `autocommand` events and wiki link `body` customization [#228](https://github.com/MeanderingProgrammer/render-markdown.nvim/discussions/228)
1212
[#345](https://github.com/MeanderingProgrammer/render-markdown.nvim/pull/345) [0df6719](https://github.com/MeanderingProgrammer/render-markdown.nvim/commit/0df6719abc3b547bc5b7111a750d8d7e035a7234)
13+
- indent mode icon support [#343](https://github.com/MeanderingProgrammer/render-markdown.nvim/issues/343)
14+
[21623a9](https://github.com/MeanderingProgrammer/render-markdown.nvim/commit/21623a9ded5a5f3d1fbd8626a69c174fbeb0543e)
1315
- use default `render_modes = true` (all) for LSP docs [#326](https://github.com/MeanderingProgrammer/render-markdown.nvim/issues/326)
1416
[17a7746](https://github.com/MeanderingProgrammer/render-markdown.nvim/commit/17a77463f945c4b9e4f371c752efd90e3e1bf604)
1517
- update troubleshooting doc [f6c9e18](https://github.com/MeanderingProgrammer/render-markdown.nvim/commit/f6c9e1841cf644a258eb037dae587e3cf407d696)

Diff for: doc/render-markdown.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
*render-markdown.txt* For 0.10.0 Last change: 2025 February 24
1+
*render-markdown.txt* For 0.10.0 Last change: 2025 February 25
22

33
==============================================================================
44
Table of Contents *render-markdown-table-of-contents*

Diff for: tests/indent_spec.lua

+117-24
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,6 @@
22

33
local util = require('tests.util')
44

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-
195
---@param row integer
206
---@param level integer
217
---@param position 'above'|'below'
@@ -45,28 +31,68 @@ local function border(row, level, position)
4531
}
4632
end
4733

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+
4872
describe('indent.md', function()
49-
it('custom', function()
73+
it('with heading border', function()
5074
util.setup('tests/data/indent.md', {
5175
heading = { border = true },
5276
indent = { enabled = true },
5377
})
5478

5579
local expected, row = {}, util.row()
5680

81+
local l2, l3 = { 2 }, { 4 }
82+
5783
vim.list_extend(expected, {
5884
border(row:get(), 2, 'above'),
59-
indent(row:get()),
85+
indent(row:get(), l2),
6086
util.heading(row:get(), 2),
61-
indent(row:increment()),
87+
indent(row:increment(), l2),
6288
})
6389
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),
6692
util.table_pipe(row:get(), 0, true),
6793
util.table_pipe(row:get(), 6, true),
6894
util.table_pipe(row:get(), 12, true),
69-
indent(row:increment()),
95+
indent(row:increment(), l2),
7096
util.table_delimiter(row:get(), { 5, 5 }),
7197
})
7298

@@ -77,14 +103,16 @@ describe('indent.md', function()
77103
})
78104

79105
vim.list_extend(expected, {
80-
indent(row:increment(2), 2),
106+
indent(row:increment(2), l3),
81107
border(row:get(), 3, 'above'),
82-
indent(row:increment(), 2),
108+
indent(row:increment(), l3),
83109
util.heading(row:get(), 3),
84-
indent(row:increment(), 2),
110+
indent(row:increment(), l3),
85111
border(row:get(), 3, 'below'),
86112
})
87-
table.insert(expected, indent(row:increment(), 2))
113+
vim.list_extend(expected, {
114+
indent(row:increment(), l3),
115+
})
88116

89117
util.assert_view(expected, {
90118
'󰫎 1 󰲣 Heading 2',
@@ -102,4 +130,69 @@ describe('indent.md', function()
102130
' 12 Bar',
103131
})
104132
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)
105198
end)

Diff for: tests/util.lua

+18-13
Original file line numberDiff line numberDiff line change
@@ -76,15 +76,24 @@ function MarkDetails:priorities()
7676
if self.virt_lines ~= nil then
7777
row_offset = self.virt_lines_above and -0.5 or 0.5
7878
end
79-
vim.list_extend(result, { self.row[1] + row_offset, (self.row[2] or self.row[1]) + row_offset })
79+
table.insert(result, self.row[1] + row_offset)
80+
table.insert(result, (self.row[2] or self.row[1]) + row_offset)
8081

8182
local col = self.virt_text_win_col or 0
82-
vim.list_extend(result, { math.max(self.col[1], col), math.max((self.col[2] or self.col[1]), col) })
83-
84-
vim.list_extend(result, {
85-
self.virt_text_pos == 'inline' and 0 or 1, -- Inline text comes first
86-
self.sign_text == nil and 0 or 1, -- Signs come later
87-
})
83+
table.insert(result, math.max(self.col[1], col))
84+
table.insert(result, math.max((self.col[2] or self.col[1]), col))
85+
86+
-- Inline text comes first
87+
table.insert(result, self.virt_text_pos == 'inline' and 0 or 1)
88+
-- Signs come later
89+
table.insert(result, self.sign_text == nil and 0 or 1)
90+
91+
-- Fewer text entries comes first
92+
local text = #(self.virt_text or {})
93+
for _, line in ipairs(self.virt_lines or {}) do
94+
text = text + #line
95+
end
96+
table.insert(result, text)
8897

8998
return result
9099
end
@@ -375,16 +384,12 @@ end
375384
---@param row integer
376385
---@param above boolean
377386
---@param lengths integer[]
378-
---@param indent? integer
379387
---@return render.md.MarkInfo
380-
function M.table_border(row, above, lengths, indent)
381-
local line = {}
382-
if indent ~= nil then
383-
table.insert(line, { string.rep(' ', indent), 'Normal' })
384-
end
388+
function M.table_border(row, above, lengths)
385389
local parts = vim.tbl_map(function(length)
386390
return string.rep('', length)
387391
end, lengths)
392+
local line = {}
388393
if above then
389394
table.insert(line, { '' .. table.concat(parts, '') .. '', M.hl('TableHead') })
390395
else

0 commit comments

Comments
 (0)