]> granicus.if.org Git - vim/commitdiff
patch 8.1.2004: more functions can be used as methods v8.1.2004
authorBram Moolenaar <Bram@vim.org>
Sat, 7 Sep 2019 17:05:09 +0000 (19:05 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 7 Sep 2019 17:05:09 +0000 (19:05 +0200)
Problem:    More functions can be used as methods.
Solution:   Make various functions usable as a method.

runtime/doc/eval.txt
src/evalfunc.c
src/testdir/test_breakindent.vim
src/testdir/test_expr.vim
src/testdir/test_functions.vim
src/testdir/test_sound.vim
src/testdir/test_spell.vim
src/testdir/test_substitute.vim
src/testdir/test_swap.vim
src/testdir/test_utf8.vim
src/version.c

index 26a28dca3e039f2fbe4aba81aa1bc057f49a348b..772fd1d7ae59fd4ac61182851cf39e6df0c25d5f 100644 (file)
@@ -8895,7 +8895,11 @@ sound_playevent({name} [, {callback}])
 
                Returns the sound ID, which can be passed to `sound_stop()`.
                Returns zero if the sound could not be played.
-               {only available when compiled with the |+sound| feature}
+
+               Can also be used as a |method|: >
+                       GetSoundName()->sound_playevent()
+
+<              {only available when compiled with the |+sound| feature}
 
                                                        *sound_playfile()*
 sound_playfile({path} [, {callback}])
@@ -8903,6 +8907,10 @@ sound_playfile({path} [, {callback}])
                must be a full path.  On Ubuntu you may find files to play
                with this command: >
                    :!find /usr/share/sounds -type f | grep -v index.theme
+
+<              Can also be used as a |method|: >
+                       GetSoundPath()->sound_playfile()
+
 <              {only available when compiled with the |+sound| feature}
 
 
@@ -8913,7 +8921,10 @@ sound_stop({id})                                 *sound_stop()*
                On MS-Windows, this does not work for event sound started by
                `sound_playevent()`. To stop event sounds, use `sound_clear()`.
 
-               {only available when compiled with the |+sound| feature}
+               Can also be used as a |method|: >
+                       soundid->sound_stop()
+
+<              {only available when compiled with the |+sound| feature}
 
                                                        *soundfold()*
 soundfold({word})
@@ -8924,6 +8935,9 @@ soundfold({word})
                This can be used for making spelling suggestions.  Note that
                the method can be quite slow.
 
+               Can also be used as a |method|: >
+                       GetWord()->soundfold()
+<
                                                        *spellbadword()*
 spellbadword([{sentence}])
                Without argument: The result is the badly spelled word under
@@ -8950,6 +8964,9 @@ spellbadword([{sentence}])
                'spell' option must be set and the value of 'spelllang' is
                used.
 
+               Can also be used as a |method|: >
+                       GetText()->spellbadword()
+<
                                                        *spellsuggest()*
 spellsuggest({word} [, {max} [, {capital}]])
                Return a |List| with spelling suggestions to replace {word}.
@@ -8973,6 +8990,8 @@ spellsuggest({word} [, {max} [, {capital}]])
                'spell' option must be set and the values of 'spelllang' and
                'spellsuggest' are used.
 
+               Can also be used as a |method|: >
+                       GetWord()->spellsuggest()
 
 split({expr} [, {pattern} [, {keepempty}]])                    *split()*
                Make a |List| out of {expr}.  When {pattern} is omitted or
@@ -9069,6 +9088,19 @@ str2nr({expr} [, {base}])                                *str2nr()*
                leading "0b" or "0B" is ignored.
                Text after the number is silently ignored.
 
+               Can also be used as a |method|: >
+                       GetText()->str2nr()
+
+strcharpart({src}, {start} [, {len}])                  *strcharpart()*
+               Like |strpart()| but using character index and length instead
+               of byte index and length.
+               When a character index is used where a character does not
+               exist it is assumed to be one character.  For example: >
+                       strcharpart('abc', -1, 2)
+<              results in 'a'.
+
+               Can also be used as a |method|: >
+                       GetText()->strcharpart(5)
 
 strchars({expr} [, {skipcc}])                                  *strchars()*
                The result is a Number, which is the number of characters
@@ -9094,13 +9126,8 @@ strchars({expr} [, {skipcc}])                                    *strchars()*
                      endfunction
                    endif
 <
-strcharpart({src}, {start} [, {len}])                  *strcharpart()*
-               Like |strpart()| but using character index and length instead
-               of byte index and length.
-               When a character index is used where a character does not
-               exist it is assumed to be one character.  For example: >
-                       strcharpart('abc', -1, 2)
-<              results in 'a'.
+               Can also be used as a |method|: >
+                       GetText()->strchars()
 
 strdisplaywidth({expr} [, {col}])                      *strdisplaywidth()*
                The result is a Number, which is the number of display cells
@@ -9115,6 +9142,9 @@ strdisplaywidth({expr} [, {col}])                 *strdisplaywidth()*
                Ambiguous, this function's return value depends on 'ambiwidth'.
                Also see |strlen()|, |strwidth()| and |strchars()|.
 
+               Can also be used as a |method|: >
+                       GetText()->strdisplaywidth()
+
 strftime({format} [, {time}])                          *strftime()*
                The result is a String, which is a formatted date and time, as
                specified by the {format} string.  The given {time} is used,
@@ -9134,12 +9164,18 @@ strftime({format} [, {time}])                           *strftime()*
 <              Not available on all systems.  To check use: >
                        :if exists("*strftime")
 
+<              Can also be used as a |method|: >
+                       GetFormat()->strftime()
+
 strgetchar({str}, {index})                             *strgetchar()*
                Get character {index} from {str}.  This uses a character
                index, not a byte index.  Composing characters are considered
                separate characters here.
                Also see |strcharpart()| and |strchars()|.
 
+               Can also be used as a |method|: >
+                       GetText()->strgetchar(5)
+
 stridx({haystack}, {needle} [, {start}])               *stridx()*
                The result is a Number, which gives the byte index in
                {haystack} of the first occurrence of the String {needle}.
@@ -9159,6 +9195,8 @@ stridx({haystack}, {needle} [, {start}])          *stridx()*
                stridx() works similar to the C function strstr().  When used
                with a single character it works similar to strchr().
 
+               Can also be used as a |method|: >
+                       GetHaystack()->stridx(needle)
                                                        *string()*
 string({expr}) Return {expr} converted to a String.  If {expr} is a Number,
                Float, String, Blob or a composition of them, then the result
@@ -9211,6 +9249,9 @@ strpart({src}, {start} [, {len}])                 *strpart()*
                example, to get three bytes under and after the cursor: >
                        strpart(getline("."), col(".") - 1, 3)
 <
+               Can also be used as a |method|: >
+                       GetText()->strpart(5)
+
 strridx({haystack}, {needle} [, {start}])                      *strridx()*
                The result is a Number, which gives the byte index in
                {haystack} of the last occurrence of the String {needle}.
@@ -9229,6 +9270,9 @@ strridx({haystack}, {needle} [, {start}])                 *strridx()*
                When used with a single character it works similar to the C
                function strrchr().
 
+               Can also be used as a |method|: >
+                       GetHaystack()->strridx(needle)
+
 strtrans({expr})                                       *strtrans()*
                The result is a String, which is {expr} with all unprintable
                characters translated into printable characters |'isprint'|.
@@ -9277,6 +9321,9 @@ submatch({nr} [, {list}])                 *submatch()* *E935*
 <              This finds the first number in the line and adds one to it.
                A line break is included as a newline character.
 
+               Can also be used as a |method|: >
+                       GetNr()->submatch()
+
 substitute({expr}, {pat}, {sub}, {flags})              *substitute()*
                The result is a String, which is a copy of {expr}, in which
                the first match of {pat} is replaced with {sub}.
@@ -9340,6 +9387,9 @@ swapinfo({fname})                                 *swapinfo()*
                        Not a swap file: does not contain correct block ID
                        Magic number mismatch: Info in first block is invalid
 
+               Can also be used as a |method|: >
+                       GetFilename()->swapinfo()
+
 swapname({expr})                                       *swapname()*
                The result is the swap file path of the buffer {expr}.
                For the use of {expr}, see |bufname()| above.
@@ -9347,6 +9397,9 @@ swapname({expr})                                  *swapname()*
                |:swapname| (unless no swap file).
                If buffer {expr} has no swap file, returns an empty string.
 
+               Can also be used as a |method|: >
+                       GetBufname()->swapname()
+
 synID({lnum}, {col}, {trans})                          *synID()*
                The result is a Number, which is the syntax ID at the position
                {lnum} and {col} in the current window.
index 2461b6c304cd87304dddd9749405fe303f5ae5cc..19922da79ac89f1b6a6e8bea6d6474c0817d110b 100644 (file)
@@ -715,38 +715,38 @@ static funcentry_T global_functions[] =
     {"sort",           1, 3, FEARG_1,    f_sort},
 #ifdef FEAT_SOUND
     {"sound_clear",    0, 0, 0,          f_sound_clear},
-    {"sound_playevent",        1, 2, 0,          f_sound_playevent},
-    {"sound_playfile", 1, 2, 0,          f_sound_playfile},
-    {"sound_stop",     1, 1, 0,          f_sound_stop},
+    {"sound_playevent",        1, 2, FEARG_1,    f_sound_playevent},
+    {"sound_playfile", 1, 2, FEARG_1,    f_sound_playfile},
+    {"sound_stop",     1, 1, FEARG_1,    f_sound_stop},
 #endif
-    {"soundfold",      1, 1, 0,          f_soundfold},
-    {"spellbadword",   0, 1, 0,          f_spellbadword},
-    {"spellsuggest",   1, 3, 0,          f_spellsuggest},
+    {"soundfold",      1, 1, FEARG_1,    f_soundfold},
+    {"spellbadword",   0, 1, FEARG_1,    f_spellbadword},
+    {"spellsuggest",   1, 3, FEARG_1,    f_spellsuggest},
     {"split",          1, 3, FEARG_1,    f_split},
 #ifdef FEAT_FLOAT
     {"sqrt",           1, 1, FEARG_1,    f_sqrt},
     {"str2float",      1, 1, FEARG_1,    f_str2float},
 #endif
     {"str2list",       1, 2, FEARG_1,    f_str2list},
-    {"str2nr",         1, 2, 0,          f_str2nr},
-    {"strcharpart",    2, 3, 0,          f_strcharpart},
-    {"strchars",       1, 2, 0,          f_strchars},
-    {"strdisplaywidth",        1, 2, 0,          f_strdisplaywidth},
+    {"str2nr",         1, 2, FEARG_1,    f_str2nr},
+    {"strcharpart",    2, 3, FEARG_1,    f_strcharpart},
+    {"strchars",       1, 2, FEARG_1,    f_strchars},
+    {"strdisplaywidth",        1, 2, FEARG_1,    f_strdisplaywidth},
 #ifdef HAVE_STRFTIME
-    {"strftime",       1, 2, 0,          f_strftime},
+    {"strftime",       1, 2, FEARG_1,    f_strftime},
 #endif
-    {"strgetchar",     2, 2, 0,          f_strgetchar},
-    {"stridx",         2, 3, 0,          f_stridx},
+    {"strgetchar",     2, 2, FEARG_1,    f_strgetchar},
+    {"stridx",         2, 3, FEARG_1,    f_stridx},
     {"string",         1, 1, FEARG_1,    f_string},
     {"strlen",         1, 1, FEARG_1,    f_strlen},
-    {"strpart",                2, 3, 0,          f_strpart},
-    {"strridx",                2, 3, 0,          f_strridx},
+    {"strpart",                2, 3, FEARG_1,    f_strpart},
+    {"strridx",                2, 3, FEARG_1,    f_strridx},
     {"strtrans",       1, 1, FEARG_1,    f_strtrans},
     {"strwidth",       1, 1, FEARG_1,    f_strwidth},
-    {"submatch",       1, 2, 0,          f_submatch},
+    {"submatch",       1, 2, FEARG_1,    f_submatch},
     {"substitute",     4, 4, FEARG_1,    f_substitute},
-    {"swapinfo",       1, 1, 0,          f_swapinfo},
-    {"swapname",       1, 1, 0,          f_swapname},
+    {"swapinfo",       1, 1, FEARG_1,    f_swapinfo},
+    {"swapname",       1, 1, FEARG_1,    f_swapname},
     {"synID",          3, 3, 0,          f_synID},
     {"synIDattr",      2, 3, FEARG_1,    f_synIDattr},
     {"synIDtrans",     1, 1, FEARG_1,    f_synIDtrans},
index 65e258af54144da177078f0baa47b8b60c0de4ce..785709fc0ff42d299a27b637b413e311c8a55a6b 100644 (file)
@@ -424,7 +424,7 @@ func Test_breakindent11_vartabs()
   call s:test_windows('setl cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4 vts=4')
   let text = getline(2)
   let width = strlen(text[1:]) + 2->indent() + strlen(&sbr) * 3 " text wraps 3 times
-  call assert_equal(width, strdisplaywidth(text))
+  call assert_equal(width, text->strdisplaywidth())
   call s:close_windows('set sbr= vts&')
 endfunc
 
index 110cecb6059ae4dc7d26b1190545037ddee03495..365a81344f1fb0027fbc2cba7db4e5049cc39bf3 100644 (file)
@@ -53,7 +53,7 @@ endfunc
 
 func Test_strgetchar()
   call assert_equal(char2nr('a'), strgetchar('axb', 0))
-  call assert_equal(char2nr('x'), strgetchar('axb', 1))
+  call assert_equal(char2nr('x'), 'axb'->strgetchar(1))
   call assert_equal(char2nr('b'), strgetchar('axb', 2))
 
   call assert_equal(-1, strgetchar('axb', -1))
@@ -63,7 +63,7 @@ endfunc
 
 func Test_strcharpart()
   call assert_equal('a', strcharpart('axb', 0, 1))
-  call assert_equal('x', strcharpart('axb', 1, 1))
+  call assert_equal('x', 'axb'->strcharpart(1, 1))
   call assert_equal('b', strcharpart('axb', 2, 1))
   call assert_equal('xb', strcharpart('axb', 1))
 
index 3588c767a06fd0f9300f71fe73afb8d6ad958583..4c6d2a89f470f5553e616c1c0307bf95f6488ca6 100644 (file)
@@ -138,7 +138,7 @@ func Test_str2nr()
   call assert_equal(-123456789, str2nr('-123456789'))
 
   call assert_equal(5, str2nr('101', 2))
-  call assert_equal(5, str2nr('0b101', 2))
+  call assert_equal(5, '0b101'->str2nr(2))
   call assert_equal(5, str2nr('0B101', 2))
   call assert_equal(-5, str2nr('-101', 2))
   call assert_equal(-5, str2nr('-0b101', 2))
@@ -184,7 +184,7 @@ func Test_strftime()
   " of strftime() can be 17 or 18, depending on timezone.
   call assert_match('^2017-01-1[78]$', strftime('%Y-%m-%d', 1484695512))
   "
-  call assert_match('^\d\d\d\d-\(0\d\|1[012]\)-\([012]\d\|3[01]\) \([01]\d\|2[0-3]\):[0-5]\d:\([0-5]\d\|60\)$', strftime('%Y-%m-%d %H:%M:%S'))
+  call assert_match('^\d\d\d\d-\(0\d\|1[012]\)-\([012]\d\|3[01]\) \([01]\d\|2[0-3]\):[0-5]\d:\([0-5]\d\|60\)$', '%Y-%m-%d %H:%M:%S'->strftime())
 
   call assert_fails('call strftime([])', 'E730:')
   call assert_fails('call strftime("%Y", [])', 'E745:')
@@ -415,7 +415,7 @@ endfunc
 func Test_strpart()
   call assert_equal('de', strpart('abcdefg', 3, 2))
   call assert_equal('ab', strpart('abcdefg', -2, 4))
-  call assert_equal('abcdefg', strpart('abcdefg', -2))
+  call assert_equal('abcdefg', 'abcdefg'->strpart(-2))
   call assert_equal('fg', strpart('abcdefg', 5, 4))
   call assert_equal('defg', strpart('abcdefg', 3))
 
@@ -763,11 +763,11 @@ endfunc
 func Test_stridx()
   call assert_equal(-1, stridx('', 'l'))
   call assert_equal(0,  stridx('', ''))
-  call assert_equal(0,  stridx('hello', ''))
+  call assert_equal(0,  'hello'->stridx(''))
   call assert_equal(-1, stridx('hello', 'L'))
   call assert_equal(2,  stridx('hello', 'l', -1))
   call assert_equal(2,  stridx('hello', 'l', 0))
-  call assert_equal(2,  stridx('hello', 'l', 1))
+  call assert_equal(2,  'hello'->stridx('l', 1))
   call assert_equal(3,  stridx('hello', 'l', 3))
   call assert_equal(-1, stridx('hello', 'l', 4))
   call assert_equal(-1, stridx('hello', 'l', 10))
@@ -780,7 +780,7 @@ func Test_strridx()
   call assert_equal(0,  strridx('', ''))
   call assert_equal(5,  strridx('hello', ''))
   call assert_equal(-1, strridx('hello', 'L'))
-  call assert_equal(3,  strridx('hello', 'l'))
+  call assert_equal(3,  'hello'->strridx('l'))
   call assert_equal(3,  strridx('hello', 'l', 10))
   call assert_equal(3,  strridx('hello', 'l', 3))
   call assert_equal(2,  strridx('hello', 'l', 2))
index 6ffd7e65f614a207bec53f9d10f9ae8b0943f4c9..86dc596731f44a6c14e06030fc0dea9d0846efab 100644 (file)
@@ -13,13 +13,13 @@ func Test_play_event()
   if has('win32')
     throw 'Skipped: Playing event with callback is not supported on Windows'
   endif
-  let id = sound_playevent('bell', 'PlayCallback')
+  let id = 'bell'->sound_playevent('PlayCallback')
   if id == 0
     throw 'Skipped: bell event not available'
   endif
   " Stop it quickly, avoid annoying the user.
   sleep 20m
-  call sound_stop(id)
+  eval id->sound_stop()
   sleep 30m
   call assert_equal(id, g:id)
   call assert_equal(1, g:result)  " sound was aborted
@@ -35,7 +35,7 @@ func Test_play_silent()
   endif
 
   " play until the end
-  let id2 = sound_playfile(fname, 'PlayCallback')
+  let id2 = fname->sound_playfile('PlayCallback')
   call assert_true(id2 > 0)
   sleep 500m
   call assert_equal(id2, g:id)
index af72637ce37c4e9fb4b0fe97ba6f9749f7e5ded3..a44d95534fd52c9abb3fb853d1038d27aa9e7487 100644 (file)
@@ -73,7 +73,7 @@ func Test_spellbadword()
   set spell
 
   call assert_equal(['bycycle', 'bad'],  spellbadword('My bycycle.'))
-  call assert_equal(['another', 'caps'], spellbadword('A sentence. another sentence'))
+  call assert_equal(['another', 'caps'], 'A sentence. another sentence'->spellbadword())
 
   set spelllang=en
   call assert_equal(['', ''],            spellbadword('centre'))
@@ -179,7 +179,7 @@ func Test_zz_basic()
         \ )
 
   call assert_equal("gebletegek", soundfold('goobledygoook'))
