diff options
| author | Ben Hamilton <benhamilton@google.com> | 2018-01-05 23:26:06 +0000 |
|---|---|---|
| committer | Ben Hamilton <benhamilton@google.com> | 2018-01-05 23:26:06 +0000 |
| commit | 490811ec3fcd51f18ef8adeb161f0d52002aff7b (patch) | |
| tree | acf401ef76c8ea50c04d6be5031a7aa1f62cf5ba /clang-tools-extra/clang-tidy/google/GlobalVariableDeclarationCheck.cpp | |
| parent | 063e6cc5e70623ee1015912d7d5c4071b586c524 (diff) | |
| download | bcm5719-llvm-490811ec3fcd51f18ef8adeb161f0d52002aff7b.tar.gz bcm5719-llvm-490811ec3fcd51f18ef8adeb161f0d52002aff7b.zip | |
[clang-tidy] Function-scoped static variables should not trigger google-objc-global-variable-declaration
Summary:
google-objc-global-variable-declaration currently triggers on
valid code like:
- (void)foo {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{ /* ... */ });
}
The Google Objective-C style guide says:
http://google.github.io/styleguide/objcguide.html#common-variable-names
> File scope or global variables (as opposed to constants) declared
> outside the scope of a method or function should be rare, and should
> have the prefix g.
which is meant to insinuate that static variables inside a method or
function don't need a special name.
Test Plan: `make -j12 check-clang-tools`
Reviewers: Wizard, hokein, klimek
Reviewed By: Wizard
Subscribers: xazax.hun, cfe-commits
Differential Revision: https://reviews.llvm.org/D41789
llvm-svn: 321914
Diffstat (limited to 'clang-tools-extra/clang-tidy/google/GlobalVariableDeclarationCheck.cpp')
| -rw-r--r-- | clang-tools-extra/clang-tidy/google/GlobalVariableDeclarationCheck.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/clang-tools-extra/clang-tidy/google/GlobalVariableDeclarationCheck.cpp b/clang-tools-extra/clang-tidy/google/GlobalVariableDeclarationCheck.cpp index a278be14958..7507eae8b6e 100644 --- a/clang-tools-extra/clang-tidy/google/GlobalVariableDeclarationCheck.cpp +++ b/clang-tools-extra/clang-tidy/google/GlobalVariableDeclarationCheck.cpp @@ -24,6 +24,10 @@ namespace objc { namespace { +AST_MATCHER(VarDecl, isLocalVariable) { + return Node.isLocalVarDecl(); +} + FixItHint generateFixItHint(const VarDecl *Decl, bool IsConst) { char FC = Decl->getName()[0]; if (!llvm::isAlpha(FC) || Decl->getName().size() == 1) { @@ -57,12 +61,17 @@ void GlobalVariableDeclarationCheck::registerMatchers(MatchFinder *Finder) { // need to add two matchers since we need to bind different ids to distinguish // constants and variables. Since bind() can only be called on node matchers, // we cannot make it in one matcher. + // + // Note that hasGlobalStorage() matches static variables declared locally + // inside a function or method, so we need to exclude those with + // isLocalVariable(). Finder->addMatcher( varDecl(hasGlobalStorage(), unless(hasType(isConstQualified())), - unless(matchesName("::g[A-Z]"))) + unless(isLocalVariable()), unless(matchesName("::g[A-Z]"))) .bind("global_var"), this); Finder->addMatcher(varDecl(hasGlobalStorage(), hasType(isConstQualified()), + unless(isLocalVariable()), unless(matchesName("::k[A-Z]"))) .bind("global_const"), this); |

