mirror of
https://github.com/amix/vimrc
synced 2025-07-10 03:25:00 +08:00
Updated plugins
This commit is contained in:
@ -69,7 +69,6 @@ function! g:SyntasticChecker.getLocListRaw() " {{{2
|
||||
call self._populateHighlightRegexes(list)
|
||||
call syntastic#log#debug(g:SyntasticDebugLoclist, name . ' raw:', list)
|
||||
call self._quietMessages(list)
|
||||
call self._sortMessages(list)
|
||||
return list
|
||||
endfunction " }}}2
|
||||
|
||||
@ -99,7 +98,10 @@ function! g:SyntasticChecker.makeprgBuild(opts) " {{{2
|
||||
endfunction " }}}2
|
||||
|
||||
function! g:SyntasticChecker.isAvailable() " {{{2
|
||||
return self._isAvailableFunc()
|
||||
if !has_key(self, '_available')
|
||||
let self._available = self._isAvailableFunc()
|
||||
endif
|
||||
return self._available
|
||||
endfunction " }}}2
|
||||
|
||||
" }}}1
|
||||
@ -131,20 +133,12 @@ function! g:SyntasticChecker._quietMessages(errors) " {{{2
|
||||
endif
|
||||
endfunction " }}}2
|
||||
|
||||
function! g:SyntasticChecker._sortMessages(errors) " {{{2
|
||||
" don't sort now if we're going to sort the aggregated list later
|
||||
if self._sort && !(syntastic#util#var('aggregate_errors') && syntastic#util#var('sort_aggregated_errors'))
|
||||
call syntastic#util#sortLoclist(a:errors)
|
||||
call syntastic#log#debug(g:SyntasticDebugLoclist, 'sorted:', a:errors)
|
||||
endif
|
||||
endfunction " }}}2
|
||||
|
||||
function! g:SyntasticChecker._populateHighlightRegexes(errors) " {{{2
|
||||
if has_key(self, '_highlightRegexFunc')
|
||||
for e in a:errors
|
||||
if e['valid']
|
||||
let term = self._highlightRegexFunc(e)
|
||||
if len(term) > 0
|
||||
if term != ''
|
||||
let e['hl'] = term
|
||||
endif
|
||||
endif
|
||||
|
@ -22,7 +22,7 @@ function! g:SyntasticCursorNotifier.refresh(loclist) " {{{2
|
||||
let b:syntastic_messages = copy(a:loclist.messages(bufnr('')))
|
||||
let b:oldLine = -1
|
||||
autocmd! syntastic CursorMoved
|
||||
autocmd syntastic CursorMoved * call g:SyntasticRefreshCursor()
|
||||
autocmd syntastic CursorMoved * call SyntasticRefreshCursor()
|
||||
endif
|
||||
endfunction " }}}2
|
||||
|
||||
@ -40,7 +40,7 @@ endfunction " }}}2
|
||||
" Private methods {{{1
|
||||
|
||||
" The following defensive nonsense is needed because of the nature of autocmd
|
||||
function! g:SyntasticRefreshCursor() " {{{2
|
||||
function! SyntasticRefreshCursor() " {{{2
|
||||
if !exists('b:syntastic_messages') || empty(b:syntastic_messages)
|
||||
" file not checked
|
||||
return
|
||||
|
@ -5,6 +5,7 @@ let g:loaded_syntastic_notifier_highlighting = 1
|
||||
|
||||
" Highlighting requires getmatches introduced in 7.1.040
|
||||
let s:has_highlighting = v:version > 701 || (v:version == 701 && has('patch040'))
|
||||
lockvar s:has_highlighting
|
||||
|
||||
let g:SyntasticHighlightingNotifier = {}
|
||||
|
||||
@ -18,6 +19,7 @@ function! g:SyntasticHighlightingNotifier.New() " {{{2
|
||||
if !s:setup_done
|
||||
call self._setup()
|
||||
let s:setup_done = 1
|
||||
lockvar s:setup_done
|
||||
endif
|
||||
|
||||
return newObj
|
||||
@ -35,7 +37,7 @@ function! g:SyntasticHighlightingNotifier.refresh(loclist) " {{{2
|
||||
let buf = bufnr('')
|
||||
let issues = filter(a:loclist.copyRaw(), 'v:val["bufnr"] == buf')
|
||||
for item in issues
|
||||
let group = item['type'] ==? 'E' ? 'SyntasticError' : 'SyntasticWarning'
|
||||
let group = 'Syntastic' . get(item, 'subtype', '') . ( item['type'] ==? 'E' ? 'Error' : 'Warning' )
|
||||
|
||||
" The function `Syntastic_{filetype}_{checker}_GetHighlightRegex` is
|
||||
" used to override default highlighting.
|
||||
@ -80,11 +82,16 @@ function! g:SyntasticHighlightingNotifier._setup() " {{{2
|
||||
if s:has_highlighting
|
||||
if !hlexists('SyntasticError')
|
||||
highlight link SyntasticError SpellBad
|
||||
|
||||
endif
|
||||
if !hlexists('SyntasticWarning')
|
||||
highlight link SyntasticWarning SpellCap
|
||||
endif
|
||||
if !hlexists('SyntasticStyleError')
|
||||
highlight link SyntasticStyleError SyntasticError
|
||||
endif
|
||||
if !hlexists('SyntasticStyleWarning')
|
||||
highlight link SyntasticStyleWarning SyntasticWarning
|
||||
endif
|
||||
endif
|
||||
endfunction " }}}2
|
||||
|
||||
|
@ -20,12 +20,13 @@ function! g:SyntasticLoclist.New(rawLoclist) " {{{2
|
||||
|
||||
let newObj._rawLoclist = llist
|
||||
let newObj._name = ''
|
||||
let newObj._owner = bufnr('')
|
||||
|
||||
return newObj
|
||||
endfunction " }}}2
|
||||
|
||||
function! g:SyntasticLoclist.current() " {{{2
|
||||
if !exists("b:syntastic_loclist")
|
||||
if !exists("b:syntastic_loclist") || empty(b:syntastic_loclist)
|
||||
let b:syntastic_loclist = g:SyntasticLoclist.New([])
|
||||
endif
|
||||
return b:syntastic_loclist
|
||||
@ -53,6 +54,10 @@ function! g:SyntasticLoclist.getRaw() " {{{2
|
||||
return self._rawLoclist
|
||||
endfunction " }}}2
|
||||
|
||||
function! g:SyntasticLoclist.getBuffers() " {{{2
|
||||
return syntastic#util#unique(map(copy(self._rawLoclist), 'str2nr(v:val["bufnr"])') + [self._owner])
|
||||
endfunction " }}}2
|
||||
|
||||
function! g:SyntasticLoclist.getStatuslineFlag() " {{{2
|
||||
if !exists("self._stl_format")
|
||||
let self._stl_format = ''
|
||||
@ -118,6 +123,26 @@ function! g:SyntasticLoclist.setName(name) " {{{2
|
||||
let self._name = a:name
|
||||
endfunction " }}}2
|
||||
|
||||
function! g:SyntasticLoclist.getOwner() " {{{2
|
||||
return self._owner
|
||||
endfunction " }}}2
|
||||
|
||||
function! g:SyntasticLoclist.setOwner(buffer) " {{{2
|
||||
let self._owner = type(a:buffer) == type(0) ? a:buffer : str2nr(a:buffer)
|
||||
endfunction " }}}2
|
||||
|
||||
function! g:SyntasticLoclist.deploy() " {{{2
|
||||
for buf in self.getBuffers()
|
||||
call setbufvar(buf, 'syntastic_loclist', self)
|
||||
endfor
|
||||
endfunction " }}}2
|
||||
|
||||
function! g:SyntasticLoclist.destroy() " {{{2
|
||||
for buf in self.getBuffers()
|
||||
call setbufvar(buf, 'syntastic_loclist', {})
|
||||
endfor
|
||||
endfunction " }}}2
|
||||
|
||||
function! g:SyntasticLoclist.decorate(tag) " {{{2
|
||||
for e in self._rawLoclist
|
||||
let e['text'] .= ' [' . a:tag . ']'
|
||||
@ -216,6 +241,7 @@ function! g:SyntasticLoclist.show() " {{{2
|
||||
if strpart(title, 0, 16) ==# ':SyntasticCheck ' ||
|
||||
\ ( (title == '' || title ==# ':setloclist()') && errors == getloclist(0) )
|
||||
call setwinvar(win, 'quickfix_title', ':SyntasticCheck ' . self._name)
|
||||
call setbufvar(buf, 'syntastic_owner_buffer', self._owner)
|
||||
endif
|
||||
endif
|
||||
endfor
|
||||
@ -226,7 +252,7 @@ endfunction " }}}2
|
||||
|
||||
" Non-method functions {{{1
|
||||
|
||||
function! g:SyntasticLoclistHide() " {{{2
|
||||
function! SyntasticLoclistHide() " {{{2
|
||||
call syntastic#log#debug(g:SyntasticDebugNotifications, 'loclist: hide')
|
||||
silent! lclose
|
||||
endfunction " }}}2
|
||||
|
@ -6,6 +6,7 @@ let g:loaded_syntastic_notifiers = 1
|
||||
let g:SyntasticNotifiers = {}
|
||||
|
||||
let s:notifier_types = ['signs', 'balloons', 'highlighting', 'cursor', 'autoloclist']
|
||||
lockvar! s:notifier_types
|
||||
|
||||
" Public methods {{{1
|
||||
|
||||
|
@ -11,8 +11,10 @@ let s:defaultCheckers = {
|
||||
\ 'applescript': ['osacompile'],
|
||||
\ 'asciidoc': ['asciidoc'],
|
||||
\ 'asm': ['gcc'],
|
||||
\ 'bro': ['bro'],
|
||||
\ 'bemhtml': ['bemhtmllint'],
|
||||
\ 'c': ['gcc'],
|
||||
\ 'cabal': ['cabal'],
|
||||
\ 'chef': ['foodcritic'],
|
||||
\ 'co': ['coco'],
|
||||
\ 'cobol': ['cobc'],
|
||||
@ -64,7 +66,6 @@ let s:defaultCheckers = {
|
||||
\ 'racket': ['racket'],
|
||||
\ 'rst': ['rst2pseudoxml'],
|
||||
\ 'ruby': ['mri'],
|
||||
\ 'rust': ['rustc'],
|
||||
\ 'sass': ['sass'],
|
||||
\ 'scala': ['fsc', 'scalac'],
|
||||
\ 'scss': ['sass', 'scss_lint'],
|
||||
@ -89,12 +90,14 @@ let s:defaultCheckers = {
|
||||
\ 'zpt': ['zptlint'],
|
||||
\ 'zsh': ['zsh', 'shellcheck']
|
||||
\ }
|
||||
lockvar! s:defaultCheckers
|
||||
|
||||
let s:defaultFiletypeMap = {
|
||||
\ 'gentoo-metadata': 'xml',
|
||||
\ 'lhaskell': 'haskell',
|
||||
\ 'litcoffee': 'coffee'
|
||||
\ }
|
||||
lockvar! s:defaultFiletypeMap
|
||||
|
||||
let g:SyntasticRegistry = {}
|
||||
|
||||
@ -102,14 +105,13 @@ let g:SyntasticRegistry = {}
|
||||
|
||||
" Public methods {{{1
|
||||
|
||||
" TODO: Handling of filetype aliases: all public methods take aliases as
|
||||
" Note: Handling of filetype aliases: all public methods take aliases as
|
||||
" parameters, all private methods take normalized filetypes. Public methods
|
||||
" are thus supposed to normalize filetypes before calling private methods.
|
||||
|
||||
function! g:SyntasticRegistry.Instance() " {{{2
|
||||
if !exists('s:SyntasticRegistryInstance')
|
||||
let s:SyntasticRegistryInstance = copy(self)
|
||||
let s:SyntasticRegistryInstance._checkerRaw = {}
|
||||
let s:SyntasticRegistryInstance._checkerMap = {}
|
||||
endif
|
||||
|
||||
@ -122,29 +124,23 @@ function! g:SyntasticRegistry.CreateAndRegisterChecker(args) " {{{2
|
||||
call registry._registerChecker(checker)
|
||||
endfunction " }}}2
|
||||
|
||||
function! g:SyntasticRegistry.isCheckable(ftalias) " {{{2
|
||||
" Given a list of checker names hints_list, return a map name --> checker.
|
||||
" If hints_list is empty, user settings are are used instead. Checkers are
|
||||
" not checked for availability (that is, the corresponding IsAvailable() are
|
||||
" not run).
|
||||
function! g:SyntasticRegistry.getCheckers(ftalias, hints_list) " {{{2
|
||||
let ft = s:normaliseFiletype(a:ftalias)
|
||||
call self._loadCheckers(ft)
|
||||
return !empty(self._checkerMap[ft])
|
||||
endfunction " }}}2
|
||||
call self._loadCheckersFor(ft)
|
||||
|
||||
function! g:SyntasticRegistry.getCheckersMap(ftalias) " {{{2
|
||||
let ft = s:normaliseFiletype(a:ftalias)
|
||||
call self._loadCheckers(ft)
|
||||
return self._checkerMap[ft]
|
||||
endfunction " }}}2
|
||||
|
||||
function! g:SyntasticRegistry.getCheckers(ftalias, list) " {{{2
|
||||
let checkers_map = self.getCheckersMap(a:ftalias)
|
||||
let checkers_map = self._checkerMap[ft]
|
||||
if empty(checkers_map)
|
||||
return []
|
||||
endif
|
||||
|
||||
let ft = s:normaliseFiletype(a:ftalias)
|
||||
call self._checkDeprecation(ft)
|
||||
|
||||
let names =
|
||||
\ !empty(a:list) ? a:list :
|
||||
\ !empty(a:hints_list) ? syntastic#util#unique(a:hints_list) :
|
||||
\ exists('b:syntastic_checkers') ? b:syntastic_checkers :
|
||||
\ exists('g:syntastic_' . ft . '_checkers') ? g:syntastic_{ft}_checkers :
|
||||
\ get(s:defaultCheckers, ft, 0)
|
||||
@ -153,6 +149,12 @@ function! g:SyntasticRegistry.getCheckers(ftalias, list) " {{{2
|
||||
\ self._filterCheckersByName(checkers_map, names) : [checkers_map[keys(checkers_map)[0]]]
|
||||
endfunction " }}}2
|
||||
|
||||
" Same as getCheckers(), but keep only the checkers available. This runs the
|
||||
" corresponding IsAvailable() functions for all checkers.
|
||||
function! g:SyntasticRegistry.getCheckersAvailable(ftalias, hints_list) " {{{2
|
||||
return filter(self.getCheckers(a:ftalias, a:hints_list), 'v:val.isAvailable()')
|
||||
endfunction " }}}2
|
||||
|
||||
function! g:SyntasticRegistry.getKnownFiletypes() " {{{2
|
||||
let types = keys(s:defaultCheckers)
|
||||
|
||||
@ -169,8 +171,15 @@ function! g:SyntasticRegistry.getKnownFiletypes() " {{{2
|
||||
return syntastic#util#unique(types)
|
||||
endfunction " }}}2
|
||||
|
||||
function! g:SyntasticRegistry.getNamesOfAvailableCheckers(ftalias) " {{{2
|
||||
let ft = s:normaliseFiletype(a:ftalias)
|
||||
call self._loadCheckersFor(ft)
|
||||
return keys(filter( copy(self._checkerMap[ft]), 'v:val.isAvailable()' ))
|
||||
endfunction " }}}2
|
||||
|
||||
function! g:SyntasticRegistry.echoInfoFor(ftalias_list) " {{{2
|
||||
echomsg "Syntastic info for filetype: " . join(a:ftalias_list, '.')
|
||||
echomsg "Syntastic version: " . g:syntastic_version
|
||||
echomsg "Info for filetype: " . join(a:ftalias_list, '.')
|
||||
|
||||
let ft_list = syntastic#util#unique(map( copy(a:ftalias_list), 's:normaliseFiletype(v:val)' ))
|
||||
if len(ft_list) != 1
|
||||
@ -178,13 +187,13 @@ function! g:SyntasticRegistry.echoInfoFor(ftalias_list) " {{{2
|
||||
let active = []
|
||||
|
||||
for ft in ft_list
|
||||
call extend(available, map( keys(self.getCheckersMap(ft)), 'ft . "/" . v:val' ))
|
||||
call extend(active, map( self.getCheckers(ft, []), 'ft . "/" . v:val.getName()' ))
|
||||
call extend(available, map( self.getNamesOfAvailableCheckers(ft), 'ft . "/" . v:val' ))
|
||||
call extend(active, map( self.getCheckersAvailable(ft, []), 'ft . "/" . v:val.getName()' ))
|
||||
endfor
|
||||
else
|
||||
let ft = ft_list[0]
|
||||
let available = keys(self.getCheckersMap(ft))
|
||||
let active = map(self.getCheckers(ft, []), 'v:val.getName()')
|
||||
let available = self.getNamesOfAvailableCheckers(ft)
|
||||
let active = map(self.getCheckersAvailable(ft, []), 'v:val.getName()')
|
||||
endif
|
||||
|
||||
echomsg "Available checker(s): " . join(sort(available))
|
||||
@ -197,52 +206,39 @@ endfunction " }}}2
|
||||
|
||||
function! g:SyntasticRegistry._registerChecker(checker) abort " {{{2
|
||||
let ft = a:checker.getFiletype()
|
||||
|
||||
if !has_key(self._checkerRaw, ft)
|
||||
let self._checkerRaw[ft] = []
|
||||
if !has_key(self._checkerMap, ft)
|
||||
let self._checkerMap[ft] = {}
|
||||
endif
|
||||
|
||||
call self._validateUniqueName(a:checker)
|
||||
|
||||
let name = a:checker.getName()
|
||||
call add(self._checkerRaw[ft], name)
|
||||
|
||||
if a:checker.isAvailable()
|
||||
let self._checkerMap[ft][name] = a:checker
|
||||
if has_key(self._checkerMap[ft], name)
|
||||
throw 'Syntastic: Duplicate syntax checker name: ' . ft . '/' . name
|
||||
endif
|
||||
|
||||
let self._checkerMap[ft][name] = a:checker
|
||||
endfunction " }}}2
|
||||
|
||||
function! g:SyntasticRegistry._filterCheckersByName(checkers_map, list) " {{{2
|
||||
return filter( map(copy(a:list), 'get(a:checkers_map, v:val, {})'), '!empty(v:val)' )
|
||||
endfunction " }}}2
|
||||
|
||||
function! g:SyntasticRegistry._loadCheckers(filetype) " {{{2
|
||||
if has_key(self._checkerRaw, a:filetype)
|
||||
function! g:SyntasticRegistry._loadCheckersFor(filetype) " {{{2
|
||||
if has_key(self._checkerMap, a:filetype)
|
||||
return
|
||||
endif
|
||||
|
||||
execute "runtime! syntax_checkers/" . a:filetype . "/*.vim"
|
||||
|
||||
if !has_key(self._checkerRaw, a:filetype)
|
||||
let self._checkerRaw[a:filetype] = []
|
||||
if !has_key(self._checkerMap, a:filetype)
|
||||
let self._checkerMap[a:filetype] = {}
|
||||
endif
|
||||
endfunction " }}}2
|
||||
|
||||
function! g:SyntasticRegistry._validateUniqueName(checker) abort " {{{2
|
||||
let ft = a:checker.getFiletype()
|
||||
let name = a:checker.getName()
|
||||
if index(self._checkerRaw[ft], name) > -1
|
||||
throw 'Syntastic: Duplicate syntax checker name: ' . ft . '/' . name
|
||||
endif
|
||||
endfunction " }}}2
|
||||
|
||||
" Check for obsolete variable g:syntastic_<filetype>_checker
|
||||
function! g:SyntasticRegistry._checkDeprecation(filetype) " {{{2
|
||||
if exists('g:syntastic_' . a:filetype . '_checker') && !exists('g:syntastic_' . a:filetype . '_checkers')
|
||||
let g:syntastic_{a:filetype}_checkers = [g:syntastic_{a:filetype}_checker]
|
||||
call syntastic#log#deprecationWarn('variable g:syntastic_' . a:filetype . '_checker is deprecated')
|
||||
call syntastic#log#oneTimeWarn('variable g:syntastic_' . a:filetype . '_checker is deprecated')
|
||||
endif
|
||||
endfunction " }}}2
|
||||
|
||||
|
@ -25,6 +25,7 @@ function! g:SyntasticSignsNotifier.New() " {{{2
|
||||
if !s:setup_done
|
||||
call self._setup()
|
||||
let s:setup_done = 1
|
||||
lockvar s:setup_done
|
||||
endif
|
||||
|
||||
return newObj
|
||||
@ -41,7 +42,7 @@ function! g:SyntasticSignsNotifier.refresh(loclist) " {{{2
|
||||
call self._signErrors(a:loclist)
|
||||
endif
|
||||
call self._removeSigns(old_signs)
|
||||
let s:first_sign_id = s:next_sign_id
|
||||
let s:first_sign_id = exists('s:next_sign_id') ? s:next_sign_id : 5000
|
||||
endfunction " }}}2
|
||||
|
||||
" }}}1
|
||||
@ -98,13 +99,15 @@ function! g:SyntasticSignsNotifier._signErrors(loclist) " {{{2
|
||||
if !has_key(seen, i['lnum'])
|
||||
let seen[i['lnum']] = 1
|
||||
|
||||
let sign_severity = i['type'] ==? 'W' ? 'Warning' : 'Error'
|
||||
let sign_subtype = get(i, 'subtype', '')
|
||||
let sign_type = 'Syntastic' . sign_subtype . sign_severity
|
||||
if i['lnum'] > 0
|
||||
let sign_severity = i['type'] ==? 'W' ? 'Warning' : 'Error'
|
||||
let sign_subtype = get(i, 'subtype', '')
|
||||
let sign_type = 'Syntastic' . sign_subtype . sign_severity
|
||||
|
||||
execute "sign place " . s:next_sign_id . " line=" . i['lnum'] . " name=" . sign_type . " buffer=" . i['bufnr']
|
||||
call add(self._bufSignIds(), s:next_sign_id)
|
||||
let s:next_sign_id += 1
|
||||
execute "sign place " . s:next_sign_id . " line=" . i['lnum'] . " name=" . sign_type . " buffer=" . i['bufnr']
|
||||
call add(self._bufSignIds(), s:next_sign_id)
|
||||
let s:next_sign_id += 1
|
||||
endif
|
||||
endif
|
||||
endfor
|
||||
endif
|
||||
@ -113,9 +116,9 @@ endfunction " }}}2
|
||||
" Remove the signs with the given ids from this buffer
|
||||
function! g:SyntasticSignsNotifier._removeSigns(ids) " {{{2
|
||||
if has('signs')
|
||||
for i in a:ids
|
||||
execute "sign unplace " . i
|
||||
call remove(self._bufSignIds(), index(self._bufSignIds(), i))
|
||||
for s in reverse(copy(a:ids))
|
||||
execute "sign unplace " . s
|
||||
call remove(self._bufSignIds(), index(self._bufSignIds(), s))
|
||||
endfor
|
||||
endif
|
||||
endfunction " }}}2
|
||||
|
Reference in New Issue
Block a user