clang: lib/Frontend/TextDiagnosticPrinter.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

18#include "llvm/ADT/SmallString.h"

19#include "llvm/Support/ErrorHandling.h"

20#include "llvm/Support/raw_ostream.h"

21#include

22using namespace clang;

23

26 bool _OwnsOutputStream)

27 : OS(os), DiagOpts(diags),

28 OwnsOutputStream(_OwnsOutputStream) {

29}

30

32 if (OwnsOutputStream)

33 delete &OS;

34}

35

38

39 TextDiag.reset(new TextDiagnostic(OS, LO, &*DiagOpts, PP));

40}

41

43 TextDiag.reset();

44}

45

46

47

48

49

50

55 bool Started = false;

56 if (DiagOpts.ShowOptionNames) {

57

58 if (Info.getID() == diag::fatal_too_many_errors) {

59 OS << " [-ferror-limit=]";

60 return;

61 }

62

63

64

65

66

67

68

69

70

71

75 OS << " [-Werror";

76 Started = true;

77 }

78

80 if (!Opt.empty()) {

81 OS << (Started ? "," : " [")

84 if (!OptValue.empty())

85 OS << "=" << OptValue;

86 Started = true;

87 }

88 }

89

90

91 if (DiagOpts.ShowCategories) {

92 unsigned DiagCategory =

94 if (DiagCategory) {

95 OS << (Started ? "," : " [");

96 Started = true;

97 if (DiagOpts.ShowCategories == 1)

98 OS << DiagCategory;

99 else {

100 assert(DiagOpts.ShowCategories == 2 && "Invalid ShowCategories value");

102 }

103 }

104 }

105 if (Started)

106 OS << ']';

107}

108

111

113

114

115

118

119 llvm::raw_svector_ostream DiagMessageStream(OutStr);

121

122

123

124

125

126 uint64_t StartOfLocationInfo = OS.tell();

127

128 if (!Prefix.empty())

129 OS << Prefix << ": ";

130

131

132

133

134

139 DiagMessageStream.str(), OS.tell() - StartOfLocationInfo,

140 DiagOpts->MessageLength, DiagOpts->ShowColors);

141 OS.flush();

142 return;

143 }

144

145

146 assert(DiagOpts && "Unexpected diagnostic without options set");

148 "Unexpected diagnostic with no source manager");

149 assert(TextDiag && "Unexpected diagnostic outside source file processing");

150

151 TextDiag->emitDiagnostic(

154

155 OS.flush();

156}

Defines the SourceManager interface.

static void printDiagnosticOptions(raw_ostream &OS, DiagnosticsEngine::Level Level, const Diagnostic &Info, const DiagnosticOptions &DiagOpts)

Print any diagnostic option information to a raw_ostream.

virtual void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info)

Handle this diagnostic, reporting it to the user or capturing it to a log as needed.

static StringRef getCategoryNameFromID(unsigned CategoryID)

Given a category ID, return the name of the category.

static bool isDefaultMappingAsError(unsigned DiagID)

Return true if the specified diagnostic is mapped to errors by default.

static bool isBuiltinWarningOrExtension(unsigned DiagID)

Return true if the unmapped diagnostic levelof the specified diagnostic ID is a Warning or Extension.

static StringRef getWarningOptionForDiag(unsigned DiagID)

Return the lowest-level warning option that enables the specified diagnostic.

static unsigned getCategoryNumberForDiag(unsigned DiagID)

Return the category number that a specified DiagID belongs to, or 0 if no category.

Options for controlling the compiler diagnostics engine.

A little helper class (which is basically a smart pointer that forwards info from DiagnosticsEngine a...

const SourceLocation & getLocation() const

void FormatDiagnostic(SmallVectorImpl< char > &OutStr) const

Format this diagnostic into a string, substituting the formal arguments into the %0 slots.

StringRef getFlagValue() const

Return the value associated with this diagnostic flag.

SourceManager & getSourceManager() const

ArrayRef< FixItHint > getFixItHints() const

bool hasSourceManager() const

ArrayRef< CharSourceRange > getRanges() const

Return an array reference for this diagnostic's ranges.

Level

The level of the diagnostic, after it has been through mapping.

A SourceLocation and its associated SourceManager.

Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...

Engages in a tight little dance with the lexer to efficiently preprocess tokens.

bool isValid() const

Return true if this is a valid SourceLocation object.

~TextDiagnosticPrinter() override

void BeginSourceFile(const LangOptions &LO, const Preprocessor *PP) override

Callback to inform the diagnostic client that processing of a source file is beginning.

void EndSourceFile() override

Callback to inform the diagnostic client that processing of a source file has ended.

void HandleDiagnostic(DiagnosticsEngine::Level Level, const Diagnostic &Info) override

Handle this diagnostic, reporting it to the user or capturing it to a log as needed.

TextDiagnosticPrinter(raw_ostream &os, DiagnosticOptions *diags, bool OwnsOutputStream=false)

Class to encapsulate the logic for formatting and printing a textual diagnostic message.

static void printDiagnosticMessage(raw_ostream &OS, bool IsSupplemental, StringRef Message, unsigned CurrentColumn, unsigned Columns, bool ShowColors)

Pretty-print a diagnostic message to a raw_ostream.

static void printDiagnosticLevel(raw_ostream &OS, DiagnosticsEngine::Level Level, bool ShowColors)

Print the diagonstic level to a raw_ostream.

The JSON file list parser is used to communicate input to InstallAPI.