1 /*===-- CXLoadedDiagnostic.h - Handling of persisent diags ------*- C++ -*-===*\ 2 |* *| 3 |* The LLVM Compiler Infrastructure *| 4 |* *| 5 |* This file is distributed under the University of Illinois Open Source *| 6 |* License. See LICENSE.TXT for details. *| 7 |* *| 8 |*===----------------------------------------------------------------------===*| 9 |* *| 10 |* Implements handling of persisent diagnostics. *| 11 |* *| 12 \*===----------------------------------------------------------------------===*/ 13 14 #ifndef LLVM_CLANG_TOOLS_LIBCLANG_CXLOADEDDIAGNOSTIC_H 15 #define LLVM_CLANG_TOOLS_LIBCLANG_CXLOADEDDIAGNOSTIC_H 16 17 #include "CIndexDiagnostic.h" 18 #include "llvm/ADT/StringRef.h" 19 #include "clang/Basic/LLVM.h" 20 #include <string> 21 #include <vector> 22 23 namespace clang { 24 class CXLoadedDiagnostic : public CXDiagnosticImpl { 25 public: CXLoadedDiagnostic()26 CXLoadedDiagnostic() : CXDiagnosticImpl(LoadedDiagnosticKind), 27 severity(0), category(0) {} 28 29 ~CXLoadedDiagnostic() override; 30 31 /// \brief Return the severity of the diagnostic. 32 CXDiagnosticSeverity getSeverity() const override; 33 34 /// \brief Return the location of the diagnostic. 35 CXSourceLocation getLocation() const override; 36 37 /// \brief Return the spelling of the diagnostic. 38 CXString getSpelling() const override; 39 40 /// \brief Return the text for the diagnostic option. 41 CXString getDiagnosticOption(CXString *Disable) const override; 42 43 /// \brief Return the category of the diagnostic. 44 unsigned getCategory() const override; 45 46 /// \brief Return the category string of the diagnostic. 47 CXString getCategoryText() const override; 48 49 /// \brief Return the number of source ranges for the diagnostic. 50 unsigned getNumRanges() const override; 51 52 /// \brief Return the source ranges for the diagnostic. 53 CXSourceRange getRange(unsigned Range) const override; 54 55 /// \brief Return the number of FixIts. 56 unsigned getNumFixIts() const override; 57 58 /// \brief Return the FixIt information (source range and inserted text). 59 CXString getFixIt(unsigned FixIt, 60 CXSourceRange *ReplacementRange) const override; 61 classof(const CXDiagnosticImpl * D)62 static bool classof(const CXDiagnosticImpl *D) { 63 return D->getKind() == LoadedDiagnosticKind; 64 } 65 66 /// \brief Decode the CXSourceLocation into file, line, column, and offset. 67 static void decodeLocation(CXSourceLocation location, 68 CXFile *file, 69 unsigned *line, 70 unsigned *column, 71 unsigned *offset); 72 73 struct Location { 74 CXFile file; 75 unsigned line; 76 unsigned column; 77 unsigned offset; 78 LocationLocation79 Location() : line(0), column(0), offset(0) {} 80 }; 81 82 Location DiagLoc; 83 84 std::vector<CXSourceRange> Ranges; 85 std::vector<std::pair<CXSourceRange, const char *> > FixIts; 86 const char *Spelling; 87 llvm::StringRef DiagOption; 88 llvm::StringRef CategoryText; 89 unsigned severity; 90 unsigned category; 91 }; 92 } 93 94 #endif 95