<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">+1 You can pro-actively run clang-tidy over your code base and apply the edits to get the result you want. That is, it's not just for giving diagnostics, suggestions, etc. in an IDE setting.<br></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">As for sophistication -- yes, clang-tidy and clang Tooling more generally have been used for very sophisticated edits.  To get a sense, I'd recommend looking at the clang-tidy check tests. They are lit tests, so essentially each test is example code with the expected fixes: <a href="https://github.com/llvm/llvm-project/tree/main/clang-tools-extra/test/clang-tidy/checkers">https://github.com/llvm/llvm-project/tree/main/clang-tools-extra/test/clang-tidy/checkers</a></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">A possibly-relevant example:</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"><a href="https://github.com/llvm/llvm-project/blob/main/clang-tools-extra/test/clang-tidy/checkers/readability-redundant-control-flow.cpp">https://github.com/llvm/llvm-project/blob/main/clang-tools-extra/test/clang-tidy/checkers/readability-redundant-control-flow.cpp</a><br></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">and it's corresponding code:</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"><a href="https://github.com/llvm/llvm-project/blob/main/clang-tools-extra/clang-tidy/readability/RedundantControlFlowCheck.h">https://github.com/llvm/llvm-project/blob/main/clang-tools-extra/clang-tidy/readability/RedundantControlFlowCheck.h</a><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><a href="https://github.com/llvm/llvm-project/blob/main/clang-tools-extra/clang-tidy/readability/RedundantControlFlowCheck.cpp">https://github.com/llvm/llvm-project/blob/main/clang-tools-extra/clang-tidy/readability/RedundantControlFlowCheck.cpp</a><br></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">You might also find the Clang Transformer is an easier interface to writing the refactoring.  You can find that here:</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"><a href="https://github.com/llvm/llvm-project/tree/main/clang/include/clang/Tooling/Transformer">https://github.com/llvm/llvm-project/tree/main/clang/include/clang/Tooling/Transformer</a></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">And it ties into clang-tidy here: </div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><a href="https://github.com/llvm/llvm-project/blob/main/clang-tools-extra/clang-tidy/utils/TransformerClangTidyCheck.h">https://github.com/llvm/llvm-project/blob/main/clang-tools-extra/clang-tidy/utils/TransformerClangTidyCheck.h</a><br></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">For example, </div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><a href="https://github.com/llvm/llvm-project/blob/main/clang-tools-extra/clang-tidy/abseil/StringFindStrContainsCheck.h">https://github.com/llvm/llvm-project/blob/main/clang-tools-extra/clang-tidy/abseil/StringFindStrContainsCheck.h</a><br></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">If you find you're interested in clang-transformer, please let me know and I can send along a tutorial which I'm working on but haven't yet published upstream.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Dec 18, 2020 at 3:35 AM Miklos Vajna via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</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">Hi Zachary,<br>
<br>
To get started, you can probably ignore clang-refactor. Internally it<br>
uses the same/similar API as clang-tidy, but the later has much more<br>
material available.<br>
<br>
For example, I found <a href="https://www.youtube.com/watch?v=1S2A0VWGOws" rel="noreferrer" target="_blank">https://www.youtube.com/watch?v=1S2A0VWGOws</a> as a<br>
great overview; after that, you can just use clang-query / API docs to<br>
figure out the details. That all talks about clang-tidy.<br>
<br>
Regards,<br>
<br>
Miklos<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</blockquote></div>