aaron.ballman accepted this revision.
aaron.ballman added a comment.

Patch LGTM aside from a formatting nit.

In D75365#1898466 <https://reviews.llvm.org/D75365#1898466>, @ymandel wrote:

> Aaron -- when fixing this bug, I had some other questions about the behavior 
> of this matcher. Specifically, instead of adding bindings to the existing 
> map, it creates a new match result for each matching node (with addMatch).  
> But, I'm struggling to see how it makes sense for optionally -- why would you 
> want a separate match result for each matching InnerMatch? This behavior 
> seems best reserved for `forEach` and related matchers.


Agreed, that does seem a bit strange.

> I'd propose (and have a patch ready) to instead accumulate all bindings in 
> the same result, so that `optionally(a, b)` would be equivalent to 
> `allOf(optionally(a), optionally(b))` (which it currently is not).  That is, 
> 'optionally' would always give a single result and each submatcher can add 
> more bindings to the result.
> 
> Alternatively, we could restrict `optionally` to take exactly one argument, 
> rather than making it variadic, in which case there's no room for confusion 
> as to its semantics. Multiple optional elements would require using 
> `optionally` within an allof (either explicit or implicit). However, I 
> realize this change is more ambitious and may prevent some valid uses.
> 
> WDYT?

Good question! My intuition is that `optionally` should take exactly one 
argument and the user should be explicit as to whether they mean `allOf` or 
`anyOf` when there is a list of optional matchers. Defaulting to the `allOf` 
behavior for a list may be surprising to some folks because the `anyOf` 
behavior also seems reasonable for a list of optional matchers. WDYT?



================
Comment at: clang/lib/ASTMatchers/ASTMatchersInternal.cpp:353
     BoundNodesTreeBuilder BuilderInner(*Builder);
-    if (InnerMatcher.matches(DynNode, Finder, &BuilderInner))
+    if (InnerMatcher.matches(DynNode, Finder, &BuilderInner)){
+      Matched = true;
----------------
Please fix the formatting.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D75365



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

Reply via email to