//===------------------ ProjectModules.h -------------------------*- 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 // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_PROJECTMODULES_H #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_PROJECTMODULES_H #include "support/Path.h" #include "support/ThreadsafeFS.h" #include <memory> namespace clang { namespace clangd { /// An interface to query the modules information in the project. /// Users should get instances of `ProjectModules` from /// `GlobalCompilationDatabase::getProjectModules(PathRef)`. /// /// Currently, the modules information includes: /// - Given a source file, what are the required modules. /// - Given a module name and a required source file, what is /// the corresponding source file. /// /// Note that there can be multiple source files declaring the same module /// in a valid project. Although the language specification requires that /// every module unit's name must be unique in valid program, there can be /// multiple program in a project. And it is technically valid if these program /// doesn't interfere with each other. /// /// A module name should be in the format: /// `<primary-module-name>[:partition-name]`. So module names covers partitions. class ProjectModules { … }; } // namespace clangd } // namespace clang #endif