diff --git a/.gitignore b/.gitignore index 405f1c2..e4cce81 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ target clojure/*.edn .cpcache +.repl-port master_ufo instance_ufo venv diff --git a/clojure/user.clj b/clojure/user.clj new file mode 100644 index 0000000..15d7bd2 --- /dev/null +++ b/clojure/user.clj @@ -0,0 +1,72 @@ +(ns user + (:require + [clojure.core.server :as server] + [clojure.java.io :as io] + [clojure.tools.namespace.repl :as ns] + [clojure.tools.namespace.track :as track])) + +(ns/disable-reload!) + +(ns/set-refresh-dirs "clojure") + +(def *reloaded + (atom nil)) + +(add-watch #'ns/refresh-tracker ::watch + (fn [_ _ old new] + (when (empty? (::track/load new)) + (reset! *reloaded (::track/load old))))) + +(defn after-reload [] + (let [cnt (count @*reloaded)] + (str "Reloaded " cnt " namespace" (when (> cnt 1) "s")))) + +(defn reload [] + (set! *warn-on-reflection* true) + ; (set! *unchecked-math* :warn-on-boxed) + (let [res (ns/refresh :after 'user/after-reload)] + (if (instance? Throwable res) + (throw res) + res))) + +(def p-lock + (Object.)) + +(defn p-pos [] + (let [trace (->> (Thread/currentThread) + (.getStackTrace) + (seq)) + el ^StackTraceElement (nth trace 4)] + (str "[" (clojure.lang.Compiler/demunge (.getClassName el)) " " (.getFileName el) ":" (.getLineNumber el) "]"))) + +(defn p-impl [position form res] + (let [form (clojure.walk/postwalk + (fn [form] + (if (and + (list? form) + (= 'user/p-impl (first form))) + (clojure.lang.TaggedLiteral/create 'p (nth form 3)) + form)) + form)] + (locking p-lock + (println (str position " #p " form " => " (pr-str res)))) + res)) + +(defn p [form] + `(p-impl (p-pos) '~form ~form)) + +(defn -main [& args] + ;; setup repl + (let [args (apply array-map args) + port (or + (some-> (get args "--port") parse-long) + (+ 1024 (rand-int 64512))) + file (io/file ".repl-port")] + (println "Started Server Socket REPL on port" port) + (spit file port) + (.deleteOnExit file) + (server/start-server + {:name "repl" + :port port + :accept 'clojure.core.server/repl + :server-daemon false}))) diff --git a/deps.edn b/deps.edn index bc18bf8..72a32f7 100644 --- a/deps.edn +++ b/deps.edn @@ -1,9 +1,5 @@ {:paths ["clojure"] - :deps {org.clojure/clojure {:mvn/version "1.10.1"} - org.flatland/ordered {:mvn/version "1.5.7"} - fipp/fipp {:mvn/version "0.6.18"}} - :aliases { - :nrepl { - :extra-deps { - nrepl/nrepl {:mvn/version "0.8.3"} -}}}} + :deps {org.clojure/clojure {:mvn/version "1.11.1"} + org.flatland/ordered {:mvn/version "1.5.7"} + fipp/fipp {:mvn/version "0.6.18"} + org.clojure/tools.namespace {:mvn/version "1.3.0"}}} diff --git a/script/check_widths b/script/check_widths index 9253fe9..558f81a 100755 --- a/script/check_widths +++ b/script/check_widths @@ -1,3 +1,3 @@ #!/bin/zsh -euo pipefail -clojure -m fira-code.checks \ No newline at end of file +clojure -m fira-code.checks $@ \ No newline at end of file diff --git a/script/nrepl.sh b/script/nrepl.sh deleted file mode 100755 index 0f67df1..0000000 --- a/script/nrepl.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -clj -A:nrepl -M -m nrepl.cmdline --interactive \ No newline at end of file diff --git a/script/repl.sh b/script/repl.sh new file mode 100755 index 0000000..8669e21 --- /dev/null +++ b/script/repl.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -o errexit -o nounset -o pipefail +dir=`dirname $0` +cd $dir/.. + +clojure -M -m user \ No newline at end of file