improvement: trigger post hooks after wrap/unwrap

A first step to make the plugin extendable.
This allow to add logic on a per filetype basis.

This solution allow a user to extend the behavior if the plugin does not
provide a hook for the given filetype.
But if there is already a hook then the user can not create it's own.

One solution could be to find every functions defined in the namespace
`argwrap#hooks#user#<ANYTHING>#post_wrap`, I think airline provide a
feature like this.
Those hooks would need to be sorted in order to have a predictible
behavior, also it might be interesting to provide a way for each hook to
update the range, container and arguments.
There might be nothing to do because I think Vim's lists and dictionaries
are passed by reference.
This commit is contained in:
Camille Dejoye 2020-06-06 19:49:50 +02:00
parent d52b2104e1
commit f7e39155de

View File

@ -259,9 +259,19 @@ function! argwrap#toggle()
if l:range.lineStart == l:range.lineEnd if l:range.lineStart == l:range.lineEnd
call argwrap#wrapContainer(l:range, l:container, l:arguments, l:wrapBrace, l:tailComma, l:tailCommaBraces, l:tailIndentBraces, l:linePrefix, l:commaFirst, l:commaFirstIndent) call argwrap#wrapContainer(l:range, l:container, l:arguments, l:wrapBrace, l:tailComma, l:tailCommaBraces, l:tailIndentBraces, l:linePrefix, l:commaFirst, l:commaFirstIndent)
let l:cursor[1] = l:range.lineStart + 1 let l:cursor[1] = l:range.lineStart + 1
let l:filetypeHook = printf('argwrap#hooks#%s#post_wrap', &filetype)
if exists('*'.l:filetypeHook)
call call(l:filetypeHook, [l:range, l:container, l:arguments])
endif
else else
call argwrap#unwrapContainer(l:range, l:container, l:arguments, l:padded) call argwrap#unwrapContainer(l:range, l:container, l:arguments, l:padded)
let l:cursor[1] = l:range.lineStart let l:cursor[1] = l:range.lineStart
let l:filetypeHook = printf('argwrap#hooks#%s#post_unwrap', &filetype)
if exists('*'.l:filetypeHook)
call call(l:filetypeHook, [l:range, l:container, l:arguments])
endif
endif endif
call setpos('.', l:cursor) call setpos('.', l:cursor)