Subject: Re: [PATCH] userdiff: Add diff driver for Kotlin lang and tests

From: Junio C Hamano <[email-masked]>
Date: Tue, 01 Mar 2022 01:32:30 -0800

Jaydeep P Das <[email-masked]> writes:

> Subject: Re: [PATCH] userdiff: Add diff driver for Kotlin lang and tests

"Add" -> "add".  "lang and tests" -> "language".

> The xfuncname pattern finds func/class declarations in diffs to
> display as a hunk header.

Yes, but an entry for a language in userdiff.c consists of the
funcname pattern AND the word_regex.  And I think the patch is
adding both, not just funcname pattern.

> This patch adds xfuncname regex and some respective
> tests for Kotlin language.
>
> Also modifies `Documentation./gitattributes.txt` to state
> the same.

See Documenation/SubmittingPatches::[[imperative-mood]].

But it probably is better to leave these unsaid.  The patterns,
tests and documentation updates go hand in hand.

>  11 files changed, 59 insertions(+)
>  create mode 100644 t/t4018/kotlin-class
>  create mode 100644 t/t4018/kotlin-enum-class
>  create mode 100644 t/t4018/kotlin-fun
>  create mode 100644 t/t4018/kotlin-inheritace-class
>  create mode 100644 t/t4018/kotlin-inline-class
>  create mode 100644 t/t4018/kotlin-interface
>  create mode 100644 t/t4018/kotlin-nested-fun
>  create mode 100644 t/t4018/kotlin-public-class
>  create mode 100644 t/t4018/kotlin-sealed-class
>
> diff --git a/Documentation/gitattributes.txt b/Documentation/gitattributes.txt
> index a71dad2674..94d06dc337 100644
> --- a/Documentation/gitattributes.txt
> +++ b/Documentation/gitattributes.txt
> @@ -829,6 +829,8 @@ patterns are available:
>  
>  - `java` suitable for source code in the Java language.
>  
> +- `kotlin` suitable for source code in the Kotlin language
> +
>  - `markdown` suitable for Markdown documents.

The entries before and after this new one both end with a full stop,
and this new entry should do the same.

> diff --git a/userdiff.c b/userdiff.c
> index 8578cb0d12..a6cc6dc3b7 100644
> --- a/userdiff.c
> +++ b/userdiff.c
> @@ -168,6 +168,14 @@ PATTERNS("java",
>  	 "|[-+0-9.e]+[fFlL]?|0[xXbB]?[0-9a-fA-F]+[lL]?"
>  	 "|[-+*/<>%&^|=!]="
>  	 "|--|\\+\\+|<<=?|>>>?=?|&&|\\|\\|"),
> +PATTERNS("kotlin",
> +	 /* fun, class, interface, declarations */
> +  	 "^[ \t]*(([a-z]+[ \t]+)*(fun|class|interface)[ \t]+.*[ \t]*)$",

With the three keywords clearly visible in the pattern, the comment
looks somewhat redundant.  I dunno.

> +	 /* -- */
> +	 "[a-zA-Z_][a-zA-Z0-9_]*"
> +	 "|[-+0-9.e]+[fFlL]?|0[xXbB]?[0-9a-fA-F]+[lL]?"
> +	 "|[-+*/<>%&^|=!]="
> +	 "|--|\\+\\+|<<=?|>>>?=?|&&|\\|\\|"),

The latter half is word regex, which is tested in t4034 to at least
ensure that it is well formed.  We can also add t/t4034/$language/
to see the patterns hit the word boundary as expected.

>  PATTERNS("markdown",
>  	 "^ {0,3}#{1,6}[ \t].*",
>  	 /* -- */