blob: 4d842fc524e936f7d5ef7c3bd5e877c0a995a6a1 [file] [log] [blame] [view]
{% include "docs/development/editors/vscode/_common/_vscode_header.md" %}
# Installing extensions
The following VS Code extensions may provide a productive development environment for Fuchsia:
## Fuchsia-specific extensions
Fuchsia-specific extensions provide support with custom Fuchsia files.
### FIDL Language Support
[FIDL Language Support](https://marketplace.visualstudio.com/items?itemName=fuchsia-authors.language-fidl){: .external}
provides syntax support and LSP-based language features in [FIDL][fidl].
Note: You need to configure Fuchsia environment variables to run this extension. For more information, see [Set up environment variables][set-up-env].
<img class="vscode-image vscode-image-center"
alt="This figure shows syntax highlighting for FIDL files in VS Code."
src="images/extensions/fidl-pack.png"/>
### Fuchsia.git Helper
[Fuchsia.git Helper](https://marketplace.visualstudio.com/items?itemName=jwing.fuchsia-git-helper){: .external}
adds an "Open in...", which allows you to open a file in OSS Code Search.
To use this extension:
1. Right click a file in the file editor.
1. Select **Open in OSS Code Search**.
<img class="vscode-image vscode-image-center"
alt="This figure shows the VS Code menu to open a file in OSS code search."
src="images/extensions/fuchsia-git-helper.png"/>
### FuchsiAware
[FuchsiAware](https://marketplace.visualstudio.com/items?itemName=RichKadel.fuchsiaware){: .external}
assists with browsing Fuchsia artifacts, such as by linking from component URLs to component manifests.
<img class="vscode-image vscode-image-center"
alt="This figure shows hyperlinks to fuchsia-pkg urls in VS Code."
src="images/extensions/fuchsiaware.png"/>
### zxdb for VS Code
[The VS Code zxdb extension](https://marketplace.visualstudio.com/items?itemName=fuchsia-authors.zxdb){: .external}
provides IDE based [zxdb](/docs/development/debugger/README.md)
debugger support.
<img class="vscode-image vscode-image-center"
alt="This gif shows a demo of the features."
src="images/extensions/zxdb-demo.gif"/>
## General workflow extensions
General workflow extensions provide an overall productive workflow when working with Fuchsia.
### GitLens
[GitLens](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens){: .external}
provides highly customizable insights of git history, which allows you to see code evolution.
<img class="vscode-image vscode-image-center"
alt="This figure shows an overlay of git commit history in VS Code."
src="images/extensions/gitlens.png"/>
### GN
[GN](https://marketplace.visualstudio.com/items?itemName=npclaudiu.vscode-gn){: .external}
adds syntax highlighting for GN files.
<img class="vscode-image vscode-image-center"
alt="This figure shows syntax highlighting for GN files in VS Code."
src="images/extensions/gn.png"/>
### GNFormat
[GNFormat](https://marketplace.visualstudio.com/items?itemName=persidskiy.vscode-gnformat){: .external}
provides GN file formatting.
You may need to configure GNFormat with the file path to your GN binary and buildtools.
Do the following:
1. In VS Code, launch **Quick Open** by running `CMD/CTRL + P`.
1. Type `settings` in the search field.
1. Click **Preferences: Open Settings (JSON)**.
1. Add the following configuration and restart VS Code:
```json5
"gnformat.path.gn": "{{ '<var>' }}FILE_PATH{{ '</var>' }}",
"gnformat.path.buildtools": "{{ '<var>' }}BUILD_TOOLS_PATH{{ '</var>' }}"
```
### JSON5
[JSON5](https://marketplace.visualstudio.com/items?itemName=mrmlnc.vscode-json5){: .external}
adds syntax highlighting for JSON5 files.
<img class="vscode-image vscode-image-center"
alt="This figure shows syntax highlighting for JSON5 files in VS Code."
src="images/extensions/json5.png"/>
### Rust-analyzer {#rust-analyzer}
[Rust-analyzer](https://marketplace.visualstudio.com/items?itemName=matklad.rust-analyzer){: .external}
is a [Language Server Protocol][lsp-definition]{: .external} (LSP)
implementation for the Rust language.
Note: If your Fuchsia source is symlinked from another mountpoint, the
`rust-analyzer` extension may not locate the files for analysis.
Instead, open the actual file path to the Fuchsia source in VS Code.
To use `rust-analyzer` with VS Code, Fuchsia recommends:
* [Updating to the latest stable VS Code][vscode-update]{: .external}.
* [Disabling telemetry reporting][vscode-disable-telemetry]{: .external} for confidential code.
#### Configure workflow {#rust-configure-workflow}
After installing `rust-analyzer`, modify your
VS Code's `settings.json` file:
1. Press `CMD/CTRL + SHIFT + P` to open **Command Palette**.
1. Type `settings` in the search field.
1. Click **Preferences: Open Settings (JSON)**.
1. In `settings.json`, paste the following snippets:
Note: If you use VS Code's [remote workspaces][vscode-remote-workspaces], use the `settings.json`
for your remote environment.
```json
// disable cargo check on save
"rust-analyzer.checkOnSave.enable": false,
"rust-analyzer.checkOnSave.allTargets": false,
```
Additionally, you may want to configure smaller tooltips and hide parameter hints to optimize your
workspace:
```json
// optional: only show summary docs for functions (keeps tooltips small)
"rust-analyzer.callInfo.full": false,
// optional: don't activate parameterHints automatically
"editor.parameterHints.enabled": false,
```
#### Enable rustfmt
The `rust-analyzer` extension relies on the `rustup` installer to invoke `rustfmt`,
a tool for formatting Rust code according to style guidelines.
To configure `rustup` with your Fuchsia source code, run:
Note: `HOST_OS` is `linux-x64` on Linux and `mac-x64` on macOS.
```posix-terminal
rustup toolchain link fuchsia {{ '<var>' }}FUCHSIA_DIR{{ '</var>' }}/prebuilt/third_party/rust/{{ '<var>' }}HOST_OS{{ '</var>' }}
```
After configuring `rustup`, the `rust-analyzer` extension supports additional configuration
with Fuchisa's Rust style guide, [`rustfmt.toml`](/rustfmt.toml).
Add the following snippet to your `settings.json` using the same steps
from [Configuring workflow](#rust-configure-workflow):
```json
// use fuchsia toolchain and fuchsia's rules for rustfmt:
"rust-analyzer.rustfmt.extraArgs": [
"+fuchsia",
"--config-path= {{ '<var>' }}FUCHSIA_DIR{{ '</var>' }}/rustfmt.toml"
],
```
<!-- Reference links -->
[set-up-env]: /docs/get-started/get_fuchsia_source.md#set-up-environment-variables
[fidl]: /docs/development/languages/fidl/README.md
[rust-analyzer-latest]: https://github.com/rust-analyzer/rust-analyzer/releases
[vscode-extension-guide]: /docs/development/editors/extensions.md#rust-analyzer
[vscode-download]: https://code.visualstudio.com/Download
[vscode-update]: https://vscode-docs.readthedocs.io/en/stable/supporting/howtoupdate/
[vscode-disable-telemetry]: https://code.visualstudio.com/docs/getstarted/telemetry#_disable-telemetry-reporting
[vscode-rust-analyzer]: https://marketplace.visualstudio.com/items?itemName=matklad.rust-analyzer
[vscode-downgrade]: https://code.visualstudio.com/updates/v1_30#_install-previous-versions
[supported-rust-analyzer-version]: /docs/development/languages/rust/editors.md#supported-rust-analyzer-version
[lsp-definition]: https://microsoft.github.io/language-server-protocol/
[vscode-remote-workspaces]: /docs/development/editors/vscode/remote-workspaces.md