123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- /*===-- CIndexDiagnostic.h - Diagnostics C Interface ------------*- C++ -*-===*\
- |* *|
- |* Part of the LLVM Project, under the Apache License v2.0 with LLVM *|
- |* Exceptions. *|
- |* See https://llvm.org/LICENSE.txt for license information. *|
- |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception *|
- |* *|
- |*===----------------------------------------------------------------------===*|
- |* *|
- |* Implements the diagnostic functions of the Clang C interface. *|
- |* *|
- \*===----------------------------------------------------------------------===*/
- #ifndef LLVM_CLANG_TOOLS_LIBCLANG_CINDEXDIAGNOSTIC_H
- #define LLVM_CLANG_TOOLS_LIBCLANG_CINDEXDIAGNOSTIC_H
- #include "clang-c/Index.h"
- #include <memory>
- #include <vector>
- #include <assert.h>
- namespace clang {
- class LangOptions;
- class StoredDiagnostic;
- class CXDiagnosticImpl;
-
- class CXDiagnosticSetImpl {
- std::vector<std::unique_ptr<CXDiagnosticImpl>> Diagnostics;
- const bool IsExternallyManaged;
- public:
- CXDiagnosticSetImpl(bool isManaged = false)
- : IsExternallyManaged(isManaged) {}
- virtual ~CXDiagnosticSetImpl();
- size_t getNumDiagnostics() const {
- return Diagnostics.size();
- }
-
- CXDiagnosticImpl *getDiagnostic(unsigned i) const {
- assert(i < getNumDiagnostics());
- return Diagnostics[i].get();
- }
- void appendDiagnostic(std::unique_ptr<CXDiagnosticImpl> D);
- bool empty() const {
- return Diagnostics.empty();
- }
-
- bool isExternallyManaged() const { return IsExternallyManaged; }
- };
- class CXDiagnosticImpl {
- public:
- enum Kind { StoredDiagnosticKind, LoadedDiagnosticKind,
- CustomNoteDiagnosticKind };
-
- virtual ~CXDiagnosticImpl();
-
- /// Return the severity of the diagnostic.
- virtual CXDiagnosticSeverity getSeverity() const = 0;
-
- /// Return the location of the diagnostic.
- virtual CXSourceLocation getLocation() const = 0;
- /// Return the spelling of the diagnostic.
- virtual CXString getSpelling() const = 0;
- /// Return the text for the diagnostic option.
- virtual CXString getDiagnosticOption(CXString *Disable) const = 0;
-
- /// Return the category of the diagnostic.
- virtual unsigned getCategory() const = 0;
- /// Return the category string of the diagnostic.
- virtual CXString getCategoryText() const = 0;
- /// Return the number of source ranges for the diagnostic.
- virtual unsigned getNumRanges() const = 0;
-
- /// Return the source ranges for the diagnostic.
- virtual CXSourceRange getRange(unsigned Range) const = 0;
- /// Return the number of FixIts.
- virtual unsigned getNumFixIts() const = 0;
- /// Return the FixIt information (source range and inserted text).
- virtual CXString getFixIt(unsigned FixIt,
- CXSourceRange *ReplacementRange) const = 0;
- Kind getKind() const { return K; }
-
- CXDiagnosticSetImpl &getChildDiagnostics() {
- return ChildDiags;
- }
-
- protected:
- CXDiagnosticImpl(Kind k) : K(k) {}
- CXDiagnosticSetImpl ChildDiags;
- void append(std::unique_ptr<CXDiagnosticImpl> D) {
- ChildDiags.appendDiagnostic(std::move(D));
- }
-
- private:
- Kind K;
- };
-
- /// The storage behind a CXDiagnostic
- struct CXStoredDiagnostic : public CXDiagnosticImpl {
- const StoredDiagnostic &Diag;
- const LangOptions &LangOpts;
-
- CXStoredDiagnostic(const StoredDiagnostic &Diag,
- const LangOptions &LangOpts)
- : CXDiagnosticImpl(StoredDiagnosticKind),
- Diag(Diag), LangOpts(LangOpts) { }
- ~CXStoredDiagnostic() override {}
- /// Return the severity of the diagnostic.
- CXDiagnosticSeverity getSeverity() const override;
- /// Return the location of the diagnostic.
- CXSourceLocation getLocation() const override;
- /// Return the spelling of the diagnostic.
- CXString getSpelling() const override;
- /// Return the text for the diagnostic option.
- CXString getDiagnosticOption(CXString *Disable) const override;
- /// Return the category of the diagnostic.
- unsigned getCategory() const override;
- /// Return the category string of the diagnostic.
- CXString getCategoryText() const override;
- /// Return the number of source ranges for the diagnostic.
- unsigned getNumRanges() const override;
- /// Return the source ranges for the diagnostic.
- CXSourceRange getRange(unsigned Range) const override;
- /// Return the number of FixIts.
- unsigned getNumFixIts() const override;
- /// Return the FixIt information (source range and inserted text).
- CXString getFixIt(unsigned FixIt,
- CXSourceRange *ReplacementRange) const override;
- static bool classof(const CXDiagnosticImpl *D) {
- return D->getKind() == StoredDiagnosticKind;
- }
- };
- namespace cxdiag {
- CXDiagnosticSetImpl *lazyCreateDiags(CXTranslationUnit TU,
- bool checkIfChanged = false);
- } // end namespace cxdiag
- } // end namespace clang
- #endif
|