diff --git a/.clj-kondo/imports/babashka/fs/babashka/fs.clj_kondo b/.clj-kondo/imports/babashka/fs/babashka/fs.clj_kondo new file mode 100644 index 00000000..73d44096 --- /dev/null +++ b/.clj-kondo/imports/babashka/fs/babashka/fs.clj_kondo @@ -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))})))))) diff --git a/.clj-kondo/imports/babashka/fs/config.edn b/.clj-kondo/imports/babashka/fs/config.edn index 23f36094..026ca7ed 100644 --- a/.clj-kondo/imports/babashka/fs/config.edn +++ b/.clj-kondo/imports/babashka/fs/config.edn @@ -1 +1,4 @@ -{:lint-as {babashka.fs/with-temp-dir clojure.core/let}} +{: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}}} diff --git a/.github/workflows/code-coverage.yml b/.github/workflows/code-coverage.yml index f8636e90..16fcd44a 100644 --- a/.github/workflows/code-coverage.yml +++ b/.github/workflows/code-coverage.yml @@ -11,7 +11,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Setup uses: ./.github/workflows/shared-setup diff --git a/.github/workflows/libs-test.yml b/.github/workflows/libs-test.yml index a4533feb..f18f017d 100644 --- a/.github/workflows/libs-test.yml +++ b/.github/workflows/libs-test.yml @@ -19,7 +19,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Setup uses: ./.github/workflows/shared-setup @@ -41,7 +41,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: fetch-depth: 0 diff --git a/.github/workflows/native-image-test.yml b/.github/workflows/native-image-test.yml index d36b677a..e3dee395 100644 --- a/.github/workflows/native-image-test.yml +++ b/.github/workflows/native-image-test.yml @@ -32,7 +32,7 @@ jobs: if: matrix.os == 'windows' - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Setup uses: ./.github/workflows/shared-setup diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 6301ce69..90f8ce13 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -19,7 +19,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Setup uses: ./.github/workflows/shared-setup diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 86701a39..3c4ac342 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -19,7 +19,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Setup uses: ./.github/workflows/shared-setup @@ -48,7 +48,7 @@ jobs: if: matrix.os == 'windows' - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Setup uses: ./.github/workflows/shared-setup diff --git a/deps.edn b/deps.edn index dc271124..fb09c9eb 100644 --- a/deps.edn +++ b/deps.edn @@ -78,7 +78,7 @@ ;; Test support ;; - :test-common {:extra-deps {org.clojure/test.check {:mvn/version "1.1.1"}} + :test-common {:extra-deps {org.clojure/test.check {:mvn/version "1.1.2"}} :extra-paths ["test"]} :test-isolated {:extra-paths ["test-isolated"]} diff --git a/package-lock.json b/package-lock.json index 52f6470e..a44b27c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "karma-cljs-test": "0.1.0", "karma-junit-reporter": "2.0.1", "karma-spec-reporter": "0.0.36", - "shadow-cljs": "3.2.1" + "shadow-cljs": "3.3.1" } }, "node_modules/@colors/colors": { @@ -1632,9 +1632,9 @@ "license": "ISC" }, "node_modules/shadow-cljs": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/shadow-cljs/-/shadow-cljs-3.2.1.tgz", - "integrity": "sha512-xsTSHGUBGZqotbjdKTbKUuPaYoj41ozMPbylr0aQNHvpG+TEner7YTALPdthNGUsIseE+U7kNHV9HNTfRXc/Zw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/shadow-cljs/-/shadow-cljs-3.3.1.tgz", + "integrity": "sha512-gu51YSitLrUpk45Xho2vpAkzu63Nur+TVcT80oWbPRYEswMkEILdycxA6ApMdca9BzjNxASOFDPI8Rg1Qhvs3A==", "dev": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index f284353a..1d4310cf 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,6 @@ "karma-cljs-test": "0.1.0", "karma-junit-reporter": "2.0.1", "karma-spec-reporter": "0.0.36", - "shadow-cljs": "3.2.1" + "shadow-cljs": "3.3.1" } } diff --git a/script/test_libs.clj b/script/test_libs.clj index baccccf3..18f086c8 100755 --- a/script/test_libs.clj +++ b/script/test_libs.clj @@ -299,14 +299,14 @@ :show-deps-fn cli-deps-tree :test-cmds ["clojure -T:build ci"]} {:name "cljfmt" - :version "0.15.5" + :version "0.15.6" :platforms [:clj :cljs] :root "cljfmt" :github-release {:repo "weavejester/cljfmt" :via :tag} :patch-fn project-clj-v1-patch :show-deps-fn lein-deps-tree - :test-cmds ["lein test"]} + :test-cmds ["lein test-all"]} {:name "cljstyle" :version "0.17.642" :platforms [:clj] @@ -318,7 +318,7 @@ "bin/test unit"]} {:name "clojure-lsp" :platforms [:clj] - :version "2025.08.25-14.21.46" + :version "2025.11.28-12.47.43" :github-release {:repo "clojure-lsp/clojure-lsp"} :patch-fn clojure-lsp-patch :show-deps-fn clojure-lsp-deps diff --git a/shadow-cljs.edn b/shadow-cljs.edn index 58212e41..a3fd2431 100644 --- a/shadow-cljs.edn +++ b/shadow-cljs.edn @@ -1,5 +1,5 @@ {:source-paths ["src" "test"] - :dependencies [[org.clojure/test.check "1.1.1"]] + :dependencies [[org.clojure/test.check "1.1.2"]] :builds {:test {:target :node-test :output-to "target/shadow-cljs/node-test.js" :compiler-options {:warnings