sammccall added inline comments.

Comment at: clang-tools-extra/clangd/SemanticHighlighting.cpp:38
+  bool VisitNamedDecl(NamedDecl *ND) {
+    if (ND->getDeclName().isEmpty())
+      // Don't add symbols that don't have any length.
jvikstrom wrote:
> sammccall wrote:
> > I think you might want to bail out (both here and in VisitDeclRefExpr) if 
> > the name kind isn't identifier.
> > 
> > Reason is you're only coloring the token at location, and most of the other 
> > name kinds can span multiple tokens or otherwise need special consideration.
> I must have missed the Identifier NameKind because I was first-hand looking 
> for something like that. 
> Thanks.
> Are you aware of any testcase I could add for this by the way?
Such a testcase would ensure you're not coloring any part of `struct F { ~F(); 
}` as a method, or `operator <<` etc.

Comment at: clang-tools-extra/clangd/SemanticHighlighting.cpp:61
+    }
+    if(isa<FunctionDecl>(D)) {
+      addToken(Loc, HighlightingKind::Function);
jvikstrom wrote:
> sammccall wrote:
> > note that methods, constructors, and destructors inherit from functiondecl, 
> > so if you want to exclude/distinguish those, order matters here
> I'm aware of that, but thanks for the heads up. Although should I add it in a 
> comment somewhere in the method? Also added an additional testcase for 
> classes and FIXMEs to the skip if statement in VisitNamedDecl.
I don't think it needs a comment, especially if you're not actually 
highlighting them (because they have weird DeclarationNames)

> FIXMEs to the skip if statement in VisitNamedDecl
I'm not actually sure there's anything to fix here - it's a bit hard to talk 
about constructor/destructor highlighting as distinct from type name 
highlighting in C++. If you want them highlighted as classes, then that should 
just start working when you start handling TypeLocs.

  rG LLVM Github Monorepo


cfe-commits mailing list

Reply via email to