[prev in list] [next in list] [prev in thread] [next in thread] 

List:       cfe-dev
Subject:    Re: [cfe-dev] (no subject)
From:       Eric Liu via cfe-dev <cfe-dev () lists ! llvm ! org>
Date:       2016-11-15 19:06:13
Message-ID: CAKFdadBgs7E3vJJ3ebcLiHMQSetv4_hkPzEdx-b9rfCFfYGrOQ () mail ! gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


You can use "llvm::toString(std::move(Err))" to convert the returned error
to string.

Thanks for pointing this out :) I'll mention this in the doc.

On Tue, Nov 15, 2016 at 7:40 PM Steven Lu <stevenlu443@gmail.com> wrote:

> I do have one more question.
>
> The return value of add() is an llvm::Error.
>
> I'm now finally able to compile the code, but I'm having a ton of trouble
> figuring out how to print such an error to a string stream of any kind.
> Google is no help here.
>
> Thanks!
>
> On Mon, Nov 14, 2016 at 4:06 PM, Steven Lu <stevenlu443@gmail.com> wrote:
>
> Hi Eric,
>
> Thanks for clarifying. The only confusion I have is that previously the
> API was easier to use. Now I have to call Replacement.getFilePath() and
> explicitly index the filename map. It feels almost like maybe instead of
> getReplacements() returning a std::map maybe this could be (yet another)
> class so we can continue to have this straightforward interface.
>
> It also prompts me to wonder what other use cases that this change helps
> with.
>
> As for doc I'm sure that just adding a note of what you said (use
> Replacement.getFilePath() to index to the map) would have been enough to
> get me there. I hadn't realized that Replacement could fetch the file path.
>
> Thanks
>
> On Mon, Nov 14, 2016 at 6:30 AM, Eric Liu <ioeric@google.com> wrote:
>
> A common way is to use the file path in a replacement, i.e.
> `Replaces[R.getFilePath()].add(R)`. Note that clang::tooling::Replacements
> <https://github.com/llvm-mirror/clang/blob/master/include/clang/Tooling/Core/Replacement.h#L146>
> is now implemented as a class instead of a std::set.
>
> In general, `formatAndApplyAllReplacements` is a function you would use to
> apply changes while format changed code *after* you've got all replacements.
> A sample usage can be found in clang-move
> <https://github.com/llvm-mirror/clang-tools-extra/blob/master/clang-move/tool/ClangMoveMain.cpp#L137>.
> And I think the interface's comment does explain its purpose. Which
> specific part did you find confusing? I'm happy to improve the doc :)
>
> - Eric
> On Mon, Nov 14, 2016 at 12:04 PM Manuel Klimek <klimek@google.com> wrote:
>
> +eric
>
>
> On Sat, Nov 12, 2016 at 10:45 AM Steven Lu via cfe-dev <
> cfe-dev@lists.llvm.org> wrote:
>
> I've updated clang from revision 254425 to 286122, and RefactoringTool::getReplacements()
> now produces a map of files to replacements.
>
> My original code implements a MatchFinder::MatchCallback which takes a
> pointer to the return value of RefactoringTool::getReplacements() and
> simply inserts Replacements, now it is not clear how I am to perform the
> insertion, I cannot tell now if there is some canonical way to determine
> the filename string to save a particular Replacement under.
>
> I have also found the function formatAndApplyAllReplacements which I'm
> having trouble finding doc/instructions for and seems to be a highest-level
> function that I should use, but it doesnt seem to help address this
> problem.
>
> I wonder if someone could do a quick rundown of how to use the interface
> in a proper way.
>
> Thanks
> _______________________________________________
> cfe-dev mailing list
> cfe-dev@lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
>
>
>

