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
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 testsKey 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
<p align="center">
<img
src="https://raw.githubusercontent.com/rust-lang/rust-analyzer/master/assets/logo-wide.svg"
alt="rust-analyzer logo">
</p>
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 (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
in the manual.

Quick Start
https://rust-analyzer.github.io/book/installation.html
Documentation
If you want to contribute to rust-analyzer check out the CONTRIBUTING.md or
if you are just curious about how things work under the hood, see the
Contributing section of the manual.
If you want to use rust-analyzer's language server with your editor of
choice, check the manual.
It also contains some tips & tricks to help you be more productive when using rust-analyzer.
Security and Privacy
See the security and
privacy 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 and LICENSE-MIT for details.