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

Re: [PATCH] userdiff: add builtin driver for kotlin language

From
Johannes Sixt <j6t@kdbg.org>
Date
Mar 2, 2022, 08:00 UTC
Message-ID
<34a2ad39-604c-4edd-ea1c-de1212fc506b@kdbg.org>
In-Reply-To
<20220302064504.2651079-2-jaydeepjd.8914@gmail.com>
Added jc to Cc:.
Am 02.03.22 um 07:45 schrieb Jaydeep P Das:
Show 14 quoted lines
> diff --git a/t/t4034/kotlin/expect b/t/t4034/kotlin/expect
> new file mode 100644
> index 0000000000..8acdc83bcc
> --- /dev/null
> +++ b/t/t4034/kotlin/expect
> @@ -0,0 +1,35 @@
> +<BOLD>diff --git a/pre b/post<RESET>
> +<BOLD>index 884560d..7e136e2 100644<RESET>
> +<BOLD>--- a/pre<RESET>
> +<BOLD>+++ b/post<RESET>
> +<CYAN>@@ -1,19 +1,19 @@<RESET>
> +println("Hello World<RED>!\n<RESET><GREEN>?<RESET>")
> +<GREEN>(<RESET>1<GREEN>) (<RESET>-1e10<GREEN>) (<RESET>0xabcdef<GREEN>)<RESET> '<RED>x<RESET><GREEN>y<RESET>'
> +<RED>100000<RESET><GREEN>100_000<RESET>

This test does not demonstrates that numbers do not end at an '_', because if it did end there, the change would be from the single token 100000 to two tokens 100 and _000, and the mark-up would look exactly the same as we see here, and would remain undiagnosed.

Instead, write the pre-image as 100_000 and the post image as 200_000. Then the correct mark-up would be

<RED>100_000<RESET><GREEN>200_000<RESET>
and a bogus markup (that the test wants to diagnose) would look like
<RED>100<RESET><GREEN>200<RESET>_000
> +[<RED>a<RESET><GREEN>x<RESET>] <RED>a<RESET><GREEN>x<RESET>-><RED>b a<RESET><GREEN>y x<RESET>.<RED>b<RESET><GREEN>y<RESET>
> +!<RED>a a<RESET><GREEN>x x<RESET>.inv() <RED>a<RESET><GREEN>x<RESET>*<RED>b a<RESET><GREEN>y x<RESET>&<RED>b<RESET><GREEN>y<RESET>
> +a<RED>+=<RESET><GREEN>-=<RESET>b

OK, so you decided to check operator += and -=. But what about all the other multi-character operators?

Show 21 quoted lines
> +<RED>a<RESET><GREEN>x<RESET>*<RED>b a<RESET><GREEN>y x<RESET>/<RED>b a<RESET><GREEN>y x<RESET>%<RED>b<RESET>
> +<RED>a<RESET><GREEN>y<RESET>
> +<GREEN>x<RESET>+<RED>b a<RESET><GREEN>y x<RESET>-<RED>b<RESET>
> +<RED>a<RESET><GREEN>y<RESET>
> +<GREEN>x<RESET> shl <RED>b a<RESET><GREEN>y x<RESET> shr <RED>b<RESET>
> +<RED>a<RESET><GREEN>y<RESET>
> +<GREEN>x<RESET><<RED>b a<RESET><GREEN>y x<RESET><=<RED>b a<RESET><GREEN>y x<RESET>><RED>b a<RESET><GREEN>y x<RESET>>=<RED>b<RESET>
> +<RED>a<RESET><GREEN>y<RESET>
> +<GREEN>x<RESET>==<RED>b a<RESET><GREEN>y x<RESET>!=<RED>b a<RESET><GREEN>y x<RESET>===<RED>b<RESET>
> +<RED>a<RESET><GREEN>y<RESET>
> +<GREEN>x<RESET> and <RED>b<RESET>
> +<RED>a<RESET><GREEN>y<RESET>
> +<GREEN>x<RESET>^<RED>b<RESET>
> +<RED>a<RESET><GREEN>y<RESET>
> +<GREEN>x<RESET> or <RED>b<RESET>
> +<RED>a<RESET><GREEN>y<RESET>
> +<GREEN>x<RESET>&&<RED>b<RESET>
> +<RED>a<RESET><GREEN>y<RESET>
> +<GREEN>x<RESET>||<RED>b<RESET>
> +<RED>a<RESET><GREEN>y<RESET>
> +<GREEN>x<RESET>=<RED>b a<RESET><GREEN>y x<RESET>+=<RED>b a<RESET><GREEN>y x<RESET>-=<RED>b a<RESET><GREEN>y x<RESET>*=<RED>b a<RESET><GREEN>y x<RESET>/=<RED>b a<RESET><GREEN>y x<RESET>%=<RED>b a<RESET><GREEN>y x<RESET><<=<RED>b a<RESET><GREEN>y x<RESET>>>=<RED>b a<RESET><GREEN>y x<RESET>&=<RED>b a<RESET><GREEN>y x<RESET>^=<RED>b a<RESET><GREEN>y x<RESET>|=<RED>b<RESET>

This line is the best candidate to check many multi-character operators. For example, the pre-image could read

a=b c+=d e-=f g*=h i/=j k%=l m<<=n o>>=p q&=r s^=t u|=v
and the post-image
a+=b c=d e<=f g>=h i/j k%l m<<n o>>p q&r s^t u|v
but there are more operators to check.

