diff options
Diffstat (limited to 'vim/bundle/syntastic/plugin/syntastic/highlighting.vim')
-rw-r--r-- | vim/bundle/syntastic/plugin/syntastic/highlighting.vim | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/vim/bundle/syntastic/plugin/syntastic/highlighting.vim b/vim/bundle/syntastic/plugin/syntastic/highlighting.vim new file mode 100644 index 0000000..a9e1a08 --- /dev/null +++ b/vim/bundle/syntastic/plugin/syntastic/highlighting.vim @@ -0,0 +1,104 @@ +if exists('g:loaded_syntastic_notifier_highlighting') || !exists('g:loaded_syntastic_plugin') + finish +endif +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 = {} + +let s:setup_done = 0 + +" Public methods {{{1 + +function! g:SyntasticHighlightingNotifier.New() abort " {{{2 + let newObj = copy(self) + + if !s:setup_done + call self._setup() + let s:setup_done = 1 + lockvar s:setup_done + endif + + return newObj +endfunction " }}}2 + +function! g:SyntasticHighlightingNotifier.enabled() abort " {{{2 + return s:has_highlighting && syntastic#util#var('enable_highlighting') +endfunction " }}}2 + +" Sets error highlights in the current window +function! g:SyntasticHighlightingNotifier.refresh(loclist) abort " {{{2 + if self.enabled() + call syntastic#log#debug(g:_SYNTASTIC_DEBUG_NOTIFICATIONS, 'highlighting: refresh') + call self._reset() + let buf = bufnr('') + let issues = filter(a:loclist.copyRaw(), 'v:val["bufnr"] == buf') + for item in issues + let group = 'Syntastic' . get(item, 'subtype', '') . ( item['type'] ==? 'E' ? 'Error' : 'Warning' ) + + " The function `Syntastic_{filetype}_{checker}_GetHighlightRegex` is + " used to override default highlighting. + if has_key(item, 'hl') + call matchadd(group, '\%' . item['lnum'] . 'l' . item['hl']) + elseif get(item, 'col', 0) + if get(item, 'vcol', 0) + let lastcol = virtcol([item['lnum'], '$']) + let coltype = 'v' + else + let lastcol = col([item['lnum'], '$']) + let coltype = 'c' + endif + let lcol = min([lastcol, item['col']]) + + call matchadd(group, '\%' . item['lnum'] . 'l\%' . lcol . coltype) + endif + endfor + endif +endfunction " }}}2 + +" Remove all error highlights from the window +" @vimlint(EVL103, 1, a:loclist) +function! g:SyntasticHighlightingNotifier.reset(loclist) abort " {{{2 + if s:has_highlighting + call syntastic#log#debug(g:_SYNTASTIC_DEBUG_NOTIFICATIONS, 'highlighting: reset') + call self._reset() + endif +endfunction " }}}2 +" @vimlint(EVL103, 0, a:loclist) + +" }}}1 + +" Private methods {{{1 + +" One time setup: define our own highlighting +function! g:SyntasticHighlightingNotifier._setup() abort " {{{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 + +function! g:SyntasticHighlightingNotifier._reset() abort " {{{2 + for match in getmatches() + if stridx(match['group'], 'Syntastic') == 0 + call matchdelete(match['id']) + endif + endfor +endfunction " }}}2 + +" }}}1 + +" vim: set sw=4 sts=4 et fdm=marker: |