+===============================================================================
+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']
+<
+ Or in Lua: >
+
+ require("ale").setup.buffer({linters = {"analyzer", "rustc"}})
+<
+ Also note that rustc 1.18. or later is needed.
+
+
+===============================================================================
+analyzer *ale-rust-analyzer*
+
+ *ale-options.rust_analyzer_executable*
+ *g:ale_rust_analyzer_executable*
+ *b:ale_rust_analyzer_executable*
+rust_analyzer_executable
+g:ale_rust_analyzer_executable
+ Type: |String|
+ Default: `'rust-analyzer'`
+
+ This variable can be modified to change the executable path for
+ `rust-analyzer`.
+
+ *ale-options.rust_analyzer_config*
+ *g:ale_rust_analyzer_config*
+ *b:ale_rust_analyzer_config*
+rust_analyzer_config
+g: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*
+
+ *ale-options.rust_cargo_use_check*
+ *g:ale_rust_cargo_use_check*
+ *b:ale_rust_cargo_use_check*
+rust_cargo_use_check
+g: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.
+
+ *ale-options.rust_cargo_check_all_targets*
+ *g:ale_rust_cargo_check_all_targets*
+ *b:ale_rust_cargo_check_all_targets*
+rust_cargo_check_all_targets
+g: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|,
+
+ *ale-options.rust_cargo_check_tests*
+ *g:ale_rust_cargo_check_tests*
+ *b:ale_rust_cargo_check_tests*
+rust_cargo_check_tests
+g: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|,
+
+ *ale-options.rust_cargo_check_examples*
+ *g:ale_rust_cargo_check_examples*
+ *b:ale_rust_cargo_check_examples*
+rust_cargo_check_examples
+g: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|,
+
+ *ale-options.rust_cargo_default_feature_behavior*
+ *g:ale_rust_cargo_default_feature_behavior*
+ *b:ale_rust_cargo_default_feature_behavior*
+rust_cargo_default_feature_behavior
+g: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.
+
+ *ale-options.rust_cargo_include_features*
+ *g:ale_rust_cargo_include_features*
+ *b:ale_rust_cargo_include_features*
+rust_cargo_include_features
+g: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|.
+
+ *ale-options.rust_cargo_avoid_whole_workspace*
+ *g:ale_rust_cargo_avoid_whole_workspace*
+ *b:ale_rust_cargo_avoid_whole_workspace*
+rust_cargo_avoid_whole_workspace
+g: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.
+
+ *ale-options.rust_cargo_use_clippy*
+ *g:ale_rust_cargo_use_clippy*
+ *b:ale_rust_cargo_use_clippy*
+rust_cargo_use_clippy
+g: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')
+<
+ *ale-options.rust_cargo_clippy_options*
+ *g:ale_rust_cargo_clippy_options*
+ *b:ale_rust_cargo_clippy_options*
+rust_cargo_clippy_options
+g: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`).
+
+ *ale-options.rust_cargo_target_dir*
+ *g:ale_rust_cargo_target_dir*
+ *b:ale_rust_cargo_target_dir*
+rust_cargo_target_dir
+g: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*
+
+ *ale-options.rust_rls_executable*
+ *g:ale_rust_rls_executable*
+ *b:ale_rust_rls_executable*
+rust_rls_executable
+g:ale_rust_rls_executable
+ Type: |String|
+ Default: `'rls'`
+
+ This variable can be modified to change the executable path for `rls`.
+
+ *ale-options.rust_rls_toolchain*
+ *g:ale_rust_rls_toolchain*
+ *b:ale_rust_rls_toolchain*
+rust_rls_toolchain
+g: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.
+
+ *ale-options.rust_rls_config*
+ *g:ale_rust_rls_config*
+ *b:ale_rust_rls_config*
+rust_rls_config
+g:ale_rust_rls_config
+ Type: |Dictionary|
+ Default: `{}`
+
+ Dictionary with configuration settings for rls. For example, to force
+ using clippy as linter in your ftplugin file: >
+
+ let b:ale_rust_rls_config = {
+ \ 'rust': {
+ \ 'clippy_preference': 'on'
+ \ },
+ \}
+<
+ Or in Lua: >
+
+ require("ale").setup.buffer({
+ rust_rls_config = {
+ rust = {
+ clippy_preference = "on",
+ },
+ },
+ })
+<
+
+===============================================================================
+rustc *ale-rust-rustc*
+
+ *ale-options.rust_rustc_options*
+ *g:ale_rust_rustc_options*
+ *b:ale_rust_rustc_options*
+rust_rustc_options
+g: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.
+
+ *ale-options.rust_ignore_error_codes*
+ *g:ale_rust_ignore_error_codes*
+ *b:ale_rust_ignore_error_codes*
+rust_ignore_error_codes
+g: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']
+<
+ *ale-options.rust_ignore_secondary_spans*
+ *g:ale_rust_ignore_secondary_spans*
+ *b:ale_rust_ignore_secondary_spans*
+rust_ignore_secondary_spans
+g: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*
+
+ *ale-options.rust_rustfmt_options*
+ *g:ale_rust_rustfmt_options*
+ *b:ale_rust_rustfmt_options*
+rust_rustfmt_options
+g:ale_rust_rustfmt_options
+ Type: |String|
+ Default: `''`
+
+ This variable can be set to pass additional options to the rustfmt fixer.
+
+ *ale-options.rust_rustfmt_executable*
+ *g:ale_rust_rustfmt_executable*
+ *b:ale_rust_rustfmt_executable*
+rust_rustfmt_executable
+g: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: