# HG changeset patch # User Bram Moolenaar # Date 1567800903 -7200 # Node ID ea916dbbb9b9e957d9a0c7522ce923391797dcb7 # Parent e7c2e81d82709f6b7d1fca9ebf54e3a4ac8a23d5 patch 8.1.1995: more functions can be used as methods Commit: https://github.com/vim/vim/commit/93476fd6343ef40d088e064289cc279659d03953 Author: Bram Moolenaar Date: Fri Sep 6 22:00:54 2019 +0200 patch 8.1.1995: more functions can be used as methods Problem: More functions can be used as methods. Solution: Make sign functions usable as a method. diff --git a/runtime/doc/sign.txt b/runtime/doc/sign.txt --- a/runtime/doc/sign.txt +++ b/runtime/doc/sign.txt @@ -389,6 +389,9 @@ sign_define({list}) \ 'text' : '!!'} \ ]) < + Can also be used as a |method|: > + GetSignList()->sign_define() + sign_getdefined([{name}]) *sign_getdefined()* Get a list of defined signs and their attributes. This is similar to the |:sign-list| command. @@ -417,6 +420,9 @@ sign_getdefined([{name}]) *sign_getde " Get the attribute of the sign named mySign echo sign_getdefined("mySign") < + Can also be used as a |method|: > + GetSignList()->sign_getdefined() + sign_getplaced([{expr} [, {dict}]]) *sign_getplaced()* Return a list of signs placed in a buffer or all the buffers. This is similar to the |:sign-place-list| command. @@ -477,6 +483,9 @@ sign_getplaced([{expr} [, {dict}]]) *s " Get a List of all the placed signs echo sign_getplaced() < + Can also be used as a |method|: > + GetBufname()->sign_getplaced() +< *sign_jump()* sign_jump({id}, {group}, {expr}) Open the buffer {expr} or jump to the window that contains @@ -492,7 +501,9 @@ sign_jump({id}, {group}, {expr}) " Jump to sign 10 in the current buffer call sign_jump(10, '', '') < - + Can also be used as a |method|: > + GetSignid()->sign_jump() +< *sign_place()* sign_place({id}, {group}, {name}, {expr} [, {dict}]) Place the sign defined as {name} at line {lnum} in file or @@ -542,7 +553,9 @@ sign_place({id}, {group}, {name}, {expr} call sign_place(10, 'g3', 'sign4', 'json.c', \ {'lnum' : 40, 'priority' : 90}) < - + Can also be used as a |method|: > + GetSignid()->sign_place(group, name, expr) +< *sign_placelist()* sign_placelist({list}) Place one or more signs. This is similar to the @@ -602,6 +615,8 @@ sign_placelist({list}) \ 'lnum' : 50} \ ]) < + Can also be used as a |method|: > + GetSignlist()->sign_placelist() sign_undefine([{name}]) *sign_undefine()* sign_undefine({list}) @@ -626,6 +641,8 @@ sign_undefine({list}) " Delete all the signs call sign_undefine() < + Can also be used as a |method|: > + GetSignlist()->sign_undefine() sign_unplace({group} [, {dict}]) *sign_unplace()* Remove a previously placed sign in one or more buffers. This @@ -668,6 +685,9 @@ sign_unplace({group} [, {dict}]) *sign " Remove all the placed signs from all the buffers call sign_unplace('*') + +< Can also be used as a |method|: > + GetSigngroup()->sign_unplace() < sign_unplacelist({list}) *sign_unplacelist()* Remove previously placed signs from one or more buffers. This @@ -697,5 +717,8 @@ sign_unplacelist({list}) *sign_unplac \ {'id' : 20, 'buffer' : 'b.vim'}, \ ]) < + Can also be used as a |method|: > + GetSignlist()->sign_unplacelist() +< vim:tw=78:ts=8:noet:ft=help:norl: diff --git a/src/evalfunc.c b/src/evalfunc.c --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -736,15 +736,15 @@ static funcentry_T global_functions[] = {"shellescape", 1, 2, 0, f_shellescape}, {"shiftwidth", 0, 1, 0, f_shiftwidth}, #ifdef FEAT_SIGNS - {"sign_define", 1, 2, 0, f_sign_define}, - {"sign_getdefined", 0, 1, 0, f_sign_getdefined}, - {"sign_getplaced", 0, 2, 0, f_sign_getplaced}, - {"sign_jump", 3, 3, 0, f_sign_jump}, - {"sign_place", 4, 5, 0, f_sign_place}, - {"sign_placelist", 1, 1, 0, f_sign_placelist}, - {"sign_undefine", 0, 1, 0, f_sign_undefine}, - {"sign_unplace", 1, 2, 0, f_sign_unplace}, - {"sign_unplacelist", 1, 2, 0, f_sign_unplacelist}, + {"sign_define", 1, 2, FEARG_1, f_sign_define}, + {"sign_getdefined", 0, 1, FEARG_1, f_sign_getdefined}, + {"sign_getplaced", 0, 2, FEARG_1, f_sign_getplaced}, + {"sign_jump", 3, 3, FEARG_1, f_sign_jump}, + {"sign_place", 4, 5, FEARG_1, f_sign_place}, + {"sign_placelist", 1, 1, FEARG_1, f_sign_placelist}, + {"sign_undefine", 0, 1, FEARG_1, f_sign_undefine}, + {"sign_unplace", 1, 2, FEARG_1, f_sign_unplace}, + {"sign_unplacelist", 1, 2, FEARG_1, f_sign_unplacelist}, #endif {"simplify", 1, 1, 0, f_simplify}, #ifdef FEAT_FLOAT diff --git a/src/testdir/test_signs.vim b/src/testdir/test_signs.vim --- a/src/testdir/test_signs.vim +++ b/src/testdir/test_signs.vim @@ -393,7 +393,7 @@ func Test_sign_funcs() " Tests for sign_define() let attr = {'text' : '=>', 'linehl' : 'Search', 'texthl' : 'Error'} - call assert_equal(0, sign_define("sign1", attr)) + call assert_equal(0, "sign1"->sign_define(attr)) call assert_equal([{'name' : 'sign1', 'texthl' : 'Error', \ 'linehl' : 'Search', 'text' : '=>'}], sign_getdefined()) @@ -404,13 +404,13 @@ func Test_sign_funcs() call Sign_define_ignore_error("sign2", attr) call assert_equal([{'name' : 'sign2', 'texthl' : 'DiffChange', \ 'linehl' : 'DiffAdd', 'text' : '!!', 'icon' : 'sign2.ico'}], - \ sign_getdefined("sign2")) + \ "sign2"->sign_getdefined()) " Test for a sign name with digits call assert_equal(0, sign_define(0002, {'linehl' : 'StatusLine'})) call assert_equal([{'name' : '2', 'linehl' : 'StatusLine'}], \ sign_getdefined(0002)) - call sign_undefine(0002) + eval 0002->sign_undefine() " Tests for invalid arguments to sign_define() call assert_fails('call sign_define("sign4", {"text" : "===>"})', 'E239:') @@ -434,7 +434,7 @@ func Test_sign_funcs() call assert_equal([{'bufnr' : bufnr(''), 'signs' : \ [{'id' : 10, 'group' : '', 'lnum' : 20, 'name' : 'sign1', \ 'priority' : 10}]}], - \ sign_getplaced('%', {'lnum' : 20})) + \ '%'->sign_getplaced({'lnum' : 20})) call assert_equal([{'bufnr' : bufnr(''), 'signs' : \ [{'id' : 10, 'group' : '', 'lnum' : 20, 'name' : 'sign1', \ 'priority' : 10}]}], @@ -490,10 +490,10 @@ func Test_sign_funcs() \ 'E745:') " Tests for sign_unplace() - call sign_place(20, '', 'sign2', 'Xsign', {"lnum" : 30}) + eval 20->sign_place('', 'sign2', 'Xsign', {"lnum" : 30}) call assert_equal(0, sign_unplace('', \ {'id' : 20, 'buffer' : 'Xsign'})) - call assert_equal(-1, sign_unplace('', + call assert_equal(-1, ''->sign_unplace( \ {'id' : 30, 'buffer' : 'Xsign'})) call sign_place(20, '', 'sign2', 'Xsign', {"lnum" : 30}) call assert_fails("call sign_unplace('', @@ -1711,7 +1711,7 @@ func Test_sign_jump_func() let r = sign_jump(5, '', 'foo') call assert_equal(2, r) call assert_equal(2, line('.')) - let r = sign_jump(6, 'g1', 'foo') + let r = 6->sign_jump('g1', 'foo') call assert_equal(5, r) call assert_equal(5, line('.')) let r = sign_jump(5, '', 'bar') @@ -1935,8 +1935,7 @@ func Test_sign_funcs_multi() \ 'group' : 'g1', 'priority' : 10}], s[0].signs) " Change an existing sign without specifying the group - call assert_equal([5], sign_placelist([ - \ {'id' : 5, 'name' : 'sign1', 'buffer' : 'Xsign'}])) + call assert_equal([5], [{'id' : 5, 'name' : 'sign1', 'buffer' : 'Xsign'}]->sign_placelist()) let s = sign_getplaced('Xsign', {'id' : 5, 'group' : ''}) call assert_equal([{'id' : 5, 'name' : 'sign1', 'lnum' : 11, \ 'group' : '', 'priority' : 10}], s[0].signs) @@ -1969,7 +1968,7 @@ func Test_sign_funcs_multi() \ {'id' : 1, 'group' : 'g1'}, {'id' : 1, 'group' : 'g2'}])) " Invalid arguments - call assert_equal([], sign_unplacelist([])) + call assert_equal([], []->sign_unplacelist()) call assert_fails('call sign_unplacelist({})', "E714:") call assert_fails('call sign_unplacelist([[]])', "E715:") call assert_fails('call sign_unplacelist(["abc"])', "E715:") diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -758,6 +758,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1995, +/**/ 1994, /**/ 1993,