diff --git a/.clj-kondo/config.edn b/.clj-kondo/config.edn new file mode 100644 index 0000000..1b07658 --- /dev/null +++ b/.clj-kondo/config.edn @@ -0,0 +1 @@ +{:config-paths ["../resources/clj-kondo.exports/com/rpl/specter"]} diff --git a/README.md b/README.md index 91741f5..bb794b3 100644 --- a/README.md +++ b/README.md @@ -334,6 +334,21 @@ When using Specter in a project with [clj-kondo](https://github.com/clj-kondo/cl com.rpl.specter/defrichnav clojure.core/defn}} ``` +The config is included in the repo and can be [imported as indicated in +the clj-kondo +documentation](https://github.com/clj-kondo/clj-kondo/blob/master/doc/config.md#importing): + +```sh +clj-kondo --lint "$(clojure -Spath)" --copy-configs --skip-lint +``` + +or, if using lein, + +```sh +clj-kondo --lint "$(lein classpath)" --copy-configs --skip-lint +``` + + # Babashka This library is compatible with [babashka](https://babashka.org/) as of specter 1.1.4 and babashka 0.7.8. diff --git a/resources/clj-kondo.exports/com/rpl/specter/config.edn b/resources/clj-kondo.exports/com/rpl/specter/config.edn new file mode 100644 index 0000000..15b0c99 --- /dev/null +++ b/resources/clj-kondo.exports/com/rpl/specter/config.edn @@ -0,0 +1,6 @@ +{:lint-as {com.rpl.specter/defcollector clojure.core/defn + com.rpl.specter/defdynamicnav clojure.core/defn + com.rpl.specter/defmacroalias clojure.core/def + com.rpl.specter/defnav clojure.core/defn + com.rpl.specter/defrichnav clojure.core/defn} + :hooks {:analyze-call {com.rpl.specter/recursive-path hooks.specter/recursive-path}}} diff --git a/resources/clj-kondo.exports/com/rpl/specter/hooks/specter.clj_kondo b/resources/clj-kondo.exports/com/rpl/specter/hooks/specter.clj_kondo new file mode 100644 index 0000000..04187b3 --- /dev/null +++ b/resources/clj-kondo.exports/com/rpl/specter/hooks/specter.clj_kondo @@ -0,0 +1,12 @@ +(ns hooks.specter + (:require [clj-kondo.hooks-api :as api])) + +;; (sp/recursive-path [x y] p ...) ≈ (fn [x y p] ...) +(defn recursive-path [{:keys [:node]}] + (let [[args self-sym & body] (rest (:children node)) + new-args (update args :children #(conj % self-sym)) + new-node (api/list-node + (list* (api/token-node 'fn) + new-args + body))] + {:node new-node}))