Skip to content

Instantly share code, notes, and snippets.

Created December 9, 2022 06:52
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
What would you like to do?
babashka pods から clj-kondo を使い public だけれども private にできそうな var を抽出する
(ns foo
[babashka.pods :as pods]))
;; Babashka pods として clj-kondo を読み込む
;; clj-kondo コマンドへのパスが通っている必要あり
;; もし clj-kondo コマンドを持っていない場合は Pod registry も利用可能
(pods/load-pod "clj-kondo")
;; 読み込んだ pod で提供されている ns を require
(require '[pod.borkdude.clj-kondo :as clj-kondo])
(def analysis-data
(-> {:lint ["src"]
:config {:output {:analysis true}}}
(def public-vars
(->> (:var-definitions analysis-data)
;; public なものだけにしたいので private は除外
(remove :private)
;; 必要な情報(ns名, var名)だけにする
(map #(select-keys % [:ns :name]))
(doseq [v public-vars]
(let [;; public な var を使っている箇所を抜き出す
usages (filter #(= (:name v) (:name %)) (:var-usages analysis-data))]
;; var の利用元の ns 名がすべて定義されている ns と一致するならば、それは「privateにできそうな var」
(when (every? #(= (:ns v) (:from %)) usages)
(println (format "%s/%s" (:ns v) (:name v))))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment