1 1.1 joerg //===- Rewrite.cpp --------------------------------------------------------===// 2 1.1 joerg // 3 1.1 joerg // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 1.1 joerg // See https://llvm.org/LICENSE.txt for license information. 5 1.1 joerg // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 1.1 joerg // 7 1.1 joerg //===----------------------------------------------------------------------===// 8 1.1 joerg 9 1.1 joerg #include "clang-c/Rewrite.h" 10 1.1 joerg #include "CXSourceLocation.h" 11 1.1 joerg #include "CXTranslationUnit.h" 12 1.1 joerg #include "clang/Basic/SourceManager.h" 13 1.1 joerg #include "clang/Frontend/ASTUnit.h" 14 1.1 joerg #include "clang/Rewrite/Core/Rewriter.h" 15 1.1 joerg 16 1.1 joerg CXRewriter clang_CXRewriter_create(CXTranslationUnit TU) { 17 1.1 joerg if (clang::cxtu::isNotUsableTU(TU)) { 18 1.1 joerg LOG_BAD_TU(TU); 19 1.1 joerg return {}; 20 1.1 joerg } 21 1.1 joerg clang::ASTUnit *AU = clang::cxtu::getASTUnit(TU); 22 1.1 joerg assert(AU); 23 1.1 joerg return reinterpret_cast<CXRewriter>( 24 1.1 joerg new clang::Rewriter(AU->getSourceManager(), AU->getLangOpts())); 25 1.1 joerg } 26 1.1 joerg 27 1.1 joerg void clang_CXRewriter_insertTextBefore(CXRewriter Rew, CXSourceLocation Loc, 28 1.1 joerg const char *Insert) { 29 1.1 joerg assert(Rew); 30 1.1 joerg clang::Rewriter &R = *reinterpret_cast<clang::Rewriter *>(Rew); 31 1.1 joerg R.InsertTextBefore(clang::cxloc::translateSourceLocation(Loc), Insert); 32 1.1 joerg } 33 1.1 joerg 34 1.1 joerg void clang_CXRewriter_replaceText(CXRewriter Rew, CXSourceRange ToBeReplaced, 35 1.1 joerg const char *Replacement) { 36 1.1 joerg assert(Rew); 37 1.1 joerg clang::Rewriter &R = *reinterpret_cast<clang::Rewriter *>(Rew); 38 1.1 joerg R.ReplaceText(clang::cxloc::translateCXRangeToCharRange(ToBeReplaced), 39 1.1 joerg Replacement); 40 1.1 joerg } 41 1.1 joerg 42 1.1 joerg void clang_CXRewriter_removeText(CXRewriter Rew, CXSourceRange ToBeRemoved) { 43 1.1 joerg assert(Rew); 44 1.1 joerg clang::Rewriter &R = *reinterpret_cast<clang::Rewriter *>(Rew); 45 1.1 joerg R.RemoveText(clang::cxloc::translateCXRangeToCharRange(ToBeRemoved)); 46 1.1 joerg } 47 1.1 joerg 48 1.1 joerg int clang_CXRewriter_overwriteChangedFiles(CXRewriter Rew) { 49 1.1 joerg assert(Rew); 50 1.1 joerg clang::Rewriter &R = *reinterpret_cast<clang::Rewriter *>(Rew); 51 1.1 joerg return R.overwriteChangedFiles(); 52 1.1 joerg } 53 1.1 joerg 54 1.1 joerg void clang_CXRewriter_writeMainFileToStdOut(CXRewriter Rew) { 55 1.1 joerg assert(Rew); 56 1.1 joerg clang::Rewriter &R = *reinterpret_cast<clang::Rewriter *>(Rew); 57 1.1 joerg R.getEditBuffer(R.getSourceMgr().getMainFileID()).write(llvm::outs()); 58 1.1 joerg } 59 1.1 joerg 60 1.1 joerg void clang_CXRewriter_dispose(CXRewriter Rew) { 61 1.1 joerg if (Rew) 62 1.1 joerg delete reinterpret_cast<clang::Rewriter *>(Rew); 63 1.1 joerg } 64