clang 22.0.0git
clang::Rewriter Class Reference

Rewriter - This is the main interface to the rewrite buffers. More...

#include "clang/Rewrite/Core/Rewriter.h"

Classes

struct  RewriteOptions

Public Types

using buffer_iterator = std::map<FileID, llvm::RewriteBuffer>::iterator
using const_buffer_iterator

Public Member Functions

 Rewriter ()=default
 Rewriter (SourceManager &SM, const LangOptions &LO)
void setSourceMgr (SourceManager &SM, const LangOptions &LO)
SourceManagergetSourceMgr () const
const LangOptionsgetLangOpts () const
int getRangeSize (SourceRange Range, RewriteOptions opts=RewriteOptions()) const
 getRangeSize - Return the size in bytes of the specified range if they are in the same file.
int getRangeSize (const CharSourceRange &Range, RewriteOptions opts=RewriteOptions()) const
 getRangeSize - Return the size in bytes of the specified range if they are in the same file.
std::string getRewrittenText (CharSourceRange Range) const
 getRewrittenText - Return the rewritten form of the text in the specified range.
std::string getRewrittenText (SourceRange Range) const
 getRewrittenText - Return the rewritten form of the text in the specified range.
bool InsertText (SourceLocation Loc, StringRef Str, bool InsertAfter=true, bool indentNewLines=false)
 InsertText - Insert the specified string at the specified location in the original buffer.
bool InsertTextAfter (SourceLocation Loc, StringRef Str)
 InsertTextAfter - Insert the specified string at the specified location in the original buffer.
bool InsertTextAfterToken (SourceLocation Loc, StringRef Str)
 Insert the specified string after the token in the specified location.
bool InsertTextBefore (SourceLocation Loc, StringRef Str)
 InsertText - Insert the specified string at the specified location in the original buffer.
bool RemoveText (SourceLocation Start, unsigned Length, RewriteOptions opts=RewriteOptions())
 RemoveText - Remove the specified text region.
bool RemoveText (CharSourceRange range, RewriteOptions opts=RewriteOptions())
 Remove the specified text region.
bool RemoveText (SourceRange range, RewriteOptions opts=RewriteOptions())
 Remove the specified text region.
bool ReplaceText (SourceLocation Start, unsigned OrigLength, StringRef NewStr)
 ReplaceText - This method replaces a range of characters in the input buffer with a new string.
bool ReplaceText (CharSourceRange range, StringRef NewStr)
 ReplaceText - This method replaces a range of characters in the input buffer with a new string.
bool ReplaceText (SourceRange range, StringRef NewStr)
 ReplaceText - This method replaces a range of characters in the input buffer with a new string.
bool ReplaceText (SourceRange range, SourceRange replacementRange)
 ReplaceText - This method replaces a range of characters in the input buffer with a new string.
bool IncreaseIndentation (CharSourceRange range, SourceLocation parentIndent)
 Increase indentation for the lines between the given source range.
bool IncreaseIndentation (SourceRange range, SourceLocation parentIndent)
llvm::RewriteBuffer & getEditBuffer (FileID FID)
 getEditBuffer - This is like getRewriteBufferFor, but always returns a buffer, and allows you to write on it directly.
const llvm::RewriteBuffer * getRewriteBufferFor (FileID FID) const
 getRewriteBufferFor - Return the rewrite buffer for the specified FileID.
buffer_iterator buffer_begin ()
buffer_iterator buffer_end ()
const_buffer_iterator buffer_begin () const
const_buffer_iterator buffer_end () const
bool overwriteChangedFiles ()
 overwriteChangedFiles - Save all changed files to disk.

Static Public Member Functions

static bool isRewritable (SourceLocation Loc)
 isRewritable - Return true if this location is a raw file location, which is rewritable.

Detailed Description

Rewriter - This is the main interface to the rewrite buffers.

Its primary job is to dispatch high-level requests to the low-level RewriteBuffers that are involved.

Definition at line 32 of file Rewriter.h.

Member Typedef Documentation

◆ buffer_iterator

using clang::Rewriter::buffer_iterator = std::map<FileID, llvm::RewriteBuffer>::iterator

Definition at line 65 of file Rewriter.h.

◆ const_buffer_iterator

Initial value:
std::map<FileID, llvm::RewriteBuffer>::const_iterator

Definition at line 66 of file Rewriter.h.

Constructor & Destructor Documentation

◆ Rewriter() [1/2]

clang::Rewriter::Rewriter ( )
explicitdefault

◆ Rewriter() [2/2]

clang::Rewriter::Rewriter ( SourceManager & SM,
const LangOptions & LO )
inlineexplicit

Definition at line 70 of file Rewriter.h.

References SM.

Member Function Documentation

◆ buffer_begin() [1/2]

buffer_iterator clang::Rewriter::buffer_begin ( )
inline

Definition at line 206 of file Rewriter.h.

Referenced by overwriteChangedFiles().

◆ buffer_begin() [2/2]

const_buffer_iterator clang::Rewriter::buffer_begin ( ) const
inline

Definition at line 208 of file Rewriter.h.

◆ buffer_end() [1/2]

