[PATCH] D53501: [clang-query] Refactor Output settings to booleans

2018-10-24 Thread Stephen Kelly via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL345194: [clang-query] Refactor Output settings to booleans 
(authored by steveire, committed by ).
Herald added a subscriber: llvm-commits.

Changed prior to commit:
  https://reviews.llvm.org/D53501?vs=170431&id=170976#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D53501

Files:
  clang-tools-extra/trunk/clang-query/Query.cpp
  clang-tools-extra/trunk/clang-query/Query.h
  clang-tools-extra/trunk/clang-query/QueryParser.cpp
  clang-tools-extra/trunk/clang-query/QuerySession.h
  clang-tools-extra/trunk/unittests/clang-query/QueryEngineTest.cpp
  clang-tools-extra/trunk/unittests/clang-query/QueryParserTest.cpp

Index: clang-tools-extra/trunk/clang-query/Query.cpp
===
--- clang-tools-extra/trunk/clang-query/Query.cpp
+++ clang-tools-extra/trunk/clang-query/Query.cpp
@@ -107,8 +107,7 @@
 
   for (auto BI = MI->getMap().begin(), BE = MI->getMap().end(); BI != BE;
++BI) {
-switch (QS.OutKind) {
-case OK_Diag: {
+if (QS.DiagOutput) {
   clang::SourceRange R = BI->second.getSourceRange();
   if (R.isValid()) {
 TextDiagnostic TD(OS, AST->getASTContext().getLangOpts(),
@@ -118,20 +117,16 @@
 DiagnosticsEngine::Note, "\"" + BI->first + "\" binds here",
 CharSourceRange::getTokenRange(R), None);
   }
-  break;
 }
-case OK_Print: {
+if (QS.PrintOutput) {
   OS << "Binding for \"" << BI->first << "\":\n";
   BI->second.print(OS, AST->getASTContext().getPrintingPolicy());
   OS << "\n";
-  break;
 }
-case OK_DetailedAST: {
+if (QS.DetailedASTOutput) {
   OS << "Binding for \"" << BI->first << "\":\n";
   BI->second.dump(OS, AST->getSourceManager());
   OS << "\n";
-  break;
-}
 }
   }
 
Index: clang-tools-extra/trunk/clang-query/QueryParser.cpp
===
--- clang-tools-extra/trunk/clang-query/QueryParser.cpp
+++ clang-tools-extra/trunk/clang-query/QueryParser.cpp
@@ -119,7 +119,17 @@
 "expected 'diag', 'print', 'detailed-ast' or 'dump', got '" + ValStr +
 "'");
   }
-  return new SetQuery(&QuerySession::OutKind, OutputKind(OutKind));
+
+  switch (OutKind) {
+  case OK_DetailedAST:
+return new SetExclusiveOutputQuery(&QuerySession::DetailedASTOutput);
+  case OK_Diag:
+return new SetExclusiveOutputQuery(&QuerySession::DiagOutput);
+  case OK_Print:
+return new SetExclusiveOutputQuery(&QuerySession::PrintOutput);
+  }
+
+  llvm_unreachable("Invalid output kind");
 }
 
 QueryRef QueryParser::endQuery(QueryRef Q) {
Index: clang-tools-extra/trunk/clang-query/QuerySession.h
===
--- clang-tools-extra/trunk/clang-query/QuerySession.h
+++ clang-tools-extra/trunk/clang-query/QuerySession.h
@@ -25,11 +25,16 @@
 class QuerySession {
 public:
   QuerySession(llvm::ArrayRef> ASTs)
-  : ASTs(ASTs), OutKind(OK_Diag), BindRoot(true), PrintMatcher(false),
+  : ASTs(ASTs), PrintOutput(false), DiagOutput(true),
+DetailedASTOutput(false), BindRoot(true), PrintMatcher(false),
 Terminate(false) {}
 
   llvm::ArrayRef> ASTs;
-  OutputKind OutKind;
+
+  bool PrintOutput;
+  bool DiagOutput;
+  bool DetailedASTOutput;
+
   bool BindRoot;
   bool PrintMatcher;
   bool Terminate;
Index: clang-tools-extra/trunk/clang-query/Query.h
===
--- clang-tools-extra/trunk/clang-query/Query.h
+++ clang-tools-extra/trunk/clang-query/Query.h
@@ -10,6 +10,7 @@
 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_QUERY_QUERY_H
 #define LLVM_CLANG_TOOLS_EXTRA_CLANG_QUERY_QUERY_H
 
+#include "QuerySession.h"
 #include "clang/ASTMatchers/Dynamic/VariantValue.h"
 #include "llvm/ADT/IntrusiveRefCntPtr.h"
 #include "llvm/ADT/Optional.h"
@@ -133,6 +134,23 @@
   T Value;
 };
 
+// Implements the exclusive 'set output dump|diag|print' options.
+struct SetExclusiveOutputQuery : Query {
+  SetExclusiveOutputQuery(bool QuerySession::*Var)
+  : Query(QK_SetOutputKind), Var(Var) {}
+  bool run(llvm::raw_ostream &OS, QuerySession &QS) const override {
+QS.DiagOutput = false;
+QS.DetailedASTOutput = false;
+QS.PrintOutput = false;
+QS.*Var = true;
+return true;
+  }
+
+  static bool classof(const Query *Q) { return Q->Kind == QK_SetOutputKind; }
+
+  bool QuerySession::*Var;
+};
+
 } // namespace query
 } // namespace clang
 
