clang-tools 19.0.0git
ProjectAwareIndexTests.cpp
Go to the documentation of this file.
1//===-- ProjectAwareIndexTests.cpp -------------------*- C++ -*-----------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "Config.h"
10#include "TestIndex.h"
11#include "index/Index.h"
12#include "index/MemIndex.h"
13#include "index/ProjectAware.h"
14#include "index/Ref.h"
15#include "index/Relation.h"
16#include "support/Context.h"
17#include "support/Threading.h"
18#include "llvm/ADT/StringRef.h"
19#include "gmock/gmock.h"
20#include "gtest/gtest.h"
21#include <memory>
22#include <utility>
23
24namespace clang {
25namespace clangd {
26using testing::ElementsAre;
27using testing::IsEmpty;
28
29std::unique_ptr<SymbolIndex> createIndex() {
31 Builder.insert(symbol("1"));
32 return MemIndex::build(std::move(Builder).build(), RefSlab(), RelationSlab());
33}
34
35TEST(ProjectAware, Test) {
37 return createIndex();
38 };
39
40 auto Idx = createProjectAwareIndex(std::move(Gen), true);
42 Req.Query = "1";
43 Req.AnyScope = true;
44
45 EXPECT_THAT(match(*Idx, Req), IsEmpty());
46
47 Config C;
48 C.Index.External.Kind = Config::ExternalIndexSpec::File;
49 C.Index.External.Location = "test";
50 WithContextValue With(Config::Key, std::move(C));
51 EXPECT_THAT(match(*Idx, Req), ElementsAre("1"));
52 return;
53}
54
55TEST(ProjectAware, CreatedOnce) {
56 unsigned InvocationCount = 0;
58 ++InvocationCount;
59 return createIndex();
60 };
61
62 auto Idx = createProjectAwareIndex(std::move(Gen), true);
63 // No invocation at start.
64 EXPECT_EQ(InvocationCount, 0U);
66 Req.Query = "1";
67 Req.AnyScope = true;
68
69 // Cannot invoke without proper config.
70 match(*Idx, Req);
71 EXPECT_EQ(InvocationCount, 0U);
72
73 Config C;
74 C.Index.External.Kind = Config::ExternalIndexSpec::File;
75 C.Index.External.Location = "test";
76 WithContextValue With(Config::Key, std::move(C));
77 match(*Idx, Req);
78 // Now it should be created.
79 EXPECT_EQ(InvocationCount, 1U);
80 match(*Idx, Req);
81 // It is cached afterwards.
82 EXPECT_EQ(InvocationCount, 1U);
83 return;
84}
85} // namespace clangd
86} // namespace clang
CodeCompletionBuilder Builder
const Criteria C
Runs tasks on separate (detached) threads and wait for all tasks to finish.
Definition: Threading.h:108
static std::unique_ptr< SymbolIndex > build(SymbolSlab Symbols, RefSlab Refs, RelationSlab Relations)
Builds an index from slabs. The index takes ownership of the data.
Definition: MemIndex.cpp:17
An efficient structure of storing large set of symbol references in memory.
Definition: Ref.h:108
SymbolSlab::Builder is a mutable container that can 'freeze' to SymbolSlab.
Definition: Symbol.h:222
WithContextValue extends Context::current() with a single value.
Definition: Context.h:200
std::function< std::unique_ptr< SymbolIndex >(const Config::ExternalIndexSpec &, AsyncTaskRunner *)> IndexFactory
A functor to create an index for an external index specification.
Definition: ProjectAware.h:25
std::vector< std::string > match(const SymbolIndex &I, const FuzzyFindRequest &Req, bool *Incomplete)
Definition: TestIndex.cpp:139
TEST(BackgroundQueueTest, Priority)
Symbol symbol(llvm::StringRef QName)
Definition: TestIndex.cpp:17
std::unique_ptr< SymbolIndex > createProjectAwareIndex(IndexFactory Gen, bool Sync)
Returns an index that answers queries using external indices.
std::unique_ptr< SymbolIndex > createIndex()
===– Representation.cpp - ClangDoc Representation --------—*- C++ -*-===//
Describes an external index configuration.
Definition: Config.h:73
Settings that express user/project preferences and control clangd behavior.
Definition: Config.h:44
static clangd::Key< Config > Key
Context key which can be used to set the current Config.
Definition: Config.h:48
std::string Query
A query string for the fuzzy find.
Definition: Index.h:29
bool AnyScope
If set to true, allow symbols from any scope.
Definition: Index.h:39