From a64cac9be898d339d3a7fc251060ef7322a5ca20 Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Tue, 31 Dec 2024 10:05:01 -0800 Subject: [PATCH 1/2] Smarter wrapping --- lua/argonaut/options.lua | 3 +++ lua/argonaut/param.lua | 34 ++++++++++++++++++++++++++++++++++ lua/argonaut/range.lua | 7 ++++++- 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/lua/argonaut/options.lua b/lua/argonaut/options.lua index b89788d..0059e0f 100644 --- a/lua/argonaut/options.lua +++ b/lua/argonaut/options.lua @@ -11,6 +11,9 @@ local options_current = { go = { comma_last = true, }, + lua = { + comma_last = true, + }, } local function setup(opt) diff --git a/lua/argonaut/param.lua b/lua/argonaut/param.lua index 86c283d..9a792d2 100644 --- a/lua/argonaut/param.lua +++ b/lua/argonaut/param.lua @@ -5,6 +5,24 @@ local function is_empty_cell(cell) return cell.type == 'cursor' and not cell.value:get_value():match('%S') end +local function get_param_start_row(param) + local cell = param.cells[1] + if cell.type == 'range' then + return cell.value.start_cursor.row + elseif cell.type == 'cursor' then + return cell.value.row + end +end + +local function get_param_stop_row(param) + local cell = param.cells[#param.cells] + if cell.type == 'range' then + return cell.value.stop_cursor.row + elseif cell.type == 'cursor' then + return cell.value.row + end +end + function Param.new(range, index, cells) local param = { range = range, @@ -72,6 +90,22 @@ function Param:write(builder, wrapped) end end +function Param:is_wrapped() + local previous_param = self:get_previous() + if previous_param then + -- print(get_param_stop_row(previous_param), get_param_start_row(self)) + return get_param_stop_row(previous_param) ~= get_param_start_row(self) + else + return false + end +end + +function Param:get_previous() + if self.index > 1 then + return self.range.params[self.index-1] + end +end + function Param:find_index_begin() for i = 1, #self.cells do if not is_empty_cell(self.cells[i]) then diff --git a/lua/argonaut/range.lua b/lua/argonaut/range.lua index 20047be..7fc5d4a 100644 --- a/lua/argonaut/range.lua +++ b/lua/argonaut/range.lua @@ -206,7 +206,12 @@ function Range:query_option(name) end function Range:is_wrapped() - return self.start_cursor.row ~= self.stop_cursor.row + for _, param in ipairs(self.params) do + if param:is_wrapped() then + return true + end + end + return false end function Range.__lt(range_1, range_2) From 68a581f12b606f94bc815c7233dacfc8495f04ec Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Tue, 31 Dec 2024 10:20:43 -0800 Subject: [PATCH 2/2] Support more options, better wrapping --- lua/argonaut/options.lua | 1 - lua/argonaut/param.lua | 3 +-- lua/argonaut/range.lua | 21 +++++++++++++++++---- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/lua/argonaut/options.lua b/lua/argonaut/options.lua index 0059e0f..e7a9d0e 100644 --- a/lua/argonaut/options.lua +++ b/lua/argonaut/options.lua @@ -6,7 +6,6 @@ local options_current = { comma_last = false, comma_prefix = false, comma_prefix_indent = false, - line_max = 32, }, go = { comma_last = true, diff --git a/lua/argonaut/param.lua b/lua/argonaut/param.lua index 9a792d2..8aea334 100644 --- a/lua/argonaut/param.lua +++ b/lua/argonaut/param.lua @@ -93,10 +93,9 @@ end function Param:is_wrapped() local previous_param = self:get_previous() if previous_param then - -- print(get_param_stop_row(previous_param), get_param_start_row(self)) return get_param_stop_row(previous_param) ~= get_param_start_row(self) else - return false + return self.range.start_cursor.row ~= get_param_start_row(self) end end diff --git a/lua/argonaut/range.lua b/lua/argonaut/range.lua index 7fc5d4a..f5302ab 100644 --- a/lua/argonaut/range.lua +++ b/lua/argonaut/range.lua @@ -147,12 +147,25 @@ function Range:write(builder, wrapped) builder:push_indent() for i, param in ipairs(self.params) do - param:write(builder) - + local is_first_param = i == 1 local is_last_param = i == #self.params - if not is_last_param or self:query_option('comma_last') then - builder:write(',') + + if self:query_option('comma_prefix') then + if is_first_param then + if self:query_option('comma_prefix_indent') then + builder:write(' ') + end + else + builder:write(', ') + end + param:write(builder) + else + param:write(builder) + if not is_last_param or self:query_option('comma_last') then + builder:write(',') + end end + if not is_last_param then builder:endline() end