LegalizeAdulthood added inline comments.

================
Comment at: clang/include/clang/ASTMatchers/ASTMatchers.h:5435-5442
+/// Matches two consecutive statements within a compound statement.
+///
+/// Given
+/// \code
+///   { if (x > 0) return true; return false; }
+/// \endcode
+/// compoundStmt(hasSubstatementSequence(ifStmt(), returnStmt()))
----------------
aaron.ballman wrote:
> LegalizeAdulthood wrote:
> > aaron.ballman wrote:
> > > LegalizeAdulthood wrote:
> > > > aaron.ballman wrote:
> > > > > How do we extend this to support testing arbitrary sequences of 
> > > > > statements? (If this supports two statements, someone will find a 
> > > > > need for three, etc).
> > > > Yeah, I was wondering that too.  I didn't see (but didn't look 
> > > > extensively) any support for variadic matchers taking a parameter pack.
> > > > 
> > > > I stopped at 2 because this suits my immediate needs with 
> > > > `readability-simplify-boolean-expr` where I have to manually loop over 
> > > > `CompoundStmt` matches in order to verify that the `if (x) return true; 
> > > > return false;` constructs consist of two adjacent statements.
> > > I don't think we have any variadic matchers yet to model on, but I think 
> > > if this is only needed for one check, we can add it in the current form 
> > > as a local matcher for that check. Whenever we figure out how to give the 
> > > better interface through the static and dynamic matchers, then we can 
> > > figure out how to lift this to the general matcher interface.
> > > 
> > > WDYT?
> > I don't think it is harmful to make it visible to all and I think it is 
> > helpful.
> > Defining it in ASTMatchers, enables using it in `clang-query`, for instance.
> > 
> I contend this is not a generally useful matcher without supporting an 
> arbitrary number of statements. Even then, to be honest, it's questionable 
> whether there's sufficient need for this to be a public matcher. Typically, 
> we don't expose a new public matcher unless there's a general need for it, 
> and this one is already pretty borderline even if it's fully generalized. 
> This file is *very* expensive to instantiate and it gets used in a lot of 
> places, so that's one of the primary reasons we don't expose matchers from 
> here unless they're generally useful.
> 
> Unless @klimek or another AST matcher code owner thinks this is useful in 
> general (to multiple checks people are likely to want to write even if 
> they're not contributing the checks to the community), I'm opposed to 
> exposing this as-is. However, adding it as a private matcher for the check 
> that needs the limited functionality would get no opposition from me (and 
> this implementation looks correct as well).
My thoughts:

I'm OK with moving it as a private matcher as it would simplify a big chunk of 
code
in the simplify-boolean-expr check.

I agree that ASTMatchers.h is used all over the place and at a minimum causes a
huge amount of rebuild.

Regarding the general usefulness of the matcher, let me elaborate on my 
motivation
for adding this matcher.

I see it from the viewpoint of a developer of checks/refactorings.

I really want us to get to a world where a complete refactoring can be 
specified as
a script input to a refactoring tool.  Eliminating the need to write C++ that 
directly
manipulates the AST and the edits will lower the bar for entry for other people
writing automated changes to their codebases.

Since the last time I worked in the clang codebase, the transformer library has
been added.  With this new library, I think all we're missing is a parser that 
matches
the input script to the necessary calls to code in the transformer library.  
Once we
do this, I think the need for more and higher-level matchers will become evident
and a matcher like this is the only way you can specify that a statement Y
immediately follows statement X purely through matchers.  Current matchers
don't even let you specify relative ordering of statements.  The best you can do
is assert that a block contains the statements of interest and then you must 
write
your own C++ code to walk the block and determine if they fit your actual
match criteria.


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

https://reviews.llvm.org/D116518

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

Reply via email to