.clangd/index was well-intentioned in 2754942cbaef, but .clangd is the best
filename for the clangd config file (matching .clang-format and .clang-tidy).
And of course we can't have both .clangd/index and .clangd...
There are a few overlapping goals to satisfy:
- it should be clear from the directory name that this is transient data that is safe to delete at the cost of recomputation, i.e. a cache
- it should be easy and self-documenting to blacklist these files in .gitignore
- we should have some consistency between filenames in-tree and corresponding files in user storage (e.g. under XDG's ~/.cache/)
- we should be consistent across platforms (including windows, which doesn't have distinct cache vs config directories)
So the plan is:
$PROJECT/.clangd (project config) $PROJECT/.cache/clangd/index/ (project index) $PROJECT/.cache/clangd/modules/ (maybe in future) $XDG_CONFIG_HOME/clangd/config.yaml (user config) $XDG_CACHE_HOME/clangd/index/ (index of non-project files) $XDG_CACHE_HOME/clangd/modules/ (maybe in future)
This is sensible if XDG_{CONFIG,CACHE}_HOME coincide, and has a simple
.gitignore rule going forward: .cache/.
The monorepo gitignore is updated to reflect the backwards-compatible practice:
ignore .clangd/ (with trailing slash) matching index files from clangd 9/10 ignore .cache matching index from clangd 11+, and potentially other tools.
The entries from llvm-project/llvm gitignore are removed (obsolete).
the comment above says do not add trailing /, we've got no choice for .clangd/ but maybe drop that for .clangd-index ?