[PATCH] D58095: [clang-tidy] Make google-objc-function-naming ignore implicit functions
stephanemoore added a comment. Thanks for the review! Repository: rCTE Clang Tools Extra CHANGES SINCE LAST ACTION https://reviews.llvm.org/D58095/new/ https://reviews.llvm.org/D58095 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D58095: [clang-tidy] Make google-objc-function-naming ignore implicit functions
This revision was automatically updated to reflect the committed changes. stephanemoore marked an inline comment as done. Closed by commit rCTE354534: [clang-tidy] Make google-objc-function-naming ignore implicit functions (authored by stephanemoore, committed by ). Changed prior to commit: https://reviews.llvm.org/D58095?vs=187512=187693#toc Repository: rCTE Clang Tools Extra CHANGES SINCE LAST ACTION https://reviews.llvm.org/D58095/new/ https://reviews.llvm.org/D58095 Files: clang-tidy/google/FunctionNamingCheck.cpp test/clang-tidy/Inputs/Headers/stdio.h test/clang-tidy/google-objc-function-naming.m Index: clang-tidy/google/FunctionNamingCheck.cpp === --- clang-tidy/google/FunctionNamingCheck.cpp +++ clang-tidy/google/FunctionNamingCheck.cpp @@ -93,12 +93,16 @@ if (!getLangOpts().ObjC) return; - // Match function declarations that are not in system headers and are not - // main. + // Enforce Objective-C function naming conventions on all functions except: + // • Functions defined in system headers. + // • C++ member functions. + // • Namespaced functions. + // • Implicitly defined functions. + // • The main function. Finder->addMatcher( functionDecl( unless(anyOf(isExpansionInSystemHeader(), cxxMethodDecl(), - hasAncestor(namespaceDecl()), isMain(), + hasAncestor(namespaceDecl()), isMain(), isImplicit(), matchesName(validFunctionNameRegex(true)), allOf(isStaticStorageClass(), matchesName(validFunctionNameRegex(false)) Index: test/clang-tidy/google-objc-function-naming.m === --- test/clang-tidy/google-objc-function-naming.m +++ test/clang-tidy/google-objc-function-naming.m @@ -1,4 +1,12 @@ -// RUN: %check_clang_tidy %s google-objc-function-naming %t +// RUN: %check_clang_tidy %s google-objc-function-naming %t -- -- -isystem %S/Inputs/Headers + +#include + +static void TestImplicitFunctionDeclaration(int a) { + // Call a builtin function so that the compiler generates an implicit + // function declaration. + printf("%d", a); +} typedef _Bool bool; Index: test/clang-tidy/Inputs/Headers/stdio.h === --- test/clang-tidy/Inputs/Headers/stdio.h +++ test/clang-tidy/Inputs/Headers/stdio.h @@ -0,0 +1,18 @@ +//===--- stdio.h - Stub header for tests *- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===--===// + +#ifndef _STDIO_H_ +#define _STDIO_H_ + +// A header intended to contain C standard input and output library +// declarations. + +int printf(const char *, ...); + +#endif // _STDIO_H_ + Index: clang-tidy/google/FunctionNamingCheck.cpp === --- clang-tidy/google/FunctionNamingCheck.cpp +++ clang-tidy/google/FunctionNamingCheck.cpp @@ -93,12 +93,16 @@ if (!getLangOpts().ObjC) return; - // Match function declarations that are not in system headers and are not - // main. + // Enforce Objective-C function naming conventions on all functions except: + // • Functions defined in system headers. + // • C++ member functions. + // • Namespaced functions. + // • Implicitly defined functions. + // • The main function. Finder->addMatcher( functionDecl( unless(anyOf(isExpansionInSystemHeader(), cxxMethodDecl(), - hasAncestor(namespaceDecl()), isMain(), + hasAncestor(namespaceDecl()), isMain(), isImplicit(), matchesName(validFunctionNameRegex(true)), allOf(isStaticStorageClass(), matchesName(validFunctionNameRegex(false)) Index: test/clang-tidy/google-objc-function-naming.m === --- test/clang-tidy/google-objc-function-naming.m +++ test/clang-tidy/google-objc-function-naming.m @@ -1,4 +1,12 @@ -// RUN: %check_clang_tidy %s google-objc-function-naming %t +// RUN: %check_clang_tidy %s google-objc-function-naming %t -- -- -isystem %S/Inputs/Headers + +#include + +static void TestImplicitFunctionDeclaration(int a) { + // Call a builtin function so that the compiler generates an implicit + // function declaration. + printf("%d", a); +} typedef _Bool bool; Index: test/clang-tidy/Inputs/Headers/stdio.h === --- test/clang-tidy/Inputs/Headers/stdio.h +++ test/clang-tidy/Inputs/Headers/stdio.h @@ -0,0 +1,18 @@ +//===---
[PATCH] D58095: [clang-tidy] Make google-objc-function-naming ignore implicit functions
aaron.ballman added a comment. Still LGTM, thanks for adding the license snippet! Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D58095/new/ https://reviews.llvm.org/D58095 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D58095: [clang-tidy] Make google-objc-function-naming ignore implicit functions
stephanemoore marked 4 inline comments as done. stephanemoore added inline comments. Comment at: clang-tools-extra/test/clang-tidy/Inputs/Headers/stdio.h:1 +#ifndef _STDIO_H_ +#define _STDIO_H_ aaron.ballman wrote: > aaron.ballman wrote: > > stephanemoore wrote: > > > stephanemoore wrote: > > > > I noticed that some of the other example headers don't have `#ifdef` > > > > guards at all. I decided to still include them—perhaps mostly for my > > > > own sanity. I figured that it wasn't necessary to use the full > > > > `LLVM_CLANG_TOOLS_EXTRA_TEST_CLANG_TIDY_INPUTS_HEADER_STDIO_H` for this > > > > header that is mimicking a system header so I went with the shorter > > > > `_STDIO_H_` which I think better represents what actual stdio.h headers > > > > would have. Let me know if you think something else makes more sense. > > > Do I need the licensing preamble on this test input header? > > Yes, please add it. > I don't think it matters all that much for our tests; I'm fine with the way > you have it currently. Added the licensing preamble. Let me know if anything looks amiss. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D58095/new/ https://reviews.llvm.org/D58095 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D58095: [clang-tidy] Make google-objc-function-naming ignore implicit functions
stephanemoore updated this revision to Diff 187512. stephanemoore added a comment. Added licensing preamble to stdio.h Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D58095/new/ https://reviews.llvm.org/D58095 Files: clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp clang-tools-extra/test/clang-tidy/Inputs/Headers/stdio.h clang-tools-extra/test/clang-tidy/google-objc-function-naming.m Index: clang-tools-extra/test/clang-tidy/google-objc-function-naming.m === --- clang-tools-extra/test/clang-tidy/google-objc-function-naming.m +++ clang-tools-extra/test/clang-tidy/google-objc-function-naming.m @@ -1,4 +1,12 @@ -// RUN: %check_clang_tidy %s google-objc-function-naming %t +// RUN: %check_clang_tidy %s google-objc-function-naming %t -- -- -isystem %S/Inputs/Headers + +#include + +static void TestImplicitFunctionDeclaration(int a) { + // Call a builtin function so that the compiler generates an implicit + // function declaration. + printf("%d", a); +} typedef _Bool bool; Index: clang-tools-extra/test/clang-tidy/Inputs/Headers/stdio.h === --- /dev/null +++ clang-tools-extra/test/clang-tidy/Inputs/Headers/stdio.h @@ -0,0 +1,18 @@ +//===--- stdio.h - Stub header for tests *- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===--===// + +#ifndef _STDIO_H_ +#define _STDIO_H_ + +// A header intended to contain C standard input and output library +// declarations. + +int printf(const char *, ...); + +#endif // _STDIO_H_ + Index: clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp === --- clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp +++ clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp @@ -93,12 +93,16 @@ if (!getLangOpts().ObjC) return; - // Match function declarations that are not in system headers and are not - // main. + // Enforce Objective-C function naming conventions on all functions except: + // • Functions defined in system headers. + // • C++ member functions. + // • Namespaced functions. + // • Implicitly defined functions. + // • The main function. Finder->addMatcher( functionDecl( unless(anyOf(isExpansionInSystemHeader(), cxxMethodDecl(), - hasAncestor(namespaceDecl()), isMain(), + hasAncestor(namespaceDecl()), isMain(), isImplicit(), matchesName(validFunctionNameRegex(true)), allOf(isStaticStorageClass(), matchesName(validFunctionNameRegex(false)) Index: clang-tools-extra/test/clang-tidy/google-objc-function-naming.m === --- clang-tools-extra/test/clang-tidy/google-objc-function-naming.m +++ clang-tools-extra/test/clang-tidy/google-objc-function-naming.m @@ -1,4 +1,12 @@ -// RUN: %check_clang_tidy %s google-objc-function-naming %t +// RUN: %check_clang_tidy %s google-objc-function-naming %t -- -- -isystem %S/Inputs/Headers + +#include + +static void TestImplicitFunctionDeclaration(int a) { + // Call a builtin function so that the compiler generates an implicit + // function declaration. + printf("%d", a); +} typedef _Bool bool; Index: clang-tools-extra/test/clang-tidy/Inputs/Headers/stdio.h === --- /dev/null +++ clang-tools-extra/test/clang-tidy/Inputs/Headers/stdio.h @@ -0,0 +1,18 @@ +//===--- stdio.h - Stub header for tests *- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===--===// + +#ifndef _STDIO_H_ +#define _STDIO_H_ + +// A header intended to contain C standard input and output library +// declarations. + +int printf(const char *, ...); + +#endif // _STDIO_H_ + Index: clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp === --- clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp +++ clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp @@ -93,12 +93,16 @@ if (!getLangOpts().ObjC) return; - // Match function declarations that are not in system headers and are not - // main. + // Enforce Objective-C function naming conventions on all functions except: + // • Functions
[PATCH] D58095: [clang-tidy] Make google-objc-function-naming ignore implicit functions
aaron.ballman accepted this revision. aaron.ballman added a comment. This revision is now accepted and ready to land. LGTM! Comment at: clang-tools-extra/test/clang-tidy/Inputs/Headers/stdio.h:1 +#ifndef _STDIO_H_ +#define _STDIO_H_ stephanemoore wrote: > stephanemoore wrote: > > I noticed that some of the other example headers don't have `#ifdef` guards > > at all. I decided to still include them—perhaps mostly for my own sanity. I > > figured that it wasn't necessary to use the full > > `LLVM_CLANG_TOOLS_EXTRA_TEST_CLANG_TIDY_INPUTS_HEADER_STDIO_H` for this > > header that is mimicking a system header so I went with the shorter > > `_STDIO_H_` which I think better represents what actual stdio.h headers > > would have. Let me know if you think something else makes more sense. > Do I need the licensing preamble on this test input header? Yes, please add it. Comment at: clang-tools-extra/test/clang-tidy/Inputs/Headers/stdio.h:1-9 +#ifndef _STDIO_H_ +#define _STDIO_H_ + +// A header intended to contain C standard input and output library +// declarations. + +int printf(const char *, ...); aaron.ballman wrote: > stephanemoore wrote: > > stephanemoore wrote: > > > I noticed that some of the other example headers don't have `#ifdef` > > > guards at all. I decided to still include them—perhaps mostly for my own > > > sanity. I figured that it wasn't necessary to use the full > > > `LLVM_CLANG_TOOLS_EXTRA_TEST_CLANG_TIDY_INPUTS_HEADER_STDIO_H` for this > > > header that is mimicking a system header so I went with the shorter > > > `_STDIO_H_` which I think better represents what actual stdio.h headers > > > would have. Let me know if you think something else makes more sense. > > Do I need the licensing preamble on this test input header? > Yes, please add it. I don't think it matters all that much for our tests; I'm fine with the way you have it currently. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D58095/new/ https://reviews.llvm.org/D58095 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D58095: [clang-tidy] Make google-objc-function-naming ignore implicit functions
stephanemoore marked an inline comment as done. stephanemoore added inline comments. Comment at: clang-tools-extra/test/clang-tidy/Inputs/Headers/stdio.h:1 +#ifndef _STDIO_H_ +#define _STDIO_H_ stephanemoore wrote: > I noticed that some of the other example headers don't have `#ifdef` guards > at all. I decided to still include them—perhaps mostly for my own sanity. I > figured that it wasn't necessary to use the full > `LLVM_CLANG_TOOLS_EXTRA_TEST_CLANG_TIDY_INPUTS_HEADER_STDIO_H` for this > header that is mimicking a system header so I went with the shorter > `_STDIO_H_` which I think better represents what actual stdio.h headers would > have. Let me know if you think something else makes more sense. Do I need the licensing preamble on this test input header? Comment at: clang-tools-extra/test/clang-tidy/Inputs/Headers/stdio.h:1-9 +#ifndef _STDIO_H_ +#define _STDIO_H_ + +// A header intended to contain C standard input and output library +// declarations. + +int printf(const char *, ...); I noticed that some of the other example headers don't have `#ifdef` guards at all. I decided to still include them—perhaps mostly for my own sanity. I figured that it wasn't necessary to use the full `LLVM_CLANG_TOOLS_EXTRA_TEST_CLANG_TIDY_INPUTS_HEADER_STDIO_H` for this header that is mimicking a system header so I went with the shorter `_STDIO_H_` which I think better represents what actual stdio.h headers would have. Let me know if you think something else makes more sense. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D58095/new/ https://reviews.llvm.org/D58095 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D58095: [clang-tidy] Make google-objc-function-naming ignore implicit functions
stephanemoore added inline comments. Comment at: clang-tools-extra/test/clang-tidy/google-objc-function-naming.m:10 +// function would be declared in a system header. +int printf(const char *, ...); // NOLINT(google-objc-function-naming) + aaron.ballman wrote: > stephanemoore wrote: > > Thus far I have been unsuccessful in using line markers to simulate this > > declaration being in a system header but I did discover precedence for > > using NOLINT to suppress diagnostics in some of the clang-tidy tests: > > https://github.com/llvm/llvm-project/blob/master/clang-tools-extra/test/clang-tidy/google-runtime-int-std.cpp#L11 > > https://github.com/llvm/llvm-project/blob/master/clang-tools-extra/test/clang-tidy/google-runtime-int.cpp#L6 > > > > I think it should be reasonable to suppress the diagnostic here with a > > comment explaining why. Let me know if you don't think that's an > > appropriate solution and I can continue investigating for a potential > > solution using line markers. > Personally, I would recommend adding stdio.h to > extra\test\clang-tidy\Inputs\Headers and adding a `-isystem` to this test's > RUN line. You could also add `#pragma clang system_header` to the file to be > really sure it's treated as a system header. This gives us a place to add > more stdio.h declarations in the future as well. > That sounds like a better idea. Thanks for the suggestion! Things seem to work without needing `#pragma clang system_header` so I left it out. If you want me to include that, I can do so. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D58095/new/ https://reviews.llvm.org/D58095 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D58095: [clang-tidy] Make google-objc-function-naming ignore implicit functions
stephanemoore updated this revision to Diff 186567. stephanemoore marked 2 inline comments as done. stephanemoore added a comment. Add a comment to the new stdio.h. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D58095/new/ https://reviews.llvm.org/D58095 Files: clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp clang-tools-extra/test/clang-tidy/Inputs/Headers/stdio.h clang-tools-extra/test/clang-tidy/google-objc-function-naming.m Index: clang-tools-extra/test/clang-tidy/google-objc-function-naming.m === --- clang-tools-extra/test/clang-tidy/google-objc-function-naming.m +++ clang-tools-extra/test/clang-tidy/google-objc-function-naming.m @@ -1,4 +1,12 @@ -// RUN: %check_clang_tidy %s google-objc-function-naming %t +// RUN: %check_clang_tidy %s google-objc-function-naming %t -- -- -isystem %S/Inputs/Headers + +#include + +static void TestImplicitFunctionDeclaration(int a) { + // Call a builtin function so that the compiler generates an implicit + // function declaration. + printf("%d", a); +} typedef _Bool bool; Index: clang-tools-extra/test/clang-tidy/Inputs/Headers/stdio.h === --- /dev/null +++ clang-tools-extra/test/clang-tidy/Inputs/Headers/stdio.h @@ -0,0 +1,10 @@ +#ifndef _STDIO_H_ +#define _STDIO_H_ + +// A header intended to contain C standard input and output library +// declarations. + +int printf(const char *, ...); + +#endif // _STDIO_H_ + Index: clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp === --- clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp +++ clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp @@ -93,12 +93,16 @@ if (!getLangOpts().ObjC) return; - // Match function declarations that are not in system headers and are not - // main. + // Enforce Objective-C function naming conventions on all functions except: + // • Functions defined in system headers. + // • C++ member functions. + // • Namespaced functions. + // • Implicitly defined functions. + // • The main function. Finder->addMatcher( functionDecl( unless(anyOf(isExpansionInSystemHeader(), cxxMethodDecl(), - hasAncestor(namespaceDecl()), isMain(), + hasAncestor(namespaceDecl()), isMain(), isImplicit(), matchesName(validFunctionNameRegex(true)), allOf(isStaticStorageClass(), matchesName(validFunctionNameRegex(false)) Index: clang-tools-extra/test/clang-tidy/google-objc-function-naming.m === --- clang-tools-extra/test/clang-tidy/google-objc-function-naming.m +++ clang-tools-extra/test/clang-tidy/google-objc-function-naming.m @@ -1,4 +1,12 @@ -// RUN: %check_clang_tidy %s google-objc-function-naming %t +// RUN: %check_clang_tidy %s google-objc-function-naming %t -- -- -isystem %S/Inputs/Headers + +#include + +static void TestImplicitFunctionDeclaration(int a) { + // Call a builtin function so that the compiler generates an implicit + // function declaration. + printf("%d", a); +} typedef _Bool bool; Index: clang-tools-extra/test/clang-tidy/Inputs/Headers/stdio.h === --- /dev/null +++ clang-tools-extra/test/clang-tidy/Inputs/Headers/stdio.h @@ -0,0 +1,10 @@ +#ifndef _STDIO_H_ +#define _STDIO_H_ + +// A header intended to contain C standard input and output library +// declarations. + +int printf(const char *, ...); + +#endif // _STDIO_H_ + Index: clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp === --- clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp +++ clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp @@ -93,12 +93,16 @@ if (!getLangOpts().ObjC) return; - // Match function declarations that are not in system headers and are not - // main. + // Enforce Objective-C function naming conventions on all functions except: + // • Functions defined in system headers. + // • C++ member functions. + // • Namespaced functions. + // • Implicitly defined functions. + // • The main function. Finder->addMatcher( functionDecl( unless(anyOf(isExpansionInSystemHeader(), cxxMethodDecl(), - hasAncestor(namespaceDecl()), isMain(), + hasAncestor(namespaceDecl()), isMain(), isImplicit(), matchesName(validFunctionNameRegex(true)), allOf(isStaticStorageClass(), matchesName(validFunctionNameRegex(false)) ___ cfe-commits mailing list cfe-commits@lists.llvm.org
[PATCH] D58095: [clang-tidy] Make google-objc-function-naming ignore implicit functions
stephanemoore updated this revision to Diff 186566. stephanemoore added a comment. Create a new header stdio.h under //test/clang-tidy/Inputs/Headers/ to contain declaration of `printf` and import the new header to `google-objc-function-naming.m`. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D58095/new/ https://reviews.llvm.org/D58095 Files: clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp clang-tools-extra/test/clang-tidy/Inputs/Headers/stdio.h clang-tools-extra/test/clang-tidy/google-objc-function-naming.m Index: clang-tools-extra/test/clang-tidy/google-objc-function-naming.m === --- clang-tools-extra/test/clang-tidy/google-objc-function-naming.m +++ clang-tools-extra/test/clang-tidy/google-objc-function-naming.m @@ -1,4 +1,12 @@ -// RUN: %check_clang_tidy %s google-objc-function-naming %t +// RUN: %check_clang_tidy %s google-objc-function-naming %t -- -- -isystem %S/Inputs/Headers + +#include + +static void TestImplicitFunctionDeclaration(int a) { + // Call a builtin function so that the compiler generates an implicit + // function declaration. + printf("%d", a); +} typedef _Bool bool; Index: clang-tools-extra/test/clang-tidy/Inputs/Headers/stdio.h === --- /dev/null +++ clang-tools-extra/test/clang-tidy/Inputs/Headers/stdio.h @@ -0,0 +1,7 @@ +#ifndef _STDIO_H_ +#define _STDIO_H_ + +int printf(const char *, ...); + +#endif // _STDIO_H_ + Index: clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp === --- clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp +++ clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp @@ -93,12 +93,16 @@ if (!getLangOpts().ObjC) return; - // Match function declarations that are not in system headers and are not - // main. + // Enforce Objective-C function naming conventions on all functions except: + // • Functions defined in system headers. + // • C++ member functions. + // • Namespaced functions. + // • Implicitly defined functions. + // • The main function. Finder->addMatcher( functionDecl( unless(anyOf(isExpansionInSystemHeader(), cxxMethodDecl(), - hasAncestor(namespaceDecl()), isMain(), + hasAncestor(namespaceDecl()), isMain(), isImplicit(), matchesName(validFunctionNameRegex(true)), allOf(isStaticStorageClass(), matchesName(validFunctionNameRegex(false)) Index: clang-tools-extra/test/clang-tidy/google-objc-function-naming.m === --- clang-tools-extra/test/clang-tidy/google-objc-function-naming.m +++ clang-tools-extra/test/clang-tidy/google-objc-function-naming.m @@ -1,4 +1,12 @@ -// RUN: %check_clang_tidy %s google-objc-function-naming %t +// RUN: %check_clang_tidy %s google-objc-function-naming %t -- -- -isystem %S/Inputs/Headers + +#include + +static void TestImplicitFunctionDeclaration(int a) { + // Call a builtin function so that the compiler generates an implicit + // function declaration. + printf("%d", a); +} typedef _Bool bool; Index: clang-tools-extra/test/clang-tidy/Inputs/Headers/stdio.h === --- /dev/null +++ clang-tools-extra/test/clang-tidy/Inputs/Headers/stdio.h @@ -0,0 +1,7 @@ +#ifndef _STDIO_H_ +#define _STDIO_H_ + +int printf(const char *, ...); + +#endif // _STDIO_H_ + Index: clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp === --- clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp +++ clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp @@ -93,12 +93,16 @@ if (!getLangOpts().ObjC) return; - // Match function declarations that are not in system headers and are not - // main. + // Enforce Objective-C function naming conventions on all functions except: + // • Functions defined in system headers. + // • C++ member functions. + // • Namespaced functions. + // • Implicitly defined functions. + // • The main function. Finder->addMatcher( functionDecl( unless(anyOf(isExpansionInSystemHeader(), cxxMethodDecl(), - hasAncestor(namespaceDecl()), isMain(), + hasAncestor(namespaceDecl()), isMain(), isImplicit(), matchesName(validFunctionNameRegex(true)), allOf(isStaticStorageClass(), matchesName(validFunctionNameRegex(false)) ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D58095: [clang-tidy] Make google-objc-function-naming ignore implicit functions
aaron.ballman added inline comments. Herald added a subscriber: jdoerfert. Comment at: clang-tools-extra/test/clang-tidy/google-objc-function-naming.m:10 +// function would be declared in a system header. +int printf(const char *, ...); // NOLINT(google-objc-function-naming) + stephanemoore wrote: > Thus far I have been unsuccessful in using line markers to simulate this > declaration being in a system header but I did discover precedence for using > NOLINT to suppress diagnostics in some of the clang-tidy tests: > https://github.com/llvm/llvm-project/blob/master/clang-tools-extra/test/clang-tidy/google-runtime-int-std.cpp#L11 > https://github.com/llvm/llvm-project/blob/master/clang-tools-extra/test/clang-tidy/google-runtime-int.cpp#L6 > > I think it should be reasonable to suppress the diagnostic here with a > comment explaining why. Let me know if you don't think that's an appropriate > solution and I can continue investigating for a potential solution using line > markers. Personally, I would recommend adding stdio.h to extra\test\clang-tidy\Inputs\Headers and adding a `-isystem` to this test's RUN line. You could also add `#pragma clang system_header` to the file to be really sure it's treated as a system header. This gives us a place to add more stdio.h declarations in the future as well. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D58095/new/ https://reviews.llvm.org/D58095 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D58095: [clang-tidy] Make google-objc-function-naming ignore implicit functions
stephanemoore marked an inline comment as done. stephanemoore added inline comments. Comment at: clang-tools-extra/test/clang-tidy/google-objc-function-naming.m:10 +// function would be declared in a system header. +int printf(const char *, ...); // NOLINT(google-objc-function-naming) + Thus far I have been unsuccessful in using line markers to simulate this declaration being in a system header but I did discover precedence for using NOLINT to suppress diagnostics in some of the clang-tidy tests: https://github.com/llvm/llvm-project/blob/master/clang-tools-extra/test/clang-tidy/google-runtime-int-std.cpp#L11 https://github.com/llvm/llvm-project/blob/master/clang-tools-extra/test/clang-tidy/google-runtime-int.cpp#L6 I think it should be reasonable to suppress the diagnostic here with a comment explaining why. Let me know if you don't think that's an appropriate solution and I can continue investigating for a potential solution using line markers. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D58095/new/ https://reviews.llvm.org/D58095 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D58095: [clang-tidy] Make google-objc-function-naming ignore implicit functions
stephanemoore created this revision. Herald added subscribers: cfe-commits, xazax.hun. Herald added a project: clang. Implicit functions are outside the control of source authors and should be exempt from style restrictions. Tested via running clang tools tests. This is an amended followup to https://reviews.llvm.org/D57207 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D58095 Files: clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp clang-tools-extra/test/clang-tidy/google-objc-function-naming.m Index: clang-tools-extra/test/clang-tidy/google-objc-function-naming.m === --- clang-tools-extra/test/clang-tidy/google-objc-function-naming.m +++ clang-tools-extra/test/clang-tidy/google-objc-function-naming.m @@ -1,5 +1,20 @@ // RUN: %check_clang_tidy %s google-objc-function-naming %t +// Declare a builtin function so that we can invoke the function below to +// generate an implicit function declaration (we intentionally do not import +// as we cannot guarantee its availability). +// +// google-objc-function-naming is suppressed for this declaration as it must +// match the builtin function declaration. Under normal conditions, this +// function would be declared in a system header. +int printf(const char *, ...); // NOLINT(google-objc-function-naming) + +static void TestImplicitFunctionDeclaration(int a) { + // Call a builtin function so that the compiler generates an implicit + // function declaration. + printf("%d", a); +} + typedef _Bool bool; static bool ispositive(int a) { return a > 0; } Index: clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp === --- clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp +++ clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp @@ -93,12 +93,16 @@ if (!getLangOpts().ObjC) return; - // Match function declarations that are not in system headers and are not - // main. + // Enforce Objective-C function naming conventions on all functions except: + // • Functions defined in system headers. + // • C++ member functions. + // • Namespaced functions. + // • Implicitly defined functions. + // • The main function. Finder->addMatcher( functionDecl( unless(anyOf(isExpansionInSystemHeader(), cxxMethodDecl(), - hasAncestor(namespaceDecl()), isMain(), + hasAncestor(namespaceDecl()), isMain(), isImplicit(), matchesName(validFunctionNameRegex(true)), allOf(isStaticStorageClass(), matchesName(validFunctionNameRegex(false)) Index: clang-tools-extra/test/clang-tidy/google-objc-function-naming.m === --- clang-tools-extra/test/clang-tidy/google-objc-function-naming.m +++ clang-tools-extra/test/clang-tidy/google-objc-function-naming.m @@ -1,5 +1,20 @@ // RUN: %check_clang_tidy %s google-objc-function-naming %t +// Declare a builtin function so that we can invoke the function below to +// generate an implicit function declaration (we intentionally do not import +// as we cannot guarantee its availability). +// +// google-objc-function-naming is suppressed for this declaration as it must +// match the builtin function declaration. Under normal conditions, this +// function would be declared in a system header. +int printf(const char *, ...); // NOLINT(google-objc-function-naming) + +static void TestImplicitFunctionDeclaration(int a) { + // Call a builtin function so that the compiler generates an implicit + // function declaration. + printf("%d", a); +} + typedef _Bool bool; static bool ispositive(int a) { return a > 0; } Index: clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp === --- clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp +++ clang-tools-extra/clang-tidy/google/FunctionNamingCheck.cpp @@ -93,12 +93,16 @@ if (!getLangOpts().ObjC) return; - // Match function declarations that are not in system headers and are not - // main. + // Enforce Objective-C function naming conventions on all functions except: + // • Functions defined in system headers. + // • C++ member functions. + // • Namespaced functions. + // • Implicitly defined functions. + // • The main function. Finder->addMatcher( functionDecl( unless(anyOf(isExpansionInSystemHeader(), cxxMethodDecl(), - hasAncestor(namespaceDecl()), isMain(), + hasAncestor(namespaceDecl()), isMain(), isImplicit(), matchesName(validFunctionNameRegex(true)), allOf(isStaticStorageClass(), matchesName(validFunctionNameRegex(false))