Skip to content

Commit

Permalink
barf
Browse files Browse the repository at this point in the history
  • Loading branch information
grierson committed Aug 16, 2023
1 parent 0f87914 commit f6418bf
Show file tree
Hide file tree
Showing 7 changed files with 165 additions and 4 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
# Form edit

Paredit in Fennel for Clojure
Paredit in Fennel for Clojure using Treesitter

## 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
- Slurp (Forward + Backwards)
- Bring in element/form into your form
- Raise
- Remove parent form and replace with current form
Expand Down
27 changes: 27 additions & 0 deletions fnl/formedit/barf.fnl
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
(local find (require :formedit.find))
(local ts (require :vim.treesitter))

(fn forward []
(let [form (find.form)
last (find.last form)
[row col] [(form:end_)]
[last-row-start last-col-start last-row-end last-col-end] [(last:range)]
text (ts.get_node_text last 0)
text (.. " " text)]
(vim.api.nvim_buf_set_text 0 row col row col [text])
(vim.api.nvim_buf_set_text 0 last-row-start (- last-col-start 1)
last-row-end last-col-end [""])))

(fn backward []
(let [form (find.form)
first (find.first form)
text (ts.get_node_text first 0)
text (.. text " ")
[row-start col-start row-end col-end] [(first:range)]
_ (vim.api.nvim_buf_set_text 0 row-start col-start row-end
(+ col-end 1) [""])
nform (find.form)
[nrow-start ncol-start] [(nform:start)]]
(vim.api.nvim_buf_set_text 0 nrow-start ncol-start nrow-start ncol-start [text])))

{: forward : backward}
9 changes: 8 additions & 1 deletion fnl/formedit/find.fnl
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,13 @@
(when (node:parent)
(find-root-form (node:parent))))))

(fn first [form]
(form:named_child 0))

(fn last [form]
(let [count (form:named_child_count)]
(form:child count)))

;; Find node
(fn form []
(let [node (ts.get_node_at_cursor)]
Expand All @@ -42,4 +49,4 @@
(let [node (ts.get_node_at_cursor)]
(find-root-form node)))

{: form : root : insert-offset : start-offset}
{: form : root : insert-offset : start-offset : first : last}
36 changes: 36 additions & 0 deletions fnl/spec/barf_spec.fnl
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
(local {: describe : it : before_each} (require :plenary.busted))
(local h (require :spec.helper))
(local barf (require :formedit.barf))

(local forward-keymap "<)")
(local backward-keymap ">(")

(describe "barf forward"
(fn []
(before_each (fn []
(vim.keymap.set :n forward-keymap barf.forward)))
(it :element
(fn []
(h.setup {:content "((1 2))" :cursor [1 1]})
(h.feedkeys forward-keymap)
(h.expect {:content "((1) 2)" :cursor [1 1]})))
(it :form
(fn []
(h.setup {:content "(((1) (2)))" :cursor [1 1]})
(h.feedkeys forward-keymap)
(h.expect {:content "(((1)) (2))" :cursor [1 1]})))))

(describe "barf backwards"
(fn []
(before_each (fn []
(vim.keymap.set :n backward-keymap barf.backward)))
(it :element
(fn []
(h.setup {:content "((1 2))" :cursor [1 1]})
(h.feedkeys backward-keymap)
(h.expect {:content "(1 (2))" :cursor [1 1]})))
(it :form
(fn []
(h.setup {:content "(((1) 2))" :cursor [1 1]})
(h.feedkeys backward-keymap)
(h.expect {:content "((1) (2))" :cursor [1 1]})))))
37 changes: 37 additions & 0 deletions lua/formedit/barf.lua

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 8 additions & 1 deletion lua/formedit/find.lua

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

47 changes: 47 additions & 0 deletions lua/spec/barf_spec.lua

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit f6418bf

Please sign in to comment.