changeset 19642:647ef636a11e v8.2.0378

patch 8.2.0378: prop_find() does not find all props Commit: https://github.com/vim/vim/commit/346f18e5fe12e6aaba5a6a18f6d0deb55eb7a9e8 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Mar 13 21:36:40 2020 +0100 patch 8.2.0378: prop_find() does not find all props Problem: prop_find() does not find all props. Solution: Check being in the start line. (Axel Forsman, closes https://github.com/vim/vim/issues/5776)
author Bram Moolenaar <Bram@vim.org>
date Fri, 13 Mar 2020 21:45:03 +0100
parents 73b2c928a8aa
children e9bfd6b3a478
files src/testdir/test_textprop.vim src/textprop.c src/version.c
diffstat 3 files changed, 21 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -213,6 +213,17 @@ func Test_prop_find()
   call prop_type_delete('prop_name')
 endfunc
 
+func Test_prop_find_smaller_len_than_match_col()
+  new
+  call prop_type_add('test', {'highlight': 'ErrorMsg'})
+  call setline(1, ['xxxx', 'x'])
+  call prop_add(1, 4, {'type': 'test'})
+  call assert_equal({'id': 0, 'lnum': 1, 'col': 4, 'type': 'test', 'length': 0, 'start': 1, 'end': 1},
+        \ prop_find({'type': 'test', 'lnum': 2, 'col': 1}, 'b'))
+  bwipe!
+  call prop_type_delete('test')
+endfunc
+
 func Test_prop_add()
   new
   call AddPropTypes()
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -663,13 +663,14 @@ f_prop_find(typval_T *argvars, typval_T 
 	    mch_memmove(&prop, text + textlen + i * sizeof(textprop_T),
 			    sizeof(textprop_T));
 
-	    if (dir < 0)
-	    {
-		if (col < prop.tp_col)
-		    break;
-	    }
-	    else if (prop.tp_col + prop.tp_len - (prop.tp_len != 0) < col)
-		continue;
+	    if (lnum == lnum_start)
+		if (dir < 0)
+		{
+		    if (col < prop.tp_col)
+			break;
+		}
+		else if (prop.tp_col + prop.tp_len - (prop.tp_len != 0) < col)
+		    continue;
 
 	    if (prop.tp_id == id || prop.tp_type == type_id)
 	    {
--- a/src/version.c
+++ b/src/version.c
@@ -739,6 +739,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    378,
+/**/
     377,
 /**/
     376,