From b69ece899d60c5397a884442733c93fa6cf0824b Mon Sep 17 00:00:00 2001 From: Stephane Moore Date: Fri, 14 Dec 2018 03:13:31 +0000 Subject: [PATCH] =?utf8?q?[clang-tidy]=20Improve=20google-objc-function-na?= =?utf8?q?ming=20diagnostics=20=F0=9F=93=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Summary: The diagnostics from google-objc-function-naming check will be more actionable if they provide a brief description of the requirements from the Google Objective-C style guide. The more descriptive diagnostics may help clarify that functions in the global namespace must have an appropriate prefix followed by Pascal case (engineers working previously with static functions might not immediately understand the different requirements of static and non-static functions). Test Notes: Verified against the clang-tidy tests. Reviewers: benhamilton, aaron.ballman Reviewed By: benhamilton Subscribers: MyDeveloperDay, xazax.hun, cfe-commits Differential Revision: https://reviews.llvm.org/D55482 llvm-svn: 349123 --- .../clang-tidy/google/FunctionNamingCheck.cpp | 8 ++++--- .../test/clang-tidy/google-objc-function-naming.m | 27 +++++++++++++++------- .../test/clang-tidy/google-objc-function-naming.mm | 15 +++++++----- 3 files changed, 33 insertions(+), 17 deletions(-) diff --git a/clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp b/clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp index 6d07472..f706470 100644 --- a/clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp +++ b/clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp @@ -110,10 +110,12 @@ void FunctionNamingCheck::registerMatchers(MatchFinder *Finder) { void FunctionNamingCheck::check(const MatchFinder::MatchResult &Result) { const auto *MatchedDecl = Result.Nodes.getNodeAs("function"); + bool IsGlobal = MatchedDecl->getStorageClass() != SC_Static; diag(MatchedDecl->getLocation(), - "function name %0 not using function naming conventions described by " - "Google Objective-C style guide") - << MatchedDecl << generateFixItHint(MatchedDecl); + "%select{static function|function in global namespace}1 named %0 must " + "%select{be in|have an appropriate prefix followed by}1 Pascal case as " + "required by Google Objective-C style guide") + << MatchedDecl << IsGlobal << generateFixItHint(MatchedDecl); } } // namespace objc diff --git a/clang-tools-extra/test/clang-tidy/google-objc-function-naming.m b/clang-tools-extra/test/clang-tidy/google-objc-function-naming.m index 8ca90f0..d0336d2 100644 --- a/clang-tools-extra/test/clang-tidy/google-objc-function-naming.m +++ b/clang-tools-extra/test/clang-tidy/google-objc-function-naming.m @@ -3,28 +3,35 @@ typedef _Bool bool; static bool ispositive(int a) { return a > 0; } -// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: function name 'ispositive' not using function naming conventions described by Google Objective-C style guide +// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: static function named 'ispositive' +// must be in Pascal case as required by Google Objective-C style guide // CHECK-FIXES: static bool Ispositive(int a) { return a > 0; } static bool is_positive(int a) { return a > 0; } -// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: function name 'is_positive' not using function naming conventions described by Google Objective-C style guide +// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: static function named 'is_positive' +// must be in Pascal case as required by Google Objective-C style guide // CHECK-FIXES: static bool IsPositive(int a) { return a > 0; } static bool isPositive(int a) { return a > 0; } -// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: function name 'isPositive' not using function naming conventions described by Google Objective-C style guide +// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: static function named 'isPositive' +// must be in Pascal case as required by Google Objective-C style guide // CHECK-FIXES: static bool IsPositive(int a) { return a > 0; } static bool Is_Positive(int a) { return a > 0; } -// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: function name 'Is_Positive' not using function naming conventions described by Google Objective-C style guide +// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: static function named 'Is_Positive' +// must be in Pascal case as required by Google Objective-C style guide // CHECK-FIXES: static bool IsPositive(int a) { return a > 0; } static bool IsPositive(int a) { return a > 0; } bool ispalindrome(const char *str); -// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: function name 'ispalindrome' not using function naming conventions described by Google Objective-C style guide +// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: function in global namespace named +// 'ispalindrome' must have an appropriate prefix followed by Pascal case as +// required by Google Objective-C style guide static const char *md5(const char *str) { return 0; } -// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: function name 'md5' not using function naming conventions described by Google Objective-C style guide +// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: static function named 'md5' must be +// in Pascal case as required by Google Objective-C style guide // CHECK-FIXES: static const char *Md5(const char *str) { return 0; } static const char *MD5(const char *str) { return 0; } @@ -38,12 +45,16 @@ static const char *DEFFooURL(void) { return "https://clang.llvm.org/"; } static const char *StringFromNSString(id str) { return ""; } void ABLog_String(const char *str); -// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: function name 'ABLog_String' not using function naming conventions described by Google Objective-C style guide +// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: function in global namespace named +// 'ABLog_String' must have an appropriate prefix followed by Pascal case as +// required by Google Objective-C style guide void ABLogString(const char *str); bool IsPrime(int a); -// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: function name 'IsPrime' not using function naming conventions described by Google Objective-C style guide +// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: function in global namespace named +// 'IsPrime' must have an appropriate prefix followed by Pascal case as required +// by Google Objective-C style guide const char *ABURL(void) { return "https://clang.llvm.org/"; } diff --git a/clang-tools-extra/test/clang-tidy/google-objc-function-naming.mm b/clang-tools-extra/test/clang-tidy/google-objc-function-naming.mm index 2e89457..43c2d7e 100644 --- a/clang-tools-extra/test/clang-tidy/google-objc-function-naming.mm +++ b/clang-tools-extra/test/clang-tidy/google-objc-function-naming.mm @@ -1,16 +1,19 @@ // RUN: %check_clang_tidy %s google-objc-function-naming %t void printSomething() {} -// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: function name 'printSomething' not -// using function naming conventions described by Google Objective-C style guide +// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: function in global namespace named +// 'printSomething' must have an appropriate prefix followed by Pascal case as +// required by Google Objective-C style guide void PrintSomething() {} -// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: function name 'PrintSomething' not -// using function naming conventions described by Google Objective-C style guide +// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: function in global namespace named +// 'PrintSomething' must have an appropriate prefix followed by Pascal case as +// required by Google Objective-C style guide void ABCBad_Name() {} -// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: function name 'ABCBad_Name' not -// using function naming conventions described by Google Objective-C style guide +// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: function in global namespace named +// 'ABCBad_Name' must have an appropriate prefix followed by Pascal case as +// required by Google Objective-C style guide namespace { -- 2.7.4