All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@git.madduck.net.
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
2 " NOTE: lines between '" ___vital___' is generated by :Vitalize.
3 " Do not modify the code nor insert new lines before '" ___vital___'
4 function! s:_SID() abort
5 return matchstr(expand('<sfile>'), '<SNR>\zs\d\+\ze__SID$')
7 execute join(['function! vital#_lsp#VS#Vim#Buffer#import() abort', printf("return map({'add': '', 'do': '', 'create': '', 'get_line_count': '', 'pseudo': '', 'ensure': '', 'load': ''}, \"vital#_lsp#function('<SNR>%s_' . v:key)\")", s:_SID()), 'endfunction'], "\n")
12 let g:___VS_Vim_Buffer_id = get(g:, '___VS_Vim_Buffer_id', 0)
17 if exists('*nvim_buf_line_count')
18 function! s:get_line_count(bufnr) abort
19 return nvim_buf_line_count(a:bufnr)
21 elseif has('patch-8.2.0019')
22 function! s:get_line_count(bufnr) abort
23 return getbufinfo(a:bufnr)[0].linecount
26 function! s:get_line_count(bufnr) abort
27 if bufnr('%') == bufnr(a:bufnr)
30 return len(getbufline(a:bufnr, '^', '$'))
37 function! s:create(...) abort
38 let g:___VS_Vim_Buffer_id += 1
39 let l:bufname = printf('VS.Vim.Buffer: %s: %s',
40 \ g:___VS_Vim_Buffer_id,
41 \ get(a:000, 0, 'VS.Vim.Buffer.Default')
43 return s:load(l:bufname)
49 function! s:ensure(expr) abort
51 if type(a:expr) == type(0)
52 throw printf('VS.Vim.Buffer: `%s` is not valid expr.', a:expr)
63 function! s:add(name) abort
64 let l:bufnr = bufadd(a:name)
65 call setbufvar(l:bufnr, '&buflisted', 1)
68 function! s:add(name) abort
77 function! s:load(expr) abort
78 let l:bufnr = s:ensure(a:expr)
79 if !bufloaded(l:bufnr)
85 function! s:load(expr) abort
86 let l:curr_bufnr = bufnr('%')
88 let l:bufnr = s:ensure(a:expr)
89 execute printf('keepalt keepjumps silent %sbuffer', l:bufnr)
91 echomsg string({ 'exception': v:exception, 'throwpoint': v:throwpoint })
93 execute printf('noautocmd keepalt keepjumps silent %sbuffer', l:curr_bufnr)
102 function! s:do(bufnr, func) abort
103 let l:curr_bufnr = bufnr('%')
104 if l:curr_bufnr == a:bufnr
110 execute printf('noautocmd keepalt keepjumps silent %sbuffer', a:bufnr)
113 echomsg string({ 'exception': v:exception, 'throwpoint': v:throwpoint })
115 execute printf('noautocmd keepalt keepjumps silent %sbuffer', l:curr_bufnr)
122 function! s:pseudo(filepath) abort
123 if !filereadable(a:filepath)
124 throw printf('VS.Vim.Buffer: `%s` is not valid filepath.', a:filepath)
127 " create pseudo buffer
128 let l:bufname = printf('VSVimBufferPseudo://%s', a:filepath)
129 if bufexists(l:bufname)
130 return s:ensure(l:bufname)
133 let l:bufnr = s:ensure(l:bufname)
134 let l:group = printf('VS_Vim_Buffer_pseudo:%s', l:bufnr)
135 execute printf('augroup %s', l:group)
136 execute printf('autocmd BufReadCmd <buffer=%s> call setline(1, readfile(bufname("%")[20 : -1])) | try | filetype detect | catch /.*/ | endtry | augroup %s | autocmd! | augroup END', l:bufnr, l:group)