| //===--- 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 |