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