corvofeng / Vsnips

Ultisnips for vscode
38 stars 3 forks source link

Add support for vim expand #14

Closed corvofeng closed 4 years ago

corvofeng commented 4 years ago

增加expand的支持并不难, 主要是针对JavsScript函数的参数做了处理, 目前已经允许用户增加自定义的参数. 例如!v expand('%:r'), 需要将%:r参数进行传递.

可以看到jsFuncDecorator该装饰器中做了一些处理, 将有本身的参数也编码进了中间代码中, 形成了类似如下的中间代码:

`!js js_get_simple_box ["arg1","arg2","arg3"]`

采用这种复合形式的主要一个原因是可以使用eval('["arg1","arg2","arg3"]')马上将原始的参数进行还原, 对于真正进行处理的函数, 使用call进行函数调用.

let args: string[] = [];
if (funcArgs !== undefined) {
    // eslint-disable-next-line
    args = (eval(funcArgs) as string[]);
}
funcRlt = func.call(undefined, vsContext, ...args);

处理Issue: #14