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

[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
Previous: Johannes SixtNext: Moumita
Message 34 of 37 in “[GSOC 2025] [Newbie] userdiff: add built-in pattern for shell scripts”
  1. 0/1 [GSOC 2025] [Newbie] userdiff: add built-in pattern for shell scriptsMoumita, Feb 11, 2025
  2. 1/1 Added built in function recognition for shellMoumita, Feb 11, 2025
  3. Johannes SixtFeb 15, 2025
  4. 0/1 [PATCH v2 0/1] [GSOC 2025] [Newbie] userdiff: add built-in pattern for shell scriptsMoumita, Feb 18, 2025
  5. 1/1 userdiff: extend Bash pattern to cover more shell function formsMoumita, Feb 18, 2025
  6. Junio C HamanoFeb 18, 2025
  7. Johannes SixtFeb 22, 2025
  8. Junio C HamanoFeb 24, 2025
  9. Junio C HamanoFeb 18, 2025
  10. Johannes SixtFeb 22, 2025
  11. Eric SunshineFeb 18, 2025
  12. 0/1 userdiff: improve Bash function and word regex patternsMoumita, Mar 28, 2025
  13. 1/1 userdiff: extend Bash pattern to cover more shell function formsMoumita, Mar 28, 2025
  14. Junio C HamanoMar 29, 2025
  15. MOUMITA DHARMar 30, 2025
  16. 0/1 [GSOC] userdiff:Added newlines at the end of the test casesMoumita, Mar 30, 2025
  17. 1/1 [GSOC] userdiff: extend Bash pattern to cover more shell function formsMoumita, Mar 30, 2025
  18. Junio C HamanoMay 2, 2025
  19. Johannes SixtMay 6, 2025
  20. MOUMITA DHARMay 10, 2025
  21. Johannes SixtMay 10, 2025
  22. 0/1 Added the closing ")" to make sure is not unbalanced and corrected the tests for word diffMoumita, May 11, 2025
  23. 1/1 userdiff: extend Bash pattern to cover more shell function formsMoumita, May 11, 2025
  24. Moumita, May 11, 2025
  25. Moumita, May 11, 2025
  26. Moumita, May 11, 2025
  27. 0/1 Added the newline after the test in t/4018Moumita, May 11, 2025
  28. 1/1 userdiff: extend Bash pattern to cover more shell function formsMoumita, May 11, 2025
  29. Junio C HamanoMay 13, 2025
  30. MOUMITA DHARMay 14, 2025
  31. Johannes SixtMay 16, 2025
  32. Junio C HamanoMay 17, 2025
  33. Johannes SixtMay 18, 2025
  34. 0/1 Updated the word diff regex for Bash scriptsMoumita, May 16, 2025
  35. 1/1 userdiff: extend Bash pattern to cover more shell function formsMoumita, May 16, 2025
  36. Johannes SixtMay 16, 2025
  37. Junio C HamanoMay 16, 2025

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.