tree-sitter-mf2
v0.1.4
Published
tree-sitter grammar for ICU MessageFormat 2.0 (MF2) messages
Maintainers
Readme
Tree-sitter-mf2
tree-sitter grammar for ICU MessageFormat 2.0 (MF2).
Status
- Passes the official MF2 WG syntax conformance suite: 247/247 (114 valid, 133 invalid-input tests). The runner lives at
test/conformance/runner.jsand is part ofnpm test. - Full set of editor queries: highlights, locals, folds, indents, injections, tags.
- Native Node binding + WASM both ship.
Regenerating after a grammar edit
npm install # once, pulls tree-sitter-cli into node_modules
./scripts/build.sh # regenerate src/ + wasm/ + run testsNeeds emscripten on PATH for the WASM build, OR a running Docker / Podman (tree-sitter CLI can run emscripten inside a container as a fallback — open -a Docker on macOS if Docker Desktop is installed but not running).
After a regeneration, both the source changes AND the regenerated src/ + wasm/ artefacts need to be committed. Downstream consumers vendor the checked-in artefacts; they do not regenerate on their own builds.
Local development
npm install # tree-sitter-cli into node_modules
./node_modules/.bin/tree-sitter test # run corpus tests
./node_modules/.bin/tree-sitter parse FILE # parse a file and print the treeThe test corpus under test/corpus/ is the same format used by the tree-sitter CLI. Add new tests by appending to the existing .txt files (see the format in any of them — ====== name ====== blocks).
What is in this repo
mf2_treesitter/
├── grammar.js # grammar source of truth (hand-edited)
├── src/ # generated by `tree-sitter generate`
│ ├── grammar.json
│ ├── node-types.json
│ ├── parser.c
│ └── tree_sitter/parser.h
├── wasm/
│ └── tree-sitter-mf2.wasm # generated by `tree-sitter build --wasm`
├── queries/ # editor queries (language-agnostic)
│ ├── highlights.scm # syntax highlighting
│ ├── locals.scm # lexical scoping (goto-definition)
│ ├── folds.scm # foldable regions
│ ├── indents.scm # auto-indent rules
│ ├── injections.scm # language injections (minimal; see below)
│ └── tags.scm # symbol outline / ctags
├── bindings/
│ └── node/ # native Node.js binding (node-tree-sitter)
│ ├── binding.cc
│ ├── index.js
│ └── index.d.ts
├── binding.gyp # node-gyp config for the Node binding
├── test/
│ ├── corpus/ # tree-sitter CLI test corpus (16 cases)
│ └── conformance/ # MF2 WG official suite (247 cases)
│ ├── syntax.json
│ ├── syntax-errors.json
│ └── runner.js # Node runner, invoked by `npm test`
├── .github/workflows/ # CI: corpus tests, drift check, WASM build, pack
├── scripts/
│ └── build.sh # regen + wasm + test, all in one
├── package.json # npm metadata (published as `tree-sitter-mf2`)
├── tree-sitter.json # tree-sitter CLI project metadata
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE # Apache-2.0
└── README.mdLicence
Apache-2.0. See LICENSE.
