Reminder: All AI usage must be disclosed in commit messages, see CONTRIBUTING.md for more details.
cargo build # Build all crates
cargo test # Run all tests
cargo test -p <crate> # Run tests for a specific crate (e.g., cargo test -p hir-ty)
cargo lint # Run clippy on all targets
cargo xtask codegen # Run code generation
cargo xtask tidy # Run tidy checks
UPDATE_EXPECT=1 cargo test # Update test expectations (snapshot tests)
RUN_SLOW_TESTS=1 cargo test # Run heavy/slow tests- Typing in a function body never invalidates global derived data
- Parser/syntax tree is built per-file to enable parallel parsing
- The server is stateless (HTTP-like); context must be re-created from request parameters
- Cancellation uses salsa's cancellation mechanism; computations panic with a
Cancelledpayload
Generated code is committed to the repo. Grammar and AST are generated from ungrammar. Run cargo test -p xtask after adding inline parser tests (// test test_name comments).
Tests are snapshot-based using expect-test. Test fixtures use a mini-language:
$0marks cursor position// ^^^^labels attach to the line above//- minicore: sized, fnincludes parts of minicore (minimal core library)//- /path/to/file.rs crate:name deps:dep1,dep2declares files/crates
- Use
stdx::never!andstdx::always!instead ofassert!for recoverable invariants - Use
T![fn]macro instead ofSyntaxKind::FN_KW - Use keyword name mangling over underscore prefixing for identifiers:
crate→krate,fn→func,struct→strukt,type→ty