userdiff: add tests for Fortran xfuncname regex

The Fortran userdiff patterns, introduced in 909a5494f8 (userdiff.c: add
builtin fortran regex patterns, 2010-09-10), predate the test
infrastructure for xfuncname patterns, introduced in bfa7d01413 (t4018:
an infrastructure to test hunk headers, 2014-03-21).

Add tests for the Fortran xfuncname patterns. The test
't/t4018/fortran-comment-keyword' documents a shortcoming of the regex
that is fixed in a subsequent commit.

While at it, add descriptive comments for the different parts of the
regex.

Signed-off-by: Philippe Blain <levraiphilippeblain@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Philippe Blain 2020-08-12 22:30:28 +00:00 committed by Junio C Hamano
parent 47ae905ffb
commit b79e6925f0
11 changed files with 100 additions and 0 deletions

View File

@ -0,0 +1,5 @@
BLOCK DATA RIGHT
COMMON /B/ C, ChangeMe
DATA C, ChangeMe / 2.0, 6.0 /
END

13
t/t4018/fortran-comment Normal file
View File

@ -0,0 +1,13 @@
module a
contains
! subroutine wrong
subroutine RIGHT
! subroutine wrong
real ChangeMe
end subroutine RIGHT
end module a

View File

@ -0,0 +1,15 @@
module a
contains
subroutine RIGHT (funcA, funcB)
real funcA ! grid function a
real funcB ! grid function b
real ChangeMe
integer broken
end subroutine RIGHT
end module a

View File

@ -0,0 +1,13 @@
module a
contains
C subroutine wrong
subroutine RIGHT
C subroutine wrong
real ChangeMe
end subroutine RIGHT
end module a

View File

@ -0,0 +1,13 @@
module a
contains
* subroutine wrong
subroutine RIGHT
* subroutine wrong
real ChangeMe
end subroutine RIGHT
end module a

View File

@ -0,0 +1,9 @@
function RIGHT(a, b) result(c)
integer, intent(in) :: ChangeMe
integer, intent(in) :: b
integer, intent(out) :: c
c = a+b
end function RIGHT

View File

@ -0,0 +1,5 @@
subroutine RIGHT
real ChangeMe
end subroutine RIGHT

5
t/t4018/fortran-module Normal file
View File

@ -0,0 +1,5 @@
module RIGHT
use ChangeMe
end module RIGHT

View File

@ -0,0 +1,13 @@
module RIGHT
implicit none
private
interface letters ! generic interface
module procedure aaaa, &
bbbb, &
ChangeMe, &
dddd
end interface
end module RIGHT

5
t/t4018/fortran-program Normal file
View File

@ -0,0 +1,5 @@
program RIGHT
call ChangeMe
end program RIGHT

View File

@ -46,9 +46,13 @@ PATTERNS("elixir",
/* Not real operators, but should be grouped */
"|:?%[A-Za-z0-9_.]\\{\\}?"),
IPATTERN("fortran",
/* Don't match comment lines */
"!^([C*]|[ \t]*!)\n"
/* Don't match 'module procedure' lines */
"!^[ \t]*MODULE[ \t]+PROCEDURE[ \t]\n"
/* Program, module, block data */
"^[ \t]*((END[ \t]+)?(PROGRAM|MODULE|BLOCK[ \t]+DATA"
/* Subroutines and functions */
"|([^'\" \t]+[ \t]+)*(SUBROUTINE|FUNCTION))[ \t]+[A-Z].*)$",
/* -- */
"[a-zA-Z][a-zA-Z0-9_]*"