PaulkaToast created this revision. PaulkaToast added a reviewer: aaron.ballman. PaulkaToast added a project: clang-tools-extra. Herald added subscribers: cfe-commits, phosek, xazax.hun, mgorny. Herald added a project: clang.
Created a general check for restrict-system-includes under portability as recommend in the comments under D75332 <https://reviews.llvm.org/D75332>. I also fleshed out the user facing documentation to show examples for common use-cases such as allow-list, block-list, and wild carding. In the documentation I noted that this new check was moved out from fuchsia and an alias was created from the old name to the new name to keep everything working. I'm wondering if this is correctly formatted in the release notes. Nothing should change on fuchsia's end, although feel free to add them if a check off is required. (: Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D75786 Files: clang-tools-extra/clang-tidy/fuchsia/CMakeLists.txt clang-tools-extra/clang-tidy/fuchsia/FuchsiaTidyModule.cpp clang-tools-extra/clang-tidy/fuchsia/RestrictSystemIncludesCheck.cpp clang-tools-extra/clang-tidy/fuchsia/RestrictSystemIncludesCheck.h clang-tools-extra/clang-tidy/portability/CMakeLists.txt clang-tools-extra/clang-tidy/portability/PortabilityTidyModule.cpp clang-tools-extra/clang-tidy/portability/RestrictSystemIncludesCheck.cpp clang-tools-extra/clang-tidy/portability/RestrictSystemIncludesCheck.h clang-tools-extra/docs/ReleaseNotes.rst clang-tools-extra/docs/clang-tidy/checks/list.rst clang-tools-extra/docs/clang-tidy/checks/portability-restrict-system-includes.rst clang-tools-extra/test/clang-tidy/checkers/portability-restrict-system-includes-allow.cpp clang-tools-extra/test/clang-tidy/checkers/portability-restrict-system-includes-disallow.cpp clang-tools-extra/test/clang-tidy/checkers/portability-restrict-system-includes-glob.cpp
Index: clang-tools-extra/test/clang-tidy/checkers/portability-restrict-system-includes-glob.cpp =================================================================== --- /dev/null +++ clang-tools-extra/test/clang-tidy/checkers/portability-restrict-system-includes-glob.cpp @@ -0,0 +1,10 @@ +// RUN: %check_clang_tidy %s portability-restrict-system-includes %t \ +// RUN: -- -config="{CheckOptions: [{key: portability-restrict-system-includes.Includes, value: '-*,std*.h'}]}" + +// Test glob functionality: disallow all headers except those that match +// pattern "std*.h". + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: system include string.h not allowed Index: clang-tools-extra/test/clang-tidy/checkers/portability-restrict-system-includes-disallow.cpp =================================================================== --- /dev/null +++ clang-tools-extra/test/clang-tidy/checkers/portability-restrict-system-includes-disallow.cpp @@ -0,0 +1,10 @@ +// RUN: %check_clang_tidy %s portability-restrict-system-includes %t \ +// RUN: -- -config="{CheckOptions: [{key: portability-restrict-system-includes.Includes, value: '-*,stdio.h'}]}" + +// Test allow-list functionality: disallow all but stdio.h. + +#include <stdio.h> +#include <stdlib.h> +// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: system include stdlib.h not allowed +#include <string.h> +// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: system include string.h not allowed Index: clang-tools-extra/test/clang-tidy/checkers/portability-restrict-system-includes-allow.cpp =================================================================== --- /dev/null +++ clang-tools-extra/test/clang-tidy/checkers/portability-restrict-system-includes-allow.cpp @@ -0,0 +1,9 @@ +// RUN: %check_clang_tidy %s portability-restrict-system-includes %t \ +// RUN: -- -config="{CheckOptions: [{key: portability-restrict-system-includes.Includes, value: '*,-stdio.h'}]}" + +// Test block-list functionality: allow all but stdio.h. + +#include <stdio.h> +// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: system include stdio.h not allowed +#include <stdlib.h> +#include <string.h> Index: clang-tools-extra/docs/clang-tidy/checks/portability-restrict-system-includes.rst =================================================================== --- /dev/null +++ clang-tools-extra/docs/clang-tidy/checks/portability-restrict-system-includes.rst @@ -0,0 +1,51 @@ +.. title:: clang-tidy - portability-restrict-system-includes + +portability-restrict-system-includes +==================================== + +Checks to selectively allow or disallow a configurable list of system headers. + +For example: + +In order to **only** allow zlib.h from the system you would set the options to +`-*,zlib.h`. + +.. code-block:: c++ + + #include <curses.h> // Bad: disallowed system header. + #include <openssl/ssl.h> // Bad: disallowed system header. + #include <zlib.h> // Good: allowed system header. + #include "src/myfile.h" // Good: non-system header always allowed. + +In order to allow everything **except** zlib.h from the system you would set +the options to `*,-zlib.h`. + +.. code-block:: c++ + + #include <curses.h> // Good: allowed system header. + #include <openssl/ssl.h> // Good: allowed system header. + #include <zlib.h> // Bad: disallowed system header. + #include "src/myfile.h" // Good: non-system header always allowed. + +Since the opions support globbing you can use wildcarding to allow groups of +headers. + +`-*,openssl/*.h` will allow all openssl headers but disallow all others. + +.. code-block:: c++ + + #include <curses.h> // Bad: disallowed system header. + #include <openssl/ssl.h> // Good: allowed system header. + #include <openssl/rsa.h> // Good: allowed system header. + #include <zlib.h> // Bad: disallowed system header. + #include "src/myfile.h" // Good: non-system header always allowed. + +Options +------- + +.. option:: Includes + + A string containing a comma separated glob list of allowed include + filenames. Similar to the -checks glob list for running clang-tidy itself, + the two wildcard characters are '*' and '-', to include and exclude globs, + respectively. The default is '*', which allows all includes. Index: clang-tools-extra/docs/clang-tidy/checks/list.rst =================================================================== --- clang-tools-extra/docs/clang-tidy/checks/list.rst +++ clang-tools-extra/docs/clang-tidy/checks/list.rst @@ -255,6 +255,7 @@ `performance-type-promotion-in-math-fn <performance-type-promotion-in-math-fn.html>`_, "Yes" `performance-unnecessary-copy-initialization <performance-unnecessary-copy-initialization.html>`_, `performance-unnecessary-value-param <performance-unnecessary-value-param.html>`_, "Yes" + `portability-restrict-system-includes <portability-restrict-system-includes.html>`_, "Yes" `portability-simd-intrinsics <portability-simd-intrinsics.html>`_, `readability-avoid-const-params-in-decls <readability-avoid-const-params-in-decls.html>`_, `readability-braces-around-statements <readability-braces-around-statements.html>`_, "Yes" Index: clang-tools-extra/docs/ReleaseNotes.rst =================================================================== --- clang-tools-extra/docs/ReleaseNotes.rst +++ clang-tools-extra/docs/ReleaseNotes.rst @@ -98,6 +98,15 @@ Finds recursive functions and diagnoses them. +- New :doc:`portability-restrict-system-includes + <clang-tidy/checks/portability-restrict-system-includes>` check. + + Checks to selectively allow or disallow a configurable list of system + headers. + + Moved fuchsia's restrict-system-includes check to portability to allow for + general use. + New check aliases ^^^^^^^^^^^^^^^^^ @@ -111,6 +120,11 @@ :doc:`bugprone-reserved-identifier <clang-tidy/checks/bugprone-reserved-identifier>` was added. +- New alias :doc:`fuchsia-restrict-system-includes + <clang-tidy/checks/fuchsia-restrict-system-includes>` to + :doc:`portability-restrict-system-includes + <clang-tidy/checks/portability-restrict-system-includes>` was added. + Changes in existing checks ^^^^^^^^^^^^^^^^^^^^^^^^^^ Index: clang-tools-extra/clang-tidy/portability/RestrictSystemIncludesCheck.h =================================================================== --- clang-tools-extra/clang-tidy/portability/RestrictSystemIncludesCheck.h +++ clang-tools-extra/clang-tidy/portability/RestrictSystemIncludesCheck.h @@ -1,4 +1,4 @@ -//===--- RestrictSystemIncludesCheck.h - clang-tidy---------- ----*- C++-*-===// +//===--- RestrictSystemIncludesCheck.h - clang-tidy --------------*- C++-*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -6,21 +6,21 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_FUCHSIA_RESTRICTINCLUDESSCHECK_H -#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_FUCHSIA_RESTRICTINCLUDESSCHECK_H +#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_PORTABILITY_RESTRICTINCLUDESSCHECK_H +#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_PORTABILITY_RESTRICTINCLUDESSCHECK_H #include "../ClangTidyCheck.h" #include "../GlobList.h" namespace clang { namespace tidy { -namespace fuchsia { +namespace portability { /// Checks for allowed includes and suggests removal of any others. If no /// includes are specified, the check will exit without issuing any warnings. /// /// For the user-facing documentation see: -/// http://clang.llvm.org/extra/clang-tidy/checks/fuchsia-restrict-system-includes.html +/// http://clang.llvm.org/extra/clang-tidy/checks/portability-restrict-system-includes.html class RestrictSystemIncludesCheck : public ClangTidyCheck { public: RestrictSystemIncludesCheck(StringRef Name, ClangTidyContext *Context) @@ -40,8 +40,8 @@ GlobList AllowedIncludesGlobList; }; -} // namespace fuchsia +} // namespace portability } // namespace tidy } // namespace clang -#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_FUCHSIA_RESTRICTINCLUDESSCHECK_H +#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_PORTABILITY_RESTRICTINCLUDESSCHECK_H \ No newline at end of file Index: clang-tools-extra/clang-tidy/portability/RestrictSystemIncludesCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/portability/RestrictSystemIncludesCheck.cpp +++ clang-tools-extra/clang-tidy/portability/RestrictSystemIncludesCheck.cpp @@ -1,4 +1,4 @@ -//===--- RestrictSystemIncludesCheck.cpp - clang-tidy----------------------===// +//===--- RestrictSystemIncludesCheck.cpp - clang-tidy ---------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -18,7 +18,7 @@ namespace clang { namespace tidy { -namespace fuchsia { +namespace portability { class RestrictedIncludesPPCallbacks : public PPCallbacks { public: @@ -111,6 +111,6 @@ Options.store(Opts, "Includes", AllowedIncludes); } -} // namespace fuchsia +} // namespace portability } // namespace tidy } // namespace clang Index: clang-tools-extra/clang-tidy/portability/PortabilityTidyModule.cpp =================================================================== --- clang-tools-extra/clang-tidy/portability/PortabilityTidyModule.cpp +++ clang-tools-extra/clang-tidy/portability/PortabilityTidyModule.cpp @@ -9,6 +9,7 @@ #include "../ClangTidy.h" #include "../ClangTidyModule.h" #include "../ClangTidyModuleRegistry.h" +#include "RestrictSystemIncludesCheck.h" #include "SIMDIntrinsicsCheck.h" namespace clang { @@ -18,6 +19,8 @@ class PortabilityModule : public ClangTidyModule { public: void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override { + CheckFactories.registerCheck<RestrictSystemIncludesCheck>( + "portability-restrict-system-includes"); CheckFactories.registerCheck<SIMDIntrinsicsCheck>( "portability-simd-intrinsics"); } Index: clang-tools-extra/clang-tidy/portability/CMakeLists.txt =================================================================== --- clang-tools-extra/clang-tidy/portability/CMakeLists.txt +++ clang-tools-extra/clang-tidy/portability/CMakeLists.txt @@ -2,6 +2,7 @@ add_clang_library(clangTidyPortabilityModule PortabilityTidyModule.cpp + RestrictSystemIncludesCheck.cpp SIMDIntrinsicsCheck.cpp LINK_LIBS Index: clang-tools-extra/clang-tidy/fuchsia/FuchsiaTidyModule.cpp =================================================================== --- clang-tools-extra/clang-tidy/fuchsia/FuchsiaTidyModule.cpp +++ clang-tools-extra/clang-tidy/fuchsia/FuchsiaTidyModule.cpp @@ -10,11 +10,11 @@ #include "../ClangTidyModule.h" #include "../ClangTidyModuleRegistry.h" #include "../google/UnnamedNamespaceInHeaderCheck.h" +#include "../portability/RestrictSystemIncludesCheck.h" #include "DefaultArgumentsCallsCheck.h" #include "DefaultArgumentsDeclarationsCheck.h" #include "MultipleInheritanceCheck.h" #include "OverloadedOperatorCheck.h" -#include "RestrictSystemIncludesCheck.h" #include "StaticallyConstructedObjectsCheck.h" #include "TrailingReturnCheck.h" #include "VirtualInheritanceCheck.h" @@ -39,7 +39,7 @@ "fuchsia-multiple-inheritance"); CheckFactories.registerCheck<OverloadedOperatorCheck>( "fuchsia-overloaded-operator"); - CheckFactories.registerCheck<RestrictSystemIncludesCheck>( + CheckFactories.registerCheck<portability::RestrictSystemIncludesCheck>( "fuchsia-restrict-system-includes"); CheckFactories.registerCheck<StaticallyConstructedObjectsCheck>( "fuchsia-statically-constructed-objects"); Index: clang-tools-extra/clang-tidy/fuchsia/CMakeLists.txt =================================================================== --- clang-tools-extra/clang-tidy/fuchsia/CMakeLists.txt +++ clang-tools-extra/clang-tidy/fuchsia/CMakeLists.txt @@ -6,7 +6,6 @@ FuchsiaTidyModule.cpp MultipleInheritanceCheck.cpp OverloadedOperatorCheck.cpp - RestrictSystemIncludesCheck.cpp StaticallyConstructedObjectsCheck.cpp TrailingReturnCheck.cpp VirtualInheritanceCheck.cpp @@ -18,5 +17,6 @@ clangLex clangTidy clangTidyGoogleModule + clangTidyPortabilityModule clangTidyUtils )
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits