Skip to content

Commit

Permalink
[clang][Diagnostics][NFC] Don't create oversized CaretLine
Browse files Browse the repository at this point in the history
Instead of creating a CaretLine the size of the SourceLine, just leave
it empty at first, let HighlightRange resize it to fit all the ~, then
resize it to fit the ^. Then we can save ourselves the work to remove
the trailing whitespace again.

Differential Revision: https://reviews.llvm.org/D151286
  • Loading branch information
tbaederr committed May 31, 2023
1 parent 96816a1 commit 0157815
Showing 1 changed file with 4 additions and 12 deletions.
16 changes: 4 additions & 12 deletions clang/lib/Frontend/TextDiagnostic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1199,20 +1199,16 @@ void TextDiagnostic::emitSnippetAndCaret(
// Build the byte to column map.
const SourceColumnMap sourceColMap(SourceLine, DiagOpts->TabStop);

// Create a line for the caret that is filled with spaces that is the same
// number of columns as the line of source code.
std::string CaretLine(sourceColMap.columns(), ' ');

std::string CaretLine;
// Highlight all of the characters covered by Ranges with ~ characters.
for (const auto &I : Ranges)
highlightRange(I, LineNo, FID, sourceColMap, CaretLine, SM, LangOpts);

// Next, insert the caret itself.
if (CaretLineNo == LineNo) {
CaretColNo = sourceColMap.byteToContainingColumn(CaretColNo - 1);
if (CaretLine.size() < CaretColNo + 1)
CaretLine.resize(CaretColNo + 1, ' ');
CaretLine[CaretColNo] = '^';
size_t Col = sourceColMap.byteToContainingColumn(CaretColNo - 1);
CaretLine.resize(std::max(Col + 1, CaretLine.size()), ' ');
CaretLine[Col] = '^';
}

std::string FixItInsertionLine = buildFixItInsertionLine(
Expand All @@ -1234,10 +1230,6 @@ void TextDiagnostic::emitSnippetAndCaret(
CaretLine = ' ' + CaretLine;
}

// Finally, remove any blank spaces from the end of CaretLine.
while (!CaretLine.empty() && CaretLine[CaretLine.size() - 1] == ' ')
CaretLine.erase(CaretLine.end() - 1);

// Emit what we have computed.
emitSnippet(SourceLine, MaxLineNoDisplayWidth, DisplayLineNo);

Expand Down

0 comments on commit 0157815

Please sign in to comment.