[PATCH] D59806: [clang-tidy] Add a check for [super self] in initializers 🔍
Stephane Moore via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Mar 29 15:46:21 PDT 2019
stephanemoore added a comment.
In D59806#1447929 <https://reviews.llvm.org/D59806#1447929>, @jordan_rose wrote:
> I don't think there's ever a reason to call `[super self]`, and doing so through a macro could easily indicate a bug.
Agreed.
The only relatively common usage of -[NSObject self] that I am aware of is through KVC, e.g., to construct a set of distinct objects using array operators:
NSArray *uniqueObjects = [array valueForKeyPath:@"@distinctUnionOfObjects.self"]
I don't recall observing -[NSObject self] used in other situations.
> Diagnostic nitpick: the Objective-C term is "init method", not "initializer".
Good catch. Glancing through the project, I have the impression that there is some inconsistency in the terminology used by different diagnostics and documentation in the project. For example, the ARC documentation on method families <http://clang.llvm.org/docs/AutomaticReferenceCounting.html#method-families> and various tests use the term "init methods". In contrast, -Wobjc-designated-initializers <https://clang.llvm.org/docs/DiagnosticsReference.html#wobjc-designated-initializers> uses the term "initializer". The general pattern //seems// to be that documentation/diagnostics related to ARC use the term "init method" and diagnostics/documentation related to designated initializers use the term "initializer". I had assumed that "initializer" would be more intuitive to readers as this is the term typically used in Apple developer documentation, e.g., Concepts in Objective-C Programming > Object Initialization <https://developer.apple.com/library/archive/documentation/General/Conceptual/CocoaEncyclopedia/Initialization/Initialization.html>.
I believe that "initializer" will be more intuitive because of Apple documentation but I can change to "init method" if that is preferred. Please let me know what your preference is.
================
Comment at: clang-tools-extra/clang-tidy/objc/SuperSelfCheck.cpp:112
+ << Message->getMethodDecl()
+ << FixItHint::CreateReplacement(Message->getSourceRange(),
+ StringRef("[super init]"));
----------------
aaron.ballman wrote:
> This could be dangerous if the `[super self]` construct is in a macro, couldn't it? e.g.,
> ```
> #define DERP self
>
> [super DERP];
> ```
Good point. Let me add some test cases and make sure this is handled properly.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D59806/new/
https://reviews.llvm.org/D59806
More information about the cfe-commits
mailing list