diff runtime/doc/todo.txt @ 23573:e2e2cc5d0856

Update runtime files. Commit: https://github.com/vim/vim/commit/82be4849eed0b8fbee45bc8da99b685ec89af59a Author: Bram Moolenaar <Bram@vim.org> Date: Mon Jan 11 19:40:15 2021 +0100 Update runtime files.
author Bram Moolenaar <Bram@vim.org>
date Mon, 11 Jan 2021 19:45:05 +0100
parents 15fa3923cc49
children 96206643bd9f
line wrap: on
line diff
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 8.2.  Last change: 2021 Jan 02
+*todo.txt*      For Vim version 8.2.  Last change: 2021 Jan 11
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -38,18 +38,29 @@ browser use: https://github.com/vim/vim/
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
-Reload: How to make sure type of script function hasn't changed?
-
-Valgrind: test_vim9_cmd: uses uninitialized var
+no error for:
+  echo extend([0], ['a', true])
+like it does for:
+  echo extend([0], ['a'])
+At script level this does not give an error:
+  echo map([0], (_, v) => [])
+Or:
+  var l: list<number> = [0]
+  echo map(l, (_, v) => [])
 
 Vim9 - Make everything work:
+- Expand `=expr` in :next, :argedit, :argadd, :argdelete, :drop
+- Expand `=expr` in :vimgrep, :vimgrepadd, :lvimgrep, :lvimgrepadd
+- Expand `=expr` in :mkspell
+- Unlet with range: "unlet list[a : b]"
 - Implement "export {one, two three}".
-- Use "null" for v:null, like true and false?  #7495
 - ISN_CHECKTYPE could use check_argtype()
 - Using a script variable inside a :def function doesn't work if the variable
   is inside a block, see Test_nested_function().  Should it work?
 - give error for variable name:
       let p = function('NoSuchFunc')
+- Make closures work better:
+  - Create closure in a loop.  Need to make a list of them.
 - If a :def function is called with a function reference, compile it to get
   the function type.
 	def Filter(x: string, Cond: func(string): bool)
@@ -63,25 +74,18 @@ Vim9 - Make everything work:
 	    statement
 	    statement
 	}
-- implement { cmd } compiled
-- implement { cmd } at script level
-- Expand `=expr` in :next, :argedit, :argadd, :argdelete, :drop
-- Expand `=expr` in :vimgrep, :vimgrepadd, :lvimgrep, :lvimgrepadd
-- Expand `=expr` in :mkspell
 - Does this work already: can use func as reference:
 	def SomeFunc() ...
 	map(list, SomeFunc)
 - For builtin functions using tv_get_string*() use check_for_string() to be
   more strict about the argument type.
