]> git.lizzy.rs Git - rust.git/blobdiff - README.md
Merge #2706
[rust.git] / README.md
index 8f676a86b0869016a0a95d79f3ca0ffd96dd61bc..deaa147ba915bdcc930b3b89011c2042079bd69b 100644 (file)
--- a/README.md
+++ b/README.md
-# libsyntax2.0
+# Rust Analyzer
 
-[![Build Status](https://travis-ci.org/matklad/libsyntax2.svg?branch=master)](https://travis-ci.org/matklad/libsyntax2)
-[![Build status](https://ci.appveyor.com/api/projects/status/j56x1hbje8rdg6xk/branch/master?svg=true)](https://ci.appveyor.com/project/matklad/libsyntax2/branch/master)
+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:
 
+https://github.com/rust-lang/compiler-team/tree/master/content/working-groups/rls-2.0
 
-libsyntax2.0 is an **experimental** parser of the Rust language,
-intended for the use in IDEs.
-[RFC](https://github.com/rust-lang/rfcs/pull/2256).
+Work on the Rust Analyzer is sponsored by
 
+[<img src="https://user-images.githubusercontent.com/1711539/58105231-cf306900-7bee-11e9-83d8-9f1102e59d29.png" alt="Ferrous Systems" width="300">](https://ferrous-systems.com/)
+- [Mozilla](https://www.mozilla.org/en-US/)
 
-## Quick Start
+## Language Server Quick Start
 
-```
-$ cargo test
-$ cargo parse < crates/libsyntax2/src/lib.rs
-```
+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:
 
-## Trying It Out
+* latest stable rust for language server itself
+* latest stable npm and VS Code for VS Code extension
 
-This installs experimental VS Code plugin
+To quickly install rust-analyzer with VS Code extension with standard setup
+(`code` and `cargo` in `$PATH`, etc), use this:
 
 ```
-$ cargo install-code
-```
-
-It's better to remove existing Rust plugins to avoid interference.
-Warning: plugin is not intended for general use, has a lot of rough
-edges and missing features (notably, no code completion). That said,
-while originally libsyntax2 was developed in IntelliJ, @matklad now
-uses this plugin (and thus, libsytax2) to develop libsyntax2, and it
-doesn't hurt too much :-)
-
-
-### Features:
-
-* syntax highlighting (LSP does not have API for it, so impl is hacky
-  and sometimes fall-backs to the horrible built-in highlighting)
-  
-* commands (`ctrl+shift+p` or keybindings)
-  - **Show Rust Syntax Tree** (use it to verify that plugin works)
-  - **Rust Extend Selection** (works with multiple cursors)
-  - **Rust Matching Brace** (knows the difference between `<` and `<`)
-  - **Rust Parent Module**
-  - **Rust Join Lines** (deals with trailing commas)
-  
-* **Go to symbol in file**
-
-* **Go to symbol in workspace** (no support for Cargo deps yet)
-
-* code actions:
-  - Flip `,` in comma separated lists
-  - Add `#[derive]` to struct/enum
-  - Add `impl` block to struct/enum
-  - Run tests at caret
-  
-* **Go to definition** ("correct" for `mod foo;` decls, index-based for functions).
-
-
-## Code Walk-Through
-
-### `crates/libsyntax2`
-
-- `yellow`, red/green syntax tree, heavily inspired [by this](https://github.com/apple/swift/tree/ab68f0d4cbf99cdfa672f8ffe18e433fddc8b371/lib/Syntax)
-- `grammar`, the actual parser
-- `parser_api/parser_impl` bridges the tree-agnostic parser from `grammar` with `yellow` trees
-- `grammar.ron` RON description of the grammar, which is used to
-  generate `syntax_kinds` and `ast` modules.
-- `algo`: generic tree algorithms, including `walk` for O(1) stack
-  space tree traversal (this is cool) and `visit` for type-driven
-  visiting the nodes (this is double plus cool, if you understand how
-  `Visitor` works, you understand libsyntax2).
-  
-
-### `crates/libeditor`
-
-Most of IDE features leave here, unlike `libanalysis`, `libeditor` is
-single-file and is basically a bunch of pure functions.
+# clone the repo
+$ git clone https://github.com/rust-analyzer/rust-analyzer && cd rust-analyzer
 
+# install both the language server and VS Code extension
+$ cargo xtask install
 
-### `crates/libanalysis`
-
-A stateful library for analyzing many Rust files as they change.
-`WorldState` is a mutable entity (clojure's atom) which holds current
-state, incorporates changes and handles out `World`s --- immutable
-consistent snapshots of `WorldState`, which actually power analysis. 
-
-
-### `crates/server`
-
-An LSP implementation which uses `libanalysis` for managing state and
-`libeditor` for actually doing useful stuff.
-
-
-### `crates/cli`
-
-A CLI interface to libsyntax
-
-### `crate/tools`
-
-Code-gen tasks, used to develop libsyntax2:
+# alternatively, install only the server. Binary name is `ra_lsp_server`.
+$ cargo xtask install --server
+```
 
-- `cargo gen-kinds` -- generate `ast` and `syntax_kinds`
-- `cargo gen-tests` -- collect inline tests from grammar
-- `cargo install-code` -- build and install VS Code extension and server
+For non-standard setup of VS Code and other editors, or if the language server
+cannot start, see [./docs/user](./docs/user).
 
-### `code`
+## Documentation
 
-VS Code plugin
+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.
 
-## Performance
+## Getting in touch
 
-Non-incremental, but seems pretty fast:
+We are on the rust-lang Zulip!
 
-```
-$ cargo build --release --package cli
-$ wc -l ~/projects/rust/src/libsyntax/parse/parser.rs
-7546 /home/matklad/projects/rust/src/libsyntax/parse/parser.rs
-$ ./target/release/cli parse < ~/projects/rust/src/libsyntax/parse/parser.rs --no-dump  > /dev/null
-parsing: 21.067065ms
-```
-
-## Getting in touch
+https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Frls-2.2E0
 
-@matklad can be found at Rust
-[discord](https://discordapp.com/invite/rust-lang), in
-#ides-and-editors.
+## Quick Links
 
+* API docs: https://rust-analyzer.github.io/rust-analyzer/ra_ide/
+* Website: https://rust-analyzer.github.io/
 
 ## License
 
-libsyntax2 is primarily distributed under the terms of both the MIT license
-and the Apache License (Version 2.0).
+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.