From 75c3b6b2e8a72239fa23e039c46f9a5cf8c24142 Mon Sep 17 00:00:00 2001 From: Philippe Blain Date: Wed, 12 Aug 2020 22:30:29 +0000 Subject: [PATCH] userdiff: improve Fortran xfuncname regex The third part of the Fortran xfuncname regex wants to match the beginning of a subroutine or function, so it allows for all characters except `'`, `"` or whitespace before the keyword 'function' or 'subroutine'. This is meant to match the 'recursive', 'elemental' or 'pure' keywords, as well as function return types, and to prevent matches inside strings. However, the negated set does not contain the `!` comment character, so a line with an end-of-line comment containing the keyword 'function' or 'subroutine' followed by another word is mistakenly chosen as a hunk header. Improve the regex by adding `!` to the negated set. Signed-off-by: Philippe Blain Signed-off-by: Junio C Hamano --- t/t4018/fortran-comment-keyword | 1 - userdiff.c | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/t/t4018/fortran-comment-keyword b/t/t4018/fortran-comment-keyword index c5dbdb4c61..e9206a5379 100644 --- a/t/t4018/fortran-comment-keyword +++ b/t/t4018/fortran-comment-keyword @@ -8,7 +8,6 @@ real funcB ! grid function b real ChangeMe - integer broken end subroutine RIGHT diff --git a/userdiff.c b/userdiff.c index 707d82435a..fde02f225b 100644 --- a/userdiff.c +++ b/userdiff.c @@ -53,7 +53,7 @@ IPATTERN("fortran", /* Program, module, block data */ "^[ \t]*((END[ \t]+)?(PROGRAM|MODULE|BLOCK[ \t]+DATA" /* Subroutines and functions */ - "|([^'\" \t]+[ \t]+)*(SUBROUTINE|FUNCTION))[ \t]+[A-Z].*)$", + "|([^!'\" \t]+[ \t]+)*(SUBROUTINE|FUNCTION))[ \t]+[A-Z].*)$", /* -- */ "[a-zA-Z][a-zA-Z0-9_]*" "|\\.([Ee][Qq]|[Nn][Ee]|[Gg][TtEe]|[Ll][TtEe]|[Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee]|[Aa][Nn][Dd]|[Oo][Rr]|[Nn]?[Ee][Qq][Vv]|[Nn][Oo][Tt])\\."