Skip to content

Commit 747fab5

Browse files
committed
user.clj, nrepl -> socket repl
1 parent f064e54 commit 747fab5

File tree

6 files changed

+84
-12
lines changed

6 files changed

+84
-12
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
target
33
clojure/*.edn
44
.cpcache
5+
.repl-port
56
master_ufo
67
instance_ufo
78
venv

clojure/user.clj

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
(ns user
2+
(:require
3+
[clojure.core.server :as server]
4+
[clojure.java.io :as io]
5+
[clojure.tools.namespace.repl :as ns]
6+
[clojure.tools.namespace.track :as track]))
7+
8+
(ns/disable-reload!)
9+
10+
(ns/set-refresh-dirs "clojure")
11+
12+
(def *reloaded
13+
(atom nil))
14+
15+
(add-watch #'ns/refresh-tracker ::watch
16+
(fn [_ _ old new]
17+
(when (empty? (::track/load new))
18+
(reset! *reloaded (::track/load old)))))
19+
20+
(defn after-reload []
21+
(let [cnt (count @*reloaded)]
22+
(str "Reloaded " cnt " namespace" (when (> cnt 1) "s"))))
23+
24+
(defn reload []
25+
(set! *warn-on-reflection* true)
26+
; (set! *unchecked-math* :warn-on-boxed)
27+
(let [res (ns/refresh :after 'user/after-reload)]
28+
(if (instance? Throwable res)
29+
(throw res)
30+
res)))
31+
32+
(def p-lock
33+
(Object.))
34+
35+
(defn p-pos []
36+
(let [trace (->> (Thread/currentThread)
37+
(.getStackTrace)
38+
(seq))
39+
el ^StackTraceElement (nth trace 4)]
40+
(str "[" (clojure.lang.Compiler/demunge (.getClassName el)) " " (.getFileName el) ":" (.getLineNumber el) "]")))
41+
42+
(defn p-impl [position form res]
43+
(let [form (clojure.walk/postwalk
44+
(fn [form]
45+
(if (and
46+
(list? form)
47+
(= 'user/p-impl (first form)))
48+
(clojure.lang.TaggedLiteral/create 'p (nth form 3))
49+
form))
50+
form)]
51+
(locking p-lock
52+
(println (str position " #p " form " => " (pr-str res))))
53+
res))
54+
55+
(defn p [form]
56+
`(p-impl (p-pos) '~form ~form))
57+
58+
(defn -main [& args]
59+
;; setup repl
60+
(let [args (apply array-map args)
61+
port (or
62+
(some-> (get args "--port") parse-long)
63+
(+ 1024 (rand-int 64512)))
64+
file (io/file ".repl-port")]
65+
(println "Started Server Socket REPL on port" port)
66+
(spit file port)
67+
(.deleteOnExit file)
68+
(server/start-server
69+
{:name "repl"
70+
:port port
71+
:accept 'clojure.core.server/repl
72+
:server-daemon false})))

deps.edn

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
{:paths ["clojure"]
2-
:deps {org.clojure/clojure {:mvn/version "1.10.1"}
3-
org.flatland/ordered {:mvn/version "1.5.7"}
4-
fipp/fipp {:mvn/version "0.6.18"}}
5-
:aliases {
6-
:nrepl {
7-
:extra-deps {
8-
nrepl/nrepl {:mvn/version "0.8.3"}
9-
}}}}
2+
:deps {org.clojure/clojure {:mvn/version "1.11.1"}
3+
org.flatland/ordered {:mvn/version "1.5.7"}
4+
fipp/fipp {:mvn/version "0.6.18"}
5+
org.clojure/tools.namespace {:mvn/version "1.3.0"}}}

script/check_widths

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
#!/bin/zsh -euo pipefail
22

3-
clojure -m fira-code.checks
3+
clojure -m fira-code.checks $@

script/nrepl.sh

Lines changed: 0 additions & 3 deletions
This file was deleted.

script/repl.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#!/bin/bash
2+
set -o errexit -o nounset -o pipefail
3+
dir=`dirname $0`
4+
cd $dir/..
5+
6+
clojure -M -m user

0 commit comments

Comments
 (0)