Skip to content

Commit 0de1a9f

Browse files
authored
Merge pull request #715 from russtoku/improve-lua-client
Improve Lua client and scripts/test
2 parents f40eb99 + ffd2190 commit 0de1a9f

File tree

3 files changed

+83
-79
lines changed

3 files changed

+83
-79
lines changed

fnl/conjure/client/lua/neovim.fnl

Lines changed: 45 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,32 @@
1-
(local {: autoload} (require :conjure.nfnl.module))
2-
(local a (autoload :conjure.aniseed.core))
3-
(local str (autoload :conjure.aniseed.string))
1+
(local {: autoload : define} (require :conjure.nfnl.module))
2+
(local core (autoload :conjure.nfnl.core))
3+
(local str (autoload :conjure.nfnl.string))
44
(local config (autoload :conjure.config))
55
(local mapping (autoload :conjure.mapping))
66
(local log (autoload :conjure.log))
77
(local fs (autoload :conjure.fs))
88
(local extract (autoload :conjure.extract))
99

10-
(local buf-suffix ".lua")
11-
(local comment-prefix "-- ")
10+
(local M
11+
(define :conjure.client.lua.neovim
12+
{:buf-suffix ".lua"
13+
:comment-prefix "-- "}))
14+
15+
; moved the set forms into the define like client.fennel.nfnl does.
16+
; (set M.buf-suffix ".lua")
17+
; (set M.comment-prefix "-- ")
1218

1319
; These types of nodes are roughly equivalent to Lisp forms. This should make
1420
; it more intuitive when using <localleader>ee to evaluate the "current form".
15-
(fn form-node? [node]
21+
(fn M.form-node? [node]
1622
(or (= "function_call" (node:type))
1723
(= "function_definition" (node:type))
1824
(= "function_declaration" (node:type))
1925
(= "local_declaration" (node:type))
2026
(= "variable_declaration" (node:type))
21-
(= "if_statement" (node:type))))
27+
(= "if_statement" (node:type))
28+
(= "for_statement" (node:type))
29+
(= "assignment_statement" (node:type))))
2230

2331
(config.merge
2432
{:client
@@ -35,37 +43,39 @@
3543
:reset_all_envs "ra"}}}}}))
3644

3745
(local cfg (config.get-in-fn [:client :lua :neovim]))
38-
(local repls {})
46+
(set M.repls (or M.repls {}))
3947

4048
;; Two following functions are modified client/fennel/aniseed.fnl
41-
(fn reset-env [filename]
49+
(fn M.reset-env [filename]
4250
(let [filename (or filename (fs.localise-path (extract.file-path)))]
43-
(tset repls filename nil)
44-
(log.append [(.. comment-prefix "Reset environment for " filename)] {:break? true})))
51+
(tset M.repls filename nil)
52+
(log.append [(.. M.comment-prefix "Reset environment for " filename)] {:break? true})))
4553

46-
(fn reset-all-envs []
47-
(a.run!
54+
(fn M.reset-all-envs []
55+
(core.run!
4856
(fn [filename]
49-
(tset repls filename nil))
50-
(a.keys repls))
51-
(log.append [(.. comment-prefix "Reset all environments")] {:break? true}))
57+
(tset M.repls filename nil))
58+
(core.keys M.repls))
59+
(log.append [(.. M.comment-prefix "Reset all environments")] {:break? true}))
5260

