diff --git a/examples/surround.lua b/examples/surround.lua index 533289f..358c9d0 100644 --- a/examples/surround.lua +++ b/examples/surround.lua @@ -170,29 +170,19 @@ function M.setup() local irange = Range.from_motion('i' .. from_c, { user_defined = true }) if arange == nil or irange == nil then return end - local lrange = Range.new(arange.start, irange.start:must_next(-1)) - local rrange = Range.new(irange.stop:must_next(1), arange.stop) + local lrange, rrange = arange:difference(irange) + if not lrange or not rrange then return end rrange:replace(to.right) lrange:replace(to.left) else -- replace `from.right` with `to.right`: - local last_line = arange:line(-1):text() - local from_right_match = last_line:match(vim.pesc(from.right) .. '$') - if from_right_match then - local match_start = arange.stop:clone() - match_start.col = match_start.col - #from_right_match + 1 - Range.new(match_start, arange.stop):replace(to.right) - end + local right_text = arange:sub(-1, -#from.right) + right_text:replace(to.right) -- replace `from.left` with `to.left`: - local first_line = arange:line(1):text() - local from_left_match = first_line:match('^' .. vim.pesc(from.left)) - if from_left_match then - local match_end = arange.start:clone() - match_end.col = match_end.col + #from_left_match - 1 - Range.new(arange.start, match_end):replace(to.left) - end + local left_text = arange:sub(1, #from.left) + left_text:replace(to.left) end end) end, { noremap = true, silent = true }) diff --git a/lua/u/buffer.lua b/lua/u/buffer.lua index 4e83d7e..0b9d806 100644 --- a/lua/u/buffer.lua +++ b/lua/u/buffer.lua @@ -5,17 +5,14 @@ local Renderer = require('u.renderer').Renderer --- @field bufnr number --- @field private renderer u.Renderer local Buffer = {} +Buffer.__index = Buffer --- @param bufnr? number --- @return u.Buffer function Buffer.from_nr(bufnr) if bufnr == nil or bufnr == 0 then bufnr = vim.api.nvim_get_current_buf() end - local renderer = Renderer.new(bufnr) - return setmetatable({ - bufnr = bufnr, - renderer = renderer, - }, { __index = Buffer }) + return setmetatable({ bufnr = bufnr, renderer = renderer }, Buffer) end --- @return u.Buffer diff --git a/lua/u/codewriter.lua b/lua/u/codewriter.lua index 3f47136..ab854fd 100644 --- a/lua/u/codewriter.lua +++ b/lua/u/codewriter.lua @@ -5,6 +5,7 @@ local Buffer = require 'u.buffer' --- @field indent_level number --- @field indent_str string local CodeWriter = {} +CodeWriter.__index = CodeWriter --- @param indent_level? number --- @param indent_str? string @@ -18,7 +19,7 @@ function CodeWriter.new(indent_level, indent_str) indent_level = indent_level, indent_str = indent_str, } - setmetatable(cw, { __index = CodeWriter }) + setmetatable(cw, CodeWriter) return cw end