<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<p>Hi Yitzhak,</p>
<p>you had positive reactions from Manuel, so I think that the
proposed API is in principle interesting.<br>
The API should go into libTooling? And I assume it will be
parallel to what we have already?</p>
<p>Having patches on phabricator is probably a good idea. But I am
not an authorative figure in the libTooling space,<br>
in the end the code-owner (manuel?!) has the power to deny entry.
IMHO its a good direction.</p>
<p>Best, Jonas<br>
</p>
<div class="moz-cite-prefix">Am 13.02.19 um 17:18 schrieb Yitzhak
Mandelbaum:<br>
</div>
<blockquote type="cite"
cite="mid:CAKTLd7wXu8=wOMVR4k6_AXRbUdTWqTtDo6GGNPTufmD_+ru00A@mail.gmail.com">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<div dir="ltr">
<div dir="ltr">
<div dir="ltr">
<div dir="ltr">
<div dir="ltr">
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif">Jonas,</div>
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif"><br>
</div>
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif">I've
updated the revision (<a
href="https://reviews.llvm.org/D56933"
target="_blank" moz-do-not-send="true">https://reviews.llvm.org/D56933</a>)
with two example clang tidies ported to Transformer.
These are not ideal checks, because they are very
particular in their handling of whitespace, but I
think they're good demonstrations both of Transformers
strengths and its (current) limitations.
Additionally, below are to versions of simple example
that isn't a tidy check yet. Please let me know what
you think. </div>
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif">
<div class="gmail_default"><br>
</div>
<div class="gmail_default">Also, what are the next
steps towards considering these libraries for
acceptance to clang? Should I put together a
diff(s) for review, or is that still premature?</div>
</div>
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif"><br>
</div>
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif"><br>
</div>
<div class="gmail_default">
<div class="gmail_default"><font face="monospace,
monospace"> // Simplify
`e.emplace_back(std::make_pair(e1, e2))` to
`e.emplace_back(e1, e2)`.</font></div>
<div class="gmail_default"><font face="monospace,
monospace"> // We elide the extra matching
required to check that `e` is in a container like
std::vector and that </font></div>
<div class="gmail_default"><font face="monospace,
monospace"> // the element type is the same as
that constructed by the call to make_pair. </font></div>
<div class="gmail_default"><font face="monospace,
monospace"><br>
</font></div>
<div class="gmail_default"><font face="monospace,
monospace"> </font><span
style="font-family:monospace,monospace">using
extra_matchers::isFunctionNamed;</span></div>
<div class="gmail_default"><font face="monospace,
monospace"> using
extra_matchers::isMethodNamed; </font></div>
<div class="gmail_default"><font face="monospace,
monospace"><br>
</font></div>
<div class="gmail_default"><font face="monospace,
monospace"> // Version 1</font></div>
<div class="gmail_default"><font face="monospace,
monospace"> // This version has three
metavariables -- one for the container and two for
the</font></div>
<div class="gmail_default"><font face="monospace,
monospace"> // arguments to `make_pair`.</font></div>
<div class="gmail_default"><font face="monospace,
monospace"> ExprId Call, Arg0, Arg1;</font></div>
<div class="gmail_default"><span
style="font-family:monospace,monospace"> auto
MakePairCall =</span><br>
</div>
<div class="gmail_default"><font face="monospace,
monospace">
callExpr(callee(isFunctionNamed("::std::make_pair")),</font></div>
<div class="gmail_default"><font face="monospace,
monospace"> argumentCountIs(2),
hasArgument(0, Arg0.bind()),</font></div>
<div class="gmail_default"><font face="monospace,
monospace"> hasArgument(1,
Arg1.bind()));</font></div>
<div class="gmail_default"><font face="monospace,
monospace"> auto Rule1 = </font><span
style="font-family:monospace,monospace">RewriteRule()</span></div>
<div class="gmail_default"><font face="monospace,
monospace"> .matching(cxxMemberCallExpr(</font></div>
<div class="gmail_default"><font face="monospace,
monospace">
callee(isMethodNamed("emplace_back")),</font></div>
<div class="gmail_default"><span
style="font-family:monospace,monospace">
argumentCountIs(1), hasArgument(0, bind(Call,
make_pair_call))))</span><br>
</div>
<div class="gmail_default"><font face="monospace,
monospace"> .change(Call)</font></div>
<div class="gmail_default"><font face="monospace,
monospace"> .replaceWith(Arg0, ",",
Arg1));</font></div>
<div class="gmail_default"><font face="monospace,
monospace"><br>
</font></div>
<div class="gmail_default"><font face="monospace,
monospace"> // Version 2</font></div>
<div class="gmail_default"><font face="monospace,
monospace"> // In this version, we extract the
source code of the arguments using the `arg()`</font></div>
<div class="gmail_default"><font face="monospace,
monospace"> // stencil operator on the node bound
to `Call`.</font></div>
<div class="gmail_default"><font face="monospace,
monospace"> auto Rule2 =</font><span
style="font-family:monospace,monospace"> RewriteRule()</span></div>
<div class="gmail_default"><font face="monospace,
monospace"> .matching(cxxMemberCallExpr(</font></div>
<div class="gmail_default"><font face="monospace,
monospace">
callee(isMethodNamed("emplace_back")),
argumentCountIs(1),</font></div>
<div class="gmail_default"><font face="monospace,
monospace"> hasArgument(0, bind(Call,
callExpr(callee(isFunctionNamed(</font></div>
<div class="gmail_default"><font face="monospace,
monospace">
"::std::make_tuple")))))))</font></div>
<div class="gmail_default"><font face="monospace,
monospace"> .change(Call)</font></div>
<div class="gmail_default"><font face="monospace,
monospace">
.replaceWith(tooling::stencil_generators::args(Call)));</font></div>
</div>
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif"><br>
</div>
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif">Thanks!</div>
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif">Yitzhak</div>
</div>
</div>
</div>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Fri, Jan 18, 2019 at 4:43
PM Yitzhak Mandelbaum <<a href="mailto:yitzhakm@google.com"
moz-do-not-send="true">yitzhakm@google.com</a>> wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif">
<div dir="ltr"
style="font-family:Arial,Helvetica,sans-serif">
<div dir="ltr">
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif">Thanks!
I've added it to a revision (<a
href="https://reviews.llvm.org/D56933"
target="_blank" moz-do-not-send="true">https://reviews.llvm.org/D56933</a>),
but I wasn't sure what lists to subscribe it to (if
any) given that I don't intend it yet for proper
review.</div>
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif"><br>
</div>
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif">I
haven't ported check, but do have a demo check
(using Transformer as a whole) that I can add. I'll
ping the thread when that's done.</div>
</div>
</div>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr">On Fri, Jan 18, 2019 at 3:19 PM Jonas Toth
<<a href="mailto:development@jonas-toth.eu"
target="_blank" moz-do-not-send="true">development@jonas-toth.eu</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div bgcolor="#FFFFFF">
<p>Hi Yitzhak,</p>
<p>your code looks very interesting.</p>
<p>It might be a good fit for uitlity that
clang-refactor can use, too. (not sure about the state
of clang-refactor though)<br>
I would be interested how your framework integrates
into clang-tidy, do you have a reference check that
you ported to your approach (i have seen some
references to clang-tidy code)?</p>
<p>P.S. It might be a good idea to make your diff a full
revision, as right now the discussion feature can not
be used.</p>
<p>Best, Jonas<br>
</p>
<div
class="gmail-m_7143118796014398919gmail-m_5125166849334550517moz-cite-prefix">Am
18.01.19 um 19:29 schrieb Yitzhak Mandelbaum via
cfe-dev:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div dir="ltr">
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif">After
some delay, I've created a diff to accompany the
doc. In particular, here's the Stencil library,
which provides for generating code in a
format-string style:</div>
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif"><br>
</div>
<div class="gmail_default"><font face="arial,
helvetica, sans-serif"><a
href="https://reviews.llvm.org/differential/diff/182553/"
target="_blank" moz-do-not-send="true">https://reviews.llvm.org/differential/diff/182553/</a></font><br>
</div>
<div class="gmail_default"><font face="arial,
helvetica, sans-serif"><br>
</font></div>
<div class="gmail_default"><font face="arial,
helvetica, sans-serif">Please see the tests
for various examples and the doc for more
explanation.</font></div>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr">On Fri, Nov 16, 2018 at 10:22 AM
Yitzhak Mandelbaum <<a
href="mailto:yitzhakm@google.com"
target="_blank" moz-do-not-send="true">yitzhakm@google.com</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px
0px 0px 0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div dir="ltr">
<div dir="ltr">
<div dir="ltr">
<div class="gmail_default"><font
face="arial, helvetica, sans-serif">Hi
all,</font></div>
<div class="gmail_default"><font
face="arial, helvetica, sans-serif"><br>
</font></div>
<div class="gmail_default"><font
face="arial, helvetica, sans-serif">I
have a proposal for a framework that
makes it easier to write source to
source transformations with the
clang::Tooling libraries, including
clang-tidy checks.</font></div>
<div class="gmail_default"><font
face="arial, helvetica, sans-serif"><br>
</font></div>
<div class="gmail_default"><font
face="arial, helvetica, sans-serif">The
full proposal is in this doc:</font></div>
<div class="gmail_default"><font
face="arial, helvetica, sans-serif"><br>
</font></div>
<div class="gmail_default"><font
face="arial, helvetica, sans-serif"><a
href="https://docs.google.com/document/d/1ppw0RhjwsrbBcHYhI85pe6ISDbA6r5d00ot3N8cQWeQ/edit?usp=sharing"
target="_blank" moz-do-not-send="true">https://docs.google.com/document/d/1ppw0RhjwsrbBcHYhI85pe6ISDbA6r5d00ot3N8cQWeQ/edit?usp=sharing</a></font><br>
</div>
<div class="gmail_default"><font
face="arial, helvetica, sans-serif"><br>
</font></div>
<div class="gmail_default"><font
face="arial, helvetica, sans-serif">From
the doc:</font></div>
<div class="gmail_default"><font
face="arial, helvetica, sans-serif">Transformer
is a framework that aims to simplify
development of clang-based
source-to-source transformations. It
focuses on the particular class of
transformations that act only locally —
that is, use local information about the
code and make local changes (like a
syntax-aware “find-and-replace”); and at
scale — that is, will be carried out on
many source files. The target audience
is users that are comfortable with, or
willing to become comfortable with, the
clang AST matchers library.<br>
</font></div>
<div class="gmail_default"><font
face="arial, helvetica, sans-serif"><br>
</font></div>
<div class="gmail_default"><font
face="arial, helvetica, sans-serif">I
have a working prototype of this library
which I've used on small examples inside
Google. I plan to put together a patch
for reference next week, although the
doc should stand on its own.</font></div>
<div class="gmail_default"><font
face="arial, helvetica, sans-serif"><br>
</font></div>
<div class="gmail_default"><font
face="arial, helvetica, sans-serif">Thanks!</font></div>
<div class="gmail_default"><font
face="arial, helvetica, sans-serif">Yitzhak
Mandelbaum</font></div>
</div>
</div>
</div>
</blockquote>
</div>
<br>
<fieldset
class="gmail-m_7143118796014398919gmail-m_5125166849334550517mimeAttachmentHeader"></fieldset>
<pre class="gmail-m_7143118796014398919gmail-m_5125166849334550517moz-quote-pre">_______________________________________________
cfe-dev mailing list
<a class="gmail-m_7143118796014398919gmail-m_5125166849334550517moz-txt-link-abbreviated" href="mailto:cfe-dev@lists.llvm.org" target="_blank" moz-do-not-send="true">cfe-dev@lists.llvm.org</a>
<a class="gmail-m_7143118796014398919gmail-m_5125166849334550517moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" target="_blank" moz-do-not-send="true">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a>
</pre>
</blockquote>
</div>
</blockquote>
</div>
</blockquote>
</div>
</blockquote>
</body>
</html>