summaryrefslogtreecommitdiffstats
path: root/autoload/jsx_pretty/comment.vim
diff options
context:
space:
mode:
Diffstat (limited to 'autoload/jsx_pretty/comment.vim')
-rw-r--r--autoload/jsx_pretty/comment.vim41
1 files changed, 41 insertions, 0 deletions
diff --git a/autoload/jsx_pretty/comment.vim b/autoload/jsx_pretty/comment.vim
new file mode 100644
index 00000000..d5d58f5d
--- /dev/null
+++ b/autoload/jsx_pretty/comment.vim
@@ -0,0 +1,41 @@
+if exists('g:polyglot_disabled') && index(g:polyglot_disabled, 'jsx') != -1
+ finish
+endif
+
+function! jsx_pretty#comment#update_commentstring(original)
+ let syn_current = s:syn_name(line('.'), col('.'))
+ let syn_start = s:syn_name(line('.'), 1)
+ let save_cursor = getcurpos()
+
+ if syn_start =~ '^jsx'
+ let line = getline(".")
+ let start = len(matchstr(line, '^\s*'))
+ let syn_name = s:syn_name(line('.'), start + 1)
+
+ if line =~ '^\s*//'
+ let &l:commentstring = '// %s'
+ elseif s:syn_contains(line('.'), col('.'), 'jsxTaggedRegion')
+ let &l:commentstring = '<!-- %s -->'
+ elseif syn_name =~ '^jsxAttrib'
+ let &l:commentstring = '// %s'
+ else
+ let &l:commentstring = '{/* %s */}'
+ endif
+ else
+ let &l:commentstring = a:original
+ endif
+
+ " Restore the cursor position
+ call setpos('.', save_cursor)
+endfunction
+
+function! s:syn_name(lnum, cnum)
+ let syn_id = get(synstack(a:lnum, a:cnum), -1)
+ return synIDattr(syn_id, "name")
+endfunction
+
+function! s:syn_contains(lnum, cnum, syn_name)
+ let stack = synstack(a:lnum, a:cnum)
+ let syn_names = map(stack, 'synIDattr(v:val, "name")')
+ return index(syn_names, a:syn_name) >= 0
+endfunction