clang 10.0.0git

RewriteTest.cpp
Go to the documentation of this file.
1 //===--- RewriteTest.cpp - Rewriter playground ----------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This is a testbed.
10 //
11 //===----------------------------------------------------------------------===//
12
13 #include "clang/Lex/Preprocessor.h"
14 #include "clang/Rewrite/Core/TokenRewriter.h"
15 #include "clang/Rewrite/Frontend/Rewriters.h"
16 #include "llvm/Support/raw_ostream.h"
17
18 void clang::DoRewriteTest(Preprocessor &PP, raw_ostream *OS) {
19 SourceManager &SM = PP.getSourceManager();
20 const LangOptions &LangOpts = PP.getLangOpts();
21
22 TokenRewriter Rewriter(SM.getMainFileID(), SM, LangOpts);
23
24 // Throw <i> </i> tags around comments.
25 for (TokenRewriter::token_iterator I = Rewriter.token_begin(),
26 E = Rewriter.token_end(); I != E; ++I) {
27 if (I->isNot(tok::comment)) continue;
28
29 Rewriter.AddTokenBefore(I, "<i>");
30 Rewriter.AddTokenAfter(I, "</i>");
31 }
32
33
34 // Print out the output.
35 for (TokenRewriter::token_iterator I = Rewriter.token_begin(),
36 E = Rewriter.token_end(); I != E; ++I)
37 *OS << PP.getSpelling(*I);
38 }
Rewriters.h
clang::LangOptions
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
Definition: LangOptions.h:53
clang::Preprocessor::getLangOpts
const LangOptions & getLangOpts() const
Definition: Preprocessor.h:907
clang::Preprocessor::getSpelling
StringRef getSpelling(SourceLocation loc, SmallVectorImpl< char > &buffer, bool *invalid=nullptr) const
Return the &#39;spelling&#39; of the token at the given location; does not go up to the spelling location or ...
Definition: Preprocessor.h:1675
clang::TokenRewriter
Definition: TokenRewriter.h:30
TokenRewriter.h
Preprocessor.h
Defines the clang::Preprocessor interface.
SM
const SourceManager & SM
Definition: Format.cpp:1685
clang::Preprocessor::getSourceManager
SourceManager & getSourceManager() const
Definition: Preprocessor.h:911
clang::TokenRewriter::token_iterator
std::list< Token >::const_iterator token_iterator
Definition: TokenRewriter.h:56
clang::SourceManager::getMainFileID
FileID getMainFileID() const
Returns the FileID of the main source file.
Definition: SourceManager.h:807
clang::DoRewriteTest
void DoRewriteTest(Preprocessor &PP, raw_ostream *OS)
DoRewriteTest - A simple test for the TokenRewriter class.
Definition: RewriteTest.cpp:18
clang::Rewriter
Rewriter - This is the main interface to the rewrite buffers.
Definition: Rewriter.h:32
clang::SourceManager
This class handles loading and caching of source files into memory.
Definition: SourceManager.h:596
clang::Preprocessor
Engages in a tight little dance with the lexer to efficiently preprocess tokens.
Definition: Preprocessor.h:128