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@xxxxxxxxxxxxx> --- 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@xxxxxxxxxxxxx [rtzoeller@xxxxxxxxxxxxx] 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