sourcegraph / scip-clang

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Prefer canonical references for using-imported decalrations

varungandhi-src opened this issue · comments

Say I have code like the following:

namespace x {
  struct S {};
}
namespace y {
  using x::S; // equivalent to `using S = x::S`
  void f() {
    S{}; y::S{};
  }
}

The question is what should Go to Definition behave like when:

  1. Trying GTD from S{}
  2. Trying GTD from y::S{}

In both cases, GTD in VS Code/clangd shows both the struct and using lines. In CLion, both go directly to the struct line.

As it stands, scip-clang will emit a reference to y::S and take one to the using line directly. While this is technically correct, attempting Go to Definition to the using line doesn't do anything (even though there is a reference to x::S). Example in LLVM:

image

For now, I think we should just emit a reference to the canonical declaration directly. If we add support for some kind of alias role, then we can also emit a definition for the alias declaration.

We should also do this for declarations inside templates, which currently don't have any occurrence (definition or reference), see the test case added in #321