Some checks failed
Detach Plugins / check (FlyGrep.vim) (push) Has been cancelled
Detach Plugins / check (GitHub.vim) (push) Has been cancelled
Detach Plugins / check (JavaUnit.vim) (push) Has been cancelled
Detach Plugins / check (SourceCounter.vim) (push) Has been cancelled
Detach Plugins / check (cpicker.nvim) (push) Has been cancelled
Detach Plugins / check (dein-ui.vim) (push) Has been cancelled
Detach Plugins / check (git.vim) (push) Has been cancelled
Detach Plugins / check (iedit.vim) (push) Has been cancelled
Detach Plugins / check (scrollbar.vim) (push) Has been cancelled
Detach Plugins / check (vim-chat) (push) Has been cancelled
Detach Plugins / check (vim-cheat) (push) Has been cancelled
Detach Plugins / check (vim-todo) (push) Has been cancelled
Detach Plugins / check (xmake.vim) (push) Has been cancelled
test / Linux (nvim, nightly) (push) Has been cancelled
test / Linux (nvim, v0.3.8) (push) Has been cancelled
test / Linux (nvim, v0.4.0) (push) Has been cancelled
test / Linux (nvim, v0.4.2) (push) Has been cancelled
test / Linux (nvim, v0.4.3) (push) Has been cancelled
test / Linux (nvim, v0.4.4) (push) Has been cancelled
test / Linux (nvim, v0.5.0) (push) Has been cancelled
test / Linux (nvim, v0.5.1) (push) Has been cancelled
test / Linux (nvim, v0.6.0) (push) Has been cancelled
test / Linux (nvim, v0.6.1) (push) Has been cancelled
test / Linux (nvim, v0.7.0) (push) Has been cancelled
test / Linux (nvim, v0.7.2) (push) Has been cancelled
test / Linux (nvim, v0.8.0) (push) Has been cancelled
test / Linux (nvim, v0.8.1) (push) Has been cancelled
test / Linux (nvim, v0.8.2) (push) Has been cancelled
test / Linux (nvim, v0.8.3) (push) Has been cancelled
test / Linux (nvim, v0.9.0) (push) Has been cancelled
test / Linux (nvim, v0.9.1) (push) Has been cancelled
test / Linux (true, vim, v7.4.052) (push) Has been cancelled
test / Linux (true, vim, v7.4.1689) (push) Has been cancelled
test / Linux (true, vim, v7.4.629) (push) Has been cancelled
test / Linux (true, vim, v8.0.0027) (push) Has been cancelled
test / Linux (true, vim, v8.0.0183) (push) Has been cancelled
test / Linux (vim, nightly) (push) Has been cancelled
test / Linux (vim, v8.0.0184) (push) Has been cancelled
test / Linux (vim, v8.0.1453) (push) Has been cancelled
test / Linux (vim, v8.1.2269) (push) Has been cancelled
test / Linux (vim, v8.2.2434) (push) Has been cancelled
test / Linux (vim, v8.2.3995) (push) Has been cancelled
test / Windows (nvim, nightly) (push) Has been cancelled
test / Windows (nvim, v0.3.8) (push) Has been cancelled
test / Windows (nvim, v0.4.2) (push) Has been cancelled
test / Windows (nvim, v0.4.3) (push) Has been cancelled
test / Windows (nvim, v0.4.4) (push) Has been cancelled
test / Windows (nvim, v0.5.0) (push) Has been cancelled
test / Windows (nvim, v0.5.1) (push) Has been cancelled
test / Windows (nvim, v0.6.0) (push) Has been cancelled
test / Windows (nvim, v0.6.1) (push) Has been cancelled
test / Windows (nvim, v0.7.0) (push) Has been cancelled
test / Windows (nvim, v0.7.2) (push) Has been cancelled
test / Windows (nvim, v0.8.0) (push) Has been cancelled
test / Windows (nvim, v0.8.1) (push) Has been cancelled
test / Windows (nvim, v0.8.2) (push) Has been cancelled
test / Windows (nvim, v0.8.3) (push) Has been cancelled
test / Windows (nvim, v0.9.0) (push) Has been cancelled
test / Windows (nvim, v0.9.1) (push) Has been cancelled
test / Windows (vim, nightly) (push) Has been cancelled
test / Windows (vim, v7.4.1185) (push) Has been cancelled
test / Windows (vim, v7.4.1689) (push) Has been cancelled
test / Windows (vim, v8.0.0027) (push) Has been cancelled
test / Windows (vim, v8.0.1453) (push) Has been cancelled
test / Windows (vim, v8.1.2269) (push) Has been cancelled
test / Windows (vim, v8.2.2434) (push) Has been cancelled
test / Windows (vim, v8.2.3995) (push) Has been cancelled
docker / docker (push) Has been cancelled
mirror / check (coding) (push) Has been cancelled
mirror / check (gitee) (push) Has been cancelled
mirror / check (gitlab) (push) Has been cancelled
134 lines
3.0 KiB
VimL
134 lines
3.0 KiB
VimL
function! sj#jsx#SplitJsxExpression()
|
|
" Examples:
|
|
"
|
|
" let x = <tag>
|
|
" () => <tag>
|
|
" return <tag>
|
|
"
|
|
let pattern = '\%(\%(let\|const\|var\)\s\+\k\+\s*=\s*\|)\s*=>\|return\s\+\)\s*' .
|
|
\ '\zs<\k[^>/[:space:]]*'
|
|
|
|
if sj#SearchUnderCursor(pattern) <= 0
|
|
return 0
|
|
endif
|
|
|
|
" is it a fully-closed jsx tag?
|
|
let body = sj#GetMotion('vat')
|
|
if body =~ '^<\(\k\+\).*</\1>$'
|
|
if body =~ "\n"
|
|
" multiple lines, not splitting
|
|
return 0
|
|
endif
|
|
|
|
call sj#ReplaceMotion('vat', "(\n".sj#Trim(body)."\n)")
|
|
return 1
|
|
endif
|
|
|
|
" is it a self-closing tag?
|
|
let body = sj#GetMotion('va>')
|
|
if body =~ '^<\k\+.*/>$'
|
|
if body =~ "\n"
|
|
" multiple lines, not splitting
|
|
return 0
|
|
endif
|
|
|
|
call sj#ReplaceMotion('va>', "(\n".sj#Trim(body)."\n)")
|
|
return 1
|
|
endif
|
|
|
|
return 0
|
|
endfunction
|
|
|
|
function! sj#jsx#JoinJsxExpression()
|
|
" Examples:
|
|
"
|
|
" let x = (
|
|
" () => (
|
|
" return (
|
|
"
|
|
let pattern = '\%(\%(let\|const\|var\)\s\+\k\+\s*=\s*\|)\s*=>\|return\s\+\)\s*($'
|
|
if sj#SearchUnderCursor(pattern) <= 0
|
|
return 0
|
|
endif
|
|
|
|
normal! $
|
|
let body = sj#Trim(sj#GetMotion('vi('))
|
|
if body =~ "\n"
|
|
" multiline tag, no point in handling
|
|
return 0
|
|
endif
|
|
|
|
if body !~ '^<\k\+.*/>$' && body !~ '^<\(\k\+\).*</\1>$'
|
|
" doesn't look like a tag
|
|
return 0
|
|
endif
|
|
|
|
call sj#ReplaceMotion('va(', body)
|
|
return 1
|
|
endfunction
|
|
|
|
function! sj#jsx#SplitSelfClosingTag()
|
|
if s:noTagUnderCursor()
|
|
return 0
|
|
endif
|
|
|
|
let tag = sj#GetMotion('va<')
|
|
if tag == '' || tag !~ '^<\k'
|
|
return 0
|
|
endif
|
|
|
|
" is it self-closing?
|
|
if tag !~ '/>$'
|
|
return 0
|
|
endif
|
|
|
|
let tag_name = matchstr(tag, '^<\zs\k[^>/[:space:]]*')
|
|
let replacement = substitute(tag, '\s*/>$', '>\n</'.tag_name.'>', '')
|
|
call sj#ReplaceMotion('va<', replacement)
|
|
return 1
|
|
endfunction
|
|
|
|
" Needs to be called with the cursor on a starting or ending tag to work.
|
|
function! sj#jsx#JoinHtmlTag()
|
|
if s:noTagUnderCursor()
|
|
return 0
|
|
endif
|
|
|
|
let tag = sj#GetMotion('vat')
|
|
if tag =~ '^\s*$'
|
|
return 0
|
|
endif
|
|
|
|
let tag_name = matchstr(tag, '^<\zs\k[^>/[:space:]]*')
|
|
let empty_tag_pattern = '>\_s*</\s*'.tag_name.'\s*>$'
|
|
|
|
if tag =~ empty_tag_pattern
|
|
" then there's no contents, let's turn it into a self-closing tag
|
|
let self_closing_tag = substitute(tag, empty_tag_pattern, ' />', '')
|
|
if self_closing_tag == tag
|
|
" then the substitution failed for some reason
|
|
return 0
|
|
endif
|
|
|
|
call sj#ReplaceMotion('vat', self_closing_tag)
|
|
else
|
|
" There's contents in the tag, let's try to single-line it
|
|
if len(split(tag, "\n")) == 1
|
|
" already single-line, nothing to do
|
|
return 0
|
|
endif
|
|
|
|
let body = sj#GetMotion('vit')
|
|
let body = join(sj#TrimList(split(body, "\n")), ' ')
|
|
|
|
call sj#ReplaceMotion('vit', body)
|
|
end
|
|
|
|
return 1
|
|
endfunction
|
|
|
|
function! s:noTagUnderCursor()
|
|
return searchpair('<', '', '>', 'cb', '', line('.')) <= 0
|
|
\ && searchpair('<', '', '>', 'c', '', line('.')) <= 0
|
|
endfunction
|