From 9e6051135a08472e178655e14570a80784d79a22 Mon Sep 17 00:00:00 2001 From: Dmitri Gribenko Date: Wed, 13 Nov 2013 22:16:51 +0000 Subject: Documentation parsing: move comment-to-XML conversion routines to libIndex llvm-svn: 194610 --- clang/lib/Index/SimpleFormatContext.h | 77 +++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 clang/lib/Index/SimpleFormatContext.h (limited to 'clang/lib/Index/SimpleFormatContext.h') diff --git a/clang/lib/Index/SimpleFormatContext.h b/clang/lib/Index/SimpleFormatContext.h new file mode 100644 index 00000000000..fde43aed211 --- /dev/null +++ b/clang/lib/Index/SimpleFormatContext.h @@ -0,0 +1,77 @@ +//===--- SimpleFormatContext.h ----------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +/// \file +/// +/// \brief Defines a utility class for use of clang-format in libclang +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_SIMPLE_FORM_CONTEXT_H +#define LLVM_CLANG_SIMPLE_FORM_CONTEXT_H + +#include "clang/Basic/Diagnostic.h" +#include "clang/Basic/DiagnosticOptions.h" +#include "clang/Basic/FileManager.h" +#include "clang/Basic/LangOptions.h" +#include "clang/Basic/SourceManager.h" +#include "clang/Rewrite/Core/Rewriter.h" +#include "llvm/Support/FileSystem.h" +#include "llvm/Support/Path.h" +#include "llvm/Support/raw_ostream.h" + +namespace clang { +namespace index { + +/// \brief A small class to be used by libclang clients to format +/// a declaration string in memory. This object is instantiated once +/// and used each time a formatting is needed. +class SimpleFormatContext { +public: + SimpleFormatContext(LangOptions Options) + : DiagOpts(new DiagnosticOptions()), + Diagnostics(new DiagnosticsEngine(new DiagnosticIDs, + DiagOpts.getPtr())), + Files((FileSystemOptions())), + Sources(*Diagnostics, Files), + Rewrite(Sources, Options) { + Diagnostics->setClient(new IgnoringDiagConsumer, true); + } + + ~SimpleFormatContext() { } + + FileID createInMemoryFile(StringRef Name, StringRef Content) { + const llvm::MemoryBuffer *Source = + llvm::MemoryBuffer::getMemBuffer(Content); + const FileEntry *Entry = + Files.getVirtualFile(Name, Source->getBufferSize(), 0); + Sources.overrideFileContents(Entry, Source, true); + assert(Entry != NULL); + return Sources.createFileID(Entry, SourceLocation(), SrcMgr::C_User); + } + + std::string getRewrittenText(FileID ID) { + std::string Result; + llvm::raw_string_ostream OS(Result); + Rewrite.getEditBuffer(ID).write(OS); + OS.flush(); + return Result; + } + + IntrusiveRefCntPtr DiagOpts; + IntrusiveRefCntPtr Diagnostics; + FileManager Files; + SourceManager Sources; + Rewriter Rewrite; +}; + +} // end namespace index +} // end namespace clang + +#endif -- cgit v1.2.3