clang API Documentation

Public Member Functions
clang::tooling::FileMatchTrie Class Reference

A trie to efficiently match against the entries of the compilation database in order of matching suffix length. More...

#include <FileMatchTrie.h>

List of all members.

Public Member Functions

 FileMatchTrie ()
 FileMatchTrie (PathComparator *Comparator)
 Construct a new FileMatchTrie with the given PathComparator.
 ~FileMatchTrie ()
void insert (StringRef NewPath)
 Insert a new absolute path. Relative paths are ignored.
StringRef findEquivalent (StringRef FileName, raw_ostream &Error) const
 Finds the corresponding file in this trie.

Detailed 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 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 llvm::sys::fs::equivalent() (injected as 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.

Definition at line 57 of file FileMatchTrie.h.


Constructor & Destructor Documentation

Definition at line 160 of file FileMatchTrie.cpp.

Construct a new FileMatchTrie with the given PathComparator.

The FileMatchTrie takes ownership of 'Comparator'. Used for testing.

Definition at line 163 of file FileMatchTrie.cpp.

Definition at line 166 of file FileMatchTrie.cpp.


Member Function Documentation

StringRef clang::tooling::FileMatchTrie::findEquivalent ( StringRef  FileName,
raw_ostream &  Error 
) const

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 StringRef is returned. If there are ambigious matches, an empty StringRef is returned and a corresponding message written to 'Error'.

Definition at line 174 of file FileMatchTrie.cpp.

References clang::tooling::FileMatchTrieNode::findEquivalent().

Referenced by clang::tooling::JSONCompilationDatabase::getCompileCommands().

void clang::tooling::FileMatchTrie::insert ( StringRef  NewPath)

Insert a new absolute path. Relative paths are ignored.

Definition at line 170 of file FileMatchTrie.cpp.

References clang::tooling::FileMatchTrieNode::insert().


The documentation for this class was generated from the following files: