78 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===--- 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<DiagnosticOptions> DiagOpts;
 | |
|   IntrusiveRefCntPtr<DiagnosticsEngine> Diagnostics;
 | |
|   FileManager Files;
 | |
|   SourceManager Sources;
 | |
|   Rewriter Rewrite;
 | |
| };
 | |
| 
 | |
| } // end namespace index
 | |
| } // end namespace clang
 | |
| 
 | |
| #endif
 | 
