Skip to content

Commit c3b62b5

Browse files
authored
Merge pull request #711 from clj-commons/lread/maint-2025-10-05
maintenance
2 parents 1db76f8 + c11d328 commit c3b62b5

15 files changed

Lines changed: 134 additions & 36 deletions

File tree

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
(ns clj-kondo.clj-commons.slingshot
2+
(:require [clj-kondo.hooks-api :as api]
3+
[clojure.walk]))
4+
5+
(defn expand-catch [catch-node]
6+
(let [[catch catchee & exprs] (:children catch-node)
7+
catchee-sexpr (api/sexpr catchee)]
8+
(cond (vector? catchee-sexpr)
9+
(let [[selector & exprs] exprs]
10+
(api/list-node
11+
[catch (api/token-node 'Exception) (api/token-node '_e#)
12+
(api/list-node
13+
(list* (api/token-node 'let)
14+
(api/vector-node [selector (api/token-node nil)])
15+
exprs))]))
16+
(seq? catchee-sexpr)
17+
(let [[v & exprs] exprs]
18+
(api/list-node
19+
(list* catch (api/token-node 'Exception) v
20+
(if (or (= 'fn (first catchee-sexpr))
21+
(= 'fn* (first catchee-sexpr)))
22+
catchee
23+
(api/list-node
24+
(list (api/token-node 'fn)
25+
(api/vector-node [(api/token-node '%)])
26+
catchee)))
27+
exprs)))
28+
:else catch-node)))
29+
30+
(defn try+ [{:keys [node]}]
31+
(let [children (rest (:children node))
32+
[body catches]
33+
(loop [body children
34+
body-exprs []
35+
catches []]
36+
(if (seq body)
37+
(let [f (first body)
38+
f-sexpr (api/sexpr f)]
39+
(if (and (seq? f-sexpr) (= 'catch (first f-sexpr)))
40+
(recur (rest body)
41+
body-exprs
42+
(conj catches (expand-catch f)))
43+
(recur (rest body)
44+
(conj body-exprs f)
45+
catches)))
46+
[body-exprs catches]))
47+
new-node (api/list-node
48+
[(api/token-node 'let)
49+
(api/vector-node
50+
[(api/token-node '&throw-context) (api/token-node nil)])
51+
(api/token-node '&throw-context) ;; use throw-context to avoid warning
52+
(with-meta (api/list-node
53+
(list* (api/token-node (if (seq catches) 'try 'do))
54+
(concat body catches)))
55+
(meta node))])]
56+
{:node new-node}))
57+
58+
(defn- contains-%?
59+
"Returns true if % appears within coll at any nesting depth"
60+
[coll]
61+
(let [result (atom false)]
62+
(clojure.walk/postwalk
63+
(fn [t]
64+
(when (= '% t)
65+
(reset! result true)))
66+
coll)
67+
@result))
68+
69+
(defn throw+ [{:keys [node]}]
70+
(if-let [children (seq (rest (:children node)))]
71+
(if (contains-%? (map api/sexpr children))
72+
(let [new-node (api/list-node
73+
[(api/token-node 'throw)
74+
(api/list-node
75+
[(api/token-node 'new)
76+
(api/token-node 'Exception)
77+
(api/list-node
78+
[(api/token-node 'str)
79+
(api/list-node
80+
[(api/token-node 'fn)
81+
(api/vector-node [(api/token-node '%)])
82+
(api/list-node
83+
(list* (api/token-node 'str)
84+
children))])])])])]
85+
{:node new-node})
86+
{:node node})
87+
{:node node}))
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{:hooks
2+
{:analyze-call {clj-commons.slingshot/try+
3+
clj-kondo.clj-commons.slingshot/try+
4+
clj-commons.slingshot/throw+
5+
clj-kondo.clj-commons.slingshot/throw+}}}

.clj-kondo/imports/taoensso/encore/config.edn

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@
33
{taoensso.encore/defalias taoensso.encore-hooks/defalias
44
taoensso.encore/defaliases taoensso.encore-hooks/defaliases
55
taoensso.encore/defn-cached taoensso.encore-hooks/defn-cached
6-
taoensso.encore/defonce taoensso.encore-hooks/defonce}}}
6+
taoensso.encore/defonce taoensso.encore-hooks/defonce
7+
taoensso.encore/def* taoensso.encore-hooks/def*}}}

.clj-kondo/imports/taoensso/encore/taoensso/encore_hooks.clj

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,19 +64,25 @@
6464
binding-vec
6565
body))))}))
6666

67-
(defn defonce
68-
[{:keys [node]}]
67+
(defn -def-impl
68+
[{:keys [node]} core-macro-sym]
6969
;; args = [sym doc-string? attr-map? init-expr]
7070
(let [[sym & args] (rest (:children node))
7171
[doc-string args] (if (and (hooks/string-node? (first args)) (next args)) [(hooks/sexpr (first args)) (next args)] [nil args])
7272
[attr-map init-expr] (if (and (hooks/map-node? (first args)) (next args)) [(hooks/sexpr (first args)) (fnext args)] [nil (first args)])
7373

7474
attr-map (if doc-string (assoc attr-map :doc doc-string) attr-map)
7575
sym+meta (if attr-map (with-meta sym attr-map) sym)
76+
7677
rewritten
7778
(hooks/list-node
78-
[(hooks/token-node 'clojure.core/defonce)
79+
[(hooks/token-node core-macro-sym)
7980
sym+meta
8081
init-expr])]
8182

83+
#_(println "old node:" node)
84+
#_(println "new node:" rewritten)
8285
{:node rewritten}))
86+
87+
(defn def* [arg] (-def-impl arg 'def))
88+
(defn defonce [arg] (-def-impl arg 'clojure.core/defonce))

.github/workflows/publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ jobs:
3333
uses: actions/setup-java@v5
3434
with:
3535
distribution: 'temurin'
36-
java-version: '21'
36+
java-version: '25'
3737

3838
- name: Install Clojure Tools
3939
uses: DeLaGuardo/setup-clojure@13.4

.github/workflows/test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ jobs:
3535
uses: actions/setup-java@v5
3636
with:
3737
distribution: 'temurin'
38-
java-version: '11'
38+
java-version: '25'
3939

4040
- name: Install Clojure Tools
4141
uses: DeLaGuardo/setup-clojure@13.4

CHANGELOG.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ A release with an intentional breaking changes is marked with:
2020
== Unreleased
2121

2222
* Changes
23+
** Migrate to org.clj-commons/slingshot
2324
** Bumped deps
2425
({lread})
2526

bb.edn

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{:min-bb-version "0.8.2"
22
:paths ["script" "build"]
33
:deps {doric/doric {:mvn/version "0.9.0"}
4-
org.clj-commons/pretty {:mvn/version "3.6.3"}
4+
org.clj-commons/pretty {:mvn/version "3.6.7"}
55
lread/status-line {:git/url "https://github.com/lread/status-line.git"
66
:sha "cf44c15f30ea3867227fa61ceb823e5e942c707f"}
77
dev.nubank/docopt {:mvn/version "0.6.1-fix7"}

deps.edn

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
{:paths ["src" "resources"]
22
:deps {org.clojure/clojure {:mvn/version "1.10.3"} ;; min clojure version
3-
babashka/fs {:mvn/version "0.5.26"}
3+
babashka/fs {:mvn/version "0.5.27"}
44
babashka/process {:mvn/version "0.6.23"}
55
org.babashka/http-client {:mvn/version "0.4.23"}
6-
slingshot/slingshot {:mvn/version "0.12.2"}
7-
cheshire/cheshire {:mvn/version "6.0.0"}
8-
org.clojure/tools.cli {:mvn/version "1.1.230"}
6+
org.clj-commons/slingshot {:mvn/version "0.13.0"}
7+
cheshire/cheshire {:mvn/version "6.1.0"}
8+
org.clojure/tools.cli {:mvn/version "1.2.245"}
99
org.clojure/tools.logging {:mvn/version "1.3.0"}
1010
lambdaisland/uri {:mvn/version "1.19.155"}}
1111
:aliases
@@ -17,16 +17,14 @@
1717
:github-coords clj-commons/etaoin}}
1818

1919
:1.11 {:replace-deps {org.clojure/clojure {:mvn/version "1.11.4"}}}
20-
:1.12 {:replace-deps {org.clojure/clojure {:mvn/version "1.12.2"}}}
20+
:1.12 {:replace-deps {org.clojure/clojure {:mvn/version "1.12.3"}}}
2121
:debug {:extra-paths ["env/dev/resources"]}
2222
:test {:extra-paths ["test" "env/test/resources" "build"]
2323
:extra-deps {io.github.cognitect-labs/test-runner {:git/tag "v0.5.1" :git/sha "dfb30dd"}
2424
org.babashka/cli {:mvn/version "0.8.66"}
25-
ch.qos.logback/logback-classic {:mvn/version "1.5.18"}
25+
ch.qos.logback/logback-classic {:mvn/version "1.5.19"}
2626
;; for http-client which uses apache http client 4.x which uses commons logging
27-
org.slf4j/jcl-over-slf4j {:mvn/version "2.0.17"}
28-
;; slingshot does not have a kondo config, grab kondo team provided config from here
29-
io.github.clj-kondo/config-slingshot-slingshot {:mvn/version "1.0.0"}}
27+
org.slf4j/jcl-over-slf4j {:mvn/version "2.0.17"}}
3028
:exec-fn test-shared/test
3129
:org.babashka/cli {:coerce {:nses [:symbol]
3230
:patterns [:string]
@@ -35,15 +33,15 @@
3533
:script {:extra-paths ["script"]}
3634

3735
;; test-doc-blocks - gen tests
38-
:test-doc-blocks {:replace-deps {org.clojure/clojure {:mvn/version "1.12.2"}
36+
:test-doc-blocks {:replace-deps {org.clojure/clojure {:mvn/version "1.12.3"}
3937
com.github.lread/test-doc-blocks {:mvn/version "1.2.21"}}
4038
:replace-paths []
4139
:ns-default lread.test-doc-blocks
4240
:exec-args {:docs ["doc/01-user-guide.adoc"]}}
4341

4442
;; test-doc-blocks - run tests
4543
;; usage: test:test-docs
46-
:test-docs {:override-deps {org.clojure/clojure {:mvn/version "1.12.2"}}
44+
:test-docs {:override-deps {org.clojure/clojure {:mvn/version "1.12.3"}}
4745
:extra-paths ["target/test-doc-blocks/test"]
4846
:exec-fn cognitect.test-runner.api/test
4947
:exec-args {:dirs ["target/test-doc-blocks/test"]}
@@ -53,7 +51,7 @@
5351
:main-opts ["-m" "babashka.cli.exec"]}
5452

5553
:clofidence {:classpath-overrides {org.clojure/clojure nil}
56-
:extra-deps {com.github.flow-storm/clojure {:mvn/version "1.12.2"}
54+
:extra-deps {com.github.flow-storm/clojure {:mvn/version "1.12.3-1"}
5755
com.github.flow-storm/clofidence {:mvn/version "0.4.2"}}
5856
:exec-fn clofidence.main/run
5957
:exec-args {:report-name "Etaoin Test Coverage"
@@ -63,7 +61,7 @@
6361
:jvm-opts ["-Dclojure.storm.instrumentOnlyPrefixes=etaoin"]}
6462

6563
;; for consistent linting we use a specific version of clj-kondo through the jvm
66-
:clj-kondo {:extra-deps {clj-kondo/clj-kondo {:mvn/version "2025.07.28"}}
64+
:clj-kondo {:extra-deps {clj-kondo/clj-kondo {:mvn/version "2025.09.22"}}
6765
:main-opts ["-m" "clj-kondo.main"]}
6866

6967
:eastwood {:extra-deps {jonase/eastwood {:mvn/version "1.4.3"}}
@@ -83,14 +81,14 @@
8381
:deploy {:extra-deps {slipset/deps-deploy {:mvn/version "0.2.2"}}}
8482

8583
:outdated {:extra-deps {com.github.liquidz/antq {:mvn/version "2.11.1276"}
86-
org.clojure/clojure {:mvn/version "1.12.2"}
84+
org.clojure/clojure {:mvn/version "1.12.3"}
8785
org.slf4j/slf4j-simple {:mvn/version "2.0.17"} ;; to rid ourselves of logger warnings
8886
}
8987
:main-opts ["-m" "antq.core"]}
9088

9189
:repl/cider
92-
{:extra-deps {org.clojure/clojure {:mvn/version "1.12.2"}
93-
nrepl/nrepl {:mvn/version "1.3.1"}
90+
{:extra-deps {org.clojure/clojure {:mvn/version "1.12.3"}
91+
nrepl/nrepl {:mvn/version "1.4.0"}
9492
cider/cider-nrepl {:mvn/version "0.57.0"}
9593
refactor-nrepl/refactor-nrepl {:mvn/version "3.11.0"}}
9694
:jvm-opts ["-XX:-OmitStackTraceInFastThrow"]

script/test_matrix.clj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@
4141
:desc (str "test-doc " os " jdk" jdk-version)} )
4242

4343
(defn- github-actions-matrix []
44-
(let [jdks ["11" "17" "21" "24"]
44+
(let [jdks ["11" "17" "21" "25"]
4545
oses ["ubuntu" "macos" "windows"]
4646
ide-browsers ["chrome" "firefox"]
4747
api-browsers ["chrome" "firefox" "edge" "safari"]
4848
platforms ["jvm" "bb"]
49-
default-opts {:jdk-version "21"}] ;; if only testing on one, test on latest LTS
49+
default-opts {:jdk-version "25"}] ;; if only testing on one, test on latest LTS
5050
(->> (concat
5151
(for [os oses
5252
platform platforms]

0 commit comments

Comments
 (0)