//===- Rewriter.cpp - Code rewriting interface ----------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines the Rewriter class, which is used for code // transformations. // //===----------------------------------------------------------------------===// #include "clang/Rewrite/Core/Rewriter.h" #include "clang/Basic/Diagnostic.h" #include "clang/Basic/DiagnosticIDs.h" #include "clang/Basic/SourceLocation.h" #include "clang/Basic/SourceManager.h" #include "clang/Lex/Lexer.h" #include "llvm/ADT/RewriteBuffer.h" #include "llvm/ADT/RewriteRope.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/Error.h" #include "llvm/Support/raw_ostream.h" #include <cassert> #include <iterator> #include <map> #include <utility> usingnamespaceclang; RewriteBuffer; //===----------------------------------------------------------------------===// // Rewriter class //===----------------------------------------------------------------------===// /// Return true if this character is non-new-line whitespace: /// ' ', '\\t', '\\f', '\\v', '\\r'. static inline bool isWhitespaceExceptNL(unsigned char c) { … } /// getRangeSize - Return the size in bytes of the specified range if they /// are in the same file. If not, this returns -1. int Rewriter::getRangeSize(const CharSourceRange &Range, RewriteOptions opts) const { … } int Rewriter::getRangeSize(SourceRange Range, RewriteOptions opts) 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. std::string Rewriter::getRewrittenText(CharSourceRange Range) const { … } unsigned Rewriter::getLocationOffsetAndFileID(SourceLocation Loc, FileID &FID) const { … } /// getEditBuffer - Get or create a RewriteBuffer for the specified FileID. RewriteBuffer &Rewriter::getEditBuffer(FileID FID) { … } /// InsertText - Insert the specified string at the specified location in the /// original buffer. bool Rewriter::InsertText(SourceLocation Loc, StringRef Str, bool InsertAfter, bool indentNewLines) { … } bool Rewriter::InsertTextAfterToken(SourceLocation Loc, StringRef Str) { … } /// RemoveText - Remove the specified text region. bool Rewriter::RemoveText(SourceLocation Start, unsigned Length, RewriteOptions opts) { … } /// ReplaceText - This method replaces a range of characters in the input /// buffer with a new string. This is effectively a combined "remove/insert" /// operation. bool Rewriter::ReplaceText(SourceLocation Start, unsigned OrigLength, StringRef NewStr) { … } bool Rewriter::ReplaceText(SourceRange range, SourceRange replacementRange) { … } bool Rewriter::IncreaseIndentation(CharSourceRange range, SourceLocation parentIndent) { … } bool Rewriter::overwriteChangedFiles() { … }