Skip to content

Commit

Permalink
inner select
Browse files Browse the repository at this point in the history
  • Loading branch information
grierson committed Aug 17, 2023
1 parent 4417205 commit 85758d2
Show file tree
Hide file tree
Showing 12 changed files with 130 additions and 29 deletions.
14 changes: 2 additions & 12 deletions fnl/formedit/find.fnl
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,7 @@
:set_lit true
:anon_fn_lit true})

(local start-offset {:list_lit 0
:vec_lit 0
:map_lit 0
:set_lit 1
:anon_fn_lit 1})

(local insert-offset {:list_lit 1
:vec_lit 1
:map_lit 1
:set_lit 2
:anon_fn_lit 2})
(local offset {:list_lit 1 :vec_lit 1 :map_lit 1 :set_lit 2 :anon_fn_lit 2})

;; Tree search
(fn find-current-form [node]
Expand Down Expand Up @@ -49,4 +39,4 @@
(let [node (ts.get_node_at_cursor)]
(find-root-form node)))

{: form : root : insert-offset : start-offset : first : last}
{: form : root : offset : first : last}
4 changes: 2 additions & 2 deletions fnl/formedit/insertion.fnl
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

(fn head []
(let [form (find.form)
insert-offset (. find.insert-offset (form:type))
offset (. find.offset (form:type))
[start-row start-col] [(form:start)]
start-col (+ start-col insert-offset)]
start-col (+ start-col offset)]
(vim.api.nvim_buf_set_text 0 start-row start-col start-row start-col [" "])
(vim.api.nvim_win_set_cursor 0 [(+ start-row 1) (+ start-col 1)])
(vim.api.nvim_feedkeys :i :n true)))
Expand Down
18 changes: 17 additions & 1 deletion fnl/formedit/select.fnl
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,20 @@
(let [form (find.root)]
(ts.update_selection 0 form)))

{: form : root}
(fn inner-select [form]
(let [[start-row start-col end-row end-col] [(form:range)]
type (form:type)
offset (. find.offset type)]
(vim.api.nvim_win_set_cursor 0 [(+ start-row 1) (+ start-col offset)])
(vim.api.nvim_command "normal! v")
(vim.api.nvim_win_set_cursor 0 [(+ end-row 1) (- end-col 2)])))

(fn inner []
(let [form (find.form)]
(inner-select form)))

(fn inner-root []
(let [form (find.root)]
(inner-select form)))

{: form : root : inner : inner-root}
2 changes: 1 addition & 1 deletion fnl/formedit/slurp.fnl
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
(let [form (find.form)
[row col] [(form:start)]
type (form:type)
offset (. find.insert-offset type)
offset (. find.offset type)
col (+ col offset)
sibling (form:prev_sibling)
sibling-text (ts.get_node_text sibling 0)
Expand Down
6 changes: 2 additions & 4 deletions fnl/formedit/wrap.fnl
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,11 @@

(fn head []
(let [form (find.form)
insert-offset (. find.insert-offset (form:type))
offset (. find.offset (form:type))
[start-row start-col end-row end-col] [(form:range)]]
(vim.api.nvim_buf_set_text 0 end-row end-col end-row end-col [")"])
(vim.api.nvim_buf_set_text 0 start-row start-col start-row start-col ["( "])
(vim.api.nvim_win_set_cursor 0
[(+ start-row 1)
(+ start-col insert-offset 1)])
(vim.api.nvim_win_set_cursor 0 [(+ start-row 1) (+ start-col offset 1)])
(vim.api.nvim_feedkeys :i :n true)))

{: head}
33 changes: 33 additions & 0 deletions fnl/spec/delete_inner_spec.fnl
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
(local {: describe : it : before_each} (require :plenary.busted))
(local h (require :spec.helper))
(local select (require :formedit.select))

(describe "delete inner form"
(fn []
(before_each (fn []
(vim.keymap.set :o :if select.inner)))
(it :list
(fn []
(h.setup {:content "(1)" :cursor [1 0]})
(h.feedkeys :dif)
(h.expect {:content "()" :cursor [1 1]})))
(it :set
(fn []
(h.setup {:content "#{1}" :cursor [1 0]})
(h.feedkeys :dif)
(h.expect {:content "#{}" :cursor [1 2]})))))

(describe "delete inner root form"
(fn []
(before_each (fn []
(vim.keymap.set :o :iF select.inner-root)))
(it "within first node"
(fn []
(h.setup {:content "([1] 2)" :cursor [1 1]})
(h.feedkeys :diF)
(h.expect {:content "()" :cursor [1 1]})))
(it "within second node"
(fn []
(h.setup {:content "(1 [2])" :cursor [1 3]})
(h.feedkeys :diF)
(h.expect {:content "()" :cursor [1 1]})))))
5 changes: 2 additions & 3 deletions lua/formedit/find.lua

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

4 changes: 2 additions & 2 deletions lua/formedit/insertion.lua

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

22 changes: 21 additions & 1 deletion lua/formedit/select.lua

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

2 changes: 1 addition & 1 deletion lua/formedit/slurp.lua

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

4 changes: 2 additions & 2 deletions lua/formedit/wrap.lua

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

45 changes: 45 additions & 0 deletions lua/spec/delete_inner_spec.lua

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

0 comments on commit 85758d2

Please sign in to comment.