Tree-sitter grammars for OpenSpec file formats.
Alpha — grammar is functional but the API (node names, structure) may change.
| Grammar | File type | Status |
|---|---|---|
openspec_spec |
.openspec-spec |
Working |
Build the grammar package (parser .so + queries):
nix buildOutput structure:
result/
├── parser/
│ └── openspec_spec.so
└── queries/
└── openspec_spec/
├── highlights.scm
└── injections.scm
Consumers (like openspec.nvim) are responsible for placing this on neovim's runtimepath.
Enter the dev shell:
nix developGenerate the parser after changing grammar.js:
cd openspec_spec
tree-sitter generateRun the test corpus:
tree-sitter testNote: Changes to
grammar.jsmust include the regeneratedsrc/files.
tree-sitter-openspec/
├── openspec_spec/ # one directory per grammar
│ ├── grammar.js
│ ├── package.json # private, build scripts only
│ └── src/ # generated (parser.c, etc.)
├── queries/
│ └── openspec_spec/ # one directory per grammar
│ ├── highlights.scm
│ └── injections.scm
├── test/
│ └── corpus/ # test cases
├── package.json # root
├── tree-sitter.json # multi-grammar config
└── flake.nix
Follows the tree-sitter-xml multi-grammar pattern.
MIT