[clang-tools-extra] [clangd] [C++20] [Modules] Introduce initial support for C++20 Modules (PR #66462)

Ben Boeckel via cfe-commits cfe-commits at lists.llvm.org
Mon Oct 9 04:58:05 PDT 2023


================
@@ -45,6 +45,10 @@ class GlobalCompilationDatabase {
     return std::nullopt;
   }
 
+  virtual std::vector<std::string> getAllFilesInProjectOf(PathRef File) const {
----------------
mathstuf wrote:

Probably easiest to see it by the writer code [here](https://gitlab.kitware.com/ben.boeckel/cmake/-/commit/9866da328034fbb3a0e96f5cca81e913c0ab8678#b94b7587efb540b6ad866ae5620492d78f6cff24_0_23). Basically, it is:

```json
{
  "version": 1,
  "revision": 0,
  "module_sets": [
    {
      "name": "unique name of module set",
      "visible_module_sets": [
        "module sets",
        "which can satisfy",
        "required modules within this module set",
      ],
      "modules": [
        "work-directory": "/path/to/working/directory",
        "source": "path/to/source/file",
        "name": "name.of.provided.module",
        "private": false,
        "requires": [
          "list",
          "of",
          "required",
          "modulest"
        ],
        "flag_sets": [
          "-fstandalone-flag",
          ["-fflag", "with-arg"],
        ]
      ]
    }
  ]
}
```

The semantics are:

- module sets may refer to other module sets named in order to satisfy their required modules;
- however, private modules in other module sets are not usable;
- `work-directory` is optional;
- `private` defaults to `false`;
- flag sets need to be used to compile the BMI in question (Daniel Ruoso's "local preprocessor arguments");
- flags may be deduplicated/merged by top-level identities.

https://github.com/llvm/llvm-project/pull/66462


More information about the cfe-commits mailing list