Please either make these changes or drop this t4034 test case, because in its current form it gives a false sense of security, IMHO.

> +<RED>a<RESET><GREEN>y<RESET>
> +<GREEN>x<RESET>,y
> +-<RED>a<RESET><GREEN>x<RESET>+2

What do you want to demonstrate with this new test case? If you want to show that the + in +2 is not part of the number, then you must change, for example, "a+2" to "a+1". If you change only the a to x, then we do not know whether the +2 was regarded as one token or two.

Show 12 quoted lines
> diff --git a/userdiff.c b/userdiff.c
> index 8578cb0d12..b92572b582 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",
> +	 "^[ \t]*(([a-z]+[ \t]+)*(fun|class|interface)[ \t]+.*)$",
> +	 /* -- */
> +	 "[_]?[a-zA-Z][a-zA-Z0-9_]*"

An underscore followed by a digit is not an identifier, but a number, right? Then this expression correctly does not match and the following expression dedicated to numbers takes care of it. Good.

> +	 /*hexadecimal, integers and binary numbers*/
> +	 "|(0x0F|0b)?[0-9._]+([Ee][-+]?[0-9]+)?[fFlLuU]*"

What is this "0x0F"? Did you mean just "0x"? And what about prefixes 0X and 0B? Are they not used as prefixes for hex and binary numbers? Moreover, I do not see how a hex number 0xff would be matched as a single token.

> +	 /*match unary and binary operators*/
> +	 "|[-+*/<>%&^|=!]*"),

Do not do this. There is an implicit single-character match that need not be written down in the regex. List all multi-character operators (but not the single-character operators) like you did in earlier rounds. As written, the "++!=" in an expression such as "a++!=b++" (which is not unlikely to be seen in real code) would be regarded as a single token.

The verb "match" in the comment does not match the style of the other comments (drop the word), and please insert blanks between the comment delimiters and the text.

>  PATTERNS("markdown",
>  	 "^ {0,3}#{1,6}[ \t].*",
>  	 /* -- */
-- Hannes
Previous: Jaydeep P DasNext: jaydeepjd.8914@gmail.com
Message 13 of 48 in “userdiff: Add diff driver for Kotlin lang and tests”
  1. Jaydeep P DasMar 1, 2022
  2. userdiff: Add diff driver for Kotlin lang and testsJaydeep P Das, Mar 1, 2022
  3. Junio C HamanoMar 1, 2022
  4. Ævar Arnfjörð BjarmasonMar 1, 2022
  5. jaydeepjd.8914@gmail.comMar 1, 2022
  6. userdiff: add builtin diff driver for Kotlin language.Jaydeep P Das, Mar 1, 2022
  7. Junio C HamanoMar 1, 2022
  8. jaydeepjd.8914@gmail.comMar 1, 2022
  9. Johannes SixtMar 1, 2022
  10. Johannes SixtMar 1, 2022
  11. [GSoC][PATCHv2] userdiff: add builtin driver for kotlin languageJaydeep P Das, Mar 2, 2022
  12. userdiff: add builtin driver for kotlin languageJaydeep P Das, Mar 2, 2022
  13. Johannes SixtMar 2, 2022
  14. jaydeepjd.8914@gmail.comMar 2, 2022
  15. jaydeepjd.8914@gmail.comMar 2, 2022
  16. [GSoC][PATCHv3] userdiff: add builtin driver for kotlin languageJaydeep P Das, Mar 2, 2022
  17. userdiff: add builtin driver for kotlin languageJaydeep P Das, Mar 2, 2022
  18. Johannes SixtMar 2, 2022
  19. Jaydeep DasMar 3, 2022
  20. Ævar Arnfjörð BjarmasonMar 3, 2022
  21. Junio C HamanoMar 3, 2022
  22. Johannes SixtMar 3, 2022
  23. Jaydeep DasMar 4, 2022
  24. Johannes SixtMar 4, 2022
  25. userdiff: add builtin diff driver for Kotlin language.Jaydeep P Das, Mar 3, 2022
  26. Junio C HamanoMar 4, 2022
  27. jaydeepjd.8914@gmail.comMar 4, 2022
  28. Johannes SixtMar 4, 2022
  29. userdiff: add builtin diff driver for Kotlin language.Jaydeep P Das, Mar 5, 2022
  30. Johannes SixtMar 5, 2022
  31. jaydeepjd.8914@gmail.comMar 5, 2022
  32. Johannes SixtMar 5, 2022
  33. userdiff: add builtin diff driver for kotlin language.Jaydeep P Das, Mar 6, 2022
  34. Johannes SixtMar 7, 2022
  35. jaydeepjd.8914@gmail.comMar 8, 2022
  36. Johannes SixtMar 8, 2022
  37. jaydeepjd.8914@gmail.comMar 10, 2022
  38. Jaydeep DasMar 10, 2022
  39. Johannes SixtMar 10, 2022
  40. userdiff: add builtin diff driver for kotlin language.Jaydeep P Das, Mar 11, 2022
  41. Johannes SixtMar 11, 2022
  42. jaydeepjd.8914@gmail.comMar 12, 2022
  43. Johannes SixtMar 12, 2022
  44. userdiff: add builtin diff driver for kotlin language.Jaydeep P Das, Mar 12, 2022
  45. Johannes SixtMar 12, 2022
  46. jaydeepjd.8914@gmail.comMar 13, 2022
  47. jaydeepjd.8914@gmail.comMar 13, 2022
  48. Johannes SixtMar 13, 2022

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.