patch 8.2.2266: Vim9: it can be hard to see where white space is missing

Problem:    Vim9: it can be hard to see where white space is missing.
Solution:   Mention the text where the error was seen. (closes #7580)
diff --git a/src/errors.h b/src/errors.h
index 6f4ac0e..eb7239b 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -41,8 +41,8 @@
 	INIT(= N_("E1002: Syntax error at %s"));
 EXTERN char e_missing_return_value[]
 	INIT(= N_("E1003: Missing return value"));
-EXTERN char e_white_space_required_before_and_after_str[]
-	INIT(= N_("E1004: White space required before and after '%s'"));
+EXTERN char e_white_space_required_before_and_after_str_at_str[]
+	INIT(= N_("E1004: White space required before and after '%s' at \"%s\""));
 EXTERN char e_too_many_argument_types[]
 	INIT(= N_("E1005: Too many argument types"));
 EXTERN char e_str_is_used_as_argument[]
diff --git a/src/eval.c b/src/eval.c
index ac3e53f..b4b04eb 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -3778,7 +3778,8 @@
 	    return FAIL;
 	else if (vim9 && **arg == ':')
 	{
-	    semsg(_(e_white_space_required_before_and_after_str), ":");
+	    semsg(_(e_white_space_required_before_and_after_str_at_str),
+								    ":", *arg);
 	    clear_tv(&var1);
 	    return FAIL;
 	}
@@ -3799,7 +3800,8 @@
 	    ++*arg;
 	    if (vim9 && !IS_WHITE_OR_NUL(**arg) && **arg != ']')
 	    {
-		semsg(_(e_white_space_required_before_and_after_str), ":");
+		semsg(_(e_white_space_required_before_and_after_str_at_str),
+								":", *arg - 1);
 		if (!empty1)
 		    clear_tv(&var1);
 		return FAIL;
diff --git a/src/evalvars.c b/src/evalvars.c
index 9f84d76..346031e 100644
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -863,7 +863,8 @@
 						   || !IS_WHITE_OR_NUL(*expr)))
 	    {
 		vim_strncpy(op, expr - len, len);
-		semsg(_(e_white_space_required_before_and_after_str), op);
+		semsg(_(e_white_space_required_before_and_after_str_at_str),
+								   op, argend);
 		i = FAIL;
 	    }
 
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index 8fe0418..b7b9326 100644
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -108,7 +108,7 @@
       vim9script
       var name = v:true?1:2
   END
-  CheckScriptFailure(lines, 'E1004:', 2)
+  CheckScriptFailure(lines, 'E1004: White space required before and after ''?'' at "?1:2"', 2)
   lines =<< trim END
       vim9script
       var name = v:true? 1 : 2
@@ -123,7 +123,7 @@
       vim9script
       var name = v:true ? 1: 2
   END
-  CheckScriptFailure(lines, 'E1004:', 2)
+  CheckScriptFailure(lines, 'E1004: White space required before and after '':'' at ": 2"', 2)
   lines =<< trim END
       vim9script
       var name = v:true ? 1 :2
@@ -333,7 +333,7 @@
       vim9script
       var name = v:true||v:true
   END
-  CheckScriptFailure(lines, 'E1004:', 2)
+  CheckScriptFailure(lines, 'E1004: White space required before and after ''||'' at "||v:true"', 2)
   lines =<< trim END
       vim9script
       var name = v:true ||v:true
@@ -454,7 +454,7 @@
       vim9script
       var name = v:true &&v:true
   END
-  CheckScriptFailure(lines, 'E1004:', 2)
+  CheckScriptFailure(lines, 'E1004: White space required before and after ''&&'' at "&&v:true"', 2)
   lines =<< trim END
       vim9script
       var name = v:true&& v:true
@@ -920,7 +920,7 @@
     vim9script
     echo 2>3
   END
-  CheckScriptFailure(lines, 'E1004:', 2)
+  CheckScriptFailure(lines, 'E1004: White space required before and after ''>'' at ">3"', 2)
   lines =<< trim END
     vim9script
     echo 2 >3
@@ -940,7 +940,7 @@
     vim9script
     echo 2 !=3
   END
-  CheckScriptFailure(lines, 'E1004:', 2)
+  CheckScriptFailure(lines, 'E1004: White space required before and after ''!'' at "!=3"', 2)
   lines =<< trim END
     vim9script
     echo 2!= 3
@@ -1192,7 +1192,7 @@
       vim9script
       echo 'a'..'b'
   END
-  CheckScriptFailure(lines, 'E1004:', 2)
+  CheckScriptFailure(lines, 'E1004: White space required before and after ''..'' at "..''b''"', 2)
   lines =<< trim END
       vim9script
       echo 'a' ..'b'
@@ -1729,7 +1729,8 @@
       var a = 1
       var b = 2
   END
