1 //===-- IndexHelpers.h ------------------------------------------*- 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 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_UNITTESTS_TESTINDEX_H 10 #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_UNITTESTS_TESTINDEX_H 11 12 #include "index/Index.h" 13 14 namespace clang { 15 namespace clangd { 16 17 // Creates Symbol instance and sets SymbolID to given QualifiedName. 18 Symbol symbol(llvm::StringRef QName); 19 20 // Helpers to produce fake index symbols with proper SymbolID. 21 // USRFormat is a regex replacement string for the unqualified part of the USR. 22 Symbol sym(llvm::StringRef QName, index::SymbolKind Kind, 23 llvm::StringRef USRFormat, llvm::StringRef Signature = {}); 24 // Creats a function symbol assuming no function arg. 25 Symbol func(llvm::StringRef Name); 26 // Creates a class symbol. 27 Symbol cls(llvm::StringRef Name); 28 // Creates an enum symbol. 29 Symbol enm(llvm::StringRef Name); 30 // Creates an enum constant symbol. 31 Symbol enmConstant(llvm::StringRef Name); 32 // Creates a variable symbol. 33 Symbol var(llvm::StringRef Name); 34 // Creates a namespace symbol. 35 Symbol ns(llvm::StringRef Name); 36 // Create a C++20 concept symbol. 37 Symbol conceptSym(llvm::StringRef Name); 38 // Create a macro symbol. 39 Symbol macro(llvm::StringRef Name, llvm::StringRef ArgList = {}); 40 41 // Create an Objective-C symbol. 42 Symbol objcSym(llvm::StringRef Name, index::SymbolKind Kind, 43 llvm::StringRef USRPrefix); 44 // Create an @interface or @implementation. 45 Symbol objcClass(llvm::StringRef Name); 46 // Create an @interface or @implementation category. 47 Symbol objcCategory(llvm::StringRef Name, llvm::StringRef CategoryName); 48 // Create an @protocol. 49 Symbol objcProtocol(llvm::StringRef Name); 50 51 // Create a slab of symbols with the given qualified names as IDs and names. 52 SymbolSlab generateSymbols(std::vector<std::string> QualifiedNames); 53 54 // Create a slab of symbols with IDs and names [Begin, End]. 55 SymbolSlab generateNumSymbols(int Begin, int End); 56 57 // Returns fully-qualified name out of given symbol. 58 std::string getQualifiedName(const Symbol &Sym); 59 60 // Performs fuzzy matching-based symbol lookup given a query and an index. 61 // Incomplete is set true if more items than requested can be retrieved, false 62 // otherwise. 63 std::vector<std::string> match(const SymbolIndex &I, 64 const FuzzyFindRequest &Req, 65 bool *Incomplete = nullptr); 66 67 // Returns qualified names of symbols with any of IDs in the index. 68 std::vector<std::string> lookup(const SymbolIndex &I, 69 llvm::ArrayRef<SymbolID> IDs); 70 71 } // namespace clangd 72 } // namespace clang 73 74 #endif 75