clang 20.0.0 (based on r547379) from build 12806354. Bug: http://b/379133546 Test: N/A Change-Id: I2eb8938af55d809de674be63cb30cf27e801862b Upstream-Commit: ad834e67b1105d15ef907f6255d4c96e8e733f57
120 lines
3.8 KiB
C++
120 lines
3.8 KiB
C++
//===--- 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
|