53-
(fn on-filetype []
61+
(fn M.on-filetype []
5462
(mapping.buf
5563
:LuaResetEnv (cfg [:mapping :reset_env])
56-
#(reset-env))
64+
#(M.reset-env)
65+
{:desc "Reset the Lua REPL environment"})
5766

5867
(mapping.buf
5968
:LuaResetAllEnvs (cfg [:mapping :reset_all_envs])
60-
#(reset-all-envs)))
69+
#(M.reset-all-envs)
70+
{:desc "Reset all Lua REPL environments"}))
6171

6272
(fn display [out ret err]
6373
(let [outs (->> (str.split (or out "") "\n")
64-
(a.filter #(~= "" $1))
65-
(a.map #(.. comment-prefix "(out) " $1)))
74+
(core.filter #(~= "" $1))
75+
(core.map #(.. M.comment-prefix "(out) " $1)))
6676
errs (->> (str.split (or err "") "\n")
67-
(a.filter #(~= "" $1))
68-
(a.map #(.. comment-prefix "(err) " $1)))]
77+
(core.filter #(~= "" $1))
78+
(core.map #(.. M.comment-prefix "(err) " $1)))]
6979
(log.append outs)
7080
(log.append errs)
7181
(log.append (str.split (.. "res = " (vim.inspect ret)) "\n"))))
@@ -76,7 +86,7 @@
7686
(let [(f e) (load (.. "return (" opts.code "\n)"))]
7787
(if f (values f e) (load opts.code)))))
7888

79-
(fn default-env []
89+
(fn M.default-env []
8090
(let [base (setmetatable {:REDIRECTED-OUTPUT ""
8191
:io (setmetatable {} {:__index _G.io})}
8292
{:__index _G})
@@ -97,17 +107,17 @@
97107
base))
98108

99109
(fn pcall-default [f]
100-
(let [env (default-env)]
110+
(let [env (M.default-env)]
101111
(setfenv f env)
102112
(let [(status ret) (pcall f)]
103113
(values status ret env.REDIRECTED-OUTPUT))))
104114

105115
;; this function is ugly due to the imperative interface of debug.getlocal
106116
(fn pcall-persistent-debug [file f]
107-
(tset repls file (or (. repls file) {}))
108-
(tset (. repls file) :env (or (. repls file :env) (default-env)))
109-
(tset (. repls file :env) :REDIRECTED-OUTPUT "") ;; Clear last output
110-
(setfenv f (. repls file :env))
117+
(tset M.repls file (or (. M.repls file) {}))
118+
(tset (. M.repls file) :env (or (. M.repls file :env) (M.default-env)))
119+
(tset (. M.repls file :env) :REDIRECTED-OUTPUT "") ;; Clear last output
120+
(setfenv f (. M.repls file :env))
111121
(let [collect-env
112122
(fn [_ _]
113123
(debug.sethook)
@@ -118,11 +128,11 @@
118128
(set (n v) (debug.getlocal 2 i))
119129
(if n
120130
(do
121-
(tset (. repls file :env) n v)
131+
(tset (. M.repls file :env) n v)
122132
(set i (+ i 1))))))]
123133
(debug.sethook collect-env :r)
124134
(let [(status ret) (pcall f)]
125-
(values status ret (. repls file :env :REDIRECTED-OUTPUT)))))
135+
(values status ret (. M.repls file :env :REDIRECTED-OUTPUT)))))
126136

127137
(fn lua-eval [opts]
128138
(let [(f e) (lua-compile opts)]
@@ -136,25 +146,17 @@
136146
(values out nil (.. "Execution error: " ret))))
137147
(values "" nil (.. "Compilation error: " e)))))
138148

139-
(fn eval-str [opts]
149+
(fn M.eval-str [opts]
140150
(let [(out ret err) (lua-eval opts)]
141151
(display out ret err)
142152
(when opts.on-result
143153
(opts.on-result (vim.inspect ret)))))
144154

145-
(fn eval-file [opts]
146-
(reset-env opts.file-path)
155+
(fn M.eval-file [opts]
156+
(M.reset-env opts.file-path)
147157
(let [(out ret err) (lua-eval opts)]
148158
(display out ret err)
149159
(when opts.on-result
150160
(opts.on-result (vim.inspect ret)))))
151161

152-
{: buf-suffix
153-
: comment-prefix
154-
: form-node?
155-
: reset-env
156-
: reset-all-envs
157-
: on-filetype
158-
: default-env
159-
: eval-str
160-
: eval-file}
162+
M

lua/conjure/client/lua/neovim.lua

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

scripts/test

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#!/usr/bin/env bash
22

33
XDG_CONFIG_HOME=$(pwd)/.test
4-
export XDG_CONFIG_HOME
4+
XDG_DATA_HOME=$(pwd)/.test/data
5+
XDG_STATE_HOME=$(pwd)/.test/state
6+
export XDG_CONFIG_HOME XDG_DATA_HOME XDG_STATE_HOME
57

68
nvim --headless -c 'PlenaryBustedDirectory lua/conjure-spec'

0 commit comments

Comments
 (0)