[PATCH] D43462: [clangd] Fixes for #include insertion.
Eric Liu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 19 08:52:49 PST 2018
ioeric added inline comments.
================
Comment at: clangd/Headers.cpp:45
+bool hasHeaderExtension(PathRef Path) {
+ constexpr static const char *HeaderExtensions[] = {".h", ".hpp", ".hh",
+ ".hxx"};
----------------
ilya-biryukov wrote:
> There is another list of header extensions in `ClangdServer::switchSourceHeader`, let's reuse the list of extensions used here and there.
Acked. (The change is not relevant anymore.)
================
Comment at: clangd/index/FileIndex.cpp:18
+CanonicalIncludes *CanonicalIncludesForSystemHeaders() {
+ auto *Includes = new CanonicalIncludes();
----------------
ilya-biryukov wrote:
> Maybe store a static inside the function body (to properly free memory) and return a const reference (to avoid mutating shared data)?
>
> ```
> const CanonicalIncludes &CanonicalIncludesForSystemHeaders() {
> static CanonicalInclude Includes = []() -> CanonicalHeader {
> CanonicalInclude Includes;
> addSystemHeadersMapping(Includes);
> return Includes;
> };
> return Includes;
> }
> ```
>
> Also Sam mentioned that `CanonicalIncludes` is not thread-safe, as the `Regex`'s `match()` mutates.
As discussed offline, we want to avoid destructing static objects because ...
Made `CanonicalIncludes` thread-safe by adding a mutex around matches.
================
Comment at: unittests/clangd/FileIndexTests.cpp:173
+#ifndef LLVM_ON_WIN32
+TEST(FileIndexTest, CanonicalizeSystemHeader) {
----------------
ilya-biryukov wrote:
> Why not on Windows?
because our system header map doesn't really support windows...
Repository:
rCTE Clang Tools Extra
https://reviews.llvm.org/D43462
More information about the cfe-commits
mailing list