summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--autoload/ale/fix/registry.vim60
-rw-r--r--doc/ale.txt14
-rw-r--r--ftplugin/ale-fix-suggest.vim2
-rw-r--r--syntax/ale-fix-suggest.vim13
-rw-r--r--test/test_ale_fix_suggest.vader35
5 files changed, 95 insertions, 29 deletions
diff --git a/autoload/ale/fix/registry.vim b/autoload/ale/fix/registry.vim
index 7219410d..0dbbc0c5 100644
--- a/autoload/ale/fix/registry.vim
+++ b/autoload/ale/fix/registry.vim
@@ -116,44 +116,56 @@ endfunction
" Suggest functions to use from the registry.
function! ale#fix#registry#Suggest(filetype) abort
let l:type_list = split(a:filetype, '\.')
- let l:first_for_filetype = 1
- let l:first_generic = 1
+ let l:filetype_fixer_list = []
for l:key in sort(keys(s:entries))
let l:suggested_filetypes = s:entries[l:key].suggested_filetypes
if s:ShouldSuggestForType(l:suggested_filetypes, l:type_list)
- if l:first_for_filetype
- let l:first_for_filetype = 0
- echom 'Try the following fixers appropriate for the filetype:'
- echom ''
- endif
-
- echom printf('%s - %s', string(l:key), s:entries[l:key].description)
+ call add(
+ \ l:filetype_fixer_list,
+ \ printf('%s - %s', string(l:key), s:entries[l:key].description),
+ \)
endif
endfor
+ let l:generic_fixer_list = []
for l:key in sort(keys(s:entries))
if empty(s:entries[l:key].suggested_filetypes)
- if l:first_generic
- if !l:first_for_filetype
- echom ''
- endif
-
- let l:first_generic = 0
- echom 'Try the following generic fixers:'
- echom ''
- endif
-
- echom printf('%s - %s', string(l:key), s:entries[l:key].description)
+ call add(
+ \ l:generic_fixer_list,
+ \ printf('%s - %s', string(l:key), s:entries[l:key].description),
+ \)
endif
endfor
- if l:first_for_filetype && l:first_generic
- echom 'There is nothing in the registry to suggest.'
+ let l:filetype_fixer_header = !empty(l:filetype_fixer_list)
+ \ ? ['Try the following fixers appropriate for the filetype:', '']
+ \ : []
+ let l:generic_fixer_header = !empty(l:generic_fixer_list)
+ \ ? ['Try the following generic fixers:', '']
+ \ : []
+
+ let l:has_both_lists = !empty(l:filetype_fixer_list) && !empty(l:generic_fixer_list)
+
+ let l:lines =
+ \ l:filetype_fixer_header
+ \ + l:filetype_fixer_list
+ \ + (l:has_both_lists ? [''] : [])
+ \ + l:generic_fixer_header
+ \ + l:generic_fixer_list
+
+ if empty(l:lines)
+ let l:lines = ['There is nothing in the registry to suggest.']
else
- echom ''
- echom 'See :help ale-fix-configuration'
+ let l:lines += ['', 'See :help ale-fix-configuration']
endif
+
+ let l:lines += ['', 'Press q to close this window']
+
+ new +set\ filetype=ale-fix-suggest
+ call setline(1, l:lines)
+ setlocal nomodified
+ setlocal nomodifiable
endfunction
diff --git a/doc/ale.txt b/doc/ale.txt
index 88046227..81999ab0 100644
--- a/doc/ale.txt
+++ b/doc/ale.txt
@@ -131,7 +131,9 @@ ALE supports the following key features for linting:
7. Setting syntax highlights for errors.
ALE can fix problems with files with the |ALEFix| command, using the same job
-control functionality used for checking for problems.
+control functionality used for checking for problems. Try using the
+|ALEFixSuggest| command for browsing tools that can be used to fix problems
+for the current buffer.
===============================================================================
2. Supported Languages & Tools *ale-support*
@@ -915,6 +917,9 @@ run, the variable |g:ale_fixers| will be read for getting a |List| of commands
for filetypes, split on `.`, and the functions named in |g:ale_fixers| will be
executed for fixing the errors.
+The |ALEFixSuggest| command can be used to suggest tools that be used to
+fix problems for the current buffer.
+
The values for `g:ale_fixers` can be a list of |String|, |Funcref|, or
|lambda| values. String values must either name a function, or a short name
for a function set in the ALE fixer registry.
@@ -1019,6 +1024,13 @@ ALEFix *ALEFix*
A plug mapping `<Plug>(ale_fix)` is defined for this command.
+ALEFixSuggest *ALEFixSuggest*
+
+ Suggest tools that can be used to fix problems in the current buffer.
+
+ See |ale-fix| for more information.
+
+
ALELint *ALELint*
Run ALE once for the current buffer. This command can be used to run ALE
diff --git a/ftplugin/ale-fix-suggest.vim b/ftplugin/ale-fix-suggest.vim
new file mode 100644
index 00000000..189a4dc2
--- /dev/null
+++ b/ftplugin/ale-fix-suggest.vim
@@ -0,0 +1,2 @@
+" Close the ALEFixSuggest window with the q key.
+noremap <buffer> q :q!<CR>
diff --git a/syntax/ale-fix-suggest.vim b/syntax/ale-fix-suggest.vim
new file mode 100644
index 00000000..be3d45ee
--- /dev/null
+++ b/syntax/ale-fix-suggest.vim
@@ -0,0 +1,13 @@
+if exists('b:current_syntax')
+ finish
+endif
+
+syn match aleFixerComment /^.*$/
+syn match aleFixerName /^'[^']*'/
+syn match aleFixerHelp /^See :help ale-fix-configuration/
+
+hi def link aleFixerComment Comment
+hi def link aleFixerName String
+hi def link aleFixerHelp Statement
+
+let b:current_syntax = 'ale-fix-suggest'
diff --git a/test/test_ale_fix_suggest.vader b/test/test_ale_fix_suggest.vader
index 9a7aecbf..97227b4f 100644
--- a/test/test_ale_fix_suggest.vader
+++ b/test/test_ale_fix_suggest.vader
@@ -1,15 +1,27 @@
Before:
call ale#fix#registry#Clear()
+ let g:buffer = bufnr('')
+
function GetSuggestions()
- redir => l:output
- silent ALEFixSuggest
- redir END
+ silent ALEFixSuggest
+
+ if bufnr('') != g:buffer
+ let l:lines = getline(1, '$')
+ else
+ let l:lines = []
+ endif
- return split(l:output, "\n")
+ return l:lines
endfunction
After:
+ if bufnr('') != g:buffer
+ :q!
+ endif
+
+ unlet! g:buffer
+
call ale#fix#registry#ResetToDefaults()
delfunction GetSuggestions
@@ -17,9 +29,18 @@ Execute(ALEFixSuggest should return something sensible with no suggestions):
AssertEqual
\ [
\ 'There is nothing in the registry to suggest.',
+ \ '',
+ \ 'Press q to close this window',
\ ],
\ GetSuggestions()
+Execute(ALEFixSuggest should set the appropriate settings):
+ silent ALEFixSuggest
+
+ AssertEqual 'ale-fix-suggest', &filetype
+ Assert !&modified, 'The buffer was marked as modified'
+ Assert !&modifiable, 'The buffer was modifiable'
+
Execute(ALEFixSuggest output should be correct for only generic handlers):
call ale#fix#registry#Add('zed', 'XYZ', [], 'Zedify things.')
call ale#fix#registry#Add('alpha', 'XYZ', [], 'Alpha things.')
@@ -32,6 +53,8 @@ Execute(ALEFixSuggest output should be correct for only generic handlers):
\ '''zed'' - Zedify things.',
\ '',
\ 'See :help ale-fix-configuration',
+ \ '',
+ \ 'Press q to close this window',
\ ],
\ GetSuggestions()
@@ -49,6 +72,8 @@ Execute(ALEFixSuggest output should be correct for only filetype handlers):
\ '''zed'' - Zedify things.',
\ '',
\ 'See :help ale-fix-configuration',
+ \ '',
+ \ 'Press q to close this window',
\ ],
\ GetSuggestions()
@@ -71,5 +96,7 @@ Execute(ALEFixSuggest should suggest filetype and generic handlers):
\ '''generic'' - Generic things.',
\ '',
\ 'See :help ale-fix-configuration',
+ \ '',
+ \ 'Press q to close this window',
\ ],
\ GetSuggestions()