[PATCH] D90748: [clangd] Introduce config parsing for External blocks
Kadir Cetinkaya via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Nov 9 23:45:56 PST 2020
kadircet updated this revision to Diff 304060.
kadircet added a comment.
- Preserve location of external block
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D90748/new/
https://reviews.llvm.org/D90748
Files:
clang-tools-extra/clangd/ConfigFragment.h
clang-tools-extra/clangd/ConfigYAML.cpp
clang-tools-extra/clangd/unittests/ConfigYAMLTests.cpp
Index: clang-tools-extra/clangd/unittests/ConfigYAMLTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/ConfigYAMLTests.cpp
+++ clang-tools-extra/clangd/unittests/ConfigYAMLTests.cpp
@@ -10,6 +10,7 @@
#include "ConfigFragment.h"
#include "ConfigTesting.h"
#include "Protocol.h"
+#include "llvm/ADT/StringRef.h"
#include "llvm/Support/SMLoc.h"
#include "llvm/Support/ScopedPrinter.h"
#include "llvm/Support/SourceMgr.h"
@@ -124,6 +125,25 @@
ASSERT_THAT(Results, IsEmpty());
}
+TEST(ParseYAML, ExternalBlock) {
+ CapturedDiags Diags;
+ Annotations YAML(R"yaml(
+Index:
+ External:
+ File: "foo"
+ Server: ^"bar"
+ MountPoint: "baz"
+ )yaml");
+ auto Results =
+ Fragment::parseYAML(YAML.code(), "config.yaml", Diags.callback());
+ ASSERT_EQ(Results.size(), 1u);
+ ASSERT_TRUE(Results[0].Index.External);
+ EXPECT_THAT(*Results[0].Index.External.getValue()->File, Val("foo"));
+ EXPECT_THAT(*Results[0].Index.External.getValue()->MountPoint, Val("baz"));
+ ASSERT_THAT(Diags.Diagnostics, IsEmpty());
+ EXPECT_THAT(*Results[0].Index.External.getValue()->Server, Val("bar"));
+}
+
} // namespace
} // namespace config
} // namespace clangd
Index: clang-tools-extra/clangd/ConfigYAML.cpp
===================================================================
--- clang-tools-extra/clangd/ConfigYAML.cpp
+++ clang-tools-extra/clangd/ConfigYAML.cpp
@@ -5,7 +5,6 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
-
#include "ConfigFragment.h"
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/SmallSet.h"
@@ -86,6 +85,22 @@
DictParser Dict("Index", this);
Dict.handle("Background",
[&](Node &N) { F.Background = scalarValue(N, "Background"); });
+ Dict.handle("External", [&](Node &N) {
+ Fragment::IndexBlock::ExternalBlock External;
+ parse(External, N);
+ F.External.emplace(std::move(External));
+ F.External->Range = N.getSourceRange();
+ });
+ Dict.parse(N);
+ }
+
+ void parse(Fragment::IndexBlock::ExternalBlock &F, Node &N) {
+ DictParser Dict("External", this);
+ Dict.handle("File", [&](Node &N) { F.File = scalarValue(N, "File"); });
+ Dict.handle("Server",
+ [&](Node &N) { F.Server = scalarValue(N, "Server"); });
+ Dict.handle("MountPoint",
+ [&](Node &N) { F.MountPoint = scalarValue(N, "MountPoint"); });
Dict.parse(N);
}
Index: clang-tools-extra/clangd/ConfigFragment.h
===================================================================
--- clang-tools-extra/clangd/ConfigFragment.h
+++ clang-tools-extra/clangd/ConfigFragment.h
@@ -162,6 +162,22 @@
/// This is checked for translation units only, not headers they include.
/// Legal values are "Build" or "Skip".
llvm::Optional<Located<std::string>> Background;
+ /// An external index uses data source outside of clangd itself. This is
+ /// usually prepared using clangd-indexer.
+ /// Exactly one source (File/Server) should be configured.
+ struct ExternalBlock {
+ /// Path to an index file generated by clangd-indexer. Relative paths may
+ /// be used, if config fragment is associated with a directory.
+ llvm::Optional<Located<std::string>> File;
+ /// Address and port number for a clangd-index-server. e.g.
+ /// `123.1.1.1:13337`.
+ llvm::Optional<Located<std::string>> Server;
+ /// Source root governed by this index. Default is the directory
+ /// associated with the config fragment. Absolute in case of user config
+ /// and relative otherwise. Should always use forward-slashes.
+ llvm::Optional<Located<std::string>> MountPoint;
+ };
+ llvm::Optional<Located<ExternalBlock>> External;
};
IndexBlock Index;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D90748.304060.patch
Type: text/x-patch
Size: 3890 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20201110/e3f1207e/attachment-0001.bin>
More information about the cfe-commits
mailing list