[PATCH] D76098: [clangd] Do not trigger go-to-def textual fallback inside string literals
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Mar 17 14:35:21 PDT 2020
sammccall added inline comments.
================
Comment at: clang-tools-extra/clangd/XRefs.cpp:367
+ auto Tokens = syntax::spelledTokensTouching(Loc, AST.getTokens());
+ if (Tokens.size() != 1)
+ return {};
----------------
this means you're not going to resolve `foo` in `a.^foo` (you're touching two tokens).
The cleanest thing seems to be to use the word you've identified: iterate over the `spelledTokensTouching(WordStart)` and accept the one where `tok.range(SM).touches(WordOffset + Word.size())`
================
Comment at: clang/lib/Tooling/Syntax/Tokens.cpp:343
SrcBuffer.data() + SrcBuffer.size());
+ L.SetCommentRetentionState(true);
----------------
Yikes, I didn't remember TokenBuffer doesn't currently record comment tokens.
I'm afraid this isn't a trivial change and would definitely need tests to verify it doesn't interfere with translating between spelled/expanded tokens (I'm pretty sure there are tests that comments *aren't* retained now in TokensTest.cpp, part of SyntaxTests)
Given that, the shorter route for this patch would be to blacklist string literals rather than whitelisting comments + identifiers.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D76098/new/
https://reviews.llvm.org/D76098
More information about the cfe-commits
mailing list