{"thread":{"id":"52203","subject":"[PATCH] feat: add Elixir to supported userdiff languages","startedAt":"2019-11-06T17:46:04Z","lastAt":"2019-11-06T17:46:04Z","messageCount":1,"participants":["Łukasz Niemier"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"385612","messageId":"20191106174556.23113-1-lukasz@niemier.pl","threadId":"52203","inReplyTo":null,"subject":"[PATCH] feat: add Elixir to supported userdiff languages","fromName":"Łukasz Niemier","fromEmail":"lukasz@niemier.pl","sentAt":"2019-11-06T17:45:56Z","receivedAt":"2019-11-06T17:46:04Z","isPatch":true,"sender":{"key":"lukasz@niemier.pl","avatar":"https://avatars.githubusercontent.com/u/291639?v=4"},"body":"---\n t/t4018-diff-funcname    | 115 +++++++++++++++++++++++++++++++++++++++\n t/t4018-diff-funcname.sh |   1 +\n t/t4018/elixir-function  |   5 ++\n t/t4018/elixir-module    |   9 +++\n userdiff.c               |   7 +++\n 5 files changed, 137 insertions(+)\n create mode 100755 t/t4018-diff-funcname\n create mode 100644 t/t4018/elixir-function\n create mode 100644 t/t4018/elixir-module\n\ndiff --git a/t/t4018-diff-funcname b/t/t4018-diff-funcname\nnew file mode 100755\nindex 0000000000..194310377e\n--- /dev/null\n+++ b/t/t4018-diff-funcname\n@@ -0,0 +1,115 @@\n+#!/bin/sh\n+#\n+# Copyright (c) 2007 Johannes E. Schindelin\n+#\n+\n+test_description='Test custom diff function name patterns'\n+\n+. ./test-lib.sh\n+\n+test_expect_success 'setup' '\n+\t# a non-trivial custom pattern\n+\tgit config diff.custom1.funcname \"!static\n+!String\n+[^ \t].*s.*\" &&\n+\n+\t# a custom pattern which matches to end of line\n+\tgit config diff.custom2.funcname \"......Beer\\$\" &&\n+\n+\t# alternation in pattern\n+\tgit config diff.custom3.funcname \"Beer$\" &&\n+\tgit config diff.custom3.xfuncname \"^[ \t]*((public|static).*)$\" &&\n+\n+\t# for regexp compilation tests\n+\techo A >A.java &&\n+\techo B >B.java\n+'\n+\n+diffpatterns=\"\n+\tada\n+\tbibtex\n+\tcpp\n+\tcsharp\n+\tcss\n+\telixir\n+\tdts\n+\tfortran\n+\tfountain\n+\tgolang\n+\thtml\n+\tjava\n+\tmatlab\n+\tobjc\n+\tpascal\n+\tperl\n+\tphp\n+\tpython\n+\truby\n+\trust\n+\ttex\n+\tcustom1\n+\tcustom2\n+\tcustom3\n+\"\n+\n+for p in $diffpatterns\n+do\n+\ttest_expect_success \"builtin $p pattern compiles\" '\n+\t\techo \"*.java diff=$p\" >.gitattributes &&\n+\t\ttest_expect_code 1 git diff --no-index \\\n+\t\t\tA.java B.java 2>msg &&\n+\t\ttest_i18ngrep ! fatal msg &&\n+\t\ttest_i18ngrep ! error msg\n+\t'\n+\ttest_expect_success \"builtin $p wordRegex pattern compiles\" '\n+\t\techo \"*.java diff=$p\" >.gitattributes &&\n+\t\ttest_expect_code 1 git diff --no-index --word-diff \\\n+\t\t\tA.java B.java 2>msg &&\n+\t\ttest_i18ngrep ! fatal msg &&\n+\t\ttest_i18ngrep ! error msg\n+\t'\n+done\n+\n+test_expect_success 'last regexp must not be negated' '\n+\techo \"*.java diff=java\" >.gitattributes &&\n+\ttest_config diff.java.funcname \"!static\" &&\n+\ttest_expect_code 128 git diff --no-index A.java B.java 2>msg &&\n+\ttest_i18ngrep \": Last expression must not be negated:\" msg\n+'\n+\n+test_expect_success 'setup hunk header tests' '\n+\tfor i in $diffpatterns\n+\tdo\n+\t\techo \"$i-* diff=$i\"\n+\tdone > .gitattributes &&\n+\n+\t# add all test files to the index\n+\t(\n+\t\tcd \"$TEST_DIRECTORY\"/t4018 &&\n+\t\tgit --git-dir=\"$TRASH_DIRECTORY/.git\" add .\n+\t) &&\n+\n+\t# place modified files in the worktree\n+\tfor i in $(git ls-files)\n+\tdo\n+\t\tsed -e \"s/ChangeMe/IWasChanged/\" <\"$TEST_DIRECTORY/t4018/$i\" >\"$i\" || return 1\n+\tdone\n+'\n+\n+# check each individual file\n+for i in $(git ls-files)\n+do\n+\tif grep broken \"$i\" >/dev/null 2>&1\n+\tthen\n+\t\tresult=failure\n+\telse\n+\t\tresult=success\n+\tfi\n+\ttest_expect_$result \"hunk header: $i\" \"\n+\t\ttest_when_finished 'cat actual' &&\t# for debugging only\n+\t\tgit diff -U1 $i >actual &&\n+\t\tgrep '@@ .* @@.*RIGHT' actual\n+\t\"\n+done\n+\n+test_done\ndiff --git a/t/t4018-diff-funcname.sh b/t/t4018-diff-funcname.sh\nindex 6f5ef0035e..194310377e 100755\n--- a/t/t4018-diff-funcname.sh\n+++ b/t/t4018-diff-funcname.sh\n@@ -31,6 +31,7 @@ diffpatterns=\"\n \tcpp\n \tcsharp\n \tcss\n+\telixir\n \tdts\n \tfortran\n \tfountain\ndiff --git a/t/t4018/elixir-function b/t/t4018/elixir-function\nnew file mode 100644\nindex 0000000000..d452f495a7\n--- /dev/null\n+++ b/t/t4018/elixir-function\n@@ -0,0 +1,5 @@\n+def function(RIGHT, arg) do\n+  # comment\n+  # comment\n+  ChangeMe\n+end\ndiff --git a/t/t4018/elixir-module b/t/t4018/elixir-module\nnew file mode 100644\nindex 0000000000..91a4e7aa20\n--- /dev/null\n+++ b/t/t4018/elixir-module\n@@ -0,0 +1,9 @@\n+defmodule RIGHT do\n+  @moduledoc \"\"\"\n+  Foo bar\n+  \"\"\"\n+\n+  def ChangeMe(a) where is_map(a) do\n+    a\n+  end\n+end\ndiff --git a/userdiff.c b/userdiff.c\nindex e187d356f6..31fff34e1e 100644\n--- a/userdiff.c\n+++ b/userdiff.c\n@@ -32,6 +32,13 @@ PATTERNS(\"dts\",\n \t /* Property names and math operators */\n \t \"[a-zA-Z0-9,._+?#-]+\"\n \t \"|[-+*/%&^|!~]|>>|<<|&&|\\\\|\\\\|\"),\n+PATTERNS(\"elixir\",\n+\t \"^[ \\t]*((def(macro|module|impl|guard|protocol)?p?|test)[ \\t].*)$\",\n+\t \"[a-zA-Z0-9_.]+\"\n+\t \"|:[a-zA-Z0-9@_]+\"\n+\t \"|:'a-zA-Z0-9@_]+'\"\n+\t \"|:\\\"[a-zA-Z0-9@_]+\\\"\"\n+\t \"|@[a-zA-Z0-9_]+\"),\n IPATTERN(\"fortran\",\n \t \"!^([C*]|[ \\t]*!)\\n\"\n \t \"!^[ \\t]*MODULE[ \\t]+PROCEDURE[ \\t]\\n\"\n-- \n2.23.0\n\n"}]}