Tree-sitter grammar for LUMOS - a type-safe schema language for Solana development.
- Fast parsing: Incremental, error-tolerant parsing
- Syntax highlighting: Accurate highlighting for all LUMOS syntax
- Editor integration: Works with Neovim, Emacs, and other Tree-sitter-enabled editors
- Complete coverage: Supports structs, enums, attributes, all types, and comments
{
"nvim-treesitter/nvim-treesitter",
opts = {
ensure_installed = { "lumos" },
},
}git clone https://github.com/getlumos/tree-sitter-lumos
cd tree-sitter-lumos
npm install
npm run build- Node.js (v16+)
- npm
- tree-sitter-cli
# Install dependencies
npm install
# Generate parser
npm run build
# Run tests
npm test
# Parse a file
npm run parse examples/player.lumostree-sitter-lumos/
├── grammar.js # Grammar definition
├── queries/
│ └── highlights.scm # Syntax highlighting queries
├── test/
│ └── corpus/ # Test cases
│ ├── struct.txt # Struct tests
│ └── enum.txt # Enum tests
├── src/ # Generated parser (C code)
└── bindings/ # Language bindings
-
Structs: With fields and attributes
#[solana] #[account] struct Player { wallet: PublicKey, score: u64, } -
Enums: Unit, tuple, and struct variants
enum GameState { Active, Paused, Finished(u64), Custom { reason: String }, } -
Types:
- Primitives:
u8,u16,u32,u64,u128,i8-i128,bool,String - Solana types:
PublicKey,Signature - Complex:
Vec<T>,Option<T>,[T]
- Primitives:
-
Attributes:
#[solana],#[account], custom attributes with values -
Comments: Line (
//) and block (/* */)
Run the test suite:
npm testAdd new test cases in test/corpus/:
================
Test name
================
<LUMOS code>
---
<Expected parse tree>
Use with nvim-treesitter:
require('nvim-treesitter.configs').setup({
ensure_installed = { "lumos" },
highlight = { enable = true },
})Use with tree-sitter-mode
Add to languages.toml:
[[language]]
name = "lumos"
scope = "source.lumos"
file-types = ["lumos"]
roots = []
comment-token = "//"
grammar = "lumos"Contributions welcome! Please:
- Add test cases for new syntax
- Run
npm testbefore submitting - Update README if adding features
Dual-licensed under MIT OR Apache-2.0
Part of the LUMOS ecosystem 🚀