//===-- PathConfig.cpp - Process paths of symbols ---------------*- C++ -*-===//
//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "PathConfig.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/Support/Path.h"

namespace clang {
namespace find_all_symbols {

std::string getIncludePath(const SourceManager &SM, SourceLocation Loc,
                           const HeaderMapCollector *Collector) {
  llvm::StringRef FilePath;
  // Walk up the include stack to skip .inc files.
  while (true) {
    if (!Loc.isValid() || SM.isInMainFile(Loc))
      return "";
    FilePath = SM.getFilename(Loc);
    if (FilePath.empty())
      return "";
    if (!FilePath.endswith(".inc"))
      break;
    FileID ID = SM.getFileID(Loc);
    Loc = SM.getIncludeLoc(ID);
  }

  if (Collector)
    FilePath = Collector->getMappedHeader(FilePath);
  SmallString<256> CleanedFilePath = FilePath;
  llvm::sys::path::remove_dots(CleanedFilePath, /*remove_dot_dot=*/false);

  return std::string(CleanedFilePath.str());
}

} // namespace find_all_symbols
} // namespace clang
