Files
rose-ash/sx/sx/spec-introspect/spec-compute-stats.sx
giles 4f02f82f4e HS parser: fix number+comparison keyword collision, eval-hs uses hs-compile
Parser: skip unit suffix when next ident is a comparison keyword
(starts, ends, contains, matches, is, does, in, precedes, follows).
Fixes "123 starts with '12'" returning "123starts" instead of true.

eval-hs: use hs-compile directly instead of hs-to-sx-from-source with
"return " prefix, which was causing the parser to consume the comparison
as a string suffix.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 11:29:01 +00:00

35 lines
1.0 KiB
Plaintext

(define spec-compute-stats
(fn
(sections source)
(let
((total 0)
(pure 0)
(mutation 0)
(io 0)
(render 0)
(lines (len (split source "\n"))))
(for-each
(fn
(section)
(for-each
(fn
(d)
(set! total (inc total))
(if
(empty? (get d "effects"))
(set! pure (inc pure))
(for-each
(fn
(eff)
(cond
(= eff "mutation")
(set! mutation (inc mutation))
(= eff "io")
(set! io (inc io))
(= eff "render")
(set! render (inc render))))
(get d "effects"))))
(get section "defines")))
sections)
{:lines lines :io-count io :render-count render :pure-count pure :mutation-count mutation :test-total 0 :total-defines total})))