From 79ddb89088fbb4278ffd259f30e556ba0f2845f8 Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Wed, 24 Apr 2024 20:02:10 -0700 Subject: [PATCH] WIP --- lua/argonaut/init.lua | 72 ++++++++++++++++++++++++++++++++++-- lua/argonaut/types.lua | 83 ++++-------------------------------------- 2 files changed, 76 insertions(+), 79 deletions(-) diff --git a/lua/argonaut/init.lua b/lua/argonaut/init.lua index 9f47a99..64272b8 100644 --- a/lua/argonaut/init.lua +++ b/lua/argonaut/init.lua @@ -1,11 +1,75 @@ local config = require('argonaut.config') local types = require('argonaut.types') -local function setup(opts, filetypes) - config.set(opts, filetypes) +local function wrap_brace_range(brace_range, arg_list) + vim.fn.setline(brace_range.start_cursor.row, arg_list.indent .. arg_list.prefix) + + -- local cursor_pos = nil + local row = brace_range.start_cursor.row + for _, arg in ipairs(arg_list.args) do + -- local on_last_row = i == #brace_range.params + + local line = arg_list.indent .. arg.text + -- if opts.tail_comma or not on_last_row then + line = line .. ',' + -- end + + -- if on_last_row and not opts.wrap_closing_brace then + -- line = line .. brace_range.suffix + -- end + + vim.fn.append(row, line) + vim.fn.execute(string.format('%d>', row + 1)) + + -- if param.offset then + -- cursor_pos = get_cursor_pos() + -- cursor_pos.col = cursor_pos.col + param.offset + -- cursor_pos.row = row + 1 + -- end + + row = row + 1 + end + + vim.fn.append(row, arg_list.indent .. arg_list.suffix) + + -- if opts.wrap_closing_brace then + -- vim.fn.append(row, brace_range.indent .. brace_range.suffix) + -- end + -- + -- if cursor_pos then + -- vim.fn.setcursorcharpos({cursor_pos.row, cursor_pos.col}) + -- end +end + +local function unwrap_brace_range(brace_range, arg_list) + local line = arg_list.indent .. arg_list.prefix + for i, arg in ipairs(arg_list.args) do + line = line .. arg.text + if i < #arg_list.args then + line = line .. ', ' + end + end + line = line .. arg_list.suffix + + vim.fn.setline(brace_range.start_cursor.row, line) + vim.fn.execute(string.format('%d,%dd_', brace_range.start_cursor.row + 1, brace_range.stop_cursor.row)) +end + +local function reflow() + local brace_range = types.BraceRange.find_closest_any() + if brace_range then + local arg_list = types.ArgList.new() + arg_list:parse(brace_range) + + if brace_range:is_wrapped() then + unwrap_brace_range(brace_range, arg_list) + else + wrap_brace_range(brace_range, arg_list) + end + end end return { - reflow = types.reflow, - setup = setup, + reflow = reflow, + setup = config.set, } diff --git a/lua/argonaut/types.lua b/lua/argonaut/types.lua index 87af060..ae10f04 100644 --- a/lua/argonaut/types.lua +++ b/lua/argonaut/types.lua @@ -2,7 +2,7 @@ -- Cursor -- -Cursor = {} +local Cursor = {} function Cursor.new(row, col) local cursor = {row = row, col = col} @@ -34,7 +34,7 @@ end -- BracePair -- -BracePair = {} +local BracePair = {} function BracePair.new(open, close) local brace_pair = {open = open, close = close} @@ -105,7 +105,7 @@ end -- BraceStack -- -BraceStack = {} +local BraceStack = {} function BraceStack.new() local stack = {stack = {}} @@ -144,7 +144,7 @@ end -- BraceRange -- -BraceRange = {} +local BraceRange = {} function BraceRange.new(start_cursor, stop_cursor, brace_pair, brace_params) local brace_range = { @@ -213,7 +213,7 @@ end -- Arg -- -Arg = {} +local Arg = {} function Arg.new(text, brace_pair) local arg = { @@ -232,7 +232,7 @@ end -- ArgList -- -ArgList = {} +local ArgList = {} function ArgList.new() local arg_list = { @@ -301,74 +301,7 @@ function ArgList:parse(brace_range) self:flush() end -local function wrap_brace_range(brace_range, arg_list) - vim.fn.setline(brace_range.start_cursor.row, arg_list.indent .. arg_list.prefix) - - -- local cursor_pos = nil - local row = brace_range.start_cursor.row - for _, arg in ipairs(arg_list.args) do - -- local on_last_row = i == #brace_range.params - - local line = arg_list.indent .. arg.text - -- if opts.tail_comma or not on_last_row then - line = line .. ',' - -- end - - -- if on_last_row and not opts.wrap_closing_brace then - -- line = line .. brace_range.suffix - -- end - - vim.fn.append(row, line) - vim.fn.execute(string.format('%d>', row + 1)) - - -- if param.offset then - -- cursor_pos = get_cursor_pos() - -- cursor_pos.col = cursor_pos.col + param.offset - -- cursor_pos.row = row + 1 - -- end - - row = row + 1 - end - - vim.fn.append(row, arg_list.indent .. arg_list.suffix) - - -- if opts.wrap_closing_brace then - -- vim.fn.append(row, brace_range.indent .. brace_range.suffix) - -- end - -- - -- if cursor_pos then - -- vim.fn.setcursorcharpos({cursor_pos.row, cursor_pos.col}) - -- end -end - -local function unwrap_brace_range(brace_range, arg_list) - local line = arg_list.indent .. arg_list.prefix - for i, arg in ipairs(arg_list.args) do - line = line .. arg.text - if i < #arg_list.args then - line = line .. ', ' - end - end - line = line .. arg_list.suffix - - vim.fn.setline(brace_range.start_cursor.row, line) - vim.fn.execute(string.format('%d,%dd_', brace_range.start_cursor.row + 1, brace_range.stop_cursor.row)) -end - -local function reflow() - local brace_range = BraceRange.find_closest_any() - if brace_range then - local arg_list = ArgList.new() - arg_list:parse(brace_range) - - if brace_range:is_wrapped() then - unwrap_brace_range(brace_range, arg_list) - else - wrap_brace_range(brace_range, arg_list) - end - end -end - return { - reflow = reflow + BraceRange = BraceRange, + ArgList = ArgList, }