Created
December 9, 2022 06:52
-
-
Save liquidz/68fbb6faaa3aa52645c1b7145dab60e4 to your computer and use it in GitHub Desktop.
babashka pods から clj-kondo を使い public だけれども private にできそうな var を抽出する
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns foo | |
(:require | |
[babashka.pods :as pods])) | |
;; Babashka pods として clj-kondo を読み込む | |
;; clj-kondo コマンドへのパスが通っている必要あり | |
;; もし clj-kondo コマンドを持っていない場合は Pod registry も利用可能 | |
;; https://github.com/babashka/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}}} | |
(clj-kondo/run!) | |
(:analysis))) | |
(def public-vars | |
(->> (:var-definitions analysis-data) | |
;; public なものだけにしたいので private は除外 | |
(remove :private) | |
;; 必要な情報(ns名, var名)だけにする | |
(map #(select-keys % [:ns :name])) | |
(distinct))) | |
(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