|
119 | 119 | completions (keep (fn [entry]
|
120 | 120 | (match alias->ns ns->alias query entry))
|
121 | 121 | svs)
|
122 |
| - completions (mapv (fn [[namespace name]] |
123 |
| - {"candidate" (str name) "ns" (str namespace) #_"type" #_"function"}) |
124 |
| - completions)] |
| 122 | + completions (->> (map (fn [[namespace name]] |
| 123 | + {"candidate" (str name) "ns" (str namespace) #_"type" #_"function"}) |
| 124 | + completions) |
| 125 | + set)] |
125 | 126 | (when debug (prn "completions" completions))
|
126 | 127 | (utils/send o (utils/response-for msg {"completions" completions
|
127 | 128 | "status" #{"done"}}) opts))
|
|
141 | 142 | (utils/send os (utils/response-for msg {"sessions" sessions
|
142 | 143 | "status" #{"done"}}) opts)))
|
143 | 144 |
|
144 |
| -(defn eldoc [ctx msg os {:keys [debug] :as opts}] |
| 145 | +(defn lookup [ctx msg os mapping-type {:keys [debug] :as opts}] |
145 | 146 | (let [ns-str (:ns msg)
|
146 |
| - sym-str (:sym msg) |
| 147 | + sym-str (or (:sym msg) (:symbol msg)) |
| 148 | + sym-str-ns-striped (last (str/split sym-str #"\/")) |
147 | 149 | sci-ns (when ns-str
|
148 | 150 | (sci-utils/namespace-object (:env ctx) (symbol ns-str) nil false))]
|
149 | 151 | (try
|
150 | 152 | (sci/binding [vars/current-ns (or sci-ns @vars/current-ns)]
|
151 | 153 | (let [m (sci/eval-string* ctx (format "
|
152 |
| -(when-let [v (ns-resolve '%s '%s)] |
153 |
| - (let [m (meta v)] |
154 |
| - (assoc m :arglists (:arglists m) |
155 |
| - :doc (:doc m) |
156 |
| - :name (:name m) |
157 |
| - :ns (some-> m :ns ns-name) |
158 |
| - :val @v)))" ns-str sym-str)) |
159 |
| - reply {"ns" (:ns m) |
160 |
| - "name" (:name m) |
161 |
| - "eldoc" (mapv #(mapv str %) (:arglists m)) |
162 |
| - "type" (cond |
163 |
| - (ifn? (:val m)) "function" |
164 |
| - :else "variable") |
165 |
| - "docstring" (:doc m) |
166 |
| - "status" #{"done"}}] |
| 154 | +(let [sym-ns-str '%s |
| 155 | + sym-str '%s |
| 156 | + ns-striped-sym-str '%s] |
| 157 | + (when-let [v (or (ns-resolve sym-ns-str sym-str) |
| 158 | + (ns-resolve sym-ns-str ns-striped-sym-str))] |
| 159 | + (let [m (meta v)] |
| 160 | + (assoc m :arglists (:arglists m) |
| 161 | + :doc (:doc m) |
| 162 | + :name (:name m) |
| 163 | + :ns (some-> m :ns ns-name) |
| 164 | + :val @v))))" ns-str sym-str sym-str-ns-striped)) |
| 165 | + arglists-vec (mapv #(mapv str %) (:arglists m)) |
| 166 | + reply (->> (case mapping-type |
| 167 | + :eldoc {"ns" (:ns m) |
| 168 | + "name" (:name m) |
| 169 | + "eldoc" arglists-vec |
| 170 | + "docstring" (:doc m) |
| 171 | + "type" (cond |
| 172 | + (ifn? (:val m)) "function" |
| 173 | + :else "variable") |
| 174 | + "status" #{"done"}} |
| 175 | + :lookup {"ns" (:ns m) |
| 176 | + "name" (:name m) |
| 177 | + "arglists-str" (str arglists-vec) |
| 178 | + "status" #{"done"} |
| 179 | + "doc" (:doc m)}) |
| 180 | + (remove #(nil? (second %))) |
| 181 | + (into {}))] |
167 | 182 | (utils/send os
|
168 | 183 | (utils/response-for msg reply) opts)))
|
169 | 184 | (catch Throwable e
|
170 | 185 | (when debug (println e))
|
171 |
| - (utils/send os (utils/response-for msg {"status" #{"done" "no-eldoc"}}) opts))))) |
| 186 | + (let [status (remove nil? #{"done" |
| 187 | + (when (= mapping-type :eldoc) "no-eldoc")})] |
| 188 | + (utils/send os (utils/response-for msg {"status" status}) opts)))))) |
172 | 189 |
|
173 | 190 | (defn read-msg [msg]
|
174 | 191 | (-> (zipmap (map keyword (keys msg))
|
|
207 | 224 | :complete (do
|
208 | 225 | (complete ctx os msg opts)
|
209 | 226 | (recur ctx is os id opts))
|
| 227 | + (:lookup :info) (do |
| 228 | + (lookup ctx msg os :lookup opts) |
| 229 | + (recur ctx is os id opts)) |
210 | 230 | :describe
|
211 | 231 | (do (utils/send os (utils/response-for
|
212 | 232 | msg
|
213 | 233 | (merge-with merge
|
214 | 234 | {"status" #{"done"}
|
215 | 235 | "ops" (zipmap #{"clone" "close" "eval" "load-file"
|
216 | 236 | "complete" "describe" "ls-sessions"
|
217 |
| - "eldoc"} |
| 237 | + "eldoc" "info" "lookup"} |
218 | 238 | (repeat {}))
|
219 | 239 | "versions" {"babashka.nrepl" babashka-nrepl-version}}
|
220 | 240 | (:describe opts))) opts)
|
221 | 241 | (recur ctx is os id opts))
|
222 | 242 | :ls-sessions (do (ls-sessions ctx msg os opts)
|
223 | 243 | (recur ctx is os id opts))
|
224 | 244 | :eldoc (do
|
225 |
| - (eldoc ctx msg os opts) |
| 245 | + (lookup ctx msg os :eldoc opts) |
226 | 246 | (recur ctx is os id opts))
|
227 | 247 | ;; fallback
|
228 | 248 | (do (when debug
|
|
0 commit comments