clang 22.0.0git
DiagnosticRenderer.cpp File Reference
#include "clang/Frontend/DiagnosticRenderer.h"
#include "clang/Basic/Diagnostic.h"
#include "clang/Basic/DiagnosticOptions.h"
#include "clang/Basic/LLVM.h"
#include "clang/Basic/SourceLocation.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Edit/Commit.h"
#include "clang/Edit/EditedSource.h"
#include "clang/Edit/EditsReceiver.h"
#include "clang/Lex/Lexer.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cassert>
#include <iterator>
#include <utility>

Go to the source code of this file.

Functions

static void mergeFixits (ArrayRef< FixItHint > FixItHints, const SourceManager &SM, const LangOptions &LangOpts, SmallVectorImpl< FixItHint > &MergedFixits)
static SourceLocation retrieveMacroLocation (SourceLocation Loc, FileID MacroFileID, FileID CaretFileID, const SmallVectorImpl< FileID > &CommonArgExpansions, bool IsBegin, const SourceManager *SM, bool &IsTokenRange)
 A recursive function to trace all possible backtrace locations to match the CaretLocFileID.
static void getMacroArgExpansionFileIDs (SourceLocation Loc, SmallVectorImpl< FileID > &IDs, bool IsBegin, const SourceManager *SM)
 Walk up the chain of macro expansions and collect the FileIDs identifying the expansions.
static void computeCommonMacroArgExpansionFileIDs (SourceLocation Begin, SourceLocation End, const SourceManager *SM, SmallVectorImpl< FileID > &CommonArgExpansions)
 Collect the expansions of the begin and end locations and compute the set intersection.
static void mapDiagnosticRanges (FullSourceLoc CaretLoc, ArrayRef< CharSourceRange > Ranges, SmallVectorImpl< CharSourceRange > &SpellingRanges)
static bool rangesInsideSameMacroArgExpansion (FullSourceLoc Loc, ArrayRef< CharSourceRange > Ranges)
 A helper function to check if the current ranges are all inside the same macro argument expansion as Loc.

Function Documentation

◆ computeCommonMacroArgExpansionFileIDs()

void computeCommonMacroArgExpansionFileIDs ( SourceLocation Begin,
SourceLocation End,
const SourceManager * SM,
SmallVectorImpl< FileID > & CommonArgExpansions )
static

Collect the expansions of the begin and end locations and compute the set intersection.

Produces a sorted vector of FileIDs in CommonArgExpansions.

Definition at line 327 of file DiagnosticRenderer.cpp.

References getMacroArgExpansionFileIDs(), and SM.

Referenced by mapDiagnosticRanges().

◆ getMacroArgExpansionFileIDs()

void getMacroArgExpansionFileIDs ( SourceLocation Loc,
SmallVectorImpl< FileID > & IDs,
bool IsBegin,
const SourceManager * SM )
static

Walk up the chain of macro expansions and collect the FileIDs identifying the expansions.

Definition at line 311 of file DiagnosticRenderer.cpp.

References clang::SourceLocation::isMacroID(), and SM.

Referenced by computeCommonMacroArgExpansionFileIDs().

◆ mapDiagnosticRanges()

◆ mergeFixits()

◆ rangesInsideSameMacroArgExpansion()

bool rangesInsideSameMacroArgExpansion ( FullSourceLoc Loc,
ArrayRef< CharSourceRange > Ranges )
static

A helper function to check if the current ranges are all inside the same macro argument expansion as Loc.

Definition at line 457 of file DiagnosticRenderer.cpp.

References clang::SourceLocation::getLocWithOffset(), clang::FullSourceLoc::getManager(), clang::SourceLocation::isMacroID(), mapDiagnosticRanges(), and SM.

◆ retrieveMacroLocation()

SourceLocation retrieveMacroLocation ( SourceLocation Loc,
FileID MacroFileID,
FileID CaretFileID,
const SmallVectorImpl< FileID > & CommonArgExpansions,
bool IsBegin,
const SourceManager * SM,
bool & IsTokenRange )
static