94 lines
3.2 KiB
C++
94 lines
3.2 KiB
C++
//===--- iwyu_path_util.h - file-path utilities for include-what-you-use --===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// File-path utilities for the IWYU checker.
|
|
|
|
#ifndef INCLUDE_WHAT_YOU_USE_IWYU_PATH_UTIL_H_
|
|
#define INCLUDE_WHAT_YOU_USE_IWYU_PATH_UTIL_H_
|
|
|
|
#include <string> // for string, allocator, etc
|
|
#include <vector>
|
|
|
|
#include "iwyu_string_util.h"
|
|
|
|
namespace include_what_you_use {
|
|
|
|
using std::string;
|
|
using std::vector;
|
|
|
|
|
|
// One entry in the search-path list of where to find #include files.
|
|
struct HeaderSearchPath {
|
|
enum Type { kUnusedPath = 0, kSystemPath, kUserPath };
|
|
HeaderSearchPath(const string& p, Type pt) : path(p), path_type(pt) { }
|
|
string path; // the path-entry as specified on the commandline (via -I)
|
|
Type path_type;
|
|
};
|
|
|
|
// The directories to look for #includes in, including from -I, -isystem, etc.
|
|
void SetHeaderSearchPaths(const vector<HeaderSearchPath>& search_paths);
|
|
const vector<HeaderSearchPath>& HeaderSearchPaths();
|
|
|
|
// Returns true if 'path' is a path of a (possibly enclosed in double
|
|
// quotes or <>) C++ header file.
|
|
bool IsHeaderFile(string path);
|
|
|
|
// If the path has a slash, return the part after the last slash,
|
|
// else return the input path.
|
|
string Basename(const string& path);
|
|
|
|
// Normalizes the file path, then strips uninteresting suffixes from
|
|
// the file name. Replaces "/internal/" with "/public/" and
|
|
// "/include/" with "/src".
|
|
string GetCanonicalName(string file_path);
|
|
|
|
// Replaces "\" by "/" (Microsoft platform paths) and collapses all dot
|
|
// components in path.
|
|
string NormalizeFilePath(const string& path);
|
|
|
|
// Normalizes like NormalizeFilePath and ensures trailing slash.
|
|
// Hence use only for directories!
|
|
string NormalizeDirPath(const string& path);
|
|
|
|
// Is path absolute?
|
|
bool IsAbsolutePath(const string& path);
|
|
|
|
// Get absolute version of path.
|
|
string MakeAbsolutePath(const string& path);
|
|
string MakeAbsolutePath(const string& base_path, const string& relative_path);
|
|
|
|
// Get the parent of path.
|
|
string GetParentPath(const string& path);
|
|
|
|
// Try to strip the prefix_path from the front of path.
|
|
// The path assumed to be normalized but either absolute or relative.
|
|
// Return true if path was stripped.
|
|
bool StripPathPrefix(string* path, const string& prefix_path);
|
|
|
|
// Below, we talk 'quoted' includes. A quoted include is something
|
|
// that would be written on an #include line, complete with the <> or
|
|
// "". In the line '#include <time.h>', "<time.h>" is the quoted
|
|
// include.
|
|
|
|
// Converts a file-path, such as /usr/include/stdio.h, to a
|
|
// quoted include, such as <stdio.h>.
|
|
string ConvertToQuotedInclude(const string& filepath,
|
|
const string& includer_path = "");
|
|
|
|
// Returns true if the string is a quoted include.
|
|
bool IsQuotedInclude(const string& s);
|
|
|
|
// Returns whether this is a system (as opposed to user) include
|
|
// file, based on where it lives.
|
|
bool IsSystemIncludeFile(const string& filepath);
|
|
|
|
} // namespace include_what_you_use
|
|
|
|
#endif // INCLUDE_WHAT_YOU_USE_IWYU_PATH_UTIL_H_
|