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-exception 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "PathConfig.h" 11 #include "llvm/ADT/SmallString.h" 12 #include "llvm/Support/Path.h" 13 14 namespace clang { 15 namespace find_all_symbols { 16 getIncludePath(const SourceManager & SM,SourceLocation Loc,const HeaderMapCollector * Collector)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.endswith(".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.str()); 39 } 40 41 } // namespace find_all_symbols 42 } // namespace clang 43