[PATCH v7 0/1] Updated the word diff regex for Bash scripts
- From
Moumita <dhar61595@gmail.com>
- Date
- May 16, 2025, 14:45 UTC
- Message-ID
- <20250516144515.49514-1-dhar61595@gmail.com>
- In-Reply-To
- <20250511141101.18450-1-dhar61595@gmail.com>
I cleaned up the parameter expansion regexes to avoid matching single-character operators like `:` or `#` that are already tokenized. I also removed the `:[0-9]+(:[0-9]+)?` pattern, which didn’t have a clear use case. Variable matching now supports `$1`, `$2`, etc., not just `$foo`, by relaxing the first character requirement after the `$`. Also I removed the '?' after the second character of double character operators. There are two test files in t/4018 which test the capturing of the complete line in the hunk header in the cases of both posix style functions and bash style functions.
Moumita Dhar (1): userdiff: extend Bash pattern to cover more shell function forms
.../bash-bashism-style-complete-line-capture | 4 +++ .../bash-posix-style-complete-line-capture | 4 +++ .../bash-posix-style-single-command-function | 3 ++ t/t4034-diff-words.sh | 1 + t/t4034/bash/expect | 36 +++++++++++++++++++ t/t4034/bash/post | 31 ++++++++++++++++ t/t4034/bash/pre | 31 ++++++++++++++++ userdiff.c | 26 +++++++++----- 8 files changed, 128 insertions(+), 8 deletions(-) create mode 100644 t/t4018/bash-bashism-style-complete-line-capture create mode 100644 t/t4018/bash-posix-style-complete-line-capture 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 v6:
1: 464cb8a1eb ! 1: 314ac45fa2 userdiff: extend Bash pattern to cover more shell function forms
@@ Commit message
Signed-off-by: Moumita Dhar <dhar61595@gmail.com>
- ## t/t4018/bash-bashism-style-multiline-function (new) ##
+ ## t/t4018/bash-bashism-style-complete-line-capture (new) ##
@@
-+function RIGHT \
-+{
++function myfunc # RIGHT
++{
+ echo 'ChangeMe'
+}
- ## t/t4018/bash-hunk-header-complete-line-capture (new) ##
+ ## t/t4018/bash-posix-style-complete-line-capture (new) ##
@@
+func() { # RIGHT
+
+ ChangeMe
-+}
-
- ## t/t4018/bash-posix-style-multiline-function (new) ##
-@@
-+RIGHT() \
-+{
-+ ChangeMe
+}
## t/t4018/bash-posix-style-single-command-function (new) ##
@@ t/t4034/bash/expect (new)
+<BOLD>index 09ac008..60ba6a2 100644<RESET>
+<BOLD>--- a/pre<RESET>
+<BOLD>+++ b/post<RESET>
-+<CYAN>@@ -1,33 +1,33 @@<RESET>
++<CYAN>@@ -1,31 +1,31 @@<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>$1<RESET><GREEN>$2<RESET>
+echo <RED>$USER<RESET><GREEN>$USERNAME<RESET>
+${<RED>HOME<RESET><GREEN>HOMEDIR<RESET>}
+((a<RED>+<RESET><GREEN>+=<RESET>b))
@@ t/t4034/bash/expect (new)
+${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>
++ls <RED>--all<RESET><GREEN>--color<RESET>
## t/t4034/bash/post (new) ##
@@
+new_var=10
+x=456
-+y=2.71
-+z=.75
++echo $2
+echo $USERNAME
+${HOMEDIR}
+((a+=b))
@@ t/t4034/bash/post (new)
+${a,,}
+${!a}
+${a[@]}
-+${a:4:6}
+ls -x
-+ls --x
++ls --color
## t/t4034/bash/pre (new) ##
@@
+my_var=10
+x=123
-+y=3.14
-+z=.5
++echo $1
+echo $USER
+${HOME}
+((a+b))
@@ t/t4034/bash/pre (new)
+${a,}
+${a}
+${a[*]}
-+${a:2:3}
+ls -a
-+ls --a
++ls --all
## userdiff.c ##
@@ userdiff.c: PATTERNS("bash",
@@ userdiff.c: PATTERNS("bash",
- "[^ \t]+"),
+ /* Identifiers: variable and function names */
+ "[a-zA-Z_][a-zA-Z0-9_]*"
-+ /* Numeric constants: integers and decimals */
-+ "|[0-9]+(\\.[0-9]*)?|[-+]?\\.[0-9]+"
+ /* Shell variables: $VAR, ${VAR} */
-+ "|\\$[a-zA-Z_][a-zA-Z0-9_]*|\\$\\{"
-+ /* Logical and comparison operators */
-+ "|\\|\\||&&|<<|>>|==|!=|<=|>="
-+ /* Assignment and arithmetic operators */
-+ "|[-+*/%&|^!=<>]=?"
++ "|\\$[a-zA-Z0-9_]+|\\$\\{"
++ /*Command list separators and redirection operators */
++ "|\\|\\||&&|<<|>>"
++ /* Operators ending in '=' (comparison + compound assignment) */
++ "|==|!=|<=|>=|[-+*/%&|^]="
+ /* Additional parameter expansion operators */
-+ "|:?=|:-|:\\+|:\\?|:|#|##|%|%%|\\^\\^?|,|,,?|!|@|:[0-9]+(:[0-9]+)?"
++ "|:=|:-|:\\+|:\\?|##|%%|\\^\\^|,,"
+ /* Command-line options (to avoid splitting -option) */
-+ "|--?[a-zA-Z0-9_-]+"
++ "|[-a-zA-Z0-9_]+"
+ /* Brackets and grouping symbols */
+ "|\\(|\\)|\\{|\\}|\\[|\\]"),
PATTERNS("bibtex",-- 2.48.0