Index: clang-tools-extra/trunk/unittests/clang-query/QueryParserTest.cpp
===
--- clang-tools-extra/trunk/unittests/clang-query/QueryParserTest.cpp
+++ clang-tools-extra/trunk/unittests/clang-query/QueryParserTest.cpp
@@ -83,14 +83,12 @@

[PATCH] D53501: [clang-query] Refactor Output settings to booleans

2018-10-24 Thread Stephen Kelly via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rCTE345194: [clang-query] Refactor Output settings to booleans 
(authored by steveire, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D53501?vs=170431&id=170975#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D53501

Files:
  clang-query/Query.cpp
  clang-query/Query.h
  clang-query/QueryParser.cpp
  clang-query/QuerySession.h
  unittests/clang-query/QueryEngineTest.cpp
  unittests/clang-query/QueryParserTest.cpp

Index: clang-query/Query.h
===
--- clang-query/Query.h
+++ clang-query/Query.h
@@ -10,6 +10,7 @@
 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_QUERY_QUERY_H
 #define LLVM_CLANG_TOOLS_EXTRA_CLANG_QUERY_QUERY_H
 
+#include "QuerySession.h"
 #include "clang/ASTMatchers/Dynamic/VariantValue.h"
 #include "llvm/ADT/IntrusiveRefCntPtr.h"
 #include "llvm/ADT/Optional.h"
@@ -133,6 +134,23 @@
   T Value;
 };
 
+// Implements the exclusive 'set output dump|diag|print' options.
+struct SetExclusiveOutputQuery : Query {
+  SetExclusiveOutputQuery(bool QuerySession::*Var)
+  : Query(QK_SetOutputKind), Var(Var) {}
+  bool run(llvm::raw_ostream &OS, QuerySession &QS) const override {
+QS.DiagOutput = false;
+QS.DetailedASTOutput = false;
+QS.PrintOutput = false;
+QS.*Var = true;
+return true;
+  }
+
+  static bool classof(const Query *Q) { return Q->Kind == QK_SetOutputKind; }
+
+  bool QuerySession::*Var;
+};
+
 } // namespace query
 } // namespace clang
 
