aboutsummaryrefslogtreecommitdiff
path: root/clang-tools-extra/clang-tidy/utils/FileExtensionsUtils.cpp
diff options
context:
space:
mode:
authorJonathan Roelofs <jroelofs@jroelofs.com>2020-02-25 10:41:32 -0700
committerJonathan Roelofs <jroelofs@jroelofs.com>2020-03-09 11:32:44 -0600
commit3486cc014b208df3897cf5656db0d0fdeae26d6b (patch)
tree5d5e49f1d5489c446dcec6a8d339dd744a9ffa5a /clang-tools-extra/clang-tidy/utils/FileExtensionsUtils.cpp
parentb28ed9cec8dd7225164eb8c0884aa463654ef3fc (diff)
downloadllvm-3486cc014b208df3897cf5656db0d0fdeae26d6b.zip
llvm-3486cc014b208df3897cf5656db0d0fdeae26d6b.tar.gz
llvm-3486cc014b208df3897cf5656db0d0fdeae26d6b.tar.bz2
[clang-tidy] Generalize HeaderFileExtensions.{h,cpp}. NFC
https://reviews.llvm.org/D75489
Diffstat (limited to 'clang-tools-extra/clang-tidy/utils/FileExtensionsUtils.cpp')
-rw-r--r--clang-tools-extra/clang-tidy/utils/FileExtensionsUtils.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-tidy/utils/FileExtensionsUtils.cpp b/clang-tools-extra/clang-tidy/utils/FileExtensionsUtils.cpp
new file mode 100644
index 0000000..c016a72
--- /dev/null
+++ b/clang-tools-extra/clang-tidy/utils/FileExtensionsUtils.cpp
@@ -0,0 +1,60 @@
+//===--- FileExtensionsUtils.cpp - 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.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "FileExtensionsUtils.h"
+#include "clang/Basic/CharInfo.h"
+#include "llvm/Support/Path.h"
+
+namespace clang {
+namespace tidy {
+namespace utils {
+
+bool isExpansionLocInHeaderFile(SourceLocation Loc, const SourceManager &SM,
+ const FileExtensionsSet &HeaderFileExtensions) {
+ SourceLocation ExpansionLoc = SM.getExpansionLoc(Loc);
+ return isFileExtension(SM.getFilename(ExpansionLoc), HeaderFileExtensions);
+}
+
+bool isPresumedLocInHeaderFile(SourceLocation Loc, SourceManager &SM,
+ const FileExtensionsSet &HeaderFileExtensions) {
+ PresumedLoc PresumedLocation = SM.getPresumedLoc(Loc);
+ return isFileExtension(PresumedLocation.getFilename(), HeaderFileExtensions);
+}
+
+bool isSpellingLocInHeaderFile(SourceLocation Loc, SourceManager &SM,
+ const FileExtensionsSet &HeaderFileExtensions) {
+ SourceLocation SpellingLoc = SM.getSpellingLoc(Loc);
+ return isFileExtension(SM.getFilename(SpellingLoc), HeaderFileExtensions);
+}
+
+bool parseFileExtensions(StringRef AllFileExtensions,
+ FileExtensionsSet &FileExtensions, char Delimiter) {
+ SmallVector<StringRef, 5> Suffixes;
+ AllFileExtensions.split(Suffixes, Delimiter);
+ FileExtensions.clear();
+ for (StringRef Suffix : Suffixes) {
+ StringRef Extension = Suffix.trim();
+ if (!llvm::all_of(Extension, isAlphanumeric))
+ return false;
+ FileExtensions.insert(Extension);
+ }
+ return true;
+}
+
+bool isFileExtension(StringRef FileName,
+ const FileExtensionsSet &FileExtensions) {
+ StringRef Extension = llvm::sys::path::extension(FileName);
+ if (Extension.empty())
+ return false;
+ // Skip "." prefix.
+ return FileExtensions.count(Extension.substr(1)) > 0;
+}
+
+} // namespace utils
+} // namespace tidy
+} // namespace clang