diff options
author | Johan Vikstrom <jvikstrom@google.com> | 2019-08-20 13:34:01 +0000 |
---|---|---|
committer | Johan Vikstrom <jvikstrom@google.com> | 2019-08-20 13:34:01 +0000 |
commit | 6687fde07aeaea958d9f9b385949dbde769b20f7 (patch) | |
tree | 8433952735f0397550eda19de0449f19861e37f4 /clang/lib/Tooling/Syntax/Tokens.cpp | |
parent | cec028fc14dda68c80e489b861adcf28944151f6 (diff) | |
download | bcm5719-llvm-6687fde07aeaea958d9f9b385949dbde769b20f7.tar.gz bcm5719-llvm-6687fde07aeaea958d9f9b385949dbde769b20f7.zip |
[Syntax] Added function to get macro expansion tokens to TokenBuffer.
Summary:
Returns the first token in every mapping where the token is an identifier.
This API is required to be able to highlight macro expansions in clangd.
Reviewers: hokein, ilya-biryukov
Subscribers: kadircet, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D66470
llvm-svn: 369385
Diffstat (limited to 'clang/lib/Tooling/Syntax/Tokens.cpp')
-rw-r--r-- | clang/lib/Tooling/Syntax/Tokens.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/clang/lib/Tooling/Syntax/Tokens.cpp b/clang/lib/Tooling/Syntax/Tokens.cpp index 3852e71c37f..a2c3bc137d6 100644 --- a/clang/lib/Tooling/Syntax/Tokens.cpp +++ b/clang/lib/Tooling/Syntax/Tokens.cpp @@ -232,6 +232,21 @@ TokenBuffer::expansionStartingAt(const syntax::Token *Spelled) const { return E; } +std::vector<const syntax::Token *> +TokenBuffer::macroExpansions(FileID FID) const { + auto FileIt = Files.find(FID); + assert(FileIt != Files.end() && "file not tracked by token buffer"); + auto &File = FileIt->second; + std::vector<const syntax::Token *> Expansions; + auto &Spelled = File.SpelledTokens; + for (auto Mapping : File.Mappings) { + const syntax::Token *Token = &Spelled[Mapping.BeginSpelled]; + if (Token->kind() == tok::TokenKind::identifier) + Expansions.push_back(Token); + } + return Expansions; +} + std::vector<syntax::Token> syntax::tokenize(FileID FID, const SourceManager &SM, const LangOptions &LO) { std::vector<syntax::Token> Tokens; |