diff options
-rw-r--r-- | runtime/doc/eval.txt | 20 | ||||
-rw-r--r-- | runtime/doc/index.txt | 4 | ||||
-rw-r--r-- | runtime/doc/message.txt | 4 | ||||
-rw-r--r-- | runtime/doc/quickfix.txt | 17 | ||||
-rw-r--r-- | runtime/filetype.vim | 2 | ||||
-rw-r--r-- | runtime/menu.vim | 4 | ||||
-rw-r--r-- | src/nvim/eval.c | 30 | ||||
-rw-r--r-- | src/nvim/eval.lua | 1 | ||||
-rw-r--r-- | src/nvim/eval_defs.h | 1 | ||||
-rw-r--r-- | src/nvim/testdir/Makefile | 3 | ||||
-rw-r--r-- | src/nvim/testdir/test_textobjects.vim | 43 | ||||
-rw-r--r-- | src/nvim/version.c | 4 | ||||
-rw-r--r-- | test/functional/legacy/assert_spec.lua | 20 |
13 files changed, 137 insertions, 16 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index 1ce2511f3c..7ce47179b8 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -1197,7 +1197,7 @@ lambda expression *expr-lambda* *lambda* {args -> expr1} lambda expression A lambda expression creates a new unnamed function which returns the result of -evaluating |expr1|. Lambda expressions are differ from |user-functions| in +evaluating |expr1|. Lambda expressions differ from |user-functions| in the following ways: 1. The body of the lambda expression is an |expr1| and not a sequence of |Ex| @@ -1946,6 +1946,8 @@ assert_equal({exp}, {act} [, {msg}]) none assert {exp} is equal to {act} assert_exception( {error} [, {msg}]) none assert {error} is in v:exception assert_fails( {cmd} [, {error}]) none assert {cmd} fails assert_false({actual} [, {msg}]) none assert {actual} is false +assert_inrange({lower}, {upper}, {actual} [, {msg}]) + none assert {actual} is inside the range assert_match( {pat}, {text} [, {msg}]) none assert {pat} matches {text} assert_notequal( {exp}, {act} [, {msg}]) none assert {exp} is not equal {act} assert_notmatch( {pat}, {text} [, {msg}]) none assert {pat} not matches {text} @@ -2460,8 +2462,16 @@ assert_false({actual} [, {msg}]) *assert_false()* |v:errors|, like with |assert_equal()|. A value is false when it is zero or |v:false|. When "{actual}" is not a number or |v:false| the assert fails. - When {msg} is omitted an error in the form "Expected False but - got {actual}" is produced. + When {msg} is omitted an error in the form + "Expected False but got {actual}" is produced. + +assert_inrange({lower}, {upper}, {actual} [, {msg}]) *assert_inrange()* + This asserts number values. When {actual} is lower than + {lower} or higher than {upper} an error message is added to + |v:errors|. + When {msg} is omitted an error in the form + "Expected range {lower} - {upper}, but got {actual}" is + produced. *assert_match()* assert_match({pattern}, {actual} [, {msg}]) @@ -2476,8 +2486,8 @@ assert_match({pattern}, {actual} [, {msg}]) Use "^" and "$" to match with the start and end of the text. Use both to match the whole text. - When {msg} is omitted an error in the form "Pattern {pattern} - does not match {actual}" is produced. + When {msg} is omitted an error in the form + "Pattern {pattern} does not match {actual}" is produced. Example: > assert_match('^f.*o$', 'foobar') < Will result in a string to be added to |v:errors|: diff --git a/runtime/doc/index.txt b/runtime/doc/index.txt index 7388652f16..cedf0266d6 100644 --- a/runtime/doc/index.txt +++ b/runtime/doc/index.txt @@ -1,4 +1,4 @@ -*index.txt* For Vim version 7.4. Last change: 2016 Jun 12 +*index.txt* For Vim version 7.4. Last change: 2016 Jul 16 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1152,6 +1152,7 @@ tag command action ~ |:chdir| :chd[ir] change directory |:checkpath| :che[ckpath] list included files |:checktime| :checkt[ime] check timestamp of loaded buffers +|:chistory| :chi[story] list the error lists |:clast| :cla[st] go to the specified error, default last one |:clearjumps| :cle[arjumps] clear the jump list |:clist| :cl[ist] list all errors @@ -1313,6 +1314,7 @@ tag command action ~ |:lgrep| :lgr[ep] run 'grepprg' and jump to first match |:lgrepadd| :lgrepa[dd] like :grep, but append to current list |:lhelpgrep| :lh[elpgrep] like ":helpgrep" but uses location list +|:lhistory| :lhi[story] list the location lists |:ll| :ll go to specific location |:llast| :lla[st] go to the specified location, default last one |:llist| :lli[st] list all locations diff --git a/runtime/doc/message.txt b/runtime/doc/message.txt index fd66a5dafb..b3a4bf9d72 100644 --- a/runtime/doc/message.txt +++ b/runtime/doc/message.txt @@ -1,4 +1,4 @@ -*message.txt* For Vim version 7.4. Last change: 2016 Jul 14 +*message.txt* For Vim version 7.4. Last change: 2016 Jul 16 VIM REFERENCE MANUAL by Bram Moolenaar @@ -668,7 +668,7 @@ Vim and restart it. *E931* > Buffer cannot be registered -Out of memory or a duplicate buffer number. May habben after W14. Looking up +Out of memory or a duplicate buffer number. May happen after W14. Looking up a buffer will not always work, better restart Vim. *E296* *E297* > diff --git a/runtime/doc/quickfix.txt b/runtime/doc/quickfix.txt index 0b7907e364..ec0b2cfef6 100644 --- a/runtime/doc/quickfix.txt +++ b/runtime/doc/quickfix.txt @@ -1,4 +1,4 @@ -*quickfix.txt* For Vim version 7.4. Last change: 2016 Jul 07 +*quickfix.txt* For Vim version 7.4. Last change: 2016 Jul 17 VIM REFERENCE MANUAL by Bram Moolenaar @@ -525,7 +525,7 @@ lists. They set one of the existing error lists as the current one. list, an error message is given. *:lolder* *:lol* -:lol[der] [count] Same as ":colder", except use the location list for +:lol[der] [count] Same as `:colder`, except use the location list for the current window instead of the quickfix list. *:cnewer* *:cnew* *E381* @@ -534,9 +534,20 @@ lists. They set one of the existing error lists as the current one. list, an error message is given. *:lnewer* *:lnew* -:lnew[er] [count] Same as ":cnewer", except use the location list for +:lnew[er] [count] Same as `:cnewer`, except use the location list for the current window instead of the quickfix list. + *:chistory* *:chi* +:chi[story] Show the list of error lists. The current list is + marked with ">". The output looks like: + error list 1 of 3; 43 errors ~ + > error list 2 of 3; 0 errors ~ + error list 3 of 3; 15 errors ~ + + *:lhistory* *:lhi* +:lhi[story] Show the list of location lists, otherwise like + `:chistory`. + When adding a new error list, it becomes the current list. When ":colder" has been used and ":make" or ":grep" is used to add a new error diff --git a/runtime/filetype.vim b/runtime/filetype.vim index 24587c56dc..f9d7f86a97 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -2642,6 +2642,8 @@ au BufNewFile,BufRead [rR]akefile* call s:StarSetf('ruby') " Mail (also matches muttrc.vim, so this is below the other checks) au BufNewFile,BufRead mutt[[:alnum:]._-]\\\{6\} setf mail +au BufNewFile,BufRead reportbug-* call s:StarSetf('mail') + " Modconf au BufNewFile,BufRead */etc/modutils/* \ if executable(expand("<afile>")) != 1 diff --git a/runtime/menu.vim b/runtime/menu.vim index 5cbc0faabd..4971baa936 100644 --- a/runtime/menu.vim +++ b/runtime/menu.vim @@ -188,7 +188,7 @@ an 20.435 &Edit.Startup\ &Settings :call <SID>EditVimrc()<CR> fun! s:EditVimrc() if $MYVIMRC != '' let fname = $MYVIMRC - elseif has("win32") || has("dos32") || has("dos16") + elseif has("win32") if $HOME != '' let fname = $HOME . "/_vimrc" else @@ -552,7 +552,7 @@ endfun func! s:XxdFind() if !exists("g:xxdprogram") " On the PC xxd may not be in the path but in the install directory - if (has("win32") || has("dos32")) && !executable("xxd") + if has("win32") && !executable("xxd") let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe" else let g:xxdprogram = "xxd" diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 3b8b38588b..6dc7e5606e 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -8111,6 +8111,30 @@ static void f_assert_fails(typval_T *argvars, typval_T *rettv, FunPtr fptr) set_vim_var_string(VV_ERRMSG, NULL, 0); } +void assert_inrange(typval_T *argvars) +{ + int error = (int)false; + varnumber_T lower = get_tv_number_chk(&argvars[0], &error); + varnumber_T upper = get_tv_number_chk(&argvars[1], &error); + varnumber_T actual = get_tv_number_chk(&argvars[2], &error); + + if (error) { + return; + } + if (actual < lower || actual > upper) { + garray_T ga; + prepare_assert_error(&ga); + + char msg[55]; + vim_snprintf(msg, sizeof(msg), "range %" PRId64 " - %" PRId64 ",", + (int64_t)lower, (int64_t)upper); + fill_assert_error(&ga, &argvars[3], (char_u *)msg, NULL, &argvars[2], + ASSERT_INRANGE); + assert_error(&ga); + ga_clear(&ga); + } +} + // Common for assert_true() and assert_false(). static void assert_bool(typval_T *argvars, bool is_true) { @@ -8158,6 +8182,12 @@ static void assert_match_common(typval_T *argvars, assert_type_T atype) } } +/// "assert_inrange(lower, upper[, msg])" function +static void f_assert_inrange(typval_T *argvars, typval_T *rettv, FunPtr fptr) +{ + assert_inrange(argvars); +} + /// "assert_match(pattern, actual[, msg])" function static void f_assert_match(typval_T *argvars, typval_T *rettv, FunPtr fptr) { diff --git a/src/nvim/eval.lua b/src/nvim/eval.lua index fa19ff209e..e3c5981b32 100644 --- a/src/nvim/eval.lua +++ b/src/nvim/eval.lua @@ -29,6 +29,7 @@ return { assert_exception={args={1, 2}}, assert_fails={args={1, 2}}, assert_false={args={1, 2}}, + assert_inrange={args={2, 3}}, assert_match={args={2, 3}}, assert_notequal={args={2, 3}}, assert_notmatch={args={2, 3}}, diff --git a/src/nvim/eval_defs.h b/src/nvim/eval_defs.h index fb2822b851..39028fdb11 100644 --- a/src/nvim/eval_defs.h +++ b/src/nvim/eval_defs.h @@ -278,6 +278,7 @@ typedef enum ASSERT_NOTEQUAL, ASSERT_MATCH, ASSERT_NOTMATCH, + ASSERT_INRANGE, ASSERT_OTHER, } assert_type_T; diff --git a/src/nvim/testdir/Makefile b/src/nvim/testdir/Makefile index 6f4e0fe49f..7a2360f340 100644 --- a/src/nvim/testdir/Makefile +++ b/src/nvim/testdir/Makefile @@ -41,13 +41,14 @@ NEW_TESTS ?= \ test_history.res \ test_increment.res \ test_increment_dbcs.res \ - test_lambda.res \ + test_lambda.res \ test_langmap.res \ test_match.res \ test_matchadd_conceal.res \ test_quickfix.res \ test_signs.res \ test_syntax.res \ + test_textobjects.res \ test_timers.res \ test_usercommands.res \ test_viml.res \ diff --git a/src/nvim/testdir/test_textobjects.vim b/src/nvim/testdir/test_textobjects.vim new file mode 100644 index 0000000000..630ae5d3a4 --- /dev/null +++ b/src/nvim/testdir/test_textobjects.vim @@ -0,0 +1,43 @@ +" Test for textobjects + +if !has('textobjects') + finish +endif + +function! CpoM(line, useM, expected) + new + + if a:useM + set cpoptions+=M + else + set cpoptions-=M + endif + + call setline(1, a:line) + + call setreg('"', '') + normal! ggfrmavi)y + call assert_equal(getreg('"'), a:expected[0]) + + call setreg('"', '') + normal! `afbmavi)y + call assert_equal(getreg('"'), a:expected[1]) + + call setreg('"', '') + normal! `afgmavi)y + call assert_equal(getreg('"'), a:expected[2]) + + q! +endfunction + +function! Test_inner_block_without_cpo_M() + call CpoM('(red \(blue) green)', 0, ['red \(blue', 'red \(blue', '']) +endfunction + +function! Test_inner_block_with_cpo_M_left_backslash() + call CpoM('(red \(blue) green)', 1, ['red \(blue) green', 'blue', 'red \(blue) green']) +endfunction + +function! Test_inner_block_with_cpo_M_right_backslash() + call CpoM('(red (blue\) green)', 1, ['red (blue\) green', 'blue\', 'red (blue\) green']) +endfunction diff --git a/src/nvim/version.c b/src/nvim/version.c index d6b17dc061..46009de4ea 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -342,10 +342,10 @@ static int included_patches[] = { // 2101, 2100, 2099, - // 2098, + 2098, // 2097, 2096, - // 2095, + 2095, // 2094 NA // 2093 NA // 2092 NA diff --git a/test/functional/legacy/assert_spec.lua b/test/functional/legacy/assert_spec.lua index 8a042be7f7..5c7268486a 100644 --- a/test/functional/legacy/assert_spec.lua +++ b/test/functional/legacy/assert_spec.lua @@ -235,6 +235,26 @@ describe('assert function:', function() end) end) + -- assert_inrange({lower}, {upper}, {actual}[, {msg}]) + describe('assert_inrange()', function() + it('should not change v:errors when actual is in range', function() + call('assert_inrange', 7, 7, 7) + call('assert_inrange', 5, 7, 5) + call('assert_inrange', 5, 7, 6) + call('assert_inrange', 5, 7, 7) + expected_empty() + end) + + it('should change v:errors when actual is not in range', function() + call('assert_inrange', 5, 7, 4) + call('assert_inrange', 5, 7, 8) + expected_errors({ + "Expected range 5 - 7, but got 4", + "Expected range 5 - 7, but got 8", + }) + end) + end) + -- assert_exception({cmd}, [, {error}]) describe('assert_exception()', function() it('should assert thrown exceptions properly', function() |