[Attachment #5 (text/html)]

<div dir="ltr">You can use &quot;llvm::toString(std::move(Err))&quot; to convert the \
returned error to string.  <div><br></div><div>Thanks for pointing this out :) \
I&#39;ll mention this in the doc.</div></div><br><div class="gmail_quote"><div \
dir="ltr">On Tue, Nov 15, 2016 at 7:40 PM Steven Lu &lt;<a \
href="mailto:stevenlu443@gmail.com">stevenlu443@gmail.com</a>&gt; \
wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 \
.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg">I \
do have one more question.  <div class="gmail_msg"><br class="gmail_msg"></div><div \
class="gmail_msg">The return value of add() is an llvm::Error.  </div><div \
class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">I&#39;m now \
finally able to compile the code, but I&#39;m having a ton of trouble figuring out \
how to print such an error to a string stream of any kind. Google is no help here.  \
</div><div class="gmail_msg"><br class="gmail_msg"></div><div \
class="gmail_msg">Thanks!</div></div><div class="gmail_extra gmail_msg"><br \
class="gmail_msg"><div class="gmail_quote gmail_msg">On Mon, Nov 14, 2016 at 4:06 PM, \
Steven Lu <span dir="ltr" class="gmail_msg">&lt;<a \
href="mailto:stevenlu443@gmail.com" class="gmail_msg" \
target="_blank">stevenlu443@gmail.com</a>&gt;</span> wrote:<br \
class="gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 \
.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg">Hi \
Eric,  <div class="gmail_msg"><br class="gmail_msg"></div><div \
class="gmail_msg">Thanks for clarifying. The only confusion I have is that previously \
the API was easier to use. Now I have to call Replacement.getFilePath() and \
explicitly index the filename map. It feels almost like maybe instead of \
getReplacements() returning a std::map maybe this could be (yet another) class so we \
can continue to have this straightforward interface.<br class="gmail_msg"></div><div \
class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">It also prompts \
me to wonder what other use cases that this change helps with.  </div><div \
class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">As for doc \
I&#39;m sure that just adding a note of what you said (use Replacement.getFilePath() \
to index to the map) would have been enough to get me there. I hadn&#39;t realized \
that Replacement could fetch the file path.  </div><div class="gmail_msg"><br \
class="gmail_msg"></div><div class="gmail_msg">Thanks</div></div><div \
class="m_-932104846084891772HOEnZb gmail_msg"><div class="m_-932104846084891772h5 \
gmail_msg"><div class="gmail_extra gmail_msg"><br class="gmail_msg"><div \
class="gmail_quote gmail_msg">On Mon, Nov 14, 2016 at 6:30 AM, Eric Liu <span \
dir="ltr" class="gmail_msg">&lt;<a href="mailto:ioeric@google.com" class="gmail_msg" \
target="_blank">ioeric@google.com</a>&gt;</span> wrote:<br \
class="gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 \
.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg">A \
common way is to use the file path in a replacement, i.e. \
`Replaces[R.getFilePath()].add(R)`. Note that <a \
href="https://github.com/llvm-mirror/clang/blob/master/include/clang/Tooling/Core/Replacement.h#L146" \
class="gmail_msg" target="_blank">clang::tooling::Replacements</a> is now implemented \
as a class instead of a std::set.<div class="gmail_msg"><br \
class="gmail_msg"></div><div class="gmail_msg"><span style="font-size:12.8px" \
class="gmail_msg">In general, `formatAndApplyAllReplacements` is a function you would \
use to apply changes while format changed code *after* you&#39;ve got all \
replacements</span>. A sample usage can be found in <a \
href="https://github.com/llvm-mirror/clang-tools-extra/blob/master/clang-move/tool/ClangMoveMain.cpp#L137" \
class="gmail_msg" target="_blank">clang-move</a>. And I think the interface&#39;s \
comment does explain its purpose. Which specific part did you find confusing? I&#39;m \
happy to improve the doc :)</div><span \
class="m_-932104846084891772m_-4445786945806028673HOEnZb gmail_msg"><font \
color="#888888" class="gmail_msg"><div class="gmail_msg"><br \
class="gmail_msg"></div><div class="gmail_msg">- Eric</div></font></span><div \
class="gmail_msg"><div class="m_-932104846084891772m_-4445786945806028673h5 \
gmail_msg"><div class="gmail_msg"><div class="gmail_quote gmail_msg"><div dir="ltr" \
class="gmail_msg">On Mon, Nov 14, 2016 at 12:04 PM Manuel Klimek &lt;<a \
href="mailto:klimek@google.com" class="gmail_msg" \
target="_blank">klimek@google.com</a>&gt; wrote:<br \
class="gmail_msg"></div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 \
.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg">+eric  </div><div dir="ltr" \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg"><br class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg"><br class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg"><div class="gmail_quote \
m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg"><div dir="ltr" \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg">On Sat, Nov 12, 2016 at 10:45 AM Steven Lu via cfe-dev &lt;<a \
href="mailto:cfe-dev@lists.llvm.org" \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg" target="_blank">cfe-dev@lists.llvm.org</a>&gt; wrote:<br \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg"></div><blockquote class="gmail_quote \
m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg gmail_msg" \
style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg"><span style="font-size:12.8px" \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg">I&#39;ve updated clang from revision 254425 to 286122, and \
RefactoringTool::</span><span style="font-size:12.8px" \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg">getReplacements() now produces a map of files to replacements.  </span><br \
style="font-size:12.8px" \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg"><br style="font-size:12.8px" \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg"><span style="font-size:12.8px" \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg">My original code implements a MatchFinder::MatchCallback which takes a \
pointer to the return value of RefactoringTool::</span><span style="font-size:12.8px" \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg">getReplacements() and simply inserts Replacements, now it is not clear how \
I am to perform the insertion, I cannot tell now if there is some canonical way to \
determine the filename string to save a particular Replacement under.  </span><br \
style="font-size:12.8px" \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg"><br style="font-size:12.8px" \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg"><span style="font-size:12.8px" \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg">I have also found the function formatAndApplyAllReplacements which I&#39;m \
having trouble finding doc/instructions for and seems to be a highest-level function \
that I should use, but it doesnt seem to help address this problem.  </span><br \
style="font-size:12.8px" \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg"><div style="font-size:12.8px" \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg"><br class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg"></div><div style="font-size:12.8px" \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg">I wonder if someone could do a quick rundown of how to use the interface \
in a proper way.  </div><div style="font-size:12.8px" \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg"><br class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg"></div><div style="font-size:12.8px" \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg">Thanks</div></div> _______________________________________________<br \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg"> cfe-dev mailing list<br \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg"> <a href="mailto:cfe-dev@lists.llvm.org" \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg" target="_blank">cfe-dev@lists.llvm.org</a><br \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg"> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" \
rel="noreferrer" class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br \
class="m_-932104846084891772m_-4445786945806028673m_93108965231033089gmail_msg \
gmail_msg"> </blockquote></div></div></blockquote></div></div></div></div></div>
</blockquote></div><br class="gmail_msg"></div>
</div></div></blockquote></div><br class="gmail_msg"></div>
</blockquote></div>


[Attachment #6 (text/plain)]

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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic