| # Editor Features |
| |
| ## VS Code |
| |
| ### Color configurations |
| |
| It is possible to change the foreground/background color and font |
| family/size of inlay hints. Just add this to your `settings.json`: |
| |
| ```json |
| { |
| "editor.inlayHints.fontFamily": "Courier New", |
| "editor.inlayHints.fontSize": 11, |
| |
| "workbench.colorCustomizations": { |
| // Name of the theme you are currently using |
| "[Default Dark+]": { |
| "editorInlayHint.foreground": "#868686f0", |
| "editorInlayHint.background": "#3d3d3d48", |
| |
| // Overrides for specific kinds of inlay hints |
| "editorInlayHint.typeForeground": "#fdb6fdf0", |
| "editorInlayHint.parameterForeground": "#fdb6fdf0", |
| } |
| } |
| } |
| ``` |
| |
| ### Semantic style customizations |
| |
| You can customize the look of different semantic elements in the source |
| code. For example, mutable bindings are underlined by default and you |
| can override this behavior by adding the following section to your |
| `settings.json`: |
| |
| ```json |
| { |
| "editor.semanticTokenColorCustomizations": { |
| "rules": { |
| "*.mutable": { |
| "fontStyle": "", // underline is the default |
| }, |
| } |
| }, |
| } |
| ``` |
| |
| Most themes doesn’t support styling unsafe operations differently yet. |
| You can fix this by adding overrides for the rules `operator.unsafe`, |
| `function.unsafe`, and `method.unsafe`: |
| |
| ```json |
| { |
| "editor.semanticTokenColorCustomizations": { |
| "rules": { |
| "operator.unsafe": "#ff6600", |
| "function.unsafe": "#ff6600", |
| "method.unsafe": "#ff6600" |
| } |
| }, |
| } |
| ``` |
| |
| In addition to the top-level rules you can specify overrides for |
| specific themes. For example, if you wanted to use a darker text color |
| on a specific light theme, you might write: |
| |
| ```json |
| { |
| "editor.semanticTokenColorCustomizations": { |
| "rules": { |
| "operator.unsafe": "#ff6600" |
| }, |
| "[Ayu Light]": { |
| "rules": { |
| "operator.unsafe": "#572300" |
| } |
| } |
| }, |
| } |
| ``` |
| |
| Make sure you include the brackets around the theme name. For example, |
| use `"[Ayu Light]"` to customize the theme Ayu Light. |
| |
| ### Special `when` clause context for keybindings. |
| |
| You may use `inRustProject` context to configure keybindings for rust |
| projects only. For example: |
| |
| ```json |
| { |
| "key": "ctrl+alt+d", |
| "command": "rust-analyzer.openDocs", |
| "when": "inRustProject" |
| } |
| ``` |
| |
| More about `when` clause contexts |
| [here](https://code.visualstudio.com/docs/getstarted/keybindings#_when-clause-contexts). |
| |
| ### Setting runnable environment variables |
| |
| You can use "rust-analyzer.runnables.extraEnv" setting to define |
| runnable environment-specific substitution variables. The simplest way |
| for all runnables in a bunch: |
| |
| ```json |
| "rust-analyzer.runnables.extraEnv": { |
| "RUN_SLOW_TESTS": "1" |
| } |
| ``` |
| |
| Or it is possible to specify vars more granularly: |
| |
| ```json |
| "rust-analyzer.runnables.extraEnv": [ |
| { |
| // "mask": null, // null mask means that this rule will be applied for all runnables |
| "env": { |
| "APP_ID": "1", |
| "APP_DATA": "asdf" |
| } |
| }, |
| { |
| "mask": "test_name", |
| "env": { |
| "APP_ID": "2", // overwrites only APP_ID |
| } |
| } |
| ] |
| ``` |
| |
| You can use any valid regular expression as a mask. Also note that a |
| full runnable name is something like **run bin\_or\_example\_name**, |
| **test some::mod::test\_name** or **test-mod some::mod**, so it is |
| possible to distinguish binaries, single tests, and test modules with |
| this masks: `"^run"`, `"^test "` (the trailing space matters!), and |
| `"^test-mod"` respectively. |
| |
| If needed, you can set different values for different platforms: |
| |
| ```json |
| "rust-analyzer.runnables.extraEnv": [ |
| { |
| "platform": "win32", // windows only |
| "env": { |
| "APP_DATA": "windows specific data" |
| } |
| }, |
| { |
| "platform": ["linux"], |
| "env": { |
| "APP_DATA": "linux data", |
| } |
| }, |
| { // for all platforms |
| "env": { |
| "APP_COMMON_DATA": "xxx", |
| } |
| } |
| ] |
| ``` |
| |
| ### Compiler feedback from external commands |
| |
| Instead of relying on the built-in `cargo check`, you can configure Code |
| to run a command in the background and use the `$rustc-watch` problem |
| matcher to generate inline error markers from its output. |
| |
| To do this you need to create a new [VS Code |
| Task](https://code.visualstudio.com/docs/editor/tasks) and set |
| `"rust-analyzer.checkOnSave": false` in preferences. |
| |
| For example, if you want to run |
| [`cargo watch`](https://crates.io/crates/cargo-watch) instead, you might |
| add the following to `.vscode/tasks.json`: |
| |
| ```json |
| { |
| "label": "Watch", |
| "group": "build", |
| "type": "shell", |
| "command": "cargo watch", |
| "problemMatcher": "$rustc-watch", |
| "isBackground": true |
| } |
| ``` |
| |
| ### Live Share |
| |
| VS Code Live Share has partial support for rust-analyzer. |
| |
| Live Share *requires* the official Microsoft build of VS Code, OSS |
| builds will not work correctly. |
| |
| The host’s rust-analyzer instance will be shared with all guests joining |
| the session. The guests do not have to have the rust-analyzer extension |
| installed for this to work. |
| |
| If you are joining a Live Share session and *do* have rust-analyzer |
| installed locally, commands from the command palette will not work |
| correctly since they will attempt to communicate with the local server. |