================ @@ -0,0 +1,78 @@ +//===---------------- ModuleDependencyScanner.cpp ----------------*- 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 "ModuleDependencyScanner.h" + +namespace clang { +namespace clangd { + +std::optional<ModuleDependencyScanner::ModuleDependencyInfo> +ModuleDependencyScanner::scan(PathRef FilePath) { + std::optional<tooling::CompileCommand> Cmd = CDB.getCompileCommand(FilePath); + + if (!Cmd) + return std::nullopt; + + using namespace clang::tooling::dependencies; + + llvm::SmallString<128> FilePathDir(FilePath); + llvm::sys::path::remove_filename(FilePathDir); + DependencyScanningTool ScanningTool(Service, TFS.view(FilePathDir)); + + llvm::Expected<P1689Rule> P1689Result = + ScanningTool.getP1689ModuleDependencyFile(*Cmd, Cmd->Directory); + + if (auto E = P1689Result.takeError()) { + // Ignore any error. + llvm::consumeError(std::move(E)); + return std::nullopt; + } + + ModuleDependencyInfo Result; + + if (P1689Result->Provides) { + ModuleNameToSource[P1689Result->Provides->ModuleName] = FilePath; + Result.ModuleName = P1689Result->Provides->ModuleName; + } + + for (auto &Required : P1689Result->Requires) + Result.RequiredModules.push_back(Required.ModuleName); + + return Result; +} + +void ModuleDependencyScanner::globalScan( + const std::vector<std::string> &AllFiles) { + for (auto &File : AllFiles) + scan(File); + + GlobalScanned = true; +} + +PathRef ModuleDependencyScanner::getSourceForModuleName(StringRef ModuleName) const { + assert( ---------------- sam-mccall wrote:
the only caller of this does `if (!isGlobalScanned()) globalScan()` might as well put that here instead of the assert, simplify the contract, simplify the callers, delete `isGlobalScanned()`, etc https://github.com/llvm/llvm-project/pull/66462 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits