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

[PATCH] userdiff: add Julia to supported userdiff languages

From
Ryan Zoeller via GitGitGadget <gitgitgadget@gmail.com>
Date
Jan 10, 2020, 03:10 UTC
Message-ID
<pull.521.git.1578625810098.gitgitgadget@gmail.com>

Add xfuncname and word_regex patterns for Julia[1], which is a language used in numerical analysis and computational science.

The default behavior for xfuncname did not allow functions to be indented, nor functions to have a macro applied, such as @inline or @generated.

[1]: https://julialang.org
Signed-off-by: Ryan Zoeller <rtzoeller@rtzoeller.com>
---
    userdiff: add Julia to supported userdiff languages
    
    Add xfuncname and word_regex patterns for Julia1 [https://julialang.org]
    , which is a language used in numerical analysis and computational
    science.
    
    The default behavior for xfuncname did not allow functions to be
    indented, nor functions to have a macro applied, such as @inline or
    @generated.
    
    Signed-off-by: Ryan Zoeller rtzoeller@rtzoeller.com
    [rtzoeller@rtzoeller.com]
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-521%2Frtzoeller%2Fjulia_userdiff-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-521/rtzoeller/julia_userdiff-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/521
 Documentation/gitattributes.txt |  2 ++
 t/t4018-diff-funcname.sh        |  1 +
 t/t4018/julia-function          |  5 +++++
 t/t4018/julia-indented-function |  8 ++++++++
 t/t4018/julia-inline-function   |  5 +++++
 t/t4018/julia-macro             |  5 +++++
 t/t4018/julia-mutable-struct    |  5 +++++
 t/t4018/julia-struct            |  5 +++++
 userdiff.c                      | 15 +++++++++++++++
 9 files changed, 51 insertions(+)
 create mode 100644 t/t4018/julia-function
 create mode 100644 t/t4018/julia-indented-function
 create mode 100644 t/t4018/julia-inline-function
 create mode 100644 t/t4018/julia-macro
 create mode 100644 t/t4018/julia-mutable-struct
 create mode 100644 t/t4018/julia-struct
diff --git a/Documentation/gitattributes.txt b/Documentation/gitattributes.txt
index 508fe713c4..d39dc727e3 100644
--- a/Documentation/gitattributes.txt
+++ b/Documentation/gitattributes.txt
@@ -824,6 +824,8 @@ patterns are available:
 
 - `java` suitable for source code in the Java language.
 
+- `julia` suitable for source code in the Julia language.
+
 - `matlab` suitable for source code in the MATLAB and Octave languages.
 
 - `objc` suitable for source code in the Objective-C language.
diff --git a/t/t4018-diff-funcname.sh b/t/t4018-diff-funcname.sh
index c0f4839543..d4613eb7d2 100755
--- a/t/t4018-diff-funcname.sh
+++ b/t/t4018-diff-funcname.sh
@@ -38,6 +38,7 @@ diffpatterns="
 	golang
 	html
 	java
+	julia
 	matlab
 	objc
 	pascal
diff --git a/t/t4018/julia-function b/t/t4018/julia-function
new file mode 100644
index 0000000000..a2eab83c27
--- /dev/null
+++ b/t/t4018/julia-function
@@ -0,0 +1,5 @@
+function RIGHT()
+    # A comment
+    # Another comment
+    return ChangeMe
+end
diff --git a/t/t4018/julia-indented-function b/t/t4018/julia-indented-function
new file mode 100644
index 0000000000..2d48aabcdb
--- /dev/null
+++ b/t/t4018/julia-indented-function
@@ -0,0 +1,8 @@
+function outer_function()
+    function RIGHT()
+        for i = 1:10
+            print(i)
+        end
+        # ChangeMe
+    end
+end
diff --git a/t/t4018/julia-inline-function b/t/t4018/julia-inline-function
new file mode 100644
index 0000000000..5806f224fb
--- /dev/null
+++ b/t/t4018/julia-inline-function
@@ -0,0 +1,5 @@
+@inline function RIGHT()
+    # Prints Hello, then something else.
+    println("Hello")
+    println("ChangeMe")
+end
diff --git a/t/t4018/julia-macro b/t/t4018/julia-macro
new file mode 100644
index 0000000000..1d18bc2750
--- /dev/null
+++ b/t/t4018/julia-macro
@@ -0,0 +1,5 @@
+macro RIGHT()
+    # First comment
+    # Second comment
+    return :( println("ChangeMe") )
+end
diff --git a/t/t4018/julia-mutable-struct b/t/t4018/julia-mutable-struct
new file mode 100644
index 0000000000..db82017ba0
--- /dev/null
+++ b/t/t4018/julia-mutable-struct
@@ -0,0 +1,5 @@
+mutable struct RIGHT
+    x
+    y::Int
+    ChangeMe
+end
diff --git a/t/t4018/julia-struct b/t/t4018/julia-struct
new file mode 100644
index 0000000000..d3d2bda8cb
--- /dev/null
+++ b/t/t4018/julia-struct
@@ -0,0 +1,5 @@
+struct RIGHT
+    x
+    y::Int
+    ChangeMe
+end
diff --git a/userdiff.c b/userdiff.c
index efbe05e5a5..b5e938b1c2 100644
--- a/userdiff.c
+++ b/userdiff.c
@@ -79,6 +79,21 @@ PATTERNS("java",
 	 "|[-+0-9.e]+[fFlL]?|0[xXbB]?[0-9a-fA-F]+[lL]?"
 	 "|[-+*/<>%&^|=!]="
 	 "|--|\\+\\+|<<=?|>>>?=?|&&|\\|\\|"),
+PATTERNS("julia",
+	 "^[ \t]*(((mutable[ \t]+)?struct|(@.+[ \t])?function|macro)[ \t].*)$",
+	 /* -- */
+	 /* Binary literals */
+	 "[-+]?0b[01]+"
+	 /* Hexadecimal literals */
+	 "|[-+]?0x[0-9a-fA-F]+"
+	 /* Real and complex literals */
+	 "|[-+0-9.e_(im)]+"
+	 /* Should theoretically allow Unicode characters as part of
+	  * a word, such as U+2211. However, Julia reserves most of the
+	  * U+2200-U+22FF range (as well as others) as user-defined operators,
+	  * therefore they are not handled in this regex. */
+	 "|[a-zA-Z_][a-zA-Z0-9_!]*"
+	 "|--|\\+\\+|<<=?|>>>=?|>>=?|\\\\\\\\=?|//=?|&&|\\|\\||::|->|[-+*/<>%^&|=!$]=?"),
 PATTERNS("matlab",
 	 /*
 	  * Octave pattern is mostly the same as matlab, except that '%%%' and

base-commit: 042ed3e048af08014487d19196984347e3be7d1c
-- 
gitgitgadget
Next: Johannes Schindelin
Message 1 of 5 in “userdiff: add Julia to supported userdiff languages”
  1. userdiff: add Julia to supported userdiff languagesRyan Zoeller via GitGitGadget, Jan 10, 2020
  2. Johannes SchindelinJan 10, 2020
  3. Johannes SixtJan 10, 2020
  4. Ryan ZoellerJan 10, 2020
  5. Johannes SixtJan 10, 2020

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.