mirror of
https://github.com/logseq/logseq.git
synced 2026-04-25 06:35:02 +00:00
30 lines
1016 B
Clojure
30 lines
1016 B
Clojure
(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))}))))
|