|  | //===--- FuzzySymbolIndex.h - Lookup symbols for autocomplete ---*- C++ -*-===// | 
|  | // | 
|  | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | // See https://llvm.org/LICENSE.txt for license information. | 
|  | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef LLVM_CLANG_TOOLS_EXTRA_INCLUDE_FIXER_FUZZY_SYMBOL_INDEX_H | 
|  | #define LLVM_CLANG_TOOLS_EXTRA_INCLUDE_FIXER_FUZZY_SYMBOL_INDEX_H | 
|  |  | 
|  | #include "SymbolIndex.h" | 
|  | #include "find-all-symbols/SymbolInfo.h" | 
|  | #include "llvm/ADT/SmallString.h" | 
|  | #include "llvm/ADT/StringRef.h" | 
|  | #include "llvm/Support/Error.h" | 
|  | #include <string> | 
|  | #include <vector> | 
|  |  | 
|  | namespace clang { | 
|  | namespace include_fixer { | 
|  |  | 
|  | // A FuzzySymbolIndex retrieves top-level symbols matching a query string. | 
|  | // | 
|  | // It refines the contract of SymbolIndex::search to do fuzzy matching: | 
|  | // - symbol names are tokenized: "unique ptr", "string ref". | 
|  | // - query must match prefixes of symbol tokens: [upt] | 
|  | // - if the query has multiple tokens, splits must match: [StR], not [STr]. | 
|  | // Helpers for tokenization and regex matching are provided. | 
|  | // | 
|  | // Implementations may choose to truncate results, refuse short queries, etc. | 
|  | class FuzzySymbolIndex : public SymbolIndex { | 
|  | public: | 
|  | // Loads the specified clang-include-fixer database and returns an index serving it. | 
|  | static llvm::Expected<std::unique_ptr<FuzzySymbolIndex>> | 
|  | createFromYAML(llvm::StringRef File); | 
|  |  | 
|  | // Helpers for implementing indexes: | 
|  |  | 
|  | // Transforms a symbol name or query into a sequence of tokens. | 
|  | // - URLHandlerCallback --> [url, handler, callback] | 
|  | // - snake_case11 --> [snake, case, 11] | 
|  | // - _WTF$ --> [wtf] | 
|  | static std::vector<std::string> tokenize(llvm::StringRef Text); | 
|  |  | 
|  | // Transforms query tokens into an unanchored regexp to match symbol tokens. | 
|  | // - [fe f] --> /f(\w* )?e\w* f/, matches [fee fie foe]. | 
|  | static std::string queryRegexp(const std::vector<std::string> &Tokens); | 
|  | }; | 
|  |  | 
|  | } // namespace include_fixer | 
|  | } // namespace clang | 
|  |  | 
|  | #endif // LLVM_CLANG_TOOLS_EXTRA_INCLUDE_FIXER_FUZZY_SYMBOL_INDEX_H |