Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
(ns clj-kondo.clj-commons.slingshot
(:require [clj-kondo.hooks-api :as api]
[clojure.walk]))

(defn expand-catch [catch-node]
(let [[catch catchee & exprs] (:children catch-node)
catchee-sexpr (api/sexpr catchee)]
(cond (vector? catchee-sexpr)
(let [[selector & exprs] exprs]
(api/list-node
[catch (api/token-node 'Exception) (api/token-node '_e#)
(api/list-node
(list* (api/token-node 'let)
(api/vector-node [selector (api/token-node nil)])
exprs))]))
(seq? catchee-sexpr)
(let [[v & exprs] exprs]
(api/list-node
(list* catch (api/token-node 'Exception) v
(if (or (= 'fn (first catchee-sexpr))
(= 'fn* (first catchee-sexpr)))
catchee
(api/list-node
(list (api/token-node 'fn)
(api/vector-node [(api/token-node '%)])
catchee)))
exprs)))
:else catch-node)))

(defn try+ [{:keys [node]}]
(let [children (rest (:children node))
[body catches]
(loop [body children
body-exprs []
catches []]
(if (seq body)
(let [f (first body)
f-sexpr (api/sexpr f)]
(if (and (seq? f-sexpr) (= 'catch (first f-sexpr)))
(recur (rest body)
body-exprs
(conj catches (expand-catch f)))
(recur (rest body)
(conj body-exprs f)
catches)))
[body-exprs catches]))
new-node (api/list-node
[(api/token-node 'let)
(api/vector-node
[(api/token-node '&throw-context) (api/token-node nil)])
(api/token-node '&throw-context) ;; use throw-context to avoid warning
(with-meta (api/list-node
(list* (api/token-node (if (seq catches) 'try 'do))
(concat body catches)))
(meta node))])]
{:node new-node}))

(defn- contains-%?
"Returns true if % appears within coll at any nesting depth"
[coll]
(let [result (atom false)]
(clojure.walk/postwalk
(fn [t]
(when (= '% t)
(reset! result true)))
coll)
@result))

(defn throw+ [{:keys [node]}]
(if-let [children (seq (rest (:children node)))]
(if (contains-%? (map api/sexpr children))
(let [new-node (api/list-node
[(api/token-node 'throw)
(api/list-node
[(api/token-node 'new)
(api/token-node 'Exception)
(api/list-node
[(api/token-node 'str)
(api/list-node
[(api/token-node 'fn)
(api/vector-node [(api/token-node '%)])
(api/list-node
(list* (api/token-node 'str)
children))])])])])]
{:node new-node})
{:node node})
{:node node}))
5 changes: 5 additions & 0 deletions .clj-kondo/imports/org.clj-commons/slingshot/config.edn
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{:hooks
{:analyze-call {clj-commons.slingshot/try+
clj-kondo.clj-commons.slingshot/try+
clj-commons.slingshot/throw+
clj-kondo.clj-commons.slingshot/throw+}}}
3 changes: 2 additions & 1 deletion .clj-kondo/imports/taoensso/encore/config.edn
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@
{taoensso.encore/defalias taoensso.encore-hooks/defalias
taoensso.encore/defaliases taoensso.encore-hooks/defaliases
taoensso.encore/defn-cached taoensso.encore-hooks/defn-cached
taoensso.encore/defonce taoensso.encore-hooks/defonce}}}
taoensso.encore/defonce taoensso.encore-hooks/defonce
taoensso.encore/def* taoensso.encore-hooks/def*}}}
12 changes: 9 additions & 3 deletions .clj-kondo/imports/taoensso/encore/taoensso/encore_hooks.clj
Original file line number Diff line number Diff line change
Expand Up @@ -64,19 +64,25 @@
binding-vec
body))))}))

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

attr-map (if doc-string (assoc attr-map :doc doc-string) attr-map)
sym+meta (if attr-map (with-meta sym attr-map) sym)

rewritten
(hooks/list-node
[(hooks/token-node 'clojure.core/defonce)
[(hooks/token-node core-macro-sym)
sym+meta
init-expr])]

#_(println "old node:" node)
#_(println "new node:" rewritten)
{:node rewritten}))

(defn def* [arg] (-def-impl arg 'def))
(defn defonce [arg] (-def-impl arg 'clojure.core/defonce))
2 changes: 1 addition & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '21'
java-version: '25'

- name: Install Clojure Tools
uses: DeLaGuardo/setup-clojure@13.4
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ jobs:
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '11'
java-version: '25'

- name: Install Clojure Tools
uses: DeLaGuardo/setup-clojure@13.4
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ A release with an intentional breaking changes is marked with:
== Unreleased

* Changes
** Migrate to org.clj-commons/slingshot
** Bumped deps
({lread})

Expand Down
2 changes: 1 addition & 1 deletion bb.edn
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{:min-bb-version "0.8.2"
:paths ["script" "build"]
:deps {doric/doric {:mvn/version "0.9.0"}
org.clj-commons/pretty {:mvn/version "3.6.3"}
org.clj-commons/pretty {:mvn/version "3.6.7"}
lread/status-line {:git/url "https://github.com/lread/status-line.git"
:sha "cf44c15f30ea3867227fa61ceb823e5e942c707f"}
dev.nubank/docopt {:mvn/version "0.6.1-fix7"}
Expand Down
30 changes: 14 additions & 16 deletions deps.edn
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{:paths ["src" "resources"]
:deps {org.clojure/clojure {:mvn/version "1.10.3"} ;; min clojure version
babashka/fs {:mvn/version "0.5.26"}
babashka/fs {:mvn/version "0.5.27"}
babashka/process {:mvn/version "0.6.23"}
org.babashka/http-client {:mvn/version "0.4.23"}
slingshot/slingshot {:mvn/version "0.12.2"}
cheshire/cheshire {:mvn/version "6.0.0"}
org.clojure/tools.cli {:mvn/version "1.1.230"}
org.clj-commons/slingshot {:mvn/version "0.13.0"}
cheshire/cheshire {:mvn/version "6.1.0"}
org.clojure/tools.cli {:mvn/version "1.2.245"}
org.clojure/tools.logging {:mvn/version "1.3.0"}
lambdaisland/uri {:mvn/version "1.19.155"}}
:aliases
Expand All @@ -17,16 +17,14 @@
:github-coords clj-commons/etaoin}}

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

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

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

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

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

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

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

:repl/cider
{:extra-deps {org.clojure/clojure {:mvn/version "1.12.2"}
nrepl/nrepl {:mvn/version "1.3.1"}
{:extra-deps {org.clojure/clojure {:mvn/version "1.12.3"}
nrepl/nrepl {:mvn/version "1.4.0"}
cider/cider-nrepl {:mvn/version "0.57.0"}
refactor-nrepl/refactor-nrepl {:mvn/version "3.11.0"}}
:jvm-opts ["-XX:-OmitStackTraceInFastThrow"]
Expand Down
4 changes: 2 additions & 2 deletions script/test_matrix.clj
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,12 @@
:desc (str "test-doc " os " jdk" jdk-version)} )

(defn- github-actions-matrix []
(let [jdks ["11" "17" "21" "24"]
(let [jdks ["11" "17" "21" "25"]
oses ["ubuntu" "macos" "windows"]
ide-browsers ["chrome" "firefox"]
api-browsers ["chrome" "firefox" "edge" "safari"]
platforms ["jvm" "bb"]
default-opts {:jdk-version "21"}] ;; if only testing on one, test on latest LTS
default-opts {:jdk-version "25"}] ;; if only testing on one, test on latest LTS
(->> (concat
(for [os oses
platform platforms]
Expand Down
4 changes: 2 additions & 2 deletions src/etaoin/api.clj
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@
[babashka.fs :as fs]
[babashka.process :as p]
[cheshire.core :as json]
[clj-commons.slingshot :refer [throw+ try+]]
[clojure.java.io :as io]
[clojure.string :as str]
[clojure.tools.logging :as log]
Expand All @@ -158,8 +159,7 @@
[etaoin.impl.util :as util :refer [defmethods]]
[etaoin.impl.xpath :as xpath]
[etaoin.keys :as k]
[etaoin.query :as query]
[slingshot.slingshot :refer [throw+ try+]])
[etaoin.query :as query])
(:import
(java.text SimpleDateFormat)
(java.util Base64 Date)))
Expand Down
4 changes: 2 additions & 2 deletions src/etaoin/impl/client.clj
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
[babashka.http-client :as client]
[cheshire.core :as json]
[cheshire.factory :as cheshire-factory]
[clj-commons.slingshot :refer [throw+]]
[clojure.string :as str]
[clojure.tools.logging :as log]
[etaoin.impl.proc :as proc]
[etaoin.impl.util :as util]
[slingshot.slingshot :refer [throw+]]))
[etaoin.impl.util :as util]))

(set! *warn-on-reflection* true)

Expand Down
4 changes: 2 additions & 2 deletions src/etaoin/impl/xpath.clj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
(ns ^:no-doc etaoin.impl.xpath
"A special module to work with XPath language."
(:require [clojure.string :as string]
[slingshot.slingshot :refer [throw+]]))
(:require [clj-commons.slingshot :refer [throw+]]
[clojure.string :as string]))

(set! *warn-on-reflection* true)

Expand Down
4 changes: 2 additions & 2 deletions src/etaoin/query.clj
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
Why do folks need to use this directly?
Maybe they are extending defmulti with more conversions?"
(:require
[etaoin.impl.xpath :as xpath]
[slingshot.slingshot :refer [throw+]]))
[clj-commons.slingshot :refer [throw+]]
[etaoin.impl.xpath :as xpath]))

(set! *warn-on-reflection* true)

Expand Down
6 changes: 3 additions & 3 deletions test/etaoin/api_test.clj
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
[babashka.process :as p]
[cheshire.core :as json]
[cheshire.factory :as cheshire-factory]
[clj-commons.slingshot :refer [try+]]
[clj-commons.slingshot.test]
[clojure.edn :as edn]
[clojure.java.io :as io]
[clojure.java.shell :as shell]
Expand All @@ -14,9 +16,7 @@
[etaoin.impl.util :as util]
[etaoin.impl.client :as client]
[etaoin.keys :as k]
[etaoin.test-report :as test-report]
[slingshot.slingshot :refer [try+]]
[slingshot.test])
[etaoin.test-report :as test-report])
(:import [java.net ServerSocket]))

(defn numeric? [val]
Expand Down
Loading