Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
gbprod committed Nov 13, 2023
1 parent 36cbd16 commit f67e381
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 2 deletions.
10 changes: 8 additions & 2 deletions lua/substitute.lua
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,14 @@ function substitute.operator_callback(vmode)
end
end

local wrapper = substitute.state.wrappers and require("substitute.wrappers").build(substitute.state.wrappers)
or doSubstitution
local wrapper
if type(substitute.state.wrappers) == "function" then
wrapper = require("substitute.wrappers").build(substitute.state.wrappers(substitute.state))
elseif type(substitute.state.wrappers) == "table" then
wrapper = require("substitute.wrappers").build(substitute.state.wrappers)
else
wrapper = doSubstitution
end

wrapper(substitute.state, doSubstitution)

Expand Down
59 changes: 59 additions & 0 deletions spec/substitute/wrappers/config_spec.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
local substitute = require("substitute")

local function execute_keys(feedkeys)
local keys = vim.api.nvim_replace_termcodes(feedkeys, true, false, true)
vim.api.nvim_feedkeys(keys, "x", false)
end

local function get_buf_lines()
return vim.api.nvim_buf_get_lines(0, 0, -1, true)
end

local buf
describe("Substitute wrappers", function()
before_each(function()
substitute.setup()

buf = vim.api.nvim_create_buf(false, true)
vim.api.nvim_command("buffer " .. buf)
end)

it("should be taken from a function", function()
vim.api.nvim_buf_set_lines(buf, 0, -1, true, { "Lorem", "ipsum", "dolor", "sit", "amet" })

vim.keymap.set({ "n", "x" }, "]s", function()
require("substitute").operator({
wrappers = function(_)
return { "linewise" }
end,
})
end, { noremap = true })

execute_keys("lly2l")
execute_keys("j")
execute_keys("]s2l")

assert.are.same({ "Lorem", "ip", "re", "m", "dolor", "sit", "amet" }, get_buf_lines())
end)

it("could be conditionnal", function()
vim.api.nvim_buf_set_lines(buf, 0, -1, true, { " Lorem ", "ipsum", "dolor", "sit", "amet" })

vim.keymap.set({ "n", "x" }, "]s", function()
require("substitute").operator({
wrappers = function(state)
return state.vmode == "char" and { "trim" } or { "linewise" }
end,
})
end, { noremap = true })

execute_keys("yy")
execute_keys("jll")
execute_keys("]s2l")

execute_keys("jV")
execute_keys("]s")

assert.are.same({ " Lorem ", "ipLoremm", " Lorem ", "sit", "amet" }, get_buf_lines())
end)
end)

0 comments on commit f67e381

Please sign in to comment.