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_CINDEX_LOADED_DIAGNOSTIC_H 15#define LLVM_CLANG_CINDEX_LOADED_DIAGNOSTIC_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 23namespace clang { 24class CXLoadedDiagnostic : public CXDiagnosticImpl { 25public: 26 CXLoadedDiagnostic() : CXDiagnosticImpl(LoadedDiagnosticKind), 27 severity(0), category(0) {} 28 29 virtual ~CXLoadedDiagnostic(); 30 31 /// \brief Return the severity of the diagnostic. 32 virtual CXDiagnosticSeverity getSeverity() const; 33 34 /// \brief Return the location of the diagnostic. 35 virtual CXSourceLocation getLocation() const; 36 37 /// \brief Return the spelling of the diagnostic. 38 virtual CXString getSpelling() const; 39 40 /// \brief Return the text for the diagnostic option. 41 virtual CXString getDiagnosticOption(CXString *Disable) const; 42 43 /// \brief Return the category of the diagnostic. 44 virtual unsigned getCategory() const; 45 46 /// \brief Return the category string of the diagnostic. 47 virtual CXString getCategoryText() const; 48 49 /// \brief Return the number of source ranges for the diagnostic. 50 virtual unsigned getNumRanges() const; 51 52 /// \brief Return the source ranges for the diagnostic. 53 virtual CXSourceRange getRange(unsigned Range) const; 54 55 /// \brief Return the number of FixIts. 56 virtual unsigned getNumFixIts() const; 57 58 /// \brief Return the FixIt information (source range and inserted text). 59 virtual CXString getFixIt(unsigned FixIt, 60 CXSourceRange *ReplacementRange) const; 61 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 79 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