File indexing completed on 2026-05-10 08:37:11
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef LLVM_CLANG_TOOLING_SYNTAX_TOKEN_BUFFER_TOKEN_MANAGER_H
0010 #define LLVM_CLANG_TOOLING_SYNTAX_TOKEN_BUFFER_TOKEN_MANAGER_H
0011
0012 #include "clang/Tooling/Syntax/TokenManager.h"
0013 #include "clang/Tooling/Syntax/Tokens.h"
0014
0015 namespace clang {
0016 namespace syntax {
0017
0018
0019
0020 class TokenBufferTokenManager : public TokenManager {
0021 public:
0022 TokenBufferTokenManager(const TokenBuffer &Tokens,
0023 const LangOptions &LangOpts, SourceManager &SourceMgr)
0024 : Tokens(Tokens), LangOpts(LangOpts), SM(SourceMgr) {}
0025
0026 static bool classof(const TokenManager *N) { return N->kind() == Kind; }
0027 llvm::StringLiteral kind() const override { return Kind; }
0028
0029 llvm::StringRef getText(Key I) const override {
0030 const auto *Token = getToken(I);
0031 assert(Token);
0032
0033
0034
0035 if (Token->kind() == tok::eof)
0036 return "<eof>";
0037 return Token->text(SM);
0038 }
0039
0040 const syntax::Token *getToken(Key I) const {
0041 return reinterpret_cast<const syntax::Token *>(I);
0042 }
0043 SourceManager &sourceManager() { return SM; }
0044 const SourceManager &sourceManager() const { return SM; }
0045 const TokenBuffer &tokenBuffer() const { return Tokens; }
0046
0047 private:
0048
0049 static constexpr llvm::StringLiteral Kind = "TokenBuffer";
0050
0051
0052
0053
0054 std::pair<FileID, ArrayRef<Token>>
0055 lexBuffer(std::unique_ptr<llvm::MemoryBuffer> Buffer);
0056 friend class FactoryImpl;
0057
0058 const TokenBuffer &Tokens;
0059 const LangOptions &LangOpts;
0060
0061
0062 SourceManager &SM;
0063
0064 llvm::DenseMap<FileID, std::vector<Token>> ExtraTokens;
0065 };
0066
0067 }
0068 }
0069
0070 #endif