class FileMatchTrie
Declaration
class FileMatchTrie { /* full declaration omitted */ };
Description
A trie to efficiently match against the entries of the compilation database in order of matching suffix length. When a clang tool is supposed to operate on a specific file, we have to find the corresponding file in the compilation database. Although entries in the compilation database are keyed by filename, a simple string match is insufficient because of symlinks. Commonly, a project hierarchy looks like this: / <project -root>/src/ <path >/ <somefile >.cc (used as input for the tool) / <project -root>/build/ <symlink -to-src>/ <path >/ <somefile >.cc (stored in DB) Furthermore, there might be symlinks inside the source folder or inside the database, so that the same source file is translated with different build options. For a given input file, the \c FileMatchTrie finds its entries in order of matching suffix length. For each suffix length, there might be one or more entries in the database. For each of those entries, it calls\c llvm::sys::fs::equivalent() (injected as \c PathComparator). There might be zero or more entries with the same matching suffix length that are equivalent to the input file. Three cases are distinguished: 0 equivalent files: Continue with the next suffix length. 1 equivalent file: Best match found, return it. >1 equivalent files: Match is ambiguous, return error.
Declared at: clang/include/clang/Tooling/FileMatchTrie.h:56
Member Variables
- private clang::tooling::FileMatchTrieNode* Root
- private std::unique_ptr<PathComparator> Comparator
Method Overview
- public FileMatchTrie()
- public FileMatchTrie(clang::tooling::PathComparator * Comparator)
- public llvm::StringRef findEquivalent(llvm::StringRef FileName, llvm::raw_ostream & Error) const
- public void insert(llvm::StringRef NewPath)
- public ~FileMatchTrie()
Methods
¶FileMatchTrie()
FileMatchTrie()
Declared at: clang/include/clang/Tooling/FileMatchTrie.h:58
¶FileMatchTrie(
clang::tooling::PathComparator* Comparator)
FileMatchTrie(
clang::tooling::PathComparator* Comparator)
Description
Construct a new \c FileMatchTrie with the given \c PathComparator. The \c FileMatchTrie takes ownership of 'Comparator'. Used for testing.
Declared at: clang/include/clang/Tooling/FileMatchTrie.h:63
Parameters
- clang::tooling::PathComparator* Comparator
¶llvm::StringRef findEquivalent(
llvm::StringRef FileName,
llvm::raw_ostream& Error) const
llvm::StringRef findEquivalent(
llvm::StringRef FileName,
llvm::raw_ostream& Error) const
Description
Finds the corresponding file in this trie. Returns file name stored in this trie that is equivalent to 'FileName' according to 'Comparator', if it can be uniquely identified. If there are no matches an empty \c StringRef is returned. If there are ambiguous matches, an empty \c StringRef is returned and a corresponding message written to 'Error'.
Declared at: clang/include/clang/Tooling/FileMatchTrie.h:77
Parameters
- llvm::StringRef FileName
- llvm::raw_ostream& Error
¶void insert(llvm::StringRef NewPath)
void insert(llvm::StringRef NewPath)
Description
Insert a new absolute path. Relative paths are ignored.
Declared at: clang/include/clang/Tooling/FileMatchTrie.h:68
Parameters
- llvm::StringRef NewPath
¶~FileMatchTrie()
~FileMatchTrie()
Declared at: clang/include/clang/Tooling/FileMatchTrie.h:65