]> granicus.if.org Git - vim/commitdiff
patch 8.1.1188: not all Vim variables require the v: prefix v8.1.1188
authorBram Moolenaar <Bram@vim.org>
Sat, 20 Apr 2019 12:39:52 +0000 (14:39 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 20 Apr 2019 12:39:52 +0000 (14:39 +0200)
Problem:    Not all Vim variables require the v: prefix.
Solution:   When scriptversion is 3 all Vim variables can only be used with
            the v: prefix.  (Ken Takata, closes #4274)

runtime/doc/eval.txt
src/eval.c
src/ex_cmds2.c
src/testdir/test_eval_stuff.vim
src/version.c

index c454f96dcbafeba1d7b94d5156beb9ce22b579e0..dba7486e94652ec431fdd37c29f8a9123c338b7f 100644 (file)
@@ -1688,7 +1688,8 @@ v:count           The count given for the last Normal mode command.  Can be used
                When there are two counts, as in "3d2w", they are multiplied,
                just like what happens in the command, "d6w" for the example.
                Also used for evaluating the 'formatexpr' option.
-               "count" also works, for backwards compatibility.
+               "count" also works, for backwards compatibility, unless
+               |scriptversion| is 3 or higher.
 
                                        *v:count1* *count1-variable*
 v:count1       Just like "v:count", but defaults to one when no count is
@@ -1720,7 +1721,8 @@ v:errmsg  Last given error message.  It's allowed to set this variable.
        :silent! next
        :if v:errmsg != ""
        :  ... handle error
-<              "errmsg" also works, for backwards compatibility.
+<              "errmsg" also works, for backwards compatibility, unless
+               |scriptversion| is 3 or higher.
 
                                *v:errors* *errors-variable* *assert-return*
 v:errors       Errors found by assert functions, such as |assert_true()|.
@@ -2023,7 +2025,8 @@ v:shell_error     Result of the last shell command.  When non-zero, the last
        :if v:shell_error
        :  echo 'could not rename "foo" to "bar"!'
        :endif
-<              "shell_error" also works, for backwards compatibility.
+<              "shell_error" also works, for backwards compatibility, unless
+               |scriptversion| is 3 or higher.
 
                                        *v:statusmsg* *statusmsg-variable*
 v:statusmsg    Last given status message.  It's allowed to set this variable.
@@ -2123,7 +2126,8 @@ v:testing Must be set before using `test_garbagecollect_now()`.
 v:this_session Full filename of the last loaded or saved session file.  See
                |:mksession|.  It is allowed to set this variable.  When no
                session file has been saved, this variable is empty.
-               "this_session" also works, for backwards compatibility.
+               "this_session" also works, for backwards compatibility, unless
+               |scriptversion| is 3 or higher
 
                                        *v:throwpoint* *throwpoint-variable*
 v:throwpoint   The point where the exception most recently caught and not
@@ -2154,7 +2158,7 @@ v:val             Value of the current item of a |List| or |Dictionary|.  Only
 v:version      Version number of Vim: Major version number times 100 plus
                minor version number.  Version 5.0 is 500.  Version 5.1 (5.01)
                is 501.  Read-only.  "version" also works, for backwards
-               compatibility.
+               compatibility, unless |scriptversion| is 3 or higher.
                Use |has()| to check if a certain patch was included, e.g.: >
                        if has("patch-7.4.123")
 <              Note that patch numbers are specific to the version, thus both
index 5f45d6900e44a62f792c00227870338d3194c74a..dd662875132fe0a7b0a41a7c5c69d6e01e828e98 100644 (file)
@@ -7672,10 +7672,14 @@ find_var_ht(char_u *name, char_u **varname)
            return NULL;
        *varname = name;
 
-       /* "version" is "v:version" in all scopes */
-       hi = hash_find(&compat_hashtab, name);
-       if (!HASHITEM_EMPTY(hi))
-           return &compat_hashtab;
+       // "version" is "v:version" in all scopes if scriptversion < 3.
+       // Same for a few other variables marked with VV_COMPAT.
+       if (current_sctx.sc_version < 3)
+       {
+           hi = hash_find(&compat_hashtab, name);
+           if (!HASHITEM_EMPTY(hi))
+               return &compat_hashtab;
+       }
 
        ht = get_funccal_local_ht();
        if (ht == NULL)
index 31caa9358335932c7919501a150ece039a5fdc9c..46d6dcb2366559116ec0361637b083b1bfb1b34c 100644 (file)
@@ -5127,7 +5127,7 @@ ex_scriptversion(exarg_T *eap UNUSED)
     nr = getdigits(&eap->arg);
     if (nr == 0 || *eap->arg != NUL)
        emsg(_(e_invarg));
-    else if (nr > 2)
+    else if (nr > 3)
        semsg(_("E999: scriptversion not supported: %d"), nr);
     else
        current_sctx.sc_version = nr;
index d6aeb6f93923f933548d41a607a65e23a4dcac1d..cba66b70f74a452bb818a341e3e39df9dfec7a3d 100644 (file)
@@ -154,6 +154,22 @@ func Test_string_concat_scriptversion1()
   endif
 endfunc
 
+scriptversion 3
+func Test_vvar_scriptversion3()
+  call assert_fails('echo version', 'E121:')
+  call assert_false(exists('version'))
+  let version = 1
+  call assert_equal(1, version)
+endfunc
+
+scriptversion 2
+func Test_vvar_scriptversion2()
+  call assert_true(exists('version'))
+  echo version
+  call assert_fails('let version = 1', 'E46:')
+  call assert_equal(v:version, version)
+endfunc
+
 func Test_scriptversion()
   call writefile(['scriptversion 9'], 'Xversionscript')
   call assert_fails('source Xversionscript', 'E999:')
index f9b53b0c74640c2bcf91a5d021217149d523bf3f..27614587ffca4df61709d51a9f8e317ad64ad7e6 100644 (file)
@@ -771,6 +771,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1188,
 /**/
     1187,
 /**/