Skip to content

Commit e6767c0

Browse files
committed
Add kondo support for potemkin and stream macros
Adds clj-kondo support for the deftype+ and def-sink families of macros.
1 parent d709a7e commit e6767c0

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed

.clj-kondo/config.edn

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{:lint-as {manifold.utils/definterface+ clojure.core/definterface
2+
manifold.utils/deftype+ clojure.core/deftype
3+
manifold.utils/defrecord+ clojure.core/defrecord
4+
manifold.utils/defprotocol+ clojure.core/defprotocol
5+
manifold.stream.core/def-source clojure.core/deftype
6+
manifold.stream.core/def-sink clojure.core/deftype
7+
manifold.stream.core/def-sink+source clojure.core/deftype}
8+
9+
:hooks {:analyze-call
10+
{manifold.stream.core/def-source manifold.hooks/def-sink-or-source
11+
manifold.stream.core/def-sink manifold.hooks/def-sink-or-source
12+
manifold.stream.core/def-sink+source manifold.hooks/def-sink-or-source}}
13+
14+
15+
:config-in-call {manifold.stream.core/def-sink+source
16+
{:linters {:redefined-var {:level :off}}}
17+
18+
manifold.stream.core/def-sink
19+
{:linters {:redefined-var {:level :off}}}
20+
21+
manifold.stream.core/def-source
22+
{:linters {:redefined-var {:level :off}}}}
23+
24+
:config-paths ["../resources/clj-kondo.exports/manifold/manifold/"]}

.clj-kondo/manifold/hooks.clj

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
(ns manifold.hooks
2+
(:require [clj-kondo.hooks-api :as api]))
3+
4+
(defn- cons-vector-node
5+
[node parent]
6+
(api/vector-node (cons node (:children parent))))
7+
8+
(defn def-sink-or-source [call]
9+
(let [[name bindings & body] (-> call :node :children rest)
10+
extended-bindings
11+
(cons-vector-node (api/token-node 'lock) bindings)]
12+
13+
{:node
14+
(api/list-node
15+
(list
16+
(api/token-node 'do)
17+
18+
(api/list-node
19+
(list*
20+
(api/token-node 'deftype)
21+
name
22+
extended-bindings
23+
body))
24+
25+
(api/list-node
26+
(list
27+
(api/token-node 'defn)
28+
(api/token-node (symbol (str "->" (:string-value name))))
29+
bindings
30+
))))}))

0 commit comments

Comments
 (0)