# Repository: rust-lang/rust-analyzer # Stars: 16271 ## CLAUDE.md **Reminder: All AI usage must be disclosed in commit messages, see CONTRIBUTING.md for more details.** ## Build Commands ```bash cargo build # Build all crates cargo test # Run all tests cargo test -p # 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 ``` ## Key Architectural Invariants - 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 `Cancelled` payload ### Code Generation 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). ## Testing Tests are snapshot-based using `expect-test`. Test fixtures use a mini-language: - `$0` marks cursor position - `// ^^^^` labels attach to the line above - `//- minicore: sized, fn` includes parts of minicore (minimal core library) - `//- /path/to/file.rs crate:name deps:dep1,dep2` declares files/crates ## Style Notes - Use `stdx::never!` and `stdx::always!` instead of `assert!` for recoverable invariants - Use `T![fn]` macro instead of `SyntaxKind::FN_KW` - Use keyword name mangling over underscore prefixing for identifiers: `crate` → `krate`, `fn` → `func`, `struct` → `strukt`, `type` → `ty` ## README.md

rust-analyzer logo

rust-analyzer is a language server that provides IDE functionality for writing Rust programs. You can use it with any editor that supports the [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) (VS Code, Vim, Emacs, Zed, etc). rust-analyzer features include go-to-definition, find-all-references, refactorings and code completion. rust-analyzer also supports integrated formatting (with rustfmt) and integrated diagnostics (with rustc and clippy). Internally, rust-analyzer is structured as a set of libraries for analyzing Rust code. See [Architecture](https://rust-analyzer.github.io/book/contributing/architecture.html) in the manual. [![codecov](https://codecov.io/github/rust-lang/rust-analyzer/graph/badge.svg)](https://app.codecov.io/github/rust-lang/rust-analyzer/tree/master) ## Quick Start https://rust-analyzer.github.io/book/installation.html ## Documentation If you want to **contribute** to rust-analyzer check out the [CONTRIBUTING.md](./CONTRIBUTING.md) or if you are just curious about how things work under the hood, see the [Contributing](https://rust-analyzer.github.io/book/contributing) section of the manual. If you want to **use** rust-analyzer's language server with your editor of choice, check [the manual](https://rust-analyzer.github.io/book/). It also contains some tips & tricks to help you be more productive when using rust-analyzer. ## Security and Privacy See the [security](https://rust-analyzer.github.io/book/security.html) and [privacy](https://rust-analyzer.github.io/book/privacy.html) sections of the manual. ## Communication For usage and troubleshooting requests, please use "IDEs and Editors" category of the Rust forum: https://users.rust-lang.org/c/ide/14 For questions about development and implementation, join rust-analyzer working group on Zulip: https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Frust-analyzer ## Quick Links * Website: https://rust-analyzer.github.io/ * Metrics: https://rust-analyzer.github.io/metrics/ * API docs: https://rust-lang.github.io/rust-analyzer/ide/ * Changelog: https://rust-analyzer.github.io/thisweek ## License rust-analyzer is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0). See [LICENSE-APACHE](LICENSE-APACHE) and [LICENSE-MIT](LICENSE-MIT) for details.