X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=README.md;h=deaa147ba915bdcc930b3b89011c2042079bd69b;hb=1327aed7f6289043091aa9179282030c6f13ddbe;hp=0b7203d2c5d52cbc8e315765a92baa89fa1a06eb;hpb=113a24855f1c4d9c8c912e6d7013f34ea9d63b82;p=rust.git diff --git a/README.md b/README.md index 0b7203d2c5d..deaa147ba91 100644 --- a/README.md +++ b/README.md @@ -1,92 +1,64 @@ # Rust Analyzer -[![Build Status](https://travis-ci.org/rust-analyzer/rust-analyzer.svg?branch=master)](https://travis-ci.org/rust-analyzer/rust-analyzer) +Rust Analyzer is an **experimental** modular compiler frontend for the Rust +language. It is a part of a larger rls-2.0 effort to create excellent IDE +support for Rust. If you want to get involved, check the rls-2.0 working group +in the compiler-team repository: -Rust Analyzer is an **experimental** modular compiler frontend for the -Rust language, which aims to lay a foundation for excellent IDE -support. - -It doesn't implement much of compiler functionality yet, but the -white-space preserving Rust parser works, and there are significant -chunks of overall architecture (indexing, on-demand & lazy -computation, snapshotable world view) in place. Some basic IDE -functionality is provided via a language server. +https://github.com/rust-lang/compiler-team/tree/master/content/working-groups/rls-2.0 Work on the Rust Analyzer is sponsored by -[![Ferrous Systems](https://ferrous-systems.com/images/ferrous-logo-text.svg)](https://ferrous-systems.com/) +[Ferrous Systems](https://ferrous-systems.com/) +- [Mozilla](https://www.mozilla.org/en-US/) + +## Language Server Quick Start + +Rust Analyzer is a work-in-progress, so you'll have to build it from source, and +you might encounter critical bugs. That said, it is complete enough to provide a +useful IDE experience and some people use it as a daily driver. +To build rust-analyzer, you need: -## Quick Start +* latest stable rust for language server itself +* latest stable npm and VS Code for VS Code extension -Rust analyzer builds on Rust >= 1.31.0 and uses the 2018 edition. +To quickly install rust-analyzer with VS Code extension with standard setup +(`code` and `cargo` in `$PATH`, etc), use this: ``` -# run tests -$ cargo test +# clone the repo +$ git clone https://github.com/rust-analyzer/rust-analyzer && cd rust-analyzer -# show syntax tree of a Rust file -$ cargo run --package ra_cli parse < crates/ra_syntax/src/lib.rs +# install both the language server and VS Code extension +$ cargo xtask install -# show symbols of a Rust file -$ cargo run --package ra_cli symbols < crates/ra_syntax/src/lib.rs +# alternatively, install only the server. Binary name is `ra_lsp_server`. +$ cargo xtask install --server ``` -To try out the language server, see [these -instructions](./editors/README.md). Please note that the server is not -ready for general use yet. If you are looking for a Rust IDE that -works, use [IntelliJ -Rust](https://github.com/intellij-rust/intellij-rust) or -[RLS](https://github.com/rust-lang-nursery/rls). That being said, the -basic stuff works, and rust analyzer is developed in the rust analyzer -powered editor. - - -## Current Status and Plans - -Rust analyzer aims to fill the same niche as the official [Rust -Language Server](https://github.com/rust-lang-nursery/rls), but uses a -significantly different architecture. More details can be found [in -this -thread](https://internals.rust-lang.org/t/2019-strategy-for-rustc-and-the-rls/8361), -but the core issue is that RLS works in the "wait until user stops -typing, run the build process, save the results of the analysis" mode, -which arguably is the wrong foundation for IDE. - -Rust Analyzer is a hobby project at the moment, there's exactly zero -guarantees that it becomes production-ready one day. - -The near/mid term plan is to work independently of the main rustc -compiler and implement at least simplistic versions of name -resolution, macro expansion and type inference. The purpose is two -fold: - -* to quickly bootstrap usable and useful language server: solution - that covers 80% of Rust code will be useful for IDEs, and will be - vastly simpler than 100% solution. - -* to understand how the consumer-side of compiler API should look like - (especially it's on-demand aspects). If you have - `get_expression_type` function, you can write a ton of purely-IDE - features on top of it, even if the function is only partially - correct. Plugin in the precise function afterwards should just make - IDE features more reliable. - -The long term plan is to merge with the mainline rustc compiler, -probably around the HIR boundary? That is, use rust analyzer for -parsing, macro expansion and related bits of name resolution, but -leave the rest (including type inference and trait selection) to the -existing rustc. +For non-standard setup of VS Code and other editors, or if the language server +cannot start, see [./docs/user](./docs/user). + +## Documentation + +If you want to **contribute** to rust-analyzer or just curious about how things work +under the hood, check the [./docs/dev](./docs/dev) folder. + +If you want to **use** rust-analyzer's language server with your editor of +choice, check [./docs/user](./docs/user) folder. It also contains some tips & tricks to help +you be more productive when using rust-analyzer. ## Getting in touch -We have a Discord server dedicated to compilers and language servers -implemented in Rust: [https://discord.gg/sx3RQZB](https://discord.gg/sx3RQZB). +We are on the rust-lang Zulip! -## Contributing +https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Frls-2.2E0 -See [CONTRIBUTING.md](./CONTRIBUTING.md) and [ARCHITECTURE.md](./ARCHITECTURE.md) +## Quick Links +* API docs: https://rust-analyzer.github.io/rust-analyzer/ra_ide/ +* Website: https://rust-analyzer.github.io/ ## License