Skip to content

Commit 8f36fad

Browse files
authored
Merge pull request #21732 from Wilfred/add_claude_rules
internal: Define rules for LLMs
2 parents c12d719 + ef3ab9a commit 8f36fad

2 files changed

Lines changed: 41 additions & 0 deletions

File tree

AGENTS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
CLAUDE.md

CLAUDE.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
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

Comments
 (0)