[PATCH] D113804: [clang-tidy] Fix behavior of `modernize-use-using` with nested structs/unions
Whisperity via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Nov 26 01:34:33 PST 2021
whisperity added a comment.
`hasParent()` is the //direct// upwards traversal, right? I remember some discussion about matchers like that being potentially costly. But I can't find any description of this, so I guess it's fine, rewriting the matcher to have the opposite logic (`decl(hasDescendant(...the-real-matcher-here...)).bind("blah")`) would just make everything ugly for no tangible benefit.
================
Comment at: clang-tools-extra/clang-tidy/modernize/UseUsingCheck.cpp:29
+ Finder->addMatcher(typedefDecl(unless(isInstantiated()),
+ hasParent(decl().bind("parent-decl")))
+ .bind("typedef"),
----------------
(Nit: Once we have multiple uses of an identifier, it's better to hoist it to a definition and reuse it that way, to prevent future typos introducing arcane issues. Generally, a `static constexpr llvm::StringLiteral` in the TU's global scope, is sufficient for that.)
================
Comment at: clang-tools-extra/clang-tidy/modernize/UseUsingCheck.cpp:50-52
+ if (!ParentDecl) {
+ return;
+ }
----------------
(Style: Elid braces.)
================
Comment at: clang-tools-extra/clang-tidy/modernize/UseUsingCheck.cpp:132-137
bool Invalid;
- Type = std::string(
- Lexer::getSourceText(CharSourceRange::getTokenRange(LastTagDeclRange),
- *Result.SourceManager, getLangOpts(), &Invalid));
+ Type = std::string(Lexer::getSourceText(
+ CharSourceRange::getTokenRange(LastTagDeclRange->second),
+ *Result.SourceManager, getLangOpts(), &Invalid));
if (Invalid)
return;
----------------
(Nit: if the source ranges are invalid, a default constructed `StringRef` is returned, which is empty and converts to a default-constructed `std::string`.)
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D113804/new/
https://reviews.llvm.org/D113804
More information about the cfe-commits
mailing list