<div dir="ltr"><div>Running check-clang-misc gives me an error for tabstop.c. The postfix doesn't seem right and messes around with the tabstop. So,</div><div><br></div><div><span style="font-size:12.8px">"Hallo...Tab.....Tab.....X" was right and</span></div><div><span style="font-size:12.8px">"</span><span style="font-size:12.8px">Hallo........Tab........Tab...</span><wbr style="font-size:12.8px"><span style="font-size:12.8px">.....X" wrong, since tabstop is default 8.</span><br></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px"><></span></div><div><div style="font-size:12.8px">Hallo...Tab.....Tab.....X</div><div style="font-size:12.8px">Hallo.......Tab.....Tab.....X</div></div><div><span style="font-size:12.8px"><></span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">Is also correct, since the messages are fired at different indentation levels. So, after I made a complete turn, how do I display a multi-line diagnostic and FixItHint.<br></span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">I have:</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">DeclStmt declstmt: </span><span style="font-size:12.8px">int a, b, c;</span></div><div><span style="font-size:12.8px">std::string allSingleDecls = "int a;\nint b;\nint c;";   // <<--- necessary whitespaces to keep indentation might be inserted</span></div><div><span style="font-size:12.8px"><br></span></div><div><div><span style="font-size:12.8px">auto Diag = diag(declStmt->getSourceRange().getBegin(), "declaration statement can be split up into single line declarations");</span></div><div><span style="font-size:12.8px">Diag << FixItHint::CreateReplacement(declStmt->getSourceRange(), </span><span style="font-size:12.8px">allSingleDecls</span><span style="font-size:12.8px">);</span></div></div><div><span style="font-size:12.8px"><br></span></div><div>The FixIt is applied correct to the source file with -fix, but I would like to see a nice diagnostic-output as well.</div><div><br></div><div>Thanks.</div></div><div class="gmail_extra"><br><div class="gmail_quote">2016-11-02 19:34 GMT+01:00 Firat Kasmis <span dir="ltr"><<a href="mailto:firat.kasmis@gmail.com" target="_blank">firat.kasmis@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><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(...<wbr>, "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 bytesSincePreviousTabOrLineBeg<wbr>in(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...<wbr>.....X</div><div>Hallo........Tab........Tab...<wbr>.....X</div></div><div><br></div><div>Now, splitting up the declaration statement and keeping indentation, as Rewriter::InsertText(..<wbr>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>
</blockquote></div><br></div>