[PATCH] D68458: [clangd] Collect missing macro references.
Haojian Wu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 4 05:14:18 PDT 2019
hokein created this revision.
hokein added a reviewer: ilya-biryukov.
Herald added subscribers: usaxena95, kadircet, arphaman, jkorous, MaskRay.
Herald added a project: clang.
Semantic highlghting is missing a few macro references.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D68458
Files:
clang-tools-extra/clangd/CollectMacros.h
clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
Index: clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
+++ clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
@@ -475,6 +475,20 @@
$Macro[[assert]]($Variable[[x]] != $Variable[[y]]);
$Macro[[assert]]($Variable[[x]] != $Function[[f]]());
}
+ )cpp",
+ // highlighting all macro references
+ R"cpp(
+ #ifndef $Macro[[name]]
+ #define $Macro[[name]]
+ #endif
+
+ #define $Macro[[test]]
+ #undef $Macro[[test]]
+ #ifdef $Macro[[test]]
+ #endif
+
+ #if defined($Macro[[test]])
+ #endif
)cpp",
R"cpp(
struct $Class[[S]] {
Index: clang-tools-extra/clangd/CollectMacros.h
===================================================================
--- clang-tools-extra/clangd/CollectMacros.h
+++ clang-tools-extra/clangd/CollectMacros.h
@@ -25,7 +25,8 @@
std::vector<Range> Ranges;
};
-/// Collects macro definitions and expansions in the main file. It is used to:
+/// Collects macro references (e.g. definitions, expansions) in the main file.
+/// It is used to:
/// - collect macros in the preamble section of the main file (in Preamble.cpp)
/// - collect macros after the preamble of the main file (in ParsedAST.cpp)
class CollectMainFileMacros : public PPCallbacks {
@@ -49,6 +50,27 @@
add(MacroName, MD.getMacroInfo());
}
+ void MacroUndefined(const clang::Token &MacroName,
+ const clang::MacroDefinition &MD,
+ const clang::MacroDirective *Undef) override {
+ add(MacroName, MD.getMacroInfo());
+ }
+
+ void Ifdef(SourceLocation Loc, const Token &MacroName,
+ const MacroDefinition &MD) override {
+ add(MacroName, MD.getMacroInfo());
+ }
+
+ void Ifndef(SourceLocation Loc, const Token &MacroName,
+ const MacroDefinition &MD) override {
+ add(MacroName, MD.getMacroInfo());
+ }
+
+ void Defined(const Token &MacroName, const MacroDefinition &MD,
+ SourceRange Range) override {
+ add(MacroName, MD.getMacroInfo());
+ }
+
private:
void add(const Token &MacroNameTok, const MacroInfo *MI) {
if (!InMainFile)
@@ -57,7 +79,7 @@
if (Loc.isMacroID())
return;
- if (auto Range = getTokenRange(SM, LangOpts, MacroNameTok.getLocation())) {
+ if (auto Range = getTokenRange(SM, LangOpts, Loc)) {
Out.Names.insert(MacroNameTok.getIdentifierInfo()->getName());
Out.Ranges.push_back(*Range);
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D68458.223191.patch
Type: text/x-patch
Size: 2615 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20191004/64be5a87/attachment-0001.bin>
More information about the cfe-commits
mailing list