<div dir="ltr">Anders~<div><br></div><div>YouCompleteMe (the vim plugin) is built with a parser and completion engine server and a client process that sits inside vim.  Not sure how far your implementation is, but you may wish to consider sharing work it.</div>

<div><br></div><div><a href="https://github.com/Valloric/YouCompleteMe">https://github.com/Valloric/YouCompleteMe</a><br></div><div><br></div><div>Matt</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">

On Tue, Jan 14, 2014 at 12:46 AM, Anders Bakken <span dir="ltr"><<a href="mailto:agbakken@gmail.com" target="_blank">agbakken@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Hi<br>
<br>
We're using to make an indexer daemon which can be queried from emacs<br>
(or other editors if so desired). In doing this we, for various<br>
reasons, preprocess the file first using internal APIs and then invoke<br>
clang_parseTranslationUnit on the preprocessed content. The code for<br>
this is here:<br>
<br>
<a href="https://github.com/Andersbakken/rtags/blob/multi-process/src/RTagsClang.cpp" target="_blank">https://github.com/Andersbakken/rtags/blob/multi-process/src/RTagsClang.cpp</a><br>
<br>
Starting at line 450.<br>
<br>
The problem we're facing is that clang seems to collapse things like this:<br>
<br>
struct A<br>
{<br>
    void               foo();<br>
};<br>
<br>
into this:<br>
<br>
struct A<br>
{<br>
    void foo();<br>
};<br>
<br>
int main()<br>
{<br>
    A a;<br>
    a.foo();<br>
}<br>
<br>
I realize the standard (at least according to GCC) permits this and<br>
that it of course would speed up parsing of the resulting code ever so<br>
slightly. My question is, is it possible to:<br>
<br>
A) Turn this behavior off with an option?<br>
or<br>
B) Someone query which lines had what amounts of space removed.<br>
<br>
I assume something can be done since if I let<br>
clang_parseTranslationUnit index it without preprocessing myself<br>
everything works as expected.<br>
<br>
>From (<a href="http://gcc.gnu.org/onlinedocs/gcc-3.3/cpp/Preprocessor-Output.html" target="_blank">http://gcc.gnu.org/onlinedocs/gcc-3.3/cpp/Preprocessor-Output.html</a>)<br>
<br>
The ISO standard specifies that it is implementation defined whether a<br>
preprocessor preserves whitespace between tokens, or replaces it with<br>
e.g. a single space. In GNU CPP, whitespace between tokens is<br>
collapsed to become a single space, with the exception that the first<br>
token on a non-directive line is preceded with sufficient spaces that<br>
it appears in the same column in the preprocessed output that it<br>
appeared in the original source file. This is so the output is easy to<br>
read. See Differences from previous versions. CPP does not insert any<br>
whitespace where there was none in the original source, except where<br>
necessary to prevent an accidental token paste.<br>
<br>
Thanks and kudos for an awesome project.<br>
<br>
regards<br>
<br>
Anders<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
</blockquote></div><br></div>