aboutsummaryrefslogtreecommitdiff
path: root/vim/bundle/syntastic/plugin/syntastic/loclist.vim
diff options
context:
space:
mode:
authorKarel Kočí <cynerd@email.cz>2016-06-30 16:11:56 +0200
committerKarel Kočí <cynerd@email.cz>2016-06-30 16:11:56 +0200
commit9931e0888b2419326ae10ebbfae532261c5c125f (patch)
tree7504be5daccbb7b7d1ea396754de47b11ed790e5 /vim/bundle/syntastic/plugin/syntastic/loclist.vim
parente573b3020c032400eed60b649a2cbf55266e6bb0 (diff)
downloadmyconfigs-9931e0888b2419326ae10ebbfae532261c5c125f.tar.gz
myconfigs-9931e0888b2419326ae10ebbfae532261c5c125f.tar.bz2
myconfigs-9931e0888b2419326ae10ebbfae532261c5c125f.zip
Fix submodules
Diffstat (limited to 'vim/bundle/syntastic/plugin/syntastic/loclist.vim')
m---------vim/bundle/syntastic0
-rw-r--r--vim/bundle/syntastic/plugin/syntastic/loclist.vim439
2 files changed, 0 insertions, 439 deletions
diff --git a/vim/bundle/syntastic b/vim/bundle/syntastic
new file mode 160000
+Subproject cee74e0c1af934065fd1b3046e53cda76574f70
diff --git a/vim/bundle/syntastic/plugin/syntastic/loclist.vim b/vim/bundle/syntastic/plugin/syntastic/loclist.vim
deleted file mode 100644
index 3e9528b..0000000
--- a/vim/bundle/syntastic/plugin/syntastic/loclist.vim
+++ /dev/null
@@ -1,439 +0,0 @@
-if exists('g:loaded_syntastic_loclist') || !exists('g:loaded_syntastic_plugin')
- finish
-endif
-let g:loaded_syntastic_loclist = 1
-
-let g:SyntasticLoclist = {}
-
-" Public methods {{{1
-
-function! g:SyntasticLoclist.New(rawLoclist) abort " {{{2
- let newObj = copy(self)
-
- let llist = filter(copy(a:rawLoclist), 'v:val["valid"] == 1')
-
- for e in llist
- if get(e, 'type', '') ==# ''
- let e['type'] = 'E'
- endif
- endfor
-
- let newObj._rawLoclist = llist
- let newObj._name = ''
- let newObj._owner = bufnr('')
- let newObj._sorted = 0
- let newObj._columns = g:syntastic_cursor_columns
-
- return newObj
-endfunction " }}}2
-
-function! g:SyntasticLoclist.current() abort " {{{2
- if !exists('b:syntastic_loclist') || empty(b:syntastic_loclist)
- let b:syntastic_loclist = g:SyntasticLoclist.New([])
- endif
- return b:syntastic_loclist
-endfunction " }}}2
-
-function! g:SyntasticLoclist.extend(other) abort " {{{2
- let list = self.copyRaw()
- call extend(list, a:other.copyRaw())
- return g:SyntasticLoclist.New(list)
-endfunction " }}}2
-
-function! g:SyntasticLoclist.sort() abort " {{{2
- if !self._sorted
- for e in self._rawLoclist
- call s:_set_screen_column(e)
- endfor
-
- call sort(self._rawLoclist, self._columns ? 's:_compare_error_items_by_columns' : 's:_compare_error_items_by_lines')
-
- let self._sorted = 1
- endif
-endfunction " }}}2
-
-function! g:SyntasticLoclist.isEmpty() abort " {{{2
- return empty(self._rawLoclist)
-endfunction " }}}2
-
-function! g:SyntasticLoclist.isNewerThan(stamp) abort " {{{2
- if !exists('self._stamp')
- let self._stamp = []
- return 0
- endif
- return syntastic#util#compareLexi(self._stamp, a:stamp) > 0
-endfunction " }}}2
-
-function! g:SyntasticLoclist.copyRaw() abort " {{{2
- return copy(self._rawLoclist)
-endfunction " }}}2
-
-function! g:SyntasticLoclist.getRaw() abort " {{{2
- return self._rawLoclist
-endfunction " }}}2
-
-function! g:SyntasticLoclist.getBuffers() abort " {{{2
- return syntastic#util#unique(map(copy(self._rawLoclist), 'str2nr(v:val["bufnr"])') + [self._owner])
-endfunction " }}}2
-
-function! g:SyntasticLoclist.getCursorColumns() abort " {{{2
- return self._columns
-endfunction " }}}2
-
-function! g:SyntasticLoclist.getStatuslineFlag() abort " {{{2
- if !exists('self._stl_format')
- let self._stl_format = ''
- endif
- if !exists('self._stl_flag')
- let self._stl_flag = ''
- endif
-
- if g:syntastic_stl_format !=# self._stl_format
- let self._stl_format = g:syntastic_stl_format
-
- if !empty(self._rawLoclist)
- let errors = self.errors()
- let warnings = self.warnings()
-
- let num_errors = len(errors)
- let num_warnings = len(warnings)
- let num_issues = len(self._rawLoclist)
-
- let output = self._stl_format
-
- "hide stuff wrapped in %E(...) unless there are errors
- let output = substitute(output, '\m\C%E{\([^}]*\)}', num_errors ? '\1' : '' , 'g')
-
- "hide stuff wrapped in %W(...) unless there are warnings
- let output = substitute(output, '\m\C%W{\([^}]*\)}', num_warnings ? '\1' : '' , 'g')
-
- "hide stuff wrapped in %B(...) unless there are both errors and warnings
- let output = substitute(output, '\m\C%B{\([^}]*\)}', (num_warnings && num_errors) ? '\1' : '' , 'g')
-
- let flags = {
- \ '%': '%',
- \ 't': num_issues,
- \ 'e': num_errors,
- \ 'w': num_warnings,
- \ 'N': (num_issues ? fnamemodify( bufname(self._rawLoclist[0]['bufnr']), ':t') : ''),
- \ 'P': (num_issues ? fnamemodify( bufname(self._rawLoclist[0]['bufnr']), ':p:~:.') : ''),
- \ 'F': (num_issues ? self._rawLoclist[0]['lnum'] : ''),
- \ 'ne': (num_errors ? fnamemodify( bufname(errors[0]['bufnr']), ':t') : ''),
- \ 'pe': (num_errors ? fnamemodify( bufname(errors[0]['bufnr']), ':p:~:.') : ''),
- \ 'fe': (num_errors ? errors[0]['lnum'] : ''),
- \ 'nw': (num_warnings ? fnamemodify( bufname(warnings[0]['bufnr']), ':t') : ''),
- \ 'pw': (num_warnings ? fnamemodify( bufname(warnings[0]['bufnr']), ':p:~:.') : ''),
- \ 'fw': (num_warnings ? warnings[0]['lnum'] : '') }
- let output = substitute(output, '\v\C\%(-?\d*%(\.\d+)?)([npf][ew]|[NPFtew%])', '\=syntastic#util#wformat(submatch(1), flags[submatch(2)])', 'g')
-
- let self._stl_flag = output
- else
- let self._stl_flag = ''
- endif
- endif
-
- return self._stl_flag
-endfunction " }}}2
-
-function! g:SyntasticLoclist.getFirstError(...) abort " {{{2
- let max_issues = len(self._rawLoclist)
- if a:0 && a:1 < max_issues
- let max_issues = a:1
- endif
-
- for idx in range(max_issues)
- if get(self._rawLoclist[idx], 'type', '') ==? 'E'
- return idx + 1
- endif
- endfor
-
- return 0
-endfunction " }}}2
-
-function! g:SyntasticLoclist.getName() abort " {{{2
- return len(self._name)
-endfunction " }}}2
-
-function! g:SyntasticLoclist.setName(name) abort " {{{2
- let self._name = a:name
-endfunction " }}}2
-
-function! g:SyntasticLoclist.getOwner() abort " {{{2
- return self._owner
-endfunction " }}}2
-
-function! g:SyntasticLoclist.setOwner(buffer) abort " {{{2
- let self._owner = type(a:buffer) == type(0) ? a:buffer : str2nr(a:buffer)
-endfunction " }}}2
-
-function! g:SyntasticLoclist.deploy() abort " {{{2
- call self.setOwner(bufnr(''))
- let self._stamp = syntastic#util#stamp()
- for buf in self.getBuffers()
- call setbufvar(buf, 'syntastic_loclist', self)
- endfor
-endfunction " }}}2
-
-function! g:SyntasticLoclist.destroy() abort " {{{2
- for buf in self.getBuffers()
- call setbufvar(buf, 'syntastic_loclist', {})
- endfor
-endfunction " }}}2
-
-function! g:SyntasticLoclist.decorate(tag) abort " {{{2
- for e in self._rawLoclist
- let e['text'] .= ' [' . a:tag . ']'
- endfor
-endfunction " }}}2
-
-function! g:SyntasticLoclist.balloons() abort " {{{2
- if !exists('self._cachedBalloons')
- let sep = has('balloon_multiline') ? "\n" : ' | '
-
- let self._cachedBalloons = {}
- for e in self._rawLoclist
- let buf = e['bufnr']
-
- if !has_key(self._cachedBalloons, buf)
- let self._cachedBalloons[buf] = {}
- endif
-
- if has_key(self._cachedBalloons[buf], e['lnum'])
- let self._cachedBalloons[buf][e['lnum']] .= sep . e['text']
- else
- let self._cachedBalloons[buf][e['lnum']] = e['text']
- endif
- endfor
- endif
-
- return get(self._cachedBalloons, bufnr(''), {})
-endfunction " }}}2
-
-function! g:SyntasticLoclist.errors() abort " {{{2
- if !exists('self._cachedErrors')
- let self._cachedErrors = self.filter({'type': 'E'})
- endif
- return self._cachedErrors
-endfunction " }}}2
-
-function! g:SyntasticLoclist.warnings() abort " {{{2
- if !exists('self._cachedWarnings')
- let self._cachedWarnings = self.filter({'type': 'W'})
- endif
- return self._cachedWarnings
-endfunction " }}}2
-
-" Legacy function. Syntastic no longer calls it, but we keep it
-" around because other plugins (f.i. powerline) depend on it.
-function! g:SyntasticLoclist.hasErrorsOrWarningsToDisplay() abort " {{{2
- return !self.isEmpty()
-endfunction " }}}2
-
-" cache used by EchoCurrentError()
-function! g:SyntasticLoclist.messages(buf) abort " {{{2
- if !exists('self._cachedMessages')
- let self._cachedMessages = {}
-
- let errors = self.errors() + self.warnings()
- for e in errors
- let b = e['bufnr']
- let l = e['lnum']
-
- if !has_key(self._cachedMessages, b)
- let self._cachedMessages[b] = {}
- endif
-
- if !has_key(self._cachedMessages[b], l)
- let self._cachedMessages[b][l] = [e]
- elseif self._columns
- call add(self._cachedMessages[b][l], e)
- endif
- endfor
-
- if self._columns
- if !self._sorted
- for b in keys(self._cachedMessages)
- for l in keys(self._cachedMessages[b])
- if len(self._cachedMessages[b][l]) > 1
- for e in self._cachedMessages[b][l]
- call s:_set_screen_column(e)
- endfor
- call sort(self._cachedMessages[b][l], 's:_compare_error_items_by_columns')
- endif
- endfor
- endfor
- endif
-
- for b in keys(self._cachedMessages)
- for l in keys(self._cachedMessages[b])
- call s:_remove_shadowed_items(self._cachedMessages[b][l])
- endfor
- endfor
- endif
- endif
-
- return get(self._cachedMessages, a:buf, {})
-endfunction " }}}2
-
-"Filter the list and return new native loclist
-"e.g.
-" .filter({'bufnr': 10, 'type': 'e'})
-"
-"would return all errors for buffer 10.
-"
-"Note that all comparisons are done with ==?
-function! g:SyntasticLoclist.filter(filters) abort " {{{2
- let conditions = values(map(copy(a:filters), 's:_translate(v:key, v:val)'))
- let filter = len(conditions) == 1 ?
- \ conditions[0] : join(map(conditions, '"(" . v:val . ")"'), ' && ')
- return filter(copy(self._rawLoclist), filter)
-endfunction " }}}2
-
-function! g:SyntasticLoclist.setloclist() abort " {{{2
- if !exists('w:syntastic_loclist_set')
- let w:syntastic_loclist_set = []
- endif
- if empty(w:syntastic_loclist_set) || w:syntastic_loclist_set != [bufnr(''), b:changedtick]
- let replace = g:syntastic_reuse_loc_lists && !empty(w:syntastic_loclist_set)
- call syntastic#log#debug(g:_SYNTASTIC_DEBUG_NOTIFICATIONS, 'loclist: setloclist ' . (replace ? '(replace)' : '(new)'))
- call setloclist(0, self.getRaw(), replace ? 'r' : ' ')
- call syntastic#util#setChangedtick()
- let w:syntastic_loclist_set = [bufnr(''), b:syntastic_changedtick]
- endif
-endfunction " }}}2
-
-"display the cached errors for this buf in the location list
-function! g:SyntasticLoclist.show() abort " {{{2
- call syntastic#log#debug(g:_SYNTASTIC_DEBUG_NOTIFICATIONS, 'loclist: show')
- call self.setloclist()
-
- if !self.isEmpty()
- let num = winnr()
- execute 'lopen ' . syntastic#util#var('loc_list_height')
- if num != winnr()
- execute num . 'wincmd w'
- endif
-
- " try to find the loclist window and set w:quickfix_title
- let errors = getloclist(0)
- for buf in tabpagebuflist()
- if buflisted(buf) && bufloaded(buf) && getbufvar(buf, '&buftype') ==# 'quickfix'
- let win = bufwinnr(buf)
- let title = getwinvar(win, 'quickfix_title')
-
- " TODO: try to make sure we actually own this window; sadly,
- " errors == getloclist(0) is the only somewhat safe way to
- " achieve that
- 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
- endif
-endfunction " }}}2
-
-" }}}1
-
-" Public functions {{{1
-
-function! SyntasticLoclistHide() abort " {{{2
- call syntastic#log#debug(g:_SYNTASTIC_DEBUG_NOTIFICATIONS, 'loclist: hide')
- silent! lclose
-endfunction " }}}2
-
-" }}}1
-
-" Utilities {{{1
-
-function! s:_translate(key, val) abort " {{{2
- return 'get(v:val, ' . string(a:key) . ', "") ==? ' . string(a:val)
-endfunction " }}}2
-
-function! s:_set_screen_column(item) abort " {{{2
- if !has_key(a:item, 'scol')
- let col = get(a:item, 'col', 0)
- if col != 0 && get(a:item, 'vcol', 0) == 0
- let buf = str2nr(a:item['bufnr'])
- try
- let line = getbufline(buf, a:item['lnum'])[0]
- catch /\m^Vim\%((\a\+)\)\=:E684/
- let line = ''
- endtry
- let a:item['scol'] = syntastic#util#screenWidth(strpart(line, 0, col), getbufvar(buf, '&tabstop'))
- else
- let a:item['scol'] = col
- endif
- endif
-endfunction " }}}2
-
-function! s:_remove_shadowed_items(errors) abort " {{{2
- " keep only the first message at a given column
- let i = 0
- while i < len(a:errors) - 1
- let j = i + 1
- let dupes = 0
- while j < len(a:errors) && a:errors[j].scol == a:errors[i].scol
- let dupes = 1
- let j += 1
- endwhile
- if dupes
- call remove(a:errors, i + 1, j - 1)
- endif
- let i += 1
- endwhile
-
- " merge messages with the same text
- let i = 0
- while i < len(a:errors) - 1
- let j = i + 1
- let dupes = 0
- while j < len(a:errors) && a:errors[j].text == a:errors[i].text
- let dupes = 1
- let j += 1
- endwhile
- if dupes
- call remove(a:errors, i + 1, j - 1)
- endif
- let i += 1
- endwhile
-endfunction " }}}2
-
-function! s:_compare_error_items_by_columns(a, b) abort " {{{2
- if a:a['bufnr'] != a:b['bufnr']
- " group by file
- return a:a['bufnr'] - a:b['bufnr']
- elseif a:a['lnum'] != a:b['lnum']
- " sort by line
- return a:a['lnum'] - a:b['lnum']
- elseif a:a['scol'] != a:b['scol']
- " sort by screen column
- return a:a['scol'] - a:b['scol']
- elseif a:a['type'] !=? a:b['type']
- " errors take precedence over warnings
- return a:a['type'] ==? 'E' ? -1 : 1
- else
- return 0
- endif
-endfunction " }}}2
-
-function! s:_compare_error_items_by_lines(a, b) abort " {{{2
- if a:a['bufnr'] != a:b['bufnr']
- " group by file
- return a:a['bufnr'] - a:b['bufnr']
- elseif a:a['lnum'] != a:b['lnum']
- " sort by line
- return a:a['lnum'] - a:b['lnum']
- elseif a:a['type'] !=? a:b['type']
- " errors take precedence over warnings
- return a:a['type'] ==? 'E' ? -1 : 1
- else
- " sort by screen column
- return a:a['scol'] - a:b['scol']
- endif
-endfunction " }}}2
-
-" }}}1
-
-" vim: set sw=4 sts=4 et fdm=marker: