[PATCH] D128807: [clang][transformer] Finish plumbing `Note` all the way to the output.
Yitzhak Mandelbaum via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Aug 9 11:21:06 PDT 2022
ymandel added a comment.
In D128807#3627625 <https://reviews.llvm.org/D128807#3627625>, @courbet wrote:
> In D128807#3625676 <https://reviews.llvm.org/D128807#3625676>, @ymandel wrote:
>
>>> For my particular case, I just need multiple notes per rule. I don't need them to be associated to a particular edit (and in that very particular case, I don't even need a source location).
>>
>> I'm not sure I understand: you need this additional note, but it doesn't need to be tied to a source location, so, why can't you concatenate it to the main note?
>
> For my specific check the notes carry structure beyond what's typically in a warning, so I need the information to be separate.
Based on our conversation offline, I'm inclined towards the change with the note below about API. Thanks!
================
Comment at: clang/include/clang/Tooling/Transformer/RewriteRule.h:250-251
+// Adds a note to the given edit or edits. If there are several edits, the note
+// is added to each one of them.
+// \code
----------------
li.zhe.hua wrote:
> Are we sure that this is what someone would want? Perhaps I am not creative enough, but this seems like it could explode a large number of notes that coincide to edits, which seems like an odd thing to want.
Agreed. I'm more inclined to only include the ASTEdit version. I see the value of the other one, but seems easy to get wrong. Alternatively, implement it to either only add to the first edit or append/prepend a separate edit with the note.
Either way, I think the primary use should be with a standalone note generator like `ASTEdit note(TextGenerator Note)`. The idea is that the new combinator allows adding notes to a rule and we happen to store notes in ASTEdits. Then, `withNote` is really the uncommon case where you want to supplement an existing edit or set of edits with a note. WDYT?
================
Comment at: clang/include/clang/Tooling/Transformer/RewriteRule.h:255-256
+// \endcode
+EditGenerator withNote(EditGenerator Generator, TextGenerator Note);
+ASTEdit withNote(ASTEdit Edit, TextGenerator Note);
+
----------------
================
Comment at: clang/lib/Tooling/Transformer/RewriteRule.cpp:56
T.Range = *EditRange;
- T.Replacement = std::move(*Replacement);
- T.Metadata = std::move(*Metadata);
+ if (E.Replacement) {
+ auto Replacement = E.Replacement->eval(Result);
----------------
courbet wrote:
> ymandel wrote:
> > Can this ever be null? I assume the intent was "no" (in which case I'd recommend an assert instead), but I'm open to the idea that it's valid, just want to understand better.
> Given that we provide an `EditGenerator edit(ASTEdit)`, we can't ever be sure that the user won't give us an empty replacement.
>
> I've split this off to a separate patch here with a test to show the issue: https://reviews.llvm.org/D128887
Agreed. Thanks!
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D128807/new/
https://reviews.llvm.org/D128807
More information about the cfe-commits
mailing list