117 lines
3.7 KiB
VimL
117 lines
3.7 KiB
VimL
if exists('g:loaded_syntastic_modemap') || !exists('g:loaded_syntastic_plugin')
|
|
finish
|
|
endif
|
|
let g:loaded_syntastic_modemap = 1
|
|
|
|
let g:SyntasticModeMap = {}
|
|
|
|
" Public methods {{{1
|
|
|
|
function! g:SyntasticModeMap.Instance() abort " {{{2
|
|
if !exists('s:SyntasticModeMapInstance')
|
|
let s:SyntasticModeMapInstance = copy(self)
|
|
call s:SyntasticModeMapInstance.synch()
|
|
endif
|
|
|
|
return s:SyntasticModeMapInstance
|
|
endfunction " }}}2
|
|
|
|
function! g:SyntasticModeMap.synch() abort " {{{2
|
|
if exists('g:syntastic_mode_map')
|
|
let self._mode = get(g:syntastic_mode_map, 'mode', 'active')
|
|
let self._activeFiletypes = copy(get(g:syntastic_mode_map, 'active_filetypes', []))
|
|
let self._passiveFiletypes = copy(get(g:syntastic_mode_map, 'passive_filetypes', []))
|
|
else
|
|
let self._mode = 'active'
|
|
let self._activeFiletypes = []
|
|
let self._passiveFiletypes = []
|
|
endif
|
|
endfunction " }}}2
|
|
|
|
function! g:SyntasticModeMap.allowsAutoChecking(filetype) abort " {{{2
|
|
let fts = split(a:filetype, '\m\.')
|
|
|
|
if self.isPassive()
|
|
return self._isOneFiletypeActive(fts)
|
|
else
|
|
return self._noFiletypesArePassive(fts)
|
|
endif
|
|
endfunction " }}}2
|
|
|
|
function! g:SyntasticModeMap.doAutoChecking() abort " {{{2
|
|
let local_mode = get(b:, 'syntastic_mode', '')
|
|
if local_mode ==# 'active' || local_mode ==# 'passive'
|
|
return local_mode ==# 'active'
|
|
endif
|
|
|
|
return self.allowsAutoChecking(&filetype)
|
|
endfunction " }}}2
|
|
|
|
function! g:SyntasticModeMap.isPassive() abort " {{{2
|
|
return self._mode ==# 'passive'
|
|
endfunction " }}}2
|
|
|
|
function! g:SyntasticModeMap.toggleMode() abort " {{{2
|
|
call self.synch()
|
|
|
|
if self._mode ==# 'active'
|
|
let self._mode = 'passive'
|
|
else
|
|
let self._mode = 'active'
|
|
endif
|
|
|
|
"XXX Changing a global variable. Tsk, tsk...
|
|
if !exists('g:syntastic_mode_map')
|
|
let g:syntastic_mode_map = {}
|
|
endif
|
|
let g:syntastic_mode_map['mode'] = self._mode
|
|
endfunction " }}}2
|
|
|
|
function! g:SyntasticModeMap.echoMode() abort " {{{2
|
|
echo 'Syntastic: ' . self._mode . ' mode enabled'
|
|
endfunction " }}}2
|
|
|
|
function! g:SyntasticModeMap.modeInfo(filetypes) abort " {{{2
|
|
echomsg 'Syntastic version: ' . g:syntastic_version
|
|
let type = len(a:filetypes) ? a:filetypes[0] : &filetype
|
|
echomsg 'Info for filetype: ' . type
|
|
|
|
call self.synch()
|
|
echomsg 'Global mode: ' . self._mode
|
|
if self._mode ==# 'active'
|
|
if len(self._passiveFiletypes)
|
|
let plural = len(self._passiveFiletypes) != 1 ? 's' : ''
|
|
echomsg 'Passive filetype' . plural . ': ' . join(sort(copy(self._passiveFiletypes)))
|
|
endif
|
|
else
|
|
if len(self._activeFiletypes)
|
|
let plural = len(self._activeFiletypes) != 1 ? 's' : ''
|
|
echomsg 'Active filetype' . plural . ': ' . join(sort(copy(self._activeFiletypes)))
|
|
endif
|
|
endif
|
|
echomsg 'Filetype ' . type . ' is ' . (self.allowsAutoChecking(type) ? 'active' : 'passive')
|
|
|
|
if !len(a:filetypes)
|
|
if exists('b:syntastic_mode') && (b:syntastic_mode ==# 'active' || b:syntastic_mode ==# 'passive')
|
|
echomsg 'Local mode: ' . b:syntastic_mode
|
|
endif
|
|
|
|
echomsg 'The current file will ' . (self.doAutoChecking() ? '' : 'not ') . 'be checked automatically'
|
|
endif
|
|
endfunction " }}}2
|
|
|
|
" }}}1
|
|
|
|
" Private methods {{{1
|
|
|
|
function! g:SyntasticModeMap._isOneFiletypeActive(filetypes) abort " {{{2
|
|
return !empty(filter(copy(a:filetypes), 'index(self._activeFiletypes, v:val) != -1'))
|
|
endfunction " }}}2
|
|
|
|
function! g:SyntasticModeMap._noFiletypesArePassive(filetypes) abort " {{{2
|
|
return empty(filter(copy(a:filetypes), 'index(self._passiveFiletypes, v:val) != -1'))
|
|
endfunction " }}}2
|
|
|
|
" }}}1
|
|
|
|
" vim: set sw=4 sts=4 et fdm=marker:
|