[cfe-dev] LibFormat usage question
Sean Silva
silvas at purdue.edu
Thu Oct 31 15:22:41 PDT 2013
On Thu, Oct 31, 2013 at 12:59 PM, David Blaikie <dblaikie at gmail.com> wrote:
>
>
>
> On Thu, Oct 31, 2013 at 6:32 AM, Jesper Eskilson <Jesper.Eskilson at iar.com>wrote:
>
>>
>> Hi,
>>
>> I'm trying to figure out how to programmatically invoke clang-format to
>> format code. I would like to get from a declaration ("Decl *") to a plain
>> string containing the reformatted source code.
>>
>
> It's generally advised that one should not attempt to round trip source
> code through the AST. Use the AST to inform mutations of the original
> source (by using source locations to identify pieces to move, insert, or
> remove), rather than to produce new source from the parsed AST.
>
We really need to put this in an FAQ. It seems like it gets reiterated at
least once a week.
-- Sean Silva
>
>
>>
>> Here's my feeble initial attempt:
>>
>>
>> /*
>> * Non-functioning attempt att trying to extract the source code of
>> * 'decl' formatted using LLVM style.
>> */
>> std::string get_formatted_source(SourceManager &mgr, const Decl *decl)
>> {
>> StringRef code = get_source(mgr, decl); // implemented elsewhere
>> std::vector<Range> ranges;
>> LangOptions lo;
>> Rewriter rw(mgr, lo);
>>
>> Range range(0, src.size());
>> ranges.push_back(range);
>>
>> // Do the reformat
>> auto repl = reformat(getLLVMStyle(), code, ranges);
>>
>> // Apply the replacements
>> for (auto it = repl.begin(); it != repl.end(); ++it) {
>> it->apply(rw);
>> }
>>
>> // Extract the reformatted source code.
>> auto formatted_source = rw.getRewrittenText(decl->getSourceRange());
>>
>> // I would have expected 'formatted_source' to be the formatted source
>> // here, but it is always the same as the original, as if the
>> // replacements where never applied.
>> }
>>
>>
>> --
>> *Jesper Eskilson* *Development Engineer*
>> IAR Systems AB
>> Box 23051, Strandbodgatan 1
>> SE-750 23 Uppsala, SWEDEN
>> E-mail: jesper.eskilson at iar.com Website: www.iar.com
>> Twitter: www.twitter.com/iarsystems
>>
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>>
>>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20131031/7a588fbf/attachment.html>
More information about the cfe-dev
mailing list