From 228bc11d9618147fdf41e9dfd672f99b07e33824 Mon Sep 17 00:00:00 2001 From: gh-liu Date: Tue, 27 Aug 2024 10:30:23 +0800 Subject: [PATCH] refactor: improve the logic for indent of a level --- lua/fold_line/init.lua | 17 ++++-- .../tests-test_fold_line.lua---__test_010 | 56 +++++++++---------- 2 files changed, 41 insertions(+), 32 deletions(-) diff --git a/lua/fold_line/init.lua b/lua/fold_line/init.lua index d2637ed..4ecdb24 100644 --- a/lua/fold_line/init.lua +++ b/lua/fold_line/init.lua @@ -92,14 +92,23 @@ local function on_win(_, winid, bufnr, toprow, botrow) local function save_fold_indent(cur_line_finfo) local cur_line_flevel = cur_line_finfo.level + local cur_line_fllevel = cur_line_finfo.llevel local cur_line_fstartindent = cur_line_finfo.start_indent flevel_indents[cur_line_flevel] = cur_line_fstartindent - local cur_line_fllevel = cur_line_finfo.llevel if cur_line_fllevel < cur_line_flevel then - local unit = cur_line_fstartindent / (cur_line_flevel + 1) - for i_level = cur_line_fllevel, cur_line_flevel - 1 do - flevel_indents[i_level] = math.ceil(i_level * unit) + local llevel1 = cur_line_fllevel - 1 + local llevel1indent = flevel_indents[llevel1] + if llevel1indent and llevel1indent > 0 then + local unit = (cur_line_fstartindent - llevel1indent) / (cur_line_flevel - llevel1) + for i_level = cur_line_fllevel, cur_line_flevel - 1 do + flevel_indents[i_level] = llevel1indent + math.ceil((i_level - llevel1) * unit) + end + else + local unit = cur_line_fstartindent / (cur_line_flevel + 1) + for i_level = cur_line_fllevel, cur_line_flevel - 1 do + flevel_indents[i_level] = math.ceil(i_level * unit) + end end end end diff --git a/tests/screenshots/tests-test_fold_line.lua---__test_010 b/tests/screenshots/tests-test_fold_line.lua---__test_010 index 95b0681..3359134 100644 --- a/tests/screenshots/tests-test_fold_line.lua---__test_010 +++ b/tests/screenshots/tests-test_fold_line.lua---__test_010 @@ -2,20 +2,20 @@ 01|┌old 02|│ fold 03|│ ┌fold -04|│ │ ┌ ┌fold -05|│ │ │ │ ┌fold -06|│ │ │ │ │ fold -07|│ │ │ │ │ fold -08|│ │ │ │ │ fold -09|│ │ │ └ └fold -10|│ │ │ ┌fold -11|│ │ │ │ ┌fold -12|│ │ │ │ │ fold -13|│ │ │ │ │ fold -14|│ │ │ │ │ fold -15|│ │ │ │ └fold -16|│ │ │ │ fold -17|│ │ └ └fold +04|│ │ ┌ ┌fold +05|│ │ │ │ ┌fold +06|│ │ │ │ │ fold +07|│ │ │ │ │ fold +08|│ │ │ │ │ fold +09|│ │ │ └ └fold +10|│ │ │ ┌fold +11|│ │ │ │ ┌fold +12|│ │ │ │ │ fold +13|│ │ │ │ │ fold +14|│ │ │ │ │ fold +15|│ │ │ │ └fold +16|│ │ │ │ fold +17|│ │ └ └fold 18|│ └fold 19|└old 20|~ @@ -28,20 +28,20 @@ 01|01111111111111111111111111111111111111111111111111111111111111111111111111111111 02|01111111111111111111111111111111111111111111111111111111111111111111111111111111 03|01111110111111111111111111111111111111111111111111111111111111111111111111111111 -04|01111110101111121111111111111111111111111111111111111111111111111111111111111111 -05|01111110101111121111111011111111111111111111111111111111111111111111111111111111 -06|01111110101111121111111011111111111111111111111111111111111111111111111111111111 -07|01111110101111121111111011111111111111111111111111111111111111111111111111111111 -08|01111110101111121111111011111111111111111111111111111111111111111111111111111111 -09|01111110101111121111111011111111111111111111111111111111111111111111111111111111 -10|01111110101111101111111111111111111111111111111111111111111111111111111111111111 -11|01111110101111101111111011111111111111111111111111111111111111111111111111111111 -12|01111110101111101111111011111111111111111111111111111111111111111111111111111111 -13|01111110101111101111111011111111111111111111111111111111111111111111111111111111 -14|01111110101111101111111011111111111111111111111111111111111111111111111111111111 -15|01111110101111101111111011111111111111111111111111111111111111111111111111111111 -16|01111110101111101111111111111111111111111111111111111111111111111111111111111111 -17|01111110101111101111111111111111111111111111111111111111111111111111111111111111 +04|01111110111011121111111111111111111111111111111111111111111111111111111111111111 +05|01111110111011121111111011111111111111111111111111111111111111111111111111111111 +06|01111110111011121111111011111111111111111111111111111111111111111111111111111111 +07|01111110111011121111111011111111111111111111111111111111111111111111111111111111 +08|01111110111011121111111011111111111111111111111111111111111111111111111111111111 +09|01111110111011121111111011111111111111111111111111111111111111111111111111111111 +10|01111110111011101111111111111111111111111111111111111111111111111111111111111111 +11|01111110111011101111111011111111111111111111111111111111111111111111111111111111 +12|01111110111011101111111011111111111111111111111111111111111111111111111111111111 +13|01111110111011101111111011111111111111111111111111111111111111111111111111111111 +14|01111110111011101111111011111111111111111111111111111111111111111111111111111111 +15|01111110111011101111111011111111111111111111111111111111111111111111111111111111 +16|01111110111011101111111111111111111111111111111111111111111111111111111111111111 +17|01111110111011101111111111111111111111111111111111111111111111111111111111111111 18|01111110111111111111111111111111111111111111111111111111111111111111111111111111 19|01111111111111111111111111111111111111111111111111111111111111111111111111111111 20|22222222222222222222222222222222222222222222222222222222222222222222222222222222