<div dir="ltr"><div class="gmail_default" style>Makes sense, will do. Though it was more a proof of concept rather than the final version.</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Jan 10, 2013 at 7:32 PM, Nico Weber <span dir="ltr"><<a href="mailto:thakis@chromium.org" target="_blank">thakis@chromium.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Thu, Jan 10, 2013 at 7:05 AM, Alexander Kornienko <<a href="mailto:alexfh@google.com">alexfh@google.com</a>> wrote:<br>

> Author: alexfh<br>
> Date: Thu Jan 10 09:05:09 2013<br>
> New Revision: 172071<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=172071&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=172071&view=rev</a><br>
> Log:<br>
> Basic support for diagnostics.<br>
><br>
> Summary: Uses DiagnosticsEngine to output diagnostics.<br>
><br>
> Reviewers: djasper, klimek<br>
><br>
> Reviewed By: djasper<br>
><br>
> CC: cfe-commits<br>
><br>
> Differential Revision: <a href="http://llvm-reviews.chandlerc.com/D278" target="_blank">http://llvm-reviews.chandlerc.com/D278</a><br>
><br>
> Modified:<br>
>     cfe/trunk/lib/Format/Format.cpp<br>
>     cfe/trunk/lib/Format/UnwrappedLineParser.cpp<br>
>     cfe/trunk/lib/Format/UnwrappedLineParser.h<br>
><br>
> Modified: cfe/trunk/lib/Format/Format.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=172071&r1=172070&r2=172071&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=172071&r1=172070&r2=172071&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/lib/Format/Format.cpp (original)<br>
> +++ cfe/trunk/lib/Format/Format.cpp Thu Jan 10 09:05:09 2013<br>
> @@ -18,8 +18,10 @@<br>
><br>
>  #include "clang/Format/Format.h"<br>
>  #include "UnwrappedLineParser.h"<br>
> +#include "clang/Basic/Diagnostic.h"<br>
>  #include "clang/Basic/OperatorPrecedence.h"<br>
>  #include "clang/Basic/SourceManager.h"<br>
> +#include "clang/Frontend/TextDiagnosticPrinter.h"<br>
>  #include "clang/Lex/Lexer.h"<br>
>  #include <string><br>
><br>
> @@ -1222,10 +1224,11 @@<br>
><br>
>  class Formatter : public UnwrappedLineConsumer {<br>
>  public:<br>
> -  Formatter(const FormatStyle &Style, Lexer &Lex, SourceManager &SourceMgr,<br>
> +  Formatter(clang::DiagnosticsEngine &Diag, const FormatStyle &Style,<br>
> +            Lexer &Lex, SourceManager &SourceMgr,<br>
>              const std::vector<CharSourceRange> &Ranges)<br>
> -      : Style(Style), Lex(Lex), SourceMgr(SourceMgr), Ranges(Ranges),<br>
> -        StructuralError(false) {<br>
> +      : Diag(Diag), Style(Style), Lex(Lex), SourceMgr(SourceMgr),<br>
> +        Ranges(Ranges), StructuralError(false) {<br>
>    }<br>
><br>
>    virtual ~Formatter() {<br>
> @@ -1233,7 +1236,7 @@<br>
><br>
>    tooling::Replacements format() {<br>
>      LexerBasedFormatTokenSource Tokens(Lex, SourceMgr);<br>
> -    UnwrappedLineParser Parser(Style, Tokens, *this);<br>
> +    UnwrappedLineParser Parser(Diag, Style, Tokens, *this);<br>
>      StructuralError = Parser.parse();<br>
>      unsigned PreviousEndOfLineColumn = 0;<br>
>      for (std::vector<UnwrappedLine>::iterator I = UnwrappedLines.begin(),<br>
> @@ -1284,6 +1287,7 @@<br>
>             1;<br>
>    }<br>
><br>
> +  clang::DiagnosticsEngine &Diag;<br>
>    FormatStyle Style;<br>
>    Lexer &Lex;<br>
>    SourceManager &SourceMgr;<br>
> @@ -1296,7 +1300,14 @@<br>
>  tooling::Replacements reformat(const FormatStyle &Style, Lexer &Lex,<br>
>                                 SourceManager &SourceMgr,<br>
>                                 std::vector<CharSourceRange> Ranges) {<br>
> -  Formatter formatter(Style, Lex, SourceMgr, Ranges);<br>
> +  IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions();<br>
> +  TextDiagnosticPrinter DiagnosticPrinter(llvm::errs(), &*DiagOpts);<br>
> +  DiagnosticPrinter.BeginSourceFile(Lex.getLangOpts(), Lex.getPP());<br>
> +  DiagnosticsEngine Diagnostics(<br>
> +      llvm::IntrusiveRefCntPtr<DiagnosticIDs>(new DiagnosticIDs()), &*DiagOpts,<br>
> +      &DiagnosticPrinter, false);<br>
> +  Diagnostics.setSourceManager(&SourceMgr);<br>
> +  Formatter formatter(Diagnostics, Style, Lex, SourceMgr, Ranges);<br>
>    return formatter.format();<br>
>  }<br>
><br>
><br>
> Modified: cfe/trunk/lib/Format/UnwrappedLineParser.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/UnwrappedLineParser.cpp?rev=172071&r1=172070&r2=172071&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/UnwrappedLineParser.cpp?rev=172071&r1=172070&r2=172071&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/lib/Format/UnwrappedLineParser.cpp (original)<br>
> +++ cfe/trunk/lib/Format/UnwrappedLineParser.cpp Thu Jan 10 09:05:09 2013<br>
> @@ -17,6 +17,7 @@<br>
>  //===----------------------------------------------------------------------===//<br>
><br>
>  #include "UnwrappedLineParser.h"<br>
> +#include "clang/Basic/Diagnostic.h"<br>
>  #include "llvm/Support/raw_ostream.h"<br>
><br>
>  // Uncomment to get debug output from the UnwrappedLineParser.<br>
> @@ -110,12 +111,12 @@<br>
>    bool PreBlockRootTokenInitialized;<br>
>  };<br>
><br>
> -UnwrappedLineParser::UnwrappedLineParser(const FormatStyle &Style,<br>
> -                                         FormatTokenSource &Tokens,<br>
> -                                         UnwrappedLineConsumer &Callback)<br>
> +UnwrappedLineParser::UnwrappedLineParser(<br>
> +    clang::DiagnosticsEngine &Diag, const FormatStyle &Style,<br>
> +    FormatTokenSource &Tokens, UnwrappedLineConsumer &Callback)<br>
>      : Line(new UnwrappedLine), RootTokenInitialized(false),<br>
> -      LastInCurrentLine(NULL), MustBreakBeforeNextToken(false), Style(Style),<br>
> -      Tokens(&Tokens), Callback(Callback) {<br>
> +      LastInCurrentLine(NULL), MustBreakBeforeNextToken(false), Diag(Diag),<br>
> +      Style(Style), Tokens(&Tokens), Callback(Callback) {<br>
>  }<br>
><br>
>  bool UnwrappedLineParser::parse() {<br>
> @@ -149,7 +150,9 @@<br>
>        if (HasOpeningBrace) {<br>
>          return false;<br>
>        } else {<br>
> -        // Stray '}' is an error.<br>
> +        Diag.Report(FormatTok.Tok.getLocation(),<br>
> +                    Diag.getCustomDiagID(clang::DiagnosticsEngine::Error,<br>
> +                                         "Stray '}' found"));<br>
<br>
</div></div>"unexpected '}'" would be more in line with other diagnostics:<br>
<br>
$ grep -i unexpected include/clang/Basic/Diagnostic*.td | wc -l<br>
      26<br>
$ grep -i stray include/clang/Basic/Diagnostic*.td | wc -l<br>
<div class="HOEnZb"><div class="h5">       1<br>
<br>
>          Error = true;<br>
>          nextToken();<br>
>          addUnwrappedLine();<br>
><br>
> Modified: cfe/trunk/lib/Format/UnwrappedLineParser.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/UnwrappedLineParser.h?rev=172071&r1=172070&r2=172071&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/UnwrappedLineParser.h?rev=172071&r1=172070&r2=172071&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/lib/Format/UnwrappedLineParser.h (original)<br>
> +++ cfe/trunk/lib/Format/UnwrappedLineParser.h Thu Jan 10 09:05:09 2013<br>
> @@ -27,6 +27,9 @@<br>
>  #include <vector><br>
><br>
>  namespace clang {<br>
> +<br>
> +class DiagnosticsEngine;<br>
> +<br>
>  namespace format {<br>
><br>
>  /// \brief A wrapper around a \c Token storing information about the<br>
> @@ -116,7 +119,8 @@<br>
><br>
>  class UnwrappedLineParser {<br>
>  public:<br>
> -  UnwrappedLineParser(const FormatStyle &Style, FormatTokenSource &Tokens,<br>
> +  UnwrappedLineParser(clang::DiagnosticsEngine &Diag, const FormatStyle &Style,<br>
> +                      FormatTokenSource &Tokens,<br>
>                        UnwrappedLineConsumer &Callback);<br>
><br>
>    /// Returns true in case of a structural error.<br>
> @@ -161,6 +165,7 @@<br>
>    FormatToken FormatTok;<br>
>    bool MustBreakBeforeNextToken;<br>
><br>
> +  clang::DiagnosticsEngine &Diag;<br>
>    const FormatStyle &Style;<br>
>    FormatTokenSource *Tokens;<br>
>    UnwrappedLineConsumer &Callback;<br>
><br>
><br>
> _______________________________________________<br>
> cfe-commits mailing list<br>
> <a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div><div><font color="#666666"><span style="border-top-width:2px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(213,15,37);border-right-color:rgb(213,15,37);border-bottom-color:rgb(213,15,37);border-left-color:rgb(213,15,37);padding-top:2px;margin-top:2px">Alexander Kornienko |</span><span style="border-top-width:2px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(51,105,232);border-right-color:rgb(51,105,232);border-bottom-color:rgb(51,105,232);border-left-color:rgb(51,105,232);padding-top:2px;margin-top:2px"> Software Engineer |</span></font><span style="border-top-width:2px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(0,153,57);border-right-color:rgb(0,153,57);border-bottom-color:rgb(0,153,57);border-left-color:rgb(0,153,57);padding-top:2px;margin-top:2px"><font color="#666666"> </font><a href="mailto:alexfh@google.com" style="color:rgb(17,85,204)" target="_blank">alexfh@google.com</a> |</span><span style="border-top-width:2px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(238,178,17);border-right-color:rgb(238,178,17);border-bottom-color:rgb(238,178,17);border-left-color:rgb(238,178,17);padding-top:2px;margin-top:2px"> <a value="+35315435283" style="color:rgb(17,85,204)">+49 151 221 77 957</a></span></div>
</div><div><font color="#666666"><span style="background-color:rgb(255,255,255);font-family:Arial,Verdana,sans-serif">Google Germany GmbH | </span><span style="background-color:rgb(255,255,255);font-family:Arial,Verdana,sans-serif">Dienerstr. 12 | </span><span style="background-color:rgb(255,255,255);font-family:Arial,Verdana,sans-serif">80331 München</span></font></div>

</div>