aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/doc/eval.txt20
-rw-r--r--runtime/doc/index.txt4
-rw-r--r--runtime/doc/message.txt4
-rw-r--r--runtime/doc/quickfix.txt17
-rw-r--r--runtime/filetype.vim2
-rw-r--r--runtime/menu.vim4
-rw-r--r--src/nvim/eval.c30
-rw-r--r--src/nvim/eval.lua1
-rw-r--r--src/nvim/eval_defs.h1
-rw-r--r--src/nvim/testdir/Makefile3
-rw-r--r--src/nvim/testdir/test_textobjects.vim43
-rw-r--r--src/nvim/version.c4
-rw-r--r--test/functional/legacy/assert_spec.lua20
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()