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

Methods

FileMatchTrie()

Declared at: clang/include/clang/Tooling/FileMatchTrie.h:58

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

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)

Description

Insert a new absolute path. Relative paths are ignored.

Declared at: clang/include/clang/Tooling/FileMatchTrie.h:68

Parameters

llvm::StringRef NewPath

~FileMatchTrie()

Declared at: clang/include/clang/Tooling/FileMatchTrie.h:65