mirror of
https://github.com/amix/vimrc
synced 2025-06-16 09:35:01 +08:00
Removed syntastic and replaced it with ale
Read more here: https://github.com/w0rp/ale
This commit is contained in:
65
sources_non_forked/ale/ale_linters/scala/scalac.vim
Normal file
65
sources_non_forked/ale/ale_linters/scala/scalac.vim
Normal file
@ -0,0 +1,65 @@
|
||||
" Author: Zoltan Kalmar - https://github.com/kalmiz,
|
||||
" w0rp <devw0rp@gmail.com>
|
||||
" Description: Basic scala support using scalac
|
||||
|
||||
function! ale_linters#scala#scalac#GetExecutable(buffer) abort
|
||||
if index(split(getbufvar(a:buffer, '&filetype'), '\.'), 'sbt') >= 0
|
||||
" Don't check sbt files with scalac.
|
||||
return ''
|
||||
endif
|
||||
|
||||
return 'scalac'
|
||||
endfunction
|
||||
|
||||
function! ale_linters#scala#scalac#GetCommand(buffer) abort
|
||||
let l:executable = ale_linters#scala#scalac#GetExecutable(a:buffer)
|
||||
|
||||
if empty(l:executable)
|
||||
return ''
|
||||
endif
|
||||
|
||||
return ale#Escape(l:executable) . ' -Ystop-after:parser %t'
|
||||
endfunction
|
||||
|
||||
function! ale_linters#scala#scalac#Handle(buffer, lines) abort
|
||||
" Matches patterns line the following:
|
||||
"
|
||||
" /var/folders/5q/20rgxx3x1s34g3m14n5bq0x80000gn/T/vv6pSsy/0:26: error: expected class or object definition
|
||||
let l:pattern = '^.\+:\(\d\+\): \(\w\+\): \(.\+\)'
|
||||
let l:output = []
|
||||
let l:ln = 0
|
||||
|
||||
for l:line in a:lines
|
||||
let l:ln = l:ln + 1
|
||||
let l:match = matchlist(l:line, l:pattern)
|
||||
|
||||
if len(l:match) == 0
|
||||
continue
|
||||
endif
|
||||
|
||||
let l:text = l:match[3]
|
||||
let l:type = l:match[2] is# 'error' ? 'E' : 'W'
|
||||
let l:col = 0
|
||||
|
||||
if l:ln + 1 < len(a:lines)
|
||||
let l:col = stridx(a:lines[l:ln + 1], '^')
|
||||
endif
|
||||
|
||||
call add(l:output, {
|
||||
\ 'lnum': l:match[1] + 0,
|
||||
\ 'col': l:col + 1,
|
||||
\ 'text': l:text,
|
||||
\ 'type': l:type,
|
||||
\})
|
||||
endfor
|
||||
|
||||
return l:output
|
||||
endfunction
|
||||
|
||||
call ale#linter#Define('scala', {
|
||||
\ 'name': 'scalac',
|
||||
\ 'executable_callback': 'ale_linters#scala#scalac#GetExecutable',
|
||||
\ 'command_callback': 'ale_linters#scala#scalac#GetCommand',
|
||||
\ 'callback': 'ale_linters#scala#scalac#Handle',
|
||||
\ 'output_stream': 'stderr',
|
||||
\})
|
94
sources_non_forked/ale/ale_linters/scala/scalastyle.vim
Normal file
94
sources_non_forked/ale/ale_linters/scala/scalastyle.vim
Normal file
@ -0,0 +1,94 @@
|
||||
" Author: Kevin Kays - https://github.com/okkays
|
||||
" Description: Support for the scalastyle checker.
|
||||
|
||||
let g:ale_scala_scalastyle_options =
|
||||
\ get(g:, 'ale_scala_scalastyle_options', '')
|
||||
|
||||
let g:ale_scalastyle_config_loc =
|
||||
\ get(g:, 'ale_scalastyle_config_loc', '')
|
||||
|
||||
function! ale_linters#scala#scalastyle#Handle(buffer, lines) abort
|
||||
" Look for help output from scalastyle first, which indicates that no
|
||||
" configuration file was found.
|
||||
for l:line in a:lines[:10]
|
||||
if l:line =~# '-c, --config'
|
||||
return [{
|
||||
\ 'lnum': 1,
|
||||
\ 'text': '(See :help ale-scala-scalastyle)'
|
||||
\ . ' No scalastyle configuration file was found.',
|
||||
\}]
|
||||
endif
|
||||
endfor
|
||||
|
||||
" Matches patterns like the following:
|
||||
"
|
||||
" warning file=/home/blurble/Doop.scala message=Missing or badly formed ScalaDoc: Extra @param foobles line=190
|
||||
let l:patterns = [
|
||||
\ '^\(.\+\) .\+ message=\(.\+\) line=\(\d\+\)$',
|
||||
\ '^\(.\+\) .\+ message=\(.\+\) line=\(\d\+\) column=\(\d\+\)$',
|
||||
\]
|
||||
let l:output = []
|
||||
|
||||
for l:match in ale#util#GetMatches(a:lines, l:patterns)
|
||||
let l:args = {
|
||||
\ 'lnum': l:match[3] + 0,
|
||||
\ 'type': l:match[1] =~? 'error' ? 'E' : 'W',
|
||||
\ 'text': l:match[2]
|
||||
\}
|
||||
|
||||
if !empty(l:match[4])
|
||||
let l:args['col'] = l:match[4] + 1
|
||||
endif
|
||||
|
||||
call add(l:output, l:args)
|
||||
endfor
|
||||
|
||||
return l:output
|
||||
endfunction
|
||||
|
||||
function! ale_linters#scala#scalastyle#GetCommand(buffer) abort
|
||||
" Search for scalastyle config in parent directories.
|
||||
let l:scalastyle_config = ''
|
||||
let l:potential_configs = [
|
||||
\ 'scalastyle_config.xml',
|
||||
\ 'scalastyle-config.xml'
|
||||
\]
|
||||
for l:config in l:potential_configs
|
||||
let l:scalastyle_config = ale#path#ResolveLocalPath(
|
||||
\ a:buffer,
|
||||
\ l:config,
|
||||
\ ''
|
||||
\)
|
||||
if !empty(l:scalastyle_config)
|
||||
break
|
||||
endif
|
||||
endfor
|
||||
|
||||
" If all else fails, try the global config.
|
||||
if empty(l:scalastyle_config)
|
||||
let l:scalastyle_config = get(g:, 'ale_scalastyle_config_loc', '')
|
||||
endif
|
||||
|
||||
" Build the command using the config file and additional options.
|
||||
let l:command = 'scalastyle'
|
||||
|
||||
if !empty(l:scalastyle_config)
|
||||
let l:command .= ' --config ' . ale#Escape(l:scalastyle_config)
|
||||
endif
|
||||
|
||||
if !empty(g:ale_scala_scalastyle_options)
|
||||
let l:command .= ' ' . g:ale_scala_scalastyle_options
|
||||
endif
|
||||
|
||||
let l:command .= ' %t'
|
||||
|
||||
return l:command
|
||||
endfunction
|
||||
|
||||
call ale#linter#Define('scala', {
|
||||
\ 'name': 'scalastyle',
|
||||
\ 'executable': 'scalastyle',
|
||||
\ 'output_stream': 'stdout',
|
||||
\ 'command_callback': 'ale_linters#scala#scalastyle#GetCommand',
|
||||
\ 'callback': 'ale_linters#scala#scalastyle#Handle',
|
||||
\})
|
Reference in New Issue
Block a user