See instructions on the Intellij Rust site. Run fx gen-cargo //garnet/foo/path/to/target:label
for the GN target that you want to work on and open the corresponding directory.
See instructions on rust-lang/rust.vim
.
The VS Code plugin uses the RLS (Rust language server) so you‘ll need to first install rustup. Next, install this VSCode plugin. You’ll also have to tell rustup
to use the Fuchsia Rust toolchain:
rustup toolchain link fuchsia /<your Fuchsia root>/buildtools/<platform>/rust rustup default fuchsia
Next open File -> Preferences -> Settings (or type Ctrl+Comma). Add the following settings:
{ "rust.target": "x86_64-fuchsia", "rust.target_dir": "/<your Fuchsia root>/out/cargo_target", "rust.unstable_features": true, "rust-client.rlsPath": "/<your Fuchsia root>/buildtools/<platform>/rust/bin/rls", "rust-client.disableRustup": true, // Some optional settings that may help: "rust.goto_def_racer_fallback": true, "rust-client.logToFile": true, }
Finally, run fx gen-cargo //garnet/foo/path/to/target:label
for the GN target that you want to work on and open the corresponding directory in VSCode.
You will be using flycheck to compile your Rust files when you save them. flycheck will parse those outputs and highlight errors. You'll also use flycheck-rust so that it will compile with cargo and not with rustc. Both are available from melpa.
If you don't yet have melpa, follow the instructions here.
Install flycheck
and flycheck-rust
in M-x list-packages
. Type i
to queue for installation what you are missing and then x
to execute.
Next, make sure that flycheck-rust is run at startup. Put this in your .emacs
files:
(with-eval-after-load 'rust-mode (add-hook 'flycheck-mode-hook #'flycheck-rust-setup))
You'll want cargo to run “check” and not “test” so set flycheck-rust-check-tests
to nil
. You can do this by typing C-h v flycheck-rust-check-tests<RET>
and then customizing the variable in the normal way.
Now, you'll want to make sure that the default cargo
and rustc
that you are using are Fuchsia versions of those. From your fuchsia root, type:
rustup toolchain link fuchsia $PWD/buildtools/linux-x64/rust && rustup default fuchsia
Run fx gen-cargo //garnet/foo/path/to/target:label
for the GN target that you want to work on.
You can read about adjusting flycheck to display your errors as you like. Type C-h v flycheck-highlighting-mode<RET>
and customize it. Also customize C-h v flycheck-indiation-mode<RET>
.
Now restart emacs and try it out.
To test that it works, you can run M-x flycheck-compile
and see the command-line that flycheck is using to check syntax. It ought to look like one of these depending on whether you are in a lib or bin:
cargo check --lib --message-format\=json cargo check --bin recovery_netstack --message-format\=json
If it runs rustc
instead of cargo
, that‘s because you didn’t fx gen-cargo
.
Note that it might report errors on the first line of the current file. Those are actually errors from a different file. The error's comment will name the problematic file.