Skip to content

Commit a808fe0

Browse files
authored
Merge pull request #773 from seamusriordan/completion-parse-guard
Completion parse guards
2 parents 9fa07bb + 8761943 commit a808fe0

2 files changed

Lines changed: 44 additions & 38 deletions

File tree

fnl/conjure/tree-sitter-completions.fnl

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@
1212

1313
(fn build-completion-query [ts-lang cmpl-resource]
1414
(let [query-path (string.format symbol-query-path-template cmpl-resource)
15-
query-text (res.get-resource-contents query-path) ]
16-
(if query-text
15+
query-text (res.get-resource-contents query-path)
16+
lang-avail (pcall vim.treesitter.language.inspect ts-lang)]
17+
(if (and query-text lang-avail)
1718
(vim.treesitter.query.parse ts-lang query-text)
1819
nil)))
1920

@@ -83,18 +84,18 @@
8384
;; To avoid getting an invalid node when calling M.get-completions-at-cursor, ensure
8485
;; that the buffer is parsed.
8586
;; See the note for `:he treesitter.get_node` and `:he languagetree`.
86-
(ts.parse!)
87-
(let [buffer (vim.api.nvim_get_current_buf)
88-
cursor-node (vim.treesitter.get_node)
89-
(row _) (unpack (vim.api.nvim_win_get_cursor 0))
90-
scope-captures (query:iter_captures (cursor-node:root) buffer 0 row)
91-
scopes (extract-scopes query scope-captures)
92-
captures (query:iter_captures (cursor-node:root) buffer 0 row)
93-
results []]
94-
95-
(each [id n meta captures]
96-
(let [captured-label (. query.captures id)]
97-
(if (= :global.define captured-label)
87+
(if (not= nil (ts.parse!))
88+
(let [buffer (vim.api.nvim_get_current_buf)
89+
cursor-node (vim.treesitter.get_node)
90+
(row _) (unpack (vim.api.nvim_win_get_cursor 0))
91+
scope-captures (query:iter_captures (cursor-node:root) buffer 0 row)
92+
scopes (extract-scopes query scope-captures)
93+
captures (query:iter_captures (cursor-node:root) buffer 0 row)
94+
results []]
95+
96+
(each [id n meta captures]
97+
(let [captured-label (. query.captures id)]
98+
(if (= :global.define captured-label)
9899
(table.insert results (get-node-text n buffer meta))
99100

100101
(and (= :local.bind captured-label)
@@ -107,7 +108,8 @@
107108
(is-in-scope cursor-node (get-nth-scope-parent 2 n scopes)))
108109
(table.insert results (get-node-text n buffer meta)))))
109110

110-
(util.ordered-distinct results)))
111+
(util.ordered-distinct results))
112+
[]))
111113

112114
(fn M.get-completions-at-cursor [ts-lang cmpl-resource]
113115
"Use tree-sitter query to find completions in scope at cursor

lua/conjure/tree-sitter-completions.lua

Lines changed: 27 additions & 23 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)