From a82e0c770fb9543b0d9eb0ce36d9e4d0feb59356 Mon Sep 17 00:00:00 2001 From: Paul Ackersviller Date: Sat, 24 Nov 2007 22:55:12 +0000 Subject: Merge of 23757: suppress correction of command words followed by (). --- Src/lex.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'Src') diff --git a/Src/lex.c b/Src/lex.c index e91cecfbc..2bd21d7bf 100644 --- a/Src/lex.c +++ b/Src/lex.c @@ -66,7 +66,12 @@ int isfirstch; /**/ int inalmore; -/* don't do spelling correction */ +/* + * Don't do spelling correction. + * Bit 1 is only valid for the current word. It's + * set when we detect a lookahead that stops the word from + * needing correction. + */ /**/ int nocorrect; @@ -347,6 +352,7 @@ yylex(void) do tok = gettok(); while (tok != ENDINPUT && exalias()); + nocorrect &= 1; if (tok == NEWLIN || tok == ENDINPUT) { while (hdocs) { struct heredocs *next = hdocs->next; @@ -622,7 +628,7 @@ isnumglob(void) } /**/ -int +static int gettok(void) { int c, d; @@ -1029,8 +1035,16 @@ gettokstr(int c, int sub) * pws 1999/6/14 */ if (e == ')' || (isset(SHGLOB) && inblank(e) && !bct && - !brct && !intpos && incmdpos)) + !brct && !intpos && incmdpos)) { + /* + * Either a () token, or a command word with + * something suspiciously like a ksh function + * definition. + * The current word isn't spellcheckable. + */ + nocorrect |= 2; goto brk; + } } /* * This also handles the [k]sh `foo( )' function definition. -- cgit 1.4.1