Index: clang-query/Query.cpp
===
--- clang-query/Query.cpp
+++ clang-query/Query.cpp
@@ -107,8 +107,7 @@
 
   for (auto BI = MI->getMap().begin(), BE = MI->getMap().end(); BI != BE;
++BI) {
-switch (QS.OutKind) {
-case OK_Diag: {
+if (QS.DiagOutput) {
   clang::SourceRange R = BI->second.getSourceRange();
   if (R.isValid()) {
 TextDiagnostic TD(OS, AST->getASTContext().getLangOpts(),
@@ -118,20 +117,16 @@
 DiagnosticsEngine::Note, "\"" + BI->first + "\" binds here",
 CharSourceRange::getTokenRange(R), None);
   }
-  break;
 }
-case OK_Print: {
+if (QS.PrintOutput) {
   OS << "Binding for \"" << BI->first << "\":\n";
   BI->second.print(OS, AST->getASTContext().getPrintingPolicy());
   OS << "\n";
-  break;
 }
-case OK_DetailedAST: {
+if (QS.DetailedASTOutput) {
   OS << "Binding for \"" << BI->first << "\":\n";
   BI->second.dump(OS, AST->getSourceManager());
   OS << "\n";
-  break;
-}
 }
   }
 
Index: clang-query/QueryParser.cpp
===
--- clang-query/QueryParser.cpp
+++ clang-query/QueryParser.cpp
@@ -119,7 +119,17 @@
 "expected 'diag', 'print', 'detailed-ast' or 'dump', got '" + ValStr +
 "'");
   }
-  return new SetQuery(&QuerySession::OutKind, OutputKind(OutKind));
+
+  switch (OutKind) {
+  case OK_DetailedAST:
+return new SetExclusiveOutputQuery(&QuerySession::DetailedASTOutput);
+  case OK_Diag:
+return new SetExclusiveOutputQuery(&QuerySession::DiagOutput);
+  case OK_Print:
+return new SetExclusiveOutputQuery(&QuerySession::PrintOutput);
+  }
+
+  llvm_unreachable("Invalid output kind");
 }
 
 QueryRef QueryParser::endQuery(QueryRef Q) {
Index: clang-query/QuerySession.h
===
--- clang-query/QuerySession.h
+++ clang-query/QuerySession.h
@@ -25,11 +25,16 @@
 class QuerySession {
 public:
   QuerySession(llvm::ArrayRef> ASTs)
-  : ASTs(ASTs), OutKind(OK_Diag), BindRoot(true), PrintMatcher(false),
+  : ASTs(ASTs), PrintOutput(false), DiagOutput(true),
+DetailedASTOutput(false), BindRoot(true), PrintMatcher(false),
 Terminate(false) {}
 
   llvm::ArrayRef> ASTs;
-  OutputKind OutKind;
+
+  bool PrintOutput;
+  bool DiagOutput;
+  bool DetailedASTOutput;
+
   bool BindRoot;
   bool PrintMatcher;
   bool Terminate;
Index: unittests/clang-query/QueryParserTest.cpp
===
--- unittests/clang-query/QueryParserTest.cpp
+++ unittests/clang-query/QueryParserTest.cpp
@@ -83,14 +83,12 @@
 cast(Q)->ErrStr);
 
   Q = parse("set output dump");
-  ASSERT_TRUE(isa >(Q));
-  EXPECT_EQ(&QuerySession::OutKind, cast >(Q)->Var);
-  EXPECT_EQ(OK_DetailedAST, cast>(Q)->Value);
+  ASSERT_TRUE(isa(Q));
+  EXPECT_EQ(&QuerySession::DetailedASTOutput, cast(Q)->Var);
 
   Q = parse("set output detailed-ast");
-  ASSERT_TRUE(isa>(Q));
-  EXPECT_EQ(&QuerySession::OutKind, cast>(Q)->Var);
-  EXPECT_EQ(OK_DetailedAST, cast>(Q)->Value);
+  ASSERT_TRUE(isa(Q));
+  EXPECT_EQ(&QuerySession::DetailedASTOutput, cast(Q)->Var);
 
   Q = parse("se

[PATCH] D53501: [clang-query] Refactor Output settings to booleans

2018-10-23 Thread Aaron Ballman via Phabricator via cfe-commits
aaron.ballman accepted this revision.
aaron.ballman added a comment.
This revision is now accepted and ready to land.

LGTM aside from minor commenting nits.




Comment at: clang-query/Query.h:17
 #include "llvm/ADT/Optional.h"
+
 #include 

Spurious newline, or did clang-format insert this?



Comment at: clang-query/Query.h:138
 
+// Implements the exclusive 'set output dump|diag|print' options
+struct SetExclusiveOutputQuery : Query {

Missing full-stop at the end of the comment.


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D53501



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D53501: [clang-query] Refactor Output settings to booleans

2018-10-22 Thread Stephen Kelly via Phabricator via cfe-commits
steveire updated this revision to Diff 170431.
steveire added a comment.

Update tests


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D53501

Files:
  clang-query/Query.cpp
  clang-query/Query.h
  clang-query/QueryParser.cpp
  clang-query/QuerySession.h
  unittests/clang-query/QueryEngineTest.cpp
  unittests/clang-query/QueryParserTest.cpp

Index: unittests/clang-query/QueryParserTest.cpp
===
--- unittests/clang-query/QueryParserTest.cpp
+++ unittests/clang-query/QueryParserTest.cpp
@@ -83,14 +83,12 @@
 cast(Q)->ErrStr);
 
   Q = parse("set output dump");
-  ASSERT_TRUE(isa >(Q));
-  EXPECT_EQ(&QuerySession::OutKind, cast >(Q)->Var);
-  EXPECT_EQ(OK_DetailedAST, cast>(Q)->Value);
+  ASSERT_TRUE(isa(Q));
+  EXPECT_EQ(&QuerySession::DetailedASTOutput, cast(Q)->Var);
 
   Q = parse("set output detailed-ast");
-  ASSERT_TRUE(isa>(Q));
-  EXPECT_EQ(&QuerySession::OutKind, cast>(Q)->Var);
-  EXPECT_EQ(OK_DetailedAST, cast>(Q)->Value);
+  ASSERT_TRUE(isa(Q));
+  EXPECT_EQ(&QuerySession::DetailedASTOutput, cast(Q)->Var);
 
   Q = parse("set bind-root foo");
   ASSERT_TRUE(isa(Q));
Index: unittests/clang-query/QueryEngineTest.cpp
===
--- unittests/clang-query/QueryEngineTest.cpp
+++ unittests/clang-query/QueryEngineTest.cpp
@@ -95,16 +95,16 @@
   Str.clear();
 
   EXPECT_TRUE(
-  SetQuery(&QuerySession::OutKind, OK_Print).run(OS, S));
+  SetExclusiveOutputQuery(&QuerySession::PrintOutput).run(OS, S));
   EXPECT_TRUE(MatchQuery(FooMatcherString, FooMatcher).run(OS, S));
 
   EXPECT_TRUE(OS.str().find("Binding for \"root\":\nvoid foo1()") !=
   std::string::npos);
 
   Str.clear();
 
   EXPECT_TRUE(
-  SetQuery(&QuerySession::OutKind, OK_DetailedAST).run(OS, S));
+  SetExclusiveOutputQuery(&QuerySession::DetailedASTOutput).run(OS, S));
   EXPECT_TRUE(MatchQuery(FooMatcherString, FooMatcher).run(OS, S));
 
   EXPECT_TRUE(OS.str().find("FunctionDecl") != std::string::npos);
