mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-14 11:39:35 +00:00
Improve HTMLDiagnostics by understanding the "Below" hint.
llvm-svn: 50783
This commit is contained in:
parent
d054e15fe3
commit
e6d2419351
@ -285,25 +285,39 @@ void HTMLDiagnostics::HandlePiece(Rewriter& R,
|
||||
SourceManager& SM = R.getSourceMgr();
|
||||
FullSourceLoc LPos = Pos.getLogicalLoc();
|
||||
unsigned FileID = SM.getCanonicalFileID(LPos.getLocation());
|
||||
|
||||
|
||||
assert (&LPos.getManager() == &SM && "SourceManagers are different!");
|
||||
|
||||
if (!SM.isFromMainFile(LPos.getLocation()))
|
||||
return;
|
||||
|
||||
const llvm::MemoryBuffer *Buf = SM.getBuffer(FileID);
|
||||
const char* FileStart = Buf->getBufferStart();
|
||||
|
||||
|
||||
// Compute the column number. Rewind from the current position to the start
|
||||
// of the line.
|
||||
|
||||
unsigned ColNo = LPos.getColumnNumber();
|
||||
const char *TokLogicalPtr = LPos.getCharacterData();
|
||||
const char *LineStart = TokLogicalPtr-ColNo;
|
||||
|
||||
// Only compute LineEnd if we display below a line.
|
||||
const char *LineEnd = TokLogicalPtr;
|
||||
|
||||
if (P.getDisplayHint() == PathDiagnosticPiece::Below) {
|
||||
const char* FileEnd = Buf->getBufferEnd();
|
||||
|
||||
while (*LineEnd != '\n' && LineEnd != FileEnd)
|
||||
++LineEnd;
|
||||
}
|
||||
|
||||
// Compute the margin offset by counting tabs and non-tabs.
|
||||
|
||||
unsigned PosNo = 0;
|
||||
|
||||
for (const char* c = LineStart; c != TokLogicalPtr; ++c)
|
||||
PosNo += *c == '\t' ? 4 : 1;
|
||||
PosNo += *c == '\t' ? 8 : 1;
|
||||
|
||||
// Create the html for the message.
|
||||
|
||||
@ -327,11 +341,20 @@ void HTMLDiagnostics::HandlePiece(Rewriter& R,
|
||||
|
||||
// Insert the new html.
|
||||
|
||||
const llvm::MemoryBuffer *Buf = SM.getBuffer(FileID);
|
||||
const char* FileStart = Buf->getBufferStart();
|
||||
unsigned DisplayPos = 0;
|
||||
|
||||
R.InsertStrBefore(SourceLocation::getFileLoc(FileID, LineStart - FileStart),
|
||||
os.str());
|
||||
switch (P.getDisplayHint()) {
|
||||
case PathDiagnosticPiece::Above:
|
||||
DisplayPos = LineStart - FileStart;
|
||||
break;
|
||||
case PathDiagnosticPiece::Below:
|
||||
DisplayPos = LineEnd - FileStart;
|
||||
break;
|
||||
default:
|
||||
assert (false && "Unhandled hint.");
|
||||
}
|
||||
|
||||
R.InsertStrBefore(SourceLocation::getFileLoc(FileID, DisplayPos), os.str());
|
||||
|
||||
// Now highlight the ranges.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user