tangled
alpha
login
or
join now
algmyr.se
/
vclib.nvim
0
fork
atom
Common library code for other vc*.nvim projects.
0
fork
atom
overview
issues
pulls
pipelines
Expose compute_levels in fold logic and move tests here.
algmyr.se
8 months ago
ddae83e3
d3b46e71
+150
-2
3 changed files
expand all
collapse all
unified
split
lua
vclib
fold.lua
vclib_tests
fold.lua
init.lua
+2
-2
lua/vclib/fold.lua
···
4
4
---@param intervals Intervals
5
5
---@param last_line integer
6
6
---@return integer[]
7
7
-
local function _compute_levels(intervals, context, last_line)
7
7
+
function M.compute_levels(intervals, context, last_line)
8
8
local max_level = #context
9
9
10
10
local levels = {}
···
61
61
vim.b.vclib_fold_changedtick = vim.b.changedtick
62
62
-- Update cached fold levels.
63
63
local last_line = vim.fn.line "$"
64
64
-
vim.b.levels = _compute_levels(intervals, context, last_line)
64
64
+
vim.b.levels = M.compute_levels(intervals, context, last_line)
65
65
end
66
66
end
67
67
+136
lua/vclib_tests/fold.lua
···
1
1
+
local M = {}
2
2
+
3
3
+
local fold_lib = require "vclib.fold"
4
4
+
local interval_lib = require "vclib.intervals"
5
5
+
local testing = require "vclib.testing"
6
6
+
7
7
+
M.fold_levels = {
8
8
+
test_cases = {
9
9
+
simple = {
10
10
+
hunks = {
11
11
+
{ plus_start = 8, plus_count = 2, minus_start = -1, minus_count = -1 },
12
12
+
},
13
13
+
context = { 3 },
14
14
+
expected = {
15
15
+
1, -- 1|
16
16
+
1, -- 2|
17
17
+
1, -- 3|
18
18
+
1, -- 4|
19
19
+
0, -- 5| 3
20
20
+
0, -- 6| 2
21
21
+
0, -- 7| 1
22
22
+
0, -- 8| +
23
23
+
0, -- 9| +
24
24
+
0, -- 10| 1
25
25
+
0, -- 11| 2
26
26
+
0, -- 12| 3
27
27
+
1, -- 13|
28
28
+
1, -- 14|
29
29
+
},
30
30
+
},
31
31
+
documentation_example = {
32
32
+
hunks = {
33
33
+
{ plus_start = 8, plus_count = 2, minus_start = -1, minus_count = -1 },
34
34
+
},
35
35
+
context = { 1, 3 },
36
36
+
expected = {
37
37
+
2, -- 1|
38
38
+
2, -- 2|
39
39
+
2, -- 3|
40
40
+
2, -- 4|
41
41
+
1, -- 5| 3
42
42
+
1, -- 6| 2
43
43
+
0, -- 7| 1
44
44
+
0, -- 8| +
45
45
+
0, -- 9| +
46
46
+
0, -- 10| 1
47
47
+
1, -- 11| 2
48
48
+
1, -- 12| 3
49
49
+
2, -- 13|
50
50
+
2, -- 14|
51
51
+
},
52
52
+
},
53
53
+
complicated_example = {
54
54
+
hunks = {
55
55
+
{ plus_start = 2, plus_count = 1, minus_start = -1, minus_count = -1 },
56
56
+
{ plus_start = 3, plus_count = 1, minus_start = -1, minus_count = -1 },
57
57
+
{ plus_start = 5, plus_count = 1, minus_start = -1, minus_count = -1 },
58
58
+
{ plus_start = 8, plus_count = 1, minus_start = -1, minus_count = -1 },
59
59
+
{ plus_start = 12, plus_count = 1, minus_start = -1, minus_count = -1 },
60
60
+
{ plus_start = 17, plus_count = 1, minus_start = -1, minus_count = -1 },
61
61
+
{ plus_start = 23, plus_count = 1, minus_start = -1, minus_count = -1 },
62
62
+
{ plus_start = 30, plus_count = 1, minus_start = -1, minus_count = -1 },
63
63
+
},
64
64
+
context = { 1, 2 },
65
65
+
expected = {
66
66
+
0, -- 1| 1
67
67
+
0, -- 2| +
68
68
+
0, -- 3| +
69
69
+
0, -- 4| 1
70
70
+
0, -- 5| +
71
71
+
0, -- 6| 1
72
72
+
0, -- 7| 1
73
73
+
0, -- 8| +
74
74
+
0, -- 9| 1
75
75
+
0, -- 10| 2 <-- special case, no use folding this
76
76
+
0, -- 11| 1
77
77
+
0, -- 12| +
78
78
+
0, -- 13| 1
79
79
+
1, -- 14| 2
80
80
+
1, -- 15| 2
81
81
+
0, -- 16| 1
82
82
+
0, -- 17| +
83
83
+
0, -- 18| 1
84
84
+
1, -- 19| 2
85
85
+
1, -- 20| 3 <-- special case, no use folding this
86
86
+
1, -- 21| 2
87
87
+
0, -- 22| 1
88
88
+
0, -- 23| +
89
89
+
0, -- 24| 1
90
90
+
1, -- 25| 2
91
91
+
2, -- 26| 3
92
92
+
2, -- 27| 3
93
93
+
1, -- 28| 2
94
94
+
0, -- 29| 1
95
95
+
0, -- 30| +
96
96
+
},
97
97
+
},
98
98
+
edge_cases = {
99
99
+
hunks = {
100
100
+
{ plus_start = 4, plus_count = 1, minus_start = -1, minus_count = -1 },
101
101
+
{ plus_start = 10, plus_count = 1, minus_start = -1, minus_count = -1 },
102
102
+
},
103
103
+
context = { 2 },
104
104
+
expected = {
105
105
+
0, -- 1| 3
106
106
+
0, -- 2| 2
107
107
+
0, -- 3| 1
108
108
+
0, -- 4| +
109
109
+
0, -- 5| 1
110
110
+
0, -- 6| 2
111
111
+
0, -- 7| 3
112
112
+
0, -- 8| 2
113
113
+
0, -- 9| 1
114
114
+
0, -- 10| +
115
115
+
0, -- 11| 1
116
116
+
0, -- 12| 2
117
117
+
0, -- 13| 3
118
118
+
},
119
119
+
},
120
120
+
},
121
121
+
test = function(case)
122
122
+
local function convert(hunk)
123
123
+
return {
124
124
+
l = hunk.plus_start,
125
125
+
r = hunk.plus_start + hunk.plus_count,
126
126
+
data = nil,
127
127
+
}
128
128
+
end
129
129
+
local intervals = interval_lib.from_list(case.hunks, convert)
130
130
+
local levels =
131
131
+
fold_lib.compute_levels(intervals, case.context, #case.expected)
132
132
+
testing.assert_list_eq(levels, case.expected)
133
133
+
end,
134
134
+
}
135
135
+
136
136
+
return M
+12
lua/vclib_tests/init.lua
···
1
1
+
local M = {}
2
2
+
3
3
+
local testing = require "vclib.testing"
4
4
+
5
5
+
function M.run()
6
6
+
local test_modules = {
7
7
+
"vclib_tests.fold",
8
8
+
}
9
9
+
testing.run_tests(test_modules)
10
10
+
end
11
11
+
12
12
+
return M