This repository was archived by the owner on Nov 6, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 5 files changed +76
-31
lines changed
clojure/dev/clojurephant/tooling
java/dev/clojurephant/plugin/common Expand file tree Collapse file tree 5 files changed +76
-31
lines changed Original file line number Diff line number Diff line change 3333.lsp /
3434.nrepl-port
3535* .edn
36+ out /
Original file line number Diff line number Diff line change @@ -27,6 +27,12 @@ dependencies {
2727 implementation(" org.gradle:gradle-tooling-api:7.5" )
2828 testRuntimeOnly(" org.ajoberstar:jovial:0.3.0" )
2929 devRuntimeOnly(" org.slf4j:slf4j-simple:1.7.36" )
30+
31+ compileOnly(" org.clojure:clojurescript:1.11.60" )
32+ devImplementation(" org.clojure:clojurescript:1.11.60" )
33+
34+ compileOnly(" cider:piggieback:0.5.3" )
35+ devImplementation(" cider:piggieback:0.5.3" )
3036}
3137
3238tasks.withType<Test >() {
Original file line number Diff line number Diff line change 1+ (ns dev.clojurephant.tooling.api
2+ (:require [dev.clojurephant.tooling.core :as core]
3+ [clojure.string :as string]))
4+
5+ (defonce db (atom {}))
6+
7+ (defn connect [dir]
8+ (swap! db update :con
9+ (fn [existing-con]
10+ (if existing-con
11+ (throw (ex-info " Must close existing connection" {}))
12+ (core/connect dir)))))
13+
14+ (defn close []
15+ (swap! db update :con
16+ (fn [existing-con]
17+ (when existing-con
18+ (.close existing-con)
19+ nil ))))
20+
21+ (defn model []
22+ (swap! db (fn [current-db]
23+ (if-let [con (:con current-db)]
24+ (let [m (core/wait (core/clojurephant-model con))]
25+ (if (= :success (:result m))
26+ (assoc current-db :model (read-string (.getEdn (:value m))))
27+ (throw (ex-info " Failed to get Clojurephant model"
28+ (select-keys m [:error ])))))
29+ (throw (ex-info " Cannot get model until connect" {}))))))
30+
31+ (defn reroot-cljs-build [build new-dir]
32+ (let [old-dir (:output-dir build)
33+ replacer (fn [dir]
34+ (cond
35+ (nil? dir) nil
36+ (boolean? dir) dir
37+ :else (string/replace dir old-dir new-dir)))]
38+ (-> (:compiler build)
39+ (update-in [:output-dir ] replacer)
40+ (update-in [:output-to ] replacer)
41+ (update-in [:source-map ] replacer))))
42+
43+ (defn repl-cljs-builds []
44+ (let [m (:model @db)
45+ repl-dir (-> m :repl :dir )
46+ builds (:clojurescript m)]
47+ (into {} (map (fn [[id build]]
48+ [id (reroot-cljs-build build repl-dir)]))
49+ builds)))
50+
51+ (defn repl-cljs-build [id]
52+ (get (repl-cljs-builds ) id))
Original file line number Diff line number Diff line change 1+ (ns dev.clojurephant.tooling.repl.browser
2+ (:require [dev.clojurephant.tooling.api :as api]
3+ [cljs.build.api :as build]
4+ [cljs.repl.browser :as browser]
5+ [cider.piggieback :as piggieback]))
6+
7+ (defn cljs-build [id]
8+ (let [opts (api/repl-cljs-build id)]
9+ (build/build opts)))
10+
11+ (defn cljs-repl []
12+ (let [opts (api/repl-cljs-build :dev )]
13+ (piggieback/cljs-repl
14+ (browser/repl-env )
15+ opts)))
Original file line number Diff line number Diff line change 11package dev .clojurephant .plugin .common ;
22
3- import java .util .Objects ;
4-
5- public class ClojurephantModel {
6- private String edn ;
7-
8- public ClojurephantModel (String edn ) {
9- this .edn = Objects .requireNonNull (edn , "EDN must not be null." );;
10- }
11-
12- public String getEdn () {
13- return edn ;
14- }
15-
16- @ Override
17- public boolean equals (Object that ) {
18- if (that instanceof ClojurephantModel ) {
19- return this .edn .equals (((ClojurephantModel ) that ).edn );
20- } else {
21- return false ;
22- }
23- }
24-
25- @ Override
26- public int hashCode () {
27- return edn .hashCode ();
28- }
29-
30- @ Override
31- public String toString () {
32- return edn ;
33- }
3+ public interface ClojurephantModel {
4+ String getEdn ();
345}
You can’t perform that action at this time.
0 commit comments