From 2d1b8cd756f7a7b87e32c29fc0b772578a365530 Mon Sep 17 00:00:00 2001 From: Alex Yatskov <alex@foosoft.net> Date: Tue, 31 Dec 2024 16:25:43 -0800 Subject: [PATCH] Cleanup --- lua/argonaut/cursor.lua | 70 +++++++++++++++++++++++++++------------- lua/argonaut/pairing.lua | 2 +- lua/argonaut/range.lua | 6 ++-- 3 files changed, 51 insertions(+), 27 deletions(-) diff --git a/lua/argonaut/cursor.lua b/lua/argonaut/cursor.lua index 954c5db..43c7dc3 100644 --- a/lua/argonaut/cursor.lua +++ b/lua/argonaut/cursor.lua @@ -2,57 +2,81 @@ local Cursor = {} Cursor.__index = Cursor function Cursor.new(row, col) - local cursor = { - row = row, - col = col, - } - + local cursor = {row = row, col = col} return setmetatable(cursor, Cursor) end +function Cursor.get_first() + local row = 1 + local line = vim.fn.getline(row) + return Cursor.new(row, #line) +end + +function Cursor.get_last() + local row = vim.fn.line('$') + local line = vim.fn.getline(row) + return Cursor.new(row, #line) +end + function Cursor.get_current() local _, row, col, _ = unpack(vim.fn.getpos('.')) return Cursor.new(row, col) end function Cursor:set_current() - assert(self:is_valid()) - vim.fn.setcursorcharpos({self.row, self.col}) end function Cursor:get_value() - assert(self:is_valid()) - local line = vim.fn.getline(self.row) return line:sub(self.col, self.col) end +function Cursor:get_syntax_name() + local syn_id = vim.fn.synID(self.row, self.col, false) + return vim.fn.synIDattr(syn_id, 'name') +end + function Cursor:is_valid() return self.row > 0 and self.col > 0 end -function Cursor:is_literal() - assert(self:is_valid()) +function Cursor:is_comment() + local name = self:get_syntax_name() + return name:find('Comment$') ~= nil +end - local syn_id = vim.fn.synID(self.row, self.col, false) - local syn_attr = vim.fn.synIDattr(syn_id, 'name') - return syn_attr:find('String$') ~= nil or syn_attr:find('Comment$') ~= nil +function Cursor:is_string() + local name = self:get_syntax_name() + return name:find('String$') ~= nil end -function Cursor:next() - assert(self:is_valid()) +function Cursor:get_previous() + if self > Cursor.get_first() then + local previous_cursor = Cursor.new(self.row, self.col - 1) - local current_line = vim.fn.getline(self.row) - local next_col = self.col + 1 - local next_row = self.row + if previous_cursor.col < 1 then + previous_cursor.row = previous_cursor.row - 1 + local line = vim.fn.getline(previous_cursor.row ) + previous_cursor.col = #line + end - if next_col > #current_line then - next_row = next_row + 1 - next_col = 1 + return previous_cursor end +end + +function Cursor:get_next() + if self < Cursor.get_last() then + local line = vim.fn.getline(self.row) + local next_cursor = Cursor.new(self.row, self.col + 1) - return Cursor.new(next_row, next_col) + if next_cursor.col > #line then + next_cursor.row = next_cursor.row + 1 + next_cursor.col = 1 + end + + return next_cursor + end end function Cursor.__lt(cursor_1, cursor_2) diff --git a/lua/argonaut/pairing.lua b/lua/argonaut/pairing.lua index e2e0e32..71e760d 100644 --- a/lua/argonaut/pairing.lua +++ b/lua/argonaut/pairing.lua @@ -51,7 +51,7 @@ function Pairing:find_closest(forward) local ignore_func = function() local cursor = Cursor.get_current() - return cursor:is_literal() + return cursor:is_comment() or cursor:is_string() end local escaped_pair = self:get_escaped() diff --git a/lua/argonaut/range.lua b/lua/argonaut/range.lua index f5302ab..c560a6e 100644 --- a/lua/argonaut/range.lua +++ b/lua/argonaut/range.lua @@ -79,11 +79,11 @@ function Range:parse() param = nil end - local cursor = self.start_cursor:next() + local cursor = self.start_cursor:get_next() while cursor ~= self.stop_cursor do local value = cursor:get_value() - if cursor:is_literal() then + if cursor:is_string() or cursor:is_comment() then append_param_value(cursor, 'cursor') else local range = find_at_cursor(cursor) @@ -97,7 +97,7 @@ function Range:parse() end end - cursor = cursor:next() + cursor = cursor:get_next() end append_param() -- 2.45.3