<div dir="ltr">Hi,<div><br></div><div>I am just struggling around with tabs and new lines in TextDiagnostic.cpp. Right now, I am writing a clang-tidy check to transform </div><div><br></div><div>int a, b, c;</div><div>int k1 = 0, k2 = 0;</div><div><br></div><div>into</div><div><br></div><div>int a;</div><div>int b;</div><div>int c;</div><div><br></div><div>int k1 = 0;</div><div>int k2 = 0;</div><div><br></div><div>and came across some issues.</div><div><br></div><div><br></div><div>1. buildFixItInsertionLine ignores lines with \n or \r. Is there any specific reason not to show these lines (despite that everything is called Line and not Lines and probably not checked for Lines)?</div><div>2. I am getting odd results for lines containing multiple tabs: </div><div><br></div><div><br></div><div>Diag << FixItHint::CreateInsertion(..., "Hallo\tTab\tTab\tX"); // gets fired twice (for a,b,c and k1,k2 line)<br></div><div><br></div><div>==></div><div><br></div><div><div>Hallo...Tab.....Tab.....X</div><div>Hallo.......Tab.....Tab.....X</div></div><div><br></div><div><br></div><div>Seems to be that</div><div><br></div><div><div>static int bytesSincePreviousTabOrLineBegin(StringRef SourceLine, size_t i) {</div><div>  int bytes = 0;</div><div>  while (0<i) {</div><div>    if (SourceLine[--i]=='\t')</div><div>      break;</div><div>    ++bytes;</div><div>  }</div><div>  return bytes;</div><div>}</div></div><div><br></div><div>is guilty. As far as I can see, the prefix-decrement should be a postfix, thus SourceLine[i--]. Now the result is as expected:</div><div><br></div><div><div>Hallo........Tab........Tab........X</div><div>Hallo........Tab........Tab........X</div></div><div><br></div><div>Now, splitting up the declaration statement and keeping indentation, as Rewriter::InsertText(..indentNewLines=true) does, works well.</div><div><br></div><div>3. Are there any tests for TextDiagnostic.cpp? I could find one.</div><div><br></div><div><br></div></div>