-  CheckDefAndScriptFailure(lines + ['echo numbers[1:b]'], 'E1004:', 4)
+  CheckDefAndScriptFailure(lines + ['echo numbers[1:b]'],
+      'E1004: White space required before and after '':'' at ":b]"', 4)
   CheckDefAndScriptFailure(lines + ['echo numbers[1: b]'], 'E1004:', 4)
   CheckDefAndScriptFailure(lines + ['echo numbers[a :b]'], 'E1004:', 4)
 enddef
@@ -1876,7 +1877,7 @@
   CheckDefAndScriptSuccess(lines)
 
   CheckDefFailure(["var Ref = (a)=>a + 1"], 'E1004:')
-  CheckDefFailure(["var Ref = (a)=> a + 1"], 'E1004:')
+  CheckDefFailure(["var Ref = (a)=> a + 1"], 'E1004: White space required before and after ''=>'' at "=> a + 1"')
   CheckDefFailure(["var Ref = (a) =>a + 1"], 'E1004:')
 
   CheckDefFailure(["filter([1, 2], (k,v) => 1)"], 'E1069:', 1)
@@ -1976,7 +1977,8 @@
 
   CheckDefAndScriptFailure(["var Ref = (a)=>a + 1"], 'E1004:')
   CheckDefAndScriptFailure(["var Ref = (a)=> a + 1"], 'E1004:')
-  CheckDefAndScriptFailure(["var Ref = (a) =>a + 1"], 'E1004:')
+  CheckDefAndScriptFailure(["var Ref = (a) =>a + 1"],
+      'E1004: White space required before and after ''=>'' at " =>a + 1"')
 
   CheckDefFailure(["var Ref: func(number): number = (a: number): string => 'x'"], 'E1012:')
   CheckDefFailure(["var Ref: func(number): string = (a: number): string => 99"], 'E1012:')
diff --git a/src/userfunc.c b/src/userfunc.c
index 5fab412..ed7d1d6 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -501,8 +501,8 @@
 		|| !IS_WHITE_OR_NUL(s[1])))
     {
 	*white_error = TRUE;
-	semsg(_(e_white_space_required_before_and_after_str),
-						    equal_arrow ? "=>" : "->");
+	semsg(_(e_white_space_required_before_and_after_str_at_str),
+					       equal_arrow ? "=>" : "->", bef);
 	return NULL;
     }
     return skipwhite(s + 1);
diff --git a/src/version.c b/src/version.c
index 770c1c7..493dece 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2266,
+/**/
     2265,
 /**/
     2264,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index 045061e..19d8473 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -3656,7 +3656,8 @@
 		    return FAIL;
 		if (**arg == ':')
 		{
-		    semsg(_(e_white_space_required_before_and_after_str), ":");
+		    semsg(_(e_white_space_required_before_and_after_str_at_str),
+								    ":", *arg);
 		    return FAIL;
 		}
 		if (may_get_next_line_error(p, arg, cctx) == FAIL)
@@ -3669,7 +3670,8 @@
 		++*arg;
 		if (!IS_WHITE_OR_NUL(**arg) && **arg != ']')
 		{
-		    semsg(_(e_white_space_required_before_and_after_str), ":");
+		    semsg(_(e_white_space_required_before_and_after_str_at_str),
+								    ":", *arg);
 		    return FAIL;
 		}
 		*arg = skipwhite(*arg);
@@ -4067,7 +4069,7 @@
     char_u	buf[10];
 
     vim_strncpy(buf, op, len);
-    semsg(_(e_white_space_required_before_and_after_str), buf);
+    semsg(_(e_white_space_required_before_and_after_str_at_str), buf, op);
 }
 
 /*
@@ -4434,7 +4436,8 @@
 
 	    if (!IS_WHITE_OR_NUL(**arg) || !IS_WHITE_OR_NUL(p[2]))
 	    {
-		semsg(_(e_white_space_required_before_and_after_str), op);
+		semsg(_(e_white_space_required_before_and_after_str_at_str),
+								     op, *arg);
 		return FAIL;
 	    }
 
@@ -4608,8 +4611,8 @@
 
 	if (!IS_WHITE_OR_NUL(**arg) || !IS_WHITE_OR_NUL(p[1 + op_falsy]))
 	{
-	    semsg(_(e_white_space_required_before_and_after_str),
-							op_falsy ? "??" : "?");
+	    semsg(_(e_white_space_required_before_and_after_str_at_str),
+						  op_falsy ? "??" : "?", *arg);
 	    return FAIL;
 	}
 
@@ -4695,7 +4698,8 @@
 
 	    if (!IS_WHITE_OR_NUL(**arg) || !IS_WHITE_OR_NUL(p[1]))
 	    {
-		semsg(_(e_white_space_required_before_and_after_str), ":");
+		semsg(_(e_white_space_required_before_and_after_str_at_str),
+								       ":", p);
 		return FAIL;
 	    }