clang 19.0.0git
Diagnostic.cpp
Go to the documentation of this file.
1//===--- Diagnostic.cpp - Framework for clang diagnostics tools ----------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// Implements classes to support/store diagnostics refactoring.
10//
11//===----------------------------------------------------------------------===//
12
16#include "llvm/ADT/STLExtras.h"
17
18namespace clang {
19namespace tooling {
20
22 : Message(Message), FileOffset(0) {}
23
25 const SourceManager &Sources,
27 : Message(Message), FileOffset(0) {
28 assert(Loc.isValid() && Loc.isFileID());
29 FilePath = std::string(Sources.getFilename(Loc));
30
31 // Don't store offset in the scratch space. It doesn't tell anything to the
32 // user. Moreover, it depends on the history of macro expansions and thus
33 // prevents deduplication of warnings in headers.
34 if (!FilePath.empty())
35 FileOffset = Sources.getFileOffset(Loc);
36}
37
39 const SourceManager &Sources, CharSourceRange Range)
40 : FileOffset(0), Length(0) {
41 FilePath = std::string(Sources.getFilename(Range.getBegin()));
42 if (!FilePath.empty()) {
43 FileOffset = Sources.getFileOffset(Range.getBegin());
44 Length = Sources.getFileOffset(Range.getEnd()) - FileOffset;
45 }
46}
47
48Diagnostic::Diagnostic(llvm::StringRef DiagnosticName,
49 Diagnostic::Level DiagLevel, StringRef BuildDirectory)
50 : DiagnosticName(DiagnosticName), DiagLevel(DiagLevel),
51 BuildDirectory(BuildDirectory) {}
52
53Diagnostic::Diagnostic(llvm::StringRef DiagnosticName,
54 const DiagnosticMessage &Message,
56 Level DiagLevel, llvm::StringRef BuildDirectory)
57 : DiagnosticName(DiagnosticName), Message(Message), Notes(Notes),
58 DiagLevel(DiagLevel), BuildDirectory(BuildDirectory) {}
59
60const llvm::StringMap<Replacements> *selectFirstFix(const Diagnostic& D) {
61 if (!D.Message.Fix.empty())
62 return &D.Message.Fix;
63 auto Iter = llvm::find_if(D.Notes, [](const tooling::DiagnosticMessage &D) {
64 return !D.Fix.empty();
65 });
66 if (Iter != D.Notes.end())
67 return &Iter->Fix;
68 return nullptr;
69}
70
71} // end namespace tooling
72} // end namespace clang
unsigned Iter
Definition: HTMLLogger.cpp:154
Defines the clang::SourceLocation class and associated facilities.
Defines the SourceManager interface.
Represents a character-granular source range.
Encodes a location in the source.
bool isValid() const
Return true if this is a valid SourceLocation object.
This class handles loading and caching of source files into memory.
unsigned getFileOffset(SourceLocation SpellingLoc) const
Returns the offset from the start of the file that the specified SourceLocation represents.
StringRef getFilename(SourceLocation SpellingLoc) const
Return the filename of the file containing a SourceLocation.
A source range independent of the SourceManager.
Definition: Replacement.h:44
const llvm::StringMap< Replacements > * selectFirstFix(const Diagnostic &D)
Get the first fix to apply for this diagnostic.
Definition: Diagnostic.cpp:60
The JSON file list parser is used to communicate input to InstallAPI.
Represents the diagnostic message with the error message associated and the information on the locati...
Definition: Diagnostic.h:42
DiagnosticMessage(llvm::StringRef Message="")
Definition: Diagnostic.cpp:21
llvm::StringMap< Replacements > Fix
Fixes for this diagnostic, grouped by file path.
Definition: Diagnostic.h:59
Represents the diagnostic with the level of severity and possible fixes to be applied.
Definition: Diagnostic.h:68
DiagnosticMessage Message
Message associated to the diagnostic.
Definition: Diagnostic.h:88
SmallVector< DiagnosticMessage, 1 > Notes
Potential notes about the diagnostic.
Definition: Diagnostic.h:91