enhance: add logseq.common.defkeywords

This commit is contained in:
rcmerci
2025-01-08 21:21:36 +08:00
parent f5ffcf1d04
commit 7b9ae93982
18 changed files with 162 additions and 224 deletions

View File

@@ -12,6 +12,7 @@
:linters
{:path-invalid-construct/string-join {:level :info}
:defkeywords/invalid-arg {:level :warning}
:regex-checks/double-escaped-regex {:level :warning}
:aliased-namespace-symbol {:level :warning}
:shadowed-var {:level :warning
@@ -204,7 +205,8 @@
:hooks {:analyze-call {rum.core/defc hooks.rum/defc
rum.core/defcs hooks.rum/defcs
clojure.string/join hooks.path-invalid-construct/string-join
clojure.string/replace hooks.regex-checks/double-escaped-regex}}
clojure.string/replace hooks.regex-checks/double-escaped-regex
logseq.common.defkeywords/defkeywords hooks.defkeywords/defkeywords}}
:lint-as {promesa.core/let clojure.core/let
promesa.core/loop clojure.core/loop
promesa.core/recur clojure.core/recur
@@ -220,7 +222,7 @@
frontend.test.helper/deftest-async clojure.test/deftest
frontend.worker.rtc.idb-keyval-mock/with-reset-idb-keyval-mock cljs.test/async
frontend.react/defc clojure.core/defn
frontend.common.schema-register/defkeyword cljs.spec.alpha/def}
logseq.common.defkeywords/defkeyword cljs.spec.alpha/def}
:skip-comments true
:output {:progress true
:exclude-files ["src/test/docs-0.10.9/"]}}

View File

@@ -0,0 +1,29 @@
(ns hooks.defkeywords
(:require [clj-kondo.hooks-api :as api]))
(defn defkeywords
[{:keys [node]}]
(let [[_ & keyvals] (:children node)
kw->v (partition 2 keyvals)
kws (map first kw->v)]
(cond
(odd? (count keyvals))
(api/reg-finding!
(assoc (meta node)
:message "Require even number of args"
:type :defkeywords/invalid-arg))
(not (every? (comp qualified-keyword? api/sexpr) kws))
(api/reg-finding!
(assoc (meta node)
:message "Should use qualified-keywords"
:type :defkeywords/invalid-arg))
:else
(let [new-node (api/list-node
(map (fn [k]
(api/list-node
[(api/token-node 'logseq.common.defkeywords/defkeyword)
k
(api/token-node "")]))
kws))]
{:node (with-meta new-node
(meta node))}))))