Преглед изворни кода

dev(lint): add :path-invalid-construct/string-join linter

rcmerci пре 2 година
родитељ
комит
40a1f5b6cd
2 измењених фајлова са 19 додато и 2 уклоњено
  1. 4 2
      .clj-kondo/config.edn
  2. 15 0
      .clj-kondo/hooks/path_invalid_construct.clj

+ 4 - 2
.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

+ 15 - 0
.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)))))