Index: clang-query/QuerySession.h
===
--- clang-query/QuerySession.h
+++ clang-query/QuerySession.h
@@ -25,11 +25,16 @@
 class QuerySession {
 public:
   QuerySession(llvm::ArrayRef> ASTs)
-  : ASTs(ASTs), OutKind(OK_Diag), BindRoot(true), PrintMatcher(false),
+  : ASTs(ASTs), PrintOutput(false), DiagOutput(true),
+DetailedASTOutput(false), BindRoot(true), PrintMatcher(false),
 Terminate(false) {}
 
   llvm::ArrayRef> ASTs;
-  OutputKind OutKind;
+
+  bool PrintOutput;
+  bool DiagOutput;
+  bool DetailedASTOutput;
+
   bool BindRoot;
   bool PrintMatcher;
   bool Terminate;
Index: clang-query/QueryParser.cpp
===
--- clang-query/QueryParser.cpp
+++ clang-query/QueryParser.cpp
@@ -119,7 +119,17 @@
 "expected 'diag', 'print', 'detailed-ast' or 'dump', got '" + ValStr +
 "'");
   }
-  return new SetQuery(&QuerySession::OutKind, OutputKind(OutKind));
+
+  switch (OutKind) {
+  case OK_DetailedAST:
+return new SetExclusiveOutputQuery(&QuerySession::DetailedASTOutput);
+  case OK_Diag:
+return new SetExclusiveOutputQuery(&QuerySession::DiagOutput);
+  case OK_Print:
+return new SetExclusiveOutputQuery(&QuerySession::PrintOutput);
+  }
+
+  llvm_unreachable("Invalid output kind");
 }
 
 QueryRef QueryParser::endQuery(QueryRef Q) {
Index: clang-query/Query.h
===
--- clang-query/Query.h
+++ clang-query/Query.h
@@ -10,9 +10,11 @@
 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_QUERY_QUERY_H
 #define LLVM_CLANG_TOOLS_EXTRA_CLANG_QUERY_QUERY_H
 
+#include "QuerySession.h"
 #include "clang/ASTMatchers/Dynamic/VariantValue.h"
 #include "llvm/ADT/IntrusiveRefCntPtr.h"
 #include "llvm/ADT/Optional.h"
+
 #include 
 
 namespace clang {
@@ -133,6 +135,23 @@
   T Value;
 };
 
+// Implements the exclusive 'set output dump|diag|print' options
+struct SetExclusiveOutputQuery : Query {
+  SetExclusiveOutputQuery(bool QuerySession::*Var)
+  : Query(QK_SetOutputKind), Var(Var) {}
+  bool run(llvm::raw_ostream &OS, QuerySession &QS) const override {
+QS.DiagOutput = false;
+QS.DetailedASTOutput = false;
+QS.PrintOutput = false;
+QS.*Var = true;
+return true;
+  }
+
+  static bool classof(const Query *Q) { return Q->Kind == QK_SetOutputKind; }
+
+  bool QuerySession::*Var;
+};
+
 } // namespace query
 } // namespace clang
 
