diff --git a/fnl/formedit/selection.fnl b/fnl/formedit/selection.fnl index e701246..dd9fa27 100644 --- a/fnl/formedit/selection.fnl +++ b/fnl/formedit/selection.fnl @@ -1,26 +1,18 @@ (local tree (require :formedit.tree)) -(local ts (require :nvim-treesitter.ts_utils)) (fn delete-around-form [] - (let [node (ts.get_node_at_cursor) - form (tree.get-form node) + (let [form (tree.get-current-form) [start-row start-col end-row end-col] [(form:range)]] (vim.api.nvim_buf_set_text 0 start-row start-col end-row end-col {}))) -(fn delete-inner-form [node] - (let [node (ts.get_node_at_cursor) - form (tree.get-form node) +(fn delete-inner-form [] + (let [form (tree.get-current-form) [start-row start-col end-row end-col] [(form:range)] - text (vim.api.nvim_buf_get_text 0 start-row start-col end-row end-col - {}) - _ (print "Inner form text") - _ (print (vim.inspect text)) - _ (print :range) - _ (print (vim.inspect [(form:range)])) + buffer 0 offset (if (or (= :set_lit (form:type)) (= :anon_fn_lit (form:type))) 2 1)] - (vim.api.nvim_buf_set_text 0 start-row (+ start-col offset) end-row + (vim.api.nvim_buf_set_text buffer start-row (+ start-col offset) end-row (- end-col 1) {}))) {: delete-around-form : delete-inner-form} diff --git a/fnl/formedit/tree.fnl b/fnl/formedit/tree.fnl index 8a2a9f1..f43ba3e 100644 --- a/fnl/formedit/tree.fnl +++ b/fnl/formedit/tree.fnl @@ -1,3 +1,5 @@ +(local ts (require :nvim-treesitter.ts_utils)) + (local forms {:list_lit true :vec_lit true :map_lit true @@ -10,4 +12,9 @@ (let [parent (node:parent)] (when parent (get-form parent))))) -{: get-form} +(fn get-current-form [] + (let [node (ts.get_node_at_cursor) + form (get-form node)] + form)) + +{: get-current-form} diff --git a/fnl/spec/delete_inner_spec.fnl b/fnl/spec/delete_inner_spec.fnl index f7b038e..d369f60 100644 --- a/fnl/spec/delete_inner_spec.fnl +++ b/fnl/spec/delete_inner_spec.fnl @@ -6,9 +6,9 @@ (fn [] (it :list (fn [] - (h.setup {:content "(1)" :cursor [1 1]}) + (h.setup {:content "(1)" :cursor [1 0]}) (selection.delete-inner-form) - (h.expect {:content "()" :cursor [1 1]}))) + (h.expect {:content "()" :cursor [1 0]}))) (it :vector (fn [] (h.setup {:content "[1]" :cursor [1 1]}) @@ -28,9 +28,22 @@ (fn [] (h.setup {:content "([1] [2])" :cursor [1 0]}) (selection.delete-inner-form) + (h.expect {:content "()" :cursor [1 0]}))))) + +(describe "delete inner across lines" + (fn [] + (it :list + (fn [] + (h.setup {:content ["(1" "2)"] :cursor [1 0]}) + (selection.delete-inner-form) (h.expect {:content "()" :cursor [1 0]}))) - (it "delete across lines" + (it :vector + (fn [] + (h.setup {:content ["[1" "2]"] :cursor [1 0]}) + (selection.delete-inner-form) + (h.expect {:content "[]" :cursor [1 0]}))) + (it :set (fn [] - (h.setup {:content ["([1]," "[2])"] :cursor [1 0]}) + (h.setup {:content ["#{1" "2}"] :cursor [1 0]}) (selection.delete-inner-form) - (h.expect {:content "()" :cursor [1 0] :lines 2}))))) + (h.expect {:content "#{}" :cursor [1 0]}))))) diff --git a/fnl/spec/helper.fnl b/fnl/spec/helper.fnl index 51775e3..63d640d 100644 --- a/fnl/spec/helper.fnl +++ b/fnl/spec/helper.fnl @@ -10,16 +10,11 @@ (vim.api.nvim_win_set_cursor 0 cursor) (: (vim.treesitter.get_parser 0) :parse))) -(fn expect [{: cursor : content : lines}] - (let [lines (or lines 0) - _ (print lines) - foo (vim.api.nvim_buf_get_lines 0 lines -1 false) - _ (print "found text in expect") - _ (print (vim.inspect foo))] - (when content - (assert.are.same content - (core.first (vim.api.nvim_buf_get_lines 0 lines -1 false)))) - (when cursor - (assert.are.same cursor (vim.api.nvim_win_get_cursor 0))))) +(fn expect [{: cursor : content}] + (when content + (assert.are.same content + (core.first (vim.api.nvim_buf_get_lines 0 0 10 false)))) + (when cursor + (assert.are.same cursor (vim.api.nvim_win_get_cursor 0)))) {: setup : expect} diff --git a/fnl/spec/selection_spec.fnl b/fnl/spec/selection_spec.fnl index 4370138..5042dd7 100644 --- a/fnl/spec/selection_spec.fnl +++ b/fnl/spec/selection_spec.fnl @@ -2,13 +2,11 @@ (local h (require :spec.helper)) (local tree (require :formedit.tree)) (local assert (require :luassert.assert)) -(local ts (require :nvim-treesitter.ts_utils)) (describe :selection (fn [] (it :list (fn [] (h.setup {:content "(a)" :cursor [1 1]}) - (let [node (ts.get_node_at_cursor) - form (tree.get-form node)] + (let [form (tree.get-current-form)] (assert.are.same [0 0 0 3] [(form:range)])))))) diff --git a/fnl/spec/tree_spec.fnl b/fnl/spec/tree_spec.fnl index cf51ee4..35b6fa3 100644 --- a/fnl/spec/tree_spec.fnl +++ b/fnl/spec/tree_spec.fnl @@ -9,8 +9,7 @@ (it "cursor start of form" (fn [] (h.setup {:content " " :cursor [1 1]}) - (let [node (ts.get_node_at_cursor) - actual (tree.get-form node)] + (let [actual (tree.get-current-form)] (assert.falsy actual)))))) (describe :List @@ -19,20 +18,17 @@ (it "cursor start of form" (fn [] (h.setup {:content "(a)" :cursor [1 1]}) - (let [node (ts.get_node_at_cursor) - actual (tree.get-form node)] + (let [actual (tree.get-current-form)] (assert.equals form-type (actual:type))))) (it "cursor within form" (fn [] (h.setup {:content "(a)" :cursor [1 2]}) - (let [node (ts.get_node_at_cursor) - actual (tree.get-form node)] + (let [actual (tree.get-current-form)] (assert.equals form-type (actual:type))))) (it "cursor end of form" (fn [] (h.setup {:content "(a)" :cursor [1 3]}) - (let [node (ts.get_node_at_cursor) - actual (tree.get-form node)] + (let [actual (tree.get-current-form)] (assert.equals form-type (actual:type)))))))) (describe :Vector @@ -41,20 +37,17 @@ (it "cursor start of form" (fn [] (h.setup {:content "[a]" :cursor [1 1]}) - (let [node (ts.get_node_at_cursor) - actual (tree.get-form node)] + (let [actual (tree.get-current-form)] (assert.equals form-type (actual:type))))) (it "cursor within form" (fn [] (h.setup {:content "[a]" :cursor [1 2]}) - (let [node (ts.get_node_at_cursor) - actual (tree.get-form node)] + (let [actual (tree.get-current-form)] (assert.equals form-type (actual:type))))) (it "cursor end of form" (fn [] (h.setup {:content "[a]" :cursor [1 3]}) - (let [node (ts.get_node_at_cursor) - actual (tree.get-form node)] + (let [actual (tree.get-current-form)] (assert.equals form-type (actual:type)))))))) (describe :Map @@ -63,20 +56,17 @@ (it "cursor start of form" (fn [] (h.setup {:content "{:a 1}" :cursor [1 1]}) - (let [node (ts.get_node_at_cursor) - actual (tree.get-form node)] + (let [actual (tree.get-current-form)] (assert.equals form-type (actual:type))))) (it "cursor within form" (fn [] (h.setup {:content "{:a 1}" :cursor [1 2]}) - (let [node (ts.get_node_at_cursor) - actual (tree.get-form node)] + (let [actual (tree.get-current-form)] (assert.equals form-type (actual:type))))) (it "cursor end of form" (fn [] (h.setup {:content "{:a 1}" :cursor [1 6]}) - (let [node (ts.get_node_at_cursor) - actual (tree.get-form node)] + (let [actual (tree.get-current-form)] (assert.equals form-type (actual:type)))))))) (describe :Set @@ -85,26 +75,22 @@ (it "cursor on #" (fn [] (h.setup {:content "#{1}" :cursor [1 1]}) - (let [node (ts.get_node_at_cursor) - actual (tree.get-form node)] + (let [actual (tree.get-current-form)] (assert.equals form-type (actual:type))))) (it "cursor start of form" (fn [] (h.setup {:content "#{1}" :cursor [1 2]}) - (let [node (ts.get_node_at_cursor) - actual (tree.get-form node)] + (let [ actual (tree.get-current-form)] (assert.equals form-type (actual:type))))) (it "cursor within form" (fn [] (h.setup {:content "#{1}" :cursor [1 3]}) - (let [node (ts.get_node_at_cursor) - actual (tree.get-form node)] + (let [actual (tree.get-current-form)] (assert.equals form-type (actual:type))))) (it "cursor end of form" (fn [] (h.setup {:content "#{1}" :cursor [1 4]}) - (let [node (ts.get_node_at_cursor) - actual (tree.get-form node)] + (let [actual (tree.get-current-form)] (assert.equals form-type (actual:type)))))))) (describe "Anonymous function" @@ -113,24 +99,20 @@ (it "cursor on #" (fn [] (h.setup {:content "#(1)" :cursor [1 1]}) - (let [node (ts.get_node_at_cursor) - actual (tree.get-form node)] + (let [actual (tree.get-current-form)] (assert.equals form-type (actual:type))))) (it "cursor start of form" (fn [] (h.setup {:content "#(1)" :cursor [1 2]}) - (let [node (ts.get_node_at_cursor) - actual (tree.get-form node)] + (let [actual (tree.get-current-form)] (assert.equals form-type (actual:type))))) (it "cursor within form" (fn [] (h.setup {:content "#(1)" :cursor [1 3]}) - (let [node (ts.get_node_at_cursor) - actual (tree.get-form node)] + (let [actual (tree.get-current-form)] (assert.equals form-type (actual:type))))) (it "cursor end of form" (fn [] (h.setup {:content "#(1)" :cursor [1 4]}) - (let [node (ts.get_node_at_cursor) - actual (tree.get-form node)] + (let [actual (tree.get-current-form)] (assert.equals form-type (actual:type)))))))) diff --git a/lua/formedit/selection.lua b/lua/formedit/selection.lua index beab87c..f8c7cca 100644 --- a/lua/formedit/selection.lua +++ b/lua/formedit/selection.lua @@ -1,9 +1,7 @@ -- [nfnl] Compiled from fnl/formedit/selection.fnl by https://github.com/Olical/nfnl, do not edit. local tree = require("formedit.tree") -local ts = require("nvim-treesitter.ts_utils") local function delete_around_form() - local node = ts.get_node_at_cursor() - local form = tree["get-form"](node) + local form = tree["get-current-form"]() local _let_1_ = {form:range()} local start_row = _let_1_[1] local start_col = _let_1_[2] @@ -11,25 +9,20 @@ local function delete_around_form() local end_col = _let_1_[4] return vim.api.nvim_buf_set_text(0, start_row, start_col, end_row, end_col, {}) end -local function delete_inner_form(node) - local node0 = ts.get_node_at_cursor() - local form = tree["get-form"](node0) +local function delete_inner_form() + local form = tree["get-current-form"]() local _let_2_ = {form:range()} local start_row = _let_2_[1] local start_col = _let_2_[2] local end_row = _let_2_[3] local end_col = _let_2_[4] - local text = vim.api.nvim_buf_get_text(0, start_row, start_col, end_row, end_col, {}) - local _ = print("Inner form text") - local _0 = print(vim.inspect(text)) - local _1 = print("range") - local _2 = print(vim.inspect({form:range()})) + local buffer = 0 local offset if (("set_lit" == form:type()) or ("anon_fn_lit" == form:type())) then offset = 2 else offset = 1 end - return vim.api.nvim_buf_set_text(0, start_row, (start_col + offset), end_row, (end_col - 1), {}) + return vim.api.nvim_buf_set_text(buffer, start_row, (start_col + offset), end_row, (end_col - 1), {}) end return {["delete-around-form"] = delete_around_form, ["delete-inner-form"] = delete_inner_form} diff --git a/lua/formedit/tree.lua b/lua/formedit/tree.lua index a67d1df..01d589c 100644 --- a/lua/formedit/tree.lua +++ b/lua/formedit/tree.lua @@ -1,4 +1,5 @@ -- [nfnl] Compiled from fnl/formedit/tree.fnl by https://github.com/Olical/nfnl, do not edit. +local ts = require("nvim-treesitter.ts_utils") local forms = {list_lit = true, vec_lit = true, map_lit = true, set_lit = true, anon_fn_lit = true} local function get_form(node) if forms[node:type()] then @@ -12,4 +13,9 @@ local function get_form(node) end end end -return {["get-form"] = get_form} +local function get_current_form() + local node = ts.get_node_at_cursor() + local form = get_form(node) + return form +end +return {["get-current-form"] = get_current_form} diff --git a/lua/spec/delete_inner_spec.lua b/lua/spec/delete_inner_spec.lua index d1a6a8e..d99d0dd 100644 --- a/lua/spec/delete_inner_spec.lua +++ b/lua/spec/delete_inner_spec.lua @@ -6,9 +6,9 @@ local h = require("spec.helper") local selection = require("formedit.selection") local function _2_() local function _3_() - h.setup({content = "(1)", cursor = {1, 1}}) + h.setup({content = "(1)", cursor = {1, 0}}) selection["delete-inner-form"]() - return h.expect({content = "()", cursor = {1, 1}}) + return h.expect({content = "()", cursor = {1, 0}}) end it("list", _3_) local function _4_() @@ -34,12 +34,27 @@ local function _2_() selection["delete-inner-form"]() return h.expect({content = "()", cursor = {1, 0}}) end - it("delete multiple children", _7_) - local function _8_() - h.setup({content = {"([1],", "[2])"}, cursor = {1, 0}}) + return it("delete multiple children", _7_) +end +describe("delete inner", _2_) +local function _8_() + local function _9_() + h.setup({content = {"(1", "2)"}, cursor = {1, 0}}) + selection["delete-inner-form"]() + return h.expect({content = "()", cursor = {1, 0}}) + end + it("list", _9_) + local function _10_() + h.setup({content = {"[1", "2]"}, cursor = {1, 0}}) + selection["delete-inner-form"]() + return h.expect({content = "[]", cursor = {1, 0}}) + end + it("vector", _10_) + local function _11_() + h.setup({content = {"#{1", "2}"}, cursor = {1, 0}}) selection["delete-inner-form"]() - return h.expect({content = "()", cursor = {1, 0}, lines = 2}) + return h.expect({content = "#{}", cursor = {1, 0}}) end - return it("delete across lines", _8_) + return it("set", _11_) end -return describe("delete inner", _2_) +return describe("delete inner across lines", _8_) diff --git a/lua/spec/helper.lua b/lua/spec/helper.lua index 6970406..2e34bbe 100644 --- a/lua/spec/helper.lua +++ b/lua/spec/helper.lua @@ -20,14 +20,8 @@ local function expect(_4_) local _arg_5_ = _4_ local cursor = _arg_5_["cursor"] local content = _arg_5_["content"] - local lines = _arg_5_["lines"] - local lines0 = (lines or 0) - local _ = print(lines0) - local foo = vim.api.nvim_buf_get_lines(0, lines0, -1, false) - local _0 = print("found text in expect") - local _1 = print(vim.inspect(foo)) if content then - assert.are.same(content, core.first(vim.api.nvim_buf_get_lines(0, lines0, -1, false))) + assert.are.same(content, core.first(vim.api.nvim_buf_get_lines(0, 0, 10, false))) else end if cursor then diff --git a/lua/spec/selection_spec.lua b/lua/spec/selection_spec.lua index f5f38fa..f352af3 100644 --- a/lua/spec/selection_spec.lua +++ b/lua/spec/selection_spec.lua @@ -5,12 +5,10 @@ local it = _local_1_["it"] local h = require("spec.helper") local tree = require("formedit.tree") local assert = require("luassert.assert") -local ts = require("nvim-treesitter.ts_utils") local function _2_() local function _3_() h.setup({content = "(a)", cursor = {1, 1}}) - local node = ts.get_node_at_cursor() - local form = tree["get-form"](node) + local form = tree["get-current-form"]() return assert.are.same({0, 0, 0, 3}, {form:range()}) end return it("list", _3_) diff --git a/lua/spec/tree_spec.lua b/lua/spec/tree_spec.lua index 6a2fda3..e0c6846 100644 --- a/lua/spec/tree_spec.lua +++ b/lua/spec/tree_spec.lua @@ -9,8 +9,7 @@ local ts = require("nvim-treesitter.ts_utils") local function _2_() local function _3_() h.setup({content = " ", cursor = {1, 1}}) - local node = ts.get_node_at_cursor() - local actual = tree["get-form"](node) + local actual = tree["get-current-form"]() return assert.falsy(actual) end return it("cursor start of form", _3_) @@ -21,22 +20,19 @@ local function _4_(...) local function _5_() local function _6_() h.setup({content = "(a)", cursor = {1, 1}}) - local node = ts.get_node_at_cursor() - local actual = tree["get-form"](node) + local actual = tree["get-current-form"]() return assert.equals(form_type, actual:type()) end it("cursor start of form", _6_) local function _7_() h.setup({content = "(a)", cursor = {1, 2}}) - local node = ts.get_node_at_cursor() - local actual = tree["get-form"](node) + local actual = tree["get-current-form"]() return assert.equals(form_type, actual:type()) end it("cursor within form", _7_) local function _8_() h.setup({content = "(a)", cursor = {1, 3}}) - local node = ts.get_node_at_cursor() - local actual = tree["get-form"](node) + local actual = tree["get-current-form"]() return assert.equals(form_type, actual:type()) end return it("cursor end of form", _8_) @@ -49,22 +45,19 @@ local function _9_(...) local function _10_() local function _11_() h.setup({content = "[a]", cursor = {1, 1}}) - local node = ts.get_node_at_cursor() - local actual = tree["get-form"](node) + local actual = tree["get-current-form"]() return assert.equals(form_type, actual:type()) end it("cursor start of form", _11_) local function _12_() h.setup({content = "[a]", cursor = {1, 2}}) - local node = ts.get_node_at_cursor() - local actual = tree["get-form"](node) + local actual = tree["get-current-form"]() return assert.equals(form_type, actual:type()) end it("cursor within form", _12_) local function _13_() h.setup({content = "[a]", cursor = {1, 3}}) - local node = ts.get_node_at_cursor() - local actual = tree["get-form"](node) + local actual = tree["get-current-form"]() return assert.equals(form_type, actual:type()) end return it("cursor end of form", _13_) @@ -77,22 +70,19 @@ local function _14_(...) local function _15_() local function _16_() h.setup({content = "{:a 1}", cursor = {1, 1}}) - local node = ts.get_node_at_cursor() - local actual = tree["get-form"](node) + local actual = tree["get-current-form"]() return assert.equals(form_type, actual:type()) end it("cursor start of form", _16_) local function _17_() h.setup({content = "{:a 1}", cursor = {1, 2}}) - local node = ts.get_node_at_cursor() - local actual = tree["get-form"](node) + local actual = tree["get-current-form"]() return assert.equals(form_type, actual:type()) end it("cursor within form", _17_) local function _18_() h.setup({content = "{:a 1}", cursor = {1, 6}}) - local node = ts.get_node_at_cursor() - local actual = tree["get-form"](node) + local actual = tree["get-current-form"]() return assert.equals(form_type, actual:type()) end return it("cursor end of form", _18_) @@ -105,29 +95,25 @@ local function _19_(...) local function _20_() local function _21_() h.setup({content = "#{1}", cursor = {1, 1}}) - local node = ts.get_node_at_cursor() - local actual = tree["get-form"](node) + local actual = tree["get-current-form"]() return assert.equals(form_type, actual:type()) end it("cursor on #", _21_) local function _22_() h.setup({content = "#{1}", cursor = {1, 2}}) - local node = ts.get_node_at_cursor() - local actual = tree["get-form"](node) + local actual = tree["get-current-form"]() return assert.equals(form_type, actual:type()) end it("cursor start of form", _22_) local function _23_() h.setup({content = "#{1}", cursor = {1, 3}}) - local node = ts.get_node_at_cursor() - local actual = tree["get-form"](node) + local actual = tree["get-current-form"]() return assert.equals(form_type, actual:type()) end it("cursor within form", _23_) local function _24_() h.setup({content = "#{1}", cursor = {1, 4}}) - local node = ts.get_node_at_cursor() - local actual = tree["get-form"](node) + local actual = tree["get-current-form"]() return assert.equals(form_type, actual:type()) end return it("cursor end of form", _24_) @@ -140,29 +126,25 @@ local function _25_(...) local function _26_() local function _27_() h.setup({content = "#(1)", cursor = {1, 1}}) - local node = ts.get_node_at_cursor() - local actual = tree["get-form"](node) + local actual = tree["get-current-form"]() return assert.equals(form_type, actual:type()) end it("cursor on #", _27_) local function _28_() h.setup({content = "#(1)", cursor = {1, 2}}) - local node = ts.get_node_at_cursor() - local actual = tree["get-form"](node) + local actual = tree["get-current-form"]() return assert.equals(form_type, actual:type()) end it("cursor start of form", _28_) local function _29_() h.setup({content = "#(1)", cursor = {1, 3}}) - local node = ts.get_node_at_cursor() - local actual = tree["get-form"](node) + local actual = tree["get-current-form"]() return assert.equals(form_type, actual:type()) end it("cursor within form", _29_) local function _30_() h.setup({content = "#(1)", cursor = {1, 4}}) - local node = ts.get_node_at_cursor() - local actual = tree["get-form"](node) + local actual = tree["get-current-form"]() return assert.equals(form_type, actual:type()) end return it("cursor end of form", _30_)