buffer_iterator clang::Rewriter::buffer_end ( )
inline

Definition at line 207 of file Rewriter.h.

Referenced by overwriteChangedFiles().

◆ buffer_end() [2/2]

const_buffer_iterator clang::Rewriter::buffer_end ( ) const
inline

Definition at line 209 of file Rewriter.h.

◆ getEditBuffer()

RewriteBuffer & Rewriter::getEditBuffer ( FileID FID)

getEditBuffer - This is like getRewriteBufferFor, but always returns a buffer, and allows you to write on it directly.

getEditBuffer - Get or create a RewriteBuffer for the specified FileID.

This is useful if you want efficient low-level access to apis for scribbling on one specific FileID's buffer.

Definition at line 142 of file Rewriter.cpp.

Referenced by clang::html::AddLineNumbers(), clang::html::EscapeText(), clang::html::HighlightRange(), IncreaseIndentation(), InsertText(), InsertTextAfterToken(), RemoveText(), and ReplaceText().

◆ getLangOpts()

const LangOptions & clang::Rewriter::getLangOpts ( ) const
inline

Definition at line 79 of file Rewriter.h.

Referenced by clang::html::HighlightRange().

◆ getRangeSize() [1/2]

int Rewriter::getRangeSize ( const CharSourceRange & Range,
RewriteOptions opts = RewriteOptions() ) const

getRangeSize - Return the size in bytes of the specified range if they are in the same file.

If not, this returns -1.

Definition at line 46 of file Rewriter.cpp.

References clang::Rewriter::RewriteOptions::IncludeInsertsAtBeginOfRange, clang::Rewriter::RewriteOptions::IncludeInsertsAtEndOfRange, isRewritable(), and clang::Lexer::MeasureTokenLength().

◆ getRangeSize() [2/2]

int Rewriter::getRangeSize ( SourceRange Range,
RewriteOptions opts = RewriteOptions() ) const

getRangeSize - Return the size in bytes of the specified range if they are in the same file.

If not, this returns -1.

Definition at line 76 of file Rewriter.cpp.

References getRangeSize(), and clang::CharSourceRange::getTokenRange().

Referenced by getRangeSize(), InsertTextAfterToken(), RemoveText(), RemoveText(), ReplaceText(), ReplaceText(), and ReplaceText().

◆ getRewriteBufferFor()

const llvm::RewriteBuffer * clang::Rewriter::getRewriteBufferFor ( FileID FID) const
inline

getRewriteBufferFor - Return the rewrite buffer for the specified FileID.

If no modification has been made to it, return null.

Definition at line 199 of file Rewriter.h.

References clang::nullptr.

◆ getRewrittenText() [1/2]

std::string Rewriter::getRewrittenText ( CharSourceRange Range) const

getRewrittenText - Return the rewritten form of the text in the specified range.

If the start or end of the range was unrewritable or if they are in different buffers, this returns an empty string.

Note that this method is not particularly efficient.

Definition at line 85 of file Rewriter.cpp.

References isRewritable(), and clang::Lexer::MeasureTokenLength().

Referenced by getRewrittenText().

◆ getRewrittenText() [2/2]

std::string clang::Rewriter::getRewrittenText ( SourceRange Range) const
inline

getRewrittenText - Return the rewritten form of the text in the specified range.

If the start or end of the range was unrewritable or if they are in different buffers, this returns an empty string.

Note that this method is not particularly efficient.

Definition at line 106 of file Rewriter.h.

References getRewrittenText(), and clang::CharSourceRange::getTokenRange().

◆ getSourceMgr()

◆ IncreaseIndentation() [1/2]

bool Rewriter::IncreaseIndentation ( CharSourceRange range,
SourceLocation parentIndent )

Increase indentation for the lines between the given source range.

To determine what the indentation should be, 'parentIndent' is used that should be at a source location with an indentation one degree lower than the given range.

Definition at line 246 of file Rewriter.cpp.

References getEditBuffer(), isRewritable(), isWhitespaceExceptNL(), and clang::SrcMgr::ContentCache::SourceLineCache.

Referenced by IncreaseIndentation().

◆ IncreaseIndentation() [2/2]

bool clang::Rewriter::IncreaseIndentation ( SourceRange range,
SourceLocation parentIndent )
inline

Definition at line 186 of file Rewriter.h.

References clang::CharSourceRange::getTokenRange(), and IncreaseIndentation().

◆ InsertText()

bool Rewriter::InsertText ( SourceLocation Loc,
StringRef Str,
bool InsertAfter = true,
bool indentNewLines = false )

InsertText - Insert the specified string at the specified location in the original buffer.

This method returns true (and does nothing) if the input location was not rewritable, false otherwise.

Parameters
indentNewLinesif true new lines in the string are indented using the indentation of the source line in position Loc.

Definition at line 157 of file Rewriter.cpp.

References getEditBuffer(), isRewritable(), isWhitespaceExceptNL(), and clang::SrcMgr::ContentCache::SourceLineCache.

Referenced by InsertTextAfter(), and InsertTextBefore().

◆ InsertTextAfter()

bool clang::Rewriter::InsertTextAfter ( SourceLocation Loc,
StringRef Str )
inline

