|
| 1 | +**Reminder: All AI usage must be disclosed in commit messages, see |
| 2 | +CONTRIBUTING.md for more details.** |
| 3 | + |
| 4 | +## Build Commands |
| 5 | + |
| 6 | +```bash |
| 7 | +cargo build # Build all crates |
| 8 | +cargo test # Run all tests |
| 9 | +cargo test -p <crate> # Run tests for a specific crate (e.g., cargo test -p hir-ty) |
| 10 | +cargo lint # Run clippy on all targets |
| 11 | +cargo xtask codegen # Run code generation |
| 12 | +cargo xtask tidy # Run tidy checks |
| 13 | +UPDATE_EXPECT=1 cargo test # Update test expectations (snapshot tests) |
| 14 | +RUN_SLOW_TESTS=1 cargo test # Run heavy/slow tests |
| 15 | +``` |
| 16 | + |
| 17 | +## Key Architectural Invariants |
| 18 | + |
| 19 | +- Typing in a function body never invalidates global derived data |
| 20 | +- Parser/syntax tree is built per-file to enable parallel parsing |
| 21 | +- The server is stateless (HTTP-like); context must be re-created from request parameters |
| 22 | +- Cancellation uses salsa's cancellation mechanism; computations panic with a `Cancelled` payload |
| 23 | + |
| 24 | +### Code Generation |
| 25 | + |
| 26 | +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). |
| 27 | + |
| 28 | +## Testing |
| 29 | + |
| 30 | +Tests are snapshot-based using `expect-test`. Test fixtures use a mini-language: |
| 31 | +- `$0` marks cursor position |
| 32 | +- `// ^^^^` labels attach to the line above |
| 33 | +- `//- minicore: sized, fn` includes parts of minicore (minimal core library) |
| 34 | +- `//- /path/to/file.rs crate:name deps:dep1,dep2` declares files/crates |
| 35 | + |
| 36 | +## Style Notes |
| 37 | + |
| 38 | +- Use `stdx::never!` and `stdx::always!` instead of `assert!` for recoverable invariants |
| 39 | +- Use `T![fn]` macro instead of `SyntaxKind::FN_KW` |
| 40 | +- Use keyword name mangling over underscore prefixing for identifiers: `crate` → `krate`, `fn` → `func`, `struct` → `strukt`, `type` → `ty` |
0 commit comments