From 0e57b9d461ddde80dc97fc49b2433f578aadd9a2 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 18 Oct 2022 17:54:38 +0200 Subject: [PATCH] Fix #1330: allow *warn-on-reflection* in programmatic nREPL (#1398) --- CHANGELOG.md | 1 + src/babashka/impl/common.clj | 6 +++++- src/babashka/impl/nrepl_server.clj | 17 ++++++++++++----- src/babashka/main.clj | 20 ++++++++------------ 4 files changed, 26 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3961c234..df670e19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ A preview of the next release can be installed from - [#1369](https://github.com/babashka/babashka/issues/1369): provide `.sha256` files for every released asset - [#1397](https://github.com/babashka/babashka/issues/1397): Add `clojure.lang.Namespace` as alias for `sci.lang.Namespace`, such that `(instance? clojure.lang.Namespace *ns*)` returns `true` in bb - [#1384](https://github.com/babashka/babashka/issues/1384): allow `.indexOf` on `LazySeq` +- [#1330](https://github.com/babashka/babashka/issues/1330): allow `(set! *warn-on-reflection*)` in programmatic nREPL ## 0.10.163 (2022-09-24) diff --git a/src/babashka/impl/common.clj b/src/babashka/impl/common.clj index 9cf5c2a2..4a8057d7 100644 --- a/src/babashka/impl/common.clj +++ b/src/babashka/impl/common.clj @@ -1,6 +1,10 @@ -(ns babashka.impl.common) +(ns babashka.impl.common + (:require + [clojure.java.io :as io] + [clojure.string :as str])) ;; placeholder for ctx (def ctx (volatile! nil)) (def bb-edn (volatile! nil)) (def debug (volatile! false)) +(def version (str/trim (slurp (io/resource "BABASHKA_VERSION")))) diff --git a/src/babashka/impl/nrepl_server.clj b/src/babashka/impl/nrepl_server.clj index 096981b5..6340e6d6 100644 --- a/src/babashka/impl/nrepl_server.clj +++ b/src/babashka/impl/nrepl_server.clj @@ -1,14 +1,21 @@ (ns babashka.impl.nrepl-server {:no-doc true} - (:require [babashka.impl.common :as common] - [babashka.nrepl.server :as server] - [sci.core :as sci])) + (:require + [babashka.impl.clojure.core] + [babashka.impl.common :as common] + [babashka.nrepl.server :as server] + [sci.core :as sci])) (defn start-server! ([] - (server/start-server! @common/ctx)) + (start-server! nil)) ([opts] - (server/start-server! @common/ctx opts))) + (let [dev? (= "true" (System/getenv "BABASHKA_DEV")) + opts (merge {:debug dev? + :describe {"versions" {"babashka" common/version}} + :thread-bind [babashka.impl.clojure.core/warn-on-reflection]} + opts)] + (server/start-server! @common/ctx opts)))) (def nrepl-server-namespace (let [ns-sci (sci/create-ns 'babashka.nrepl.server)] diff --git a/src/babashka/main.clj b/src/babashka/main.clj index 6b19dc77..ba8b10a9 100644 --- a/src/babashka/main.clj +++ b/src/babashka/main.clj @@ -96,7 +96,8 @@ ;; echo '1' | java -agentlib:native-image-agent=config-output-dir=/tmp -jar target/babashka-xxx-standalone.jar '...' ;; with the java provided by GraalVM. -(def version (str/trim (slurp (io/resource "BABASHKA_VERSION")))) +(def version common/version) + (defn parse-version [version] (mapv #(Integer/parseInt %) (-> version @@ -305,16 +306,11 @@ Use bb run --help to show this help output. (defn start-socket-repl! [address ctx] (socket-repl/start-repl! address ctx)) -(defn start-nrepl! [address ctx] - (let [dev? (= "true" (System/getenv "BABASHKA_DEV")) - nrepl-opts (nrepl-server/parse-opt address) - nrepl-opts (assoc nrepl-opts - :debug dev? - :describe {"versions" {"babashka" version}} - :thread-bind [core/warn-on-reflection])] - (nrepl-server/start-server! ctx nrepl-opts) - (binding [*out* *err*] - (println "For more info visit: https://book.babashka.org/#_nrepl"))) +(defn start-nrepl! [address] + (let [opts (nrepl-server/parse-opt address)] + (babashka.impl.nrepl-server/start-server! opts)) + (binding [*out* *err*] + (println "For more info visit: https://book.babashka.org/#_nrepl")) ;; hang until SIGINT @(promise)) @@ -958,7 +954,7 @@ Use bb run --help to show this help output. describe? [(print-describe) 0] repl [(repl/start-repl! sci-ctx) 0] - nrepl [(start-nrepl! nrepl sci-ctx) 0] + nrepl [(start-nrepl! nrepl) 0] uberjar [nil 0] list-tasks [(tasks/list-tasks sci-ctx) 0] print-deps [(print-deps/print-deps (:print-deps-format cli-opts)) 0]