xref: /openbsd-src/gnu/llvm/clang/lib/Frontend/Rewrite/RewriteTest.cpp (revision e5dd70708596ae51455a0ffa086a00c5b29f8583)
1*e5dd7070Spatrick //===--- RewriteTest.cpp - Rewriter playground ----------------------------===//
2*e5dd7070Spatrick //
3*e5dd7070Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*e5dd7070Spatrick // See https://llvm.org/LICENSE.txt for license information.
5*e5dd7070Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*e5dd7070Spatrick //
7*e5dd7070Spatrick //===----------------------------------------------------------------------===//
8*e5dd7070Spatrick //
9*e5dd7070Spatrick // This is a testbed.
10*e5dd7070Spatrick //
11*e5dd7070Spatrick //===----------------------------------------------------------------------===//
12*e5dd7070Spatrick 
13*e5dd7070Spatrick #include "clang/Lex/Preprocessor.h"
14*e5dd7070Spatrick #include "clang/Rewrite/Core/TokenRewriter.h"
15*e5dd7070Spatrick #include "clang/Rewrite/Frontend/Rewriters.h"
16*e5dd7070Spatrick #include "llvm/Support/raw_ostream.h"
17*e5dd7070Spatrick 
DoRewriteTest(Preprocessor & PP,raw_ostream * OS)18*e5dd7070Spatrick void clang::DoRewriteTest(Preprocessor &PP, raw_ostream *OS) {
19*e5dd7070Spatrick   SourceManager &SM = PP.getSourceManager();
20*e5dd7070Spatrick   const LangOptions &LangOpts = PP.getLangOpts();
21*e5dd7070Spatrick 
22*e5dd7070Spatrick   TokenRewriter Rewriter(SM.getMainFileID(), SM, LangOpts);
23*e5dd7070Spatrick 
24*e5dd7070Spatrick   // Throw <i> </i> tags around comments.
25*e5dd7070Spatrick   for (TokenRewriter::token_iterator I = Rewriter.token_begin(),
26*e5dd7070Spatrick        E = Rewriter.token_end(); I != E; ++I) {
27*e5dd7070Spatrick     if (I->isNot(tok::comment)) continue;
28*e5dd7070Spatrick 
29*e5dd7070Spatrick     Rewriter.AddTokenBefore(I, "<i>");
30*e5dd7070Spatrick     Rewriter.AddTokenAfter(I, "</i>");
31*e5dd7070Spatrick   }
32*e5dd7070Spatrick 
33*e5dd7070Spatrick 
34*e5dd7070Spatrick   // Print out the output.
35*e5dd7070Spatrick   for (TokenRewriter::token_iterator I = Rewriter.token_begin(),
36*e5dd7070Spatrick        E = Rewriter.token_end(); I != E; ++I)
37*e5dd7070Spatrick     *OS << PP.getSpelling(*I);
38*e5dd7070Spatrick }
39