InsertTextAfter - Insert the specified string at the specified location in the original buffer.

This method returns true (and does nothing) if the input location was not rewritable, false otherwise. Text is inserted after any other text that has been previously inserted at the some point (the default behavior for InsertText).

Definition at line 124 of file Rewriter.h.

References InsertText().

◆ InsertTextAfterToken()

bool Rewriter::InsertTextAfterToken ( SourceLocation Loc,
StringRef Str )

Insert the specified string after the token in the specified location.

Definition at line 198 of file Rewriter.cpp.

References getEditBuffer(), getRangeSize(), clang::Rewriter::RewriteOptions::IncludeInsertsAtBeginOfRange, and isRewritable().

◆ InsertTextBefore()

bool clang::Rewriter::InsertTextBefore ( SourceLocation Loc,
StringRef Str )
inline

InsertText - Insert the specified string at the specified location in the original buffer.

This method returns true (and does nothing) if the input location was not rewritable, false otherwise. Text is inserted before any other text that has been previously inserted at the some point.

Definition at line 137 of file Rewriter.h.

References InsertText().

◆ isRewritable()

bool clang::Rewriter::isRewritable ( SourceLocation Loc)
inlinestatic

isRewritable - Return true if this location is a raw file location, which is rewritable.

Locations from macros, etc are not rewritable.

Definition at line 83 of file Rewriter.h.

References clang::SourceLocation::isFileID().

Referenced by getRangeSize(), getRewrittenText(), IncreaseIndentation(), InsertText(), InsertTextAfterToken(), RemoveText(), ReplaceText(), and ReplaceText().

◆ overwriteChangedFiles()

bool Rewriter::overwriteChangedFiles ( )

overwriteChangedFiles - Save all changed files to disk.

Returns true if any files were not saved successfully. Outputs diagnostics via the source manager's diagnostic engine in case of an error.

Definition at line 314 of file Rewriter.cpp.

References buffer_begin(), buffer_end(), Diag(), clang::Error, clang::DiagnosticsEngine::Error, clang::SourceManager::getDiagnostics(), clang::SourceManager::getFileEntryRefForID(), clang::SourceManager::getFileManager(), clang::FileEntryRef::getName(), getSourceMgr(), and clang::FileManager::makeAbsolutePath().

◆ RemoveText() [1/3]

bool clang::Rewriter::RemoveText ( CharSourceRange range,
RewriteOptions opts = RewriteOptions() )
inline

Remove the specified text region.

Definition at line 146 of file Rewriter.h.

References getRangeSize(), and RemoveText().

◆ RemoveText() [2/3]

bool Rewriter::RemoveText ( SourceLocation Start,
unsigned Length,
RewriteOptions opts = RewriteOptions() )

RemoveText - Remove the specified text region.

Definition at line 210 of file Rewriter.cpp.

References getEditBuffer(), isRewritable(), and clang::Rewriter::RewriteOptions::RemoveLineIfEmpty.

Referenced by RemoveText(), and RemoveText().

◆ RemoveText() [3/3]

bool clang::Rewriter::RemoveText ( SourceRange range,
RewriteOptions opts = RewriteOptions() )
inline

Remove the specified text region.

Definition at line 152 of file Rewriter.h.

References getRangeSize(), and RemoveText().

◆ ReplaceText() [1/4]

bool clang::Rewriter::ReplaceText ( CharSourceRange range,
StringRef NewStr )
inline

ReplaceText - This method replaces a range of characters in the input buffer with a new string.

This is effectively a combined "remove/insert" operation.

Definition at line 165 of file Rewriter.h.

References getRangeSize(), and ReplaceText().

◆ ReplaceText() [2/4]

bool Rewriter::ReplaceText ( SourceLocation Start,
unsigned OrigLength,
StringRef NewStr )

ReplaceText - This method replaces a range of characters in the input buffer with a new string.

This is effectively a combined "remove/insert" operation.

Definition at line 222 of file Rewriter.cpp.

References getEditBuffer(), and isRewritable().

Referenced by ReplaceText(), ReplaceText(), and ReplaceText().

◆ ReplaceText() [3/4]

bool Rewriter::ReplaceText ( SourceRange range,
SourceRange replacementRange )

ReplaceText - This method replaces a range of characters in the input buffer with a new string.

This is effectively a combined "remove/insert" operation.

Definition at line 232 of file Rewriter.cpp.

References clang::SourceRange::getBegin(), getRangeSize(), clang::SourceRange::isInvalid(), isRewritable(), and ReplaceText().

◆ ReplaceText() [4/4]

bool clang::Rewriter::ReplaceText ( SourceRange range,
StringRef NewStr )
inline

ReplaceText - This method replaces a range of characters in the input buffer with a new string.

This is effectively a combined "remove/insert" operation.

Definition at line 172 of file Rewriter.h.

References getRangeSize(), and ReplaceText().

◆ setSourceMgr()

void clang::Rewriter::setSourceMgr ( SourceManager & SM,
const LangOptions & LO )
inline

Definition at line 73 of file Rewriter.h.

References SM.


The documentation for this class was generated from the following files: