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.
|
" Suggest functions to use from the registry.
|
||||||
function! ale#fix#registry#Suggest(filetype) abort
|
function! ale#fix#registry#Suggest(filetype) abort
|
||||||
let l:type_list = split(a:filetype, '\.')
|
let l:type_list = split(a:filetype, '\.')
|
||||||
let l:first_for_filetype = 1
|
let l:filetype_fixer_list = []
|
||||||
let l:first_generic = 1
|
|
||||||
|
|
||||||
for l:key in sort(keys(s:entries))
|
for l:key in sort(keys(s:entries))
|
||||||
let l:suggested_filetypes = s:entries[l:key].suggested_filetypes
|
let l:suggested_filetypes = s:entries[l:key].suggested_filetypes
|
||||||
|
|
||||||
if s:ShouldSuggestForType(l:suggested_filetypes, l:type_list)
|
if s:ShouldSuggestForType(l:suggested_filetypes, l:type_list)
|
||||||
if l:first_for_filetype
|
call add(
|
||||||
let l:first_for_filetype = 0
|
\ l:filetype_fixer_list,
|
||||||
echom 'Try the following fixers appropriate for the filetype:'
|
\ printf('%s - %s', string(l:key), s:entries[l:key].description),
|
||||||
echom ''
|
\)
|
||||||
endif
|
|
||||||
|
|
||||||
echom printf('%s - %s', string(l:key), s:entries[l:key].description)
|
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
|
let l:generic_fixer_list = []
|
||||||
|
|
||||||
for l:key in sort(keys(s:entries))
|
for l:key in sort(keys(s:entries))
|
||||||
if empty(s:entries[l:key].suggested_filetypes)
|
if empty(s:entries[l:key].suggested_filetypes)
|
||||||
if l:first_generic
|
call add(
|
||||||
if !l:first_for_filetype
|
\ l:generic_fixer_list,
|
||||||
echom ''
|
\ printf('%s - %s', string(l:key), s:entries[l:key].description),
|
||||||
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)
|
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
if l:first_for_filetype && l:first_generic
|
let l:filetype_fixer_header = !empty(l:filetype_fixer_list)
|
||||||
echom 'There is nothing in the registry to suggest.'
|
\ ? ['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
|
else
|
||||||
echom ''
|
let l:lines += ['', 'See :help ale-fix-configuration']
|
||||||
echom 'See :help ale-fix-configuration'
|
|
||||||
endif
|
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
|
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.
|
7. Setting syntax highlights for errors.
|
||||||
|
|
||||||
ALE can fix problems with files with the |ALEFix| command, using the same job
|
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*
|
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
|
for filetypes, split on `.`, and the functions named in |g:ale_fixers| will be
|
||||||
executed for fixing the errors.
|
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
|
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
|
|lambda| values. String values must either name a function, or a short name
|
||||||
for a function set in the ALE fixer registry.
|
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.
|
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*
|
ALELint *ALELint*
|
||||||
|
|
||||||
Run ALE once for the current buffer. This command can be used to run ALE
|
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:
|
Before:
|
||||||
call ale#fix#registry#Clear()
|
call ale#fix#registry#Clear()
|
||||||
|
|
||||||
function GetSuggestions()
|
let g:buffer = bufnr('')
|
||||||
redir => l:output
|
|
||||||
silent ALEFixSuggest
|
|
||||||
redir END
|
|
||||||
|
|
||||||
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
|
endfunction
|
||||||
|
|
||||||
After:
|
After:
|
||||||
|
if bufnr('') != g:buffer
|
||||||
|
:q!
|
||||||
|
endif
|
||||||
|
|
||||||
|
unlet! g:buffer
|
||||||
|
|
||||||
call ale#fix#registry#ResetToDefaults()
|
call ale#fix#registry#ResetToDefaults()
|
||||||
delfunction GetSuggestions
|
delfunction GetSuggestions
|
||||||
|
|
||||||
|
@ -17,9 +29,18 @@ Execute(ALEFixSuggest should return something sensible with no suggestions):
|
||||||
AssertEqual
|
AssertEqual
|
||||||
\ [
|
\ [
|
||||||
\ 'There is nothing in the registry to suggest.',
|
\ 'There is nothing in the registry to suggest.',
|
||||||
|
\ '',
|
||||||
|
\ 'Press q to close this window',
|
||||||
\ ],
|
\ ],
|
||||||
\ GetSuggestions()
|
\ 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):
|
Execute(ALEFixSuggest output should be correct for only generic handlers):
|
||||||
call ale#fix#registry#Add('zed', 'XYZ', [], 'Zedify things.')
|
call ale#fix#registry#Add('zed', 'XYZ', [], 'Zedify things.')
|
||||||
call ale#fix#registry#Add('alpha', 'XYZ', [], 'Alpha 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.',
|
\ '''zed'' - Zedify things.',
|
||||||
\ '',
|
\ '',
|
||||||
\ 'See :help ale-fix-configuration',
|
\ 'See :help ale-fix-configuration',
|
||||||
|
\ '',
|
||||||
|
\ 'Press q to close this window',
|
||||||
\ ],
|
\ ],
|
||||||
\ GetSuggestions()
|
\ GetSuggestions()
|
||||||
|
|
||||||
|
@ -49,6 +72,8 @@ Execute(ALEFixSuggest output should be correct for only filetype handlers):
|
||||||
\ '''zed'' - Zedify things.',
|
\ '''zed'' - Zedify things.',
|
||||||
\ '',
|
\ '',
|
||||||
\ 'See :help ale-fix-configuration',
|
\ 'See :help ale-fix-configuration',
|
||||||
|
\ '',
|
||||||
|
\ 'Press q to close this window',
|
||||||
\ ],
|
\ ],
|
||||||
\ GetSuggestions()
|
\ GetSuggestions()
|
||||||
|
|
||||||
|
@ -71,5 +96,7 @@ Execute(ALEFixSuggest should suggest filetype and generic handlers):
|
||||||
\ '''generic'' - Generic things.',
|
\ '''generic'' - Generic things.',
|
||||||
\ '',
|
\ '',
|
||||||
\ 'See :help ale-fix-configuration',
|
\ 'See :help ale-fix-configuration',
|
||||||
|
\ '',
|
||||||
|
\ 'Press q to close this window',
|
||||||
\ ],
|
\ ],
|
||||||
\ GetSuggestions()
|
\ GetSuggestions()
|
||||||
|
|
Reference in a new issue