43 lines · cpp
1//===-- PathConfig.cpp - Process paths of symbols ---------------*- C++ -*-===//2//3//4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.5// See https://llvm.org/LICENSE.txt for license information.6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception7//8//===----------------------------------------------------------------------===//9 10#include "PathConfig.h"11#include "llvm/ADT/SmallString.h"12#include "llvm/Support/Path.h"13 14namespace clang {15namespace find_all_symbols {16 17std::string getIncludePath(const SourceManager &SM, SourceLocation Loc,18 const HeaderMapCollector *Collector) {19 llvm::StringRef FilePath;20 // Walk up the include stack to skip .inc files.21 while (true) {22 if (!Loc.isValid() || SM.isInMainFile(Loc))23 return "";24 FilePath = SM.getFilename(Loc);25 if (FilePath.empty())26 return "";27 if (!FilePath.ends_with(".inc"))28 break;29 FileID ID = SM.getFileID(Loc);30 Loc = SM.getIncludeLoc(ID);31 }32 33 if (Collector)34 FilePath = Collector->getMappedHeader(FilePath);35 SmallString<256> CleanedFilePath = FilePath;36 llvm::sys::path::remove_dots(CleanedFilePath, /*remove_dot_dot=*/false);37 38 return std::string(CleanedFilePath);39}40 41} // namespace find_all_symbols42} // namespace clang43