From: Adrien Schildknecht Date: Mon, 09 Mar 2015 23:40:32 GMT Subject: [PATCH v2] userdiff: funcname and word patterns for sh Message-ID: <1425944432-23642-1-git-send-email-adrien+dev@schischi.me> In-Reply-To: <1425918999-11992-2-git-send-email-adrien+dev@schischi.me> Add regexp based on the "Shell Command Language" specifications. Because of the lax syntax of sh, some corner cases may not be handled properly. Signed-off-by: Adrien Schildknecht --- Documentation/gitattributes.txt | 2 ++ t/t4018-diff-funcname.sh | 1 + t/t4018/sh-function | 4 ++++ t/t4018/sh-function-comment | 6 ++++++ t/t4018/sh-function-nested | 7 +++++++ t/t4018/sh-function-prefix | 4 ++++ t/t4018/sh-function-string | 4 ++++ t/t4034-diff-words.sh | 1 + t/t4034/sh/expect | 46 +++++++++++++++++++++++++++++++++++++++++ t/t4034/sh/post | 36 ++++++++++++++++++++++++++++++++ t/t4034/sh/pre | 36 ++++++++++++++++++++++++++++++++ userdiff.c | 7 +++++++ 12 files changed, 154 insertions(+) create mode 100644 t/t4018/sh-function create mode 100644 t/t4018/sh-function-comment create mode 100644 t/t4018/sh-function-nested create mode 100644 t/t4018/sh-function-prefix create mode 100644 t/t4018/sh-function-string create mode 100644 t/t4034/sh/expect create mode 100644 t/t4034/sh/post create mode 100644 t/t4034/sh/pre diff --git a/Documentation/gitattributes.txt b/Documentation/gitattributes.txt index c892ffa..fb13761 100644 --- a/Documentation/gitattributes.txt +++ b/Documentation/gitattributes.txt @@ -545,6 +545,8 @@ patterns are available: - `ruby` suitable for source code in the Ruby language. +- `sh` suitable for source code in the Shell language. + - `tex` suitable for source code for LaTeX documents. diff --git a/t/t4018-diff-funcname.sh b/t/t4018-diff-funcname.sh index 1dbaa38..960b6e4 100755 --- a/t/t4018-diff-funcname.sh +++ b/t/t4018-diff-funcname.sh @@ -40,6 +40,7 @@ diffpatterns=" php python ruby + sh tex custom1 custom2 diff --git a/t/t4018/sh-function b/t/t4018/sh-function new file mode 100644 index 0000000..1d5096a --- /dev/null +++ b/t/t4018/sh-function @@ -0,0 +1,4 @@ +RIGHT_foo() +{ + ChangeMe; +} diff --git a/t/t4018/sh-function-comment b/t/t4018/sh-function-comment new file mode 100644 index 0000000..f340ee7 --- /dev/null +++ b/t/t4018/sh-function-comment @@ -0,0 +1,6 @@ + RIGHT_foo() # echo 'foo' +#bar() +{ + #bar() + ChangeMe; +} diff --git a/t/t4018/sh-function-nested b/t/t4018/sh-function-nested new file mode 100644 index 0000000..d3263f3 --- /dev/null +++ b/t/t4018/sh-function-nested @@ -0,0 +1,7 @@ +foo ( ) +{ + RIGHT_bar() + { + echo ChangeMe + } +} diff --git a/t/t4018/sh-function-prefix b/t/t4018/sh-function-prefix new file mode 100644 index 0000000..e96eb7a --- /dev/null +++ b/t/t4018/sh-function-prefix @@ -0,0 +1,4 @@ +function RIGHT_foo() +{ + ChangeMe; +} diff --git a/t/t4018/sh-function-string b/t/t4018/sh-function-string new file mode 100644 index 0000000..f60a899 --- /dev/null +++ b/t/t4018/sh-function-string @@ -0,0 +1,4 @@ +RIGHT_foo() { + echo "bar()" + ChangeMe; +} diff --git a/t/t4034-diff-words.sh b/t/t4034-diff-words.sh index f2f55fc..24fd9aa 100755 --- a/t/t4034-diff-words.sh +++ b/t/t4034-diff-words.sh @@ -312,6 +312,7 @@ test_language_driver perl test_language_driver php test_language_driver python test_language_driver ruby +test_language_driver sh test_language_driver tex test_expect_success 'word-diff with diff.sbe' ' diff --git a/t/t4034/sh/expect b/t/t4034/sh/expect new file mode 100644 index 0000000..1c6de2d --- /dev/null +++ b/t/t4034/sh/expect @@ -0,0 +1,46 @@ +diff --git a/pre b/post +index 20229c3..ab791db 100644 +--- a/pre ++++ b/post +@@ -1,36 +1,36 @@ +foo() {ls&echo} +$((ax++)) +$((ax--)) +$((--ax)) +$((++ax)) +$((ax*by)) +$((ax&by)) +$((ax**by)) +$((ax/by)) +$((ax%by)) +$((ax+by)) +$((ax-by)) +[ ax<=by ] +[ ax>=by ] +[ ax==by ] +[ ax!=by ] +ax<<b ay x>>b ay x<<-b ay x<b ay x>b ay x>|b ay x<&b ay x>&b ay x<>b +ay +x&b +ay +x&&b +ay +x|b +ay +x||b +ay +x=by +$((ax+=by)) +$((ax-=by)) +$((ax*=by)) +$((ax/=by)) +$((ax%=by)) +$((ax<<=by)) +$((ax>>=by)) +$((ax&=by)) +$((ax^=by)) +$((ax|=by)) +*)ab;;ls +FOO=42&foofro +BAR=$(0) +[[ $ax -eq $by ]] diff --git a/t/t4034/sh/post b/t/t4034/sh/post new file mode 100644 index 0000000..ab791db --- /dev/null +++ b/t/t4034/sh/post @@ -0,0 +1,36 @@ +foo() {ls&echo} +$((x++)) +$((x--)) +$((--x)) +$((++x)) +$((x*y)) +$((x&y)) +$((x**y)) +$((x/y)) +$((x%y)) +$((x+y)) +$((x-y)) +[ x<=y ] +[ x>=y ] +[ x==y ] +[ x!=y ] +x<>y x<<-y xy x>|y x<&y x>&y x<>y +x&y +x&&y +x|y +x||y +x=y +$((x+=y)) +$((x-=y)) +$((x*=y)) +$((x/=y)) +$((x%=y)) +$((x<<=y)) +$((x>>=y)) +$((x&=y)) +$((x^=y)) +$((x|=y)) +*)b;;ls +FOO=42&fro +BAR=$(0) +[[ $x -eq $y ]] diff --git a/t/t4034/sh/pre b/t/t4034/sh/pre new file mode 100644 index 0000000..20229c3 --- /dev/null +++ b/t/t4034/sh/pre @@ -0,0 +1,36 @@ +foo() {ls&echo} +$((a++)) +$((a--)) +$((--a)) +$((++a)) +$((a*b)) +$((a&b)) +$((a**b)) +$((a/b)) +$((a%b)) +$((a+b)) +$((a-b)) +[ a<=b ] +[ a>=b ] +[ a==b ] +[ a!=b ] +a<>b a<<-b ab a>|b a<&b a>&b a<>b +a&b +a&&b +a|b +a||b +a=b +$((a+=b)) +$((a-=b)) +$((a*=b)) +$((a/=b)) +$((a%=b)) +$((a<<=b)) +$((a>>=b)) +$((a&=b)) +$((a^=b)) +$((a|=b)) +*)a;;ls +FOO=42&foo +BAR=$(0) +[[ $a -eq $b ]] diff --git a/userdiff.c b/userdiff.c index 2ccbee5..40b3dc0 100644 --- a/userdiff.c +++ b/userdiff.c @@ -146,6 +146,13 @@ PATTERNS("csharp", "[a-zA-Z_][a-zA-Z0-9_]*" "|[-+0-9.e]+[fFlL]?|0[xXbB]?[0-9a-fA-F]+[lL]?" "|[-+*/<>%&^|=!]=|--|\\+\\+|<<=?|>>=?|&&|\\|\\||::|->"), +PATTERNS("sh", + "^([ \t]*(function[ \t]+)?[a-zA-Z_][a-zA-Z0-9_]*[ \t]*\\([ \t]*\\).*)$", + /* -- */ + "[a-zA-Z0-9_]+" + "|[-+0-9]+" + "|[-+*/<>%&^|=!]=|>>=?|<<=?|\\+\\+|--|\\*\\*|&&|\\|\\||\\[\\[|\\]\\]" + "|>\\||[<>]+&|<>|<<-|;;"), { "default", NULL, -1, { NULL, 0 } }, }; #undef PATTERNS -- Adrien Schildknecht http://schischi.me