-  call assert_equal("kepereneven", soundfold('kóopërÿnôven'))
+  call assert_equal("kepereneven", 'kóopërÿnôven'->soundfold())
   call assert_equal("everles gesvets etele", soundfold('oeverloos gezwets edale'))
 endfunc
 
@@ -440,7 +440,7 @@ func TestGoodBadBase()
       break
     endif
     let prevbad = bad
-    let lst = spellsuggest(bad, 3)
+    let lst = bad->spellsuggest(3)
     normal mm
 
     call add(result, [bad, lst])
index a263fb6211fec19cdfa273eb653e6b58e2a2c6fb..8a8e7ab4f8096ae1800a3319aa86e2a64719e0ae 100644 (file)
@@ -337,7 +337,7 @@ func Test_sub_replace_5()
                \ substitute('A123456789',
                \ 'A\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)',
                \ '\=string([submatch(0, 1), submatch(9, 1), ' .
-               \ 'submatch(8, 1), submatch(7, 1), submatch(6, 1), ' .
+               \ 'submatch(8, 1), 7->submatch(1), submatch(6, 1), ' .
                \ 'submatch(5, 1), submatch(4, 1), submatch(3, 1), ' .
                \ 'submatch(2, 1), submatch(1, 1)])',
                \ ''))
index 856c663b72ce896f48489bbbd6f2aa38562816d6..6e01ad00dae915dc5a4057d3a3bf6e53507c157e 100644 (file)
@@ -111,7 +111,7 @@ func Test_swapinfo()
   w
   let fname = s:swapname()
   call assert_match('Xswapinfo', fname)
