Viewing file: Diagnostic.h (3.78 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
//===--- Diagnostic.h - Framework for clang diagnostics tools --*- 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 // //===----------------------------------------------------------------------===// // // \file // Structures supporting diagnostics and refactorings that span multiple // translation units. Indicate diagnostics reports and replacements // suggestions for the analyzed sources. // //===----------------------------------------------------------------------===//
#ifndef LLVM_CLANG_TOOLING_CORE_DIAGNOSTIC_H #define LLVM_CLANG_TOOLING_CORE_DIAGNOSTIC_H
#include "Replacement.h" #include "clang/Basic/Diagnostic.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/StringRef.h" #include <string>
namespace clang { namespace tooling {
/// Represents a range within a specific source file. struct FileByteRange { FileByteRange() = default;
FileByteRange(const SourceManager &Sources, CharSourceRange Range);
std::string FilePath; unsigned FileOffset; unsigned Length; };
/// Represents the diagnostic message with the error message associated /// and the information on the location of the problem. struct DiagnosticMessage { DiagnosticMessage(llvm::StringRef Message = "");
/// Constructs a diagnostic message with anoffset to the diagnostic /// within the file where the problem occurred. /// /// \param Loc Should be a file location, it is not meaningful for a macro /// location. /// DiagnosticMessage(llvm::StringRef Message, const SourceManager &Sources, SourceLocation Loc);
std::string Message; std::string FilePath; unsigned FileOffset;
/// Fixes for this diagnostic, grouped by file path. llvm::StringMap<Replacements> Fix;
/// Extra source ranges associated with the note, in addition to the location /// of the Message itself. llvm::SmallVector<FileByteRange, 1> Ranges; };
/// Represents the diagnostic with the level of severity and possible /// fixes to be applied. struct Diagnostic { enum Level { Remark = DiagnosticsEngine::Remark, Warning = DiagnosticsEngine::Warning, Error = DiagnosticsEngine::Error };
Diagnostic() = default;
Diagnostic(llvm::StringRef DiagnosticName, Level DiagLevel, StringRef BuildDirectory);
Diagnostic(llvm::StringRef DiagnosticName, const DiagnosticMessage &Message, const SmallVector<DiagnosticMessage, 1> &Notes, Level DiagLevel, llvm::StringRef BuildDirectory);
/// Name identifying the Diagnostic. std::string DiagnosticName;
/// Message associated to the diagnostic. DiagnosticMessage Message;
/// Potential notes about the diagnostic. SmallVector<DiagnosticMessage, 1> Notes;
/// Diagnostic level. Can indicate either an error or a warning. Level DiagLevel;
/// A build directory of the diagnostic source file. /// /// It's an absolute path which is `directory` field of the source file in /// compilation database. If users don't specify the compilation database /// directory, it is the current directory where clang-tidy runs. /// /// Note: it is empty in unittest. std::string BuildDirectory; };
/// Collection of Diagnostics generated from a single translation unit. struct TranslationUnitDiagnostics { /// Name of the main source for the translation unit. std::string MainSourceFile; std::vector<Diagnostic> Diagnostics; };
/// Get the first fix to apply for this diagnostic. /// \returns nullptr if no fixes are attached to the diagnostic. const llvm::StringMap<Replacements> *selectFirstFix(const Diagnostic& D);
} // end namespace tooling } // end namespace clang #endif // LLVM_CLANG_TOOLING_CORE_DIAGNOSTIC_H
|