From a5f406013645696985998bdaf1d4d85c95a280dd Mon Sep 17 00:00:00 2001 From: Yitzhak Mandelbaum Date: Wed, 16 Oct 2019 01:06:46 +0000 Subject: [libTooling] Put all Transformer declarations in a single namespace. Summary: This revision introduces a new namespace, `clang::transformer`, to hold the declarations for the Transformer library. Reviewers: gribozavr Subscribers: cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D68876 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@374962 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Tooling/Transformer/MatchConsumer.h | 8 ++++-- include/clang/Tooling/Transformer/RangeSelector.h | 20 ++++++++++++- include/clang/Tooling/Transformer/RewriteRule.h | 21 ++++++++++++-- include/clang/Tooling/Transformer/Stencil.h | 34 +++++++++++++++++------ include/clang/Tooling/Transformer/Transformer.h | 4 +-- 5 files changed, 71 insertions(+), 16 deletions(-) (limited to 'include') diff --git a/include/clang/Tooling/Transformer/MatchConsumer.h b/include/clang/Tooling/Transformer/MatchConsumer.h index 51eb6af25a..0a1dbe13ea 100644 --- a/include/clang/Tooling/Transformer/MatchConsumer.h +++ b/include/clang/Tooling/Transformer/MatchConsumer.h @@ -22,8 +22,7 @@ #include "llvm/Support/Error.h" namespace clang { -namespace tooling { - +namespace transformer { /// A failable computation over nodes bound by AST matchers. /// /// The computation should report any errors though its return value (rather @@ -52,7 +51,12 @@ MatchConsumer ifBound(std::string ID, MatchConsumer TrueC, return (Map.find(ID) != Map.end() ? TrueC : FalseC)(Result); }; } +} // namespace transformer +namespace tooling { +// DEPRECATED: Temporary alias supporting client migration to the `transformer` +// namespace. +using transformer::ifBound; } // namespace tooling } // namespace clang #endif // LLVM_CLANG_TOOLING_TRANSFORMER_MATCH_CONSUMER_H_ diff --git a/include/clang/Tooling/Transformer/RangeSelector.h b/include/clang/Tooling/Transformer/RangeSelector.h index e178fb36a8..00f1f84d0f 100644 --- a/include/clang/Tooling/Transformer/RangeSelector.h +++ b/include/clang/Tooling/Transformer/RangeSelector.h @@ -23,7 +23,7 @@ #include namespace clang { -namespace tooling { +namespace transformer { using RangeSelector = MatchConsumer; inline RangeSelector charRange(CharSourceRange R) { @@ -87,6 +87,24 @@ RangeSelector elseBranch(std::string ID); /// source), if `S` is an expansion, and `S` itself, otherwise. Corresponds to /// `SourceManager::getExpansionRange`. RangeSelector expansion(RangeSelector S); +} // namespace transformer + +namespace tooling { +// DEPRECATED: These are temporary aliases supporting client migration to the +// `transformer` namespace. +using transformer::after; +using transformer::before; +using transformer::callArgs; +using transformer::charRange; +using transformer::elseBranch; +using transformer::expansion; +using transformer::initListElements; +using transformer::member; +using transformer::name; +using transformer::node; +using transformer::range; +using transformer::statement; +using transformer::statements; } // namespace tooling } // namespace clang diff --git a/include/clang/Tooling/Transformer/RewriteRule.h b/include/clang/Tooling/Transformer/RewriteRule.h index 902a9d5bfa..058ef3f23d 100644 --- a/include/clang/Tooling/Transformer/RewriteRule.h +++ b/include/clang/Tooling/Transformer/RewriteRule.h @@ -29,9 +29,8 @@ #include namespace clang { -namespace tooling { +namespace transformer { using TextGenerator = MatchConsumer; - /// Wraps a string as a TextGenerator. inline TextGenerator text(std::string M) { return [M](const ast_matchers::MatchFinder::MatchResult &) @@ -282,6 +281,24 @@ Expected> translateEdits(const ast_matchers::MatchFinder::MatchResult &Result, llvm::ArrayRef Edits); } // namespace detail +} // namespace transformer + +namespace tooling { +// DEPRECATED: These are temporary aliases supporting client migration to the +// `transformer` namespace. +using transformer::addInclude; +using transformer::applyFirst; +using transformer::change; +using transformer::insertAfter; +using transformer::insertBefore; +using transformer::makeRule; +using transformer::remove; +using transformer::text; +using transformer::RewriteRule; +using transformer::IncludeFormat; +namespace detail { +using namespace transformer::detail; +} // namespace detail } // namespace tooling } // namespace clang diff --git a/include/clang/Tooling/Transformer/Stencil.h b/include/clang/Tooling/Transformer/Stencil.h index eeb5902444..feb3ac8853 100644 --- a/include/clang/Tooling/Transformer/Stencil.h +++ b/include/clang/Tooling/Transformer/Stencil.h @@ -31,8 +31,7 @@ #include namespace clang { -namespace tooling { - +namespace transformer { /// A stencil is represented as a sequence of "parts" that can each individually /// generate a code string based on a match result. The different kinds of /// parts include (raw) text, references to bound nodes and assorted operations @@ -133,8 +132,10 @@ private: std::vector Parts; }; +// // Functions for conveniently building stencils. -namespace stencil { +// + /// Convenience wrapper for Stencil::cat that can be imported with a using decl. template Stencil cat(Ts &&... Parts) { return Stencil::cat(std::forward(Parts)...); @@ -146,12 +147,6 @@ StencilPart text(llvm::StringRef Text); /// \returns the source corresponding to the selected range. StencilPart selection(RangeSelector Selector); -/// \returns the source corresponding to the identified node. -/// FIXME: Deprecated. Write `selection(node(Id))` instead. -inline StencilPart node(llvm::StringRef Id) { - return selection(tooling::node(Id)); -} - /// Generates the source of the expression bound to \p Id, wrapping it in /// parentheses if it may parse differently depending on context. For example, a /// binary operation is always wrapped, while a variable reference is never @@ -197,6 +192,27 @@ StencilPart run(MatchConsumer C); /// /// \returns the string resulting from calling the node's print() method. StencilPart dPrint(llvm::StringRef Id); +} // namespace transformer + +namespace tooling { +namespace stencil { +// DEPRECATED: These are temporary aliases supporting client migration to the +// `transformer` namespace. +using transformer::access; +using transformer::addressOf; +using transformer::cat; +using transformer::deref; +using transformer::dPrint; +using transformer::expression; +using transformer::ifBound; +using transformer::run; +using transformer::selection; +using transformer::text; +/// \returns the source corresponding to the identified node. +/// FIXME: Deprecated. Write `selection(node(Id))` instead. +inline transformer::StencilPart node(llvm::StringRef Id) { + return selection(tooling::node(Id)); +} } // namespace stencil } // namespace tooling } // namespace clang diff --git a/include/clang/Tooling/Transformer/Transformer.h b/include/clang/Tooling/Transformer/Transformer.h index d714d446d5..31feacba5e 100644 --- a/include/clang/Tooling/Transformer/Transformer.h +++ b/include/clang/Tooling/Transformer/Transformer.h @@ -30,7 +30,7 @@ public: /// because of macros, but doesn't fail. Note that clients are responsible /// for handling the case that independent \c AtomicChanges conflict with each /// other. - Transformer(RewriteRule Rule, ChangeConsumer Consumer) + Transformer(transformer::RewriteRule Rule, ChangeConsumer Consumer) : Rule(std::move(Rule)), Consumer(std::move(Consumer)) {} /// N.B. Passes `this` pointer to `MatchFinder`. So, this object should not @@ -42,7 +42,7 @@ public: void run(const ast_matchers::MatchFinder::MatchResult &Result) override; private: - RewriteRule Rule; + transformer::RewriteRule Rule; /// Receives each successful rewrites as an \c AtomicChange. ChangeConsumer Consumer; }; -- cgit v1.2.1