sammccall added a comment.

In D89743#2356172 <https://reviews.llvm.org/D89743#2356172>, @aaron.ballman 
wrote:

> I was sort of expecting `hasAttr()` to be deprecated because it is a leaky 
> abstraction (consumers of the API have to know about our internal naming 
> convention for attribute kind enumerations, it makes it harder for use to 
> change the definition of the enumeration, etc.

Sure, SGTM

>>> I'm totally fine if this happens in a follow-up patch (or patches). WDYT?
>
> I definitely don't agree that `hasName()` has different semantics for 
> attributes from declarations -- both of them are named identifiers, 
> potentially with scope information as part of the name. Making the matcher 
> polymorphic matches my expectations (pun intended).

Fair enough - this isn't really my area, but the differences I was thinking of 
were:

- the Attr uses a name rather than owning it - it's more like DeclRefExpr than 
like NamedDecl
- it wasn't clear to me that you'd want the same rules about optional scope 
handling, though it sounds like you do

>> If you think the `hasName` name is important I'm happy to drop `hasAttrName` 
>> from this patch, and someone can work out how to add it with the better 
>> name, but I'm not sure I want to pick this battle with the template gods...
>
> I'm curious if @klimek agrees, but I think `hasName()` is the correct way we 
> want to eventually go. That said, I think having an attribute matcher with no 
> way to match by name encourages an anti-pattern where people write a very 
> generic matcher that matches a lot and then do further refinement work for 
> every match (rather than taking advantage of memoization and other 
> optimizations), so I think `hasAttrName()` is still better than nothing. 
> Would it make sense to add the API but mark it as deprecated to alert users 
> that this API may go away some day if we can swing it? It's a bit unfriendly 
> since we don't have a replacement API lined up for users to use, so I 
> wouldn't want to issue any diagnostics for using the matcher.

I've added a "deprecated" comment describing the intent to merge into `hasName`.



================
Comment at: clang/include/clang/ASTMatchers/ASTMatchersInternal.h:729
 
- private:
+  static bool matchesNode(const NamedDecl &Node, StringRef Name);
+
----------------
aaron.ballman wrote:
> Are the changes to the `HasNameMatcher` needed?
Oops, these were left over from a polymorphism experiment


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D89743

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to