From 6822c4a42437e3b3d002247bf48e4159f062c3b2 Mon Sep 17 00:00:00 2001 From: cos Date: Thu, 3 Feb 2022 10:50:30 +0100 Subject: wip: Attempt at making cargo working on whole project as documented (Make cargo work on whole project as documented) According to `:help ale-integration-rust`, using cargo as a linter should check the entire project. It appears this was the case initially, but it broke somewhere along the way. Setting `filename` to the output in the handler and avoid filtering the spans on `file_name` goes a long way in restoring the intended behavior. However test cases fail, even after attempting to update them. Please see next commit. --- ale_linters/rust/cargo.vim | 1 + ale_linters/rust/rustc.vim | 4 ++++ autoload/ale/handlers/rust.vim | 7 ++++++- doc/ale-rust.txt | 10 ++++++++++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/ale_linters/rust/cargo.vim b/ale_linters/rust/cargo.vim index 37fd10a8..e5fe888d 100644 --- a/ale_linters/rust/cargo.vim +++ b/ale_linters/rust/cargo.vim @@ -12,6 +12,7 @@ call ale#Set('rust_cargo_include_features', '') call ale#Set('rust_cargo_use_clippy', 0) call ale#Set('rust_cargo_clippy_options', '') call ale#Set('rust_cargo_target_dir', '') +call ale#Set('rust_only_current_buffer', '0') function! ale_linters#rust#cargo#GetCargoExecutable(bufnr) abort if ale#path#FindNearestFile(a:bufnr, 'Cargo.toml') isnot# '' diff --git a/ale_linters/rust/rustc.vim b/ale_linters/rust/rustc.vim index bc6431ba..c7a06cc7 100644 --- a/ale_linters/rust/rustc.vim +++ b/ale_linters/rust/rustc.vim @@ -2,6 +2,10 @@ " Description: rustc for rust files call ale#Set('rust_rustc_options', '--emit=mir -o /dev/null') +" FIXME Both cargo and rustc uses ale#handlers#rust#HandleRustErrors which +" might or might not require this, depending on the fix for [#1570] +" (https://github.com/dense-analysis/ale/issues/1570). +" call ale#Set('rust_only_current_buffer', '0') function! ale_linters#rust#rustc#RustcCommand(buffer) abort " Try to guess the library search path. If the project is managed by cargo, diff --git a/autoload/ale/handlers/rust.vim b/autoload/ale/handlers/rust.vim index a7fac464..895c7878 100644 --- a/autoload/ale/handlers/rust.vim +++ b/autoload/ale/handlers/rust.vim @@ -49,7 +49,11 @@ function! ale#handlers#rust#HandleRustErrors(buffer, lines) abort endif for l:root_span in l:error.spans - let l:span = s:FindSpan(a:buffer, l:root_span) + if ale#Var(a:buffer, 'rust_only_current_buffer') + let l:span = s:FindSpan(a:buffer, l:root_span) + else + let l:span = l:root_span + endif if ale#Var(a:buffer, 'rust_ignore_secondary_spans') && !get(l:span, 'is_primary', 1) continue @@ -57,6 +61,7 @@ function! ale#handlers#rust#HandleRustErrors(buffer, lines) abort if !empty(l:span) let l:output_line = { + \ 'filename': l:span.file_name, \ 'lnum': l:span.line_start, \ 'end_lnum': l:span.line_end, \ 'col': l:span.column_start, diff --git a/doc/ale-rust.txt b/doc/ale-rust.txt index 8e846844..c51273ab 100644 --- a/doc/ale-rust.txt +++ b/doc/ale-rust.txt @@ -40,6 +40,16 @@ Integration Information Also note that rustc 1.18. or later is needed. +=============================================================================== +TODO + +g:ale_rust_only_current_buffer *g:ale_rust_only_current_buffer* + *b:ale_rust_only_current_buffer* + Type: |Number| + Default: `0` + + Option to restore buggy operation. (FIXME: The existance of this option + might or might not be desired.) =============================================================================== analyzer *ale-rust-analyzer* -- cgit v1.2.3