xref: /llvm-project/clang/tools/libclang/CXLoadedDiagnostic.h (revision 3823395c9d715a1ed993eb13fc2bec97372f5655)
1 /*===-- CXLoadedDiagnostic.h - Handling of persisent diags ------*- C++ -*-===*\
2 |*                                                                            *|
3 |* Part of the LLVM Project, under the Apache License v2.0 with LLVM          *|
4 |* Exceptions.                                                                *|
5 |* See https://llvm.org/LICENSE.txt for license information.                  *|
6 |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception                    *|
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 <vector>
21 
22 namespace clang {
23 class CXLoadedDiagnostic : public CXDiagnosticImpl {
24 public:
CXLoadedDiagnostic()25   CXLoadedDiagnostic() : CXDiagnosticImpl(LoadedDiagnosticKind),
26     severity(0), category(0) {}
27 
28   ~CXLoadedDiagnostic() override;
29 
30   /// Return the severity of the diagnostic.
31   CXDiagnosticSeverity getSeverity() const override;
32 
33   /// Return the location of the diagnostic.
34   CXSourceLocation getLocation() const override;
35 
36   /// Return the spelling of the diagnostic.
37   CXString getSpelling() const override;
38 
39   /// Return the text for the diagnostic option.
40   CXString getDiagnosticOption(CXString *Disable) const override;
41 
42   /// Return the category of the diagnostic.
43   unsigned getCategory() const override;
44 
45   /// Return the category string of the diagnostic.
46   CXString getCategoryText() const override;
47 
48   /// Return the number of source ranges for the diagnostic.
49   unsigned getNumRanges() const override;
50 
51   /// Return the source ranges for the diagnostic.
52   CXSourceRange getRange(unsigned Range) const override;
53 
54   /// Return the number of FixIts.
55   unsigned getNumFixIts() const override;
56 
57   /// Return the FixIt information (source range and inserted text).
58   CXString getFixIt(unsigned FixIt,
59                     CXSourceRange *ReplacementRange) const override;
60 
classof(const CXDiagnosticImpl * D)61   static bool classof(const CXDiagnosticImpl *D) {
62     return D->getKind() == LoadedDiagnosticKind;
63   }
64 
65   /// Decode the CXSourceLocation into file, line, column, and offset.
66   static void decodeLocation(CXSourceLocation location,
67                              CXFile *file,
68                              unsigned *line,
69                              unsigned *column,
70                              unsigned *offset);
71 
72   struct Location {
73     CXFile file;
74     unsigned line = 0;
75     unsigned column = 0;
76     unsigned offset = 0;
77 
78     Location() = default;
79   };
80 
81   Location DiagLoc;
82 
83   std::vector<CXSourceRange> Ranges;
84   std::vector<std::pair<CXSourceRange, const char *> > FixIts;
85   const char *Spelling;
86   llvm::StringRef DiagOption;
87   llvm::StringRef CategoryText;
88   unsigned severity;
89   unsigned category;
90 };
91 }
92 
93 #endif
94