1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313
|
===============================================================================
ALE Rust Integration *ale-rust-options*
*ale-integration-rust*
===============================================================================
Integration Information
If Vim does not detect the Rust file type out-of-the-box, you need the runtime
files for Rust distributed in Vim >=8.0.0501 or upstream:
https://github.com/rust-lang/rust.vim
Note that there are several possible linters and fixers for Rust files:
1. rustc -- The Rust compiler is used to check the currently edited file.
So, if your project consists of multiple files, you will get some errors
when you use e.g. a struct which is defined in another file. You can use
|g:ale_rust_ignore_error_codes| to ignore some of these errors.
2. cargo -- If your project is managed by Cargo, the whole project is
checked. That means that all errors are properly shown, but cargo can
only operate on the files written on disk, so errors will not be reported
while you type.
3. rls -- If you have `rls` installed, you might prefer using this linter
over cargo. rls implements the Language Server Protocol for incremental
compilation of Rust code, and can check Rust files while you type. `rls`
requires Rust files to be contained in Cargo projects.
4. analyzer -- If you have rust-analyzer installed, you might prefer using
this linter over cargo and rls. rust-analyzer also implements the
Language Server Protocol for incremental compilation of Rust code, and is
the next iteration of rls. rust-analyzer either requires Rust files to be
contained in Cargo projects or requires the project to be described in
the rust-project.json format:
https://rust-analyzer.github.io/manual.html#non-cargo-based-projects
5. rustfmt -- If you have `rustfmt` installed, you can use it as a fixer to
consistently reformat your Rust code.
Only cargo and rust-analyze are enabled by default. To switch to using rustc
instead of cargo, configure |b:ale_linters| in your ftplugin file
appropriately: >
" See the help text for the option for more information.
let b:ale_linters = ['analyzer', 'rustc']
<
Also note that rustc 1.18. or later is needed.
===============================================================================
analyzer *ale-rust-analyzer*
g:ale_rust_analyzer_executable *g:ale_rust_analyzer_executable*
*b:ale_rust_analyzer_executable*
Type: |String|
Default: `'rust-analyzer'`
This variable can be modified to change the executable path for
`rust-analyzer`.
g:ale_rust_analyzer_config *g:ale_rust_analyzer_config*
*b:ale_rust_analyzer_config*
Type: |Dictionary|
Default: `{}`
Dictionary with configuration settings for rust-analyzer. Keys of the
dictionary are components of configuration keys. For example:
>
let g:ale_rust_analyzer_config = {
\ 'server': {
\ 'extraEnv': { 'RUSTUP_TOOLCHAIN': 'stable' },
\ }
\}
<
corresponds to `rust-analyzer.server.extraEnv = { 'RUSTUP_TOOLCHAIN': 'stable' }`
For available configuration parameters, see the `rust-analyzer` manual:
https://rust-analyzer.github.io/manual.html#configuration
===============================================================================
cargo *ale-rust-cargo*
g:ale_rust_cargo_use_check *g:ale_rust_cargo_use_check*
*b:ale_rust_cargo_use_check*
Type: |Number|
Default: `1`
When set to `1`, this option will cause ALE to use `cargo check` instead of
`cargo build` . `cargo check` is supported since version 1.16.0 of Rust.
ALE will never use `cargo check` when the version of `cargo` is less than
0.17.0.
g:ale_rust_cargo_check_all_targets *g:ale_rust_cargo_check_all_targets*
*b:ale_rust_cargo_check_all_targets*
Type: |Number|
Default: `0`
When set to `1`, ALE will set the `--all-targets` option when `cargo check`
is used. See |g:ale_rust_cargo_use_check|,
g:ale_rust_cargo_check_tests *g:ale_rust_cargo_check_tests*
*b:ale_rust_cargo_check_tests*
Type: |Number|
Default: `0`
When set to `1`, ALE will set the `--tests` option when `cargo check`
is used. This allows for linting of tests which are normally excluded.
See |g:ale_rust_cargo_use_check|,
g:ale_rust_cargo_check_examples *g:ale_rust_cargo_check_examples*
*b:ale_rust_cargo_check_examples*
Type: |Number|
Default: `0`
When set to `1`, ALE will set the `--examples` option when `cargo check`
is used. This allows for linting of examples which are normally excluded.
See |g:ale_rust_cargo_use_check|,
g:ale_rust_cargo_default_feature_behavior
*g:ale_rust_cargo_default_feature_behavior*
*b:ale_rust_cargo_default_feature_behavior*
Type: |String|
Default: `default`
When set to `none`, ALE will set the `--no-default-features` option when
invoking `cargo`. Only the features specified in
|g:ale_rust_cargo_include_features| will be included when performing the
lint check.
When set to `default`, ALE will instruct `cargo` to build all default
features specified in the project's `Cargo.toml` file, in addition to
including any additional features defined in
|g:ale_rust_cargo_include_features|.
When set to `all`, ALE will set the `--all-features` option when
invoking `cargo`, which will include all features defined in the project's
`Cargo.toml` file when performing the lint check.
g:ale_rust_cargo_include_features *g:ale_rust_cargo_include_features*
*b:ale_rust_cargo_include_features*
Type: |String|
Default: `''`
When defined, ALE will set the `--features` option when invoking `cargo` to
perform the lint check. See |g:ale_rust_cargo_default_feature_behavior|.
g:ale_rust_cargo_avoid_whole_workspace *g:ale_rust_cargo_avoid_whole_workspace*
*b:ale_rust_cargo_avoid_whole_workspace*
Type: |Number|
Default: `1`
When set to 1, and ALE is used to edit a crate that is part of a Cargo
workspace, avoid building the entire workspace by invoking `cargo` directly
in the crate's directory. Otherwise, behave as usual.
g:ale_rust_cargo_use_clippy *g:ale_rust_cargo_use_clippy*
*b:ale_rust_cargo_use_clippy*
Type: |Number|
Default: `0`
When set to 1, `cargo clippy` will be used instead of `cargo check` or
`cargo build` as linter.
For details of `cargo clippy`, please visit the following link:
https://github.com/rust-lang-nursery/rust-clippy
Since `cargo clippy` is optional toolchain, it's safer to check whether
`cargo-clippy` is executable as follows:
>
let g:ale_rust_cargo_use_clippy = executable('cargo-clippy')
<
g:ale_rust_cargo_clippy_options *g:ale_rust_cargo_clippy_options*
*b:ale_rust_cargo_clippy_options*
Type: |String|
Default: `''`
When `cargo clippy` is used, this value will be added to a command line to run
it. This variable is useful when you want to add some extra options which
only `cargo clippy` supports (e.g. `--deny`).
g:ale_rust_cargo_target_dir *g:ale_rust_cargo_target_dir*
*b:ale_rust_cargo_target_dir*
Type: |String|
Default: `''`
Use a custom target directory when running the commands for ALE. This can
help to avoid "waiting for file lock on build directory" messages when
running `cargo` commands manually while ALE is performing its checks.
===============================================================================
cspell *ale-rust-cspell*
See |ale-cspell-options|
===============================================================================
rls *ale-rust-rls*
g:ale_rust_rls_executable *g:ale_rust_rls_executable*
*b:ale_rust_rls_executable*
Type: |String|
Default: `'rls'`
This variable can be modified to change the executable path for `rls`.
g:ale_rust_rls_toolchain *g:ale_rust_rls_toolchain*
*b:ale_rust_rls_toolchain*
Type: |String|
Default: `''`
This option can be set to change the toolchain used for `rls`. Possible
values include `'nightly'`, `'beta'`, `'stable'`, and `''`. When using
option `''`, rls will automatically find the default toolchain set by
rustup. If you want to use `rls` from a specific toolchain version, you may
also use values like `'channel-yyyy-mm-dd-arch-target'` as long as
`'rls +{toolchain_name} -V'` runs correctly in your command line.
The `rls` server will only be started once per executable.
g:ale_rust_rls_config *g:ale_rust_rls_config*
*b:ale_rust_rls_config*
Type: |Dictionary|
Default: `{}`
Dictionary with configuration settings for rls. For example, to force
using clippy as linter: >
{
\ 'rust': {
\ 'clippy_preference': 'on'
\ }
\ }
===============================================================================
rustc *ale-rust-rustc*
g:ale_rust_rustc_options *g:ale_rust_rustc_options*
*b:ale_rust_rustc_options*
Type: |String|
Default: `'--emit=mir -o /dev/null'`
The variable can be used to change the options passed to `rustc`.
Users of nightly builds of Rust might want to use `-Z no-codegen` instead.
Be careful when setting the options, as running `rustc` could execute code
or generate binary files.
g:ale_rust_ignore_error_codes *g:ale_rust_ignore_error_codes*
*b:ale_rust_ignore_error_codes*
Type: |List| of |String|s
Default: `[]`
This variable can contain error codes which will be ignored. For example, to
ignore most errors regarding failed imports, put this in your .vimrc
>
let g:ale_rust_ignore_error_codes = ['E0432', 'E0433']
g:ale_rust_ignore_secondary_spans *g:ale_rust_ignore_secondary_spans*
*b:ale_rust_ignore_secondary_spans*
Type: |Number|
Default: `0`
When set to 1, instructs the Rust error reporting to ignore secondary spans.
The problem with secondary spans is that they sometimes appear in error
messages before the main cause of the error, for example: >
1 src/main.rs|98 col 5 error| this function takes 4 parameters but 5
parameters were supplied: defined here
2 src/main.rs|430 col 32 error| this function takes 4 parameters but 5
parameters were supplied: expected 4 parameters
<
This is due to the sorting by line numbers. With this option set to 1,
the 'defined here' span will not be presented.
===============================================================================
rustfmt *ale-rust-rustfmt*
g:ale_rust_rustfmt_options *g:ale_rust_rustfmt_options*
*b:ale_rust_rustfmt_options*
Type: |String|
Default: `''`
This variable can be set to pass additional options to the rustfmt fixer.
g:ale_rust_rustfmt_executable *g:ale_rust_rustfmt_executable*
*b:ale_rust_rustfmt_executable*
Type: |String|
Default: `'rustfmt'`
This variable can be modified to change the executable path for `rustfmt`.
===============================================================================
vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl:
|