<div dir="ltr"><div dir="ltr">On Sat, Aug 28, 2021 at 1:52 PM Arthur O'Dwyer via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">But because it (has the potential to) change the token sequence, it is <i>qualitatively more dangerous</i> than a formatter that merely reformats the existing token sequence.<br></div></div></blockquote><div><br></div><div>Formally new-line is not a preprocessing-token, but it is effectively, as it is referred to as a terminal in the preprocessor grammar.  If we consider a new-line a preprocessor token, then I think it is almost the case that any source code change that does not change the preprocessor token sequence is unobservable in the final program.  (For the true pedants there is std::source_location::column.)</div><div><br></div><div>But regardless of the formal proof:  I think most people perceive the two general buckets "whitespace formatting" and "non-whitespace refactoring", and that the latter is more dangerous.  Hence the suggestion of shipping two different frontend programs to help users isolate those two buckets if they so desire.</div><div><br></div></div></div>