[PATCH] D62471: [clangd] SymbolCollector support for relations
Nathan Ridge via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu May 30 22:36:13 PDT 2019
nridge added inline comments.
================
Comment at: clang-tools-extra/clangd/index/SymbolCollector.cpp:298
+
+ processRelations(*ND, *ID, Relations);
+
----------------
kadircet wrote:
> why do we want to process these relations for references?
The `RelationBaseOf` is not present in the `Relations` parameter of the `handleDeclOccurrence()` call for the base class's declaration. It's only present for the specific reference that's in the base-specifier.
================
Comment at: clang-tools-extra/clangd/index/SymbolCollector.cpp:436
+
+ if (const auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(Parent)) {
+ if (!CTSD->isExplicitSpecialization()) {
----------------
kadircet wrote:
> why? I believe we have those in the index since rL356125.
>
> even if we don't I believe this part should also be isolated to somehow get canonical version of a given symbol.
I removed this logic as it no longer seems to be necessary now that we use libIndex's relations support to compute our relations.
================
Comment at: clang-tools-extra/clangd/index/SymbolCollector.cpp:453
+ this->Relations.insert(
+ Relation{ID, index::SymbolRole::RelationBaseOf, *ParentID});
+ }
----------------
kadircet wrote:
> kadircet wrote:
> > I believe subject is `ParentID` and object is `ID` in a baseof relation so these should be replaced ?
> also we should generalize this with something like `index::applyForEachSymbolRole`, which should also get rid of the check at top(`shouldIndexRelation`)
> I believe subject is ParentID and object is ID in a baseof relation so these should be replaced ?
The code was functionally correct, but the name `ParentID` was wrong -- the `RelatedSymbol` for a `BaseOf` relation is the child.
Anyways, I'm now calling it `ObjectID`.
================
Comment at: clang-tools-extra/clangd/index/SymbolCollector.cpp:453
+ this->Relations.insert(
+ Relation{ID, index::SymbolRole::RelationBaseOf, *ParentID});
+ }
----------------
nridge wrote:
> kadircet wrote:
> > kadircet wrote:
> > > I believe subject is `ParentID` and object is `ID` in a baseof relation so these should be replaced ?
> > also we should generalize this with something like `index::applyForEachSymbolRole`, which should also get rid of the check at top(`shouldIndexRelation`)
> > I believe subject is ParentID and object is ID in a baseof relation so these should be replaced ?
>
> The code was functionally correct, but the name `ParentID` was wrong -- the `RelatedSymbol` for a `BaseOf` relation is the child.
>
> Anyways, I'm now calling it `ObjectID`.
> also we should generalize this with something like index::applyForEachSymbolRole, which should also get rid of the check at top(shouldIndexRelation)
I don't fully understand this suggestion; could you elaborate?
Are you thinking ahead to a future where we want to index additional kinds of relations? Can we refactor things at that time?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D62471/new/
https://reviews.llvm.org/D62471
More information about the cfe-commits
mailing list