
喜びを引き起こすClojureコード用の静的分析装置とリナー。

Clj-Kondoに感謝します。それは私にとって仲間のようなものです。それは再びClojureを楽しくしました。
- Clojurians Slackの@Geraldodev
Clj-Kondoは、Clojure、ClojureScript、およびEDNで静的分析を実行します。タイピング中の潜在的なエラーについて通知します(プログラムを実行せずに)。
Clj-Kondoは検出します:
def式do 、包みletletおよびletfnバインディングコールのrecurを含む)clojure.test/deftestのアサーションがありませんフォームがREPLに当たる前に。
次のようないくつかのスタイルガイドの推奨事項を提案します。
:else 、 condのキャッチオールテスト式として(Clojure Style Guideを参照)(not (empty? ,,,))の代わりにseqを使用します(Clojure Style Guideを参照)
clojure.core.async/alt!! 、 schema.core/defnおよびpotemkin/import-vars 。
deps.ednおよびbb.ednの一般的なエラーを検出します
分析データを提供して、独自のカスタムリナーを構築します。
ここで利用可能なすべてのリンターを表示します。
このリナーは次のとおりです。
.clj 、 .cljs 、 .cljcおよび.ednファイルと互換性インタラクティブな遊び場でclj-kondoをお試しください。
話を見る:
このプロジェクトは、GitHubスポンサー、Opencollective、KO-Fi、またはClojuristsを介して一緒に間接的にサポートできます。
stdinの糸くず:
$ echo ' (def x (def x 1)) ' | clj-kondo --lint -
<stdin>:1:8: warning: inline defファイルを癒す:
$ echo ' (def x (def x 1)) ' > /tmp/foo.clj
$ clj-kondo --lint /tmp/foo.clj
/tmp/foo.clj:1:8: warning: inline defディレクトリの糸くず:
$ clj-kondo --lint src
src/clj_kondo/test.cljs:7:1: warning: redundant do
src/clj_kondo/calls.clj:291:3: error: Wrong number of args (1) passed to clj-kondo.calls/analyze-callsプロジェクトクラスパスを癒す:
$ clj-kondo --lint " $( lein classpath ) "ヘルプ:
$ clj-kondo --help
clj-kondo v2024.11.14
Options:
--lint <file>: a file can either be a normal file, directory or classpath. In the
case of a directory or classpath, only .clj, .cljs and .cljc will be
processed. Use - as filename for reading from stdin.
--lang <lang>: if lang cannot be derived from the file extension this option will be
used. Supported values: clj, cljs, cljc.
--filename <file>: in case stdin is used for linting, use this to set the
reported filename.
--cache-dir: when this option is provided, the cache will be resolved to this
directory. If --cache is false, this option will be ignored.
--cache: if false, won't use cache. Otherwise, will try to resolve cache
using `--cache-dir`. If `--cache-dir` is not set, cache is resolved using the
nearest `.clj-kondo` directory in the current and parent directories.
--config <config>: extra config that is merged. May be a file or an EDN expression. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/config.md.
--config-dir <config-dir>: use this config directory instead of auto-detected
.clj-kondo dir.
--parallel: lint sources in parallel.
--dependencies: don't report any findings. Useful for populating cache while linting dependencies.
--copy-configs: copy configs from dependencies while linting.
--skip-lint: skip lint/analysis, still check for other tasks like copy-configs.
--fail-level <level>: minimum severity for exit with error code. Supported values:
warning, error. The default level if unspecified is warning.
--report-level <level>: minimum severity for which to report. Supported values:
info, warning, error. The default level if unspecified is info.
--debug: print debug information. プロジェクトの名前空間全体の糸くずエラーを検出するには、キャッシュが必要です。 Clj-Kondoにどこで作成するかを知らせるには、プロジェクトのルートで.clj-kondoディレクトリを作成します。 project.cljと同じレベルで、clj、 deps.edn 、またはbuild.boot :
$ mkdir -p .clj-kondo clj-kondoを実行すると、キャッシュが内部に作成されます。編集者内に並ぶ前に、ClojureやClojurescript自体を含む、使用しているすべてのライブラリについてclj-kondo教えるためにClassPath全体を並べることをお勧めします。一部のライブラリには構成が付いています。それらをインポートするには、最初に実行します。
$ clj-kondo --lint " <classpath> " --dependencies --copy-configs --skip-lint --copy-configsフラグは、依存関係から.clj-kondoディレクトリへの構成を検索およびコピーし、糸くず(config.mdを参照)。
構成が整っていれば、依存関係を適切に分析できます。
$ clj-kondo --lint " <classpath> " --dependencies --parallel --dependenciesフラグは、CLJ-Kondoがソースを分析してキャッシュを埋めるために使用されていることを示しています。有効になると、Clj-Kondoは警告を抑制し、すでに並んでいる.jarファイルをスキップしてパフォーマンスをスキップします。
--parallelオプションは、複数のスレッドを使用してソースを並べ、それらをより速く通過します。
注: 2024.05.24以降のバージョンでは、コピー設定と糸くずの依存関係を1回使用して実行できます。
$ clj-kondo --lint " <classpath> " --dependencies --parallel --copy-configsクラスパスを取得するためのツール固有の方法を構築します:
lein classpathboot with-cp -w -f -clojure -Spathnpx shadow-cljs classpathしたがって、 leinにとってコマンド全体は次のとおりです。
$ clj-kondo --lint "$(lein classpath)" --dependencies --parallel --copy-configs
これで、エディター統合を使用してシングルファイルを並べる準備ができました。エディターでファイルを編集したときに何が起こるかのシミュレーション:
$ echo ' (select-keys) ' | clj-kondo --lang cljs --lint -
<stdin>:1:1: error: Wrong number of args (0) passed to cljs.core/select-keys Clj-Kondoは、キャッシュを介してClojureScriptのバージョンについて知っているので、 select-keysに合格した引数の数が無効であることを検出します。ファイルを編集するたびに、キャッシュが段階的に更新されるため、Clj-Kondoに書いたばかりの新しい機能について通知されます。
別のディレクトリを使用してキャッシュを読み書きする場合は、 --cache-dirオプションを使用します。 .clj-kondoディレクトリがある場合でもキャッシュを無効にするには、 --cache falseを使用します。
終了コードは--fail-level <level>オプションで制御できます。デフォルトの失敗レベルは、次のように出口コードを返すwarningです。
0 :エラーや警告は見つかりませんでした2 :1つ以上の警告が見つかりました3 :1つ以上のエラーが見つかりました--fail-level errorが提供されている場合、警告はゼロ以外の出口コードにつながりません。
0 :エラーは見つかりませんでした0 :1つ以上の警告が見つかりました3 :1つ以上のエラーが見つかりました0以外のすべての出口コードは2 CLJ-Kondoのバグまたは3 -Kondoの制御を超えたその他の予期しないエラーのためにエラーを示しています。
CLJ-Kondoは静的アナライザーであるため、ランタイム(JVM、ブラウザー、node.jsなど)は必要ありません。コードを実行しません。そのため、イーストウッドのようなランタイムを使用するリンターのより高速な代替品になる可能性があります。このアプローチには、マクロがランタイムから任意の機能を使用できるため、CLJ-Kondoがマクロを実行できないという制限があります。 Clj-Kondoは、Clojure Core Macrosとコミュニティの人気のあるライブラリをサポートしています。箱から出してサポートされていないマクロは、構成を使用してサポートできます。マクロを構成する方法の1つは、彼らのためにフックを書くことです(このブログ投稿も参照)。多くのライブラリには、インポートできる構成が既に利用可能です。また、サードパーティライブラリの構成を含むCLJ-Kondo構成もご覧ください。
Clj-KondoはBabashka Podとして呼び出すことができます。
#! /usr/bin/env bb
( ns script
( :require [babashka.pods :as pods]))
( pods/load-pod " clj-kondo " )
( require '[pod.borkdude.clj-kondo :as clj-kondo])
( clj-kondo/merge-configs
'{ :linters { :unresolved-symbol { :exclude [( foo1.bar )]}}}
'{ :linters { :unresolved-symbol { :exclude [( foo2.bar )]}}})
; ;=> {:linters {:unresolved-symbol {:exclude [(foo1.bar) (foo2.bar)]}}}
( -> ( clj-kondo/run! { :lint [ " src " ]})
:summary )
; ;=> {:error 0, :warning 0, :info 0, :type :summary, :duration 779} var-info.ednとインスピレーションのイーストウッドCopyright©2019-2023 Michiel Borkent
Clojureと同じEPLライセンスの下で配布されます。ライセンスを参照してください。
inlinedディレクトリには、EPLライセンスに基づいてライセンスされているtools.readerのソースが含まれています。
ディレクトリparserは、MITライセンスに基づいてライセンスされているrewrite-cljの変更されたソースが含まれています。