[PATCH] D38639: [clangd] #include statements support for Open definition
Ilya Biryukov via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Nov 9 07:16:48 PST 2017
ilya-biryukov added inline comments.
================
Comment at: clangd/ClangdServer.cpp:368
std::vector<Location> Result;
- Resources->getAST().get()->runUnderLock([Pos, &Result, this](ParsedAST *AST) {
- if (!AST)
- return;
- Result = clangd::findDefinitions(*AST, Pos, Logger);
- });
+ std::unordered_map<Range, Path, RangeHash> IncludeLocationMap;
+ std::vector<std::pair<SourceRange, std::string>> DataVector;
----------------
This map and two vectors come up quite often in your commit.
Is this a storage for saved includes? Could we define a class that stores this data?
Something like
```
class IncludeReferenceMap {
llvm::Optional<PathRef> findIncludeTargetAtLoc(Location Loc);
private:
// maps, vectors, whatever we need go here ....
};
```
We'd build it using the callbacks, then store it in `PreambleData` (for PCH include) and `ParsedAST` (for non-PCH includes). And later query both maps to get the result.
================
Comment at: clangd/ClangdUnit.cpp:33
#include <chrono>
+#include <iostream>
----------------
We probably don't need it this include
================
Comment at: clangd/ClangdUnit.cpp:38
+class DelegatingPPCallbacks : public PPCallbacks {
+
----------------
What's the purpose of this class?
================
Comment at: clangd/ClangdUnit.cpp:131
+
+ unsigned NumSlocs = SM.local_sloc_entry_size();
+ SmallVector<SourceLocation, 10> InclusionStack;
----------------
Please also use `PPCallbacks` interface instead of the `SourceManager` (should be possible to hook it up somewhere in `ParsedAST::Build`).
https://reviews.llvm.org/D38639
More information about the cfe-commits
mailing list