diff options
Diffstat (limited to 'include/clang/Tooling/FixIt.h')
| -rw-r--r-- | include/clang/Tooling/FixIt.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/include/clang/Tooling/FixIt.h b/include/clang/Tooling/FixIt.h new file mode 100644 index 000000000000..e2259d4357bc --- /dev/null +++ b/include/clang/Tooling/FixIt.h @@ -0,0 +1,72 @@ +//===--- FixIt.h - FixIt Hint utilities -------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file implements functions to ease source rewriting from AST-nodes. +// +// Example swapping A and B expressions: +// +// Expr *A, *B; +// tooling::fixit::createReplacement(*A, *B); +// tooling::fixit::createReplacement(*B, *A); +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_TOOLING_FIXIT_H +#define LLVM_CLANG_TOOLING_FIXIT_H + +#include "clang/AST/ASTContext.h" + +namespace clang { +namespace tooling { +namespace fixit { + +namespace internal { +StringRef getText(SourceRange Range, const ASTContext &Context); + +/// \brief Returns the SourceRange of a SourceRange. This identity function is +/// used by the following template abstractions. +inline SourceRange getSourceRange(const SourceRange &Range) { return Range; } + +/// \brief Returns the SourceRange of the token at Location \p Loc. +inline SourceRange getSourceRange(const SourceLocation &Loc) { + return SourceRange(Loc); +} + +/// \brief Returns the SourceRange of an given Node. \p Node is typically a +/// 'Stmt', 'Expr' or a 'Decl'. +template <typename T> SourceRange getSourceRange(const T &Node) { + return Node.getSourceRange(); +} +} // end namespace internal + +// \brief Returns a textual representation of \p Node. +template <typename T> +StringRef getText(const T &Node, const ASTContext &Context) { + return internal::getText(internal::getSourceRange(Node), Context); +} + +// \brief Returns a FixItHint to remove \p Node. +// TODO: Add support for related syntactical elements (i.e. comments, ...). +template <typename T> FixItHint createRemoval(const T &Node) { + return FixItHint::CreateRemoval(internal::getSourceRange(Node)); +} + +// \brief Returns a FixItHint to replace \p Destination by \p Source. +template <typename D, typename S> +FixItHint createReplacement(const D &Destination, const S &Source, + const ASTContext &Context) { + return FixItHint::CreateReplacement(internal::getSourceRange(Destination), + getText(Source, Context)); +} + +} // end namespace fixit +} // end namespace tooling +} // end namespace clang + +#endif // LLVM_CLANG_TOOLING_FIXINT_H |
