diff options
author | Jonathan Roelofs <jroelofs@jroelofs.com> | 2020-03-10 08:34:34 -0600 |
---|---|---|
committer | Jonathan Roelofs <jroelofs@jroelofs.com> | 2020-03-12 09:59:28 -0600 |
commit | 2c9cf9f4ddd01ae9eb47522266a6343104f9d0b5 (patch) | |
tree | 8de7974c7d2fc3e79e96f41df49e99d66585bd61 /clang-tools-extra/clang-tidy/utils | |
parent | d6883126603393a96f75f6392243fbda394c7d7a (diff) | |
download | llvm-2c9cf9f4ddd01ae9eb47522266a6343104f9d0b5.zip llvm-2c9cf9f4ddd01ae9eb47522266a6343104f9d0b5.tar.gz llvm-2c9cf9f4ddd01ae9eb47522266a6343104f9d0b5.tar.bz2 |
[clang-tidy] New check: bugprone-suspicious-include
Detects and fixes suspicious code like: `#include "foo.cpp"`.
Inspired by: https://twitter.com/lefticus/status/1228458240364687360?s=20
https://reviews.llvm.org/D74669
Diffstat (limited to 'clang-tools-extra/clang-tidy/utils')
-rw-r--r-- | clang-tools-extra/clang-tidy/utils/FileExtensionsUtils.cpp | 15 | ||||
-rw-r--r-- | clang-tools-extra/clang-tidy/utils/FileExtensionsUtils.h | 12 |
2 files changed, 23 insertions, 4 deletions
diff --git a/clang-tools-extra/clang-tidy/utils/FileExtensionsUtils.cpp b/clang-tools-extra/clang-tidy/utils/FileExtensionsUtils.cpp index d6f4b2a..4eaf8bc 100644 --- a/clang-tools-extra/clang-tidy/utils/FileExtensionsUtils.cpp +++ b/clang-tools-extra/clang-tidy/utils/FileExtensionsUtils.cpp @@ -53,13 +53,20 @@ bool parseFileExtensions(StringRef AllFileExtensions, return true; } -bool isFileExtension(StringRef FileName, - const FileExtensionsSet &FileExtensions) { +llvm::Optional<StringRef> +getFileExtension(StringRef FileName, const FileExtensionsSet &FileExtensions) { StringRef Extension = llvm::sys::path::extension(FileName); if (Extension.empty()) - return false; + return llvm::None; // Skip "." prefix. - return FileExtensions.count(Extension.substr(1)) > 0; + if (!FileExtensions.count(Extension.substr(1))) + return llvm::None; + return Extension; +} + +bool isFileExtension(StringRef FileName, + const FileExtensionsSet &FileExtensions) { + return getFileExtension(FileName, FileExtensions).hasValue(); } } // namespace utils diff --git a/clang-tools-extra/clang-tidy/utils/FileExtensionsUtils.h b/clang-tools-extra/clang-tidy/utils/FileExtensionsUtils.h index 43fc573..e5dfae1 100644 --- a/clang-tools-extra/clang-tidy/utils/FileExtensionsUtils.h +++ b/clang-tools-extra/clang-tidy/utils/FileExtensionsUtils.h @@ -11,6 +11,7 @@ #include "clang/Basic/SourceLocation.h" #include "clang/Basic/SourceManager.h" +#include "llvm/ADT/Optional.h" #include "llvm/ADT/SmallSet.h" #include "llvm/ADT/StringRef.h" @@ -36,6 +37,12 @@ bool isSpellingLocInHeaderFile(SourceLocation Loc, SourceManager &SM, /// extensions. inline StringRef defaultHeaderFileExtensions() { return ";h;hh;hpp;hxx"; } +/// Returns recommended default value for the list of implementaiton file +/// extensions. +inline StringRef defaultImplementationFileExtensions() { + return "c;cc;cpp;cxx"; +} + /// Returns recommended default value for the list of file extension /// delimiters. inline StringRef defaultFileExtensionDelimiters() { return ",;"; } @@ -45,6 +52,11 @@ bool parseFileExtensions(StringRef AllFileExtensions, FileExtensionsSet &FileExtensions, StringRef Delimiters); +/// Decides whether a file has a header file extension. +/// Returns the file extension, if included in the provided set. +llvm::Optional<StringRef> +getFileExtension(StringRef FileName, const FileExtensionsSet &FileExtensions); + /// Decides whether a file has one of the specified file extensions. bool isFileExtension(StringRef FileName, const FileExtensionsSet &FileExtensions); |