# [PATCH 0/2] userdiff: support new keywords in PHP hunk header

4 messages from 2018-07-03 to 2018-07-06. Participants: Kana Natsuno, Junio C Hamano.
Thread: https://gitlist.dev/t/48823

## Kana Natsuno, 2018-07-03 13:15

Subject: [PATCH 0/2] userdiff: support new keywords in PHP hunk header
Message-ID: <20180703131540.60789-1-dev@whileimautomaton.net>
URL: https://gitlist.dev/e/20180703131540.60789-1-dev%40whileimautomaton.net

```
Recent version of PHP supports interface, trait, abstract class and
final class.  This patch fixes the PHP hunk header regexp to support
all of these keywords.

Kana Natsuno (2):
  t4018: add missing test cases for PHP
  userdiff: support new keywords in PHP hunk header

 t/t4018/php-abstract-class | 4 ++++
 t/t4018/php-class          | 4 ++++
 t/t4018/php-final-class    | 4 ++++
 t/t4018/php-function       | 4 ++++
 t/t4018/php-interface      | 4 ++++
 t/t4018/php-method         | 7 +++++++
 t/t4018/php-trait          | 7 +++++++
 userdiff.c                 | 2 +-
 8 files changed, 35 insertions(+), 1 deletion(-)
 create mode 100644 t/t4018/php-abstract-class
 create mode 100644 t/t4018/php-class
 create mode 100644 t/t4018/php-final-class
 create mode 100644 t/t4018/php-function
 create mode 100644 t/t4018/php-interface
 create mode 100644 t/t4018/php-method
 create mode 100644 t/t4018/php-trait

-- 
2.10.1 (Apple Git-78)


```

## Kana Natsuno, 2018-07-03 13:15

Subject: [PATCH 1/2] t4018: add missing test cases for PHP
Message-ID: <20180703131540.60789-2-dev@whileimautomaton.net>
URL: https://gitlist.dev/e/20180703131540.60789-2-dev%40whileimautomaton.net
In-Reply-To: <20180703131540.60789-1-dev@whileimautomaton.net>

```
A later patch changes the built-in PHP pattern. These test cases
demonstrate aspects of the pattern that we do not want to change.

Signed-off-by: Kana Natsuno <dev@whileimautomaton.net>
---
 t/t4018/php-class    | 4 ++++
 t/t4018/php-function | 4 ++++
 t/t4018/php-method   | 7 +++++++
 3 files changed, 15 insertions(+)
 create mode 100644 t/t4018/php-class
 create mode 100644 t/t4018/php-function
 create mode 100644 t/t4018/php-method

diff --git a/t/t4018/php-class b/t/t4018/php-class
new file mode 100644
index 0000000..7785b63
--- /dev/null
+++ b/t/t4018/php-class
@@ -0,0 +1,4 @@
+class RIGHT
+{
+    const FOO = 'ChangeMe';
+}
diff --git a/t/t4018/php-function b/t/t4018/php-function
new file mode 100644
index 0000000..35717c5
--- /dev/null
+++ b/t/t4018/php-function
@@ -0,0 +1,4 @@
+function RIGHT()
+{
+    return 'ChangeMe';
+}
diff --git a/t/t4018/php-method b/t/t4018/php-method
new file mode 100644
index 0000000..03af1a6
--- /dev/null
+++ b/t/t4018/php-method
@@ -0,0 +1,7 @@
+class Klass
+{
+    public static function RIGHT()
+    {
+        return 'ChangeMe';
+    }
+}
-- 
2.10.1 (Apple Git-78)


```

## Kana Natsuno, 2018-07-03 13:15

Subject: [PATCH 2/2] userdiff: support new keywords in PHP hunk header
Message-ID: <20180703131540.60789-3-dev@whileimautomaton.net>
URL: https://gitlist.dev/e/20180703131540.60789-3-dev%40whileimautomaton.net
In-Reply-To: <20180703131540.60789-1-dev@whileimautomaton.net>

