mirror of
				https://github.com/amix/vimrc
				synced 2025-10-31 14:43:35 +08:00 
			
		
		
		
	Removed syntastic and replaced it with ale
Read more here: https://github.com/w0rp/ale
This commit is contained in:
		
							
								
								
									
										96
									
								
								sources_non_forked/ale/ale_linters/erlang/erlc.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								sources_non_forked/ale/ale_linters/erlang/erlc.vim
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,96 @@ | ||||
| " Author: Magnus Ottenklinger - https://github.com/evnu | ||||
|  | ||||
| let g:ale_erlang_erlc_options = get(g:, 'ale_erlang_erlc_options', '') | ||||
|  | ||||
| function! ale_linters#erlang#erlc#GetCommand(buffer) abort | ||||
|     let l:output_file = tempname() | ||||
|     call ale#engine#ManageFile(a:buffer, l:output_file) | ||||
|  | ||||
|     return 'erlc -o ' . ale#Escape(l:output_file) | ||||
|     \   . ' ' . ale#Var(a:buffer, 'erlang_erlc_options') | ||||
|     \   . ' %t' | ||||
| endfunction | ||||
|  | ||||
| function! ale_linters#erlang#erlc#Handle(buffer, lines) abort | ||||
|     " Matches patterns like the following: | ||||
|     " | ||||
|     " error.erl:4: variable 'B' is unbound | ||||
|     " error.erl:3: Warning: function main/0 is unused | ||||
|     " error.erl:4: Warning: variable 'A' is unused | ||||
|     let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+): (Warning: )?(.+)$' | ||||
|  | ||||
|     " parse_transforms are a special case. The error message does not indicate a location: | ||||
|     " error.erl: undefined parse transform 'some_parse_transform' | ||||
|     let l:pattern_parse_transform = '\v(undefined parse transform .*)$' | ||||
|     let l:output = [] | ||||
|  | ||||
|     let l:pattern_no_module_definition = '\v(no module definition)$' | ||||
|     let l:pattern_unused = '\v(.* is unused)$' | ||||
|  | ||||
|     let l:is_hrl = fnamemodify(bufname(a:buffer), ':e') is# 'hrl' | ||||
|  | ||||
|     for l:line in a:lines | ||||
|         let l:match = matchlist(l:line, l:pattern) | ||||
|  | ||||
|         " Determine if the output indicates an error. We distinguish between two cases: | ||||
|         " | ||||
|         " 1) normal errors match l:pattern | ||||
|         " 2) parse_transform errors match l:pattern_parse_transform | ||||
|         " | ||||
|         " If none of the patterns above match, the line can be ignored | ||||
|         if len(l:match) == 0 " not a 'normal' warning or error | ||||
|             let l:match_parse_transform = matchlist(l:line, l:pattern_parse_transform) | ||||
|  | ||||
|             if len(l:match_parse_transform) == 0 " also not a parse_transform error | ||||
|                 continue | ||||
|             endif | ||||
|  | ||||
|             call add(l:output, { | ||||
|             \   'bufnr': a:buffer, | ||||
|             \   'lnum': 0, | ||||
|             \   'col': 0, | ||||
|             \   'type': 'E', | ||||
|             \   'text': l:match_parse_transform[0], | ||||
|             \}) | ||||
|  | ||||
|             continue | ||||
|         endif | ||||
|  | ||||
|         let l:line = l:match[2] | ||||
|         let l:warning_or_text = l:match[3] | ||||
|         let l:text = l:match[4] | ||||
|  | ||||
|         " If this file is a header .hrl, ignore the following expected messages: | ||||
|         " - 'no module definition' | ||||
|         " - 'X is unused' | ||||
|         if l:is_hrl && ( | ||||
|         \   match(l:text, l:pattern_no_module_definition) != -1 | ||||
|         \   || match(l:text, l:pattern_unused) != -1 | ||||
|         \) | ||||
|             continue | ||||
|         endif | ||||
|  | ||||
|         if !empty(l:warning_or_text) | ||||
|             let l:type = 'W' | ||||
|         else | ||||
|             let l:type = 'E' | ||||
|         endif | ||||
|  | ||||
|         call add(l:output, { | ||||
|         \   'bufnr': a:buffer, | ||||
|         \   'lnum': l:line, | ||||
|         \   'col': 0, | ||||
|         \   'type': l:type, | ||||
|         \   'text': l:text, | ||||
|         \}) | ||||
|     endfor | ||||
|  | ||||
|     return l:output | ||||
| endfunction | ||||
|  | ||||
| call ale#linter#Define('erlang', { | ||||
| \   'name': 'erlc', | ||||
| \   'executable': 'erlc', | ||||
| \   'command_callback': 'ale_linters#erlang#erlc#GetCommand', | ||||
| \   'callback': 'ale_linters#erlang#erlc#Handle', | ||||
| \}) | ||||
							
								
								
									
										53
									
								
								sources_non_forked/ale/ale_linters/erlang/syntaxerl.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								sources_non_forked/ale/ale_linters/erlang/syntaxerl.vim
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,53 @@ | ||||
| " Author: Dmitri Vereshchagin <dmitri.vereshchagin@gmail.com> | ||||
| " Description: SyntaxErl linter for Erlang files | ||||
|  | ||||
| call ale#Set('erlang_syntaxerl_executable', 'syntaxerl') | ||||
|  | ||||
|  | ||||
| function! ale_linters#erlang#syntaxerl#GetExecutable(buffer) abort | ||||
|     return ale#Var(a:buffer, 'erlang_syntaxerl_executable') | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| function! ale_linters#erlang#syntaxerl#FeatureCheck(buffer) abort | ||||
|     return s:GetEscapedExecutable(a:buffer) . ' -h' | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| function! ale_linters#erlang#syntaxerl#GetCommand(buffer, output) abort | ||||
|     let l:use_b_option = match(a:output, '\C\V-b, --base\>') > -1 | ||||
|  | ||||
|     return s:GetEscapedExecutable(a:buffer) . (l:use_b_option ? ' -b %s %t' : ' %t') | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| function! ale_linters#erlang#syntaxerl#Handle(buffer, lines) abort | ||||
|     let l:pattern = '\v\C:(\d+):( warning:)? (.+)' | ||||
|     let l:loclist = [] | ||||
|  | ||||
|     for l:match in ale#util#GetMatches(a:lines, l:pattern) | ||||
|         call add(l:loclist, { | ||||
|         \   'lnum': l:match[1] + 0, | ||||
|         \   'text': l:match[3], | ||||
|         \   'type': empty(l:match[2]) ? 'E' : 'W', | ||||
|         \}) | ||||
|     endfor | ||||
|  | ||||
|     return l:loclist | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| function! s:GetEscapedExecutable(buffer) abort | ||||
|     return ale#Escape(ale_linters#erlang#syntaxerl#GetExecutable(a:buffer)) | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| call ale#linter#Define('erlang', { | ||||
| \   'name': 'syntaxerl', | ||||
| \   'executable_callback': 'ale_linters#erlang#syntaxerl#GetExecutable', | ||||
| \   'command_chain': [ | ||||
| \       {'callback': 'ale_linters#erlang#syntaxerl#FeatureCheck'}, | ||||
| \       {'callback': 'ale_linters#erlang#syntaxerl#GetCommand'}, | ||||
| \   ], | ||||
| \   'callback': 'ale_linters#erlang#syntaxerl#Handle', | ||||
| \}) | ||||
		Reference in New Issue
	
	Block a user
	 Amir Salihefendic
					Amir Salihefendic