summaryrefslogtreecommitdiffstats
path: root/autoload
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2021-04-14 12:11:13 +0200
committerAdam Stankiewicz <sheerun@sher.pl>2021-04-14 12:11:26 +0200
commit067e07e137d26ca6bc3f8496fe7bd569500d7fa4 (patch)
tree55e340bc5698fd426894568a0052db5ebe5e09b4 /autoload
parent5de7022bcb4c7a155952dbeb666f912db3bde2af (diff)
downloadvim-polyglot-067e07e137d26ca6bc3f8496fe7bd569500d7fa4.tar.gz
vim-polyglot-067e07e137d26ca6bc3f8496fe7bd569500d7fa4.zip
Change svelte provider, fixes #700
Diffstat (limited to 'autoload')
-rw-r--r--autoload/svelte.vim71
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