userdiff/perl: catch sub with brace on second line
Accept
sub foo
{
}
as an alternative to a more common style that introduces perl
functions with a brace on the first line (and likewise for BEGIN/END
blocks). The new regex is a little hairy to avoid matching
# forward declaration
sub foo;
while continuing to match "sub foo($;@) {" and
sub foo { # This routine is interesting;
# in fact, the lines below explain how...
While at it, pay attention to Perl 5.14's "package foo {" syntax as an
alternative to the traditional "package foo;".
Requested-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
12f0967a8a
commit
ea2ca4497b
20
userdiff.c
20
userdiff.c
@ -60,9 +60,23 @@ PATTERNS("pascal",
|
||||
"|[-+0-9.e]+|0[xXbB]?[0-9a-fA-F]+"
|
||||
"|<>|<=|>=|:=|\\.\\."),
|
||||
PATTERNS("perl",
|
||||
"^package .*;\n"
|
||||
"^sub .* \\{\n"
|
||||
"^[A-Z]+ \\{\n" /* BEGIN, END, ... */
|
||||
"^package .*\n"
|
||||
"^sub [[:alnum:]_':]+[ \t]*"
|
||||
"(\\([^)]*\\)[ \t]*)?" /* prototype */
|
||||
/*
|
||||
* Attributes. A regex can't count nested parentheses,
|
||||
* so just slurp up whatever we see, taking care not
|
||||
* to accept lines like "sub foo; # defined elsewhere".
|
||||
*
|
||||
* An attribute could contain a semicolon, but at that
|
||||
* point it seems reasonable enough to give up.
|
||||
*/
|
||||
"(:[^;#]*)?"
|
||||
"(\\{[ \t]*)?" /* brace can come here or on the next line */
|
||||
"(#.*)?$\n" /* comment */
|
||||
"^[A-Z]+[ \t]*" /* BEGIN, END, ... */
|
||||
"(\\{[ \t]*)?" /* brace can come here or on the next line */
|
||||
"(#.*)?$\n"
|
||||
"^=head[0-9] .*", /* POD */
|
||||
/* -- */
|
||||
"[[:alpha:]_'][[:alnum:]_']*"
|
||||
|
||||
Reference in New Issue
Block a user