Skip to content

Commit

Permalink
feat: Add ns-create-interceptor
Browse files Browse the repository at this point in the history
  • Loading branch information
liquidz committed Jan 29, 2024
1 parent 0cae14e commit 0331cdb
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 2 deletions.
4 changes: 3 additions & 1 deletion src/elin/component/interceptor.clj
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
(:require
[com.stuartsierra.component :as component]
[elin.constant.interceptor :as e.c.interceptor]
[elin.interceptor.autocmd :as e.i.autocmd]
[elin.interceptor.connect :as e.i.connect]
[elin.interceptor.debug :as e.i.debug]
[elin.interceptor.nrepl :as e.i.nrepl]
Expand All @@ -18,7 +19,8 @@
e.i.connect/output-channel-interceptor
e.i.output/print-output-interceptor
e.i.nrepl/eval-ns-interceptor
e.i.nrepl/normalize-path-interceptor])
e.i.nrepl/normalize-path-interceptor
e.i.autocmd/ns-create-interceptor])

(def ^:private dev-interceptors
[e.i.debug/interceptor-context-checking-interceptor
Expand Down
29 changes: 29 additions & 0 deletions src/elin/interceptor/autocmd.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
(ns elin.interceptor.autocmd
(:require
[clojure.core.async :as async]
[elin.constant.interceptor :as e.c.interceptor]
[elin.function.host :as e.f.host]
[elin.function.nrepl.op :as e.f.n.op]
[elin.function.sexp :as e.f.sexp]
[elin.protocol.nrepl :as e.p.nrepl]))

(def ^:priavte ns-created-var-name
"b:elin_ns_created")

(def ns-create-interceptor
{:name ::ns-create-interceptor
:kind e.c.interceptor/autocmd
:enter (fn [{:as ctx :keys [elin autocmd-type]}]
(let [{:component/keys [writer nrepl]} elin]
(when (and (contains? #{"BufRead" "BufEnter"} autocmd-type)
(not (e.p.nrepl/disconnected? nrepl))
(nil? (e.f.host/get-variable writer ns-created-var-name)))
(when-let [ns-sym (some-> (e.f.sexp/get-namespace writer)
(symbol))]
(->> `(when-not (clojure.core/find-ns '~ns-sym)
(clojure.core/create-ns '~ns-sym))
(str)
(e.f.n.op/eval nrepl)
(async/<!!))
(e.f.host/set-variable writer ns-created-var-name true))))
ctx)})
3 changes: 2 additions & 1 deletion src/elin/schema/interceptor.clj
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
e.c.interceptor/handler
e.c.interceptor/connect
e.c.interceptor/nrepl
e.c.interceptor/output])
e.c.interceptor/output
e.c.interceptor/autocmd])

(def ?Interceptor
[:map
Expand Down

0 comments on commit 0331cdb

Please sign in to comment.