Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pez/taplet
Clojure/ClojureScript utilities for tapping things. let> macro, and #t reader tag
https://github.com/pez/taplet
clojure clojurescript macro repl
Last synced: about 2 months ago
JSON representation
Clojure/ClojureScript utilities for tapping things. let> macro, and #t reader tag
- Host: GitHub
- URL: https://github.com/pez/taplet
- Owner: PEZ
- License: mit
- Created: 2021-03-16T17:50:10.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2023-10-06T21:03:38.000Z (over 1 year ago)
- Last Synced: 2024-11-15T18:39:48.977Z (2 months ago)
- Topics: clojure, clojurescript, macro, repl
- Language: Clojure
- Homepage:
- Size: 66.4 KB
- Stars: 32
- Watchers: 7
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# taplet
Utilities for tapping Clojure forms.
1. A Clojure/ClojureScript macro, named `let>` that works like `let`, and also will `tap>` the let box (that's what I call that bininding vector).
2. A reader tag, `#t` that will tap the tagged form.## Usage
Dependency
``` clojure
;; deps.edn
{pez/taplet {:mvn/version "1.0.62"}};; Leiningen
[pez/taplet "1.0.62"]
```## let>
Use `let>` wherever you have a `let` that you want to tap. Optionally label the taps using `{:let> :some-label}` as metadata for the binding vector.
```clojure
(comment
(require '[pez.taplet :refer [let>]])(add-tap (partial println "tap>")) ;; Only for observability here
(let> [x 1
y 2
coords {:x x :y y}]
coords) ;; => {:x 1, :y 2}
;; tap> [x 1 y 2 coords {:x 1, :y 2}](let> ^{:let> :labeled-taps} [x 1
y 2
coords {:x x :y y}]
coords) ;; => {:x 1, :y 2}
;; tap> [:labeled-taps x 1 y 2 coords {:x 1, :y 2}](let> [x 1
{:keys [z] :as y} {:z 2}
[a [b {:keys [c d]}]] [:foo [:bar {:c :baz :d :gaz}]]]
[x z y a b c d]) ;; => [1 2 {:z 2} :foo :bar :baz :gaz]
;; tap> [x 1 y {:z 2} z 2 a :foo b :bar c :baz d :gaz]:rcf)
```## #t
To tap any value, prepend it with `#t`. You'll need to “install” the reader tag once per
REPL session. If you plan to leave `#t` in the code (or plan to sometimes forget to
remove it), you could consider adding it to a file that is always loaded early in app
the app start. (E.g. The topmost level namespace.)``` clojure
(comment
(require '[pez.hasht]) ;; Only needed to be done once per REPL session(add-tap (partial println "tap>")) ;; Only for observability here
#t (let [x 1
y 2
coords {:x x :y y}]
(:x #t coords)) ;; => 1
;; tap> {:x 1, :y 2}
;; tap> 1
:rcf)
```## License
MIT License, see LICENSE file