[PATCH] D127403: [clangd] Implement semantic token modifier "definition"
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Oct 10 07:20:05 PDT 2022
sammccall accepted this revision.
sammccall added a comment.
Thanks! Sorry for letting this drop.
================
Comment at: clang-tools-extra/clangd/SemanticHighlighting.cpp:79
+ if (auto *Var = dyn_cast<VarDecl>(Decl))
+ return !isa<ParmVarDecl>(Var) && Var->isThisDeclarationADefinition();
+ return isa<ObjCCategoryDecl>(Decl) || isa<ObjCImplDecl>(Decl);
----------------
ckandeler wrote:
> I'm not 100% sure about this one, by the way. I've just never heard anyone talk about a "parameter definition".
ParmVarDecls should be marked as definition. They definitely are in the formal C++ sense, and they're so similar to local variables that I think we have to be consistent.
(There are other formally-definitions that we're not marking here like NamespaceDecl, but they seem unlikely to cause confusion).
> I've just never heard anyone talk about a "parameter definition".
Yeah, I suspect this is mostly because:
- there's no definition/declaration distinction - you can't forward-declare a param.
- imprecise mental models of params as aliases to the written args rather than copies of them (at least I sometimes think this way)
But I think it's important we treat these consistently with e.g. local variables since they're so similar.
================
Comment at: clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp:62
+ if (T.Modifiers & (1 << I)) {
+ if (I != uint32_t(HighlightingModifier::Declaration) || !hasDef)
+ OS << '_' << static_cast<HighlightingModifier>(I);
----------------
can you add a brief comment here: "// _decl_def is common and redundant, just print _def instead."
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D127403/new/
https://reviews.llvm.org/D127403
More information about the cfe-commits
mailing list