clang 20.0.0git
Classes | Namespaces | Typedefs | Enumerations | Functions | Variables
RewriteRule.h File Reference

Defines the RewriteRule class and related functions for creating, modifying and interpreting RewriteRules. More...

#include "clang/ASTMatchers/ASTMatchFinder.h"
#include "clang/ASTMatchers/ASTMatchers.h"
#include "clang/ASTMatchers/ASTMatchersInternal.h"
#include "clang/Tooling/Refactoring/AtomicChange.h"
#include "clang/Tooling/Transformer/MatchConsumer.h"
#include "clang/Tooling/Transformer/RangeSelector.h"
#include "llvm/ADT/Any.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Support/Error.h"
#include <functional>
#include <string>
#include <utility>

Go to the source code of this file.

Classes

struct  clang::transformer::Edit
 A concrete description of a source edit, represented by a character range in the source to be replaced and a corresponding replacement string. More...
 
struct  clang::transformer::ASTEdit
 
struct  clang::transformer::RewriteRuleBase
 Description of a source-code transformation. More...
 
struct  clang::transformer::RewriteRuleBase::Case
 
struct  clang::transformer::RewriteRuleWith< MetadataT >
 A source-code transformation with accompanying metadata. More...
 
struct  clang::transformer::RewriteRuleWith< void >
 

Namespaces

namespace  clang
 The JSON file list parser is used to communicate input to InstallAPI.
 
namespace  clang::transformer
 
namespace  clang::transformer::detail
 The following three functions are a low-level part of the RewriteRule API.
 

Typedefs

using clang::transformer::EditGenerator = MatchConsumer< llvm::SmallVector< Edit, 1 > >
 Maps a match result to a list of concrete edits (with possible failure).
 
template<typename T >
using clang::transformer::Generator = std::shared_ptr< MatchComputation< T > >
 
using clang::transformer::TextGenerator = Generator< std::string >
 
using clang::transformer::AnyGenerator = MatchConsumer< llvm::Any >
 
using clang::transformer::RewriteRule = RewriteRuleWith< void >
 

Enumerations

enum class  clang::transformer::EditKind { clang::transformer::Range , clang::transformer::AddInclude }
 
enum class  clang::transformer::IncludeFormat { clang::transformer::Quoted , clang::transformer::Angled }
 Format of the path in an include directive – angle brackets or quotes. More...
 

Functions

EditGenerator clang::transformer::edit (ASTEdit E)
 Generates a single (specified) edit.
 
EditGenerator clang::transformer::editList (llvm::SmallVector< ASTEdit, 1 > Edits)
 Lifts a list of ASTEdits into an EditGenerator.
 
EditGenerator clang::transformer::noEdits ()
 Generates no edits.
 
EditGenerator clang::transformer::noopEdit (RangeSelector Anchor)
 Generates a single, no-op edit anchored at the start location of the specified range.
 
ASTEdit clang::transformer::note (RangeSelector Anchor, TextGenerator Note)
 Generates a single, no-op edit with the associated note anchored at the start location of the specified range.
 
EditGenerator clang::transformer::ifBound (std::string ID, ASTEdit TrueEdit, ASTEdit FalseEdit)
 Version of ifBound specialized to ASTEdit.
 
EditGenerator clang::transformer::ifBound (std::string ID, ASTEdit TrueEdit)
 Version of ifBound that has no "False" branch.
 
EditGenerator clang::transformer::flattenVector (SmallVector< EditGenerator, 2 > Generators)
 Flattens a list of generators into a single generator whose elements are the concatenation of the results of the argument generators.
 
EditGenerator clang::transformer::detail::injectEdits (ASTEdit E)
 Helper function to construct an EditGenerator.
 
EditGenerator clang::transformer::detail::injectEdits (EditGenerator G)
 
template<typename... Ts>
EditGenerator clang::transformer::flatten (Ts &&...Edits)
 
ASTEdit clang::transformer::changeTo (RangeSelector Target, TextGenerator Replacement)
 Replaces a portion of the source text with Replacement.
 
ASTEdit clang::transformer::change (RangeSelector Target, TextGenerator Replacement)
 DEPRECATED: use changeTo.
 
ASTEdit clang::transformer::changeTo (TextGenerator Replacement)
 Replaces the entirety of a RewriteRule's match with Replacement.
 
ASTEdit clang::transformer::change (TextGenerator Replacement)
 DEPRECATED: use changeTo.
 
ASTEdit clang::transformer::insertBefore (RangeSelector S, TextGenerator Replacement)
 Inserts Replacement before S, leaving the source selected by \S unchanged.
 
ASTEdit clang::transformer::insertAfter (RangeSelector S, TextGenerator Replacement)
 Inserts Replacement after S, leaving the source selected by \S unchanged.
 
ASTEdit clang::transformer::remove (RangeSelector S)
 Removes the source selected by S.
 
ASTEdit clang::transformer::addInclude (RangeSelector Target, StringRef Header, IncludeFormat Format=IncludeFormat::Quoted)
 Adds an include directive for the given header to the file of Target.
 
ASTEdit clang::transformer::addInclude (StringRef Header, IncludeFormat Format=IncludeFormat::Quoted)
 Adds an include directive for the given header to the file associated with RootID.
 
template<typename Callable >
ASTEdit clang::transformer::withMetadata (ASTEdit Edit, Callable Metadata)
 
