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)