Skip to content

Commit

Permalink
Get form
Browse files Browse the repository at this point in the history
  • Loading branch information
grierson committed Aug 12, 2023
1 parent 557513e commit 664364c
Show file tree
Hide file tree
Showing 9 changed files with 322 additions and 46 deletions.
8 changes: 4 additions & 4 deletions fnl/formedit/tree.fnl
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
:set_lit true
:anon_fn_lit true})

(fn form? [node]
(fn get-form [node]
(if (. forms (node:type))
node
(let [child (node:named_child 0)]
(when child (form? child)))))
(let [parent (node:parent)]
(when parent (get-form parent)))))

{: form?}
{: get-form}
2 changes: 1 addition & 1 deletion fnl/spec/nfnl/helper.fnl → fnl/spec/helper.fnl
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@
(when cursor
(assert.are.same cursor (vim.api.nvim_win_get_cursor 0))))

{: setup : expect : feedkeys}
{: setup : expect}
14 changes: 0 additions & 14 deletions fnl/spec/nfnl/tree/tree_spec.fnl

This file was deleted.

136 changes: 136 additions & 0 deletions fnl/spec/tree/tree_spec.fnl
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
(local {: describe : it} (require :plenary.busted))
(local h (require :spec.helper))
(local tree (require :formedit.tree))
(local assert (require :luassert.assert))
(local ts (require :nvim-treesitter.ts_utils))

(describe "No form return nil"
(fn []
(it "cursor start of form"
(fn []
(h.setup {:content " " :cursor [1 1]})
(let [node (ts.get_node_at_cursor)
actual (tree.get-form node)]
(assert.falsy actual))))))

(describe :List
(let [form-type :list_lit]
(fn []
(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)]
(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)]
(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)]
(assert.equals form-type (actual:type))))))))

(describe :Vector
(let [form-type :vec_lit]
(fn []
(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)]
(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)]
(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)]
(assert.equals form-type (actual:type))))))))

(describe :Map
(let [form-type :map_lit]
(fn []
(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)]
(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)]
(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)]
(assert.equals form-type (actual:type))))))))

(describe :Set
(let [form-type :set_lit]
(fn []
(it "cursor on #"
(fn []
(h.setup {:content "#{1}" :cursor [1 1]})
(let [node (ts.get_node_at_cursor)
actual (tree.get-form node)]
(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)]
(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)]
(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)]
(assert.equals form-type (actual:type))))))))

(describe "Anonymous function"
(let [form-type :anon_fn_lit]
(fn []
(it "cursor on #"
(fn []
(h.setup {:content "#(1)" :cursor [1 1]})
(let [node (ts.get_node_at_cursor)
actual (tree.get-form node)]
(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)]
(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)]
(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)]
(assert.equals form-type (actual:type))))))))
4 changes: 2 additions & 2 deletions justfile
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ focus feature: prepare
--headless \
--noplugin \
-u lua/spec/init.lua \
-c "PlenaryBustedDirectory lua/spec/nfnl/api/{{feature}} { minimal_init='lua/spec/init.lua', sequential=true }"
-c "PlenaryBustedDirectory lua/spec/{{feature}} { minimal_init='lua/spec/init.lua', sequential=true }"

watch feature:
fswatch -o lua/formedit/api/{{feature}}.lua lua/spec/nfnl/api/{{feature}}/{{feature}}_spec.lua | xargs -n1 -I{} just focus {{feature}}
fswatch -o lua/formedit/{{feature}}.lua lua/spec/{{feature}}/{{feature}}_spec.lua | xargs -n1 -I{} just focus {{feature}}

10 changes: 5 additions & 5 deletions lua/formedit/tree.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/spec/nfnl/helper.lua → lua/spec/helper.lua

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

18 changes: 0 additions & 18 deletions lua/spec/nfnl/tree/tree_spec.lua

This file was deleted.

Loading

0 comments on commit 664364c

Please sign in to comment.