EditGenerator clang::transformer::shrinkTo (RangeSelector outer, RangeSelector inner)
 Assuming that the inner range is enclosed by the outer range, creates precision edits to remove the parts of the outer range that are not included in the inner range.
 
RewriteRule clang::transformer::detail::makeRule (ast_matchers::internal::DynTypedMatcher M, EditGenerator Edits)
 
template<typename MetadataT >
RewriteRuleWith< MetadataT > clang::transformer::detail::makeRule (ast_matchers::internal::DynTypedMatcher M, EditGenerator Edits, Generator< MetadataT > Metadata)
 
EditGenerator clang::transformer::detail::makeEditGenerator (EditGenerator Edits)
 
EditGenerator clang::transformer::detail::makeEditGenerator (llvm::SmallVector< ASTEdit, 1 > Edits)
 
EditGenerator clang::transformer::detail::makeEditGenerator (ASTEdit Edit)
 
void clang::transformer::addInclude (RewriteRuleBase &Rule, llvm::StringRef Header, IncludeFormat Format=IncludeFormat::Quoted)
 For every case in Rule, adds an include directive for the given header.
 
template<int & ..., typename MetadataT >
std::enable_if_t<!std::is_same< MetadataT, void >::value, RewriteRule > clang::transformer::stripMetadata (RewriteRuleWith< MetadataT > Rule)
 Converts a RewriteRuleWith<T> to a RewriteRule by stripping off the metadata generators.
 
EditGenerator clang::transformer::rewriteDescendants (std::string NodeId, RewriteRule Rule)
 Applies Rule to all descendants of the node bound to NodeId.
 
ast_matchers::internal::DynTypedMatcher clang::transformer::detail::buildMatcher (const RewriteRuleBase &Rule)
 Builds a single matcher for the rule, covering all of the rule's cases.
 
std::vector< ast_matchers::internal::DynTypedMatcher > clang::transformer::detail::buildMatchers (const RewriteRuleBase &Rule)
 Builds a set of matchers that cover the rule.
 
SourceLocation clang::transformer::detail::getRuleMatchLoc (const ast_matchers::MatchFinder::MatchResult &Result)
 Gets the beginning location of the source matched by a rewrite rule.
 
size_t clang::transformer::detail::findSelectedCase (const ast_matchers::MatchFinder::MatchResult &Result, const RewriteRuleBase &Rule)
 Returns the index of the Case of Rule that was selected in the match result.
 
template<int & ..., typename EditsT >
RewriteRule clang::transformer::makeRule (ast_matchers::internal::DynTypedMatcher M, EditsT &&Edits)
 Constructs a simple RewriteRule.
 
RewriteRule clang::transformer::makeRule (ast_matchers::internal::DynTypedMatcher M, std::initializer_list< ASTEdit > Edits)
 
template<typename MetadataT , int & ..., typename EditsT >
RewriteRuleWith< MetadataT > clang::transformer::makeRule (ast_matchers::internal::DynTypedMatcher M, EditsT &&Edits, Generator< MetadataT > Metadata)
 Overloads of makeRule that also generate metadata when matching.
 
template<typename MetadataT >
RewriteRuleWith< MetadataT > clang::transformer::makeRule (ast_matchers::internal::DynTypedMatcher M, std::initializer_list< ASTEdit > Edits, Generator< MetadataT > Metadata)
 
template<typename MetadataT >
RewriteRuleWith< MetadataT > clang::transformer::applyFirst (ArrayRef< RewriteRuleWith< MetadataT > > Rules)
 Applies the first rule whose pattern matches; other rules are ignored.
 
template<>
RewriteRuleWith< void > clang::transformer::applyFirst (ArrayRef< RewriteRuleWith< void > > Rules)
 
template<typename MetadataT >
RewriteRuleWith< MetadataT > clang::transformer::applyFirst (const std::vector< RewriteRuleWith< MetadataT > > &Rules)
 
template<typename MetadataT >
RewriteRuleWith< MetadataT > clang::transformer::applyFirst (std::initializer_list< RewriteRuleWith< MetadataT > > Rules)
 
llvm::Expected< SmallVector< Edit, 1 > > clang::transformer::detail::rewriteDescendants (const Decl &Node, RewriteRule Rule, const ast_matchers::MatchFinder::MatchResult &Result)
 The following overload set is a version of rewriteDescendants that operates directly on the AST, rather than generating a Transformer combinator.
 
llvm::Expected< SmallVector< Edit, 1 > > clang::transformer::detail::rewriteDescendants (const Stmt &Node, RewriteRule Rule, const ast_matchers::MatchFinder::MatchResult &Result)
 
llvm::Expected< SmallVector< Edit, 1 > > clang::transformer::detail::rewriteDescendants (const TypeLoc &Node, RewriteRule Rule, const ast_matchers::MatchFinder::MatchResult &Result)
 
llvm::Expected< SmallVector< Edit, 1 > > clang::transformer::detail::rewriteDescendants (const DynTypedNode &Node, RewriteRule Rule, const ast_matchers::MatchFinder::MatchResult &Result)
 

Variables

const char clang::transformer::RootID [] = "___root___"
 

Detailed Description

Defines the RewriteRule class and related functions for creating, modifying and interpreting RewriteRules.

Definition in file RewriteRule.h.