Am 29.04.22 um 14:33 schrieb Jack Adrian Zappa: > So, I have a regex to select words so that I can focus on the actual > changes. But then I noticed that it did something weird. It grouped > some parenthesis with another word. I generated a minimal example for > that line and it was reproducible. > > Before: > var result = ((res.State == ResultState.Succeeded) && > string.IsNullOrEmpty(res.ErrorCode) )? (byte)0 : (byte)1; > > After: > var result = res.State == ResultState.Succeeded ? (byte)0 : (byte)1; > > Diff: > $ git diff2 --no-index b a > warning: LF will be replaced by CRLF in b. > The file will have its original line endings in your working directory > warning: LF will be replaced by CRLF in a. > The file will have its original line endings in your working directory > diff --git a/b b/a > index 4e3604a8e..619d21e4e 100644 > --- a/b > +++ b/a > @@ -1 +1 @@ > var result = [-((res-]{+res+}.State == ResultState.Succeeded[-) && > string.IsNullOrEmpty(res.ErrorCode) )-] ? (byte)0 : (byte)1; > > I tried to make a smaller example and it didn't cause the issue. > > Before: > var abc = ((xyz.Stuff == other_stuff) && stuff.yay(question) ? yes : no; > > After: > var abc = xyz.Stuff == other_stuff ? yes : no; > > Diff: > $ git diff2 --no-index b a > warning: LF will be replaced by CRLF in b. > The file will have its original line endings in your working directory > warning: LF will be replaced by CRLF in a. > The file will have its original line endings in your working directory > diff --git a/b b/a > index df18ca34e..1024d6b68 100644 > --- a/b > +++ b/a > @@ -1 +1 @@ > var abc =[-((-] xyz.Stuff == other_stuff[-) && stuff.yay(question)-] ? yes : no; > > So, my question is, what's going on here? > > The alias is as follows: > diff2 = diff --color=always --ignore-space-change > '--word-diff-regex=((\\r\\n?|\\n\\r?)[\\t > ]*)?([a-zA-Z_][a-zA-Z_0-9]*|0([xX]([0-9][a-fA-F])+|[0-7]+|[bB][01]+)|[1-9][0-9]*(\\.[0-9]+)?([eE][0-9]+|[pP][0-9a-fA-F])?|\\S)(\\r\\n?|\\n\\r?)?' > -p I am a bit reluctant to diagnose what exactly is happening here because your word regex is outside the design space. It is definitely not a good idea to declare whitespace and even line breaks as part of a word. And in fact, when you remove the trailing (\\r\\n?|\\n\\r?)?, you get a more sensible word diff: var result =[-((-] resx.State == ResultState.Succeeded[-) &&-] [-string.IsNullOrEmpty(res.ErrorCode) )-] ? (byte)0 : (byte)1; But if I were you, I would remove all subexpressions that match any form of whitespace. -- Hannes