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
1 change: 0 additions & 1 deletion .clj-kondo/babashka/fs/config.edn

This file was deleted.

36 changes: 36 additions & 0 deletions .clj-kondo/imports/babashka/fs/babashka/fs.clj_kondo
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
(ns babashka.fs
(:require [clj-kondo.hooks-api :as api]))

(defn- symbol-node? [node]
(and (api/token-node? node)
(symbol? (api/sexpr node))))

(defn with-temp-dir
[{:keys [node]}]
(let [args (rest (:children node))
binding-like-vector (first args)
body (rest args)]
(when-not (zero? (count args)) ;; let clj-kondo report on arity
(if-not (api/vector-node? binding-like-vector)
(api/reg-finding! (assoc (meta binding-like-vector)
:message "babashka.fs/with-temp-dir requires a vector for first arg"
:type :babashka-fs/with-temp-dir-first-arg-not-vector))
(let [[binding-sym options & rest-in-vec] (:children binding-like-vector)]
(when (not (symbol-node? binding-sym))
(api/reg-finding! (assoc (meta (or binding-sym binding-like-vector))
:message "babashka.fs/with-temp-dir vector arg requires binding-name symbol as first value"
:type :babashka-fs/with-temp-dir-vector-arg-needs-binding-symbol)))
(doseq [extra-vector-arg rest-in-vec]
(api/reg-finding! (assoc (meta extra-vector-arg)
:message "babashka.fs/with-temp-dir vector arg accepts at most 2 values"
:type :babashka-fs/with-temp-dir-vector-arg-extra-value)))

(when binding-sym
{:node (api/list-node
;; satisfy linter by creating binding for for binding-sym
(list*
(api/token-node 'let)
;; it doesn't really matter what we bind to, so long as it is bound
(api/vector-node [binding-sym (api/token-node nil)])
options ;; avoid unused binding when options is a binding
body))}))))))
4 changes: 4 additions & 0 deletions .clj-kondo/imports/babashka/fs/config.edn
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{:linters {:babashka-fs/with-temp-dir-first-arg-not-vector {:level :error}
:babashka-fs/with-temp-dir-vector-arg-needs-binding-symbol {:level :error}
:babashka-fs/with-temp-dir-vector-arg-extra-value {:level :error}}
:hooks {:analyze-call {babashka.fs/with-temp-dir babashka.fs/with-temp-dir}}}
1 change: 1 addition & 0 deletions .clj-kondo/imports/babashka/sci/config.edn
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{:hooks {:macroexpand {sci.core/copy-ns sci.core/copy-ns}}}
9 changes: 9 additions & 0 deletions .clj-kondo/imports/babashka/sci/sci/core.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
(ns sci.core)

(defmacro copy-ns
([ns-sym sci-ns]
`(copy-ns ~ns-sym ~sci-ns nil))
([ns-sym sci-ns opts]
`[(quote ~ns-sym)
~sci-ns
(quote ~opts)]))
3 changes: 3 additions & 0 deletions .clj-kondo/imports/http-kit/http-kit/config.edn
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@

{:hooks
{:analyze-call {org.httpkit.server/with-channel httpkit.with-channel/with-channel}}}
16 changes: 16 additions & 0 deletions .clj-kondo/imports/http-kit/http-kit/httpkit/with_channel.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
(ns httpkit.with-channel
(:require [clj-kondo.hooks-api :as api]))

(defn with-channel [{node :node}]
(let [[request channel & body] (rest (:children node))]
(when-not (and request channel) (throw (ex-info "No request or channel provided" {})))
(when-not (api/token-node? channel) (throw (ex-info "Missing channel argument" {})))
(let [new-node
(api/list-node
(list*
(api/token-node 'let)
(api/vector-node [channel (api/vector-node [])])
request
body))]

{:node new-node})))
5 changes: 5 additions & 0 deletions .clj-kondo/imports/rewrite-clj/rewrite-clj/config.edn
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{:lint-as
{rewrite-clj.zip/subedit-> clojure.core/->
rewrite-clj.zip/subedit->> clojure.core/->>
rewrite-clj.zip/edit-> clojure.core/->
rewrite-clj.zip/edit->> clojure.core/->>}}
7 changes: 7 additions & 0 deletions .clj-kondo/imports/taoensso/encore/config.edn
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{:hooks
{:analyze-call
{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/def* taoensso.encore-hooks/def*}}}
88 changes: 88 additions & 0 deletions .clj-kondo/imports/taoensso/encore/taoensso/encore_hooks.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
(ns taoensso.encore-hooks
"I don't personally use clj-kondo, so these hooks are
kindly authored and maintained by contributors.
PRs very welcome! - Peter Taoussanis"
(:refer-clojure :exclude [defonce])
(:require
[clj-kondo.hooks-api :as hooks]))

(defn defalias
[{:keys [node]}]
(let [[alias src-raw _attrs body] (rest (:children node))
src (or src-raw alias)
sym (if src-raw (hooks/sexpr alias) (symbol (name (hooks/sexpr src))))]
{:node
(with-meta
(hooks/list-node
[(hooks/token-node 'def)
(hooks/token-node sym)
(if body
(hooks/list-node
;; use :body in the def to avoid unused import/private var warnings
[(hooks/token-node 'or) body src])
src)])
(meta src))}))

(defn defaliases
[{:keys [node]}]
(let [alias-nodes (rest (:children node))]
{:node
(hooks/list-node
(into
[(hooks/token-node 'do)]
(map
(fn alias->defalias [alias-node]
(cond
(hooks/token-node? alias-node)
(hooks/list-node
[(hooks/token-node 'taoensso.encore/defalias)
alias-node])

(hooks/map-node? alias-node)
(let [{:keys [src alias attrs body]} (hooks/sexpr alias-node)
;; workaround as can't seem to (get) using a token-node
;; and there's no update-keys (yet) in sci apparently
[& {:as node-as-map}] (:children alias-node)
{:keys [attrs body]} (zipmap (map hooks/sexpr (keys node-as-map))
(vals node-as-map))]
(hooks/list-node
[(hooks/token-node 'taoensso.encore/defalias)
(or alias src) (hooks/token-node src) attrs body])))))
alias-nodes))}))

(defn defn-cached
[{:keys [node]}]
(let [[sym _opts binding-vec & body] (rest (:children node))]
{:node
(hooks/list-node
(list
(hooks/token-node 'def)
sym
(hooks/list-node
(list*
(hooks/token-node 'fn)
binding-vec
body))))}))

(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 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))
25 changes: 13 additions & 12 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,51 +13,52 @@ jobs:

steps:
- name: "Checkout code"
uses: "actions/checkout@v4"
uses: "actions/checkout@v6"

- name: Prepare java
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: "adopt"
distribution: "zulu"
java-version: ${{ matrix.java-version }}

- name: "Restore Cache"
uses: "actions/cache@v4"
uses: "actions/cache@v5"
with:
path: "~/.m2/repository"
key: "${{ runner.os }}-deps-${{ hashFiles('deps.edn') }}"
restore-keys: "${{ runner.os }}-deps-"

- name: Setup Clojure
uses: DeLaGuardo/setup-clojure@13.2
uses: DeLaGuardo/setup-clojure@13.5
with:
bb: latest

- name: Run tests
run: |
bb clojure -M:clj-1.10:test -i windows
bb clojure -M:clj-1.11:test -i windows
bb clojure -M:clj-1.10:test
bb clojure -M:clj-1.11:test
bb clojure -M:clj-1.12:test
test-cljs:
runs-on: ubuntu-latest

steps:
- name: "Checkout code"
uses: "actions/checkout@v4"
uses: "actions/checkout@v6"

- name: Prepare java
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: "adopt"
distribution: "zulu"
java-version: 21

- name: "Restore Cache"
uses: "actions/cache@v4"
uses: "actions/cache@v5"
with:
path: "~/.m2/repository"
key: "${{ runner.os }}-deps-${{ hashFiles('deps.edn') }}"
restore-keys: "${{ runner.os }}-deps-"
- name: Setup Clojure
uses: DeLaGuardo/setup-clojure@13.2
uses: DeLaGuardo/setup-clojure@13.5
with:
bb: latest

Expand Down
12 changes: 6 additions & 6 deletions deps.edn
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,30 @@
:aliases
{:repl
{:extra-paths ["test"]
:extra-deps {babashka/fs {:mvn/version "0.1.11"}}}
:extra-deps {babashka/fs {:mvn/version "0.5.32"}}}
:test ;; added by neil
{:extra-paths ["test"]
:extra-deps {io.github.cognitect-labs/test-runner
{:git/tag "v0.5.1" :git/sha "dfb30dd"}
babashka/fs {:mvn/version "0.1.11"}
babashka/fs {:mvn/version "0.5.32"}
io.github.borkdude/deflet {:mvn/version "0.1.0"}}
:exec-args {:cmd "bb test"}
:main-opts ["-m" "babashka.cli.exec"]
:exec-fn babashka.test-runner/test #_cognitect.test-runner.api/test}

:build ;; added by neil
{:deps {io.github.clojure/tools.build {:mvn/version "0.10.8"}
{:deps {io.github.clojure/tools.build {:mvn/version "0.10.13"}
slipset/deps-deploy {:mvn/version "0.2.0"}}
:extra-paths ["." ".build"]
:ns-default build
:main-opts ["-m" "babashka.cli.exec"]}

:clj-1.9 {:extra-deps {org.clojure/clojure {:mvn/version "1.9.0"}}}
:clj-1.10 {:extra-deps {org.clojure/clojure {:mvn/version "1.10.3"}}}
:clj-1.11 {:extra-deps {org.clojure/clojure {:mvn/version "1.11.1"}}}
:clj-1.11 {:extra-deps {org.clojure/clojure {:mvn/version "1.11.4"}}}
:clj-1.12 {:extra-deps {org.clojure/clojure {:mvn/version "1.12.4"}}}

:cljs-test
{:extra-deps {olical/cljs-test-runner {:mvn/version "3.7.0"}
{:extra-deps {olical/cljs-test-runner {:mvn/version "3.8.0"}
org.clojure/clojurescript {:mvn/version "1.12.134"}}
:extra-paths ["test" "cljs-test-runner-out/gen"]
:main-opts ["-m" "cljs-test-runner.main" "-d" "test"]}}}
1 change: 1 addition & 0 deletions test/babashka/cli/exec_test.clj
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
{:org.babashka/cli {:exec-args {:foo :bar}}}
(:require
[babashka.cli-test :refer [submap?]]
[babashka.cli.test-report]
[babashka.cli.exec :refer [main]]
[babashka.fs :as fs]
[clojure.edn :as edn]
Expand Down
15 changes: 15 additions & 0 deletions test/babashka/cli/test_report.cljc
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
(ns babashka.cli.test-report
(:require [clojure.test :as test]))

(def platform
#?(:bb (str "bb " (System/getProperty "babashka.version"))
:cljs (str "cljs " *clojurescript-version*)
:clj (str "jdk " (System/getProperty "java.version") " clj " (clojure-version))))

(defmethod test/report
#?@(:cljs [[:cljs.test/default :begin-test-var]]
:default [:begin-test-var]) [m]
(let [test-name (-> m :var meta :name)
line (str "=== " test-name " [" platform "]")]
#?(:cljs (js/process.stdout.write (str line "\n"))
:default (println line))))
1 change: 1 addition & 0 deletions test/babashka/cli_test.cljc
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
(ns babashka.cli-test
(:require
[babashka.cli :as cli]
[babashka.cli.test-report]
[clojure.string :as str]
[clojure.test :refer [deftest is testing]]
[borkdude.deflet :as d]
Expand Down
Loading