|
15 | 15 | (def buf-suffix ".lua")
|
16 | 16 | (def comment-prefix "-- ")
|
17 | 17 |
|
18 |
| -(config.merge |
| 18 | +(config.merge |
19 | 19 | {:client
|
20 | 20 | {:lua
|
21 | 21 | {:neovim
|
|
48 | 48 |
|
49 | 49 | (defn- display [out ret err]
|
50 | 50 | (let [outs (->> (str.split (or out "") "\n")
|
51 |
| - (a.filter #(~= "" $1)) |
52 |
| - (a.map #(.. comment-prefix "(out) " $1))) |
| 51 | + (a.filter #(~= "" $1)) |
| 52 | + (a.map #(.. comment-prefix "(out) " $1))) |
53 | 53 | errs (->> (str.split (or err "") "\n")
|
54 |
| - (a.filter #(~= "" $1)) |
55 |
| - (a.map #(.. comment-prefix "(err) " $1)))] |
| 54 | + (a.filter #(~= "" $1)) |
| 55 | + (a.map #(.. comment-prefix "(err) " $1)))] |
56 | 56 | (log.append outs)
|
57 | 57 | (log.append errs)
|
58 |
| - (log.append ["return"]) ;; add this new line so that syntax-highlighting and other plugins maybe happier |
59 |
| - (log.append (str.split (vim.inspect ret) "\n")))) |
| 58 | + (log.append (str.split (.. "res = " (vim.inspect ret)) "\n")))) |
60 | 59 |
|
61 | 60 | (defn- lua-compile [opts]
|
62 | 61 | (if (= opts.origin "file")
|
|
66 | 65 |
|
67 | 66 | (defn default-env []
|
68 | 67 | (let [base (setmetatable {:REDIRECTED-OUTPUT ""
|
69 |
| - :io (setmetatable {} {:__index _G.io})} |
| 68 | + :io (setmetatable {} {:__index _G.io})} |
70 | 69 | {:__index _G})
|
71 |
| - print-redirected |
72 |
| - (fn [...] |
| 70 | + print-redirected |
| 71 | + (fn [...] |
73 | 72 | (tset base :REDIRECTED-OUTPUT
|
74 |
| - (.. base.REDIRECTED-OUTPUT (str.join "\t" [...]) "\n"))) |
75 |
| - io-write-redirected |
76 |
| - (fn [...] |
| 73 | + (.. base.REDIRECTED-OUTPUT (str.join "\t" [...]) "\n"))) |
| 74 | + io-write-redirected |
| 75 | + (fn [...] |
77 | 76 | (tset base :REDIRECTED-OUTPUT
|
78 |
| - (.. base.REDIRECTED-OUTPUT (str.join [...])))) |
| 77 | + (.. base.REDIRECTED-OUTPUT (str.join [...])))) |
79 | 78 | io-read-redirected
|
80 | 79 | (fn []
|
81 | 80 | (.. (or (extract.prompt "Input required: ") "") "\n"))]
|
82 | 81 | (tset base :print print-redirected)
|
83 | 82 | (tset base.io :write io-write-redirected)
|
84 | 83 | (tset base.io :read io-read-redirected)
|
85 | 84 | base))
|
86 |
| - |
| 85 | + |
87 | 86 | (defn- pcall-default [f]
|
88 | 87 | (let [env (default-env)]
|
89 | 88 | (setfenv f env)
|
90 | 89 | (let [(status ret) (pcall f)]
|
91 | 90 | (values status ret env.REDIRECTED-OUTPUT))))
|
92 |
| - |
| 91 | + |
93 | 92 | ;; this function is ugly due to the imperative interface of debug.getlocal
|
94 | 93 | (defn- pcall-persistent-debug [file f]
|
95 | 94 | (tset repls file (or (. repls file) {}))
|
96 | 95 | (tset (. repls file) :env (or (. repls file :env) (default-env)))
|
97 | 96 | (tset (. repls file :env) :REDIRECTED-OUTPUT "") ;; Clear last output
|
98 | 97 | (setfenv f (. repls file :env))
|
99 |
| - (let [collect-env |
100 |
| - (fn [_ _] |
101 |
| - (debug.sethook) |
102 |
| - (var i 1) |
103 |
| - (var n true) |
104 |
| - (var v nil) |
105 |
| - (while n |
106 |
| - (set (n v) (debug.getlocal 2 i)) |
107 |
| - (if n |
108 |
| - (do |
109 |
| - (tset (. repls file :env) n v) |
110 |
| - (set i (+ i 1))))))] |
| 98 | + (let [collect-env |
| 99 | + (fn [_ _] |
| 100 | + (debug.sethook) |
| 101 | + (var i 1) |
| 102 | + (var n true) |
| 103 | + (var v nil) |
| 104 | + (while n |
| 105 | + (set (n v) (debug.getlocal 2 i)) |
| 106 | + (if n |
| 107 | + (do |
| 108 | + (tset (. repls file :env) n v) |
| 109 | + (set i (+ i 1))))))] |
111 | 110 | (debug.sethook collect-env :r)
|
112 | 111 | (let [(status ret) (pcall f)]
|
113 | 112 | (values status ret (. repls file :env :REDIRECTED-OUTPUT)))))
|
114 |
| - |
| 113 | + |
115 | 114 | (defn- lua-eval [opts]
|
116 | 115 | (let [(f e) (lua-compile opts)]
|
117 | 116 | (if f
|
118 |
| - (let [pcall-custom (match (cfg [:persistent]) |
119 |
| - :debug (partial pcall-persistent-debug opts.file-path) |
120 |
| - _ pcall-default) |
121 |
| - (status ret out) (pcall-custom f)] |
122 |
| - (if status |
123 |
| - (values out ret "") |
124 |
| - (values out nil (.. "Execution error: " ret)))) |
125 |
| - (values "" nil (.. "Compilation error: " e))))) |
| 117 | + (let [pcall-custom (match (cfg [:persistent]) |
| 118 | + :debug (partial pcall-persistent-debug opts.file-path) |
| 119 | + _ pcall-default) |
| 120 | + (status ret out) (pcall-custom f)] |
| 121 | + (if status |
| 122 | + (values out ret "") |
| 123 | + (values out nil (.. "Execution error: " ret)))) |
| 124 | + (values "" nil (.. "Compilation error: " e))))) |
126 | 125 |
|
127 | 126 | (defn eval-str [opts]
|
128 | 127 | (let [(out ret err) (lua-eval opts)]
|
129 |
| - (display out ret err) |
130 |
| - (when opts.on-result |
131 |
| - (opts.on-result (vim.inspect ret))))) |
| 128 | + (display out ret err) |
| 129 | + (when opts.on-result |
| 130 | + (opts.on-result (vim.inspect ret))))) |
132 | 131 |
|
133 |
| -(defn eval-file [opts] |
| 132 | +(defn eval-file [opts] |
134 | 133 | (reset-env opts.file-path)
|
135 | 134 | (let [(out ret err) (lua-eval opts)]
|
136 |
| - (display out ret err) |
137 |
| - (when opts.on-result |
138 |
| - (opts.on-result (vim.inspect ret))))) |
| 135 | + (display out ret err) |
| 136 | + (when opts.on-result |
| 137 | + (opts.on-result (vim.inspect ret))))) |
0 commit comments