On Fri, Jun 8, 2012 at 2:14 PM, Jordan Rose <[email protected]> wrote:
> Author: jrose > Date: Fri Jun 8 16:14:19 2012 > New Revision: 158229 > > URL: http://llvm.org/viewvc/llvm-project?rev=158229&view=rev > Log: > If fixits appear to overlap, move the second one over in the output. > > This occurs when you have two insertions and the first one is so long that > the > second fixit's column is before the first fixit ends. The edits themselves > don't actually overlap, but our command-line preview does. > Can you use FileCheck to write a test case please? > > Modified: > cfe/trunk/lib/Frontend/TextDiagnostic.cpp > > Modified: cfe/trunk/lib/Frontend/TextDiagnostic.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/TextDiagnostic.cpp?rev=158229&r1=158228&r2=158229&view=diff > > ============================================================================== > --- cfe/trunk/lib/Frontend/TextDiagnostic.cpp (original) > +++ cfe/trunk/lib/Frontend/TextDiagnostic.cpp Fri Jun 8 16:14:19 2012 > @@ -1090,6 +1090,7 @@ > std::string FixItInsertionLine; > if (Hints.empty() || !DiagOpts.ShowFixits) > return FixItInsertionLine; > + unsigned PrevHintEnd = 0; > > for (ArrayRef<FixItHint>::iterator I = Hints.begin(), E = Hints.end(); > I != E; ++I) { > @@ -1107,6 +1108,16 @@ > assert(HintColNo<static_cast<unsigned>(map.bytes())+1); > HintColNo = map.byteToColumn(HintColNo); > > + // If we inserted a long previous hint, push this one forwards, > and add > + // an extra space to show that this is not part of the previous > + // completion. This is sort of the best we can do when two hints > appear > + // to overlap. > + // > + // Note that if this hint is located immediately after the > previous > + // hint, no space will be added, since the location is more > important. > + if (HintColNo < PrevHintEnd) > + HintColNo = PrevHintEnd + 1; > + > // FIXME: if the fixit includes tabs or other characters that do > not > // take up a single column per byte when displayed then > // I->CodeToInsert.size() is not a column number and we're mixing > @@ -1115,19 +1126,16 @@ > unsigned LastColumnModified > = HintColNo + I->CodeToInsert.size(); > > - if (LastColumnModified > static_cast<unsigned>(map.bytes())) { > - unsigned LastExistingColumn = map.byteToColumn(map.bytes()); > - unsigned AddedColumns = LastColumnModified-LastExistingColumn; > - LastColumnModified = LastExistingColumn + AddedColumns; > - } else { > + if (LastColumnModified <= static_cast<unsigned>(map.bytes())) > LastColumnModified = map.byteToColumn(LastColumnModified); > - } > > if (LastColumnModified > FixItInsertionLine.size()) > FixItInsertionLine.resize(LastColumnModified, ' '); > assert(HintColNo+I->CodeToInsert.size() <= > FixItInsertionLine.size()); > std::copy(I->CodeToInsert.begin(), I->CodeToInsert.end(), > FixItInsertionLine.begin() + HintColNo); > + > + PrevHintEnd = LastColumnModified; > } else { > FixItInsertionLine.clear(); > break; > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
