// Get a "file:line:column" source location string. static std::string getSourceLocationString(clang::Preprocessor &PP, clang::SourceLocation Loc) { if (Loc.isInvalid()) return std::string("(none)"); if (Loc.isFileID()) { clang::PresumedLoc PLoc = PP.getSourceManager().getPresumedLoc(Loc); if (PLoc.isInvalid()) { return std::string("(invalid)"); } std::string Str; llvm::raw_string_ostream SS(Str); // The macro expansion and spelling pos is identical for file locs. SS << "\"" << PLoc.getFilename() << ':' << PLoc.getLine() << ':' << PLoc.getColumn() << "\""; std::string Result = SS.str(); // YAML treats backslash as escape, so use forward slashes. std::replace(Result.begin(), Result.end(), '\\', '/'); return Result; } return std::string("(nonfile)"); }
// Append a SourceLocation argument to the top trace item. void PPCallbacksTracker::appendArgument(const char *Name, clang::SourceLocation Value) { if (Value.isInvalid()) { appendArgument(Name, "(invalid)"); return; } appendArgument(Name, getSourceLocationString(PP, Value).c_str()); }
bool ClangTidyMisraCheck::isIgnored(clang::SourceLocation loc) { if (loc.isInvalid()) { return IgnoreInvalidLocations; } if (isBuiltIn(loc)) { return IgnoreBuiltInLocations; } if (isCommandLine(loc)) { return IgnoreCommandLineLocations; } return false; }
void ClangCommentPrinter::updateLastEntityLine(clang::SourceLocation Loc) { if (Loc.isInvalid()) return; const auto &Ctx = ClangLoader.getClangASTContext(); const auto &SM = Ctx.getSourceManager(); unsigned LineNo = SM.getSpellingLineNumber(Loc); clang::FileID FID = SM.getFileID(Loc); if (FID.isInvalid()) return; updateLastEntityLine(FID, LineNo); }