Esy is a JS preprocessor that lets you define your own blocks: https://www.npmjs.com/package/esy-language
It's a macro system, but it doesn't overlap with function call syntax (unlike e.g. lisp). It makes it a little easier to spot macros, without a whole separate namespace (like foo! in Rust).