]> git.ipfire.org Git - thirdparty/git.git/commitdiff
userdiff: add Elixir to supported userdiff languages
authorŁukasz Niemier <lukasz@niemier.pl>
Fri, 8 Nov 2019 21:38:24 +0000 (22:38 +0100)
committerJunio C Hamano <gitster@pobox.com>
Sun, 10 Nov 2019 06:26:26 +0000 (15:26 +0900)
Adds support for xfuncref in Elixir[1] language which is Ruby-like
language that runs on Erlang[3] Virtual Machine (BEAM).

[1]: https://elixir-lang.org
[2]: https://www.erlang.org

Signed-off-by: Łukasz Niemier <lukasz@niemier.pl>
Acked-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 files changed:
Documentation/gitattributes.txt
t/t4018-diff-funcname.sh
t/t4018/elixir-do-not-pick-end [new file with mode: 0644]
t/t4018/elixir-ex-unit-test [new file with mode: 0644]
t/t4018/elixir-function [new file with mode: 0644]
t/t4018/elixir-macro [new file with mode: 0644]
t/t4018/elixir-module [new file with mode: 0644]
t/t4018/elixir-module-func [new file with mode: 0644]
t/t4018/elixir-nested-module [new file with mode: 0644]
t/t4018/elixir-private-function [new file with mode: 0644]
t/t4018/elixir-protocol [new file with mode: 0644]
t/t4018/elixir-protocol-implementation [new file with mode: 0644]
userdiff.c

index c5a528c667b62abe81e6454b061834200011657e..03d8fe6f309665794b95f61eb0b404d8fbc54383 100644 (file)
@@ -812,6 +812,8 @@ patterns are available:
 
 - `dts` suitable for devicetree (DTS) files.
 
+- `elixir` suitable for source code in the Elixir language.
+
 - `fortran` suitable for source code in the Fortran language.
 
 - `fountain` suitable for Fountain documents.
index 6f5ef0035e92998eb74b14081aa021247abf67d8..c0f48395432539f807dd9474d71529378f71306b 100755 (executable)
@@ -32,6 +32,7 @@ diffpatterns="
        csharp
        css
        dts
+       elixir
        fortran
        fountain
        golang
diff --git a/t/t4018/elixir-do-not-pick-end b/t/t4018/elixir-do-not-pick-end
new file mode 100644 (file)
index 0000000..fae08ba
--- /dev/null
@@ -0,0 +1,5 @@
+defmodule RIGHT do
+end
+#
+#
+# ChangeMe; do not pick up 'end' line
diff --git a/t/t4018/elixir-ex-unit-test b/t/t4018/elixir-ex-unit-test
new file mode 100644 (file)
index 0000000..0560a2b
--- /dev/null
@@ -0,0 +1,6 @@
+defmodule Test do
+  test "RIGHT" do
+    assert true == true
+    assert ChangeMe
+  end
+end
diff --git a/t/t4018/elixir-function b/t/t4018/elixir-function
new file mode 100644 (file)
index 0000000..d452f49
--- /dev/null
@@ -0,0 +1,5 @@
+def function(RIGHT, arg) do
+  # comment
+  # comment
+  ChangeMe
+end
diff --git a/t/t4018/elixir-macro b/t/t4018/elixir-macro
new file mode 100644 (file)
index 0000000..4f925e9
--- /dev/null
@@ -0,0 +1,5 @@
+defmacro foo(RIGHT) do
+  # Code
+  # Code
+  ChangeMe
+end
diff --git a/t/t4018/elixir-module b/t/t4018/elixir-module
new file mode 100644 (file)
index 0000000..91a4e7a
--- /dev/null
@@ -0,0 +1,9 @@
+defmodule RIGHT do
+  @moduledoc """
+  Foo bar
+  """
+
+  def ChangeMe(a) where is_map(a) do
+    a
+  end
+end
diff --git a/t/t4018/elixir-module-func b/t/t4018/elixir-module-func
new file mode 100644 (file)
index 0000000..c9910d0
--- /dev/null
@@ -0,0 +1,8 @@
+defmodule Foo do
+  def fun(RIGHT) do
+     # Code
+     # Code
+     # Code
+     ChangeMe
+  end
+end
diff --git a/t/t4018/elixir-nested-module b/t/t4018/elixir-nested-module
new file mode 100644 (file)
index 0000000..771ebc5
--- /dev/null
@@ -0,0 +1,9 @@
+defmodule MyApp.RIGHT do
+  @moduledoc """
+  Foo bar
+  """
+
+  def ChangeMe(a) where is_map(a) do
+    a
+  end
+end
diff --git a/t/t4018/elixir-private-function b/t/t4018/elixir-private-function
new file mode 100644 (file)
index 0000000..1aabe33
--- /dev/null
@@ -0,0 +1,5 @@
+defp function(RIGHT, arg) do
+  # comment
+  # comment
+  ChangeMe
+end
diff --git a/t/t4018/elixir-protocol b/t/t4018/elixir-protocol
new file mode 100644 (file)
index 0000000..7d91736
--- /dev/null
@@ -0,0 +1,6 @@
+defprotocol RIGHT do
+  @doc """
+  Calculates the size (and not the length!) of a data structure
+  """
+  def size(data, ChangeMe)
+end
diff --git a/t/t4018/elixir-protocol-implementation b/t/t4018/elixir-protocol-implementation
new file mode 100644 (file)
index 0000000..f9234bb
--- /dev/null
@@ -0,0 +1,5 @@
+defimpl RIGHT do
+  # Docs
+  # Docs
+  def foo(ChangeMe), do: :ok
+end
index e187d356f6fff746547f14129cbe7668e11b4adb..577053c10ab72b28b83b1518825a99a7f6016e8e 100644 (file)
@@ -32,6 +32,18 @@ PATTERNS("dts",
         /* Property names and math operators */
         "[a-zA-Z0-9,._+?#-]+"
         "|[-+*/%&^|!~]|>>|<<|&&|\\|\\|"),
+PATTERNS("elixir",
+        "^[ \t]*((def(macro|module|impl|protocol|p)?|test)[ \t].*)$",
+        /* Atoms, names, and module attributes */
+        "|[@:]?[a-zA-Z0-9@_?!]+"
+        /* Numbers with specific base */
+        "|[-+]?0[xob][0-9a-fA-F]+"
+        /* Numbers */
+        "|[-+]?[0-9][0-9_.]*([eE][-+]?[0-9_]+)?"
+        /* Operators and atoms that represent them */
+        "|:?(\\+\\+|--|\\.\\.|~~~|<>|\\^\\^\\^|<?\\|>|<<<?|>?>>|<<?~|~>?>|<~>|<=|>=|===?|!==?|=~|&&&?|\\|\\|\\|?|=>|<-|\\\\\\\\|->)"
+        /* Not real operators, but should be grouped */
+        "|:?%[A-Za-z0-9_.]\\{\\}?"),
 IPATTERN("fortran",
         "!^([C*]|[ \t]*!)\n"
         "!^[ \t]*MODULE[ \t]+PROCEDURE[ \t]\n"