diff options
author | Jonathan Roelofs <jroelofs@jroelofs.com> | 2020-02-25 10:41:32 -0700 |
---|---|---|
committer | Jonathan Roelofs <jroelofs@jroelofs.com> | 2020-03-09 11:32:44 -0600 |
commit | 3486cc014b208df3897cf5656db0d0fdeae26d6b (patch) | |
tree | 5d5e49f1d5489c446dcec6a8d339dd744a9ffa5a /clang-tools-extra/clang-tidy/utils/FileExtensionsUtils.cpp | |
parent | b28ed9cec8dd7225164eb8c0884aa463654ef3fc (diff) | |
download | llvm-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.cpp | 60 |
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 |