Sorry I forgot to add the newline after the test in t/4018 again so I had to send the patch again.
Moumita Dhar (1):
userdiff: extend Bash pattern to cover more shell function forms
t/t4018/bash-bashism-style-multiline-function | 4 ++
.../bash-hunk-header-complete-line-capture | 4 ++
t/t4018/bash-posix-style-multiline-function | 4 ++
.../bash-posix-style-single-command-function | 3 ++
t/t4034-diff-words.sh | 1 +
t/t4034/bash/expect | 38 +++++++++++++++++++
t/t4034/bash/post | 33 ++++++++++++++++
t/t4034/bash/pre | 33 ++++++++++++++++
userdiff.c | 28 ++++++++++----
9 files changed, 140 insertions(+), 8 deletions(-)
create mode 100644 t/t4018/bash-bashism-style-multiline-function
create mode 100644 t/t4018/bash-hunk-header-complete-line-capture
create mode 100644 t/t4018/bash-posix-style-multiline-function
create mode 100644 t/t4018/bash-posix-style-single-command-function
create mode 100644 t/t4034/bash/expect
create mode 100644 t/t4034/bash/post
create mode 100644 t/t4034/bash/pre
Range-diff against v5:
1: 40cffd3b4a ! 1: 464cb8a1eb userdiff: extend Bash pattern to cover more shell function forms
@@ Commit message
`x () echo hello`.
Replacing the function body matching logic with `.*$`, ensures
- that everything on the function definition line is captured,
- aligning with other userdiff drivers and improving hunk headers in
- `git diff`.
+ that everything on the function definition line is captured.
Additionally, the word regex is refined to better recognize shell
syntax, including additional parameter expansion operators and
- command-line options, improving syntax-aware diffs.
+ command-line options.
Signed-off-by: Moumita Dhar <dhar61595@gmail.com>
@@ t/t4018/bash-bashism-style-multiline-function (new)
+function RIGHT \
+{
+ echo 'ChangeMe'
++}
+
+ ## t/t4018/bash-hunk-header-complete-line-capture (new) ##
+@@
++func() { # RIGHT
++
++ ChangeMe
+}
## t/t4018/bash-posix-style-multiline-function (new) ##
@@ t/t4034/bash/expect (new)
+<BOLD>index 09ac008..60ba6a2 100644<RESET>
+<BOLD>--- a/pre<RESET>
+<BOLD>+++ b/post<RESET>
-+<CYAN>@@ -1,25 +1,25 @@<RESET>
++<CYAN>@@ -1,33 +1,33 @@<RESET>
+<RED>my_var<RESET><GREEN>new_var<RESET>=10
+x=<RED>123<RESET><GREEN>456<RESET>
+y=<RED>3.14<RESET><GREEN>2.71<RESET>
+z=<RED>.5<RESET><GREEN>.75<RESET>
+echo <RED>$USER<RESET><GREEN>$USERNAME<RESET>
+${<RED>HOME<RESET><GREEN>HOMEDIR<RESET>}
-+if [ "<RED>$a<RESET><GREEN>$x<RESET>" == "<RED>$b<RESET><GREEN>$y<RESET>" ] || [ "<RED>$c<RESET><GREEN>$x<RESET>" != "<RED>$d<RESET><GREEN>$y<RESET>" ]; then echo "OK"; fi
-+((<RED>a<RESET><GREEN>x<RESET>+=<RED>b<RESET><GREEN>y<RESET>))
-+((<RED>a<RESET><GREEN>x<RESET>-=<RED>b<RESET><GREEN>y<RESET>))
-+$((<RED>a<RESET><GREEN>x<RESET><<<RED>b<RESET><GREEN>y<RESET>))
-+$((<RED>a<RESET><GREEN>x<RESET>>><RED>b<RESET><GREEN>y<RESET>))
-+${<RED>a<RESET><GREEN>x<RESET>:-<RED>b<RESET><GREEN>y<RESET>}
-+${<RED>a<RESET><GREEN>x<RESET>:=<RED>b<RESET><GREEN>y<RESET>}
-+${<RED>a<RESET><GREEN>x<RESET>##*/}
-+${<RED>a<RESET><GREEN>x<RESET>%.*}
-+${<RED>a<RESET><GREEN>x<RESET>%%.*}
-+${<RED>a<RESET><GREEN>x<RESET>^^}
-+${<RED>a<RESET><GREEN>x<RESET>,}
-+${<RED>a<RESET><GREEN>x<RESET>,,}
-+${!<RED>a<RESET><GREEN>x<RESET>}
-+${<RED>a<RESET><GREEN>x<RESET>[@]}
-+${<RED>a<RESET><GREEN>x<RESET>:?error message}
-+${<RED>a<RESET><GREEN>x<RESET>:2:3}
++((a<RED>+<RESET><GREEN>+=<RESET>b))
++((a<RED>*<RESET><GREEN>*=<RESET>b))
++((a<RED>/<RESET><GREEN>/=<RESET>b))
++((a<RED>%<RESET><GREEN>%=<RESET>b))
++((a<RED>|<RESET><GREEN>|=<RESET>b))
++((a<RED>^<RESET><GREEN>^=<RESET>b))
++((a<RED>=<RESET><GREEN>==<RESET>b))
++((a<RED>!<RESET><GREEN>!=<RESET>b))
++((a<RED><<RESET><GREEN><=<RESET>b))
++((a<RED>><RESET><GREEN>>=<RESET>b))
++$((a<RED><<RESET><GREEN><<<RESET>b))
++$((a<RED>><RESET><GREEN>>><RESET>b))
++$((a<RED>&<RESET><GREEN>&&<RESET>b))
++$((a<RED>|<RESET><GREEN>||<RESET>b))
++${a<RED>:<RESET><GREEN>:-<RESET>b}
++${a<RED>:<RESET><GREEN>:=<RESET>b}
++${a<RED>:<RESET><GREEN>:+<RESET>b}
++${a<RED>:<RESET><GREEN>:?<RESET>b}
++${a<RED>#<RESET><GREEN>##<RESET>*/}
++${a<RED>%<RESET><GREEN>%%<RESET>.*}
++${a<RED>^<RESET><GREEN>^^<RESET>}
++${a<RED>,<RESET><GREEN>,,<RESET>}
++${<GREEN>!<RESET>a}
++${a[<RED>*<RESET><GREEN>@<RESET>]}
++${a<RED>:2:3<RESET><GREEN>:4:6<RESET>}
+ls <RED>-a<RESET><GREEN>-x<RESET>
+ls <RED>--a<RESET><GREEN>--x<RESET>
@@ t/t4034/bash/post (new)
+z=.75
+echo $USERNAME
+${HOMEDIR}
-+if [ "$x" == "$y" ] || [ "$x" != "$y" ]; then echo "OK"; fi
-+((x+=y))
-+((x-=y))
-+$((x<<y))
-+$((x>>y))
-+${x:-y}
-+${x:=y}
-+${x##*/}
-+${x%.*}
-+${x%%.*}
-+${x^^}
-+${x,}
-+${x,,}
-+${!x}
-+${x[@]}
-+${x:?error message}
-+${x:2:3}
++((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##*/}
++${a%%.*}
++${a^^}
++${a,,}
++${!a}
++${a[@]}
++${a:4:6}
+ls -x
+ls --x
@@ t/t4034/bash/pre (new)
+z=.5
+echo $USER
+${HOME}
-+if [ "$a" == "$b" ] || [ "$c" != "$d" ]; then echo "OK"; fi
-+((a+=b))
-+((a-=b))
-+$((a << b))
-+$((a >> b))
-+${a:-b}
-+${a:=b}
-+${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))
++$((a|b))
++${a:b}
++${a:b}
++${a:b}
++${a:b}
++${a#*/}
+${a%.*}
-+${a%%.*}
-+${a^^}
++${a^}
+${a,}
-+${a,,}
-+${!a}
-+${a[@]}
-+${a:?error message}
++${a}
++${a[*]}
+${a:2:3}
+ls -a
+ls --a
## userdiff.c ##
@@ userdiff.c: PATTERNS("bash",
+ "("
+ "("
+ /* POSIX identifier with mandatory parentheses */
+- "[a-zA-Z_][a-zA-Z0-9_]*[ \t]*\\([ \t]*\\))"
++ "([a-zA-Z_][a-zA-Z0-9_]*[ \t]*\\([ \t]*\\))"
+ "|"
/* Bashism identifier with optional parentheses */
- "(function[ \t]+[a-zA-Z_][a-zA-Z0-9_]*(([ \t]*\\([ \t]*\\))|([ \t]+))"
+- "(function[ \t]+[a-zA-Z_][a-zA-Z0-9_]*(([ \t]*\\([ \t]*\\))|([ \t]+))"
++ "(function[ \t]+[a-zA-Z_][a-zA-Z0-9_]*(([ \t]*\\([ \t]*\\))|([ \t]+)))"
")"
- /* Optional whitespace */
- "[ \t]*"
@@ userdiff.c: PATTERNS("bash",
+ /* Assignment and arithmetic operators */
+ "|[-+*/%&|^!=<>]=?"
+ /* Additional parameter expansion operators */
-+ "|:?=|:-|:\\+|:\\?|:|#|##|%|%%|/[a-zA-Z0-9_-]+|\\^\\^?|,|,,?|!|@|:[0-9]+(:[0-9]+)?"
++ "|:?=|:-|:\\+|:\\?|:|#|##|%|%%|\\^\\^?|,|,,?|!|@|:[0-9]+(:[0-9]+)?"
+ /* Command-line options (to avoid splitting -option) */
+ "|--?[a-zA-Z0-9_-]+"
+ /* Brackets and grouping symbols */