From dbe39edb29cf5f899d475ee783a059cb6f678286 Mon Sep 17 00:00:00 2001 From: Doug Kearns Date: Sat, 4 Jan 2025 17:12:24 +0100 Subject: [PATCH] patch 9.1.0989: Vim9: Whitespace after the final enum value causes a syntax error Problem: Vim9: Whitespace after the final enum value causes a syntax error Solution: Fix parsing to allow whitespace after the final enum value. (Doug Kearns) closes: #16383 Signed-off-by: Doug Kearns Signed-off-by: Yegappan Lakshmanan Signed-off-by: Christian Brabandt --- src/testdir/test_codestyle.vim | 1 + src/testdir/test_vim9_enum.vim | 35 ++++++++++++++++++++++++++++++++++ src/version.c | 2 ++ src/vim9class.c | 2 ++ 4 files changed, 40 insertions(+) diff --git a/src/testdir/test_codestyle.vim b/src/testdir/test_codestyle.vim index 83f52ef34c..51c1209d4f 100644 --- a/src/testdir/test_codestyle.vim +++ b/src/testdir/test_codestyle.vim @@ -85,6 +85,7 @@ def Test_test_files() && fname !~ 'test_let.vim' && fname !~ 'test_tagjump.vim' && fname !~ 'test_vim9_cmd.vim' + && fname !~ 'test_vim9_enum.vim' cursor(1, 1) var lnum = search( fname =~ 'test_vim9_assign.vim' ? '[^=]\s$' diff --git a/src/testdir/test_vim9_enum.vim b/src/testdir/test_vim9_enum.vim index a5fb26fcf3..74eb468805 100644 --- a/src/testdir/test_vim9_enum.vim +++ b/src/testdir/test_vim9_enum.vim @@ -908,6 +908,18 @@ def Test_enum_comments() END v9.CheckSourceSuccess(lines) + lines =<< trim END + vim9script + enum Car # cars + # before enum + Honda(), # honda + # before enum + Ford() # ford + endenum + assert_equal(1, Car.Ford.ordinal) + END + v9.CheckSourceSuccess(lines) + # Test for using an unsupported comment lines =<< trim END vim9script @@ -921,6 +933,29 @@ def Test_enum_comments() v9.CheckSourceFailure(lines, 'E1170: Cannot use #{ to start a comment', 4) enddef +" Test trailing whitespace after enum values +def Test_enum_whitespace() + var lines =<< trim END + vim9script + enum Car + Honda, + Ford + endenum + defcompile + END + v9.CheckSourceSuccess(lines) + + lines =<< trim END + vim9script + enum Car + Honda(), + Ford() + endenum + defcompile + END + v9.CheckSourceSuccess(lines) +enddef + " Test string() with enums def Test_enum_string() var lines =<< trim END diff --git a/src/version.c b/src/version.c index 987aa9b3f2..99f41030ff 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 989, /**/ 988, /**/ diff --git a/src/vim9class.c b/src/vim9class.c index 22db751e5a..7c7700ba19 100644 --- a/src/vim9class.c +++ b/src/vim9class.c @@ -1623,6 +1623,8 @@ enum_parse_values( } } + p = skipwhite(p); + if (*p != NUL && *p != '#') { if (did_emsg == did_emsg_before)