19void SourceMgrAdapter::handleDiag(
const llvm::SMDiagnostic &
Diag,
26 unsigned ErrorDiagID,
unsigned WarningDiagID,
29 : SrcMgr(
SM), Diagnostics(Diagnostics), ErrorDiagID(ErrorDiagID),
30 WarningDiagID(WarningDiagID), NoteDiagID(NoteDiagID),
31 DefaultFile(DefaultFile) {}
42 unsigned BufferID = LLVMSrcMgr.FindBufferContainingLoc(Loc);
47 auto Buffer = LLVMSrcMgr.getMemoryBuffer(BufferID);
48 auto KnownBuffer = FileIDMapping.find(std::make_pair(&LLVMSrcMgr, BufferID));
49 if (KnownBuffer == FileIDMapping.end()) {
56 DefaultFile = std::nullopt;
59 StringRef bufferName = Buffer->getBufferIdentifier();
60 auto bufferCopy = std::unique_ptr<llvm::MemoryBuffer>(
61 llvm::MemoryBuffer::getMemBufferCopy(Buffer->getBuffer(),
65 FileID = SrcMgr.createFileID(std::move(bufferCopy));
69 KnownBuffer = FileIDMapping
70 .insert(std::make_pair(
71 std::make_pair(&LLVMSrcMgr, BufferID),
FileID))
76 unsigned Offset = Loc.getPointer() - Buffer->getBufferStart();
77 return SrcMgr.getLocForStartOfFile(KnownBuffer->second)
78 .getLocWithOffset(Offset);
82 llvm::SMRange Range) {
91void SourceMgrAdapter::handleDiag(
const llvm::SMDiagnostic &
Diag) {
94 if (
auto *LLVMSrcMgr =
Diag.getSourceMgr())
98 StringRef Message =
Diag.getMessage();
102 switch (
Diag.getKind()) {
103 case llvm::SourceMgr::DK_Error:
104 DiagID = ErrorDiagID;
107 case llvm::SourceMgr::DK_Warning:
108 DiagID = WarningDiagID;
111 case llvm::SourceMgr::DK_Remark:
112 llvm_unreachable(
"remarks not implemented");
114 case llvm::SourceMgr::DK_Note:
122 if (
auto *LLVMSrcMgr =
Diag.getSourceMgr()) {
125 for (
auto Range :
Diag.getRanges()) {
131 for (
const llvm::SMFixIt &FixIt :
Diag.getFixIts()) {
Defines the Diagnostic-related interfaces.
static DiagnosticBuilder Diag(DiagnosticsEngine *Diags, const LangOptions &Features, FullSourceLoc TokLoc, const char *TokBegin, const char *TokRangeBegin, const char *TokRangeEnd, unsigned DiagID)
Produce a diagnostic highlighting some portion of a literal.
Represents a character-granular source range.
A little helper class used to produce diagnostics.
Concrete class used by the front-end to report problems and issues.
An opaque identifier used by SourceManager which refers to a source file (MemoryBuffer) along with it...
static FixItHint CreateReplacement(CharSourceRange RemoveRange, StringRef Code)
Create a code modification hint that replaces the given source range with the given code string.
Encodes a location in the source.
SourceLocation getLocWithOffset(IntTy Offset) const
Return a source location with the specified offset from this SourceLocation.
This class handles loading and caching of source files into memory.
SourceLocation mapLocation(const llvm::SourceMgr &LLVMSrcMgr, llvm::SMLoc Loc)
Map a source location in the given LLVM source manager to its corresponding location in the Clang sou...
SourceRange mapRange(const llvm::SourceMgr &LLVMSrcMgr, llvm::SMRange Range)
Map a source range in the given LLVM source manager to its corresponding range in the Clang source ma...
SourceMgrAdapter(SourceManager &SM, DiagnosticsEngine &Diagnostics, unsigned ErrorDiagID, unsigned WarningDiagID, unsigned NoteDiagID, OptionalFileEntryRef DefaultFile=std::nullopt)
Create a new SourceMgr adaptor that maps to the given source manager and diagnostics engine.
A trivial tuple used to represent a source range.
The JSON file list parser is used to communicate input to InstallAPI.
CustomizableOptional< FileEntryRef > OptionalFileEntryRef