In December 2019,
     
      optional
                                    chaining
     
     went to
     
      TC39
                                    stage 4
     
     . Here is a regular expression to replace most instances of
     
      foo && foo.bar
     
     and
     
      baz && baz()
     
     with optional
                                chaining.
    
     Find:
     
      (\s)([.a-zA-Z]+) &&[\n\s]*(\2).?([^\s])
     
    
     Replace:
     
      $1$3?.$4
     
    
Before:
const t1 = callback && callback(result);
const t2 = filename && filename.lenght;
const t3 =
    error &&
    error.innerError &&
    error.innerError.code === 'invalid_token';After:
const t1 = callback?.(result);
const t2 = filename?.lenght;
const t3 =
    error?.innerError &&
    error.innerError.code === 'invalid_token';Isn't that nicer? Thank you TC39 and VS Code!
A further challenge is to find a regex that will cause the following replacement:
Before:
const t3 =
    error?.innerError &&
    error.innerError.code === 'invalid_token';After:
const t3 = error?.innerError?.code === 'invalid_token';Maybe someday.