+- Possible memory leaks in test_vim9_func
 - Implement :lockvar and :unlockvar.  How about local variables?  Perhaps only
   allow this for global variables.  Use :final or :const otherwise.
 - Allow function names that will be script-local to start with lower case
   letter?  Or also require names with s: prefix to use upper case?
   Also apply this function references "var ref = SomeFunc"
 - Support passing v:none to use the default argument value. (#6504)
-- Make map() give an error if the resulting type of the first argument is
-  wrong.  Only works if the type is known?  Is this slow (need to go over all
-  items)?
 - Run the same tests in :def and Vim9 script, like in Test_expr7_not()
 - Check many more builtin function arguments at compile time.
 - make 0 == 'string' fail on the script level, like inside :def.
@@ -105,57 +109,59 @@ Vim9 - Make everything work:
 - Implement "as Name" in "import Item as Name from ..."
 - Implement using imported items at script level from "import * as X" in
   eval_variable().  Should pass the ".xxx" that follows and return that.
-- Disallow unlet for local/script/imported vars
 - Make "++nr" work.  "++g:count" doesn't work, thinks it is a range.
-- Make closures work:
-  - Create closure in a loop.  Need to make a list of them.
-  - nested closure only uses one context, not all (#7150)
+- Reload: How to make sure type of script function hasn't changed?
 - expandcmd() with `=expr` in filename uses legacy expression.
 - eval_expr() in ex_cexpr()
 - eval_expr() call in dbg_parsearg() and debuggy_find()
-Improve error checking:
-- "echo Func()" is an error if Func() does not return anything.
-Before launch:
+- compile "skip" argument of searchpair()
+- compile "expr" and "call" expression of a channel in channel_exe_cmd()?
+- give an error for "echo Func()" if Func() does not return anything.
+
+Once Vim9 is stable:
+- Change the help to prefer Vim9 syntax where appropriate
+- Use Vim9 for runtime files.
+    PR #7497 for autoload/ccomplete.vim
 - Add all the error numbers in a good place in documentation.
 - In the generic eval docs, point out the Vim9 syntax where it differs.
-Also:
-- For range: make table of first ASCII character with flag to quickly check if
-  it can be a Vim9 command. E.g. "+" can, but "." can't.
+
+Also for Vim9:
 - better implementation for partial and tests for that.
 - Make "g:imported = Export.exported" work in Vim9 script.
 - Make Foo.Bar() work to call the dict function. (#5676)
 - Error in any command in "vim9script" aborts sourcing.
 - Find a way to test expressions in legacy and Vim9 script without duplication
-- Test each level of expressions properly, with type checking
 - Test try/catch and throw better, also nested.
-  Test return inside try/finally jumps to finally and then returns.
+  Test that return inside try/finally jumps to finally and then returns.
 - Test that a function defined inside a :def function is local to that
   function, g: functions can be defined and script-local functions cannot be
   defined.
-- implement :type
-- import type declaration?
+- compile options that are an expression, e.g. "expr:" in 'spellsuggest',
+  'foldexpr', 'foldtext', 'printexpr', 'diffexpr', 'patchexpr', 'charconvert',
+  'balloonexpr', 'includeexpr', 'indentexpr', 'formatexpr'.
+  Give an error if compilation fails. (#7625)
+  Use the location where the option was set for deciding whether it's to be
+  evaluated in Vim9 script context.
+- implement :type; import type declaration.
+- implement enum;  import enum.
 - Future work: See |vim9-classes|
-- implement enum
-- Make accessing varargs faster: arg[expr]
-	EVAL expr
-	LOADVARARG (varargs idx)
+	Define the keywords and commands to make sure it will be backwards
+	compatible.
 - Make debugging work - at least per function.  Need to recompile a function
   to step through it line-by-line?  Evaluate the stack and variables on the
   stack?
 - Make profiling work - Add ISN_PROFILE instructions after every line?
 - List commands when 'verbose' is set or :verbose is used.
-Once Vim9 is stable:
-- Change the help to prefer Vim9 syntax where appropriate
-- Use Vim9 for runtime files.
-    PR #7497 for autoload/ccomplete.vim
-Further improvements:
-- compile options that are an expression, e.g. "expr:" in 'spellsuggest',
-  'foldexpr', 'foldtext', 'printexpr', 'diffexpr', 'patchexpr', 'charconvert',
-  'balloonexpr', 'includeexpr', 'indentexpr', 'formatexpr'.
+
+Further Vim9 improvements, possibly after launch:
+- For range: make table of first ASCII character with flag to quickly check if
+  it can be a Vim9 command. E.g. "+" can, but "." can't.
 - compile get_lambda_tv() in popup_add_timeout()
 - inline call to map() and filter()
-- compile "skip" argument of searchpair()
-- compile "expr" and "call" expression of a channel in channel_exe_cmd()?
+- Make accessing varargs faster: arg[expr]
+	EVAL expr
+	LOADVARARG (varargs idx)
+
 
 Popup windows:
 - Add a flag to make a popup window focusable?
@@ -308,6 +314,18 @@ Any way to convert "$" back by using a s
 Can we detect true color support?  https://gist.github.com/XVilka/8346728
 Try setting a color then request the current color, like using t_u7.
 
+Regexp to search for duplicate lines does not work correctly:
+/\(^.*\n\)\1  (Chris Morgan, #6239)
+
+Changing a capturing group to non-capturing changes the result: #7607
+    :echo matchstr('aaa bbb', '\(.\{-1,}\>\)\|.*')
+    aaa
+    :echo matchstr('aaa bbb', '\%(.\{-1,}\>\)\|.*')
+    aaa bbb
+Should also work without any group:
+    :echo matchstr('aaa bbb', '.\{-1,}\>\|.*')
+    aaa bbb  (should be aaa)
+
 Check out PR #543 (Roland Puntaier).
 Patch for multibyte characters in langmap and applying a mapping on them.
 (Christian Brabandt, 2015 Jun 12, update July 25)
@@ -393,9 +411,6 @@ corruption.  (#6631)
 When 'lazyredraw' is set sometimes the title is not updated.
 (Jason Franklin, 2020 Feb 3)  Looks like a race condition.
 
-Regexp to search for duplicate lines does not work correctly:
-/\(^.*\n\)\1  (Chris Morgan, #6239)
-
 With bash ":make" does not set v:shell_error.  Possible solution: set
 'shellpipe' to "2>&1| tee %s; exit ${PIPESTATUS[0]}"  #5994
 
@@ -1152,7 +1167,7 @@ Overlong utf-8 sequence is displayed wro
 #2089)  Patch with possible solution by Björn Linse.
 
 The change list index is local to a buffer, but it doesn't make sense using it
-for another buffer.  (lacygolil) Copy w_changelistidx to wininfo_S and back.
+for another buffer.  (lacygoill) Copy w_changelistidx to wininfo_S and back.
 
 X11: Putting more than about 262040 characters of text on the clipboard and
 pasting it in another Vim doesn't work.  (Dominique Pelle, 2008 Aug 21-23)
@@ -5474,7 +5489,7 @@ 8   Add a flag to ":abbrev" to eat the c
     not the <Space>.
 8   Give a warning when using CTRL-C in the lhs of a mapping.  It will never
     (?) work.
-7   Add <0x8f> (hex), <033> (octal) and <123> (decimal) to <> notation?
+7   Add <0x8f> (hex), <0o33> (octal) and <123> (decimal) to <> notation?
 7   When someone tries to unmap with a trailing space, and it fails, try
     unmapping without the trailing space.  Helps for ":unmap xx | unmap yy".
 6   Context-sensitive abbreviations: Specify syntax group(s) in which the