diff options
Diffstat (limited to 'autoload/svelte.vim')
-rw-r--r-- | autoload/svelte.vim | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/autoload/svelte.vim b/autoload/svelte.vim new file mode 100644 index 00000000..60d31469 --- /dev/null +++ b/autoload/svelte.vim @@ -0,0 +1,71 @@ +if polyglot#init#is_disabled(expand('<sfile>:p'), 'svelte', 'autoload/svelte.vim') + finish +endif + +let s:name = 'vim-svelte-plugin' +let s:debug = exists("g:vim_svelte_plugin_debug") + \ && g:vim_svelte_plugin_debug == 1 + +function! svelte#GetConfig(name, default) + let name = 'g:vim_svelte_plugin_'.a:name + return exists(name) ? eval(name) : a:default +endfunction + +" Since svelte#Log and svelte#GetConfig are always called +" in syntax and indent files, +" this file will be sourced when opening the first svelte file +if exists('##CursorMoved') && exists('*OnChangeSvelteSubtype') + augroup vim_svelte_plugin + autocmd! + autocmd CursorMoved,CursorMovedI,WinEnter *.svelte + \ call s:CheckSubtype() + augroup END + + let s:subtype = '' + function! s:CheckSubtype() + let subtype = GetSvelteSubtype() + + if s:subtype != subtype + call OnChangeSvelteSubtype(subtype) + let s:subtype = subtype + endif + endfunction +endif + +function! s:SynsEOL(lnum) + let lnum = prevnonblank(a:lnum) + let cnum = strlen(getline(lnum)) + return map(synstack(lnum, cnum), 'synIDattr(v:val, "name")') +endfunction + +function! GetSvelteSubtype() + let lnum = line('.') + let cursyns = s:SynsEOL(lnum) + let syn = !empty(cursyns) ? get(cursyns, 0, '') : '' + + let subtype = matchstr(syn, '\w\+\zeSvelte') + if subtype =~ 'css\w\+' + " For cssScss, cssLess, ... + let subtype = subtype[3:] + endif + let subtype = tolower(subtype) + return subtype +endfunction + +function! GetSvelteTag(...) + let lnum = a:0 > 0 ? a:1 : line('.') + let cursyns = s:SynsEOL(lnum) + let syn = get(cursyns, 0, '') + + if syn =~ 'SvelteTemplate' + let tag = 'template' + elseif syn =~ 'SvelteScript' + let tag = 'script' + elseif syn =~ 'SvelteStyle' + let tag = 'style' + else + let tag = '' + endif + + return tag +endfunction |