<p dir="ltr">I'm curious what the actual problem is. In our experience changing the tokens in the code (as opposed to full ranges of code) is usually sufficient, and will leave all the comments in place. I'm aware that has limits, so I'd like to understand what check you're working on that requires this.</p>
<br><div class="gmail_quote"><div dir="ltr">On Mon, Dec 21, 2015, 8:20 PM Richard via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">[Please reply *only* to the list and do not include my email directly<br>
in the To: or Cc: of your reply; otherwise I will not see your reply.<br>
Thanks.]<br>
<br>
I am trying to determine if a replacement range contains comments or<br>
preprocessor directives to avoid removing them when generating a<br>
fixit in clang-tidy.  I tried the following code:<br>
<br>
bool containsDiscardedTokens(<br>
    const ast_matchers::MatchFinder::MatchResult &Result, SourceRange Range) {<br>
  CharSourceRange CharRange = Lexer::makeFileCharRange(<br>
      CharSourceRange::getTokenRange(Range), *Result.SourceManager,<br>
      Result.Context->getLangOpts());<br>
<br>
  std::string ReplacementText =<br>
      Lexer::getSourceText(CharRange, *Result.SourceManager,<br>
                           Result.Context->getLangOpts()).str();<br>
  Lexer Lex(CharRange.getBegin(), Result.Context->getLangOpts(),<br>
            ReplacementText.data(), ReplacementText.data(),<br>
            ReplacementText.data() + ReplacementText.size());<br>
  Token Tok;<br>
<br>
  while (!Lex.LexFromRawLexer(Tok)) {<br>
    if (Tok.is(tok::TokenKind::comment) || Tok.is(tok::TokenKind::eod)) {<br>
      return true;<br>
    }<br>
  }<br>
<br>
  return false;<br>
}<br>
<br>
However, when invoked over a source range that contains comments or<br>
preprocessor directives, the lexer isn't returning to me tokens<br>
representing the comments or the preprocessor directives.<br>
<br>
Is it possible for the lexer to tell me this, or do I need to hook the<br>
preprocessor?<br>
--<br>
"The Direct3D Graphics Pipeline" free book <<a href="http://tinyurl.com/d3d-pipeline" rel="noreferrer" target="_blank">http://tinyurl.com/d3d-pipeline</a>><br>
     The Computer Graphics Museum <<a href="http://ComputerGraphicsMuseum.org" rel="noreferrer" target="_blank">http://ComputerGraphicsMuseum.org</a>><br>
         The Terminals Wiki <<a href="http://terminals.classiccmp.org" rel="noreferrer" target="_blank">http://terminals.classiccmp.org</a>><br>
  Legalize Adulthood! (my blog) <<a href="http://LegalizeAdulthood.wordpress.com" rel="noreferrer" target="_blank">http://LegalizeAdulthood.wordpress.com</a>><br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</blockquote></div>