Skip to content

Repository files navigation

tree-sitter-mcfunction

A tree-sitter grammar for Minecraft Bedrock .mcfunction files.

Overview

Minimal grammar focused on syntax highlighting. Designed to pair with the Rockide language server, which handles semantic features (completion, hover, goto-definition) via its own parser. Scope is Bedrock commands only — Java Edition commands are intentionally omitted.

Node Types

Node Description
command A command line: command_name + arguments
command_name First token (one of 85 Bedrock commands)
comment Single-hash comment: # ...
region_comment Double-hash comment: ## ... (for fold markers)
selector Target selector: @s, @e[type=...]
coordinate Relative/local position: ~, ~5, ^-3
number Integer or decimal
string Double-quoted
boolean true / false
resource_location Namespaced identifier: minecraft:stone

Installation

Zed

Install the Rockide for Zed extension — it bundles this grammar.

Neovim / Helix / Other

Install via your editor's tree-sitter plugin. Highlight queries are in queries/highlights.scm.

Node

npm install tree-sitter-mcfunction
const Parser = require("tree-sitter");
const mcfunction = require("tree-sitter-mcfunction");

const parser = new Parser();
parser.setLanguage(mcfunction);
const tree = parser.parse("say Hello\n");
console.log(tree.rootNode.toString());

Rust

Add to Cargo.toml:

[dependencies]
tree-sitter = "0.22"
tree-sitter-mcfunction = "0.1"
use tree_sitter::Parser;
use tree_sitter_mcfunction::language;

let mut parser = Parser::new();
parser.set_language(&language()).expect("Error loading grammar");
let tree = parser.parse("say Hello\n", None).unwrap();
println!("{}", tree.root_node().to_sexp());

Development

Prerequisites: Node.js 18+.

Command Purpose
npm run sync-commands Re-scrape Bedrock command list from Microsoft docs
npm run generate Regenerate parser from grammar.js
npx tree-sitter test Run corpus tests
npx tree-sitter parse <file> Parse a file and print its tree

src/commands.json is generated, not hand-edited. The grammar reads it at generation time. To check for new commands, run npm run sync-commands or trigger the Sync Commands workflow (manual workflow_dispatch) — it opens a PR automatically if anything changed.

Corpus tests live in test/corpus/. Run npx tree-sitter test -u to update expected trees after grammar changes.

License

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages