From 0f87914d2ec12df183c08348e5d5835f551ce94c Mon Sep 17 00:00:00 2001 From: Kyle Grierson Date: Wed, 16 Aug 2023 22:33:12 +0100 Subject: [PATCH] Handle slurp set --- README.md | 29 ++++++++++++++++++++++++----- fnl/formedit/slurp.fnl | 4 +++- fnl/spec/slurp_spec.fnl | 14 ++++++++++++-- lua/formedit/slurp.lua | 4 +++- lua/spec/slurp_spec.lua | 30 +++++++++++++++++++++--------- 5 files changed, 63 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index dc0ea4f..092a55a 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,35 @@ # Form edit -Paredit in fennel +Paredit in Fennel for Clojure -## Getting started +## Features + +- Form text objects + - Lists (s-exp, quoted list), vector, set are all under one text object + - so instead of `di(` `di[` `di{` just `dif` (or any other text object command) + - `f` for current form. `F` for root form +- Slurp + - Bring in element/form into your form +- Raise + - Remove parent form and replace with current form +- Wrap + - Add form around current form +- Insertion + - Move cursor to begining/end for form in insert mode + +## Todo + +- [ ] - Inner select +- [ ] - Barf + +## Dev Getting started ```bash ./scripts/nfnl # To download nfnl +just test # Run tests +just watch {featuer} # Run watch tests for feature ``` -[ ] - inner select - Get all named value children on form -[ ] - slurp/barf - ? - ## Unlicensed Find the full [Unlicense][unlicense] in the `UNLICENSE` file, but here's a diff --git a/fnl/formedit/slurp.fnl b/fnl/formedit/slurp.fnl index 73eaea4..2bc3160 100644 --- a/fnl/formedit/slurp.fnl +++ b/fnl/formedit/slurp.fnl @@ -16,8 +16,10 @@ (fn backward [] (let [form (find.form) [row col] [(form:start)] + type (form:type) + offset (. find.insert-offset type) + col (+ col offset) sibling (form:prev_sibling) - col (+ col 1) sibling-text (ts.get_node_text sibling 0) sibling-text (.. sibling-text " ") [sibling-row-start sibling-col-start sibling-row-end sibling-col-end] [(sibling:range)]] diff --git a/fnl/spec/slurp_spec.fnl b/fnl/spec/slurp_spec.fnl index e800664..2c6f62e 100644 --- a/fnl/spec/slurp_spec.fnl +++ b/fnl/spec/slurp_spec.fnl @@ -18,7 +18,12 @@ (fn [] (h.setup {:content "((1) (+ 2 3))" :cursor [1 1]}) (h.feedkeys forward-keymap) - (h.expect {:content "((1 (+ 2 3)))" :cursor [1 1]}))))) + (h.expect {:content "((1 (+ 2 3)))" :cursor [1 1]}))) + (it :set + (fn [] + (h.setup {:content "(#{1} 2)" :cursor [1 1]}) + (h.feedkeys forward-keymap) + (h.expect {:content "(#{1 2})" :cursor [1 1]}))))) (describe "slurp backwards" @@ -34,4 +39,9 @@ (fn [] (h.setup {:content "((1) (+ 2 3))" :cursor [1 5]}) (h.feedkeys backward-keymap) - (h.expect {:content "(((1) + 2 3))" :cursor [1 5]}))))) + (h.expect {:content "(((1) + 2 3))" :cursor [1 5]}))) + (it :set + (fn [] + (h.setup {:content "(1 #{2})" :cursor [1 3]}) + (h.feedkeys backward-keymap) + (h.expect {:content "(#{1 2})" :cursor [1 3]}))))) diff --git a/lua/formedit/slurp.lua b/lua/formedit/slurp.lua index 944268c..6a5ea9d 100644 --- a/lua/formedit/slurp.lua +++ b/lua/formedit/slurp.lua @@ -23,8 +23,10 @@ local function backward() local _let_3_ = {form:start()} local row = _let_3_[1] local col = _let_3_[2] + local type = form:type() + local offset = (find["insert-offset"])[type] + local col0 = (col + offset) local sibling = form:prev_sibling() - local col0 = (col + 1) local sibling_text = ts.get_node_text(sibling, 0) local sibling_text0 = (sibling_text .. " ") local _let_4_ = {sibling:range()} diff --git a/lua/spec/slurp_spec.lua b/lua/spec/slurp_spec.lua index a7e946a..ef0eb9b 100644 --- a/lua/spec/slurp_spec.lua +++ b/lua/spec/slurp_spec.lua @@ -23,25 +23,37 @@ local function _2_() h.feedkeys(forward_keymap) return h.expect({content = "((1 (+ 2 3)))", cursor = {1, 1}}) end - return it("form", _5_) + it("form", _5_) + local function _6_() + h.setup({content = "(#{1} 2)", cursor = {1, 1}}) + h.feedkeys(forward_keymap) + return h.expect({content = "(#{1 2})", cursor = {1, 1}}) + end + return it("set", _6_) end describe("slurp forward", _2_) -local function _6_() - local function _7_() +local function _7_() + local function _8_() return vim.keymap.set("n", backward_keymap, slurp.backward) end - before_each(_7_) - local function _8_() + before_each(_8_) + local function _9_() h.setup({content = "(1 (2))", cursor = {1, 3}}) h.feedkeys(backward_keymap) return h.expect({content = "((1 2))", cursor = {1, 3}}) end - it("element", _8_) - local function _9_() + it("element", _9_) + local function _10_() h.setup({content = "((1) (+ 2 3))", cursor = {1, 5}}) h.feedkeys(backward_keymap) return h.expect({content = "(((1) + 2 3))", cursor = {1, 5}}) end - return it("form", _9_) + it("form", _10_) + local function _11_() + h.setup({content = "(1 #{2})", cursor = {1, 3}}) + h.feedkeys(backward_keymap) + return h.expect({content = "(#{1 2})", cursor = {1, 3}}) + end + return it("set", _11_) end -return describe("slurp backwards", _6_) +return describe("slurp backwards", _7_)