Patch 8.2.4249

5 views
Skip to first unread message

Bram Moolenaar

unread,
Jan 29, 2022, 6:22:48 AM1/29/22
to vim...@googlegroups.com

Patch 8.2.4249
Problem: The timeout limit for spell suggestions is always 5000 milli
seconds.
Solution: Add the "timeout" entry to 'spellsuggest'.
Files: runtime/doc/options.txt, src/spellsuggest.c,
src/testdir/test_spell.vim


*** ../vim-8.2.4248/runtime/doc/options.txt 2022-01-15 10:00:59.576603900 +0000
--- runtime/doc/options.txt 2022-01-29 11:15:32.006269608 +0000
***************
*** 7348,7353 ****
--- 7372,7383 ----
suggestions is never more than the value of 'lines'
minus two.

+ timeout:{millisec} Limit the time searching for suggestions to
+ {millisec} milli seconds. Applies to the following
+ methods. When omitted the limit is 5000. When
+ negative there is no limit. {only works when built
+ with the +reltime feature}
+
file:{filename} Read file {filename}, which must have two columns,
separated by a slash. The first column contains the
bad word, the second column the suggested good word.
*** ../vim-8.2.4248/src/spellsuggest.c 2022-01-29 10:51:54.945759266 +0000
--- src/spellsuggest.c 2022-01-29 11:20:21.501470791 +0000
***************
*** 197,202 ****
--- 197,204 ----
#define PFD_PREFIXTREE 0xfe // walking through the prefix tree
#define PFD_NOTSPECIAL 0xfd // highest value that's not special

+ static long spell_suggest_timeout = 5000;
+
static void spell_find_suggest(char_u *badptr, int badlen, suginfo_T *su, int maxcount, int banbadword, int need_cap, int interactive);
#ifdef FEAT_EVAL
static void spell_suggest_expr(suginfo_T *su, char_u *expr);
***************
*** 429,435 ****
else if (STRCMP(buf, "double") == 0)
f = SPS_DOUBLE;
else if (STRNCMP(buf, "expr:", 5) != 0
! && STRNCMP(buf, "file:", 5) != 0)
f = -1;

if (f == -1 || (sps_flags != 0 && f != 0))
--- 431,440 ----
else if (STRCMP(buf, "double") == 0)
f = SPS_DOUBLE;
else if (STRNCMP(buf, "expr:", 5) != 0
! && STRNCMP(buf, "file:", 5) != 0
! && (STRNCMP(buf, "timeout:", 8) != 0
! || (!VIM_ISDIGIT(buf[8])
! && !(buf[8] == '-' && VIM_ISDIGIT(buf[9])))))
f = -1;

if (f == -1 || (sps_flags != 0 && f != 0))
***************
*** 842,847 ****
--- 847,853 ----
sps_copy = vim_strsave(p_sps);
if (sps_copy == NULL)
return;
+ spell_suggest_timeout = 5000;

// Loop over the items in 'spellsuggest'.
for (p = sps_copy; *p != NUL; )
***************
*** 864,869 ****
--- 870,878 ----
else if (STRNCMP(buf, "file:", 5) == 0)
// Use list of suggestions in a file.
spell_suggest_file(su, buf + 5);
+ else if (STRNCMP(buf, "timeout:", 8) == 0)
+ // Limit the time searching for suggestions.
+ spell_suggest_timeout = atol((char *)buf + 8);
else if (!did_intern)
{
// Use internal method once.
***************
*** 1325,1333 ****
}
}
#ifdef FEAT_RELTIME
! // The loop may take an indefinite amount of time. Break out after five
! // sectonds. TODO: add an option for the time limit.
! profile_setlimit(5000, &time_limit);
#endif

// Loop to find all suggestions. At each round we either:
--- 1334,1343 ----
}
}
#ifdef FEAT_RELTIME
! // The loop may take an indefinite amount of time. Break out after some
! // time.
! if (spell_suggest_timeout > 0)
! profile_setlimit(spell_suggest_timeout, &time_limit);
#endif

// Loop to find all suggestions. At each round we either:
***************
*** 2659,2665 ****
ui_breakcheck();
breakcheckcount = 1000;
#ifdef FEAT_RELTIME
! if (profile_passed_limit(&time_limit))
got_int = TRUE;
#endif
}
--- 2669,2676 ----
ui_breakcheck();
breakcheckcount = 1000;
#ifdef FEAT_RELTIME
! if (spell_suggest_timeout > 0
! && profile_passed_limit(&time_limit))
got_int = TRUE;
#endif
}
*** ../vim-8.2.4248/src/testdir/test_spell.vim 2022-01-29 10:51:54.949759202 +0000
--- src/testdir/test_spell.vim 2022-01-29 11:20:58.868851404 +0000
***************
*** 446,451 ****
--- 446,461 ----
delfunc MySuggest3
endfunc

+ func Test_spellsuggest_timeout()
+ set spellsuggest=timeout:30
+ set spellsuggest=timeout:-123
+ set spellsuggest=timeout:999999
+ call assert_fails('set spellsuggest=timeout', 'E474:')
+ call assert_fails('set spellsuggest=timeout:x', 'E474:')
+ call assert_fails('set spellsuggest=timeout:-x', 'E474:')
+ call assert_fails('set spellsuggest=timeout:--9', 'E474:')
+ endfunc
+
func Test_spellinfo()
new
let runtime = substitute($VIMRUNTIME, '\\', '/', 'g')
*** ../vim-8.2.4248/src/version.c 2022-01-29 10:59:48.505909435 +0000
--- src/version.c 2022-01-29 11:21:26.788388588 +0000
***************
*** 752,753 ****
--- 752,755 ----
{ /* Add new patch number below this line */
+ /**/
+ 4249,
/**/

--
Kiss me twice. I'm schizophrenic.

/// Bram Moolenaar -- Br...@Moolenaar.net -- http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
Reply all
Reply to author
Forward
0 new messages