Use a new window for the ALEFixSuggest command, and document it better
This commit is contained in:
		
							parent
							
								
									f883d4d4fd
								
							
						
					
					
						commit
						8846a8860f
					
				@ -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()
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user