[cfe-commits] r172071 - in /cfe/trunk/lib/Format: Format.cpp UnwrappedLineParser.cpp UnwrappedLineParser.h

Nico Weber thakis at chromium.org
Thu Jan 10 10:32:02 PST 2013


On Thu, Jan 10, 2013 at 7:05 AM, Alexander Kornienko <alexfh at google.com> wrote:
> Author: alexfh
> Date: Thu Jan 10 09:05:09 2013
> New Revision: 172071
>
> URL: http://llvm.org/viewvc/llvm-project?rev=172071&view=rev
> Log:
> Basic support for diagnostics.
>
> Summary: Uses DiagnosticsEngine to output diagnostics.
>
> Reviewers: djasper, klimek
>
> Reviewed By: djasper
>
> CC: cfe-commits
>
> Differential Revision: http://llvm-reviews.chandlerc.com/D278
>
> Modified:
>     cfe/trunk/lib/Format/Format.cpp
>     cfe/trunk/lib/Format/UnwrappedLineParser.cpp
>     cfe/trunk/lib/Format/UnwrappedLineParser.h
>
> Modified: cfe/trunk/lib/Format/Format.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=172071&r1=172070&r2=172071&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Format/Format.cpp (original)
> +++ cfe/trunk/lib/Format/Format.cpp Thu Jan 10 09:05:09 2013
> @@ -18,8 +18,10 @@
>
>  #include "clang/Format/Format.h"
>  #include "UnwrappedLineParser.h"
> +#include "clang/Basic/Diagnostic.h"
>  #include "clang/Basic/OperatorPrecedence.h"
>  #include "clang/Basic/SourceManager.h"
> +#include "clang/Frontend/TextDiagnosticPrinter.h"
>  #include "clang/Lex/Lexer.h"
>  #include <string>
>
> @@ -1222,10 +1224,11 @@
>
>  class Formatter : public UnwrappedLineConsumer {
>  public:
> -  Formatter(const FormatStyle &Style, Lexer &Lex, SourceManager &SourceMgr,
> +  Formatter(clang::DiagnosticsEngine &Diag, const FormatStyle &Style,
> +            Lexer &Lex, SourceManager &SourceMgr,
>              const std::vector<CharSourceRange> &Ranges)
> -      : Style(Style), Lex(Lex), SourceMgr(SourceMgr), Ranges(Ranges),
> -        StructuralError(false) {
> +      : Diag(Diag), Style(Style), Lex(Lex), SourceMgr(SourceMgr),
> +        Ranges(Ranges), StructuralError(false) {
>    }
>
>    virtual ~Formatter() {
> @@ -1233,7 +1236,7 @@
>
>    tooling::Replacements format() {
>      LexerBasedFormatTokenSource Tokens(Lex, SourceMgr);
> -    UnwrappedLineParser Parser(Style, Tokens, *this);
> +    UnwrappedLineParser Parser(Diag, Style, Tokens, *this);
>      StructuralError = Parser.parse();
>      unsigned PreviousEndOfLineColumn = 0;
>      for (std::vector<UnwrappedLine>::iterator I = UnwrappedLines.begin(),
> @@ -1284,6 +1287,7 @@
>             1;
>    }
>
> +  clang::DiagnosticsEngine &Diag;
>    FormatStyle Style;
>    Lexer &Lex;
>    SourceManager &SourceMgr;
> @@ -1296,7 +1300,14 @@
>  tooling::Replacements reformat(const FormatStyle &Style, Lexer &Lex,
>                                 SourceManager &SourceMgr,
>                                 std::vector<CharSourceRange> Ranges) {
> -  Formatter formatter(Style, Lex, SourceMgr, Ranges);
> +  IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions();
> +  TextDiagnosticPrinter DiagnosticPrinter(llvm::errs(), &*DiagOpts);
> +  DiagnosticPrinter.BeginSourceFile(Lex.getLangOpts(), Lex.getPP());
> +  DiagnosticsEngine Diagnostics(
> +      llvm::IntrusiveRefCntPtr<DiagnosticIDs>(new DiagnosticIDs()), &*DiagOpts,
> +      &DiagnosticPrinter, false);
> +  Diagnostics.setSourceManager(&SourceMgr);
> +  Formatter formatter(Diagnostics, Style, Lex, SourceMgr, Ranges);
>    return formatter.format();
>  }
>
>
> Modified: cfe/trunk/lib/Format/UnwrappedLineParser.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/UnwrappedLineParser.cpp?rev=172071&r1=172070&r2=172071&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Format/UnwrappedLineParser.cpp (original)
> +++ cfe/trunk/lib/Format/UnwrappedLineParser.cpp Thu Jan 10 09:05:09 2013
> @@ -17,6 +17,7 @@
>  //===----------------------------------------------------------------------===//
>
>  #include "UnwrappedLineParser.h"
> +#include "clang/Basic/Diagnostic.h"
>  #include "llvm/Support/raw_ostream.h"
>
>  // Uncomment to get debug output from the UnwrappedLineParser.
> @@ -110,12 +111,12 @@
>    bool PreBlockRootTokenInitialized;
>  };
>
> -UnwrappedLineParser::UnwrappedLineParser(const FormatStyle &Style,
> -                                         FormatTokenSource &Tokens,
> -                                         UnwrappedLineConsumer &Callback)
> +UnwrappedLineParser::UnwrappedLineParser(
> +    clang::DiagnosticsEngine &Diag, const FormatStyle &Style,
> +    FormatTokenSource &Tokens, UnwrappedLineConsumer &Callback)
>      : Line(new UnwrappedLine), RootTokenInitialized(false),
> -      LastInCurrentLine(NULL), MustBreakBeforeNextToken(false), Style(Style),
> -      Tokens(&Tokens), Callback(Callback) {
> +      LastInCurrentLine(NULL), MustBreakBeforeNextToken(false), Diag(Diag),
> +      Style(Style), Tokens(&Tokens), Callback(Callback) {
>  }
>
>  bool UnwrappedLineParser::parse() {
> @@ -149,7 +150,9 @@
>        if (HasOpeningBrace) {
>          return false;
>        } else {
> -        // Stray '}' is an error.
> +        Diag.Report(FormatTok.Tok.getLocation(),
> +                    Diag.getCustomDiagID(clang::DiagnosticsEngine::Error,
> +                                         "Stray '}' found"));

"unexpected '}'" would be more in line with other diagnostics:

$ grep -i unexpected include/clang/Basic/Diagnostic*.td | wc -l
      26
$ grep -i stray include/clang/Basic/Diagnostic*.td | wc -l
       1

>          Error = true;
>          nextToken();
>          addUnwrappedLine();
>
> Modified: cfe/trunk/lib/Format/UnwrappedLineParser.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/UnwrappedLineParser.h?rev=172071&r1=172070&r2=172071&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Format/UnwrappedLineParser.h (original)
> +++ cfe/trunk/lib/Format/UnwrappedLineParser.h Thu Jan 10 09:05:09 2013
> @@ -27,6 +27,9 @@
>  #include <vector>
>
>  namespace clang {
> +
> +class DiagnosticsEngine;
> +
>  namespace format {
>
>  /// \brief A wrapper around a \c Token storing information about the
> @@ -116,7 +119,8 @@
>
>  class UnwrappedLineParser {
>  public:
> -  UnwrappedLineParser(const FormatStyle &Style, FormatTokenSource &Tokens,
> +  UnwrappedLineParser(clang::DiagnosticsEngine &Diag, const FormatStyle &Style,
> +                      FormatTokenSource &Tokens,
>                        UnwrappedLineConsumer &Callback);
>
>    /// Returns true in case of a structural error.
> @@ -161,6 +165,7 @@
>    FormatToken FormatTok;
>    bool MustBreakBeforeNextToken;
>
> +  clang::DiagnosticsEngine &Diag;
>    const FormatStyle &Style;
>    FormatTokenSource *Tokens;
>    UnwrappedLineConsumer &Callback;
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list