Use a new window for the ALEFixSuggest command, and document it better
This commit is contained in:
parent
f883d4d4fd
commit
8846a8860f
5 changed files with 96 additions and 30 deletions
|
@ -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
|
||||
|
|
14
doc/ale.txt
14
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
|
||||
|
|
2
ftplugin/ale-fix-suggest.vim
Normal file
2
ftplugin/ale-fix-suggest.vim
Normal file
|
@ -0,0 +1,2 @@
|
|||
" Close the ALEFixSuggest window with the q key.
|
||||
noremap <buffer> q :q!<CR>
|
13
syntax/ale-fix-suggest.vim
Normal file
13
syntax/ale-fix-suggest.vim
Normal file
|
@ -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'
|
|
@ -1,15 +1,27 @@
|
|||
Before:
|
||||
call ale#fix#registry#Clear()
|
||||
|
||||
function GetSuggestions()
|
||||
redir => l:output
|
||||
silent ALEFixSuggest
|
||||
redir END
|
||||
let g:buffer = bufnr('')
|
||||
|
||||
return split(l:output, "\n")
|
||||
function GetSuggestions()
|
||||
silent ALEFixSuggest
|
||||
|
||||
if bufnr('') != g:buffer
|
||||
let l:lines = getline(1, '$')
|
||||
else
|
||||
let l:lines = []
|
||||
endif
|
||||
|
||||
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()
|
||||
|
|
Reference in a new issue