
محلل ثابت و linter لرمز clojure الذي يثير الفرح.

شكرا جزيلا ل Clj-kondo. إنه مثل رفيق بالنسبة لي. لقد جعل المرح clojure مرة أخرى.
- @geraldodev على Clojurians Slack
يقوم CLJ-Kondo بتحليل ثابت على Clojure و ClojureScript و EDN. إنه يخبرك بالأخطاء المحتملة أثناء الكتابة (دون تنفيذ برنامجك).
يكتشف CLJ-Kondo:
def المضمنةdo let بالملفاتlet و letfn ملزمةrecur )clojure.test/deftestقبل النموذج الخاص بك يضرب الاستبدال.
يقترح العديد من توصيات دليل الأناقة ، مثل:
:else كتعبير اختبار الشامل في cond (انظر دليل نمط Clojure)seq بدلاً من (not (empty? ,,,)) (انظر دليل نمط Clojure)
لديها دعم لبناء وحدات الماكرو شائعة الاستخدام مثل clojure.core.async/alt!! ، schema.core/defn و potemkin/import-vars .
يكتشف الأخطاء الشائعة في deps.edn و bb.edn
يوفر بيانات التحليل بحيث تقوم ببناء المبيدات المخصصة الخاصة بك.
عرض جميع المبيدات المتاحة هنا.
هذا linter هو:
.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الوبر A Project Classpath:
$ 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 أو deps.edn أو build.boot :
$ mkdir -p .clj-kondo سيتم إنشاء ذاكرة التخزين المؤقت داخلها عند تشغيل clj-kondo . قبل أن تضع داخل المحرر الخاص بك ، يوصى ببناء ClassPath بأكمله لتعليم clj-kondo حول جميع المكتبات التي تستخدمها ، بما في ذلك clojure و/أو clojurecript نفسها. بعض المكتبات تأتي مع التكوينات. لاستيرادها ، تشغيل أولا:
$ clj-kondo --lint " <classpath> " --dependencies --copy-configs --skip-lint ستقوم علامة- --copy-configs بالبحث ونسخ التكوينات من التبعيات إلى دليل .clj-kondo ، أثناء linting (انظر config.md).
مع وجود التكوينات ، يمكننا الآن تحليل التبعيات بشكل صحيح:
$ clj-kondo --lint " <classpath> " --dependencies --parallel تشير علم --dependencies على أن CLJ-Kondo يستخدم لتحليل المصادر لملء ذاكرة التخزين المؤقت. عند التمكين ، ستقوم CLJ-Kondo بقمع التحذيرات وتتخطى ملفات .jar من أجل الأداء.
سيستخدم الخيار --parallel مؤشرات ترابط متعددة لتربط مصادرك ، حيث يمر بها بشكل أسرع.
ملاحظة: في الإصدار بعد 2024.05.24 يمكن إجراء نسخ التبعيات وتبني التبعيات في واحدة باستخدام:
$ clj-kondo --lint " <classpath> " --dependencies --parallel --copy-configsإنشاء أداة محددة للحصول على classpath:
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 : تم العثور على واحد أو أكثر من التحذيرات3 : تم العثور على خطأ أو أكثر إذا تم توفير --fail-level error ، فإن التحذيرات لا تؤدي إلى رمز خروج غير صفري:
0 : لم يتم العثور على أخطاء0 : تم العثور على واحد أو أكثر من التحذيرات3 : تم العثور على خطأ أو أكثر تشير جميع رموز الخروج بخلاف 0 و 2 و 3 إلى وجود خطأ بسبب وجود خطأ في CLJ-Kondo أو خطأ آخر غير متوقع وراء التحكم في CLJ-Kondo.
نظرًا لأن CLJ-Kondo هو محلل ثابت لا يحتاج إلى وقت تشغيل (JVM ، Browser ، Node.js ، إلخ). لا ينفذ الرمز الخاص بك. على هذا النحو ، يمكن أن يكون بديلاً أسرع للبيانات التي تستخدم وقت التشغيل ، مثل Eastwood. يأتي هذا النهج مع القيد الذي لا يمكن لـ CLJ-Kondo تنفيذ وحدات الماكرو الخاصة بك لأن وحدات الماكرو يمكنها استخدام ميزات تعسفية من وقت التشغيل. يتمتع CLJ-Kondo بدعم وحدات الماكرو Clojure Core وبعض المكتبات الشهيرة من المجتمع. يمكن دعم وحدات الماكرو التي لا يتم دعمها خارج المربع باستخدام التكوين. تتمثل إحدى طرق تكوين وحدات الماكرو في كتابة السنانير لهم (انظر أيضًا هذا المدونة). بالنسبة للعديد من المكتبات ، هناك بالفعل تكوين متاح يمكنك استيراده. تحقق أيضًا من تكوينات CLJ-Kondo التي تحتوي على تكوينات لمكتبات الطرف الثالث.
يمكن استدعاء CLJ-Kondo كجراب Babashka.
#! /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 والإلهامحقوق الطبع والنشر © 2019 - 2023 Michiel Borkent
موزعة بموجب ترخيص EPL ، مثل Clojure. انظر الترخيص.
يحتوي الدليل inlined على مصدر من tools.reader وهو مرخص له بموجب ترخيص EPL.
يحتوي parser الدليل على مصدر معدّل من rewrite-clj والذي يتم ترخيصه بموجب ترخيص معهد ماساتشوستس للتكنولوجيا.