userdiff/perl: tighten BEGIN/END block pattern to reject here-doc delimiters
authorJonathan Nieder <jrnieder@gmail.com>
Sun, 22 May 2011 17:29:32 +0000 (12:29 -0500)
committerJunio C Hamano <gitster@pobox.com>
Mon, 23 May 2011 18:39:13 +0000 (11:39 -0700)
commitf143d9c695cd4c3e86069c536fa0dff04fc93e93
treeec5c49d1151fd23fb3e985d9cd7925fca3c49089
parentf5b7ce1b9041d19658b79d8b956d7e79ec6006bd
userdiff/perl: tighten BEGIN/END block pattern to reject here-doc delimiters

A naive method of treating BEGIN/END blocks with a brace on the second
line as diff/grep funcname context involves also matching unrelated
lines that consist of all-caps letters:

sub foo {
print <<'EOF'
text goes here
...
EOF
... rest of foo ...
}

That's not so great, because it means that "git diff" and "git grep
--show-function" would write "=EOF" or "@@ EOF" as context instead of
a more useful reminder like "@@ sub foo {".

To avoid this, tighten the pattern to only match the special block
names that perl accepts (namely BEGIN, END, INIT, CHECK, UNITCHECK,
AUTOLOAD, and DESTROY).  The list is taken from perl's toke.c.

Suggested-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t4018-diff-funcname.sh
userdiff.c