Use a new window for the ALEFixSuggest command, and document it better

This commit is contained in:
w0rp 2017-06-28 16:20:01 +01:00
parent f883d4d4fd
commit 8846a8860f
5 changed files with 96 additions and 30 deletions

View file

@ -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

View file

@ -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

View file

@ -0,0 +1,2 @@
" Close the ALEFixSuggest window with the q key.
noremap <buffer> q :q!<CR>

View 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'

View file

@ -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()