```
Recent version of PHP supports interface, trait, abstract class and
final class.  This patch fixes the PHP hunk header regexp to support
all of these keywords.

Signed-off-by: Kana Natsuno <dev@whileimautomaton.net>
---
 t/t4018/php-abstract-class | 4 ++++
 t/t4018/php-final-class    | 4 ++++
 t/t4018/php-interface      | 4 ++++
 t/t4018/php-trait          | 7 +++++++
 userdiff.c                 | 2 +-
 5 files changed, 20 insertions(+), 1 deletion(-)
 create mode 100644 t/t4018/php-abstract-class
 create mode 100644 t/t4018/php-final-class
 create mode 100644 t/t4018/php-interface
 create mode 100644 t/t4018/php-trait

diff --git a/t/t4018/php-abstract-class b/t/t4018/php-abstract-class
new file mode 100644
index 0000000..5213e12
--- /dev/null
+++ b/t/t4018/php-abstract-class
@@ -0,0 +1,4 @@
+abstract class RIGHT
+{
+    const FOO = 'ChangeMe';
+}
diff --git a/t/t4018/php-final-class b/t/t4018/php-final-class
new file mode 100644
index 0000000..69f5710
--- /dev/null
+++ b/t/t4018/php-final-class
@@ -0,0 +1,4 @@
+final class RIGHT
+{
+    const FOO = 'ChangeMe';
+}
diff --git a/t/t4018/php-interface b/t/t4018/php-interface
new file mode 100644
index 0000000..86b49ad
--- /dev/null
+++ b/t/t4018/php-interface
@@ -0,0 +1,4 @@
+interface RIGHT
+{
+    public function foo($ChangeMe);
+}
diff --git a/t/t4018/php-trait b/t/t4018/php-trait
new file mode 100644
index 0000000..65b8c82
--- /dev/null
+++ b/t/t4018/php-trait
@@ -0,0 +1,7 @@
+trait RIGHT
+{
+    public function foo($ChangeMe)
+    {
+        return 'foo';
+    }
+}
diff --git a/userdiff.c b/userdiff.c
index a69241b..36af25e 100644
--- a/userdiff.c
+++ b/userdiff.c
@@ -114,7 +114,7 @@ PATTERNS("perl",
 	 "|<<|<>|<=>|>>"),
 PATTERNS("php",
 	 "^[\t ]*(((public|protected|private|static)[\t ]+)*function.*)$\n"
-	 "^[\t ]*(class.*)$",
+	 "^[\t ]*((((final|abstract)[\t ]+)?class|interface|trait).*)$",
 	 /* -- */
 	 "[a-zA-Z_][a-zA-Z0-9_]*"
 	 "|[-+0-9.e]+|0[xXbB]?[0-9a-fA-F]+"
-- 
2.10.1 (Apple Git-78)


```

## Junio C Hamano, 2018-07-06 21:59

Subject: Re: [PATCH 1/2] t4018: add missing test cases for PHP
Message-ID: <xmqq36wwhvpg.fsf@gitster-ct.c.googlers.com>
URL: https://gitlist.dev/e/xmqq36wwhvpg.fsf%40gitster-ct.c.googlers.com
In-Reply-To: <20180703131540.60789-2-dev@whileimautomaton.net>

```
Kana Natsuno <dev@whileimautomaton.net> writes:

> A later patch changes the built-in PHP pattern. These test cases
> demonstrate aspects of the pattern that we do not want to change.
>
> Signed-off-by: Kana Natsuno <dev@whileimautomaton.net>
> ---
>  t/t4018/php-class    | 4 ++++
>  t/t4018/php-function | 4 ++++
>  t/t4018/php-method   | 7 +++++++
>  3 files changed, 15 insertions(+)
>  create mode 100644 t/t4018/php-class
>  create mode 100644 t/t4018/php-function
>  create mode 100644 t/t4018/php-method
>
> diff --git a/t/t4018/php-class b/t/t4018/php-class
> new file mode 100644
> index 0000000..7785b63
> --- /dev/null
> +++ b/t/t4018/php-class
> @@ -0,0 +1,4 @@
> +class RIGHT
> +{
> +    const FOO = 'ChangeMe';
> +}
> diff --git a/t/t4018/php-function b/t/t4018/php-function
> new file mode 100644
> index 0000000..35717c5
> --- /dev/null
> +++ b/t/t4018/php-function
> @@ -0,0 +1,4 @@
> +function RIGHT()
> +{
> +    return 'ChangeMe';
> +}
> diff --git a/t/t4018/php-method b/t/t4018/php-method
> new file mode 100644
> index 0000000..03af1a6
> --- /dev/null
> +++ b/t/t4018/php-method
> @@ -0,0 +1,7 @@
> +class Klass
> +{
> +    public static function RIGHT()
> +    {
> +        return 'ChangeMe';
> +    }
> +}

I no longer speak PHP, and certainly not the modern variant, but
these examples all look good to me.  

Whoever invented the convetion to use RIGHT/ChangeMe in t4018 should
get praised---its brilliance shines in new tests like these ;-)



```
