{"thread":{"id":"55311","subject":"[PATCH] userdiff: support Clojure","startedAt":"2021-03-13T20:27:38Z","lastAt":"2021-03-13T20:27:38Z","messageCount":1,"participants":["Nazarii Bardiuk via GitGitGadget"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"419050","messageId":"pull.902.git.1615667191368.gitgitgadget@gmail.com","threadId":"55311","inReplyTo":null,"subject":"[PATCH] userdiff: support Clojure","fromName":"Nazarii Bardiuk via GitGitGadget","fromEmail":"gitgitgadget@gmail.com","sentAt":"2021-03-13T20:26:30Z","receivedAt":"2021-03-13T20:27:38Z","isPatch":true,"sender":{"key":"name:Nazarii Bardiuk","avatar":null},"body":"From: Nazarii Bardiuk <nazarii@bardiuk.com>\n\nAdd support for Clojure[1]. Include test cases for the xfuncname pattern\n(t4018) and update documentation.\n\nThe xfuncname pattern matches any top level form except a line comment.\n\nThe word_regex has been constructed based on Reader documentation[2].\n\n[1]: https://clojure.org\n[2]: https://clojure.org/reference/reader\n\nSigned-off-by: Nazarii Bardiuk <nazarii@bardiuk.com>\n---\n    userdiff: support Clojure\n    \n    Add support for Clojure1 [https://clojure.org]. Include test cases for\n    the xfuncname pattern (t4018) and update documentation.\n    \n    The xfuncname pattern matches any top level form except a line comment.\n    \n    The word_regex has been constructed based on Reader documentation2\n    [https://clojure.org/reference/reader].\n    \n    Signed-off-by: Nazarii Bardiuk nazarii@bardiuk.com\n\nPublished-As: https://github.com/gitgitgadget/git/releases/tag/pr-902%2Fnbardiuk%2Fuserdiff-clojure-v1\nFetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-902/nbardiuk/userdiff-clojure-v1\nPull-Request: https://github.com/gitgitgadget/git/pull/902\n\n Documentation/gitattributes.txt |  2 ++\n t/t4018-diff-funcname.sh        |  1 +\n t/t4018/clojure-comment         |  8 ++++++++\n t/t4018/clojure-function        |  6 ++++++\n t/t4018/clojure-ns              | 10 ++++++++++\n t/t4018/clojure-reader-comment  |  5 +++++\n userdiff.c                      | 11 +++++++++++\n 7 files changed, 43 insertions(+)\n create mode 100644 t/t4018/clojure-comment\n create mode 100644 t/t4018/clojure-function\n create mode 100644 t/t4018/clojure-ns\n create mode 100644 t/t4018/clojure-reader-comment\n\ndiff --git a/Documentation/gitattributes.txt b/Documentation/gitattributes.txt\nindex e84e104f9325..a7734d413758 100644\n--- a/Documentation/gitattributes.txt\n+++ b/Documentation/gitattributes.txt\n@@ -807,6 +807,8 @@ patterns are available:\n \n - `bibtex` suitable for files with BibTeX coded references.\n \n+- `clojure` suitable for source code in the Clojure language.\n+\n - `cpp` suitable for source code in the C and C++ languages.\n \n - `csharp` suitable for source code in the C# language.\ndiff --git a/t/t4018-diff-funcname.sh b/t/t4018-diff-funcname.sh\nindex 9675bc17db27..f126a349aa24 100755\n--- a/t/t4018-diff-funcname.sh\n+++ b/t/t4018-diff-funcname.sh\n@@ -29,6 +29,7 @@ diffpatterns=\"\n \tada\n \tbash\n \tbibtex\n+\tclojure\n \tcpp\n \tcsharp\n \tcss\ndiff --git a/t/t4018/clojure-comment b/t/t4018/clojure-comment\nnew file mode 100644\nindex 000000000000..5e20f41b554e\n--- /dev/null\n+++ b/t/t4018/clojure-comment\n@@ -0,0 +1,8 @@\n+(comment ;; RIGHT rich comment\n+\n+\n+;; ignore comment\n+\n+\n+    (do-something \"ChangeMe\"))\n+\ndiff --git a/t/t4018/clojure-function b/t/t4018/clojure-function\nnew file mode 100644\nindex 000000000000..347790fd37f7\n--- /dev/null\n+++ b/t/t4018/clojure-function\n@@ -0,0 +1,6 @@\n+(defn RIGHT\n+  []\n+; ignore comment\n+\n+  (ChangeMe))\n+\ndiff --git a/t/t4018/clojure-ns b/t/t4018/clojure-ns\nnew file mode 100644\nindex 000000000000..e3e2e5f4c986\n--- /dev/null\n+++ b/t/t4018/clojure-ns\n@@ -0,0 +1,10 @@\n+(ns RIGHT\n+\n+;; ignore comment\n+\n+  (:require [some.lib :refer [\n+\n+\n+                              ChangeMe\n+\n+                              ]))\ndiff --git a/t/t4018/clojure-reader-comment b/t/t4018/clojure-reader-comment\nnew file mode 100644\nindex 000000000000..f17e51074558\n--- /dev/null\n+++ b/t/t4018/clojure-reader-comment\n@@ -0,0 +1,5 @@\n+#_((def commented-RIGHT-definition\n+\n+; ignore comment\n+\n+     ChangeMe))\ndiff --git a/userdiff.c b/userdiff.c\nindex 3f81a2261c5e..887264081e3c 100644\n--- a/userdiff.c\n+++ b/userdiff.c\n@@ -44,6 +44,17 @@ PATTERNS(\"bash\",\n \t /* -- */\n \t /* Characters not in the default $IFS value */\n \t \"[^ \\t]+\"),\n+PATTERNS(\"clojure\",\n+\t /* Ignore comments */\n+\t \"!^;.*\\n\"\n+\t /* Top level forms */\n+\t \"^[^ \\t].*$\",\n+\t /* Atoms, Keywords, Symbols */\n+\t \"[#@:]?[^0-9][a-zA-Z0-9*+!-_'?<>=/.]+\"\n+\t /* Numbers */\n+\t \"|[-]?[0-9a-fA-Frxb/MN]+\"\n+\t /* Characters */\n+\t \"|[\\\\0-9a-fA-F]+\"),\n PATTERNS(\"dts\",\n \t \"!;\\n\"\n \t \"!=\\n\"\n\nbase-commit: 13d7ab6b5d7929825b626f050b62a11241ea4945\n-- \ngitgitgadget\n"}]}