patch 9.1.1607: :apple command detected as :append
Problem: :apple command detected as :append (dai475694450)
Solution: Disallow to define a custom command with lower-case letter,
correctly detect :insert/:change/:append ex commands
(Hirohito Higashi).
fixes: #17893
closes: #17930
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
eb2aebeb79
commit
efd83d441b
@ -6888,6 +6888,52 @@ func Test_script_lines()
|
|||||||
catch
|
catch
|
||||||
call assert_exception('Vim(function):E1145: Missing heredoc end marker: .')
|
call assert_exception('Vim(function):E1145: Missing heredoc end marker: .')
|
||||||
endtry
|
endtry
|
||||||
|
|
||||||
|
" More test for :append, :change, :insert
|
||||||
|
let cmds = ["append", "change", "insert"]
|
||||||
|
let suffixes = ["", "!", "|", "|xyz", " "]
|
||||||
|
|
||||||
|
for c in cmds
|
||||||
|
" Single character (with some accepted trailing characters)
|
||||||
|
for s in suffixes
|
||||||
|
let cmd = c[:0] .. s
|
||||||
|
let line = ["func LinesCheck()", cmd, "", "endfunc", "call LinesCheck()"]
|
||||||
|
call writefile(line, 'Xfunc', 'D')
|
||||||
|
call assert_fails('source Xfunc', 'E1145: Missing heredoc end marker: .', $'"{cmd}"')
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" Unnecessary arguments
|
||||||
|
let cmd = c[:2] .. " end"
|
||||||
|
let line[1] = cmd
|
||||||
|
call writefile(line, 'Xfunc', 'D')
|
||||||
|
call assert_fails('source Xfunc', 'E488: Trailing characters: end:', $'"{cmd}"')
|
||||||
|
|
||||||
|
" Extra characters at the end (i.e., other commands)
|
||||||
|
let cmd = c .. "x"
|
||||||
|
let line[1] = cmd
|
||||||
|
call writefile(line, 'Xfunc', 'D')
|
||||||
|
call assert_fails('source Xfunc', 'E492: Not an editor command:', $'"{cmd}"')
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let line =<< trim END
|
||||||
|
func AppendCheck()
|
||||||
|
apple
|
||||||
|
endfunc
|
||||||
|
call AppendCheck()
|
||||||
|
END
|
||||||
|
call writefile(line, 'Xfunc', 'D')
|
||||||
|
call assert_fails('source Xfunc', 'E492: Not an editor command: apple')
|
||||||
|
|
||||||
|
let line =<< trim END
|
||||||
|
func AppendCheck()
|
||||||
|
command! apple :echo "hello apple"
|
||||||
|
apple
|
||||||
|
endfunc
|
||||||
|
call AppendCheck()
|
||||||
|
END
|
||||||
|
call writefile(line, 'Xfunc', 'D')
|
||||||
|
call assert_fails('source Xfunc', 'E183: User defined commands must start with an uppercase letter')
|
||||||
|
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
"-------------------------------------------------------------------------------
|
"-------------------------------------------------------------------------------
|
||||||
|
|||||||
@ -1282,21 +1282,15 @@ get_function_body(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check for ":append", ":change", ":insert". Not for :def.
|
// Check for ":append", ":change", ":insert". Not for :def.
|
||||||
p = skip_range(p, FALSE, NULL);
|
char_u *tp = p = skip_range(p, FALSE, NULL);
|
||||||
if (!vim9_function
|
if (!vim9_function
|
||||||
&& ((p[0] == 'a' && (!ASCII_ISALPHA(p[1]) || p[1] == 'p'))
|
&& (checkforcmd(&p, "append", 1)
|
||||||
|| (p[0] == 'c'
|
|| checkforcmd(&p, "change", 1)
|
||||||
&& (!ASCII_ISALPHA(p[1]) || (p[1] == 'h'
|
|| checkforcmd(&p, "insert", 1))
|
||||||
&& (!ASCII_ISALPHA(p[2]) || (p[2] == 'a'
|
&& (*p == '!' || *p == '|' || IS_WHITE_NL_OR_NUL(*p)))
|
||||||
&& (STRNCMP(&p[3], "nge", 3) != 0
|
|
||||||
|| !ASCII_ISALPHA(p[6])))))))
|
|
||||||
|| (p[0] == 'i'
|
|
||||||
&& (!ASCII_ISALPHA(p[1]) || (p[1] == 'n'
|
|
||||||
&& (!ASCII_ISALPHA(p[2])
|
|
||||||
|| (p[2] == 's'
|
|
||||||
&& (!ASCII_ISALPHA(p[3])
|
|
||||||
|| p[3] == 'e'))))))))
|
|
||||||
skip_until = vim_strnsave((char_u *)".", 1);
|
skip_until = vim_strnsave((char_u *)".", 1);
|
||||||
|
else
|
||||||
|
p = tp;
|
||||||
|
|
||||||
// Check for ":python <<EOF", ":tcl <<EOF", etc.
|
// Check for ":python <<EOF", ":tcl <<EOF", etc.
|
||||||
arg = skipwhite(skiptowhite(p));
|
arg = skipwhite(skiptowhite(p));
|
||||||
|
|||||||
@ -719,6 +719,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1607,
|
||||||
/**/
|
/**/
|
||||||
1606,
|
1606,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
Reference in New Issue
Block a user