Index: clang-query/Query.cpp
===
--- clang-query/Query.cpp
+++ clang-query/Query.cpp
@@ -107,8 +107,7 @@
 
   for (auto BI = MI->getMap().begin(), BE = MI->getMap().end(); BI != BE;
++BI) {
-switch (QS.OutKind) {
-case OK_Diag: {
+if (QS.DiagOutput) {
   clang::SourceRange R = BI->second.getSourceRange();
  

[PATCH] D53501: [clang-query] Refactor Output settings to booleans

2018-10-22 Thread Stephen Kelly via Phabricator via cfe-commits
steveire created this revision.
steveire added a reviewer: aaron.ballman.
Herald added a subscriber: cfe-commits.

This will make it possible to add non-exclusive mode output.


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D53501

Files:
  clang-query/Query.cpp
  clang-query/Query.h
  clang-query/QueryParser.cpp
  clang-query/QuerySession.h

Index: clang-query/QuerySession.h
===
--- clang-query/QuerySession.h
+++ clang-query/QuerySession.h
@@ -25,11 +25,16 @@
 class QuerySession {
 public:
   QuerySession(llvm::ArrayRef> ASTs)
-  : ASTs(ASTs), OutKind(OK_Diag), BindRoot(true), PrintMatcher(false),
+  : ASTs(ASTs), PrintOutput(true), DiagOutput(true),
+DetailedASTOutput(false), BindRoot(true), PrintMatcher(false),
 Terminate(false) {}
 
   llvm::ArrayRef> ASTs;
-  OutputKind OutKind;
+
+  bool PrintOutput;
+  bool DiagOutput;
+  bool DetailedASTOutput;
+
   bool BindRoot;
   bool PrintMatcher;
   bool Terminate;
Index: clang-query/QueryParser.cpp
===
--- clang-query/QueryParser.cpp
+++ clang-query/QueryParser.cpp
@@ -119,7 +119,17 @@
 "expected 'diag', 'print', 'detailed-ast' or 'dump', got '" + ValStr +
 "'");
   }
-  return new SetQuery(&QuerySession::OutKind, OutputKind(OutKind));
+
+  switch (OutKind) {
+  case OK_DetailedAST:
+return new SetExclusiveOutputQuery(&QuerySession::DetailedASTOutput);
+  case OK_Diag:
+return new SetExclusiveOutputQuery(&QuerySession::DiagOutput);
+  case OK_Print:
+return new SetExclusiveOutputQuery(&QuerySession::PrintOutput);
+  }
+
+  llvm_unreachable("Invalid output kind");
 }
 
 QueryRef QueryParser::endQuery(QueryRef Q) {
Index: clang-query/Query.h
===
--- clang-query/Query.h
+++ clang-query/Query.h
@@ -10,9 +10,11 @@
 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_QUERY_QUERY_H
 #define LLVM_CLANG_TOOLS_EXTRA_CLANG_QUERY_QUERY_H
 
+#include "QuerySession.h"
 #include "clang/ASTMatchers/Dynamic/VariantValue.h"
 #include "llvm/ADT/IntrusiveRefCntPtr.h"
 #include "llvm/ADT/Optional.h"
+
 #include 
 
 namespace clang {
@@ -133,6 +135,23 @@
   T Value;
 };
 
+// Implements the exclusive 'set output dump|diag|print' options
+struct SetExclusiveOutputQuery : Query {
+  SetExclusiveOutputQuery(bool QuerySession::*Var)
+  : Query(QK_SetOutputKind), Var(Var) {}
+  bool run(llvm::raw_ostream &OS, QuerySession &QS) const override {
+QS.DiagOutput = false;
+QS.DetailedASTOutput = false;
+QS.PrintOutput = false;
+QS.*Var = true;
+return true;
+  }
+
+  static bool classof(const Query *Q) { return Q->Kind == QK_SetOutputKind; }
+
+  bool QuerySession::*Var;
+};
+
 } // namespace query
 } // namespace clang
 
Index: clang-query/Query.cpp
===
--- clang-query/Query.cpp
+++ clang-query/Query.cpp
@@ -107,8 +107,7 @@
 
   for (auto BI = MI->getMap().begin(), BE = MI->getMap().end(); BI != BE;
++BI) {
-switch (QS.OutKind) {
-case OK_Diag: {
+if (QS.DiagOutput) {
   clang::SourceRange R = BI->second.getSourceRange();
   if (R.isValid()) {
 TextDiagnostic TD(OS, AST->getASTContext().getLangOpts(),
@@ -120,19 +119,18 @@
   }
   break;
 }
-case OK_Print: {
+if (QS.PrintOutput) {
   OS << "Binding for \"" << BI->first << "\":\n";
   BI->second.print(OS, AST->getASTContext().getPrintingPolicy());
   OS << "\n";
   break;
 }
-case OK_DetailedAST: {
+if (QS.DetailedASTOutput) {
   OS << "Binding for \"" << BI->first << "\":\n";
   BI->second.dump(OS, AST->getSourceManager());
   OS << "\n";
   break;
 }
-}
   }
 
   if (MI->getMap().empty())
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits