188b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian//===--- SimpleFormatContext.h ----------------------------------*- C++ -*-===// 288b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian// 388b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian// The LLVM Compiler Infrastructure 488b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian// 588b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian// This file is distributed under the University of Illinois Open Source 688b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian// License. See LICENSE.TXT for details. 788b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian// 888b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian//===----------------------------------------------------------------------===// 988b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian// 104547fb55370b80f468fec19903ecb4a5cfd6d734Fariborz Jahanian/// \file 11e3ec31a6c2ff37bbc1ebea523e9f1730e0b4b1c7Fariborz Jahanian/// 124547fb55370b80f468fec19903ecb4a5cfd6d734Fariborz Jahanian/// \brief Defines a utility class for use of clang-format in libclang 1388b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian// 1488b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian//===----------------------------------------------------------------------===// 1588b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian 1688b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian#ifndef LLVM_CLANG_SIMPLE_FORM_CONTEXT_H 1788b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian#define LLVM_CLANG_SIMPLE_FORM_CONTEXT_H 1888b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian 1988b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian#include "clang/Basic/Diagnostic.h" 2088b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian#include "clang/Basic/DiagnosticOptions.h" 2188b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian#include "clang/Basic/FileManager.h" 2288b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian#include "clang/Basic/LangOptions.h" 2388b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian#include "clang/Basic/SourceManager.h" 2488b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian#include "clang/Rewrite/Core/Rewriter.h" 2588b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian#include "llvm/Support/FileSystem.h" 2688b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian#include "llvm/Support/Path.h" 2788b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian#include "llvm/Support/raw_ostream.h" 2888b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian 2988b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahaniannamespace clang { 3088b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian 3188b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian/// \brief A small class to be used by libclang clients to format 3288b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian/// a declaration string in memory. This object is instantiated once 3388b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian/// and used each time a formatting is needed. 3488b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanianclass SimpleFormatContext { 357c10683c834f051e018c89b090d64bf5e4ca3bccFariborz Jahanianpublic: 3688b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian SimpleFormatContext(LangOptions Options) 3788b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian : DiagOpts(new DiagnosticOptions()), 3888b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian Diagnostics(new DiagnosticsEngine(new DiagnosticIDs, 3988b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian DiagOpts.getPtr())), 4088b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian Files((FileSystemOptions())), 4188b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian Sources(*Diagnostics, Files), 4288b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian Rewrite(Sources, Options) { 4388b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian Diagnostics->setClient(new IgnoringDiagConsumer, true); 4488b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian } 4588b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian 4688b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian ~SimpleFormatContext() { } 4788b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian 4888b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian FileID createInMemoryFile(StringRef Name, StringRef Content) { 4988b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian const llvm::MemoryBuffer *Source = 5088b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian llvm::MemoryBuffer::getMemBuffer(Content); 5188b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian const FileEntry *Entry = 5288b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian Files.getVirtualFile(Name, Source->getBufferSize(), 0); 5388b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian Sources.overrideFileContents(Entry, Source, true); 5488b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian assert(Entry != NULL); 5588b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian return Sources.createFileID(Entry, SourceLocation(), SrcMgr::C_User); 5688b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian } 5788b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian 5888b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian std::string getRewrittenText(FileID ID) { 5988b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian std::string Result; 6088b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian llvm::raw_string_ostream OS(Result); 6188b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian Rewrite.getEditBuffer(ID).write(OS); 6288b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian OS.flush(); 6388b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian return Result; 6488b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian } 6588b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian 66cfa88f893915ceb8ae4ce2f17c46c24a4d67502fDmitri Gribenko IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts; 67cfa88f893915ceb8ae4ce2f17c46c24a4d67502fDmitri Gribenko IntrusiveRefCntPtr<DiagnosticsEngine> Diagnostics; 6888b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian FileManager Files; 6988b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian SourceManager Sources; 7088b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian Rewriter Rewrite; 7188b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian}; 7288b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian 7388b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian} // end namespace clang 7488b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian 7588b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian#endif 76