git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/2] userdiff: add tests for Fortran xfuncname regex

From
Philippe Blain via GitGitGadget <gitgitgadget@gmail.com>
Date
Aug 12, 2020, 22:30 UTC
Message-ID
<30cb5c5cd57162837efe1153bf88cb8863206323.1597271429.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.700.git.1597271429.gitgitgadget@gmail.com>
From: Philippe Blain <levraiphilippeblain@gmail.com>

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>
---
 t/t4018/fortran-block-data          |  5 +++++
 t/t4018/fortran-comment             | 13 +++++++++++++
 t/t4018/fortran-comment-keyword     | 15 +++++++++++++++
 t/t4018/fortran-comment-legacy      | 13 +++++++++++++
 t/t4018/fortran-comment-legacy-star | 13 +++++++++++++
 t/t4018/fortran-external-function   |  9 +++++++++
 t/t4018/fortran-external-subroutine |  5 +++++
 t/t4018/fortran-module              |  5 +++++
 t/t4018/fortran-module-procedure    | 13 +++++++++++++
 t/t4018/fortran-program             |  5 +++++
 userdiff.c                          |  4 ++++
 11 files changed, 100 insertions(+)
 create mode 100644 t/t4018/fortran-block-data
 create mode 100644 t/t4018/fortran-comment
 create mode 100644 t/t4018/fortran-comment-keyword
 create mode 100644 t/t4018/fortran-comment-legacy
 create mode 100644 t/t4018/fortran-comment-legacy-star
 create mode 100644 t/t4018/fortran-external-function
 create mode 100644 t/t4018/fortran-external-subroutine
 create mode 100644 t/t4018/fortran-module
 create mode 100644 t/t4018/fortran-module-procedure
 create mode 100644 t/t4018/fortran-program
diff --git a/t/t4018/fortran-block-data b/t/t4018/fortran-block-data
new file mode 100644
index 0000000000..63d4e21d0a
--- /dev/null
+++ b/t/t4018/fortran-block-data
@@ -0,0 +1,5 @@
+       BLOCK DATA RIGHT
+       
+       COMMON /B/ C, ChangeMe
+       DATA C, ChangeMe  / 2.0, 6.0 / 
+       END 
diff --git a/t/t4018/fortran-comment b/t/t4018/fortran-comment
new file mode 100644
index 0000000000..7b10d17658
--- /dev/null
+++ b/t/t4018/fortran-comment
@@ -0,0 +1,13 @@
+      module a
+
+      contains
+
+      ! subroutine wrong
+      subroutine RIGHT
+      ! subroutine wrong
+
+      real ChangeMe
+
+      end subroutine RIGHT
+
+      end module a
diff --git a/t/t4018/fortran-comment-keyword b/t/t4018/fortran-comment-keyword
new file mode 100644
index 0000000000..c5dbdb4c61
--- /dev/null
+++ b/t/t4018/fortran-comment-keyword
@@ -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
diff --git a/t/t4018/fortran-comment-legacy b/t/t4018/fortran-comment-legacy
new file mode 100644
index 0000000000..53cd062c1e
--- /dev/null
+++ b/t/t4018/fortran-comment-legacy
@@ -0,0 +1,13 @@
+      module a
+
+      contains
+
+C subroutine wrong
+      subroutine RIGHT
+C subroutine wrong
+
+      real ChangeMe
+
+      end subroutine RIGHT
+
+      end module a
diff --git a/t/t4018/fortran-comment-legacy-star b/t/t4018/fortran-comment-legacy-star
new file mode 100644
index 0000000000..2cbcdc3d8a
--- /dev/null
+++ b/t/t4018/fortran-comment-legacy-star
@@ -0,0 +1,13 @@
+      module a
+
+      contains
+
+* subroutine wrong
+      subroutine RIGHT
+* subroutine wrong
+
+      real ChangeMe
+
+      end subroutine RIGHT
+
+      end module a
diff --git a/t/t4018/fortran-external-function b/t/t4018/fortran-external-function
new file mode 100644
index 0000000000..5a2d85d3aa
--- /dev/null
+++ b/t/t4018/fortran-external-function
@@ -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
diff --git a/t/t4018/fortran-external-subroutine b/t/t4018/fortran-external-subroutine
new file mode 100644
index 0000000000..4ce85fea13
--- /dev/null
+++ b/t/t4018/fortran-external-subroutine
@@ -0,0 +1,5 @@
+subroutine RIGHT
+
+real ChangeMe
+
+end subroutine RIGHT
diff --git a/t/t4018/fortran-module b/t/t4018/fortran-module
new file mode 100644
index 0000000000..c4b737dac3
--- /dev/null
+++ b/t/t4018/fortran-module
@@ -0,0 +1,5 @@
+module RIGHT
+
+use ChangeMe
+
+end module RIGHT
diff --git a/t/t4018/fortran-module-procedure b/t/t4018/fortran-module-procedure
new file mode 100644
index 0000000000..1ce6d854c2
--- /dev/null
+++ b/t/t4018/fortran-module-procedure
@@ -0,0 +1,13 @@
+ module RIGHT
+
+   implicit none
+   private
+
+   interface letters  ! generic interface
+      module procedure aaaa, &
+                       bbbb, &
+                       ChangeMe, &
+                       dddd
+   end interface
+   
+end module RIGHT
diff --git a/t/t4018/fortran-program b/t/t4018/fortran-program
new file mode 100644
index 0000000000..4616895e4b
--- /dev/null
+++ b/t/t4018/fortran-program
@@ -0,0 +1,5 @@
+program RIGHT
+
+call ChangeMe
+
+end program RIGHT
diff --git a/userdiff.c b/userdiff.c
index 1df884ef0b..707d82435a 100644
--- a/userdiff.c
+++ b/userdiff.c
@@ -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_]*"
-- 
gitgitgadget
Previous: Philippe Blain via GitGitGadgetNext: Philippe Blain via GitGitGadget
Message 2 of 7 in “Improve and test Fortran xfuncname regex”
  1. 0/2 Improve and test Fortran xfuncname regexPhilippe Blain via GitGitGadget, Aug 12, 2020
  2. 1/2 userdiff: add tests for Fortran xfuncname regexPhilippe Blain via GitGitGadget, Aug 12, 2020
  3. 2/2 userdiff: improve Fortran xfuncname regexPhilippe Blain via GitGitGadget, Aug 12, 2020
  4. Elijah NewrenAug 13, 2020
  5. Philippe BlainAug 13, 2020
  6. Elijah NewrenAug 13, 2020
  7. Junio C HamanoAug 13, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.