|
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)) |
4 | 4 | (local config (autoload :conjure.config)) |
5 | 5 | (local mapping (autoload :conjure.mapping)) |
6 | 6 | (local log (autoload :conjure.log)) |
7 | 7 | (local fs (autoload :conjure.fs)) |
8 | 8 | (local extract (autoload :conjure.extract)) |
9 | 9 |
|
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 "-- ") |
12 | 18 |
|
13 | 19 | ; These types of nodes are roughly equivalent to Lisp forms. This should make |
14 | 20 | ; it more intuitive when using <localleader>ee to evaluate the "current form". |
15 | | -(fn form-node? [node] |
| 21 | +(fn M.form-node? [node] |
16 | 22 | (or (= "function_call" (node:type)) |
17 | 23 | (= "function_definition" (node:type)) |
18 | 24 | (= "function_declaration" (node:type)) |
19 | 25 | (= "local_declaration" (node:type)) |
20 | 26 | (= "variable_declaration" (node:type)) |
21 | | - (= "if_statement" (node:type)))) |
| 27 | + (= "if_statement" (node:type)) |
| 28 | + (= "for_statement" (node:type)) |
| 29 | + (= "assignment_statement" (node:type)))) |
22 | 30 |
|
23 | 31 | (config.merge |
24 | 32 | {:client |
|
35 | 43 | :reset_all_envs "ra"}}}}})) |
36 | 44 |
|
37 | 45 | (local cfg (config.get-in-fn [:client :lua :neovim])) |
38 | | -(local repls {}) |
| 46 | +(set M.repls (or M.repls {})) |
39 | 47 |
|
40 | 48 | ;; Two following functions are modified client/fennel/aniseed.fnl |
41 | | -(fn reset-env [filename] |
| 49 | +(fn M.reset-env [filename] |
42 | 50 | (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}))) |
45 | 53 |
|
46 | | -(fn reset-all-envs [] |
47 | | - (a.run! |
| 54 | +(fn M.reset-all-envs [] |
| 55 | + (core.run! |
48 | 56 | (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})) |
52 | 60 |
|
53 | | -(fn on-filetype [] |
| 61 | +(fn M.on-filetype [] |
54 | 62 | (mapping.buf |
55 | 63 | :LuaResetEnv (cfg [:mapping :reset_env]) |
56 | | - #(reset-env)) |
| 64 | + #(M.reset-env) |
| 65 | + {:desc "Reset the Lua REPL environment"}) |
57 | 66 |
|
58 | 67 | (mapping.buf |
59 | 68 | :LuaResetAllEnvs (cfg [:mapping :reset_all_envs]) |
60 | | - #(reset-all-envs))) |
| 69 | + #(M.reset-all-envs) |
| 70 | + {:desc "Reset all Lua REPL environments"})) |
61 | 71 |
|
62 | 72 | (fn display [out ret err] |
63 | 73 | (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))) |
66 | 76 | 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)))] |
69 | 79 | (log.append outs) |
70 | 80 | (log.append errs) |
71 | 81 | (log.append (str.split (.. "res = " (vim.inspect ret)) "\n")))) |
|
76 | 86 | (let [(f e) (load (.. "return (" opts.code "\n)"))] |
77 | 87 | (if f (values f e) (load opts.code))))) |
78 | 88 |
|
79 | | -(fn default-env [] |
| 89 | +(fn M.default-env [] |
80 | 90 | (let [base (setmetatable {:REDIRECTED-OUTPUT "" |
81 | 91 | :io (setmetatable {} {:__index _G.io})} |
82 | 92 | {:__index _G}) |
|
97 | 107 | base)) |
98 | 108 |
|
99 | 109 | (fn pcall-default [f] |
100 | | - (let [env (default-env)] |
| 110 | + (let [env (M.default-env)] |
101 | 111 | (setfenv f env) |
102 | 112 | (let [(status ret) (pcall f)] |
103 | 113 | (values status ret env.REDIRECTED-OUTPUT)))) |
104 | 114 |
|
105 | 115 | ;; this function is ugly due to the imperative interface of debug.getlocal |
106 | 116 | (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)) |
111 | 121 | (let [collect-env |
112 | 122 | (fn [_ _] |
113 | 123 | (debug.sethook) |
|
118 | 128 | (set (n v) (debug.getlocal 2 i)) |
119 | 129 | (if n |
120 | 130 | (do |
121 | | - (tset (. repls file :env) n v) |
| 131 | + (tset (. M.repls file :env) n v) |
122 | 132 | (set i (+ i 1))))))] |
123 | 133 | (debug.sethook collect-env :r) |
124 | 134 | (let [(status ret) (pcall f)] |
125 | | - (values status ret (. repls file :env :REDIRECTED-OUTPUT))))) |
| 135 | + (values status ret (. M.repls file :env :REDIRECTED-OUTPUT))))) |
126 | 136 |
|
127 | 137 | (fn lua-eval [opts] |
128 | 138 | (let [(f e) (lua-compile opts)] |
|
136 | 146 | (values out nil (.. "Execution error: " ret)))) |
137 | 147 | (values "" nil (.. "Compilation error: " e))))) |
138 | 148 |
|
139 | | -(fn eval-str [opts] |
| 149 | +(fn M.eval-str [opts] |
140 | 150 | (let [(out ret err) (lua-eval opts)] |
141 | 151 | (display out ret err) |
142 | 152 | (when opts.on-result |
143 | 153 | (opts.on-result (vim.inspect ret))))) |
144 | 154 |
|
145 | | -(fn eval-file [opts] |
146 | | - (reset-env opts.file-path) |
| 155 | +(fn M.eval-file [opts] |
| 156 | + (M.reset-env opts.file-path) |
147 | 157 | (let [(out ret err) (lua-eval opts)] |
148 | 158 | (display out ret err) |
149 | 159 | (when opts.on-result |
150 | 160 | (opts.on-result (vim.inspect ret))))) |
151 | 161 |
|
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 |
0 commit comments