From 5e7de4bd405dc68baedbe8024145b6b21c329be3 Mon Sep 17 00:00:00 2001 From: Kyle Grierson Date: Tue, 19 Sep 2023 16:33:42 +0100 Subject: [PATCH] Raise and move cursor --- fnl/formedit/raise.fnl | 6 ++++-- fnl/spec/raise_spec.fnl | 26 ++++++++++++++++++-------- lua/formedit/raise.lua | 6 ++++-- lua/spec/raise_spec.lua | 30 ++++++++++++++++++++++-------- 4 files changed, 48 insertions(+), 20 deletions(-) diff --git a/fnl/formedit/raise.fnl b/fnl/formedit/raise.fnl index 141c528..c4e63d1 100644 --- a/fnl/formedit/raise.fnl +++ b/fnl/formedit/raise.fnl @@ -6,13 +6,15 @@ parent (form:parent) text (ts.get_node_text form 0) [start-row start-col end-row end-col] [(parent:range)]] - (vim.api.nvim_buf_set_text 0 start-row start-col end-row end-col [text]))) + (vim.api.nvim_buf_set_text 0 start-row start-col end-row end-col [text]) + (vim.api.nvim_win_set_cursor 0 [(+ start-row 1) start-col]))) (fn element [] (let [element (find.element) parent (element:parent) text (ts.get_node_text element 0) [start-row start-col end-row end-col] [(parent:range)]] - (vim.api.nvim_buf_set_text 0 start-row start-col end-row end-col [text]))) + (vim.api.nvim_buf_set_text 0 start-row start-col end-row end-col [text]) + (vim.api.nvim_win_set_cursor 0 [(+ start-row 1) start-col]))) {: form : element} diff --git a/fnl/spec/raise_spec.fnl b/fnl/spec/raise_spec.fnl index d4ae09a..f11f792 100644 --- a/fnl/spec/raise_spec.fnl +++ b/fnl/spec/raise_spec.fnl @@ -6,8 +6,7 @@ (local raise-form-keymap :o) (local raise-element-keymap :O) - -(describe :raise +(describe :raise-form (fn [] (before_each (fn [] (set vim.g.maplocalleader localleader) @@ -16,13 +15,24 @@ raise.element))) (it :form (fn [] - (h.setup {:content "(1 (2))" :cursor [1 4]}) + (h.setup {:content "(+ 1 (+ 2 3))" :cursor [1 5]}) (h.feedkeys raise-form-keymap) - (h.expect {:content "(2)" :cursor [1 2]}))) - (it :element + (h.expect {:content "(+ 2 3)" :cursor [1 0]}))))) + +(describe :raise-element + (fn [] + (before_each (fn [] + (set vim.g.maplocalleader localleader) + (vim.keymap.set :n raise-form-keymap raise.form) + (vim.keymap.set :n raise-element-keymap + raise.element))) + (it :first-element (fn [] (h.setup {:content "(+ 1 (+ 2 3))" :cursor [1 8]}) (h.feedkeys raise-element-keymap) - (h.expect {:content "(+ 1 2)" :cursor [1 6]}))))) - -(print "End") + (h.expect {:content "(+ 1 2)" :cursor [1 5]}))) + (it :second-element + (fn [] + (h.setup {:content "(+ 1 (+ 2 3))" :cursor [1 10]}) + (h.feedkeys raise-element-keymap) + (h.expect {:content "(+ 1 3)" :cursor [1 5]}))))) diff --git a/lua/formedit/raise.lua b/lua/formedit/raise.lua index 97a41ad..c03595d 100644 --- a/lua/formedit/raise.lua +++ b/lua/formedit/raise.lua @@ -10,7 +10,8 @@ local function form() local start_col = _let_1_[2] local end_row = _let_1_[3] local end_col = _let_1_[4] - return vim.api.nvim_buf_set_text(0, start_row, start_col, end_row, end_col, {text}) + vim.api.nvim_buf_set_text(0, start_row, start_col, end_row, end_col, {text}) + return vim.api.nvim_win_set_cursor(0, {(start_row + 1), start_col}) end local function element() local element0 = find.element() @@ -21,6 +22,7 @@ local function element() local start_col = _let_2_[2] local end_row = _let_2_[3] local end_col = _let_2_[4] - return vim.api.nvim_buf_set_text(0, start_row, start_col, end_row, end_col, {text}) + vim.api.nvim_buf_set_text(0, start_row, start_col, end_row, end_col, {text}) + return vim.api.nvim_win_set_cursor(0, {(start_row + 1), start_col}) end return {form = form, element = element} diff --git a/lua/spec/raise_spec.lua b/lua/spec/raise_spec.lua index 7e55b0e..dc0ef9f 100644 --- a/lua/spec/raise_spec.lua +++ b/lua/spec/raise_spec.lua @@ -16,17 +16,31 @@ local function _2_() end before_each(_3_) local function _4_() - h.setup({content = "(1 (2))", cursor = {1, 4}}) + h.setup({content = "(+ 1 (+ 2 3))", cursor = {1, 5}}) h.feedkeys(raise_form_keymap) - return h.expect({content = "(2)", cursor = {1, 2}}) + return h.expect({content = "(+ 2 3)", cursor = {1, 0}}) end - it("form", _4_) - local function _5_() + return it("form", _4_) +end +describe("raise-form", _2_) +local function _5_() + local function _6_() + vim.g.maplocalleader = localleader + vim.keymap.set("n", raise_form_keymap, raise.form) + return vim.keymap.set("n", raise_element_keymap, raise.element) + end + before_each(_6_) + local function _7_() h.setup({content = "(+ 1 (+ 2 3))", cursor = {1, 8}}) h.feedkeys(raise_element_keymap) - return h.expect({content = "(+ 1 2)", cursor = {1, 6}}) + return h.expect({content = "(+ 1 2)", cursor = {1, 5}}) + end + it("first-element", _7_) + local function _8_() + h.setup({content = "(+ 1 (+ 2 3))", cursor = {1, 10}}) + h.feedkeys(raise_element_keymap) + return h.expect({content = "(+ 1 3)", cursor = {1, 5}}) end - return it("element", _5_) + return it("second-element", _8_) end -describe("raise", _2_) -return print("End") +return describe("raise-element", _5_)