HS: extend parser/runtime + new node test runner; ignore test-results/

- Parser: `--` line comments, `|` op, `result` → `the-result`, query-scoped
  `<sel> in <expr>`, `is a/an <type>` predicate, multi-`as` chaining with `|`,
  `match`/`precede` keyword aliases, `[attr]` add/toggle, between attr forms
- Runtime: per-element listener registry + hs-deactivate!, attr toggle
  variants, set-inner-html boots subtree, hs-append polymorphic on
  string/list/element, default? / array-set! / query-all-in / list-set
  via take+drop, hs-script idempotence guard
- Integration: skip reserved (me/it/event/you/yourself) when collecting vars
- Tokenizer: emit `--` comments and `|` op
- Test framework + conformance runner updates; new tests/hs-run-filtered.js
  (single-process Node runner using OCaml VM step-limit to bound infinite
  loops); generate-sx-conformance-dev.py improvements
- mcp_tree.ml + run_tests.ml: harness extensions
- .gitignore: top-level test-results/ (Playwright artifacts)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-23 07:11:07 +00:00
parent b2ae80fb21
commit 0515295317
20 changed files with 15224 additions and 8120 deletions

View File

@@ -40,7 +40,7 @@
"set attribute"
(let
((sx (hs-to-sx-from-source "set @title to 'hello'")))
(assert= (quote dom-set-attr) (first sx))
(assert= (quote hs-set-attr!) (first sx))
(assert= "title" (nth sx 2))
(assert= "hello" (nth sx 3))))
(deftest
@@ -284,12 +284,16 @@
"increment attribute"
(let
((sx (hs-to-sx-from-source "increment @count")))
(assert= (quote dom-set-attr) (first sx))))
(assert= (quote let) (first sx))
(assert= (quote do) (first (nth sx 2)))
(assert= (quote dom-set-attr) (first (nth (nth sx 2) 1)))))
(deftest
"decrement attribute"
(let
((sx (hs-to-sx-from-source "decrement @count")))
(assert= (quote dom-set-attr) (first sx)))))
(assert= (quote let) (first sx))
(assert= (quote do) (first (nth sx 2)))
(assert= (quote dom-set-attr) (first (nth (nth sx 2) 1))))))
(defsuite
"hs-live-demo-toggle"