diff options
Diffstat (limited to 'autoload/jsx_pretty/comment.vim')
-rw-r--r-- | autoload/jsx_pretty/comment.vim | 41 |
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 |