annotate clang-tools-extra/clangd/DraftStore.h @ 266:00f31e85ec16 default tip

Added tag current for changeset 31d058e83c98
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Oct 2023 10:13:55 +0900
parents 1f2b6ac9f198
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 //===--- DraftStore.h - File contents container -----------------*- 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 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_DRAFTSTORE_H
anatofuz
parents:
diff changeset
10 #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_DRAFTSTORE_H
anatofuz
parents:
diff changeset
11
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
12 #include "support/Path.h"
150
anatofuz
parents:
diff changeset
13 #include "clang/Basic/LLVM.h"
anatofuz
parents:
diff changeset
14 #include "llvm/ADT/StringMap.h"
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
15 #include "llvm/Support/VirtualFileSystem.h"
150
anatofuz
parents:
diff changeset
16 #include <mutex>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
17 #include <optional>
150
anatofuz
parents:
diff changeset
18 #include <string>
anatofuz
parents:
diff changeset
19 #include <vector>
anatofuz
parents:
diff changeset
20
anatofuz
parents:
diff changeset
21 namespace clang {
anatofuz
parents:
diff changeset
22 namespace clangd {
anatofuz
parents:
diff changeset
23
anatofuz
parents:
diff changeset
24 /// A thread-safe container for files opened in a workspace, addressed by
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
25 /// filenames. The contents are owned by the DraftStore.
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
26 /// Each time a draft is updated, it is assigned a version. This can be
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
27 /// specified by the caller or incremented from the previous version.
150
anatofuz
parents:
diff changeset
28 class DraftStore {
anatofuz
parents:
diff changeset
29 public:
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
30 struct Draft {
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
31 std::shared_ptr<const std::string> Contents;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
32 std::string Version;
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
33 };
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
34
150
anatofuz
parents:
diff changeset
35 /// \return Contents of the stored document.
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
36 /// For untracked files, a std::nullopt is returned.
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
37 std::optional<Draft> getDraft(PathRef File) const;
150
anatofuz
parents:
diff changeset
38
anatofuz
parents:
diff changeset
39 /// \return List of names of the drafts in this store.
anatofuz
parents:
diff changeset
40 std::vector<Path> getActiveFiles() const;
anatofuz
parents:
diff changeset
41
anatofuz
parents:
diff changeset
42 /// Replace contents of the draft for \p File with \p Contents.
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
43 /// If version is empty, one will be automatically assigned.
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
44 /// Returns the version.
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
45 std::string addDraft(PathRef File, llvm::StringRef Version,
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
46 StringRef Contents);
150
anatofuz
parents:
diff changeset
47
anatofuz
parents:
diff changeset
48 /// Remove the draft from the store.
anatofuz
parents:
diff changeset
49 void removeDraft(PathRef File);
anatofuz
parents:
diff changeset
50
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
51 llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> asVFS() const;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
52
150
anatofuz
parents:
diff changeset
53 private:
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
54 struct DraftAndTime {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
55 Draft D;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
56 std::time_t MTime;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
57 };
150
anatofuz
parents:
diff changeset
58 mutable std::mutex Mutex;
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
59 llvm::StringMap<DraftAndTime> Drafts;
150
anatofuz
parents:
diff changeset
60 };
anatofuz
parents:
diff changeset
61
anatofuz
parents:
diff changeset
62 } // namespace clangd
anatofuz
parents:
diff changeset
63 } // namespace clang
anatofuz
parents:
diff changeset
64
anatofuz
parents:
diff changeset
65 #endif