aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/dev/architecture.md7
-rw-r--r--docs/user/manual.adoc90
2 files changed, 91 insertions, 6 deletions
diff --git a/docs/dev/architecture.md b/docs/dev/architecture.md
index 7a88ebc0f..081ee5b9d 100644
--- a/docs/dev/architecture.md
+++ b/docs/dev/architecture.md
@@ -372,11 +372,11 @@ Tests which directly call various API functions are a liability, because they ma
372So most of the tests look like this: 372So most of the tests look like this:
373 373
374```rust 374```rust
375#[track_caller]
375fn check(input: &str, expect: expect_test::Expect) { 376fn check(input: &str, expect: expect_test::Expect) {
376 // The single place that actually exercises a particular API 377 // The single place that actually exercises a particular API
377} 378}
378 379
379
380#[test] 380#[test]
381fn foo() { 381fn foo() {
382 check("foo", expect![["bar"]]); 382 check("foo", expect![["bar"]]);
@@ -397,6 +397,11 @@ There's no additional checks in CI, formatting and tidy tests are run with `carg
397 397
398**Architecture Invariant:** tests do not depend on any kind of external resources, they are perfectly reproducible. 398**Architecture Invariant:** tests do not depend on any kind of external resources, they are perfectly reproducible.
399 399
400
401### Performance Testing
402
403TBA, take a look at the `metrics` xtask and `#[test] fn benchmark_xxx()` functions.
404
400### Error Handling 405### Error Handling
401 406
402**Architecture Invariant:** core parts of rust-analyzer (`ide`/`hir`) don't interact with the outside world and thus can't fail. 407**Architecture Invariant:** core parts of rust-analyzer (`ide`/`hir`) don't interact with the outside world and thus can't fail.
diff --git a/docs/user/manual.adoc b/docs/user/manual.adoc
index 10d4fd606..a2c7f56b3 100644
--- a/docs/user/manual.adoc
+++ b/docs/user/manual.adoc
@@ -194,6 +194,8 @@ $ pacman -S rust-analyzer
194 194
195=== Emacs 195=== Emacs
196 196
197Note this excellent https://robert.kra.hn/posts/2021-02-07_rust-with-emacs/[guide] from https://github.com/rksm[@rksm].
198
197Prerequisites: You have installed the <<rust-analyzer-language-server-binary,`rust-analyzer` binary>>. 199Prerequisites: You have installed the <<rust-analyzer-language-server-binary,`rust-analyzer` binary>>.
198 200
199Emacs support is maintained as part of the https://github.com/emacs-lsp/lsp-mode[Emacs-LSP] package in https://github.com/emacs-lsp/lsp-mode/blob/master/lsp-rust.el[lsp-rust.el]. 201Emacs support is maintained as part of the https://github.com/emacs-lsp/lsp-mode[Emacs-LSP] package in https://github.com/emacs-lsp/lsp-mode/blob/master/lsp-rust.el[lsp-rust.el].
@@ -307,6 +309,52 @@ EOF
307 309
308See https://sharksforarms.dev/posts/neovim-rust/ for more tips on getting started. 310See https://sharksforarms.dev/posts/neovim-rust/ for more tips on getting started.
309 311
312==== vim-lsp
313
314vim-lsp is installed by following https://github.com/prabirshrestha/vim-lsp[the plugin instructions].
315It can be as simple as adding this line to your `.vimrc`:
316
317[source,vim]
318----
319Plug 'prabirshrestha/vim-lsp'
320----
321
322Next you need to register the `rust-analyzer` binary.
323If it is available in `$PATH`, you may want to add this to your `.vimrc`:
324
325[source,vim]
326----
327if executable('rust-analyzer')
328 au User lsp_setup call lsp#register_server({
329 \ 'name': 'Rust Language Server',
330 \ 'cmd': {server_info->['rust-analyzer']},
331 \ 'whitelist': ['rust'],
332 \ })
333endif
334----
335
336There is no dedicated UI for the server configuration, so you would need to send any options as a value of the `initialization_options` field, as described in the <<_configuration,Configuration>> section.
337Here is an example of how to enable the proc-macro support:
338
339[source,vim]
340----
341if executable('rust-analyzer')
342 au User lsp_setup call lsp#register_server({
343 \ 'name': 'Rust Language Server',
344 \ 'cmd': {server_info->['rust-analyzer']},
345 \ 'whitelist': ['rust'],
346 \ 'initialization_options': {
347 \ 'cargo': {
348 \ 'loadOutDirsFromCheck': v:true,
349 \ },
350 \ 'procMacro': {
351 \ 'enable': v:true,
352 \ },
353 \ },
354 \ })
355endif
356----
357
310=== Sublime Text 3 358=== Sublime Text 3
311 359
312Prerequisites: You have installed the <<rust-analyzer-language-server-binary,`rust-analyzer` binary>>. 360Prerequisites: You have installed the <<rust-analyzer-language-server-binary,`rust-analyzer` binary>>.
@@ -331,17 +379,49 @@ If you get an error saying `No such file or directory: 'rust-analyzer'`, see the
331GNOME Builder 3.37.1 and newer has native `rust-analyzer` support. 379GNOME Builder 3.37.1 and newer has native `rust-analyzer` support.
332If the LSP binary is not available, GNOME Builder can install it when opening a Rust file. 380If the LSP binary is not available, GNOME Builder can install it when opening a Rust file.
333 381
382
383=== Eclipse IDE
384
385Prerequisites: You have installed the <<rust-analyzer-language-server-binary,`rust-analyzer` binary>>.
386
387Support for Rust development in the Eclipse IDE is provided by link:https://github.com/eclipse/corrosion[Eclipse Corrosion].
388While it currently uses RLS as default, you can successfully configure it so the IDE will use `rust-analyzer` instead.
389To do so, with an Eclipse IDE where Corrosion is installed, just go to __Window > Preferences > Rust__ and edit the __Path to Rust Language Server__ entry to reference the path to `rust-analyzer`.
390You'll need to close and reopen all .rs and Cargo files, or to restart the IDE, for this change to take effect.
391
334== Configuration 392== Configuration
335 393
336**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/rust-analyzer/src/config.rs[config.rs] 394**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/rust-analyzer/src/config.rs[config.rs]
337 395
338rust-analyzer is configured via LSP messages, which means that it's up to the editor to decide on the exact format and location of configuration files. 396The <<_installation,Installation>> section contains details on configuration for some of the editors.
339Please consult your editor's documentation to learn how to configure LSP servers. 397In general `rust-analyzer` is configured via LSP messages, which means that it's up to the editor to decide on the exact format and location of configuration files.
398
399Some clients, such as <<vs-code,VS Code>> or <<coc-rust-analyzer,COC plugin in Vim>> provide `rust-analyzer` specific configuration UIs. Others may require you to know a bit more about the interaction with `rust-analyzer`.
400
401For the later category, it might help to know that the initial configuration is specified as a value of the `intializationOptions` field of the https://microsoft.github.io/language-server-protocol/specifications/specification-current/#initialize[`InitializeParams` message, in the LSP protocol].
402The spec says that the field type is `any?`, but `rust-analyzer` is looking for a JSON object that is constructed using settings from the list below.
403Name of the setting, ignoring the `rust-analyzer.` prefix, is used as a path, and value of the setting becomes the JSON property value.
404
405For example, a very common configuration is to enable proc-macro support, can be achieved by sending this JSON:
406
407[source,json]
408----
409{
410 "cargo": {
411 "loadOutDirsFromCheck": true,
412 },
413 "procMacro": {
414 "enable": true,
415 }
416}
417----
418
419Please consult your editor's documentation to learn more about how to configure https://microsoft.github.io/language-server-protocol/[LSP servers].
340 420
341To verify which configuration is actually used by rust-analyzer, set `RA_LOG` environment variable to `rust_analyzer=info` and look for config-related messages. 421To verify which configuration is actually used by `rust-analyzer`, set `RA_LOG` environment variable to `rust_analyzer=info` and look for config-related messages.
342Logs should show both the JSON that rust-analyzer sees as well as the updated config. 422Logs should show both the JSON that `rust-analyzer` sees as well as the updated config.
343 423
344This is the list of config options rust-analyzer supports: 424This is the list of config options `rust-analyzer` supports:
345 425
346include::./generated_config.adoc[] 426include::./generated_config.adoc[]
347 427