[PATCH] D11572: [Static Analyzer] Checker for OS X / iOS localizability issues
Anna Zaks
zaks.anna at gmail.com
Wed Jul 29 17:50:35 PDT 2015
zaks.anna added inline comments.
================
Comment at: lib/StaticAnalyzer/Checkers/LocalizationChecker.cpp:14
@@ +13,3 @@
+// 2) A syntactic checker that warns against the bad practice of
+// not including a comment in NSLocalizedString macros.
+//
----------------
My quick Google search did not show any mention of this :(
================
Comment at: lib/StaticAnalyzer/Checkers/LocalizationChecker.cpp:202
@@ +201,3 @@
+void NonLocalizedStringChecker::reportLocalizationError(
+ SVal S, const ObjCMethodCall &M, CheckerContext &C,
+ int argumentNumber) const {
----------------
Adding a new transition is more debugging friendly.
================
Comment at: lib/StaticAnalyzer/Checkers/LocalizationChecker.cpp:334
@@ +333,3 @@
+ SVal sv = Call.getReturnValue();
+ if (isAnnotatedAsLocalized(D) || LSF.find(IdentifierName) != LSF.end()) {
+ setLocalizedState(sv, C);
----------------
Ah, I see!
================
Comment at: lib/StaticAnalyzer/Checkers/LocalizationChecker.cpp:366
@@ +365,3 @@
+ Selector S = msg.getSelector();
+ StringRef SelectorName = S.getAsString();
+ assert(!SelectorName.empty());
----------------
I am not sure if we are on the same page.. I would not store/mark this information in the state, but just use the code as part of the check.
================
Comment at: lib/StaticAnalyzer/Checkers/LocalizationChecker.cpp:451
@@ +450,3 @@
+/// checking for (comment) is not used and thus not present in the AST,
+/// so we use Lexer on the original macro call and retrieve the value of
+/// the comment. If it's empty or nil, we raise a warning.
----------------
The point is that this macro can be used inside another, user defined macro where you'd no longer know which argument corresponds to "comment". The only way around that that I see is to only warn when these macros are called directly.
http://reviews.llvm.org/D11572
More information about the cfe-commits
mailing list