annotate clang/lib/Index/SimpleFormatContext.h @ 176:de4ac79aef9d

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 17:13:11 +0900
parents 1d019706d866
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 //===--- SimpleFormatContext.h ----------------------------------*- C++ -*-===//
anatofuz
parents:
diff changeset
2 //
anatofuz
parents:
diff changeset
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
anatofuz
parents:
diff changeset
4 // See https://llvm.org/LICENSE.txt for license information.
anatofuz
parents:
diff changeset
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
anatofuz
parents:
diff changeset
6 //
anatofuz
parents:
diff changeset
7 //===----------------------------------------------------------------------===//
anatofuz
parents:
diff changeset
8 //
anatofuz
parents:
diff changeset
9 /// \file
anatofuz
parents:
diff changeset
10 ///
anatofuz
parents:
diff changeset
11 /// Defines a utility class for use of clang-format in libclang
anatofuz
parents:
diff changeset
12 //
anatofuz
parents:
diff changeset
13 //===----------------------------------------------------------------------===//
anatofuz
parents:
diff changeset
14
anatofuz
parents:
diff changeset
15 #ifndef LLVM_CLANG_LIB_INDEX_SIMPLEFORMATCONTEXT_H
anatofuz
parents:
diff changeset
16 #define LLVM_CLANG_LIB_INDEX_SIMPLEFORMATCONTEXT_H
anatofuz
parents:
diff changeset
17
anatofuz
parents:
diff changeset
18 #include "clang/Basic/Diagnostic.h"
anatofuz
parents:
diff changeset
19 #include "clang/Basic/DiagnosticOptions.h"
anatofuz
parents:
diff changeset
20 #include "clang/Basic/FileManager.h"
anatofuz
parents:
diff changeset
21 #include "clang/Basic/LangOptions.h"
anatofuz
parents:
diff changeset
22 #include "clang/Basic/SourceManager.h"
anatofuz
parents:
diff changeset
23 #include "clang/Rewrite/Core/Rewriter.h"
anatofuz
parents:
diff changeset
24 #include "llvm/Support/FileSystem.h"
anatofuz
parents:
diff changeset
25 #include "llvm/Support/Path.h"
anatofuz
parents:
diff changeset
26 #include "llvm/Support/raw_ostream.h"
anatofuz
parents:
diff changeset
27
anatofuz
parents:
diff changeset
28 namespace clang {
anatofuz
parents:
diff changeset
29 namespace index {
anatofuz
parents:
diff changeset
30
anatofuz
parents:
diff changeset
31 /// A small class to be used by libclang clients to format
anatofuz
parents:
diff changeset
32 /// a declaration string in memory. This object is instantiated once
anatofuz
parents:
diff changeset
33 /// and used each time a formatting is needed.
anatofuz
parents:
diff changeset
34 class SimpleFormatContext {
anatofuz
parents:
diff changeset
35 public:
anatofuz
parents:
diff changeset
36 SimpleFormatContext(LangOptions Options)
anatofuz
parents:
diff changeset
37 : DiagOpts(new DiagnosticOptions()),
anatofuz
parents:
diff changeset
38 Diagnostics(new DiagnosticsEngine(new DiagnosticIDs, DiagOpts.get())),
anatofuz
parents:
diff changeset
39 InMemoryFileSystem(new llvm::vfs::InMemoryFileSystem),
anatofuz
parents:
diff changeset
40 Files(FileSystemOptions(), InMemoryFileSystem),
anatofuz
parents:
diff changeset
41 Sources(*Diagnostics, Files), Rewrite(Sources, Options) {
anatofuz
parents:
diff changeset
42 Diagnostics->setClient(new IgnoringDiagConsumer, true);
anatofuz
parents:
diff changeset
43 }
anatofuz
parents:
diff changeset
44
anatofuz
parents:
diff changeset
45 FileID createInMemoryFile(StringRef Name, StringRef Content) {
anatofuz
parents:
diff changeset
46 InMemoryFileSystem->addFile(Name, 0,
anatofuz
parents:
diff changeset
47 llvm::MemoryBuffer::getMemBuffer(Content));
anatofuz
parents:
diff changeset
48 const FileEntry *Entry = Files.getFile(Name);
anatofuz
parents:
diff changeset
49 assert(Entry != nullptr);
anatofuz
parents:
diff changeset
50 return Sources.createFileID(Entry, SourceLocation(), SrcMgr::C_User);
anatofuz
parents:
diff changeset
51 }
anatofuz
parents:
diff changeset
52
anatofuz
parents:
diff changeset
53 std::string getRewrittenText(FileID ID) {
anatofuz
parents:
diff changeset
54 std::string Result;
anatofuz
parents:
diff changeset
55 llvm::raw_string_ostream OS(Result);
anatofuz
parents:
diff changeset
56 Rewrite.getEditBuffer(ID).write(OS);
anatofuz
parents:
diff changeset
57 OS.flush();
anatofuz
parents:
diff changeset
58 return Result;
anatofuz
parents:
diff changeset
59 }
anatofuz
parents:
diff changeset
60
anatofuz
parents:
diff changeset
61 IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts;
anatofuz
parents:
diff changeset
62 IntrusiveRefCntPtr<DiagnosticsEngine> Diagnostics;
anatofuz
parents:
diff changeset
63 IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> InMemoryFileSystem;
anatofuz
parents:
diff changeset
64 FileManager Files;
anatofuz
parents:
diff changeset
65 SourceManager Sources;
anatofuz
parents:
diff changeset
66 Rewriter Rewrite;
anatofuz
parents:
diff changeset
67 };
anatofuz
parents:
diff changeset
68
anatofuz
parents:
diff changeset
69 } // end namespace index
anatofuz
parents:
diff changeset
70 } // end namespace clang
anatofuz
parents:
diff changeset
71
anatofuz
parents:
diff changeset
72 #endif