I broke up with neovim....vim is my best friend now

This commit is contained in:
LinlyBoi
2023-04-30 08:14:07 +03:00
parent 0d185449c5
commit 4a4a6b1e81
5245 changed files with 468325 additions and 25 deletions

View File

@@ -0,0 +1,63 @@
let s:uid = 0
"
" vsnip#snippet#node#variable#import
"
function! vsnip#snippet#node#variable#import() abort
return s:Variable
endfunction
let s:Variable = {}
"
" new.
"
function! s:Variable.new(ast) abort
let s:uid += 1
let l:resolver = vsnip#variable#get(a:ast.name)
return extend(deepcopy(s:Variable), {
\ 'uid': s:uid,
\ 'type': 'variable',
\ 'name': a:ast.name,
\ 'unknown': empty(l:resolver),
\ 'resolver': l:resolver,
\ 'children': vsnip#snippet#node#create_from_ast(get(a:ast, 'children', [])),
\ 'transform': vsnip#snippet#node#create_transform(get(a:ast, 'transform')),
\ })
endfunction
"
" text.
"
function! s:Variable.text() abort
return self.transform.text(join(map(copy(self.children), 'v:val.text()'), ''))
endfunction
"
" resolve.
"
function! s:Variable.resolve(context) abort
if !self.unknown
let l:resolved = self.transform.text(self.resolver.func({ 'node': self }))
if l:resolved isnot v:null
" Fix indent when one variable returns multiple lines
let l:base_indent = vsnip#indent#get_base_indent(split(a:context.before_text, "\n", v:true)[-1])
return substitute(l:resolved, "\n\\zs", l:base_indent, 'g')
endif
endif
return v:null
endfunction
"
" to_string
"
function! s:Variable.to_string() abort
return printf('%s(name=%s, unknown=%s, text=%s)',
\ self.type,
\ self.name,
\ self.unknown ? 'true' : 'false',
\ self.text()
\ )
endfunction