diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2011-09-25 22:54:56 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2011-09-25 22:54:56 +0000 |
commit | 18fc0025b01472e3961e35a817aaf49fffb333df (patch) | |
tree | 755a5a3c7c89f578145393620215559b0dfa7827 /lib/Frontend/TextDiagnosticPrinter.cpp | |
parent | 8be5c159df96c88880a50086a41efc86b89a46a4 (diff) |
Shuffle some names around. 'CaretDiagnostic' is inaccurate as this needs
to handle non-caret diagnostics as well in order to be fully useful in
libclang etc. Also sketch out some more of my plans on this refactoring.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@140476 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/TextDiagnosticPrinter.cpp')
-rw-r--r-- | lib/Frontend/TextDiagnosticPrinter.cpp | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/lib/Frontend/TextDiagnosticPrinter.cpp b/lib/Frontend/TextDiagnosticPrinter.cpp index ca060b6d66..51c3b8ea9c 100644 --- a/lib/Frontend/TextDiagnosticPrinter.cpp +++ b/lib/Frontend/TextDiagnosticPrinter.cpp @@ -292,23 +292,26 @@ static SourceLocation getImmediateMacroCalleeLoc(const SourceManager &SM, namespace { -/// \brief Class to encapsulate the logic for printing a caret diagnostic -/// message. +/// \brief Class to encapsulate the logic for formatting and printing a textual +/// diagnostic message. /// -/// This class provides an interface for building and emitting a caret -/// diagnostic, including all of the macro backtrace caret diagnostics, FixIt -/// Hints, and code snippets. In the presence of macros this turns into -/// a recursive process and so the class provides common state across the -/// emission of a particular diagnostic, while each invocation of \see Emit() -/// walks down the macro stack. +/// This class provides an interface for building and emitting a textual +/// diagnostic, including all of the macro backtraces, caret diagnostics, FixIt +/// Hints, and code snippets. In the presence of macros this involves +/// a recursive process, synthesizing notes for each macro expansion. /// -/// This logic assumes that the core diagnostic location and text has already -/// been emitted and focuses on emitting the pretty caret display and macro -/// backtrace following that. +/// The purpose of this class is to isolate the implementation of printing +/// beautiful text diagnostics from any particular interfaces. The Clang +/// DiagnosticClient is implemented through this class as is diagnostic +/// printing coming out of libclang. /// -/// FIXME: Hoist helper routines specific to caret diagnostics into class -/// methods to reduce paramater passing churn. -class CaretDiagnostic { +/// A brief worklist: +/// FIXME: Sink the printing of the diagnostic message itself into this class. +/// FIXME: Sink the printing of the include stack into this class. +/// FIXME: Remove the TextDiagnosticPrinter as an input. +/// FIXME: Sink the recursive printing of template instantiations into this +/// class. +class TextDiagnostic { TextDiagnosticPrinter &Printer; raw_ostream &OS; const SourceManager &SM; @@ -316,7 +319,7 @@ class CaretDiagnostic { const DiagnosticOptions &DiagOpts; public: - CaretDiagnostic(TextDiagnosticPrinter &Printer, + TextDiagnostic(TextDiagnosticPrinter &Printer, raw_ostream &OS, const SourceManager &SM, const LangOptions &LangOpts, @@ -769,10 +772,10 @@ void TextDiagnosticPrinter::EmitCaretDiagnostic( assert(DiagOpts && "Unexpected diagnostic without options set"); // FIXME: Remove this method and have clients directly build and call Emit on - // the CaretDiagnostic object. - CaretDiagnostic CaretDiag(*this, OS, SM, *LangOpts, *DiagOpts); + // the TextDiagnostic object. + TextDiagnostic TextDiag(*this, OS, SM, *LangOpts, *DiagOpts); unsigned MacroDepth = 0; - CaretDiag.Emit(Loc, Ranges, Hints, MacroDepth); + TextDiag.Emit(Loc, Ranges, Hints, MacroDepth); } /// \brief Skip over whitespace in the string, starting at the given |