[clang-tidy] Use ; as separator for HeaderFileExtensions

... and deprecate use of ',' for the same.

https://reviews.llvm.org/D75621
This commit is contained in:
Jonathan Roelofs 2020-03-04 09:55:03 -07:00
parent 3486cc014b
commit 47caa69120
13 changed files with 61 additions and 33 deletions

View file

@ -32,7 +32,8 @@ DynamicStaticInitializersCheck::DynamicStaticInitializersCheck(StringRef Name,
RawStringHeaderFileExtensions(Options.getLocalOrGlobal(
"HeaderFileExtensions", utils::defaultHeaderFileExtensions())) {
if (!utils::parseFileExtensions(RawStringHeaderFileExtensions,
HeaderFileExtensions, ',')) {
HeaderFileExtensions,
utils::defaultFileExtensionDelimiters())) {
llvm::errs() << "Invalid header file extension: "
<< RawStringHeaderFileExtensions << "\n";
}

View file

@ -19,11 +19,12 @@ namespace bugprone {
/// Finds dynamically initialized static variables in header files.
///
/// The check supports these options:
/// - `HeaderFileExtensions`: a comma-separated list of filename extensions of
/// header files (The filename extensions should not contain "." prefix).
/// "h,hh,hpp,hxx" by default.
/// - `HeaderFileExtensions`: a semicolon-separated list of filename
/// extensions of header files (The filename extensions should not contain
/// "." prefix). ";h;hh;hpp;hxx" by default.
//
/// For extension-less header files, using an empty string or leaving an
/// empty string between "," if there are other filename extensions.
/// empty string between ";" if there are other filename extensions.
class DynamicStaticInitializersCheck : public ClangTidyCheck {
public:
DynamicStaticInitializersCheck(StringRef Name, ClangTidyContext *Context);

View file

@ -25,7 +25,8 @@ GlobalNamesInHeadersCheck::GlobalNamesInHeadersCheck(StringRef Name,
RawStringHeaderFileExtensions(Options.getLocalOrGlobal(
"HeaderFileExtensions", utils::defaultHeaderFileExtensions())) {
if (!utils::parseFileExtensions(RawStringHeaderFileExtensions,
HeaderFileExtensions, ',')) {
HeaderFileExtensions,
utils::defaultFileExtensionDelimiters())) {
llvm::errs() << "Invalid header file extension: "
<< RawStringHeaderFileExtensions << "\n";
}

View file

@ -21,11 +21,12 @@ namespace readability {
/// Right now it only triggers on using declarations and directives.
///
/// The check supports these options:
/// - `HeaderFileExtensions`: a comma-separated list of filename extensions
/// of header files (the filename extensions should not contain "." prefix).
/// "h" by default.
/// - `HeaderFileExtensions`: a semicolon-separated list of filename
/// extensions of header files (the filename extensions should not contain
/// "." prefix). ";h;hh;hpp;hxx" by default.
///
/// For extension-less header files, using an empty string or leaving an
/// empty string between "," if there are other filename extensions.
/// empty string between ";" if there are other filename extensions.
class GlobalNamesInHeadersCheck : public ClangTidyCheck {
public:
GlobalNamesInHeadersCheck(StringRef Name, ClangTidyContext *Context);

View file

@ -24,7 +24,8 @@ UnnamedNamespaceInHeaderCheck::UnnamedNamespaceInHeaderCheck(
RawStringHeaderFileExtensions(Options.getLocalOrGlobal(
"HeaderFileExtensions", utils::defaultHeaderFileExtensions())) {
if (!utils::parseFileExtensions(RawStringHeaderFileExtensions,
HeaderFileExtensions, ',')) {
HeaderFileExtensions,
utils::defaultFileExtensionDelimiters())) {
llvm::errs() << "Invalid header file extension: "
<< RawStringHeaderFileExtensions << "\n";
}

View file

@ -20,11 +20,12 @@ namespace build {
/// Finds anonymous namespaces in headers.
///
/// The check supports these options:
/// - `HeaderFileExtensions`: a comma-separated list of filename extensions of
/// header files (The filename extensions should not contain "." prefix).
/// "h,hh,hpp,hxx" by default.
/// - `HeaderFileExtensions`: a semicolon-separated list of filename
/// extensions of header files (The filename extensions should not contain
/// "." prefix). ";h;hh;hpp;hxx" by default.
///
/// For extension-less header files, using an empty string or leaving an
/// empty string between "," if there are other filename extensions.
/// empty string between ";" if there are other filename extensions.
///
/// https://google.github.io/styleguide/cppguide.html#Namespaces
///

View file

@ -19,11 +19,12 @@ namespace llvm_check {
/// For the user-facing documentation see:
/// http://clang.llvm.org/extra/clang-tidy/checks/llvm-header-guard.html
/// The check supports these options:
/// - `HeaderFileExtensions`: a comma-separated list of filename extensions of
/// header files (The filename extension should not contain "." prefix).
/// ",h,hh,hpp,hxx" by default.
/// - `HeaderFileExtensions`: a semicolon-separated list of filename
/// extensions of header files (The filename extension should not contain
/// "." prefix). ";h;hh;hpp;hxx" by default.
///
/// For extension-less header files, using an empty string or leaving an
/// empty string between "," if there are other filename extensions.
/// empty string between ";" if there are other filename extensions.
class LLVMHeaderGuardCheck : public utils::HeaderGuardCheck {
public:
LLVMHeaderGuardCheck(StringRef Name, ClangTidyContext *Context);

View file

@ -34,7 +34,8 @@ DefinitionsInHeadersCheck::DefinitionsInHeadersCheck(StringRef Name,
RawStringHeaderFileExtensions(Options.getLocalOrGlobal(
"HeaderFileExtensions", utils::defaultHeaderFileExtensions())) {
if (!utils::parseFileExtensions(RawStringHeaderFileExtensions,
HeaderFileExtensions, ',')) {
HeaderFileExtensions,
utils::defaultFileExtensionDelimiters())) {
// FIXME: Find a more suitable way to handle invalid configuration
// options.
llvm::errs() << "Invalid header file extension: "

View file

@ -22,11 +22,12 @@ namespace misc {
/// The check supports these options:
/// - `UseHeaderFileExtension`: Whether to use file extension to distinguish
/// header files. True by default.
/// - `HeaderFileExtensions`: a comma-separated list of filename extensions of
/// header files (The filename extension should not contain "." prefix).
/// ",h,hh,hpp,hxx" by default.
/// - `HeaderFileExtensions`: a semicolon-separated list of filename
/// extensions of header files (The filename extension should not contain
/// "." prefix). ";h;hh;hpp;hxx" by default.
///
/// For extension-less header files, using an empty string or leaving an
/// empty string between "," if there are other filename extensions.
/// empty string between ";" if there are other filename extensions.
///
/// For the user-facing documentation see:
/// http://clang.llvm.org/extra/clang-tidy/checks/misc-definitions-in-headers.html

View file

@ -33,9 +33,16 @@ bool isSpellingLocInHeaderFile(SourceLocation Loc, SourceManager &SM,
}
bool parseFileExtensions(StringRef AllFileExtensions,
FileExtensionsSet &FileExtensions, char Delimiter) {
FileExtensionsSet &FileExtensions,
StringRef Delimiters) {
SmallVector<StringRef, 5> Suffixes;
AllFileExtensions.split(Suffixes, Delimiter);
for (char Delimiter : Delimiters) {
if (AllFileExtensions.contains(Delimiter)) {
AllFileExtensions.split(Suffixes, Delimiter);
break;
}
}
FileExtensions.clear();
for (StringRef Suffix : Suffixes) {
StringRef Extension = Suffix.trim();

View file

@ -34,11 +34,16 @@ bool isSpellingLocInHeaderFile(SourceLocation Loc, SourceManager &SM,
/// Returns recommended default value for the list of header file
/// extensions.
inline StringRef defaultHeaderFileExtensions() { return ",h,hh,hpp,hxx"; }
inline StringRef defaultHeaderFileExtensions() { return ";h;hh;hpp;hxx"; }
/// Returns recommended default value for the list of file extension
/// delimiters.
inline StringRef defaultFileExtensionDelimiters() { return ",;"; }
/// Parses header file extensions from a semicolon-separated list.
bool parseFileExtensions(StringRef AllFileExtensions,
FileExtensionsSet &FileExtensions, char Delimiter);
FileExtensionsSet &FileExtensions,
StringRef Delimiters);
/// Decides whether a file has one of the specified file extensions.
bool isFileExtension(StringRef FileName,

View file

@ -18,11 +18,12 @@ namespace utils {
/// Finds and fixes header guards.
/// The check supports these options:
/// - `HeaderFileExtensions`: a comma-separated list of filename extensions of
/// header files (The filename extension should not contain "." prefix).
/// ",h,hh,hpp,hxx" by default.
/// - `HeaderFileExtensions`: a semicolon-separated list of filename
/// extensions of header files (The filename extension should not contain
/// "." prefix). ";h;hh;hpp;hxx" by default.
///
/// For extension-less header files, using an empty string or leaving an
/// empty string between "," if there are other filename extensions.
/// empty string between ";" if there are other filename extensions.
class HeaderGuardCheck : public ClangTidyCheck {
public:
HeaderGuardCheck(StringRef Name, ClangTidyContext *Context)
@ -30,7 +31,8 @@ public:
RawStringHeaderFileExtensions(Options.getLocalOrGlobal(
"HeaderFileExtensions", utils::defaultHeaderFileExtensions())) {
utils::parseFileExtensions(RawStringHeaderFileExtensions,
HeaderFileExtensions, ',');
HeaderFileExtensions,
utils::defaultFileExtensionDelimiters());
}
void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP,
Preprocessor *ModuleExpanderPP) override;

View file

@ -125,6 +125,11 @@ Changes in existing checks
check now detects in class initializers and constructor initializers which
are deemed to be redundant.
- Checks supporting the ``HeaderFileExtensions`` flag now support ``;`` as a
delimiter in addition to ``,``, with the latter being deprecated as of this
release. This simplifies how one specifies the options on the command line:
``--config="{CheckOptions: [{ key: HeaderFileExtensions, value: h;;hpp;hxx }]}"``
Renamed checks
^^^^^^^^^^^^^^