-  let info = swapinfo(fname)
+  let info = fname->swapinfo()
 
   let ver = printf('VIM %d.%d', v:version / 100, v:version % 100)
   call assert_equal(ver, info.version)
@@ -153,7 +153,7 @@ func Test_swapname()
   let buf = bufnr('%')
   let expected = s:swapname()
   wincmd p
-  call assert_equal(expected, swapname(buf))
+  call assert_equal(expected, buf->swapname())
 
   new Xtest3
   setlocal noswapfile
index fa0568e597d6cb7a049e2b04a30b458e4dd7887c..42a46fd435147445462b5bb359619c106c70b971 100644 (file)
@@ -17,7 +17,7 @@ func Test_strchars()
   let exp = [[1, 1, 1], [3, 3, 3], [2, 2, 1], [3, 3, 1], [1, 1, 1]]
   for i in range(len(inp))
     call assert_equal(exp[i][0], strchars(inp[i]))
-    call assert_equal(exp[i][1], strchars(inp[i], 0))
+    call assert_equal(exp[i][1], inp[i]->strchars(0))
     call assert_equal(exp[i][2], strchars(inp[i], 1))
   endfor
 endfunc
index 80976779af916ae26c8792355202d35baf31b37c..54680f5425fd2d695caad987b4832776300a9f38 100644 (file)
@@ -757,6 +757,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2004,
 /**/
     2003,
 /**/