[PATCH] D83501: [clangd][ObjC] Improve xrefs for protocols and classes

David Goldman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Jul 10 08:43:07 PDT 2020


dgoldman marked an inline comment as done.
dgoldman added a comment.

In D83501#2144144 <https://reviews.llvm.org/D83501#2144144>, @sammccall wrote:

> I think without index changes this will still give the wrong answer for go-to-definition if the @implementation is in a different file.
>  Do you want to include those too or will that work ok in a separate patch?
>  (I'm not 100% sure of the interactions here, possible it'll seem a bit glitchy)


I'll look into the index changes as well in this change, just wanted to get the base functionality down for xrefs first. If it seems large I'll probably send a follow up diff.



================
Comment at: clang-tools-extra/clangd/XRefs.cpp:276
        getDeclAtPosition(AST, CurLoc, Relations, NodeKind)) {
     // Special case: void foo() ^override: jump to the overridden method.
     if (const auto *CMD = llvm::dyn_cast<CXXMethodDecl>(D)) {
----------------
sammccall wrote:
> dgoldman wrote:
> > Think it would make sense to special case ObjCInterfaceDecl here to get at both the interface definition + implementation if available?
> Rather than returning both results, I think it's more consistent to return them as a declaration/definition pair.
> 
> (This means special-casing ObjCImplDecl in namedDecl or at least getDeclAsPosition, so you always end up with the ObjCInterfaceDecl instead)
Whoops, meant to comment here but it was lost. I'm not sure what you meant here. Should this be done here inside the for loop or in getDeclAtPosition?

Are you saying that given:

```
@interface Foo // A
@end
@implementation Foo // B
@end
```
B --> A here

and similarly

```
@interface Foo // A
@end
@interface Foo (Ext) // B
@end
@implementation Foo (Ext) // C
@end
```
B --> A
C --> B (and A? it's unclear how this should map over, e.g. maybe Foo loc --> A, Ext --> B)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D83501/new/

https://reviews.llvm.org/D83501





More information about the cfe-commits mailing list