From 40a1f5b6cd6e4189d9539173f101f07e41996969 Mon Sep 17 00:00:00 2001 From: rcmerci Date: Tue, 21 Feb 2023 16:19:28 +0800 Subject: [PATCH] dev(lint): add :path-invalid-construct/string-join linter --- .clj-kondo/config.edn | 6 ++++-- .clj-kondo/hooks/path_invalid_construct.clj | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 .clj-kondo/hooks/path_invalid_construct.clj diff --git a/.clj-kondo/config.edn b/.clj-kondo/config.edn index 23289cf59f..81e5e8f1da 100644 --- a/.clj-kondo/config.edn +++ b/.clj-kondo/config.edn @@ -10,7 +10,8 @@ {:exclude [frontend.db.conn frontend.db.react logseq.db.default]}}}} :linters - {:aliased-namespace-symbol {:level :warning} + {:path-invalid-construct/string-join {:level :warning} + :aliased-namespace-symbol {:level :warning} ;; Disable until it doesn't trigger false positives on rum/defcontext :earmuffed-var-not-dynamic {:level :off} :unresolved-symbol {:exclude [goog.DEBUG @@ -108,7 +109,8 @@ :used-underscored-binding {:level :warning}} :hooks {:analyze-call {rum.core/defc hooks.rum/defc - rum.core/defcs hooks.rum/defcs}} + rum.core/defcs hooks.rum/defcs + clojure.string/join hooks.path-invalid-construct/string-join}} :lint-as {promesa.core/let clojure.core/let promesa.core/loop clojure.core/loop promesa.core/recur clojure.core/recur diff --git a/.clj-kondo/hooks/path_invalid_construct.clj b/.clj-kondo/hooks/path_invalid_construct.clj new file mode 100644 index 0000000000..6d9fffc116 --- /dev/null +++ b/.clj-kondo/hooks/path_invalid_construct.clj @@ -0,0 +1,15 @@ +(ns hooks.path-invalid-construct + "This hook try to find out those error-prone path construction expressions: + - (string/join \"/\" [...])" + (:require [clj-kondo.hooks-api :as api])) + + +(defn string-join + [{:keys [node]}] + (let [[_ sep-v & _args] (:children node)] + ;; (prn :string-join) + (when (and (api/string-node? sep-v) + (= ["/"] (:lines sep-v))) + (api/reg-finding! (assoc (meta node) + :message "don't use clojure.string/join to build a path, (use #_{:clj-kondo/ignore [:path-invalid-construct/string-join]} to ignore)" + :type :path-invalid-construct/string-join)))))