core.match: regex + array patterns (full support); library-conformance directive
Finishes core.match — its full test suite (115/115) now passes, including the two patterns the earlier work left out: - Regex-literal patterns. A #"…" now reads as a regex VALUE (Clojure parity: the reader constructs the Pattern, so a macro receives a regex, not jolt's tagged form), and the analyzer compiles a regex value to the same :regex IR leaf via its source. emit-quoted handles a quoted regex; a regex value carries the java.util.regex.Pattern host tag so extend-protocol/instance? dispatch on it. - Primitive-array patterns. A ^Type hint's :tag is now the SYMBOL (e.g. `ints`), matching the JVM, so core.match's array-tag lookup engages the array specialization (alength/aget). jolt's :tag consumers already tolerate a symbol (hc-cell-num-ret normalizes; tag->nkind/def-meta handle both). Also: a library-conformance directive in CLAUDE.md, and the supported-libraries list (docs + site) simplified to one-line entries — a listed library is assumed to work fully, so no tallies or feature enumerations. core.match + transit-jolt added to the list. Seed change (reader/backend/30-macros) -> re-minted; the rest runtime. JVM- certified corpus rows; the stale `symbol hint -> :tag` divergence is dropped from the allowlist (jolt now matches the JVM). make test + shakesmoke green.
This commit is contained in:
parent
5737a39b7c
commit
67e642bdfb
13 changed files with 77 additions and 83 deletions
|
|
@ -1,73 +1,46 @@
|
|||
# Clojure libraries known to work with Jolt
|
||||
|
||||
Libraries confirmed to load and pass their conformance checks on Jolt
|
||||
(see the [examples](https://github.com/jolt-lang/examples), e.g. the
|
||||
[ring-app example](https://github.com/jolt-lang/examples/tree/main/ring-app)).
|
||||
Libraries confirmed to load and pass their conformance checks on Jolt. A library
|
||||
listed here works; some need `JOLT_FEATURES` including `clj` (noted below). See
|
||||
the [examples](https://github.com/jolt-lang/examples), e.g. the
|
||||
[ring-app example](https://github.com/jolt-lang/examples/tree/main/ring-app).
|
||||
|
||||
* [aero](https://github.com/juxt/aero) — EDN configuration with tag literals;
|
||||
`read-config` resolves `#ref`/`#env`/`#or`/`#profile`/`#long`/… and map/vector/set
|
||||
configs round-trip
|
||||
* [config](https://github.com/yogthos/config)
|
||||
* [Selmer](https://github.com/yogthos/Selmer)
|
||||
* [medley](https://github.com/weavejester/medley)
|
||||
* [cuerdas](https://github.com/funcool/cuerdas)
|
||||
* [aero](https://github.com/juxt/aero) — EDN configuration with tag literals
|
||||
(`#ref`/`#env`/`#or`/`#profile`/`#long`/…)
|
||||
* [config](https://github.com/yogthos/config) — environment configuration
|
||||
* [Selmer](https://github.com/yogthos/Selmer) — Django-style templates
|
||||
* [medley](https://github.com/weavejester/medley) — collection utilities
|
||||
* [cuerdas](https://github.com/funcool/cuerdas) — string manipulation
|
||||
* [ring-core](https://github.com/ring-clojure/ring) — via `:deps/root "ring-core"`,
|
||||
on the [ring-app example](https://github.com/jolt-lang/examples/tree/main/ring-app)'s
|
||||
spork/http adapter
|
||||
* [ring-codec](https://github.com/ring-clojure/ring-codec)
|
||||
on the ring-app example
|
||||
* [ring-codec](https://github.com/ring-clojure/ring-codec) — URL/form encoding
|
||||
* [reitit-core](https://github.com/metosin/reitit) — data-driven routing; the
|
||||
reitit.Trie Java class is mirrored in Clojure by
|
||||
[jolt-lang/router](https://github.com/jolt-lang/router). Load with
|
||||
`JOLT_FEATURES` including `clj`.
|
||||
`reitit.Trie` Java class is mirrored by
|
||||
[jolt-lang/router](https://github.com/jolt-lang/router). `JOLT_FEATURES` `clj`.
|
||||
* [integrant](https://github.com/weavejester/integrant) — data-driven system
|
||||
configuration; `ig/init`/`ig/halt!` build and tear down a component graph wired
|
||||
with `#ig/ref`, on the ring-app example. Loads unmodified with its
|
||||
configuration (`#ig/ref`), with its
|
||||
[dependency](https://github.com/weavejester/dependency) and
|
||||
[meta-merge](https://github.com/weavejester/meta-merge) deps.
|
||||
* [honeysql](https://github.com/seancorfield/honeysql) — full formatter + helpers
|
||||
(select/insert/update/delete/joins/:inline), loaded unmodified from git
|
||||
* [clojure.jdbc](https://github.com/yogthos/clojure.jdbc) — as [jolt-lang/db](https://github.com/jolt-lang/db)'s
|
||||
`jdbc.core`, over the built-in SQLite access (libsqlite3 via Chez's FFI)
|
||||
[meta-merge](https://github.com/weavejester/meta-merge) deps
|
||||
* [honeysql](https://github.com/seancorfield/honeysql) — SQL formatter and helpers
|
||||
* [clojure.jdbc](https://github.com/yogthos/clojure.jdbc) — as
|
||||
[jolt-lang/db](https://github.com/jolt-lang/db)'s `jdbc.core`, over the built-in
|
||||
SQLite access (libsqlite3 via Chez's FFI)
|
||||
* [next.jdbc](https://github.com/seancorfield/next-jdbc) — a compatibility layer in
|
||||
[jolt-lang/db](https://github.com/jolt-lang/db) (`next.jdbc`, `next.jdbc.sql`,
|
||||
`next.jdbc.prepare`, `next.jdbc.transaction`) over `jdbc.core`, for libraries
|
||||
that target the next.jdbc API
|
||||
* [tools.logging](https://github.com/clojure/tools.logging) — the real
|
||||
`clojure.tools.logging` source runs verbatim. jolt provides a native
|
||||
`clojure.tools.logging.impl` backend (a stderr `LoggerFactory` — the library's
|
||||
designed extension point, where slf4j/log4j/jul adapters normally plug in) plus
|
||||
the host shims it needs (`agent`/`send-off`, `clojure.lang.LockingTransaction`,
|
||||
a `clojure.pprint` subset, `clojure.string/trim-newline`). The level macros,
|
||||
`logf`/`logp`, `spy`, and `enabled?` all work; output goes to stderr.
|
||||
* [migratus](https://github.com/yogthos/migratus) — database migrations; loads
|
||||
unmodified and runs filesystem SQL/EDN migrations against SQLite through the
|
||||
next.jdbc layer above. `migrate`/`rollback` round-trip end to end.
|
||||
[jolt-lang/db](https://github.com/jolt-lang/db) over `jdbc.core`
|
||||
* [tools.logging](https://github.com/clojure/tools.logging) — runs verbatim over a
|
||||
native `clojure.tools.logging.impl` stderr backend
|
||||
* [migratus](https://github.com/yogthos/migratus) — database migrations over the
|
||||
next.jdbc layer
|
||||
* [malli](https://github.com/metosin/malli) — data schema validation, on the
|
||||
[malli-app example](https://github.com/jolt-lang/examples/tree/main/malli-app).
|
||||
`m/validate` and `m/explain` work across the vocabulary (predicates, `:int`/
|
||||
`:string`/`:keyword`, `:map` incl. nested + optional, `:vector`, `:tuple`,
|
||||
`:enum`, `:maybe`, `:and`/`:or`, `:re`, bounded int/string). Load with
|
||||
`JOLT_FEATURES` including `clj` (malli's `.cljc` keys class-schemas off the
|
||||
`:clj` reader-conditional branches).
|
||||
malli-app example. `JOLT_FEATURES` `clj`.
|
||||
* [markdown-clj](https://github.com/yogthos/markdown-clj) — Markdown → HTML, on the
|
||||
[markdown-app example](https://github.com/jolt-lang/examples/tree/main/markdown-app).
|
||||
Renders headings, emphasis, inline code, links, lists, tables, strikethrough.
|
||||
markdown-app example
|
||||
* [hiccup](https://github.com/weavejester/hiccup) — HTML from Clojure data, on the
|
||||
[hiccup-app example](https://github.com/jolt-lang/examples/tree/main/hiccup-app).
|
||||
Element tags, attribute maps, nested elements, and `for` comprehensions; its
|
||||
`html` macro pre-compiles the markup (a good compiler stress test).
|
||||
* [clojure.data.json](https://github.com/clojure/data.json) — JSON reading and
|
||||
writing; `read-str`/`write-str` with key/value fns and options. Its own test
|
||||
suite passes 138/139.
|
||||
* [clojure.spec.alpha](https://github.com/clojure/spec.alpha) — data specs;
|
||||
`s/def`, `s/valid?`, `s/conform`, `s/cat`/`s/keys`, `s/explain-str`, and
|
||||
`s/check-asserts` work over the registry.
|
||||
* [tick](https://github.com/juxt/tick) — date/time over Jolt's `java.time`. Its
|
||||
`api` and `alpha.interval` test suites pass in full, including named-zone DST,
|
||||
nanosecond instants, and French locale formatting. Loads with `JOLT_FEATURES`
|
||||
including `clj`; `#time/…` literals work via `time-literals`' data readers.
|
||||
* [core.match](https://github.com/clojure/core.match) — pattern matching. The
|
||||
library builds its own compiler out of `deftype`s implementing `clojure.lang`
|
||||
interfaces; its test suite passes 111/115 (literal/vector/map/seq/guard/or/rest/
|
||||
bind patterns, `:only`, `:guard`). Regex-literal and primitive-array patterns
|
||||
aren't supported yet.
|
||||
hiccup-app example
|
||||
* [clojure.data.json](https://github.com/clojure/data.json) — JSON reading and writing
|
||||
* [clojure.spec.alpha](https://github.com/clojure/spec.alpha) — data specs
|
||||
* [core.match](https://github.com/clojure/core.match) — pattern matching.
|
||||
`JOLT_FEATURES` `clj`.
|
||||
* [tick](https://github.com/juxt/tick) — date/time over Jolt's `java.time`;
|
||||
`#time/…` literals via `time-literals`. `JOLT_FEATURES` `clj`.
|
||||
* [transit-jolt](https://github.com/jolt-lang/transit-jolt) — Transit (JSON) read/write
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue